Name: series-workflowf7ntb Phase: Failed StartedAt: 2026-09-03 01:07:46 +0000 UTC FinishedAt: 2026-09-03 01:27:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf7ntb[0] Phase: Succeeded StartedAt: 2026-09-03 01:07:46 +0000 UTC FinishedAt: 2026-09-03 01:26:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf7ntb[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 01:07:46 +0000 UTC FinishedAt: 2026-09-03 01:26:55 +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+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIFJlbmVzYXMgRXRoZXJuZXQgQVZCIChSQVZCKSBwbGF0Zm9ybSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl8qKSwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gUmVuZXNhcyBSLUNhciBhbmQgUlogU29DcyBhbmQgcmVxdWlyZXMgcGh5c2ljYWwgU29DIGhhcmR3YXJlIG5vdCBhdmFpbGFibGUgb3IgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWFhZWFlYjA3NjRjNjc3ODgyM2FkMjNjM2QzYmZiNDY2MjJmYzhiMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDE6MjY6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMsZXRoZXJhdmIueWFtbFxuaW5kZXggMWUwMGVmNWIzYWNkYS4uZmFkMDAyNDkyNDIxYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMsZXRoZXJhdmIueWFtbFxuQEAgLTk3LDYgJiM0Mzs5Nyw4IEBAIHByb3BlcnRpZXM6XG4gXG4gICBwaHktaGFuZGxlOiB0cnVlXG4gXG4mIzQzOyAgcHRwLXRpbWVyOiB0cnVlXG4mIzQzO1xuICAgJiMzOTsjYWRkcmVzcy1jZWxscyYjMzk7OlxuICAgICBkZXNjcmlwdGlvbjogTnVtYmVyIG9mIGFkZHJlc3MgY2VsbHMgZm9yIHRoZSBNRElPIGJ1cy5cbiAgICAgY29uc3Q6IDFcbkBAIC0zMDUsNiAmIzQzOzMwNywxNSBAQCBhbGxPZjpcbiAgICAgICAgICAgICBpdGVtczpcbiAgICAgICAgICAgICAgIC0gY29uc3Q6IGZja1xuICAgICAgICAgICAgICAgLSBjb25zdDogcmVmY2xrXG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgbm90OlxuJiM0MzsgICAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgICBjb250YWluczpcbiYjNDM7ICAgICAgICAgICAgICBjb25zdDogcmVuZXNhcyxldGhlcmF2Yi1yY2FyLWdlbjRcbiYjNDM7ICAgIHRoZW46XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgcHRwLXRpbWVyOiBmYWxzZVxuIFxuIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmhcbmluZGV4IDNlZTRjNjEwODE4OTAuLjVkMzViNDBkN2M1ODQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmhcbkBAIC0yNDksNiAmIzQzOzI0OSw4IEBAIGVudW0gQVBTUl9CSVQge1xuIFx0QVBTUl9SRE1cdD0gMHgwMDAwMjAwMCxcbiBcdEFQU1JfVERNXHQ9IDB4MDAwMDQwMDAsXG4gXHRBUFNSX01JSVNFTEVDVFx0PSAweDAxMDAwMDAwLFx0LyogUi1DYXIgVjRNIG9ubHkgKi9cbiYjNDM7XHRBUFNSX0dQVFBUSU1FUl9TT1VSQ0UgPSBCSVQoMjUpLCAvKiBHZW40ICovXG4mIzQzO1x0QVBTUl9HUFRQQ0xPQ0tcdD0gQklUKDI5KSxcdC8qIEdlbjQgKi9cbiB9O1xuIFxuIC8qIFJDUiAqL1xuQEAgLTEwMjgsMTMgJiM0MzsxMDMwLDM3IEBAIHN0cnVjdCByYXZiX3B0cF9wZXJvdXQge1xuIHN0cnVjdCByYXZiX3B0cCB7XG4gXHRzdHJ1Y3QgcHRwX2Nsb2NrICpjbG9jaztcbiBcdHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBpbmZvO1xuLVx0aW50IHBoY19pbmRleDtcbiBcdHUzMiBkZWZhdWx0X2FkZGVuZDtcbiBcdHUzMiBjdXJyZW50X2FkZGVuZDtcbiBcdGludCBleHR0c1tOX0VYVF9UU107XG4gXHRzdHJ1Y3QgcmF2Yl9wdHBfcGVyb3V0IHBlcm91dFtOX1BFUl9PVVRdO1xuIH07XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gLSBQbGF0Zm9ybSBzcGVjaWZpYyBnUFRQIGJlaGF2aW9yXG4mIzQzOyAqXG4mIzQzOyAqIEVhY2ggZ2VuZXJhdGlvbiBvZiBSQVZCIGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IGJlaGF2aW9ycyB3aGVuIGludGVyYWN0aW5nXG4mIzQzOyAqIHdpdGggdGhlIGdQVFAgY2xvY2suIFRoaXMgc3RydWN0IHByb3ZpZGVzIHRoZSBjYWxsYmFja3MgdG8gYmUgY2FsbGVkIGF0XG4mIzQzOyAqIGNyaXRpY2FsIHBvaW50cyBpbiB0aGUgUkFWQiBkcml2ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIEBwcm9iZTpcdFx0UHJvYmUgdGhlIGdQVFAgY2xvY2tcbiYjNDM7ICogQGNsb2NrX2luZGV4Olx0R2V0IHRoZSBQVFAgY2xvY2sgaW5kZXgsIGlmIGFueVxuJiM0MzsgKiBAc2V0X2NvbmZpZ19tb2RlOlx0RW50ZXIgY29uZmlnIG1vZGVcbiYjNDM7ICogQGRtYWNfc3RhcnQ6XHRcdENhbGxlZCB3aGVuIHRoZSBETUFDIHN0YXJ0c1xuJiM0MzsgKiBAZG1hY19zdG9wOlx0XHRDYWxsZWQgd2hlbiB0aGUgRE1BQyBzdG9wc1xuJiM0MzsgKiBAbmRldl9vcGVuOlx0XHRDYWxsZWQgd2hlbiB0aGUgbmRldiBpcyBvcGVuZWRcbiYjNDM7ICogQG5kZXZfY2xvc2U6XHRcdENhbGxlZCB3aGVuIHRoZSBuZGV2IGlzIGNsb3NlZFxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHJhdmJfZ3B0cF9pbmZvIHtcbiYjNDM7XHRpbnQgKCpwcm9iZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuJiM0MztcdGludCAoKmNsb2NrX2luZGV4KShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4mIzQzO1x0aW50ICgqc2V0X2NvbmZpZ19tb2RlKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4mIzQzO1x0aW50ICgqZG1hY19zdGFydCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuJiM0MztcdHZvaWQgKCpkbWFjX3N0b3ApKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbiYjNDM7XHRpbnQgKCpuZGV2X29wZW4pKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbiYjNDM7XHR2b2lkICgqbmRldl9jbG9zZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgcmF2Yl9od19pbmZvIHtcbiBcdGludCAoKnJlY2VpdmUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgYnVkZ2V0LCBpbnQgcSk7XG4gXHR2b2lkICgqc2V0X3JhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbkBAIC0xMDUzLDYgJiM0MzsxMDc5LDcgQEAgc3RydWN0IHJhdmJfaHdfaW5mbyB7XG4gXHR1MzIgcnhfYnVmZmVyX3NpemU7XG4gXHR1MzIgcnhfZGVzY19zaXplO1xuIFx0dTMyIGRiYXRfZW50cnlfbnVtO1xuJiM0MztcdGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyAqcHRwOyAvKiBDYWxsYmFja3MgdG8gaGFuZGxlIGdQVFAgaW50ZXJhY3Rpb25zLiAqL1xuIFx0dW5zaWduZWQgYWxpZ25lZF90eDogMTtcbiBcdHVuc2lnbmVkIGNvYWxlc2NlX2lycXM6MTtcdC8qIE5lZWRzIHNvZnR3YXJlIElSUSBjb2FsZXNjaW5nICovXG4gXG5AQCAtMTA2Myw5ICYjNDM7MTA5MCw2IEBAIHN0cnVjdCByYXZiX2h3X2luZm8ge1xuIFx0dW5zaWduZWQgbXVsdGlfaXJxczoxO1x0XHQvKiBBVkItRE1BQyBhbmQgRS1NQUMgaGFzIG11bHRpcGxlIGlycXMgKi9cbiBcdHVuc2lnbmVkIGlycV9lbl9kaXM6MTtcdFx0LyogSGFzIHNlcGFyYXRlIGlycSBlbmFibGUgYW5kIGRpc2FibGUgcmVncyAqL1xuIFx0dW5zaWduZWQgZXJyX21nbXRfaXJxczoxO1x0LyogTGluZTEgKEVycikgYW5kIExpbmUyIChNZ210KSBpcnFzIGFyZSBzZXBhcmF0ZSAqL1xuLVx0dW5zaWduZWQgZ3B0cDoxO1x0XHQvKiBBVkItRE1BQyBoYXMgZ1BUUCBzdXBwb3J0ICovXG4tXHR1bnNpZ25lZCBjY2NfZ2FjOjE7XHRcdC8qIEFWQi1ETUFDIGhhcyBnUFRQIHN1cHBvcnQgYWN0aXZlIGluIGNvbmZpZyBtb2RlICovXG4tXHR1bnNpZ25lZCBncHRwX3JlZl9jbGs6MTtcdC8qIGdQVFAgaGFzIHNlcGFyYXRlIHJlZmVyZW5jZSBjbG9jayAqL1xuIFx0dW5zaWduZWQgbmNfcXVldWVzOjE7XHRcdC8qIEFWQi1ETUFDIGhhcyBSWCBhbmQgVFggTkMgcXVldWVzICovXG4gXHR1bnNpZ25lZCBtYWdpY19wa3Q6MTtcdFx0LyogRS1NQUMgc3VwcG9ydHMgbWFnaWMgcGFja2V0IGRldGVjdGlvbiAqL1xuIFx0dW5zaWduZWQgaGFsZl9kdXBsZXg6MTtcdFx0LyogRS1NQUMgc3VwcG9ydHMgaGFsZiBkdXBsZXggbW9kZSAqL1xuQEAgLTExMTAsNiAmIzQzOzExMzQsNyBAQCBzdHJ1Y3QgcmF2Yl9wcml2YXRlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgdHNfc2tiX2xpc3Q7XG4gXHR1MzIgdHNfc2tiX3RhZztcbiBcdHN0cnVjdCByYXZiX3B0cCBwdHA7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpvZl9ncHRwO1x0LyogUmVmZXJlbmNlIHRvIGV4dGVybmFsIGdQVFAgY2xvY2ssIGlmIGFueS4gKi9cbiBcdHNwaW5sb2NrX3QgbG9jaztcdFx0LyogUmVnaXN0ZXIgYWNjZXNzIGxvY2sgKi9cbiBcdHUzMiBjdXJfcnhbTlVNX1JYX1FVRVVFXTtcdC8qIENvbnN1bWVyIHJpbmcgaW5kaWNlcyAqL1xuIFx0dTMyIGRpcnR5X3J4W05VTV9SWF9RVUVVRV07XHQvKiBQcm9kdWNlciByaW5nIGluZGljZXMgKi9cbkBAIC0xMTYzLDcgJiM0MzsxMTg4LDcgQEAgdm9pZCByYXZiX21vZGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSByYXZiX3JlZyByZWcsIHUzMiBjbGVhcixcbiBpbnQgcmF2Yl93YWl0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHJhdmJfcmVnIHJlZywgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7XG4gXG4gdm9pZCByYXZiX3B0cF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuLXZvaWQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7XG4mIzQzO2ludCByYXZiX3B0cF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbiB2b2lkIHJhdmJfcHRwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuIFxuICNlbmRpZlx0LyogI2lmbmRlZiBfX1JBVkJfSF9fICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmNcbmluZGV4IGVhMWM3ZTUzNjc5MWUuLjY2YzljZDE1YTE5ZTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jXG5AQCAtNzA3LDcgJiM0Mzs3MDcsMTUgQEAgc3RhdGljIGludCByYXZiX2RtYWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuIFx0LyogU2V0dGluZyB0aGUgY29udHJvbCB3aWxsIHN0YXJ0IHRoZSBBVkItRE1BQyBwcm9jZXNzLiAqL1xuLVx0cmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX09QRVJBVElPTik7XG4mIzQzO1x0ZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19PUEVSQVRJT04pO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0LyogSW5pdGlhbGlzZSBQVFAgQ2xvY2sgZHJpdmVyICovXG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXB0cC1cdTAwM2VkbWFjX3N0YXJ0KVxuJiM0MztcdFx0cmV0dXJuIGluZm8tXHUwMDNlcHRwLVx1MDAzZWRtYWNfc3RhcnQobmRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCByYXZiX2dldF90eF90c3RhbXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG5AQCAtMTExNSw2ICYjNDM7MTEyMywxMCBAQCBzdGF0aWMgaW50IHJhdmJfc3RvcF9kbWEoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRcdFx0bmV0ZGV2X2VycihuZGV2LCBcJiMzNDtmYWlsZWQgdG8gc3RvcCBBWEkgQlVTXFxuXCYjMzQ7KTtcbiBcdH1cbiBcbiYjNDM7XHQvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi9cbiYjNDM7XHRpZiAoaW5mby1cdTAwM2VwdHAgXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNlcHRwLVx1MDAzZWRtYWNfc3RvcClcbiYjNDM7XHRcdGluZm8tXHUwMDNlcHRwLVx1MDAzZWRtYWNfc3RvcChuZGV2KTtcbiYjNDM7XG4gXHQvKiBTdG9wIEFWQi1ETUFDIHByb2Nlc3MgKi9cbiBcdHJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpO1xuIH1cbkBAIC0xNzE5LDkgJiM0MzsxNzMxLDcgQEAgc3RhdGljIGludCByYXZiX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXG4gXHRpZiAobmV0aWZfcnVubmluZyhuZGV2KSkge1xuIFx0XHRuZXRpZl9kZXZpY2VfZGV0YWNoKG5kZXYpO1xuLVx0XHQvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi9cbi1cdFx0aWYgKGluZm8tXHUwMDNlZ3B0cClcbi1cdFx0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuJiM0MztcbiBcdFx0LyogV2FpdCBmb3IgRE1BIHN0b3BwaW5nICovXG4gXHRcdGVycm9yID0gcmF2Yl9zdG9wX2RtYShuZGV2KTtcbiBcdFx0aWYgKGVycm9yKSB7XG5AQCAtMTc1MiwxMCAmIzQzOzE3NjIsNiBAQCBzdGF0aWMgaW50IHJhdmJfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcbiBcdFx0cmF2Yl9lbWFjX2luaXQobmRldik7XG4gXG4tXHRcdC8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0XHRpZiAoaW5mby1cdTAwM2VncHRwKVxuLVx0XHRcdHJhdmJfcHRwX2luaXQobmRldiwgcHJpdi1cdTAwM2VwZGV2KTtcbi1cbiBcdFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTtcbiBcdH1cbiBcbkBAIC0xNzY3LDggJiM0MzsxNzczLDEzIEBAIHN0YXRpYyBpbnQgcmF2Yl9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiB7XG4gXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHRjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvICpod19pbmZvID0gcHJpdi1cdTAwM2VpbmZvO1xuJiM0MztcdGludCBpbmRleCA9IC0xO1xuJiM0MztcbiYjNDM7XHRpZiAoaHdfaW5mby1cdTAwM2VwdHAgXHUwMDI2XHUwMDI2IGh3X2luZm8tXHUwMDNlcHRwLVx1MDAzZWNsb2NrX2luZGV4KVxuJiM0MztcdFx0aW5kZXggPSBod19pbmZvLVx1MDAzZXB0cC1cdTAwM2VjbG9ja19pbmRleChuZGV2KTtcbiBcbi1cdGlmIChod19pbmZvLVx1MDAzZWdwdHAgfHwgaHdfaW5mby1cdTAwM2VjY2NfZ2FjKSB7XG4mIzQzO1x0LyogT25seSBhZHZlcnRpc2UgcHRwIGNsb2NrIGlmIHByZXNlbnQuICovXG4mIzQzO1x0aWYgKGluZGV4IFx1MDAzZT0gMCkge1xuIFx0XHRpbmZvLVx1MDAzZXNvX3RpbWVzdGFtcGluZyA9XG4gXHRcdFx0U09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSB8XG4gXHRcdFx0U09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSB8XG5AQCAtMTc3OSw3ICYjNDM7MTc5MCw3IEBAIHN0YXRpYyBpbnQgcmF2Yl9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdFx0XHQoMSBcdTAwM2NcdTAwM2MgSFdUU1RBTVBfRklMVEVSX05PTkUpIHxcbiBcdFx0XHQoMSBcdTAwM2NcdTAwM2MgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVCkgfFxuIFx0XHRcdCgxIFx1MDAzY1x1MDAzYyBIV1RTVEFNUF9GSUxURVJfQUxMKTtcbi1cdFx0aW5mby1cdTAwM2VwaGNfaW5kZXggPSBSRUFEX09OQ0UocHJpdi1cdTAwM2VwdHAucGhjX2luZGV4KTtcbiYjNDM7XHRcdGluZm8tXHUwMDNlcGhjX2luZGV4ID0gaW5kZXg7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0xODI2LDU1ICYjNDM7MTgzNywyNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJhdmJfZXRodG9vbF9vcHMgPSB7XG4gfTtcbiBcbiBzdGF0aWMgaW50IHJhdmJfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLXtcbi1cdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmluZm8gPSBwcml2LVx1MDAzZWluZm87XG4tXHRpbnQgZXJyb3I7XG4tXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwKSB7XG4tXHRcdGVycm9yID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTtcbi1cdFx0aWYgKGVycm9yKVxuLVx0XHRcdHJldHVybiBlcnJvcjtcbi1cdFx0LyogU2V0IENTRUwgdmFsdWUgKi9cbi1cdFx0cmF2Yl9tb2RpZnkobmRldiwgQ0NDLCBDQ0NfQ1NFTCwgQ0NDX0NTRUxfSFBCKTtcbi1cdH0gZWxzZSBpZiAoaW5mby1cdTAwM2VjY2NfZ2FjKSB7XG4tXHRcdGVycm9yID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHIHwgQ0NDX0dBQyB8IENDQ19DU0VMX0hQQik7XG4tXHR9IGVsc2Uge1xuLVx0XHRlcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gZXJyb3I7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHJhdmJfc2V0X2d0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4gXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHRjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvICppbmZvID0gcHJpdi1cdTAwM2VpbmZvO1xuIFxuLVx0aWYgKCEoaW5mby1cdTAwM2VncHRwIHx8IGluZm8tXHUwMDNlY2NjX2dhYykpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRpZiAoaW5mby1cdTAwM2VwdHAgXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNlcHRwLVx1MDAzZXNldF9jb25maWdfbW9kZSlcbiYjNDM7XHRcdHJldHVybiBpbmZvLVx1MDAzZXB0cC1cdTAwM2VzZXRfY29uZmlnX21vZGUobmRldik7XG4gXG4tXHRyYXZiX3dyaXRlKG5kZXYsIHByaXYtXHUwMDNlZ3RpX3RpdiwgR1RJKTtcbi1cbi1cdC8qIFJlcXVlc3QgR1RJIGxvYWRpbmcgKi9cbi1cdHJhdmJfbW9kaWZ5KG5kZXYsIEdDQ1IsIEdDQ1JfTFRJLCBHQ0NSX0xUSSk7XG4mIzQzO1x0cmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcmF2Yl9jb21wdXRlX2d0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7c3RhdGljIGludCByYXZiX2NvbXB1dGVfZ3RpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2xrICpjbGspXG4ge1xuIFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0Y29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyAqaW5mbyA9IHByaXYtXHUwMDNlaW5mbztcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IG5kZXYtXHUwMDNlZGV2LnBhcmVudDtcbiBcdHVuc2lnbmVkIGxvbmcgcmF0ZTtcbiBcdHU2NCBpbmM7XG4gXG4tXHRpZiAoIShpbmZvLVx1MDAzZWdwdHAgfHwgaW5mby1cdTAwM2VjY2NfZ2FjKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwX3JlZl9jbGspXG4tXHRcdHJhdGUgPSBjbGtfZ2V0X3JhdGUocHJpdi1cdTAwM2VncHRwX2Nsayk7XG4tXHRlbHNlXG4tXHRcdHJhdGUgPSBjbGtfZ2V0X3JhdGUocHJpdi1cdTAwM2VjbGspO1xuJiM0MztcdHJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcbiBcdGlmICghcmF0ZSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtMTk3NCwxMSAmIzQzOzE5NTQsMTIgQEAgc3RhdGljIGludCByYXZiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXG4gXHRyYXZiX2VtYWNfaW5pdChuZGV2KTtcbiBcbi1cdHJhdmJfc2V0X2d0aShuZGV2KTtcbi1cbiBcdC8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cCB8fCBpbmZvLVx1MDAzZWNjY19nYWMpXG4tXHRcdHJhdmJfcHRwX2luaXQobmRldiwgcHJpdi1cdTAwM2VwZGV2KTtcbiYjNDM7XHRpZiAoaW5mby1cdTAwM2VwdHAgXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNlcHRwLVx1MDAzZW5kZXZfb3Blbikge1xuJiM0MztcdFx0ZXJyb3IgPSBpbmZvLVx1MDAzZXB0cC1cdTAwM2VuZGV2X29wZW4obmRldik7XG4mIzQzO1x0XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B0cF9zdG9wO1xuJiM0MztcdH1cbiBcbiBcdC8qIFBIWSBjb250cm9sIHN0YXJ0ICovXG4gXHRlcnJvciA9IHJhdmJfcGh5X3N0YXJ0KG5kZXYpO1xuQEAgLTE5OTAsOSAmIzQzOzE5NzEsNiBAQCBzdGF0aWMgaW50IHJhdmJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdHJldHVybiAwO1xuIFxuIG91dF9wdHBfc3RvcDpcbi1cdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cCB8fCBpbmZvLVx1MDAzZWNjY19nYWMpXG4tXHRcdHJhdmJfcHRwX3N0b3AobmRldik7XG4gXHRyYXZiX3N0b3BfZG1hKG5kZXYpO1xuIG91dF9zZXRfcmVzZXQ6XG4gXHRyYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19SRVNFVCk7XG5AQCAtMjAzNiwxMCAmIzQzOzIwMTQsNiBAQCBzdGF0aWMgdm9pZCByYXZiX3R4X3RpbWVvdXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmRldik7XG4gXG4tXHQvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi9cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHApXG4tXHRcdHJhdmJfcHRwX3N0b3AobmRldik7XG4tXG4gXHQvKiBXYWl0IGZvciBETUEgc3RvcHBpbmcgKi9cbiBcdGlmIChyYXZiX3N0b3BfZG1hKG5kZXYpKSB7XG4gXHRcdC8qIElmIHJhdmJfc3RvcF9kbWEoKSBmYWlscywgdGhlIGhhcmR3YXJlIGlzIHN0aWxsIG9wZXJhdGluZ1xuQEAgLTIwNzIsMTAgJiM0MzsyMDQ2LDYgQEAgc3RhdGljIHZvaWQgcmF2Yl90eF90aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cmF2Yl9lbWFjX2luaXQobmRldik7XG4gXG4gb3V0OlxuLVx0LyogSW5pdGlhbGlzZSBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwKVxuLVx0XHRyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtXHUwMDNlcGRldik7XG4tXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5kZXYpO1xuIFxuIG91dF91bmxvY2s6XG5AQCAtMjIwOCw3ICYjNDM7MjE3OCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCByYXZiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRkZXNjLVx1MDAzZWRwdHIgPSBjcHVfdG9fbGUzMihkbWFfYWRkcik7XG4gXG4gXHQvKiBUWCB0aW1lc3RhbXAgcmVxdWlyZWQgKi9cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHAgfHwgaW5mby1cdTAwM2VjY2NfZ2FjKSB7XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlcHRwKSB7XG4gXHRcdGlmIChxID09IFJBVkJfTkMpIHtcbiBcdFx0XHR0c19za2IgPSBrbWFsbG9jX29iaigqdHNfc2tiLCBHRlBfQVRPTUlDKTtcbiBcdFx0XHRpZiAoIXRzX3NrYikge1xuQEAgLTIzOTAsOCAmIzQzOzIzNjAsOCBAQCBzdGF0aWMgaW50IHJhdmJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHR9XG4gXG4gXHQvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi9cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHAgfHwgaW5mby1cdTAwM2VjY2NfZ2FjKVxuLVx0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZXB0cCBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2VwdHAtXHUwMDNlbmRldl9jbG9zZSlcbiYjNDM7XHRcdGluZm8tXHUwMDNlcHRwLVx1MDAzZW5kZXZfY2xvc2UobmRldik7XG4gXG4gXHQvKiBTZXQgdGhlIGNvbmZpZyBtb2RlIHRvIHN0b3AgdGhlIEFWQi1ETUFDJiMzOTtzIHByb2Nlc3NlcyAqL1xuIFx0aWYgKHJhdmJfc3RvcF9kbWEobmRldikgXHUwMDNjIDApXG5AQCAtMjM5OSw3ICYjNDM7MjM2OSw3IEBAIHN0YXRpYyBpbnQgcmF2Yl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0XHQgICBcJiMzNDtkZXZpY2Ugd2lsbCBiZSBzdG9wcGVkIGFmdGVyIGgvdyBwcm9jZXNzZXMgYXJlIGRvbmUuXFxuXCYjMzQ7KTtcbiBcbiBcdC8qIENsZWFyIHRoZSB0aW1lc3RhbXAgbGlzdCAqL1xuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cCB8fCBpbmZvLVx1MDAzZWNjY19nYWMpIHtcbiYjNDM7XHRpZiAoaW5mby1cdTAwM2VwdHApIHtcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRzX3NrYiwgdHNfc2tiMiwgXHUwMDI2cHJpdi1cdTAwM2V0c19za2JfbGlzdCwgbGlzdCkge1xuIFx0XHRcdGxpc3RfZGVsKFx1MDAyNnRzX3NrYi1cdTAwM2VsaXN0KTtcbiBcdFx0XHRrZnJlZV9za2IodHNfc2tiLVx1MDAzZXNrYik7XG5AQCAtMjY4MSw2ICYjNDM7MjY1MSw0MiBAQCBzdGF0aWMgaW50IHJhdmJfbWRpb19yZWxlYXNlKHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcmF2Yl9nZW4yX3B0cF9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJhdmJfY29tcHV0ZV9ndGkobmRldiwgcHJpdi1cdTAwM2VjbGspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuMl9wdHBfY2xvY2tfaW5kZXgoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwdHBfY2xvY2tfaW5kZXgocHJpdi1cdTAwM2VwdHAuY2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuMl9wdHBfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogZ1BUUCBDbG9jayBTZWxlY3QgSGlnaC1zcGVlZCBwZXJpcGhlcmFsIGJ1cyBjbG9jay4gKi9cbiYjNDM7XHRyYXZiX21vZGlmeShuZGV2LCBDQ0MsIENDQ19DU0VMLCBDQ0NfQ1NFTF9IUEIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyByYXZiX2dlbjJfcHRwX2luZm8gPSB7XG4mIzQzO1x0LnByb2JlID0gcmF2Yl9nZW4yX3B0cF9wcm9iZSxcbiYjNDM7XHQuY2xvY2tfaW5kZXggPSByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4LFxuJiM0MztcdC5zZXRfY29uZmlnX21vZGUgPSByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZSxcbiYjNDM7XHQuZG1hY19zdGFydCA9IHJhdmJfcHRwX2luaXQsXG4mIzQzO1x0LmRtYWNfc3RvcCA9IHJhdmJfcHRwX3N0b3AsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuMl9od19pbmZvID0ge1xuIFx0LnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsXG4gXHQuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsXG5AQCAtMjY5OSwxMiAmIzQzOzI3MDUsMjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW4yX2h3X2luZm8gPSB7XG4gXHRcdFx0ICBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpLFxuIFx0LnJ4X2Rlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcmF2Yl9leF9yeF9kZXNjKSxcbiBcdC5kYmF0X2VudHJ5X251bSA9IDIyLFxuJiM0MztcdC5wdHAgPSBcdTAwMjZyYXZiX2dlbjJfcHRwX2luZm8sXG4gXHQuYWxpZ25lZF90eCA9IDEsXG4tXHQuZ3B0cCA9IDEsXG4gXHQubmNfcXVldWVzID0gMSxcbiBcdC5tYWdpY19wa3QgPSAxLFxuIH07XG4gXG4mIzQzO3N0YXRpYyBpbnQgcmF2Yl9nZW4zX3B0cF9zZXRfY29uZmlnX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHQvKiBFbmFibGUgZ1BUUCBDbG9jayBhbmQgU2VsZWN0IEhpZ2gtc3BlZWQgcGVyaXBoZXJhbCBidXMgY2xvY2suICovXG4mIzQzO1x0cmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyB8IENDQ19HQUMgfCBDQ0NfQ1NFTF9IUEIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfZ2VuM19wdHBfaW5mbyA9IHtcbiYjNDM7XHQucHJvYmUgPSByYXZiX2dlbjJfcHRwX3Byb2JlLFxuJiM0MztcdC5jbG9ja19pbmRleCA9IHJhdmJfZ2VuMl9wdHBfY2xvY2tfaW5kZXgsXG4mIzQzO1x0LnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuM19wdHBfc2V0X2NvbmZpZ19tb2RlLFxuJiM0MztcdC5uZGV2X29wZW4gPSByYXZiX3B0cF9pbml0LFxuJiM0MztcdC5uZGV2X2Nsb3NlID0gcmF2Yl9wdHBfc3RvcCxcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW4zX2h3X2luZm8gPSB7XG4gXHQucmVjZWl2ZSA9IHJhdmJfcnhfcmNhcixcbiBcdC5zZXRfcmF0ZSA9IHJhdmJfc2V0X3JhdGVfcmNhcixcbkBAIC0yNzIzLDE1ICYjNDM7Mjc0Myw2NiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjNfaHdfaW5mbyA9IHtcbiBcdFx0XHQgIFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSksXG4gXHQucnhfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCByYXZiX2V4X3J4X2Rlc2MpLFxuIFx0LmRiYXRfZW50cnlfbnVtID0gMjIsXG4mIzQzO1x0LnB0cCA9IFx1MDAyNnJhdmJfZ2VuM19wdHBfaW5mbyxcbiBcdC5pbnRlcm5hbF9kZWxheSA9IDEsXG4gXHQudHhfY291bnRlcnMgPSAxLFxuIFx0Lm11bHRpX2lycXMgPSAxLFxuIFx0LmlycV9lbl9kaXMgPSAxLFxuLVx0LmNjY19nYWMgPSAxLFxuIFx0Lm5jX3F1ZXVlcyA9IDEsXG4gXHQubWFnaWNfcGt0ID0gMSxcbiB9O1xuIFxuJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuNF9wdHBfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlb2ZfZ3B0cCA9IG9mX3BhcnNlX3BoYW5kbGUocHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldi5vZl9ub2RlLCBcJiMzNDtwdHAtdGltZXJcJiMzNDssIDApO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2VvZl9ncHRwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwcml2LVx1MDAzZW9mX2dwdHApKSB7XG4mIzQzO1x0XHRvZl9ub2RlX3B1dChwcml2LVx1MDAzZW9mX2dwdHApO1xuJiM0MztcdFx0cHJpdi1cdTAwM2VvZl9ncHRwID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuNF9wdHBfY2xvY2tfaW5kZXgoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1xuJiM0MztcdC8qIElmIG5vIGNsb2NrLCBtaW1pYyBwdHBfY2xvY2tfaW5kZXhfYnlfb2Zfbm9kZSgpIGZhaWwgYW5kIHJldHVybiAtMSAqL1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2VvZl9ncHRwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHRwX2Nsb2NrX2luZGV4X2J5X29mX25vZGUocHJpdi1cdTAwM2VvZl9ncHRwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXZiX2dlbjRfcHRwX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBFbmFibGUgZ1BUUCBDbG9jayBhbmQgU2VsZWN0IEhpZ2gtc3BlZWQgcGVyaXBoZXJhbCBidXMgY2xvY2suICovXG4mIzQzO1x0cmV0ID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHIHwgQ0NDX0dBQyB8IENDQ19DU0VMX0hQQik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIFNldCBQVFAgc291cmNlIHRvIEdQVFAgbW9kdWxlLCBvbmx5IG9wdGlvbiBvbiBHZW40LiAqL1xuJiM0MztcdGlmIChwcml2LVx1MDAzZW9mX2dwdHApXG4mIzQzO1x0XHRyYXZiX21vZGlmeShuZGV2LCBBUFNSLCBBUFNSX0dQVFBUSU1FUl9TT1VSQ0UgfCBBUFNSX0dQVFBDTE9DSyxcbiYjNDM7XHRcdFx0ICAgIEFQU1JfR1BUUFRJTUVSX1NPVVJDRSB8IEFQU1JfR1BUUENMT0NLKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9nZW40X3B0cF9pbmZvID0ge1xuJiM0MztcdC5wcm9iZSA9IHJhdmJfZ2VuNF9wdHBfcHJvYmUsXG4mIzQzO1x0LmNsb2NrX2luZGV4ID0gcmF2Yl9nZW40X3B0cF9jbG9ja19pbmRleCxcbiYjNDM7XHQuc2V0X2NvbmZpZ19tb2RlID0gcmF2Yl9nZW40X3B0cF9zZXRfY29uZmlnX21vZGUsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuNF9od19pbmZvID0ge1xuIFx0LnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsXG4gXHQuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsXG5AQCAtMjc1NCwxMSAmIzQzOzI4MjUsMzAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW40X2h3X2luZm8gPSB7XG4gXHQudHhfY291bnRlcnMgPSAxLFxuIFx0Lm11bHRpX2lycXMgPSAxLFxuIFx0LmlycV9lbl9kaXMgPSAxLFxuLVx0LmNjY19nYWMgPSAxLFxuJiM0MztcdC5wdHAgPSBcdTAwMjZyYXZiX2dlbjRfcHRwX2luZm8sXG4gXHQubmNfcXVldWVzID0gMSxcbiBcdC5tYWdpY19wa3QgPSAxLFxuIH07XG4gXG4mIzQzO3N0YXRpYyBpbnQgcmF2Yl9yenYybV9wdHBfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlZ3B0cF9jbGsgPSBkZXZtX2Nsa19nZXQoXHUwMDI2cHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Z3B0cFwmIzM0Oyk7XG4mIzQzO1x0aWYgKElTX0VSUihwcml2LVx1MDAzZWdwdHBfY2xrKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlZ3B0cF9jbGspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmF2Yl9jb21wdXRlX2d0aShuZGV2LCBwcml2LVx1MDAzZWdwdHBfY2xrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyByYXZiX3J6djJtX3B0cF9pbmZvID0ge1xuJiM0MztcdC5wcm9iZSA9IHJhdmJfcnp2Mm1fcHRwX3Byb2JlLFxuJiM0MztcdC5jbG9ja19pbmRleCA9IHJhdmJfZ2VuMl9wdHBfY2xvY2tfaW5kZXgsXG4mIzQzO1x0LnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuMl9wdHBfc2V0X2NvbmZpZ19tb2RlLFxuJiM0MztcdC5kbWFjX3N0YXJ0ID0gcmF2Yl9wdHBfaW5pdCxcbiYjNDM7XHQuZG1hY19zdG9wID0gcmF2Yl9wdHBfc3RvcCxcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9yenYybV9od19pbmZvID0ge1xuIFx0LnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsXG4gXHQuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsXG5AQCAtMjc3OSw4ICYjNDM7Mjg2OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfcnp2Mm1faHdfaW5mbyA9IHtcbiBcdC5kYmF0X2VudHJ5X251bSA9IDIyLFxuIFx0Lm11bHRpX2lycXMgPSAxLFxuIFx0LmVycl9tZ210X2lycXMgPSAxLFxuLVx0LmdwdHAgPSAxLFxuLVx0LmdwdHBfcmVmX2NsayA9IDEsXG4mIzQzO1x0LnB0cCA9IFx1MDAyNnJhdmJfcnp2Mm1fcHRwX2luZm8sXG4gXHQubmNfcXVldWVzID0gMSxcbiBcdC5tYWdpY19wa3QgPSAxLFxuIH07XG5AQCAtMjk1NSw3ICYjNDM7MzA0NCw2IEBAIHN0YXRpYyBpbnQgcmF2Yl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0cHJpdi1cdTAwM2Vyc3RjID0gcnN0YztcbiBcdHByaXYtXHUwMDNlbmRldiA9IG5kZXY7XG4gXHRwcml2LVx1MDAzZXBkZXYgPSBwZGV2O1xuLVx0cHJpdi1cdTAwM2VwdHAucGhjX2luZGV4ID0gLTE7XG4gXHRwcml2LVx1MDAzZW51bV90eF9yaW5nW1JBVkJfQkVdID0gQkVfVFhfUklOR19TSVpFO1xuIFx0cHJpdi1cdTAwM2VudW1fcnhfcmluZ1tSQVZCX0JFXSA9IEJFX1JYX1JJTkdfU0laRTtcbiBcdGlmIChpbmZvLVx1MDAzZW5jX3F1ZXVlcykge1xuQEAgLTI5NzMsMTIgJiM0MzszMDYxLDEwIEBAIHN0YXRpYyBpbnQgcmF2Yl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRnb3RvIG91dF9yZXNldF9hc3NlcnQ7XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwX3JlZl9jbGspIHtcbi1cdFx0cHJpdi1cdTAwM2VncHRwX2NsayA9IGRldm1fY2xrX2dldChcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Z3B0cFwmIzM0Oyk7XG4tXHRcdGlmIChJU19FUlIocHJpdi1cdTAwM2VncHRwX2NsaykpIHtcbi1cdFx0XHRlcnJvciA9IFBUUl9FUlIocHJpdi1cdTAwM2VncHRwX2Nsayk7XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXB0cC1cdTAwM2Vwcm9iZSkge1xuJiM0MztcdFx0ZXJyb3IgPSBpbmZvLVx1MDAzZXB0cC1cdTAwM2Vwcm9iZShuZGV2KTtcbiYjNDM7XHRcdGlmIChlcnJvcilcbiBcdFx0XHRnb3RvIG91dF9yZXNldF9hc3NlcnQ7XG4tXHRcdH1cbiBcdH1cbiBcbiBcdHByaXYtXHUwMDNlcmVmY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtyZWZjbGtcJiMzNDspO1xuQEAgLTMwMzEsMTAgJiM0MzszMTE3LDYgQEAgc3RhdGljIGludCByYXZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRuZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZyYXZiX25ldGRldl9vcHM7XG4gXHRuZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2cmF2Yl9ldGh0b29sX29wcztcbiBcbi1cdGVycm9yID0gcmF2Yl9jb21wdXRlX2d0aShuZGV2KTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBvdXRfcnBtX3B1dDtcbi1cbiBcdHJhdmJfcGFyc2VfZGVsYXlfbW9kZShucCwgbmRldik7XG4gXG4gXHQvKiBBbGxvY2F0ZSBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyB0YWJsZSAqL1xuQEAgLTMxNTcsNiAmIzQzOzMyMzksNyBAQCBzdGF0aWMgdm9pZCByYXZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0cG1fcnVudGltZV9kaXNhYmxlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcdHBtX3J1bnRpbWVfZG9udF91c2VfYXV0b3N1c3BlbmQoZGV2KTtcbiBcdGNsa191bnByZXBhcmUocHJpdi1cdTAwM2VyZWZjbGspO1xuJiM0MztcdG9mX25vZGVfcHV0KHByaXYtXHUwMDNlb2ZfZ3B0cCk7XG4gXHRyZXNldF9jb250cm9sX2Fzc2VydChwcml2LVx1MDAzZXJzdGMpO1xuIFx0ZnJlZV9uZXRkZXYobmRldik7XG4gXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcbkBAIC0zMTgyLDkgJiM0MzszMjY1LDYgQEAgc3RhdGljIGludCByYXZiX3dvbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdC8qIEVuYWJsZSBNYWdpY1BhY2tldCAqL1xuIFx0cmF2Yl9tb2RpZnkobmRldiwgRUNNUiwgRUNNUl9NUERFLCBFQ01SX01QREUpO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNlaW5mby1cdTAwM2VjY2NfZ2FjKVxuLVx0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuLVxuIFx0cmV0dXJuIGVuYWJsZV9pcnFfd2FrZShwcml2LVx1MDAzZWVtYWNfaXJxKTtcbiB9XG4gXG5AQCAtMzIwNCw5ICYjNDM7MzI4NCw2IEBAIHN0YXRpYyBpbnQgcmF2Yl93b2xfcmVzdG9yZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNlaW5mby1cdTAwM2VjY2NfZ2FjKVxuLVx0XHRyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtXHUwMDNlcGRldik7XG4tXG4gXHRpZiAoaW5mby1cdTAwM2VuY19xdWV1ZXMpXG4gXHRcdG5hcGlfZW5hYmxlKFx1MDAyNnByaXYtXHUwMDNlbmFwaVtSQVZCX05DXSk7XG4gXHRuYXBpX2VuYWJsZShcdTAwMjZwcml2LVx1MDAzZW5hcGlbUkFWQl9CRV0pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuY1xuaW5kZXggNDMyMThiYzE1YjE1MS4uMTlkMDM5YjlkMjRhNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jXG5AQCAtMzEzLDMxICYjNDM7MzEzLDM5IEBAIHZvaWQgcmF2Yl9wdHBfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0cmF2Yl93cml0ZShuZGV2LCB+KGdpcyB8IEdJU19SRVNFUlZFRCksIEdJUyk7XG4gfVxuIFxuLXZvaWQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiYjNDM7aW50IHJhdmJfcHRwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0c3RydWN0IHB0cF9jbG9jayAqY2xvY2s7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdGludCByZXQgPSAwO1xuIFxuIFx0cHJpdi1cdTAwM2VwdHAuaW5mbyA9IHJhdmJfcHRwX2luZm87XG4gXG4tXHRwcml2LVx1MDAzZXB0cC5kZWZhdWx0X2FkZGVuZCA9IHJhdmJfcmVhZChuZGV2LCBHVEkpO1xuJiM0MztcdHByaXYtXHUwMDNlcHRwLmRlZmF1bHRfYWRkZW5kID0gcHJpdi1cdTAwM2VndGlfdGl2O1xuIFx0cHJpdi1cdTAwM2VwdHAuY3VycmVudF9hZGRlbmQgPSBwcml2LVx1MDAzZXB0cC5kZWZhdWx0X2FkZGVuZDtcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnByaXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHQvKiBTZXQgZ1BUUCBUaW1lciBJbmNyZW1lbnQgVmFsdWUuICovXG4mIzQzO1x0cmF2Yl93cml0ZShuZGV2LCBwcml2LVx1MDAzZXB0cC5kZWZhdWx0X2FkZGVuZCwgR1RJKTtcbiYjNDM7XG4mIzQzO1x0LyogUmVxdWVzdCBHVEkgbG9hZGluZy4gKi9cbiYjNDM7XHRyYXZiX21vZGlmeShuZGV2LCBHQ0NSLCBHQ0NSX0xUSSwgR0NDUl9MVEkpO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBHSVQgbG9hZGluZyB0byBjb21wbGV0ZS4gKi9cbiBcdHJhdmJfd2FpdChuZGV2LCBHQ0NSLCBHQ0NSX1RDUiwgR0NDUl9UQ1JfTk9SRVEpO1xuJiM0MztcbiBcdHJhdmJfbW9kaWZ5KG5kZXYsIEdDQ1IsIEdDQ1JfVENTUywgR0NDUl9UQ1NTX0FESkdQVFApO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdGNsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFx1MDAyNnByaXYtXHUwMDNlcHRwLmluZm8sIFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbi1cdGlmIChJU19FUlIoY2xvY2spKSB7XG4tXHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJXBlXFxuXCYjMzQ7LCBjbG9jayk7XG4tXHRcdGNsb2NrID0gTlVMTDtcbiYjNDM7XHRwcml2LVx1MDAzZXB0cC5jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZwcml2LVx1MDAzZXB0cC5pbmZvLCBcdTAwMjZwcml2LVx1MDAzZXBkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlcHRwLmNsb2NrKSkge1xuJiM0MztcdFx0cmV0ID0gUFRSX0VSUihwcml2LVx1MDAzZXB0cC5jbG9jayk7XG4mIzQzO1x0XHRwcml2LVx1MDAzZXB0cC5jbG9jayA9IE5VTEw7XG4mIzQzO1x0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuIFx0fVxuIFxuLVx0V1JJVEVfT05DRShwcml2LVx1MDAzZXB0cC5jbG9jaywgY2xvY2spO1xuLVx0aWYgKGNsb2NrKVxuLVx0XHRXUklURV9PTkNFKHByaXYtXHUwMDNlcHRwLnBoY19pbmRleCwgcHRwX2Nsb2NrX2luZGV4KGNsb2NrKSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcmF2Yl9wdHBfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbkBAIC0zNjAsMTQgJiM0MzszNjgsMTAgQEAgc3RhdGljIHZvaWQgcmF2Yl9wdHBfc3luY19pcnFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHZvaWQgcmF2Yl9wdHBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4gXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4tXHRzdHJ1Y3QgcHRwX2Nsb2NrICpjbG9jaztcbi1cbi1cdFdSSVRFX09OQ0UocHJpdi1cdTAwM2VwdHAucGhjX2luZGV4LCAtMSk7XG4tXHRjbG9jayA9IHhjaGcoXHUwMDI2cHJpdi1cdTAwM2VwdHAuY2xvY2ssIE5VTEwpO1xuIFxuIFx0cmF2Yl9wdHBfZGlzYWJsZShuZGV2KTtcbiBcdHJhdmJfcHRwX3N5bmNfaXJxcyhuZGV2KTtcbiBcbi1cdGlmIChjbG9jaylcbi1cdFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIoY2xvY2spO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXB0cC5jbG9jaylcbiYjNDM7XHRcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHByaXYtXHUwMDNlcHRwLmNsb2NrKTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIFJlbmVzYXMgRXRoZXJuZXQgQVZCIChSQVZCKSBwbGF0Zm9ybSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl8qKSwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gUmVuZXNhcyBSLUNhciBhbmQgUlogU29DcyBhbmQgcmVxdWlyZXMgcGh5c2ljYWwgU29DIGhhcmR3YXJlIG5vdCBhdmFpbGFibGUgb3IgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWFhZWFlYjA3NjRjNjc3ODgyM2FkMjNjM2QzYmZiNDY2MjJmYzhiMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDE6MjY6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMsZXRoZXJhdmIueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sCmluZGV4IDFlMDBlZjViM2FjZGEuLmZhZDAwMjQ5MjQyMWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sCkBAIC05Nyw2ICYjNDM7OTcsOCBAQCBwcm9wZXJ0aWVzOgogCiAgIHBoeS1oYW5kbGU6IHRydWUKIAomIzQzOyAgcHRwLXRpbWVyOiB0cnVlCiYjNDM7CiAgICYjMzk7I2FkZHJlc3MtY2VsbHMmIzM5OzoKICAgICBkZXNjcmlwdGlvbjogTnVtYmVyIG9mIGFkZHJlc3MgY2VsbHMgZm9yIHRoZSBNRElPIGJ1cy4KICAgICBjb25zdDogMQpAQCAtMzA1LDYgJiM0MzszMDcsMTUgQEAgYWxsT2Y6CiAgICAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgICAgLSBjb25zdDogZmNrCiAgICAgICAgICAgICAgIC0gY29uc3Q6IHJlZmNsawomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBub3Q6CiYjNDM7ICAgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICAgIGNvbnRhaW5zOgomIzQzOyAgICAgICAgICAgICAgY29uc3Q6IHJlbmVzYXMsZXRoZXJhdmItcmNhci1nZW40CiYjNDM7ICAgIHRoZW46CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIHB0cC10aW1lcjogZmFsc2UKIAogYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmgKaW5kZXggM2VlNGM2MTA4MTg5MC4uNWQzNWI0MGQ3YzU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmgKQEAgLTI0OSw2ICYjNDM7MjQ5LDggQEAgZW51bSBBUFNSX0JJVCB7CiAJQVBTUl9SRE0JPSAweDAwMDAyMDAwLAogCUFQU1JfVERNCT0gMHgwMDAwNDAwMCwKIAlBUFNSX01JSVNFTEVDVAk9IDB4MDEwMDAwMDAsCS8qIFItQ2FyIFY0TSBvbmx5ICovCiYjNDM7CUFQU1JfR1BUUFRJTUVSX1NPVVJDRSA9IEJJVCgyNSksIC8qIEdlbjQgKi8KJiM0MzsJQVBTUl9HUFRQQ0xPQ0sJPSBCSVQoMjkpLAkvKiBHZW40ICovCiB9OwogCiAvKiBSQ1IgKi8KQEAgLTEwMjgsMTMgJiM0MzsxMDMwLDM3IEBAIHN0cnVjdCByYXZiX3B0cF9wZXJvdXQgewogc3RydWN0IHJhdmJfcHRwIHsKIAlzdHJ1Y3QgcHRwX2Nsb2NrICpjbG9jazsKIAlzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gaW5mbzsKLQlpbnQgcGhjX2luZGV4OwogCXUzMiBkZWZhdWx0X2FkZGVuZDsKIAl1MzIgY3VycmVudF9hZGRlbmQ7CiAJaW50IGV4dHRzW05fRVhUX1RTXTsKIAlzdHJ1Y3QgcmF2Yl9wdHBfcGVyb3V0IHBlcm91dFtOX1BFUl9PVVRdOwogfTsKIAomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCByYXZiX2dwdHBfaW5mbyAtIFBsYXRmb3JtIHNwZWNpZmljIGdQVFAgYmVoYXZpb3IKJiM0MzsgKgomIzQzOyAqIEVhY2ggZ2VuZXJhdGlvbiBvZiBSQVZCIGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IGJlaGF2aW9ycyB3aGVuIGludGVyYWN0aW5nCiYjNDM7ICogd2l0aCB0aGUgZ1BUUCBjbG9jay4gVGhpcyBzdHJ1Y3QgcHJvdmlkZXMgdGhlIGNhbGxiYWNrcyB0byBiZSBjYWxsZWQgYXQKJiM0MzsgKiBjcml0aWNhbCBwb2ludHMgaW4gdGhlIFJBVkIgZHJpdmVyLgomIzQzOyAqCiYjNDM7ICogQHByb2JlOgkJUHJvYmUgdGhlIGdQVFAgY2xvY2sKJiM0MzsgKiBAY2xvY2tfaW5kZXg6CUdldCB0aGUgUFRQIGNsb2NrIGluZGV4LCBpZiBhbnkKJiM0MzsgKiBAc2V0X2NvbmZpZ19tb2RlOglFbnRlciBjb25maWcgbW9kZQomIzQzOyAqIEBkbWFjX3N0YXJ0OgkJQ2FsbGVkIHdoZW4gdGhlIERNQUMgc3RhcnRzCiYjNDM7ICogQGRtYWNfc3RvcDoJCUNhbGxlZCB3aGVuIHRoZSBETUFDIHN0b3BzCiYjNDM7ICogQG5kZXZfb3BlbjoJCUNhbGxlZCB3aGVuIHRoZSBuZGV2IGlzIG9wZW5lZAomIzQzOyAqIEBuZGV2X2Nsb3NlOgkJQ2FsbGVkIHdoZW4gdGhlIG5kZXYgaXMgY2xvc2VkCiYjNDM7ICovCiYjNDM7c3RydWN0IHJhdmJfZ3B0cF9pbmZvIHsKJiM0MzsJaW50ICgqcHJvYmUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKJiM0MzsJaW50ICgqY2xvY2tfaW5kZXgpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKJiM0MzsJaW50ICgqc2V0X2NvbmZpZ19tb2RlKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CiYjNDM7CWludCAoKmRtYWNfc3RhcnQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKJiM0MzsJdm9pZCAoKmRtYWNfc3RvcCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwomIzQzOwlpbnQgKCpuZGV2X29wZW4pKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKJiM0MzsJdm9pZCAoKm5kZXZfY2xvc2UpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKJiM0Mzt9OwomIzQzOwogc3RydWN0IHJhdmJfaHdfaW5mbyB7CiAJaW50ICgqcmVjZWl2ZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBidWRnZXQsIGludCBxKTsKIAl2b2lkICgqc2V0X3JhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKQEAgLTEwNTMsNiAmIzQzOzEwNzksNyBAQCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHsKIAl1MzIgcnhfYnVmZmVyX3NpemU7CiAJdTMyIHJ4X2Rlc2Nfc2l6ZTsKIAl1MzIgZGJhdF9lbnRyeV9udW07CiYjNDM7CWNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyAqcHRwOyAvKiBDYWxsYmFja3MgdG8gaGFuZGxlIGdQVFAgaW50ZXJhY3Rpb25zLiAqLwogCXVuc2lnbmVkIGFsaWduZWRfdHg6IDE7CiAJdW5zaWduZWQgY29hbGVzY2VfaXJxczoxOwkvKiBOZWVkcyBzb2Z0d2FyZSBJUlEgY29hbGVzY2luZyAqLwogCkBAIC0xMDYzLDkgJiM0MzsxMDkwLDYgQEAgc3RydWN0IHJhdmJfaHdfaW5mbyB7CiAJdW5zaWduZWQgbXVsdGlfaXJxczoxOwkJLyogQVZCLURNQUMgYW5kIEUtTUFDIGhhcyBtdWx0aXBsZSBpcnFzICovCiAJdW5zaWduZWQgaXJxX2VuX2RpczoxOwkJLyogSGFzIHNlcGFyYXRlIGlycSBlbmFibGUgYW5kIGRpc2FibGUgcmVncyAqLwogCXVuc2lnbmVkIGVycl9tZ210X2lycXM6MTsJLyogTGluZTEgKEVycikgYW5kIExpbmUyIChNZ210KSBpcnFzIGFyZSBzZXBhcmF0ZSAqLwotCXVuc2lnbmVkIGdwdHA6MTsJCS8qIEFWQi1ETUFDIGhhcyBnUFRQIHN1cHBvcnQgKi8KLQl1bnNpZ25lZCBjY2NfZ2FjOjE7CQkvKiBBVkItRE1BQyBoYXMgZ1BUUCBzdXBwb3J0IGFjdGl2ZSBpbiBjb25maWcgbW9kZSAqLwotCXVuc2lnbmVkIGdwdHBfcmVmX2NsazoxOwkvKiBnUFRQIGhhcyBzZXBhcmF0ZSByZWZlcmVuY2UgY2xvY2sgKi8KIAl1bnNpZ25lZCBuY19xdWV1ZXM6MTsJCS8qIEFWQi1ETUFDIGhhcyBSWCBhbmQgVFggTkMgcXVldWVzICovCiAJdW5zaWduZWQgbWFnaWNfcGt0OjE7CQkvKiBFLU1BQyBzdXBwb3J0cyBtYWdpYyBwYWNrZXQgZGV0ZWN0aW9uICovCiAJdW5zaWduZWQgaGFsZl9kdXBsZXg6MTsJCS8qIEUtTUFDIHN1cHBvcnRzIGhhbGYgZHVwbGV4IG1vZGUgKi8KQEAgLTExMTAsNiAmIzQzOzExMzQsNyBAQCBzdHJ1Y3QgcmF2Yl9wcml2YXRlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHRzX3NrYl9saXN0OwogCXUzMiB0c19za2JfdGFnOwogCXN0cnVjdCByYXZiX3B0cCBwdHA7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ3B0cDsJLyogUmVmZXJlbmNlIHRvIGV4dGVybmFsIGdQVFAgY2xvY2ssIGlmIGFueS4gKi8KIAlzcGlubG9ja190IGxvY2s7CQkvKiBSZWdpc3RlciBhY2Nlc3MgbG9jayAqLwogCXUzMiBjdXJfcnhbTlVNX1JYX1FVRVVFXTsJLyogQ29uc3VtZXIgcmluZyBpbmRpY2VzICovCiAJdTMyIGRpcnR5X3J4W05VTV9SWF9RVUVVRV07CS8qIFByb2R1Y2VyIHJpbmcgaW5kaWNlcyAqLwpAQCAtMTE2Myw3ICYjNDM7MTE4OCw3IEBAIHZvaWQgcmF2Yl9tb2RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGVudW0gcmF2Yl9yZWcgcmVnLCB1MzIgY2xlYXIsCiBpbnQgcmF2Yl93YWl0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHJhdmJfcmVnIHJlZywgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7CiAKIHZvaWQgcmF2Yl9wdHBfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKLXZvaWQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiYjNDM7aW50IHJhdmJfcHRwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwogdm9pZCByYXZiX3B0cF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKIAogI2VuZGlmCS8qICNpZm5kZWYgX19SQVZCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmMKaW5kZXggZWExYzdlNTM2NzkxZS4uNjZjOWNkMTVhMTllMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jCkBAIC03MDcsNyAmIzQzOzcwNywxNSBAQCBzdGF0aWMgaW50IHJhdmJfZG1hY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCQlyZXR1cm4gZXJyb3I7CiAKIAkvKiBTZXR0aW5nIHRoZSBjb250cm9sIHdpbGwgc3RhcnQgdGhlIEFWQi1ETUFDIHByb2Nlc3MuICovCi0JcmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX09QRVJBVElPTik7CiYjNDM7CWVycm9yID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfT1BFUkFUSU9OKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwomIzQzOwkvKiBJbml0aWFsaXNlIFBUUCBDbG9jayBkcml2ZXIgKi8KJiM0MzsJaWYgKGluZm8tJmd0O3B0cCAmYW1wOyZhbXA7IGluZm8tJmd0O3B0cC0mZ3Q7ZG1hY19zdGFydCkKJiM0MzsJCXJldHVybiBpbmZvLSZndDtwdHAtJmd0O2RtYWNfc3RhcnQobmRldik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCByYXZiX2dldF90eF90c3RhbXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCkBAIC0xMTE1LDYgJiM0MzsxMTIzLDEwIEBAIHN0YXRpYyBpbnQgcmF2Yl9zdG9wX2RtYShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAkJCW5ldGRldl9lcnIobmRldiwgJiMzNDtmYWlsZWQgdG8gc3RvcCBBWEkgQlVTXG4mIzM0Oyk7CiAJfQogCiYjNDM7CS8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqLwomIzQzOwlpZiAoaW5mby0mZ3Q7cHRwICZhbXA7JmFtcDsgaW5mby0mZ3Q7cHRwLSZndDtkbWFjX3N0b3ApCiYjNDM7CQlpbmZvLSZndDtwdHAtJmd0O2RtYWNfc3RvcChuZGV2KTsKJiM0MzsKIAkvKiBTdG9wIEFWQi1ETUFDIHByb2Nlc3MgKi8KIAlyZXR1cm4gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTsKIH0KQEAgLTE3MTksOSAmIzQzOzE3MzEsNyBAQCBzdGF0aWMgaW50IHJhdmJfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CiAJCW5ldGlmX2RldmljZV9kZXRhY2gobmRldik7Ci0JCS8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqLwotCQlpZiAoaW5mby0mZ3Q7Z3B0cCkKLQkJCXJhdmJfcHRwX3N0b3AobmRldik7CiYjNDM7CiAJCS8qIFdhaXQgZm9yIERNQSBzdG9wcGluZyAqLwogCQllcnJvciA9IHJhdmJfc3RvcF9kbWEobmRldik7CiAJCWlmIChlcnJvcikgewpAQCAtMTc1MiwxMCAmIzQzOzE3NjIsNiBAQCBzdGF0aWMgaW50IHJhdmJfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAogCQlyYXZiX2VtYWNfaW5pdChuZGV2KTsKIAotCQkvKiBJbml0aWFsaXNlIFBUUCBDbG9jayBkcml2ZXIgKi8KLQkJaWYgKGluZm8tJmd0O2dwdHApCi0JCQlyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtJmd0O3BkZXYpOwotCiAJCW5ldGlmX2RldmljZV9hdHRhY2gobmRldik7CiAJfQogCkBAIC0xNzY3LDggJiM0MzsxNzczLDEzIEBAIHN0YXRpYyBpbnQgcmF2Yl9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIHsKIAlzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyAqaHdfaW5mbyA9IHByaXYtJmd0O2luZm87CiYjNDM7CWludCBpbmRleCA9IC0xOwomIzQzOwomIzQzOwlpZiAoaHdfaW5mby0mZ3Q7cHRwICZhbXA7JmFtcDsgaHdfaW5mby0mZ3Q7cHRwLSZndDtjbG9ja19pbmRleCkKJiM0MzsJCWluZGV4ID0gaHdfaW5mby0mZ3Q7cHRwLSZndDtjbG9ja19pbmRleChuZGV2KTsKIAotCWlmIChod19pbmZvLSZndDtncHRwIHx8IGh3X2luZm8tJmd0O2NjY19nYWMpIHsKJiM0MzsJLyogT25seSBhZHZlcnRpc2UgcHRwIGNsb2NrIGlmIHByZXNlbnQuICovCiYjNDM7CWlmIChpbmRleCAmZ3Q7PSAwKSB7CiAJCWluZm8tJmd0O3NvX3RpbWVzdGFtcGluZyA9CiAJCQlTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFIHwKIAkJCVNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfApAQCAtMTc3OSw3ICYjNDM7MTc5MCw3IEBAIHN0YXRpYyBpbnQgcmF2Yl9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAkJCSgxICZsdDsmbHQ7IEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB8CiAJCQkoMSAmbHQ7Jmx0OyBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UKSB8CiAJCQkoMSAmbHQ7Jmx0OyBIV1RTVEFNUF9GSUxURVJfQUxMKTsKLQkJaW5mby0mZ3Q7cGhjX2luZGV4ID0gUkVBRF9PTkNFKHByaXYtJmd0O3B0cC5waGNfaW5kZXgpOwomIzQzOwkJaW5mby0mZ3Q7cGhjX2luZGV4ID0gaW5kZXg7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xODI2LDU1ICYjNDM7MTgzNywyNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJhdmJfZXRodG9vbF9vcHMgPSB7CiB9OwogCiBzdGF0aWMgaW50IHJhdmJfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQotewotCXN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQljb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvICppbmZvID0gcHJpdi0mZ3Q7aW5mbzsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoaW5mby0mZ3Q7Z3B0cCkgewotCQllcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQkJLyogU2V0IENTRUwgdmFsdWUgKi8KLQkJcmF2Yl9tb2RpZnkobmRldiwgQ0NDLCBDQ0NfQ1NFTCwgQ0NDX0NTRUxfSFBCKTsKLQl9IGVsc2UgaWYgKGluZm8tJmd0O2NjY19nYWMpIHsKLQkJZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcgfCBDQ0NfR0FDIHwgQ0NDX0NTRUxfSFBCKTsKLQl9IGVsc2UgewotCQllcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7Ci0JfQotCi0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgdm9pZCByYXZiX3NldF9ndGkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCWNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmluZm8gPSBwcml2LSZndDtpbmZvOwogCi0JaWYgKCEoaW5mby0mZ3Q7Z3B0cCB8fCBpbmZvLSZndDtjY2NfZ2FjKSkKLQkJcmV0dXJuOwomIzQzOwlpZiAoaW5mby0mZ3Q7cHRwICZhbXA7JmFtcDsgaW5mby0mZ3Q7cHRwLSZndDtzZXRfY29uZmlnX21vZGUpCiYjNDM7CQlyZXR1cm4gaW5mby0mZ3Q7cHRwLSZndDtzZXRfY29uZmlnX21vZGUobmRldik7CiAKLQlyYXZiX3dyaXRlKG5kZXYsIHByaXYtJmd0O2d0aV90aXYsIEdUSSk7Ci0KLQkvKiBSZXF1ZXN0IEdUSSBsb2FkaW5nICovCi0JcmF2Yl9tb2RpZnkobmRldiwgR0NDUiwgR0NDUl9MVEksIEdDQ1JfTFRJKTsKJiM0MzsJcmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7CiB9CiAKLXN0YXRpYyBpbnQgcmF2Yl9jb21wdXRlX2d0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0MztzdGF0aWMgaW50IHJhdmJfY29tcHV0ZV9ndGkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjbGsgKmNsaykKIHsKIAlzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7Ci0JY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyAqaW5mbyA9IHByaXYtJmd0O2luZm87CiAJc3RydWN0IGRldmljZSAqZGV2ID0gbmRldi0mZ3Q7ZGV2LnBhcmVudDsKIAl1bnNpZ25lZCBsb25nIHJhdGU7CiAJdTY0IGluYzsKIAotCWlmICghKGluZm8tJmd0O2dwdHAgfHwgaW5mby0mZ3Q7Y2NjX2dhYykpCi0JCXJldHVybiAwOwotCi0JaWYgKGluZm8tJmd0O2dwdHBfcmVmX2NsaykKLQkJcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LSZndDtncHRwX2Nsayk7Ci0JZWxzZQotCQlyYXRlID0gY2xrX2dldF9yYXRlKHByaXYtJmd0O2Nsayk7CiYjNDM7CXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKIAlpZiAoIXJhdGUpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xOTc0LDExICYjNDM7MTk1NCwxMiBAQCBzdGF0aWMgaW50IHJhdmJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAogCXJhdmJfZW1hY19pbml0KG5kZXYpOwogCi0JcmF2Yl9zZXRfZ3RpKG5kZXYpOwotCiAJLyogSW5pdGlhbGlzZSBQVFAgQ2xvY2sgZHJpdmVyICovCi0JaWYgKGluZm8tJmd0O2dwdHAgfHwgaW5mby0mZ3Q7Y2NjX2dhYykKLQkJcmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LSZndDtwZGV2KTsKJiM0MzsJaWYgKGluZm8tJmd0O3B0cCAmYW1wOyZhbXA7IGluZm8tJmd0O3B0cC0mZ3Q7bmRldl9vcGVuKSB7CiYjNDM7CQllcnJvciA9IGluZm8tJmd0O3B0cC0mZ3Q7bmRldl9vcGVuKG5kZXYpOwomIzQzOwkJaWYgKGVycm9yKQomIzQzOwkJCWdvdG8gb3V0X3B0cF9zdG9wOwomIzQzOwl9CiAKIAkvKiBQSFkgY29udHJvbCBzdGFydCAqLwogCWVycm9yID0gcmF2Yl9waHlfc3RhcnQobmRldik7CkBAIC0xOTkwLDkgJiM0MzsxOTcxLDYgQEAgc3RhdGljIGludCByYXZiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJcmV0dXJuIDA7CiAKIG91dF9wdHBfc3RvcDoKLQkvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi8KLQlpZiAoaW5mby0mZ3Q7Z3B0cCB8fCBpbmZvLSZndDtjY2NfZ2FjKQotCQlyYXZiX3B0cF9zdG9wKG5kZXYpOwogCXJhdmJfc3RvcF9kbWEobmRldik7CiBvdXRfc2V0X3Jlc2V0OgogCXJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX1JFU0VUKTsKQEAgLTIwMzYsMTAgJiM0MzsyMDE0LDYgQEAgc3RhdGljIHZvaWQgcmF2Yl90eF90aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCiAJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5kZXYpOwogCi0JLyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovCi0JaWYgKGluZm8tJmd0O2dwdHApCi0JCXJhdmJfcHRwX3N0b3AobmRldik7Ci0KIAkvKiBXYWl0IGZvciBETUEgc3RvcHBpbmcgKi8KIAlpZiAocmF2Yl9zdG9wX2RtYShuZGV2KSkgewogCQkvKiBJZiByYXZiX3N0b3BfZG1hKCkgZmFpbHMsIHRoZSBoYXJkd2FyZSBpcyBzdGlsbCBvcGVyYXRpbmcKQEAgLTIwNzIsMTAgJiM0MzsyMDQ2LDYgQEAgc3RhdGljIHZvaWQgcmF2Yl90eF90aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXJhdmJfZW1hY19pbml0KG5kZXYpOwogCiBvdXQ6Ci0JLyogSW5pdGlhbGlzZSBQVFAgQ2xvY2sgZHJpdmVyICovCi0JaWYgKGluZm8tJmd0O2dwdHApCi0JCXJhdmJfcHRwX2luaXQobmRldiwgcHJpdi0mZ3Q7cGRldik7Ci0KIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5kZXYpOwogCiBvdXRfdW5sb2NrOgpAQCAtMjIwOCw3ICYjNDM7MjE3OCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCByYXZiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJZGVzYy0mZ3Q7ZHB0ciA9IGNwdV90b19sZTMyKGRtYV9hZGRyKTsKIAogCS8qIFRYIHRpbWVzdGFtcCByZXF1aXJlZCAqLwotCWlmIChpbmZvLSZndDtncHRwIHx8IGluZm8tJmd0O2NjY19nYWMpIHsKJiM0MzsJaWYgKGluZm8tJmd0O3B0cCkgewogCQlpZiAocSA9PSBSQVZCX05DKSB7CiAJCQl0c19za2IgPSBrbWFsbG9jX29iaigqdHNfc2tiLCBHRlBfQVRPTUlDKTsKIAkJCWlmICghdHNfc2tiKSB7CkBAIC0yMzkwLDggJiM0MzsyMzYwLDggQEAgc3RhdGljIGludCByYXZiX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCX0KIAogCS8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqLwotCWlmIChpbmZvLSZndDtncHRwIHx8IGluZm8tJmd0O2NjY19nYWMpCi0JCXJhdmJfcHRwX3N0b3AobmRldik7CiYjNDM7CWlmIChpbmZvLSZndDtwdHAgJmFtcDsmYW1wOyBpbmZvLSZndDtwdHAtJmd0O25kZXZfY2xvc2UpCiYjNDM7CQlpbmZvLSZndDtwdHAtJmd0O25kZXZfY2xvc2UobmRldik7CiAKIAkvKiBTZXQgdGhlIGNvbmZpZyBtb2RlIHRvIHN0b3AgdGhlIEFWQi1ETUFDJiMzOTtzIHByb2Nlc3NlcyAqLwogCWlmIChyYXZiX3N0b3BfZG1hKG5kZXYpICZsdDsgMCkKQEAgLTIzOTksNyAmIzQzOzIzNjksNyBAQCBzdGF0aWMgaW50IHJhdmJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJCQkgICAmIzM0O2RldmljZSB3aWxsIGJlIHN0b3BwZWQgYWZ0ZXIgaC93IHByb2Nlc3NlcyBhcmUgZG9uZS5cbiYjMzQ7KTsKIAogCS8qIENsZWFyIHRoZSB0aW1lc3RhbXAgbGlzdCAqLwotCWlmIChpbmZvLSZndDtncHRwIHx8IGluZm8tJmd0O2NjY19nYWMpIHsKJiM0MzsJaWYgKGluZm8tJmd0O3B0cCkgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHNfc2tiLCB0c19za2IyLCAmYW1wO3ByaXYtJmd0O3RzX3NrYl9saXN0LCBsaXN0KSB7CiAJCQlsaXN0X2RlbCgmYW1wO3RzX3NrYi0mZ3Q7bGlzdCk7CiAJCQlrZnJlZV9za2IodHNfc2tiLSZndDtza2IpOwpAQCAtMjY4MSw2ICYjNDM7MjY1MSw0MiBAQCBzdGF0aWMgaW50IHJhdmJfbWRpb19yZWxlYXNlKHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuMl9wdHBfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CiYjNDM7CXJldHVybiByYXZiX2NvbXB1dGVfZ3RpKG5kZXYsIHByaXYtJmd0O2Nsayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHB0cF9jbG9ja19pbmRleChwcml2LSZndDtwdHAuY2xvY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuMl9wdHBfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIGdQVFAgQ2xvY2sgU2VsZWN0IEhpZ2gtc3BlZWQgcGVyaXBoZXJhbCBidXMgY2xvY2suICovCiYjNDM7CXJhdmJfbW9kaWZ5KG5kZXYsIENDQywgQ0NDX0NTRUwsIENDQ19DU0VMX0hQQik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfZ2VuMl9wdHBfaW5mbyA9IHsKJiM0MzsJLnByb2JlID0gcmF2Yl9nZW4yX3B0cF9wcm9iZSwKJiM0MzsJLmNsb2NrX2luZGV4ID0gcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleCwKJiM0MzsJLnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuMl9wdHBfc2V0X2NvbmZpZ19tb2RlLAomIzQzOwkuZG1hY19zdGFydCA9IHJhdmJfcHRwX2luaXQsCiYjNDM7CS5kbWFjX3N0b3AgPSByYXZiX3B0cF9zdG9wLAomIzQzO307CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjJfaHdfaW5mbyA9IHsKIAkucmVjZWl2ZSA9IHJhdmJfcnhfcmNhciwKIAkuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsCkBAIC0yNjk5LDEyICYjNDM7MjcwNSwyNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjJfaHdfaW5mbyA9IHsKIAkJCSAgU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKSwKIAkucnhfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCByYXZiX2V4X3J4X2Rlc2MpLAogCS5kYmF0X2VudHJ5X251bSA9IDIyLAomIzQzOwkucHRwID0gJmFtcDtyYXZiX2dlbjJfcHRwX2luZm8sCiAJLmFsaWduZWRfdHggPSAxLAotCS5ncHRwID0gMSwKIAkubmNfcXVldWVzID0gMSwKIAkubWFnaWNfcGt0ID0gMSwKIH07CiAKJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuM19wdHBfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJLyogRW5hYmxlIGdQVFAgQ2xvY2sgYW5kIFNlbGVjdCBIaWdoLXNwZWVkIHBlcmlwaGVyYWwgYnVzIGNsb2NrLiAqLwomIzQzOwlyZXR1cm4gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHIHwgQ0NDX0dBQyB8IENDQ19DU0VMX0hQQik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9nZW4zX3B0cF9pbmZvID0gewomIzQzOwkucHJvYmUgPSByYXZiX2dlbjJfcHRwX3Byb2JlLAomIzQzOwkuY2xvY2tfaW5kZXggPSByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4LAomIzQzOwkuc2V0X2NvbmZpZ19tb2RlID0gcmF2Yl9nZW4zX3B0cF9zZXRfY29uZmlnX21vZGUsCiYjNDM7CS5uZGV2X29wZW4gPSByYXZiX3B0cF9pbml0LAomIzQzOwkubmRldl9jbG9zZSA9IHJhdmJfcHRwX3N0b3AsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuM19od19pbmZvID0gewogCS5yZWNlaXZlID0gcmF2Yl9yeF9yY2FyLAogCS5zZXRfcmF0ZSA9IHJhdmJfc2V0X3JhdGVfcmNhciwKQEAgLTI3MjMsMTUgJiM0MzsyNzQzLDY2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuM19od19pbmZvID0gewogCQkJICBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpLAogCS5yeF9kZXNjX3NpemUgPSBzaXplb2Yoc3RydWN0IHJhdmJfZXhfcnhfZGVzYyksCiAJLmRiYXRfZW50cnlfbnVtID0gMjIsCiYjNDM7CS5wdHAgPSAmYW1wO3JhdmJfZ2VuM19wdHBfaW5mbywKIAkuaW50ZXJuYWxfZGVsYXkgPSAxLAogCS50eF9jb3VudGVycyA9IDEsCiAJLm11bHRpX2lycXMgPSAxLAogCS5pcnFfZW5fZGlzID0gMSwKLQkuY2NjX2dhYyA9IDEsCiAJLm5jX3F1ZXVlcyA9IDEsCiAJLm1hZ2ljX3BrdCA9IDEsCiB9OwogCiYjNDM7c3RhdGljIGludCByYXZiX2dlbjRfcHRwX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwomIzQzOwlwcml2LSZndDtvZl9ncHRwID0gb2ZfcGFyc2VfcGhhbmRsZShwcml2LSZndDtwZGV2LSZndDtkZXYub2Zfbm9kZSwgJiMzNDtwdHAtdGltZXImIzM0OywgMCk7CiYjNDM7CWlmICghcHJpdi0mZ3Q7b2ZfZ3B0cCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUocHJpdi0mZ3Q7b2ZfZ3B0cCkpIHsKJiM0MzsJCW9mX25vZGVfcHV0KHByaXYtJmd0O29mX2dwdHApOwomIzQzOwkJcHJpdi0mZ3Q7b2ZfZ3B0cCA9IE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmF2Yl9nZW40X3B0cF9jbG9ja19pbmRleChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsKJiM0MzsJLyogSWYgbm8gY2xvY2ssIG1pbWljIHB0cF9jbG9ja19pbmRleF9ieV9vZl9ub2RlKCkgZmFpbCBhbmQgcmV0dXJuIC0xICovCiYjNDM7CWlmICghcHJpdi0mZ3Q7b2ZfZ3B0cCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJcmV0dXJuIHB0cF9jbG9ja19pbmRleF9ieV9vZl9ub2RlKHByaXYtJmd0O29mX2dwdHApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuNF9wdHBfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkvKiBFbmFibGUgZ1BUUCBDbG9jayBhbmQgU2VsZWN0IEhpZ2gtc3BlZWQgcGVyaXBoZXJhbCBidXMgY2xvY2suICovCiYjNDM7CXJldCA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyB8IENDQ19HQUMgfCBDQ0NfQ1NFTF9IUEIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogU2V0IFBUUCBzb3VyY2UgdG8gR1BUUCBtb2R1bGUsIG9ubHkgb3B0aW9uIG9uIEdlbjQuICovCiYjNDM7CWlmIChwcml2LSZndDtvZl9ncHRwKQomIzQzOwkJcmF2Yl9tb2RpZnkobmRldiwgQVBTUiwgQVBTUl9HUFRQVElNRVJfU09VUkNFIHwgQVBTUl9HUFRQQ0xPQ0ssCiYjNDM7CQkJICAgIEFQU1JfR1BUUFRJTUVSX1NPVVJDRSB8IEFQU1JfR1BUUENMT0NLKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9nZW40X3B0cF9pbmZvID0gewomIzQzOwkucHJvYmUgPSByYXZiX2dlbjRfcHRwX3Byb2JlLAomIzQzOwkuY2xvY2tfaW5kZXggPSByYXZiX2dlbjRfcHRwX2Nsb2NrX2luZGV4LAomIzQzOwkuc2V0X2NvbmZpZ19tb2RlID0gcmF2Yl9nZW40X3B0cF9zZXRfY29uZmlnX21vZGUsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuNF9od19pbmZvID0gewogCS5yZWNlaXZlID0gcmF2Yl9yeF9yY2FyLAogCS5zZXRfcmF0ZSA9IHJhdmJfc2V0X3JhdGVfcmNhciwKQEAgLTI3NTQsMTEgJiM0MzsyODI1LDMwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuNF9od19pbmZvID0gewogCS50eF9jb3VudGVycyA9IDEsCiAJLm11bHRpX2lycXMgPSAxLAogCS5pcnFfZW5fZGlzID0gMSwKLQkuY2NjX2dhYyA9IDEsCiYjNDM7CS5wdHAgPSAmYW1wO3JhdmJfZ2VuNF9wdHBfaW5mbywKIAkubmNfcXVldWVzID0gMSwKIAkubWFnaWNfcGt0ID0gMSwKIH07CiAKJiM0MztzdGF0aWMgaW50IHJhdmJfcnp2Mm1fcHRwX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwomIzQzOwlwcml2LSZndDtncHRwX2NsayA9IGRldm1fY2xrX2dldCgmYW1wO3ByaXYtJmd0O3BkZXYtJmd0O2RldiwgJiMzNDtncHRwJiMzNDspOwomIzQzOwlpZiAoSVNfRVJSKHByaXYtJmd0O2dwdHBfY2xrKSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKHByaXYtJmd0O2dwdHBfY2xrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJhdmJfY29tcHV0ZV9ndGkobmRldiwgcHJpdi0mZ3Q7Z3B0cF9jbGspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfcnp2Mm1fcHRwX2luZm8gPSB7CiYjNDM7CS5wcm9iZSA9IHJhdmJfcnp2Mm1fcHRwX3Byb2JlLAomIzQzOwkuY2xvY2tfaW5kZXggPSByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4LAomIzQzOwkuc2V0X2NvbmZpZ19tb2RlID0gcmF2Yl9nZW4yX3B0cF9zZXRfY29uZmlnX21vZGUsCiYjNDM7CS5kbWFjX3N0YXJ0ID0gcmF2Yl9wdHBfaW5pdCwKJiM0MzsJLmRtYWNfc3RvcCA9IHJhdmJfcHRwX3N0b3AsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfcnp2Mm1faHdfaW5mbyA9IHsKIAkucmVjZWl2ZSA9IHJhdmJfcnhfcmNhciwKIAkuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsCkBAIC0yNzc5LDggJiM0MzsyODY5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9yenYybV9od19pbmZvID0gewogCS5kYmF0X2VudHJ5X251bSA9IDIyLAogCS5tdWx0aV9pcnFzID0gMSwKIAkuZXJyX21nbXRfaXJxcyA9IDEsCi0JLmdwdHAgPSAxLAotCS5ncHRwX3JlZl9jbGsgPSAxLAomIzQzOwkucHRwID0gJmFtcDtyYXZiX3J6djJtX3B0cF9pbmZvLAogCS5uY19xdWV1ZXMgPSAxLAogCS5tYWdpY19wa3QgPSAxLAogfTsKQEAgLTI5NTUsNyAmIzQzOzMwNDQsNiBAQCBzdGF0aWMgaW50IHJhdmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlwcml2LSZndDtyc3RjID0gcnN0YzsKIAlwcml2LSZndDtuZGV2ID0gbmRldjsKIAlwcml2LSZndDtwZGV2ID0gcGRldjsKLQlwcml2LSZndDtwdHAucGhjX2luZGV4ID0gLTE7CiAJcHJpdi0mZ3Q7bnVtX3R4X3JpbmdbUkFWQl9CRV0gPSBCRV9UWF9SSU5HX1NJWkU7CiAJcHJpdi0mZ3Q7bnVtX3J4X3JpbmdbUkFWQl9CRV0gPSBCRV9SWF9SSU5HX1NJWkU7CiAJaWYgKGluZm8tJmd0O25jX3F1ZXVlcykgewpAQCAtMjk3MywxMiAmIzQzOzMwNjEsMTAgQEAgc3RhdGljIGludCByYXZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCWdvdG8gb3V0X3Jlc2V0X2Fzc2VydDsKIAl9CiAKLQlpZiAoaW5mby0mZ3Q7Z3B0cF9yZWZfY2xrKSB7Ci0JCXByaXYtJmd0O2dwdHBfY2xrID0gZGV2bV9jbGtfZ2V0KCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O2dwdHAmIzM0Oyk7Ci0JCWlmIChJU19FUlIocHJpdi0mZ3Q7Z3B0cF9jbGspKSB7Ci0JCQllcnJvciA9IFBUUl9FUlIocHJpdi0mZ3Q7Z3B0cF9jbGspOwomIzQzOwlpZiAoaW5mby0mZ3Q7cHRwICZhbXA7JmFtcDsgaW5mby0mZ3Q7cHRwLSZndDtwcm9iZSkgewomIzQzOwkJZXJyb3IgPSBpbmZvLSZndDtwdHAtJmd0O3Byb2JlKG5kZXYpOwomIzQzOwkJaWYgKGVycm9yKQogCQkJZ290byBvdXRfcmVzZXRfYXNzZXJ0OwotCQl9CiAJfQogCiAJcHJpdi0mZ3Q7cmVmY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O3JlZmNsayYjMzQ7KTsKQEAgLTMwMzEsMTAgJiM0MzszMTE3LDYgQEAgc3RhdGljIGludCByYXZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJbmRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7cmF2Yl9uZXRkZXZfb3BzOwogCW5kZXYtJmd0O2V0aHRvb2xfb3BzID0gJmFtcDtyYXZiX2V0aHRvb2xfb3BzOwogCi0JZXJyb3IgPSByYXZiX2NvbXB1dGVfZ3RpKG5kZXYpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfcnBtX3B1dDsKLQogCXJhdmJfcGFyc2VfZGVsYXlfbW9kZShucCwgbmRldik7CiAKIAkvKiBBbGxvY2F0ZSBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyB0YWJsZSAqLwpAQCAtMzE1Nyw2ICYjNDM7MzIzOSw3IEBAIHN0YXRpYyB2b2lkIHJhdmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJcG1fcnVudGltZV9kaXNhYmxlKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKIAlwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKGRldik7CiAJY2xrX3VucHJlcGFyZShwcml2LSZndDtyZWZjbGspOwomIzQzOwlvZl9ub2RlX3B1dChwcml2LSZndDtvZl9ncHRwKTsKIAlyZXNldF9jb250cm9sX2Fzc2VydChwcml2LSZndDtyc3RjKTsKIAlmcmVlX25ldGRldihuZGV2KTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKQEAgLTMxODIsOSAmIzQzOzMyNjUsNiBAQCBzdGF0aWMgaW50IHJhdmJfd29sX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCS8qIEVuYWJsZSBNYWdpY1BhY2tldCAqLwogCXJhdmJfbW9kaWZ5KG5kZXYsIEVDTVIsIEVDTVJfTVBERSwgRUNNUl9NUERFKTsKIAotCWlmIChwcml2LSZndDtpbmZvLSZndDtjY2NfZ2FjKQotCQlyYXZiX3B0cF9zdG9wKG5kZXYpOwotCiAJcmV0dXJuIGVuYWJsZV9pcnFfd2FrZShwcml2LSZndDtlbWFjX2lycSk7CiB9CiAKQEAgLTMyMDQsOSAmIzQzOzMyODQsNiBAQCBzdGF0aWMgaW50IHJhdmJfd29sX3Jlc3RvcmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlpZiAocHJpdi0mZ3Q7aW5mby0mZ3Q7Y2NjX2dhYykKLQkJcmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LSZndDtwZGV2KTsKLQogCWlmIChpbmZvLSZndDtuY19xdWV1ZXMpCiAJCW5hcGlfZW5hYmxlKCZhbXA7cHJpdi0mZ3Q7bmFwaVtSQVZCX05DXSk7CiAJbmFwaV9lbmFibGUoJmFtcDtwcml2LSZndDtuYXBpW1JBVkJfQkVdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuYwppbmRleCA0MzIxOGJjMTViMTUxLi4xOWQwMzliOWQyNGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfcHRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jCkBAIC0zMTMsMzEgJiM0MzszMTMsMzkgQEAgdm9pZCByYXZiX3B0cF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJcmF2Yl93cml0ZShuZGV2LCB+KGdpcyB8IEdJU19SRVNFUlZFRCksIEdJUyk7CiB9CiAKLXZvaWQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKJiM0MztpbnQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7Ci0Jc3RydWN0IHB0cF9jbG9jayAqY2xvY2s7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJaW50IHJldCA9IDA7CiAKIAlwcml2LSZndDtwdHAuaW5mbyA9IHJhdmJfcHRwX2luZm87CiAKLQlwcml2LSZndDtwdHAuZGVmYXVsdF9hZGRlbmQgPSByYXZiX3JlYWQobmRldiwgR1RJKTsKJiM0MzsJcHJpdi0mZ3Q7cHRwLmRlZmF1bHRfYWRkZW5kID0gcHJpdi0mZ3Q7Z3RpX3RpdjsKIAlwcml2LSZndDtwdHAuY3VycmVudF9hZGRlbmQgPSBwcml2LSZndDtwdHAuZGVmYXVsdF9hZGRlbmQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ByaXYtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJLyogU2V0IGdQVFAgVGltZXIgSW5jcmVtZW50IFZhbHVlLiAqLwomIzQzOwlyYXZiX3dyaXRlKG5kZXYsIHByaXYtJmd0O3B0cC5kZWZhdWx0X2FkZGVuZCwgR1RJKTsKJiM0MzsKJiM0MzsJLyogUmVxdWVzdCBHVEkgbG9hZGluZy4gKi8KJiM0MzsJcmF2Yl9tb2RpZnkobmRldiwgR0NDUiwgR0NDUl9MVEksIEdDQ1JfTFRJKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgR0lUIGxvYWRpbmcgdG8gY29tcGxldGUuICovCiAJcmF2Yl93YWl0KG5kZXYsIEdDQ1IsIEdDQ1JfVENSLCBHQ0NSX1RDUl9OT1JFUSk7CiYjNDM7CiAJcmF2Yl9tb2RpZnkobmRldiwgR0NDUiwgR0NDUl9UQ1NTLCBHQ0NSX1RDU1NfQURKR1BUUCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O2xvY2ssIGZsYWdzKTsKIAotCWNsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKCZhbXA7cHJpdi0mZ3Q7cHRwLmluZm8sICZhbXA7cGRldi0mZ3Q7ZGV2KTsKLQlpZiAoSVNfRVJSKGNsb2NrKSkgewotCQluZXRkZXZfZXJyKG5kZXYsICYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJXBlXG4mIzM0OywgY2xvY2spOwotCQljbG9jayA9IE5VTEw7CiYjNDM7CXByaXYtJmd0O3B0cC5jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcigmYW1wO3ByaXYtJmd0O3B0cC5pbmZvLCAmYW1wO3ByaXYtJmd0O3BkZXYtJmd0O2Rldik7CiYjNDM7CWlmIChJU19FUlIocHJpdi0mZ3Q7cHRwLmNsb2NrKSkgewomIzQzOwkJcmV0ID0gUFRSX0VSUihwcml2LSZndDtwdHAuY2xvY2spOwomIzQzOwkJcHJpdi0mZ3Q7cHRwLmNsb2NrID0gTlVMTDsKJiM0MzsJCXJhdmJfcHRwX3N0b3AobmRldik7CiAJfQogCi0JV1JJVEVfT05DRShwcml2LSZndDtwdHAuY2xvY2ssIGNsb2NrKTsKLQlpZiAoY2xvY2spCi0JCVdSSVRFX09OQ0UocHJpdi0mZ3Q7cHRwLnBoY19pbmRleCwgcHRwX2Nsb2NrX2luZGV4KGNsb2NrKSk7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHJhdmJfcHRwX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCkBAIC0zNjAsMTQgJiM0MzszNjgsMTAgQEAgc3RhdGljIHZvaWQgcmF2Yl9wdHBfc3luY19pcnFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogdm9pZCByYXZiX3B0cF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQlzdHJ1Y3QgcHRwX2Nsb2NrICpjbG9jazsKLQotCVdSSVRFX09OQ0UocHJpdi0mZ3Q7cHRwLnBoY19pbmRleCwgLTEpOwotCWNsb2NrID0geGNoZygmYW1wO3ByaXYtJmd0O3B0cC5jbG9jaywgTlVMTCk7CiAKIAlyYXZiX3B0cF9kaXNhYmxlKG5kZXYpOwogCXJhdmJfcHRwX3N5bmNfaXJxcyhuZGV2KTsKIAotCWlmIChjbG9jaykKLQkJcHRwX2Nsb2NrX3VucmVnaXN0ZXIoY2xvY2spOwomIzQzOwlpZiAocHJpdi0mZ3Q7cHRwLmNsb2NrKQomIzQzOwkJcHRwX2Nsb2NrX3VucmVnaXN0ZXIocHJpdi0mZ3Q7cHRwLmNsb2NrKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB0aGlzIExpbnV4IGtlcm5lbCBwYXRjaCBhbmQgZGVjaWRlIGlmIGl0JiMzOTtzIGZ1enotd29ydGh5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBkaWZmIGFuZCBzZWUgd2hhdCYjMzk7cyBiZWluZyB0d2Vha2VkLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgY2hhbmdlcyBhY3Jvc3MgZm91ciBmaWxlczogYERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yi5oYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmNgLCBhbmQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuY2AuIFRoYXQgZ2l2ZXMgbWUgYSBzdGFydGluZyBwb2ludC4KClRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYHJhdmJgLCB3aGljaCBmcm9tIHRoZSBmaWxlIHBhdGhzIGxvb2tzIGxpa2UgaXQmIzM5O3MgYSBSZW5lc2FzIEV0aGVybmV0IEFWQiBkcml2ZXIuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBhIFJlbmVzYXMgU29DIEV0aGVybmV0IGNvbnRyb2xsZXIuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHR5cGUgb2YgaGFyZHdhcmUgdGhpcyBwZXJ0YWlucyB0by4gTXkgcHJlZmVycmVkIG1ldGhvZCBpcyB1c3VhbGx5IHRvIGdsYW5jZSBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnYCB0byBjaGVjayBmb3IgdGhlIHByb3BlciBjb250ZXh0LCBvciBwZXJoYXBzIGxldmVyYWdlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIGByYXZiYCB3aXRoaW4gdGhlIHNvdXJjZSB0cmVlLiBUaGlzIHF1aWNrIGJpdCBvZiBhbmFseXNpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgYXJjaGl0ZWN0dXJlIGFuZCBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSQVZCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWc9MTk9Y29uZmlnIFNIX0VUSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZy0yOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZzoyOTpjb25maWcgUkFWQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnLTMwLVx0dHJpc3RhdGUgXCYjMzQ7UmVuZXNhcyBFdGhlcm5ldCBBVkIgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzY2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIFJlbmVzYXMgRXRoZXJuZXQgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSByZW1lbWJlciBzZWVpbmcgc29tZXRoaW5nIGludGVyZXN0aW5nIGluIHRoZSBgS2NvbmZpZ2AgZmlsZSwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIG92ZXJhbGwgZHJpdmVyJiMzOTtzIHNldHVwLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnYC4gTGluZSAyOSBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIGl0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSBjb3JlIGRyaXZlciBvcHRpb25zIG9yIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZC4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kIHRoYXQgYXJlYS4gTWF5YmUgYSBuZXcgb3B0aW9uIHdhcyBhZGRlZCBvciBhbiBvbGQgb25lIHJldmlzZWQsIEkgbmVlZCB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZC4gSSB3aWxsIHN0YXJ0IGJ5IHNlZWluZyB3aGF0JiMzOTtzIHJpZ2h0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdFx0c2VsZWN0IFBIWUxJQlxuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBSZW5lc2FzIFN1cGVySCBFdGhlcm5ldCBkZXZpY2UgZHJpdmVyLlxuICAyODpcdFxuICAyOTpcdGNvbmZpZyBSQVZCXG4gIDMwOlx0XHR0cmlzdGF0ZSBcJiMzNDtSZW5lc2FzIEV0aGVybmV0IEFWQiBzdXBwb3J0XCYjMzQ7XG4gIDMxOlx0XHRkZXBlbmRzIG9uIEFSQ0hfUkVORVNBUyB8fCBDT01QSUxFX1RFU1RcbiAgMzI6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgMzM6XHRcdHNlbGVjdCBDUkMzMlxuICAzNDpcdFx0c2VsZWN0IE1JSVxuICAzNTpcdFx0c2VsZWN0IE1ESU9fQklUQkFOR1xuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTFxuICAzNzpcdFx0c2VsZWN0IFBIWUxJQlxuICAzODpcdFx0c2VsZWN0IFJFU0VUX0NPTlRST0xMRVJcbiAgMzk6XHRcdGhlbHBcbiAgNDA6XHRcdCAgUmVuZXNhcyBFdGhlcm5ldCBBVkIgZGV2aWNlIGRyaXZlci5cbiAgNDE6XHRcbiAgNDI6XHRjb25maWcgUkVORVNBU19FVEhFUl9TV0lUQ0hcbiAgNDM6XHRcdHRyaXN0YXRlIFwmIzM0O1JlbmVzYXMgRXRoZXJuZXQgU3dpdGNoIHN1cHBvcnRcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQVJDSF9SRU5FU0FTIHx8IENPTVBJTEVfVEVTVFxuICA0NTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS1xuICA0NjpcdFx0c2VsZWN0IENSQzMyXG4gIDQ3Olx0XHRzZWxlY3QgTUlJXG4gIDQ4Olx0XHRzZWxlY3QgUEhZTElOS1xuICA0OTpcdFx0c2VsZWN0IFJFTkVTQVNfR0VONF9QVFBcbiAgNTA6XHRcdGhlbHBcbiAgNTE6XHRcdCAgUmVuZXNhcyBFdGhlcm5ldCBTd2l0Y2ggZGV2aWNlIGRyaXZlci5cbiAgNTI6XHRcbiAgNTM6XHRjb25maWcgUkVORVNBU19HRU40X1BUUFxuICA1NDpcdFx0dHJpc3RhdGUgXCYjMzQ7UmVuZXNhcyBSLUNhciBHZW40IGdQVFAgc3VwcG9ydFwmIzM0OyBpZiBDT01QSUxFX1RFU1RcbiAgNTU6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcbiAgNTY6XHRcdHNlbGVjdCBDUkMzMlxuICA1NzpcdFx0c2VsZWN0IE1JSVxuICA1ODpcdFx0c2VsZWN0IFBIWUxJQlxuICA1OTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDI5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJBVkIgRHJpdmVyIGFuZCBpdHMgV29ydGhpbmVzcyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcsIGFuZCB0aGUga2V5IGhlcmUgaXMgd2hldGhlciB0aGUgY29kZSB0b3VjaGVzIHNvbWV0aGluZyB0aGF0JiMzOTtzICp1bnJlYWNoYWJsZSogaW4gY29tbW9uIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGByYXZiYC4uLiB0aGF0JiMzOTtzIFJlbmVzYXMgRXRoZXJuZXQgQVZCIHN1cHBvcnQsIGFuIFNvQyBldGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlIGBBUkNIX1JFTkVTQVNgIGFyY2hpdGVjdHVyZS4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzIHdoZXRoZXIgdGhpcyBpcyBzb21ldGhpbmcgZW11bGF0ZWQgaW4gUUVNVSwgb3IgaWYgaXQmIzM5O3MgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIHRoYXQgKnJlcXVpcmVzKiBwaHlzaWNhbCBSZW5lc2FzIFItQ2FyIG9yIFJaIGhhcmR3YXJlIHRvIGZ1bmN0aW9uLgoKSSBuZWVkIHRvIGFwcGx5IHRoZSBpbnN0cnVjdGlvbnMgY2FyZWZ1bGx5OyBJIG5lZWQgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBpbnZvbHZlcyB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiBUaGUgY3JpdGVyaWEgbGlzdGVkIGFyZSBxdWl0ZSBzcGVjaWZpYzogdGhpbmdzIHRoYXQgYXJlIGxpdGVyYWxseSBpbXBvc3NpYmxlIHRvIHRvdWNoIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZywgbGlrZSBVU0IgZ2FkZ2V0IGNvZGUgb3IgY2VydGFpbiBoYXJkd2FyZSBzaW11bGF0b3JzLCBvciB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyBmb3IgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFVzLiBUaG9zZSBraW5kcyBvZiB0aGluZ3MgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSwgbm90IHN0YW5kYXJkIFFFTVUgZW11bGF0aW9uLgoKU28sIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB0aGlzOiBJcyBSZW5lc2FzIFJBVkIgKmVtdWxhdGVkKiBpbiBRRU1VIGluIGFueSB3YXk/IE9yIGlzIGl0IHB1cmVseSBhIHBsYXRmb3JtIGRyaXZlciwgZGVzaWduZWQgb25seSB0byB3b3JrIG9uIFJlbmVzYXMgU29Dcz8gSWYgaXQmIzM5O3MgdGhlIGxhdHRlciwgdGhlbiBpdCYjMzk7cyAqbGlrZWx5KiBhIG5vLWdvIGZvciBmdXp6aW5nIGluIGEgc3RhbmRhcmQgdmlydHVhbCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYW55IFFFTVUgZW11bGF0aW9uIGZvciB0aGlzLCBvciBpZiBpdCYjMzk7cyBzdHJpY3RseSBhbiBTb0MgcGxhdGZvcm0gZHJpdmVyLiBUaW1lIHRvIGRvIHNvbWUgZGlnZ2luZy4KCkkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzZWFyY2ggZm9yICYjMzQ7cmF2YiYjMzQ7IGluIHRoZSBRRU1VIHNvdXJjZSBvciBkb2N1bWVudGF0aW9uLCBhbmQgSSB3aWxsIGNoZWNrIHRvIHNlZSBpZiBgcmF2YmAgaXMgcHVyZWx5IGFuIFNvQyBwbGF0Zm9ybSBkcml2ZXIuCgpJJiMzOTtsbCBhbHNvIGhhdmUgYSBsb29rIGF0IGhvdyBgcmF2YmAgaXMgcHJvYmVkIGFuZCBpbml0aWFsaXplZCB0byBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgaXQgZGVwZW5kcyBvbiB0aGUgaGFyZHdhcmUuIEkmIzM5O2xsIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jYCBmb3Igc29tZSBjbHVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfcGxhdGZvcm1fZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jPTMzOTU9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcmF2Yl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYy0zNDA0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYzozNDA1Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIocmF2Yl9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYy0zNDA2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTI2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgcmF2Yl9kcml2ZXJgJiMzOTtzIGBvZl9tYXRjaF90YWJsZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgcmF2Yl9kcml2ZXJgIGNvZGUgYWdhaW4uIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggaXRzIGBvZl9tYXRjaF90YWJsZWAuIFRoaXMgdGFibGUsIG5hdHVyYWxseSwgaXMgY3JpdGljYWwgZm9yIGRldmljZSB0cmVlIGJpbmRpbmcuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0JiMzOTtzIHN0cnVjdHVyZWQsIHdoYXQgcHJvcGVydGllcyBhcmUgYmVpbmcgbWF0Y2hlZCwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipQcm9wZXJ0eSBNYXRjaGluZzoqKiBXaGF0IHNwZWNpZmljIHByb3BlcnRpZXMgaW4gdGhlIGRldmljZSB0cmVlIGlzIHRoaXMgZHJpdmVyIGNvbmZpZ3VyZWQgdG8gaGFuZGxlPyBBcmUgdGhleSB1c2luZyB0aGUgc3RhbmRhcmQgcHJvcGVydGllcywgb3IgaGF2ZSB0aGV5IGludHJvZHVjZWQgYW55IGN1c3RvbSBvbmVzPyBBcmUgdGhleSB1c2luZyBjb21wYXRpYmxlIHN0cmluZ3MgYXBwcm9wcmlhdGVseT8KKiAgICoqT3JkZXIgYW5kIFNwZWNpZmljaXR5OioqIEhvdyBhcmUgdGhlIGVudHJpZXMgb3JkZXJlZD8gQXJlIHRoZXkgcHJpb3JpdGl6ZWQgbG9naWNhbGx5IGJhc2VkIG9uIGRldmljZSB2YXJpYXRpb25zLCBvciBhcmUgdGhlcmUgYW55IGFtYmlndW91cyBtYXRjaGVzIHRoYXQgbWlnaHQgY2F1c2UgcHJvYmxlbXM/IElzIGl0IGJyb2FkIG9yIHNwZWNpZmljPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgZGV2aWNlcyB0byBtYXRjaCBpbiB0aGUgd3Jvbmcgb3JkZXI/CiogICAqKlZlcnNpb24gQ29uc2lkZXJhdGlvbnM6KiogQXJlIHRoZXJlIGFueSB2ZXJzaW9uIGNvbnNpZGVyYXRpb25zIHRvIHRha2UgaW50byBhY2NvdW50PyBPbGRlciBvciBuZXdlciBkZXZpY2UgdHJlZXMgdGhhdCB3aWxsIGJlIGhhbmRsZWQgYnkgdGhpcyBkcml2ZXI/CiogICAqKk92ZXJhbGwgU3RyYXRlZ3k6KiogSXMgdGhlIGRyaXZlciBpbXBsZW1lbnRpbmcgYW4gZWZmZWN0aXZlIGFwcHJvYWNoIHRvIG1hbmFnaW5nIGRpZmZlcmVudCBoYXJkd2FyZSByZXZpc2lvbnMgb3IgY29uZmlndXJhdGlvbnM/IElzIGl0IG92ZXJseSBjb21wbGV4LCBvciBpcyBpdCBzaW1wbGUsIGVsZWdhbnQsIGFuZCBlYXN5IHRvIG1haW50YWluPwoqICAgKipFcnJvciBQcmV2ZW50aW9uOioqIEZpbmFsbHksIEkmIzM5O20gY2hlY2tpbmcgZm9yIGFyZWFzIHRoYXQgY291bGQgYmUgdGlnaHRlbmVkIHVwIHRvIHByZXZlbnQgZXJyb3JzLiBEb2VzIGl0IHNlZW0gbGlrZSBhbiBhcHByb3ByaWF0ZSBhbW91bnQgb2YgY2hlY2tzIGFuZCBiYWxhbmNlcyBhcmUgaW4gcGxhY2U/CgpVbmRlcnN0YW5kaW5nIHRoaXMgdGFibGUgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gZGVidWdnaW5nIHRoZSBkcml2ZXIgc28gSSYjMzk7bGwgYmUgcmVhbGx5IGZvY3VzaW5nIG9uIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzNzA6XHR9XG4zMzcxOlx0XG4zMzcyOlx0c3RhdGljIGludCByYXZiX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4zMzczOlx0e1xuMzM3NDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbjMzNzU6XHRcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbjMzNzY6XHRcbjMzNzc6XHRcdGNsa19kaXNhYmxlKHByaXYtXHUwMDNlcmVmY2xrKTtcbjMzNzg6XHRcbjMzNzk6XHRcdHJldHVybiAwO1xuMzM4MDpcdH1cbjMzODE6XHRcbjMzODI6XHRzdGF0aWMgaW50IHJhdmJfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuMzM4MzpcdHtcbjMzODQ6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4zMzg1Olx0XHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4zMzg2Olx0XG4zMzg3Olx0XHRyZXR1cm4gY2xrX2VuYWJsZShwcml2LVx1MDAzZXJlZmNsayk7XG4zMzg4Olx0fVxuMzM4OTpcdFxuMzM5MDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyByYXZiX2Rldl9wbV9vcHMgPSB7XG4zMzkxOlx0XHRTWVNURU1fU0xFRVBfUE1fT1BTKHJhdmJfc3VzcGVuZCwgcmF2Yl9yZXN1bWUpXG4zMzkyOlx0XHRSVU5USU1FX1BNX09QUyhyYXZiX3J1bnRpbWVfc3VzcGVuZCwgcmF2Yl9ydW50aW1lX3Jlc3VtZSwgTlVMTClcbjMzOTM6XHR9O1xuMzM5NDpcdFxuMzM5NTpcdHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJhdmJfZHJpdmVyID0ge1xuMzM5NjpcdFx0LnByb2JlXHRcdD0gcmF2Yl9wcm9iZSxcbjMzOTc6XHRcdC5yZW1vdmVcdFx0PSByYXZiX3JlbW92ZSxcbjMzOTg6XHRcdC5kcml2ZXIgPSB7XG4zMzk5Olx0XHRcdC5uYW1lXHQ9IFwmIzM0O3JhdmJcJiMzNDssXG4zNDAwOlx0XHRcdC5wbVx0PSBwbV9wdHIoXHUwMDI2cmF2Yl9kZXZfcG1fb3BzKSxcbjM0MDE6XHRcdFx0Lm9mX21hdGNoX3RhYmxlID0gcmF2Yl9tYXRjaF90YWJsZSxcbjM0MDI6XHRcdH0sXG4zNDAzOlx0fTtcbjM0MDQ6XHRcbjM0MDU6XHRtb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHJhdmJfZHJpdmVyKTtcbjM0MDY6XHRcbjM0MDc6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O01pdHN1aGlybyBLaW11cmEsIE1hc2FydSBOYWdhaVwmIzM0Oyk7XG4zNDA4Olx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1JlbmVzYXMgRXRoZXJuZXQgQVZCIGRyaXZlclwmIzM0Oyk7XG4zNDA5Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMIHYyXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NDMKCQkJCQkJCW91dHB1dDogOTcKCQkJCQkJCXRob3VnaHRzOiA0MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBOb3QgRnV6emFibGUgaW4gU3RhbmRhcmQgRW52aXJvbm1lbnRzKioKCk9rYXksIHNvIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIHRoaXMgcGF0Y2ggdGFyZ2V0cyB0aGUgYHJhdmJgIGRyaXZlciwgd2hpY2ggaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBSZW5lc2FzIEV0aGVybmV0IEFWQiBjb250cm9sbGVycyBmb3VuZCBvbiB0aGVpciBSLUNhciBhbmQgUlovRzJML1YyTSBzZXJpZXMgU29Dcy4gVGhlIGtleSBoZXJlIGlzIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmN5LiBJdCBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IHRoaXMgZHJpdmVyIHJlbGllcyBvbiB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGRldmljZSB0cmVlIG5vZGVzIHByZXNlbnQgb25seSBvbiBSZW5lc2FzIFNvQyBib2FyZHMuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBRRU1VLCBldmVuIGluIHZpcnR1YWxpemVkIHNldHVwcyBsaWtlIEdDRSBvciBzdGFuZGFyZCBRRU1VIGluc3RhbmNlcyAoeDg2IG9yIGFybTY0IHZpcnQgbWFjaGluZXMpLCBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZXNlIFJlbmVzYXMgRXRoZXJuZXQgQVZCIGNvbnRyb2xsZXJzLiBUaGlzIG1lYW5zIHRoYXQgZXZlbiBpZiBJIHRyaWVkIHJ1bm5pbmcgZnV6emluZyB0b29scyBsaWtlIHN5emthbGxlciBpbiB0aGVzZSB2aXJ0dWFsIGVudmlyb25tZW50cywgdGhlIGByYXZiYCBkcml2ZXIgd291bGRuJiMzOTt0IGJlIGFjY2Vzc2libGUsIHByb2JlZCwgb3IgZXZlbiBleGVjdXRlZCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGlzIHNpbXBseSB1bmF2YWlsYWJsZS4KCkxldCBtZSBicmVhayBkb3duIHRoZSBzcGVjaWZpY3M6IHRoZSBwYXRjaCB0b3VjaGVzIHRoZSBEVCBiaW5kaW5nIGRvY3VtZW50LCBhbmQgc291cmNlIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIGByYXZiYCBkcml2ZXIuIFNwZWNpZmljYWxseSwgYHJhdmIuaGAsIGByYXZiX21haW4uY2AsIGFuZCBgcmF2Yl9wdHAuY2AgYXJlIGFsbCBpbXBsaWNhdGVkLiBJdCYjMzk7cyBmb2N1c2VkIG9uIHRoZSBSZW5lc2FzIEV0aGVybmV0IEFWQiBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfKmAgc3Vic3lzdGVtLiBUaGUgcmVsZXZhbnQgaGFyZHdhcmUgaXMgY2xlYXJseSBkZWZpbmVkOiBSZW5lc2FzIFItQ2FyIEdlbjIvR2VuMy9HZW40IGFuZCBSWi9WMk0gU29Dcy4KClRoZSBmdW5kYW1lbnRhbCBpc3N1ZSBpcyB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoZSBjb2RlLiBCZWNhdXNlIGl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyIGRlcGVuZGVudCBvbiBzcGVjaWZpYyBSZW5lc2FzIGhhcmR3YXJlIGFuZCBpdHMgRFQsIGl0JiMzOTtzIHVucmVhY2hhYmxlIGluIHRoZSBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMgY29tbW9ubHkgdXNlZCBmb3IgZnV6emluZy4gVGh1cywgSSBhbSBjb25maWRlbnQgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4KCk5vdywgSSYjMzk7bSBjaGVja2luZyB0aGUgcmVxdWlyZW1lbnRzIGZvciBgc2V0LXJlc3VsdHNgLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBhcmUgaXJyZWxldmFudCBpbiB0aGlzIGNhc2UuIE15IHJlYXNvbmluZyBpcyBjb25jaXNlLCBleHBsYWluaW5nIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmN5IGFuZCBpbmFjY2Vzc2liaWxpdHkgaW4gdGhlIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBBbmQgZmluYWxseSwgYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgZmFsc2VgLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIFJlbmVzYXMgRXRoZXJuZXQgQVZCIChSQVZCKSBwbGF0Zm9ybSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl8qKSwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gUmVuZXNhcyBSLUNhciBhbmQgUlogU29DcyBhbmQgcmVxdWlyZXMgcGh5c2ljYWwgU29DIGhhcmR3YXJlIG5vdCBhdmFpbGFibGUgb3IgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBjaGFuZ2VzIG1vZGlmeSB0aGUgUmVuZXNhcyBFdGhlcm5ldCBBVkIgKFJBVkIpIHBsYXRmb3JtIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiXyopLCB3aGljaCBpcyBzcGVjaWZpYyB0byBSZW5lc2FzIFItQ2FyIGFuZCBSWiBTb0NzIGFuZCByZXF1aXJlcyBwaHlzaWNhbCBTb0MgaGFyZHdhcmUgbm90IGF2YWlsYWJsZSBvciBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyNjoxNC41Nzg3OTQwNTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTIxMTUwMDYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBSZW5lc2FzIEV0aGVybmV0IEFWQiAoUkFWQikgcGxhdGZvcm0gZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfKiksIHdoaWNoIGlzIHNwZWNpZmljIHRvIFJlbmVzYXMgUi1DYXIgYW5kIFJaIFNvQ3MgYW5kIHJlcXVpcmVzIHBoeXNpY2FsIFNvQyBoYXJkd2FyZSBub3QgYXZhaWxhYmxlIG9yIGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjY6MTQuNTc4ODAyNjMzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTM5OTc1NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1YWFlYWViMDc2NGM2Nzc4ODIzYWQyM2MzZDNiZmI0NjYyMmZjOGIwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMDE6MjY6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMsZXRoZXJhdmIueWFtbFxcbmluZGV4IDFlMDBlZjViM2FjZGEuLmZhZDAwMjQ5MjQyMWEgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMsZXRoZXJhdmIueWFtbFxcbkBAIC05Nyw2ICs5Nyw4IEBAIHByb3BlcnRpZXM6XFxuIFxcbiAgIHBoeS1oYW5kbGU6IHRydWVcXG4gXFxuKyAgcHRwLXRpbWVyOiB0cnVlXFxuK1xcbiAgICcjYWRkcmVzcy1jZWxscyc6XFxuICAgICBkZXNjcmlwdGlvbjogTnVtYmVyIG9mIGFkZHJlc3MgY2VsbHMgZm9yIHRoZSBNRElPIGJ1cy5cXG4gICAgIGNvbnN0OiAxXFxuQEAgLTMwNSw2ICszMDcsMTUgQEAgYWxsT2Y6XFxuICAgICAgICAgICAgIGl0ZW1zOlxcbiAgICAgICAgICAgICAgIC0gY29uc3Q6IGZja1xcbiAgICAgICAgICAgICAgIC0gY29uc3Q6IHJlZmNsa1xcbisgIC0gaWY6XFxuKyAgICAgIG5vdDpcXG4rICAgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICAgICAgY29udGFpbnM6XFxuKyAgICAgICAgICAgICAgY29uc3Q6IHJlbmVzYXMsZXRoZXJhdmItcmNhci1nZW40XFxuKyAgICB0aGVuOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIHB0cC10aW1lcjogZmFsc2VcXG4gXFxuIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaFxcbmluZGV4IDNlZTRjNjEwODE4OTAuLjVkMzViNDBkN2M1ODQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaFxcbkBAIC0yNDksNiArMjQ5LDggQEAgZW51bSBBUFNSX0JJVCB7XFxuIFxcdEFQU1JfUkRNXFx0PSAweDAwMDAyMDAwLFxcbiBcXHRBUFNSX1RETVxcdD0gMHgwMDAwNDAwMCxcXG4gXFx0QVBTUl9NSUlTRUxFQ1RcXHQ9IDB4MDEwMDAwMDAsXFx0LyogUi1DYXIgVjRNIG9ubHkgKi9cXG4rXFx0QVBTUl9HUFRQVElNRVJfU09VUkNFID0gQklUKDI1KSwgLyogR2VuNCAqL1xcbitcXHRBUFNSX0dQVFBDTE9DS1xcdD0gQklUKDI5KSxcXHQvKiBHZW40ICovXFxuIH07XFxuIFxcbiAvKiBSQ1IgKi9cXG5AQCAtMTAyOCwxMyArMTAzMCwzNyBAQCBzdHJ1Y3QgcmF2Yl9wdHBfcGVyb3V0IHtcXG4gc3RydWN0IHJhdmJfcHRwIHtcXG4gXFx0c3RydWN0IHB0cF9jbG9jayAqY2xvY2s7XFxuIFxcdHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBpbmZvO1xcbi1cXHRpbnQgcGhjX2luZGV4O1xcbiBcXHR1MzIgZGVmYXVsdF9hZGRlbmQ7XFxuIFxcdHUzMiBjdXJyZW50X2FkZGVuZDtcXG4gXFx0aW50IGV4dHRzW05fRVhUX1RTXTtcXG4gXFx0c3RydWN0IHJhdmJfcHRwX3Blcm91dCBwZXJvdXRbTl9QRVJfT1VUXTtcXG4gfTtcXG4gXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gLSBQbGF0Zm9ybSBzcGVjaWZpYyBnUFRQIGJlaGF2aW9yXFxuKyAqXFxuKyAqIEVhY2ggZ2VuZXJhdGlvbiBvZiBSQVZCIGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IGJlaGF2aW9ycyB3aGVuIGludGVyYWN0aW5nXFxuKyAqIHdpdGggdGhlIGdQVFAgY2xvY2suIFRoaXMgc3RydWN0IHByb3ZpZGVzIHRoZSBjYWxsYmFja3MgdG8gYmUgY2FsbGVkIGF0XFxuKyAqIGNyaXRpY2FsIHBvaW50cyBpbiB0aGUgUkFWQiBkcml2ZXIuXFxuKyAqXFxuKyAqIEBwcm9iZTpcXHRcXHRQcm9iZSB0aGUgZ1BUUCBjbG9ja1xcbisgKiBAY2xvY2tfaW5kZXg6XFx0R2V0IHRoZSBQVFAgY2xvY2sgaW5kZXgsIGlmIGFueVxcbisgKiBAc2V0X2NvbmZpZ19tb2RlOlxcdEVudGVyIGNvbmZpZyBtb2RlXFxuKyAqIEBkbWFjX3N0YXJ0OlxcdFxcdENhbGxlZCB3aGVuIHRoZSBETUFDIHN0YXJ0c1xcbisgKiBAZG1hY19zdG9wOlxcdFxcdENhbGxlZCB3aGVuIHRoZSBETUFDIHN0b3BzXFxuKyAqIEBuZGV2X29wZW46XFx0XFx0Q2FsbGVkIHdoZW4gdGhlIG5kZXYgaXMgb3BlbmVkXFxuKyAqIEBuZGV2X2Nsb3NlOlxcdFxcdENhbGxlZCB3aGVuIHRoZSBuZGV2IGlzIGNsb3NlZFxcbisgKi9cXG4rc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHtcXG4rXFx0aW50ICgqcHJvYmUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4rXFx0aW50ICgqY2xvY2tfaW5kZXgpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4rXFx0aW50ICgqc2V0X2NvbmZpZ19tb2RlKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XFxuK1xcdGludCAoKmRtYWNfc3RhcnQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4rXFx0dm9pZCAoKmRtYWNfc3RvcCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbitcXHRpbnQgKCpuZGV2X29wZW4pKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4rXFx0dm9pZCAoKm5kZXZfY2xvc2UpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4rfTtcXG4rXFxuIHN0cnVjdCByYXZiX2h3X2luZm8ge1xcbiBcXHRpbnQgKCpyZWNlaXZlKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IGJ1ZGdldCwgaW50IHEpO1xcbiBcXHR2b2lkICgqc2V0X3JhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG5AQCAtMTA1Myw2ICsxMDc5LDcgQEAgc3RydWN0IHJhdmJfaHdfaW5mbyB7XFxuIFxcdHUzMiByeF9idWZmZXJfc2l6ZTtcXG4gXFx0dTMyIHJ4X2Rlc2Nfc2l6ZTtcXG4gXFx0dTMyIGRiYXRfZW50cnlfbnVtO1xcbitcXHRjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gKnB0cDsgLyogQ2FsbGJhY2tzIHRvIGhhbmRsZSBnUFRQIGludGVyYWN0aW9ucy4gKi9cXG4gXFx0dW5zaWduZWQgYWxpZ25lZF90eDogMTtcXG4gXFx0dW5zaWduZWQgY29hbGVzY2VfaXJxczoxO1xcdC8qIE5lZWRzIHNvZnR3YXJlIElSUSBjb2FsZXNjaW5nICovXFxuIFxcbkBAIC0xMDYzLDkgKzEwOTAsNiBAQCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHtcXG4gXFx0dW5zaWduZWQgbXVsdGlfaXJxczoxO1xcdFxcdC8qIEFWQi1ETUFDIGFuZCBFLU1BQyBoYXMgbXVsdGlwbGUgaXJxcyAqL1xcbiBcXHR1bnNpZ25lZCBpcnFfZW5fZGlzOjE7XFx0XFx0LyogSGFzIHNlcGFyYXRlIGlycSBlbmFibGUgYW5kIGRpc2FibGUgcmVncyAqL1xcbiBcXHR1bnNpZ25lZCBlcnJfbWdtdF9pcnFzOjE7XFx0LyogTGluZTEgKEVycikgYW5kIExpbmUyIChNZ210KSBpcnFzIGFyZSBzZXBhcmF0ZSAqL1xcbi1cXHR1bnNpZ25lZCBncHRwOjE7XFx0XFx0LyogQVZCLURNQUMgaGFzIGdQVFAgc3VwcG9ydCAqL1xcbi1cXHR1bnNpZ25lZCBjY2NfZ2FjOjE7XFx0XFx0LyogQVZCLURNQUMgaGFzIGdQVFAgc3VwcG9ydCBhY3RpdmUgaW4gY29uZmlnIG1vZGUgKi9cXG4tXFx0dW5zaWduZWQgZ3B0cF9yZWZfY2xrOjE7XFx0LyogZ1BUUCBoYXMgc2VwYXJhdGUgcmVmZXJlbmNlIGNsb2NrICovXFxuIFxcdHVuc2lnbmVkIG5jX3F1ZXVlczoxO1xcdFxcdC8qIEFWQi1ETUFDIGhhcyBSWCBhbmQgVFggTkMgcXVldWVzICovXFxuIFxcdHVuc2lnbmVkIG1hZ2ljX3BrdDoxO1xcdFxcdC8qIEUtTUFDIHN1cHBvcnRzIG1hZ2ljIHBhY2tldCBkZXRlY3Rpb24gKi9cXG4gXFx0dW5zaWduZWQgaGFsZl9kdXBsZXg6MTtcXHRcXHQvKiBFLU1BQyBzdXBwb3J0cyBoYWxmIGR1cGxleCBtb2RlICovXFxuQEAgLTExMTAsNiArMTEzNCw3IEBAIHN0cnVjdCByYXZiX3ByaXZhdGUge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIHRzX3NrYl9saXN0O1xcbiBcXHR1MzIgdHNfc2tiX3RhZztcXG4gXFx0c3RydWN0IHJhdmJfcHRwIHB0cDtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpvZl9ncHRwO1xcdC8qIFJlZmVyZW5jZSB0byBleHRlcm5hbCBnUFRQIGNsb2NrLCBpZiBhbnkuICovXFxuIFxcdHNwaW5sb2NrX3QgbG9jaztcXHRcXHQvKiBSZWdpc3RlciBhY2Nlc3MgbG9jayAqL1xcbiBcXHR1MzIgY3VyX3J4W05VTV9SWF9RVUVVRV07XFx0LyogQ29uc3VtZXIgcmluZyBpbmRpY2VzICovXFxuIFxcdHUzMiBkaXJ0eV9yeFtOVU1fUlhfUVVFVUVdO1xcdC8qIFByb2R1Y2VyIHJpbmcgaW5kaWNlcyAqL1xcbkBAIC0xMTYzLDcgKzExODgsNyBAQCB2b2lkIHJhdmJfbW9kaWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHJhdmJfcmVnIHJlZywgdTMyIGNsZWFyLFxcbiBpbnQgcmF2Yl93YWl0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHJhdmJfcmVnIHJlZywgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7XFxuIFxcbiB2b2lkIHJhdmJfcHRwX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XFxuLXZvaWQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7XFxuK2ludCByYXZiX3B0cF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4gdm9pZCByYXZiX3B0cF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4gXFxuICNlbmRpZlxcdC8qICNpZm5kZWYgX19SQVZCX0hfXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uY1xcbmluZGV4IGVhMWM3ZTUzNjc5MWUuLjY2YzljZDE1YTE5ZTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmNcXG5AQCAtNzA3LDcgKzcwNywxNSBAQCBzdGF0aWMgaW50IHJhdmJfZG1hY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbiBcXHQvKiBTZXR0aW5nIHRoZSBjb250cm9sIHdpbGwgc3RhcnQgdGhlIEFWQi1ETUFDIHByb2Nlc3MuICovXFxuLVxcdHJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19PUEVSQVRJT04pO1xcbitcXHRlcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX09QRVJBVElPTik7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0LyogSW5pdGlhbGlzZSBQVFAgQ2xvY2sgZHJpdmVyICovXFxuK1xcdGlmIChpbmZvLVxcdTAwM2VwdHAgXFx1MDAyNlxcdTAwMjYgaW5mby1cXHUwMDNlcHRwLVxcdTAwM2VkbWFjX3N0YXJ0KVxcbitcXHRcXHRyZXR1cm4gaW5mby1cXHUwMDNlcHRwLVxcdTAwM2VkbWFjX3N0YXJ0KG5kZXYpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJhdmJfZ2V0X3R4X3RzdGFtcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG5AQCAtMTExNSw2ICsxMTIzLDEwIEBAIHN0YXRpYyBpbnQgcmF2Yl9zdG9wX2RtYShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0XFx0XFx0bmV0ZGV2X2VycihuZGV2LCBcXFwiZmFpbGVkIHRvIHN0b3AgQVhJIEJVU1xcXFxuXFxcIik7XFxuIFxcdH1cXG4gXFxuK1xcdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xcbitcXHRpZiAoaW5mby1cXHUwMDNlcHRwIFxcdTAwMjZcXHUwMDI2IGluZm8tXFx1MDAzZXB0cC1cXHUwMDNlZG1hY19zdG9wKVxcbitcXHRcXHRpbmZvLVxcdTAwM2VwdHAtXFx1MDAzZWRtYWNfc3RvcChuZGV2KTtcXG4rXFxuIFxcdC8qIFN0b3AgQVZCLURNQUMgcHJvY2VzcyAqL1xcbiBcXHRyZXR1cm4gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTtcXG4gfVxcbkBAIC0xNzE5LDkgKzE3MzEsNyBAQCBzdGF0aWMgaW50IHJhdmJfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4gXFxuIFxcdGlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7XFxuIFxcdFxcdG5ldGlmX2RldmljZV9kZXRhY2gobmRldik7XFxuLVxcdFxcdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xcbi1cXHRcXHRpZiAoaW5mby1cXHUwMDNlZ3B0cClcXG4tXFx0XFx0XFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcXG4rXFxuIFxcdFxcdC8qIFdhaXQgZm9yIERNQSBzdG9wcGluZyAqL1xcbiBcXHRcXHRlcnJvciA9IHJhdmJfc3RvcF9kbWEobmRldik7XFxuIFxcdFxcdGlmIChlcnJvcikge1xcbkBAIC0xNzUyLDEwICsxNzYyLDYgQEAgc3RhdGljIGludCByYXZiX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcbiBcXHRcXHRyYXZiX2VtYWNfaW5pdChuZGV2KTtcXG4gXFxuLVxcdFxcdC8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqL1xcbi1cXHRcXHRpZiAoaW5mby1cXHUwMDNlZ3B0cClcXG4tXFx0XFx0XFx0cmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LVxcdTAwM2VwZGV2KTtcXG4tXFxuIFxcdFxcdG5ldGlmX2RldmljZV9hdHRhY2gobmRldik7XFxuIFxcdH1cXG4gXFxuQEAgLTE3NjcsOCArMTc3MywxMyBAQCBzdGF0aWMgaW50IHJhdmJfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIHtcXG4gXFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbiBcXHRjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvICpod19pbmZvID0gcHJpdi1cXHUwMDNlaW5mbztcXG4rXFx0aW50IGluZGV4ID0gLTE7XFxuK1xcbitcXHRpZiAoaHdfaW5mby1cXHUwMDNlcHRwIFxcdTAwMjZcXHUwMDI2IGh3X2luZm8tXFx1MDAzZXB0cC1cXHUwMDNlY2xvY2tfaW5kZXgpXFxuK1xcdFxcdGluZGV4ID0gaHdfaW5mby1cXHUwMDNlcHRwLVxcdTAwM2VjbG9ja19pbmRleChuZGV2KTtcXG4gXFxuLVxcdGlmIChod19pbmZvLVxcdTAwM2VncHRwIHx8IGh3X2luZm8tXFx1MDAzZWNjY19nYWMpIHtcXG4rXFx0LyogT25seSBhZHZlcnRpc2UgcHRwIGNsb2NrIGlmIHByZXNlbnQuICovXFxuK1xcdGlmIChpbmRleCBcXHUwMDNlPSAwKSB7XFxuIFxcdFxcdGluZm8tXFx1MDAzZXNvX3RpbWVzdGFtcGluZyA9XFxuIFxcdFxcdFxcdFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUgfFxcbiBcXHRcXHRcXHRTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFIHxcXG5AQCAtMTc3OSw3ICsxNzkwLDcgQEAgc3RhdGljIGludCByYXZiX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHRcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBIV1RTVEFNUF9GSUxURVJfTk9ORSkgfFxcbiBcXHRcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UKSB8XFxuIFxcdFxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEhXVFNUQU1QX0ZJTFRFUl9BTEwpO1xcbi1cXHRcXHRpbmZvLVxcdTAwM2VwaGNfaW5kZXggPSBSRUFEX09OQ0UocHJpdi1cXHUwMDNlcHRwLnBoY19pbmRleCk7XFxuK1xcdFxcdGluZm8tXFx1MDAzZXBoY19pbmRleCA9IGluZGV4O1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTgyNiw1NSArMTgzNywyNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJhdmJfZXRodG9vbF9vcHMgPSB7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IHJhdmJfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi17XFxuLVxcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4tXFx0Y29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyAqaW5mbyA9IHByaXYtXFx1MDAzZWluZm87XFxuLVxcdGludCBlcnJvcjtcXG4tXFxuLVxcdGlmIChpbmZvLVxcdTAwM2VncHRwKSB7XFxuLVxcdFxcdGVycm9yID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTtcXG4tXFx0XFx0aWYgKGVycm9yKVxcbi1cXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuLVxcdFxcdC8qIFNldCBDU0VMIHZhbHVlICovXFxuLVxcdFxcdHJhdmJfbW9kaWZ5KG5kZXYsIENDQywgQ0NDX0NTRUwsIENDQ19DU0VMX0hQQik7XFxuLVxcdH0gZWxzZSBpZiAoaW5mby1cXHUwMDNlY2NjX2dhYykge1xcbi1cXHRcXHRlcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyB8IENDQ19HQUMgfCBDQ0NfQ1NFTF9IUEIpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRlcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBlcnJvcjtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgcmF2Yl9zZXRfZ3RpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4gXFx0Y29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyAqaW5mbyA9IHByaXYtXFx1MDAzZWluZm87XFxuIFxcbi1cXHRpZiAoIShpbmZvLVxcdTAwM2VncHRwIHx8IGluZm8tXFx1MDAzZWNjY19nYWMpKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdGlmIChpbmZvLVxcdTAwM2VwdHAgXFx1MDAyNlxcdTAwMjYgaW5mby1cXHUwMDNlcHRwLVxcdTAwM2VzZXRfY29uZmlnX21vZGUpXFxuK1xcdFxcdHJldHVybiBpbmZvLVxcdTAwM2VwdHAtXFx1MDAzZXNldF9jb25maWdfbW9kZShuZGV2KTtcXG4gXFxuLVxcdHJhdmJfd3JpdGUobmRldiwgcHJpdi1cXHUwMDNlZ3RpX3RpdiwgR1RJKTtcXG4tXFxuLVxcdC8qIFJlcXVlc3QgR1RJIGxvYWRpbmcgKi9cXG4tXFx0cmF2Yl9tb2RpZnkobmRldiwgR0NDUiwgR0NDUl9MVEksIEdDQ1JfTFRJKTtcXG4rXFx0cmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcmF2Yl9jb21wdXRlX2d0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4rc3RhdGljIGludCByYXZiX2NvbXB1dGVfZ3RpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2xrICpjbGspXFxuIHtcXG4gXFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbi1cXHRjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvICppbmZvID0gcHJpdi1cXHUwMDNlaW5mbztcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gbmRldi1cXHUwMDNlZGV2LnBhcmVudDtcXG4gXFx0dW5zaWduZWQgbG9uZyByYXRlO1xcbiBcXHR1NjQgaW5jO1xcbiBcXG4tXFx0aWYgKCEoaW5mby1cXHUwMDNlZ3B0cCB8fCBpbmZvLVxcdTAwM2VjY2NfZ2FjKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRpZiAoaW5mby1cXHUwMDNlZ3B0cF9yZWZfY2xrKVxcbi1cXHRcXHRyYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXFx1MDAzZWdwdHBfY2xrKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRyYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXFx1MDAzZWNsayk7XFxuK1xcdHJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcXG4gXFx0aWYgKCFyYXRlKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuQEAgLTE5NzQsMTEgKzE5NTQsMTIgQEAgc3RhdGljIGludCByYXZiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcbiBcXHRyYXZiX2VtYWNfaW5pdChuZGV2KTtcXG4gXFxuLVxcdHJhdmJfc2V0X2d0aShuZGV2KTtcXG4tXFxuIFxcdC8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqL1xcbi1cXHRpZiAoaW5mby1cXHUwMDNlZ3B0cCB8fCBpbmZvLVxcdTAwM2VjY2NfZ2FjKVxcbi1cXHRcXHRyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtXFx1MDAzZXBkZXYpO1xcbitcXHRpZiAoaW5mby1cXHUwMDNlcHRwIFxcdTAwMjZcXHUwMDI2IGluZm8tXFx1MDAzZXB0cC1cXHUwMDNlbmRldl9vcGVuKSB7XFxuK1xcdFxcdGVycm9yID0gaW5mby1cXHUwMDNlcHRwLVxcdTAwM2VuZGV2X29wZW4obmRldik7XFxuK1xcdFxcdGlmIChlcnJvcilcXG4rXFx0XFx0XFx0Z290byBvdXRfcHRwX3N0b3A7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIFBIWSBjb250cm9sIHN0YXJ0ICovXFxuIFxcdGVycm9yID0gcmF2Yl9waHlfc3RhcnQobmRldik7XFxuQEAgLTE5OTAsOSArMTk3MSw2IEBAIHN0YXRpYyBpbnQgcmF2Yl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIG91dF9wdHBfc3RvcDpcXG4tXFx0LyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovXFxuLVxcdGlmIChpbmZvLVxcdTAwM2VncHRwIHx8IGluZm8tXFx1MDAzZWNjY19nYWMpXFxuLVxcdFxcdHJhdmJfcHRwX3N0b3AobmRldik7XFxuIFxcdHJhdmJfc3RvcF9kbWEobmRldik7XFxuIG91dF9zZXRfcmVzZXQ6XFxuIFxcdHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX1JFU0VUKTtcXG5AQCAtMjAzNiwxMCArMjAxNCw2IEBAIHN0YXRpYyB2b2lkIHJhdmJfdHhfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFxuIFxcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZGV2KTtcXG4gXFxuLVxcdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xcbi1cXHRpZiAoaW5mby1cXHUwMDNlZ3B0cClcXG4tXFx0XFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcXG4tXFxuIFxcdC8qIFdhaXQgZm9yIERNQSBzdG9wcGluZyAqL1xcbiBcXHRpZiAocmF2Yl9zdG9wX2RtYShuZGV2KSkge1xcbiBcXHRcXHQvKiBJZiByYXZiX3N0b3BfZG1hKCkgZmFpbHMsIHRoZSBoYXJkd2FyZSBpcyBzdGlsbCBvcGVyYXRpbmdcXG5AQCAtMjA3MiwxMCArMjA0Niw2IEBAIHN0YXRpYyB2b2lkIHJhdmJfdHhfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0cmF2Yl9lbWFjX2luaXQobmRldik7XFxuIFxcbiBvdXQ6XFxuLVxcdC8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqL1xcbi1cXHRpZiAoaW5mby1cXHUwMDNlZ3B0cClcXG4tXFx0XFx0cmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LVxcdTAwM2VwZGV2KTtcXG4tXFxuIFxcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmRldik7XFxuIFxcbiBvdXRfdW5sb2NrOlxcbkBAIC0yMjA4LDcgKzIxNzgsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgcmF2Yl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRkZXNjLVxcdTAwM2VkcHRyID0gY3B1X3RvX2xlMzIoZG1hX2FkZHIpO1xcbiBcXG4gXFx0LyogVFggdGltZXN0YW1wIHJlcXVpcmVkICovXFxuLVxcdGlmIChpbmZvLVxcdTAwM2VncHRwIHx8IGluZm8tXFx1MDAzZWNjY19nYWMpIHtcXG4rXFx0aWYgKGluZm8tXFx1MDAzZXB0cCkge1xcbiBcXHRcXHRpZiAocSA9PSBSQVZCX05DKSB7XFxuIFxcdFxcdFxcdHRzX3NrYiA9IGttYWxsb2Nfb2JqKCp0c19za2IsIEdGUF9BVE9NSUMpO1xcbiBcXHRcXHRcXHRpZiAoIXRzX3NrYikge1xcbkBAIC0yMzkwLDggKzIzNjAsOCBAQCBzdGF0aWMgaW50IHJhdmJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdH1cXG4gXFxuIFxcdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xcbi1cXHRpZiAoaW5mby1cXHUwMDNlZ3B0cCB8fCBpbmZvLVxcdTAwM2VjY2NfZ2FjKVxcbi1cXHRcXHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xcbitcXHRpZiAoaW5mby1cXHUwMDNlcHRwIFxcdTAwMjZcXHUwMDI2IGluZm8tXFx1MDAzZXB0cC1cXHUwMDNlbmRldl9jbG9zZSlcXG4rXFx0XFx0aW5mby1cXHUwMDNlcHRwLVxcdTAwM2VuZGV2X2Nsb3NlKG5kZXYpO1xcbiBcXG4gXFx0LyogU2V0IHRoZSBjb25maWcgbW9kZSB0byBzdG9wIHRoZSBBVkItRE1BQydzIHByb2Nlc3NlcyAqL1xcbiBcXHRpZiAocmF2Yl9zdG9wX2RtYShuZGV2KSBcXHUwMDNjIDApXFxuQEAgLTIzOTksNyArMjM2OSw3IEBAIHN0YXRpYyBpbnQgcmF2Yl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0XFx0XFx0ICAgXFxcImRldmljZSB3aWxsIGJlIHN0b3BwZWQgYWZ0ZXIgaC93IHByb2Nlc3NlcyBhcmUgZG9uZS5cXFxcblxcXCIpO1xcbiBcXG4gXFx0LyogQ2xlYXIgdGhlIHRpbWVzdGFtcCBsaXN0ICovXFxuLVxcdGlmIChpbmZvLVxcdTAwM2VncHRwIHx8IGluZm8tXFx1MDAzZWNjY19nYWMpIHtcXG4rXFx0aWYgKGluZm8tXFx1MDAzZXB0cCkge1xcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHNfc2tiLCB0c19za2IyLCBcXHUwMDI2cHJpdi1cXHUwMDNldHNfc2tiX2xpc3QsIGxpc3QpIHtcXG4gXFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnRzX3NrYi1cXHUwMDNlbGlzdCk7XFxuIFxcdFxcdFxcdGtmcmVlX3NrYih0c19za2ItXFx1MDAzZXNrYik7XFxuQEAgLTI2ODEsNiArMjY1MSw0MiBAQCBzdGF0aWMgaW50IHJhdmJfbWRpb19yZWxlYXNlKHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHJhdmJfZ2VuMl9wdHBfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXG4rXFx0cmV0dXJuIHJhdmJfY29tcHV0ZV9ndGkobmRldiwgcHJpdi1cXHUwMDNlY2xrKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbit7XFxuK1xcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFxuK1xcdHJldHVybiBwdHBfY2xvY2tfaW5kZXgocHJpdi1cXHUwMDNlcHRwLmNsb2NrKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIGdQVFAgQ2xvY2sgU2VsZWN0IEhpZ2gtc3BlZWQgcGVyaXBoZXJhbCBidXMgY2xvY2suICovXFxuK1xcdHJhdmJfbW9kaWZ5KG5kZXYsIENDQywgQ0NDX0NTRUwsIENDQ19DU0VMX0hQQik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyByYXZiX2dlbjJfcHRwX2luZm8gPSB7XFxuK1xcdC5wcm9iZSA9IHJhdmJfZ2VuMl9wdHBfcHJvYmUsXFxuK1xcdC5jbG9ja19pbmRleCA9IHJhdmJfZ2VuMl9wdHBfY2xvY2tfaW5kZXgsXFxuK1xcdC5zZXRfY29uZmlnX21vZGUgPSByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZSxcXG4rXFx0LmRtYWNfc3RhcnQgPSByYXZiX3B0cF9pbml0LFxcbitcXHQuZG1hY19zdG9wID0gcmF2Yl9wdHBfc3RvcCxcXG4rfTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuMl9od19pbmZvID0ge1xcbiBcXHQucmVjZWl2ZSA9IHJhdmJfcnhfcmNhcixcXG4gXFx0LnNldF9yYXRlID0gcmF2Yl9zZXRfcmF0ZV9yY2FyLFxcbkBAIC0yNjk5LDEyICsyNzA1LDI2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuMl9od19pbmZvID0ge1xcbiBcXHRcXHRcXHQgIFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSksXFxuIFxcdC5yeF9kZXNjX3NpemUgPSBzaXplb2Yoc3RydWN0IHJhdmJfZXhfcnhfZGVzYyksXFxuIFxcdC5kYmF0X2VudHJ5X251bSA9IDIyLFxcbitcXHQucHRwID0gXFx1MDAyNnJhdmJfZ2VuMl9wdHBfaW5mbyxcXG4gXFx0LmFsaWduZWRfdHggPSAxLFxcbi1cXHQuZ3B0cCA9IDEsXFxuIFxcdC5uY19xdWV1ZXMgPSAxLFxcbiBcXHQubWFnaWNfcGt0ID0gMSxcXG4gfTtcXG4gXFxuK3N0YXRpYyBpbnQgcmF2Yl9nZW4zX3B0cF9zZXRfY29uZmlnX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0LyogRW5hYmxlIGdQVFAgQ2xvY2sgYW5kIFNlbGVjdCBIaWdoLXNwZWVkIHBlcmlwaGVyYWwgYnVzIGNsb2NrLiAqL1xcbitcXHRyZXR1cm4gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHIHwgQ0NDX0dBQyB8IENDQ19DU0VMX0hQQik7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9nZW4zX3B0cF9pbmZvID0ge1xcbitcXHQucHJvYmUgPSByYXZiX2dlbjJfcHRwX3Byb2JlLFxcbitcXHQuY2xvY2tfaW5kZXggPSByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4LFxcbitcXHQuc2V0X2NvbmZpZ19tb2RlID0gcmF2Yl9nZW4zX3B0cF9zZXRfY29uZmlnX21vZGUsXFxuK1xcdC5uZGV2X29wZW4gPSByYXZiX3B0cF9pbml0LFxcbitcXHQubmRldl9jbG9zZSA9IHJhdmJfcHRwX3N0b3AsXFxuK307XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjNfaHdfaW5mbyA9IHtcXG4gXFx0LnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsXFxuIFxcdC5zZXRfcmF0ZSA9IHJhdmJfc2V0X3JhdGVfcmNhcixcXG5AQCAtMjcyMywxNSArMjc0Myw2NiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjNfaHdfaW5mbyA9IHtcXG4gXFx0XFx0XFx0ICBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpLFxcbiBcXHQucnhfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCByYXZiX2V4X3J4X2Rlc2MpLFxcbiBcXHQuZGJhdF9lbnRyeV9udW0gPSAyMixcXG4rXFx0LnB0cCA9IFxcdTAwMjZyYXZiX2dlbjNfcHRwX2luZm8sXFxuIFxcdC5pbnRlcm5hbF9kZWxheSA9IDEsXFxuIFxcdC50eF9jb3VudGVycyA9IDEsXFxuIFxcdC5tdWx0aV9pcnFzID0gMSxcXG4gXFx0LmlycV9lbl9kaXMgPSAxLFxcbi1cXHQuY2NjX2dhYyA9IDEsXFxuIFxcdC5uY19xdWV1ZXMgPSAxLFxcbiBcXHQubWFnaWNfcGt0ID0gMSxcXG4gfTtcXG4gXFxuK3N0YXRpYyBpbnQgcmF2Yl9nZW40X3B0cF9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcbitcXHRwcml2LVxcdTAwM2VvZl9ncHRwID0gb2ZfcGFyc2VfcGhhbmRsZShwcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSwgXFxcInB0cC10aW1lclxcXCIsIDApO1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZW9mX2dwdHApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHByaXYtXFx1MDAzZW9mX2dwdHApKSB7XFxuK1xcdFxcdG9mX25vZGVfcHV0KHByaXYtXFx1MDAzZW9mX2dwdHApO1xcbitcXHRcXHRwcml2LVxcdTAwM2VvZl9ncHRwID0gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmF2Yl9nZW40X3B0cF9jbG9ja19pbmRleChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcbitcXHQvKiBJZiBubyBjbG9jaywgbWltaWMgcHRwX2Nsb2NrX2luZGV4X2J5X29mX25vZGUoKSBmYWlsIGFuZCByZXR1cm4gLTEgKi9cXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VvZl9ncHRwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRyZXR1cm4gcHRwX2Nsb2NrX2luZGV4X2J5X29mX25vZGUocHJpdi1cXHUwMDNlb2ZfZ3B0cCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmF2Yl9nZW40X3B0cF9zZXRfY29uZmlnX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LyogRW5hYmxlIGdQVFAgQ2xvY2sgYW5kIFNlbGVjdCBIaWdoLXNwZWVkIHBlcmlwaGVyYWwgYnVzIGNsb2NrLiAqL1xcbitcXHRyZXQgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcgfCBDQ0NfR0FDIHwgQ0NDX0NTRUxfSFBCKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIFNldCBQVFAgc291cmNlIHRvIEdQVFAgbW9kdWxlLCBvbmx5IG9wdGlvbiBvbiBHZW40LiAqL1xcbitcXHRpZiAocHJpdi1cXHUwMDNlb2ZfZ3B0cClcXG4rXFx0XFx0cmF2Yl9tb2RpZnkobmRldiwgQVBTUiwgQVBTUl9HUFRQVElNRVJfU09VUkNFIHwgQVBTUl9HUFRQQ0xPQ0ssXFxuK1xcdFxcdFxcdCAgICBBUFNSX0dQVFBUSU1FUl9TT1VSQ0UgfCBBUFNSX0dQVFBDTE9DSyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyByYXZiX2dlbjRfcHRwX2luZm8gPSB7XFxuK1xcdC5wcm9iZSA9IHJhdmJfZ2VuNF9wdHBfcHJvYmUsXFxuK1xcdC5jbG9ja19pbmRleCA9IHJhdmJfZ2VuNF9wdHBfY2xvY2tfaW5kZXgsXFxuK1xcdC5zZXRfY29uZmlnX21vZGUgPSByYXZiX2dlbjRfcHRwX3NldF9jb25maWdfbW9kZSxcXG4rfTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuNF9od19pbmZvID0ge1xcbiBcXHQucmVjZWl2ZSA9IHJhdmJfcnhfcmNhcixcXG4gXFx0LnNldF9yYXRlID0gcmF2Yl9zZXRfcmF0ZV9yY2FyLFxcbkBAIC0yNzU0LDExICsyODI1LDMwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuNF9od19pbmZvID0ge1xcbiBcXHQudHhfY291bnRlcnMgPSAxLFxcbiBcXHQubXVsdGlfaXJxcyA9IDEsXFxuIFxcdC5pcnFfZW5fZGlzID0gMSxcXG4tXFx0LmNjY19nYWMgPSAxLFxcbitcXHQucHRwID0gXFx1MDAyNnJhdmJfZ2VuNF9wdHBfaW5mbyxcXG4gXFx0Lm5jX3F1ZXVlcyA9IDEsXFxuIFxcdC5tYWdpY19wa3QgPSAxLFxcbiB9O1xcbiBcXG4rc3RhdGljIGludCByYXZiX3J6djJtX3B0cF9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcbitcXHRwcml2LVxcdTAwM2VncHRwX2NsayA9IGRldm1fY2xrX2dldChcXHUwMDI2cHJpdi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBcXFwiZ3B0cFxcXCIpO1xcbitcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZWdwdHBfY2xrKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cXHUwMDNlZ3B0cF9jbGspO1xcbitcXG4rXFx0cmV0dXJuIHJhdmJfY29tcHV0ZV9ndGkobmRldiwgcHJpdi1cXHUwMDNlZ3B0cF9jbGspO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfcnp2Mm1fcHRwX2luZm8gPSB7XFxuK1xcdC5wcm9iZSA9IHJhdmJfcnp2Mm1fcHRwX3Byb2JlLFxcbitcXHQuY2xvY2tfaW5kZXggPSByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4LFxcbitcXHQuc2V0X2NvbmZpZ19tb2RlID0gcmF2Yl9nZW4yX3B0cF9zZXRfY29uZmlnX21vZGUsXFxuK1xcdC5kbWFjX3N0YXJ0ID0gcmF2Yl9wdHBfaW5pdCxcXG4rXFx0LmRtYWNfc3RvcCA9IHJhdmJfcHRwX3N0b3AsXFxuK307XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX3J6djJtX2h3X2luZm8gPSB7XFxuIFxcdC5yZWNlaXZlID0gcmF2Yl9yeF9yY2FyLFxcbiBcXHQuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsXFxuQEAgLTI3NzksOCArMjg2OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfcnp2Mm1faHdfaW5mbyA9IHtcXG4gXFx0LmRiYXRfZW50cnlfbnVtID0gMjIsXFxuIFxcdC5tdWx0aV9pcnFzID0gMSxcXG4gXFx0LmVycl9tZ210X2lycXMgPSAxLFxcbi1cXHQuZ3B0cCA9IDEsXFxuLVxcdC5ncHRwX3JlZl9jbGsgPSAxLFxcbitcXHQucHRwID0gXFx1MDAyNnJhdmJfcnp2Mm1fcHRwX2luZm8sXFxuIFxcdC5uY19xdWV1ZXMgPSAxLFxcbiBcXHQubWFnaWNfcGt0ID0gMSxcXG4gfTtcXG5AQCAtMjk1NSw3ICszMDQ0LDYgQEAgc3RhdGljIGludCByYXZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdHByaXYtXFx1MDAzZXJzdGMgPSByc3RjO1xcbiBcXHRwcml2LVxcdTAwM2VuZGV2ID0gbmRldjtcXG4gXFx0cHJpdi1cXHUwMDNlcGRldiA9IHBkZXY7XFxuLVxcdHByaXYtXFx1MDAzZXB0cC5waGNfaW5kZXggPSAtMTtcXG4gXFx0cHJpdi1cXHUwMDNlbnVtX3R4X3JpbmdbUkFWQl9CRV0gPSBCRV9UWF9SSU5HX1NJWkU7XFxuIFxcdHByaXYtXFx1MDAzZW51bV9yeF9yaW5nW1JBVkJfQkVdID0gQkVfUlhfUklOR19TSVpFO1xcbiBcXHRpZiAoaW5mby1cXHUwMDNlbmNfcXVldWVzKSB7XFxuQEAgLTI5NzMsMTIgKzMwNjEsMTAgQEAgc3RhdGljIGludCByYXZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdFxcdGdvdG8gb3V0X3Jlc2V0X2Fzc2VydDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGluZm8tXFx1MDAzZWdwdHBfcmVmX2Nsaykge1xcbi1cXHRcXHRwcml2LVxcdTAwM2VncHRwX2NsayA9IGRldm1fY2xrX2dldChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZ3B0cFxcXCIpO1xcbi1cXHRcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZWdwdHBfY2xrKSkge1xcbi1cXHRcXHRcXHRlcnJvciA9IFBUUl9FUlIocHJpdi1cXHUwMDNlZ3B0cF9jbGspO1xcbitcXHRpZiAoaW5mby1cXHUwMDNlcHRwIFxcdTAwMjZcXHUwMDI2IGluZm8tXFx1MDAzZXB0cC1cXHUwMDNlcHJvYmUpIHtcXG4rXFx0XFx0ZXJyb3IgPSBpbmZvLVxcdTAwM2VwdHAtXFx1MDAzZXByb2JlKG5kZXYpO1xcbitcXHRcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X3Jlc2V0X2Fzc2VydDtcXG4tXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRwcml2LVxcdTAwM2VyZWZjbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWwoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcInJlZmNsa1xcXCIpO1xcbkBAIC0zMDMxLDEwICszMTE3LDYgQEAgc3RhdGljIGludCByYXZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdG5kZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2cmF2Yl9uZXRkZXZfb3BzO1xcbiBcXHRuZGV2LVxcdTAwM2VldGh0b29sX29wcyA9IFxcdTAwMjZyYXZiX2V0aHRvb2xfb3BzO1xcbiBcXG4tXFx0ZXJyb3IgPSByYXZiX2NvbXB1dGVfZ3RpKG5kZXYpO1xcbi1cXHRpZiAoZXJyb3IpXFxuLVxcdFxcdGdvdG8gb3V0X3JwbV9wdXQ7XFxuLVxcbiBcXHRyYXZiX3BhcnNlX2RlbGF5X21vZGUobnAsIG5kZXYpO1xcbiBcXG4gXFx0LyogQWxsb2NhdGUgZGVzY3JpcHRvciBiYXNlIGFkZHJlc3MgdGFibGUgKi9cXG5AQCAtMzE1Nyw2ICszMjM5LDcgQEAgc3RhdGljIHZvaWQgcmF2Yl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0cG1fcnVudGltZV9kaXNhYmxlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbiBcXHRwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKGRldik7XFxuIFxcdGNsa191bnByZXBhcmUocHJpdi1cXHUwMDNlcmVmY2xrKTtcXG4rXFx0b2Zfbm9kZV9wdXQocHJpdi1cXHUwMDNlb2ZfZ3B0cCk7XFxuIFxcdHJlc2V0X2NvbnRyb2xfYXNzZXJ0KHByaXYtXFx1MDAzZXJzdGMpO1xcbiBcXHRmcmVlX25ldGRldihuZGV2KTtcXG4gXFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XFxuQEAgLTMxODIsOSArMzI2NSw2IEBAIHN0YXRpYyBpbnQgcmF2Yl93b2xfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdC8qIEVuYWJsZSBNYWdpY1BhY2tldCAqL1xcbiBcXHRyYXZiX21vZGlmeShuZGV2LCBFQ01SLCBFQ01SX01QREUsIEVDTVJfTVBERSk7XFxuIFxcbi1cXHRpZiAocHJpdi1cXHUwMDNlaW5mby1cXHUwMDNlY2NjX2dhYylcXG4tXFx0XFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcXG4tXFxuIFxcdHJldHVybiBlbmFibGVfaXJxX3dha2UocHJpdi1cXHUwMDNlZW1hY19pcnEpO1xcbiB9XFxuIFxcbkBAIC0zMjA0LDkgKzMyODQsNiBAQCBzdGF0aWMgaW50IHJhdmJfd29sX3Jlc3RvcmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXG4tXFx0aWYgKHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZWNjY19nYWMpXFxuLVxcdFxcdHJhdmJfcHRwX2luaXQobmRldiwgcHJpdi1cXHUwMDNlcGRldik7XFxuLVxcbiBcXHRpZiAoaW5mby1cXHUwMDNlbmNfcXVldWVzKVxcbiBcXHRcXHRuYXBpX2VuYWJsZShcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaVtSQVZCX05DXSk7XFxuIFxcdG5hcGlfZW5hYmxlKFxcdTAwMjZwcml2LVxcdTAwM2VuYXBpW1JBVkJfQkVdKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jXFxuaW5kZXggNDMyMThiYzE1YjE1MS4uMTlkMDM5YjlkMjRhNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfcHRwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfcHRwLmNcXG5AQCAtMzEzLDMxICszMTMsMzkgQEAgdm9pZCByYXZiX3B0cF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdHJhdmJfd3JpdGUobmRldiwgfihnaXMgfCBHSVNfUkVTRVJWRUQpLCBHSVMpO1xcbiB9XFxuIFxcbi12b2lkIHJhdmJfcHRwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuK2ludCByYXZiX3B0cF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4tXFx0c3RydWN0IHB0cF9jbG9jayAqY2xvY2s7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0cHJpdi1cXHUwMDNlcHRwLmluZm8gPSByYXZiX3B0cF9pbmZvO1xcbiBcXG4tXFx0cHJpdi1cXHUwMDNlcHRwLmRlZmF1bHRfYWRkZW5kID0gcmF2Yl9yZWFkKG5kZXYsIEdUSSk7XFxuK1xcdHByaXYtXFx1MDAzZXB0cC5kZWZhdWx0X2FkZGVuZCA9IHByaXYtXFx1MDAzZWd0aV90aXY7XFxuIFxcdHByaXYtXFx1MDAzZXB0cC5jdXJyZW50X2FkZGVuZCA9IHByaXYtXFx1MDAzZXB0cC5kZWZhdWx0X2FkZGVuZDtcXG4gXFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHQvKiBTZXQgZ1BUUCBUaW1lciBJbmNyZW1lbnQgVmFsdWUuICovXFxuK1xcdHJhdmJfd3JpdGUobmRldiwgcHJpdi1cXHUwMDNlcHRwLmRlZmF1bHRfYWRkZW5kLCBHVEkpO1xcbitcXG4rXFx0LyogUmVxdWVzdCBHVEkgbG9hZGluZy4gKi9cXG4rXFx0cmF2Yl9tb2RpZnkobmRldiwgR0NDUiwgR0NDUl9MVEksIEdDQ1JfTFRJKTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIEdJVCBsb2FkaW5nIHRvIGNvbXBsZXRlLiAqL1xcbiBcXHRyYXZiX3dhaXQobmRldiwgR0NDUiwgR0NDUl9UQ1IsIEdDQ1JfVENSX05PUkVRKTtcXG4rXFxuIFxcdHJhdmJfbW9kaWZ5KG5kZXYsIEdDQ1IsIEdDQ1JfVENTUywgR0NDUl9UQ1NTX0FESkdQVFApO1xcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRjbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcXHUwMDI2cHJpdi1cXHUwMDNlcHRwLmluZm8sIFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbi1cXHRpZiAoSVNfRVJSKGNsb2NrKSkge1xcbi1cXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJmYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlcGVcXFxcblxcXCIsIGNsb2NrKTtcXG4tXFx0XFx0Y2xvY2sgPSBOVUxMO1xcbitcXHRwcml2LVxcdTAwM2VwdHAuY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoXFx1MDAyNnByaXYtXFx1MDAzZXB0cC5pbmZvLCBcXHUwMDI2cHJpdi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VwdHAuY2xvY2spKSB7XFxuK1xcdFxcdHJldCA9IFBUUl9FUlIocHJpdi1cXHUwMDNlcHRwLmNsb2NrKTtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlcHRwLmNsb2NrID0gTlVMTDtcXG4rXFx0XFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcXG4gXFx0fVxcbiBcXG4tXFx0V1JJVEVfT05DRShwcml2LVxcdTAwM2VwdHAuY2xvY2ssIGNsb2NrKTtcXG4tXFx0aWYgKGNsb2NrKVxcbi1cXHRcXHRXUklURV9PTkNFKHByaXYtXFx1MDAzZXB0cC5waGNfaW5kZXgsIHB0cF9jbG9ja19pbmRleChjbG9jaykpO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCByYXZiX3B0cF9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbkBAIC0zNjAsMTQgKzM2OCwxMCBAQCBzdGF0aWMgdm9pZCByYXZiX3B0cF9zeW5jX2lycXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIHZvaWQgcmF2Yl9wdHBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuLVxcdHN0cnVjdCBwdHBfY2xvY2sgKmNsb2NrO1xcbi1cXG4tXFx0V1JJVEVfT05DRShwcml2LVxcdTAwM2VwdHAucGhjX2luZGV4LCAtMSk7XFxuLVxcdGNsb2NrID0geGNoZyhcXHUwMDI2cHJpdi1cXHUwMDNlcHRwLmNsb2NrLCBOVUxMKTtcXG4gXFxuIFxcdHJhdmJfcHRwX2Rpc2FibGUobmRldik7XFxuIFxcdHJhdmJfcHRwX3N5bmNfaXJxcyhuZGV2KTtcXG4gXFxuLVxcdGlmIChjbG9jaylcXG4tXFx0XFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIoY2xvY2spO1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcHRwLmNsb2NrKVxcbitcXHRcXHRwdHBfY2xvY2tfdW5yZWdpc3Rlcihwcml2LVxcdTAwM2VwdHAuY2xvY2spO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjI2OjE1LjE5Mzk2Mjk4N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjg1OTYzMTE5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBSZW5lc2FzIEV0aGVybmV0IEFWQiAoUkFWQikgcGxhdGZvcm0gZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfKiksIHdoaWNoIGlzIHNwZWNpZmljIHRvIFJlbmVzYXMgUi1DYXIgYW5kIFJaIFNvQ3MgYW5kIHJlcXVpcmVzIHBoeXNpY2FsIFNvQyBoYXJkd2FyZSBub3QgYXZhaWxhYmxlIG9yIGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWFhZWFlYjA3NjRjNjc3ODgyM2FkMjNjM2QzYmZiNDY2MjJmYzhiMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDE6MjY6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMsZXRoZXJhdmIueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sXG5pbmRleCAxZTAwZWY1YjNhY2RhLi5mYWQwMDI0OTI0MjFhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sXG5AQCAtOTcsNiArOTcsOCBAQCBwcm9wZXJ0aWVzOlxuIFxuICAgcGh5LWhhbmRsZTogdHJ1ZVxuIFxuKyAgcHRwLXRpbWVyOiB0cnVlXG4rXG4gICAnI2FkZHJlc3MtY2VsbHMnOlxuICAgICBkZXNjcmlwdGlvbjogTnVtYmVyIG9mIGFkZHJlc3MgY2VsbHMgZm9yIHRoZSBNRElPIGJ1cy5cbiAgICAgY29uc3Q6IDFcbkBAIC0zMDUsNiArMzA3LDE1IEBAIGFsbE9mOlxuICAgICAgICAgICAgIGl0ZW1zOlxuICAgICAgICAgICAgICAgLSBjb25zdDogZmNrXG4gICAgICAgICAgICAgICAtIGNvbnN0OiByZWZjbGtcbisgIC0gaWY6XG4rICAgICAgbm90OlxuKyAgICAgICAgcHJvcGVydGllczpcbisgICAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgICBjb250YWluczpcbisgICAgICAgICAgICAgIGNvbnN0OiByZW5lc2FzLGV0aGVyYXZiLXJjYXItZ2VuNFxuKyAgICB0aGVuOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBwdHAtdGltZXI6IGZhbHNlXG4gXG4gYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaFxuaW5kZXggM2VlNGM2MTA4MTg5MC4uNWQzNWI0MGQ3YzU4NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaFxuQEAgLTI0OSw2ICsyNDksOCBAQCBlbnVtIEFQU1JfQklUIHtcbiBcdEFQU1JfUkRNXHQ9IDB4MDAwMDIwMDAsXG4gXHRBUFNSX1RETVx0PSAweDAwMDA0MDAwLFxuIFx0QVBTUl9NSUlTRUxFQ1RcdD0gMHgwMTAwMDAwMCxcdC8qIFItQ2FyIFY0TSBvbmx5ICovXG4rXHRBUFNSX0dQVFBUSU1FUl9TT1VSQ0UgPSBCSVQoMjUpLCAvKiBHZW40ICovXG4rXHRBUFNSX0dQVFBDTE9DS1x0PSBCSVQoMjkpLFx0LyogR2VuNCAqL1xuIH07XG4gXG4gLyogUkNSICovXG5AQCAtMTAyOCwxMyArMTAzMCwzNyBAQCBzdHJ1Y3QgcmF2Yl9wdHBfcGVyb3V0IHtcbiBzdHJ1Y3QgcmF2Yl9wdHAge1xuIFx0c3RydWN0IHB0cF9jbG9jayAqY2xvY2s7XG4gXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gaW5mbztcbi1cdGludCBwaGNfaW5kZXg7XG4gXHR1MzIgZGVmYXVsdF9hZGRlbmQ7XG4gXHR1MzIgY3VycmVudF9hZGRlbmQ7XG4gXHRpbnQgZXh0dHNbTl9FWFRfVFNdO1xuIFx0c3RydWN0IHJhdmJfcHRwX3Blcm91dCBwZXJvdXRbTl9QRVJfT1VUXTtcbiB9O1xuIFxuKy8qKlxuKyAqIHN0cnVjdCByYXZiX2dwdHBfaW5mbyAtIFBsYXRmb3JtIHNwZWNpZmljIGdQVFAgYmVoYXZpb3JcbisgKlxuKyAqIEVhY2ggZ2VuZXJhdGlvbiBvZiBSQVZCIGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IGJlaGF2aW9ycyB3aGVuIGludGVyYWN0aW5nXG4rICogd2l0aCB0aGUgZ1BUUCBjbG9jay4gVGhpcyBzdHJ1Y3QgcHJvdmlkZXMgdGhlIGNhbGxiYWNrcyB0byBiZSBjYWxsZWQgYXRcbisgKiBjcml0aWNhbCBwb2ludHMgaW4gdGhlIFJBVkIgZHJpdmVyLlxuKyAqXG4rICogQHByb2JlOlx0XHRQcm9iZSB0aGUgZ1BUUCBjbG9ja1xuKyAqIEBjbG9ja19pbmRleDpcdEdldCB0aGUgUFRQIGNsb2NrIGluZGV4LCBpZiBhbnlcbisgKiBAc2V0X2NvbmZpZ19tb2RlOlx0RW50ZXIgY29uZmlnIG1vZGVcbisgKiBAZG1hY19zdGFydDpcdFx0Q2FsbGVkIHdoZW4gdGhlIERNQUMgc3RhcnRzXG4rICogQGRtYWNfc3RvcDpcdFx0Q2FsbGVkIHdoZW4gdGhlIERNQUMgc3RvcHNcbisgKiBAbmRldl9vcGVuOlx0XHRDYWxsZWQgd2hlbiB0aGUgbmRldiBpcyBvcGVuZWRcbisgKiBAbmRldl9jbG9zZTpcdFx0Q2FsbGVkIHdoZW4gdGhlIG5kZXYgaXMgY2xvc2VkXG4rICovXG4rc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHtcbitcdGludCAoKnByb2JlKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4rXHRpbnQgKCpjbG9ja19pbmRleCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuK1x0aW50ICgqc2V0X2NvbmZpZ19tb2RlKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4rXHRpbnQgKCpkbWFjX3N0YXJ0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4rXHR2b2lkICgqZG1hY19zdG9wKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4rXHRpbnQgKCpuZGV2X29wZW4pKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbitcdHZvaWQgKCpuZGV2X2Nsb3NlKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4rfTtcbitcbiBzdHJ1Y3QgcmF2Yl9od19pbmZvIHtcbiBcdGludCAoKnJlY2VpdmUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgYnVkZ2V0LCBpbnQgcSk7XG4gXHR2b2lkICgqc2V0X3JhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbkBAIC0xMDUzLDYgKzEwNzksNyBAQCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHtcbiBcdHUzMiByeF9idWZmZXJfc2l6ZTtcbiBcdHUzMiByeF9kZXNjX3NpemU7XG4gXHR1MzIgZGJhdF9lbnRyeV9udW07XG4rXHRjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gKnB0cDsgLyogQ2FsbGJhY2tzIHRvIGhhbmRsZSBnUFRQIGludGVyYWN0aW9ucy4gKi9cbiBcdHVuc2lnbmVkIGFsaWduZWRfdHg6IDE7XG4gXHR1bnNpZ25lZCBjb2FsZXNjZV9pcnFzOjE7XHQvKiBOZWVkcyBzb2Z0d2FyZSBJUlEgY29hbGVzY2luZyAqL1xuIFxuQEAgLTEwNjMsOSArMTA5MCw2IEBAIHN0cnVjdCByYXZiX2h3X2luZm8ge1xuIFx0dW5zaWduZWQgbXVsdGlfaXJxczoxO1x0XHQvKiBBVkItRE1BQyBhbmQgRS1NQUMgaGFzIG11bHRpcGxlIGlycXMgKi9cbiBcdHVuc2lnbmVkIGlycV9lbl9kaXM6MTtcdFx0LyogSGFzIHNlcGFyYXRlIGlycSBlbmFibGUgYW5kIGRpc2FibGUgcmVncyAqL1xuIFx0dW5zaWduZWQgZXJyX21nbXRfaXJxczoxO1x0LyogTGluZTEgKEVycikgYW5kIExpbmUyIChNZ210KSBpcnFzIGFyZSBzZXBhcmF0ZSAqL1xuLVx0dW5zaWduZWQgZ3B0cDoxO1x0XHQvKiBBVkItRE1BQyBoYXMgZ1BUUCBzdXBwb3J0ICovXG4tXHR1bnNpZ25lZCBjY2NfZ2FjOjE7XHRcdC8qIEFWQi1ETUFDIGhhcyBnUFRQIHN1cHBvcnQgYWN0aXZlIGluIGNvbmZpZyBtb2RlICovXG4tXHR1bnNpZ25lZCBncHRwX3JlZl9jbGs6MTtcdC8qIGdQVFAgaGFzIHNlcGFyYXRlIHJlZmVyZW5jZSBjbG9jayAqL1xuIFx0dW5zaWduZWQgbmNfcXVldWVzOjE7XHRcdC8qIEFWQi1ETUFDIGhhcyBSWCBhbmQgVFggTkMgcXVldWVzICovXG4gXHR1bnNpZ25lZCBtYWdpY19wa3Q6MTtcdFx0LyogRS1NQUMgc3VwcG9ydHMgbWFnaWMgcGFja2V0IGRldGVjdGlvbiAqL1xuIFx0dW5zaWduZWQgaGFsZl9kdXBsZXg6MTtcdFx0LyogRS1NQUMgc3VwcG9ydHMgaGFsZiBkdXBsZXggbW9kZSAqL1xuQEAgLTExMTAsNiArMTEzNCw3IEBAIHN0cnVjdCByYXZiX3ByaXZhdGUge1xuIFx0c3RydWN0IGxpc3RfaGVhZCB0c19za2JfbGlzdDtcbiBcdHUzMiB0c19za2JfdGFnO1xuIFx0c3RydWN0IHJhdmJfcHRwIHB0cDtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ3B0cDtcdC8qIFJlZmVyZW5jZSB0byBleHRlcm5hbCBnUFRQIGNsb2NrLCBpZiBhbnkuICovXG4gXHRzcGlubG9ja190IGxvY2s7XHRcdC8qIFJlZ2lzdGVyIGFjY2VzcyBsb2NrICovXG4gXHR1MzIgY3VyX3J4W05VTV9SWF9RVUVVRV07XHQvKiBDb25zdW1lciByaW5nIGluZGljZXMgKi9cbiBcdHUzMiBkaXJ0eV9yeFtOVU1fUlhfUVVFVUVdO1x0LyogUHJvZHVjZXIgcmluZyBpbmRpY2VzICovXG5AQCAtMTE2Myw3ICsxMTg4LDcgQEAgdm9pZCByYXZiX21vZGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSByYXZiX3JlZyByZWcsIHUzMiBjbGVhcixcbiBpbnQgcmF2Yl93YWl0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHJhdmJfcmVnIHJlZywgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7XG4gXG4gdm9pZCByYXZiX3B0cF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuLXZvaWQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7XG4raW50IHJhdmJfcHRwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuIHZvaWQgcmF2Yl9wdHBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4gXG4gI2VuZGlmXHQvKiAjaWZuZGVmIF9fUkFWQl9IX18gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uY1xuaW5kZXggZWExYzdlNTM2NzkxZS4uNjZjOWNkMTVhMTllMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmNcbkBAIC03MDcsNyArNzA3LDE1IEBAIHN0YXRpYyBpbnQgcmF2Yl9kbWFjX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbiBcdC8qIFNldHRpbmcgdGhlIGNvbnRyb2wgd2lsbCBzdGFydCB0aGUgQVZCLURNQUMgcHJvY2Vzcy4gKi9cbi1cdHJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19PUEVSQVRJT04pO1xuK1x0ZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19PUEVSQVRJT04pO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHQvKiBJbml0aWFsaXNlIFBUUCBDbG9jayBkcml2ZXIgKi9cbitcdGlmIChpbmZvLVx1MDAzZXB0cCBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2VwdHAtXHUwMDNlZG1hY19zdGFydClcbitcdFx0cmV0dXJuIGluZm8tXHUwMDNlcHRwLVx1MDAzZWRtYWNfc3RhcnQobmRldik7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcmF2Yl9nZXRfdHhfdHN0YW1wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuQEAgLTExMTUsNiArMTEyMywxMCBAQCBzdGF0aWMgaW50IHJhdmJfc3RvcF9kbWEoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRcdFx0bmV0ZGV2X2VycihuZGV2LCBcImZhaWxlZCB0byBzdG9wIEFYSSBCVVNcXG5cIik7XG4gXHR9XG4gXG4rXHQvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi9cbitcdGlmIChpbmZvLVx1MDAzZXB0cCBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2VwdHAtXHUwMDNlZG1hY19zdG9wKVxuK1x0XHRpbmZvLVx1MDAzZXB0cC1cdTAwM2VkbWFjX3N0b3AobmRldik7XG4rXG4gXHQvKiBTdG9wIEFWQi1ETUFDIHByb2Nlc3MgKi9cbiBcdHJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpO1xuIH1cbkBAIC0xNzE5LDkgKzE3MzEsNyBAQCBzdGF0aWMgaW50IHJhdmJfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcbiBcdGlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7XG4gXHRcdG5ldGlmX2RldmljZV9kZXRhY2gobmRldik7XG4tXHRcdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0XHRpZiAoaW5mby1cdTAwM2VncHRwKVxuLVx0XHRcdHJhdmJfcHRwX3N0b3AobmRldik7XG4rXG4gXHRcdC8qIFdhaXQgZm9yIERNQSBzdG9wcGluZyAqL1xuIFx0XHRlcnJvciA9IHJhdmJfc3RvcF9kbWEobmRldik7XG4gXHRcdGlmIChlcnJvcikge1xuQEAgLTE3NTIsMTAgKzE3NjIsNiBAQCBzdGF0aWMgaW50IHJhdmJfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcbiBcdFx0cmF2Yl9lbWFjX2luaXQobmRldik7XG4gXG4tXHRcdC8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0XHRpZiAoaW5mby1cdTAwM2VncHRwKVxuLVx0XHRcdHJhdmJfcHRwX2luaXQobmRldiwgcHJpdi1cdTAwM2VwZGV2KTtcbi1cbiBcdFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTtcbiBcdH1cbiBcbkBAIC0xNzY3LDggKzE3NzMsMTMgQEAgc3RhdGljIGludCByYXZiX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIHtcbiBcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmh3X2luZm8gPSBwcml2LVx1MDAzZWluZm87XG4rXHRpbnQgaW5kZXggPSAtMTtcbitcbitcdGlmIChod19pbmZvLVx1MDAzZXB0cCBcdTAwMjZcdTAwMjYgaHdfaW5mby1cdTAwM2VwdHAtXHUwMDNlY2xvY2tfaW5kZXgpXG4rXHRcdGluZGV4ID0gaHdfaW5mby1cdTAwM2VwdHAtXHUwMDNlY2xvY2tfaW5kZXgobmRldik7XG4gXG4tXHRpZiAoaHdfaW5mby1cdTAwM2VncHRwIHx8IGh3X2luZm8tXHUwMDNlY2NjX2dhYykge1xuK1x0LyogT25seSBhZHZlcnRpc2UgcHRwIGNsb2NrIGlmIHByZXNlbnQuICovXG4rXHRpZiAoaW5kZXggXHUwMDNlPSAwKSB7XG4gXHRcdGluZm8tXHUwMDNlc29fdGltZXN0YW1waW5nID1cbiBcdFx0XHRTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFIHxcbiBcdFx0XHRTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFIHxcbkBAIC0xNzc5LDcgKzE3OTAsNyBAQCBzdGF0aWMgaW50IHJhdmJfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRcdFx0KDEgXHUwMDNjXHUwMDNjIEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB8XG4gXHRcdFx0KDEgXHUwMDNjXHUwMDNjIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQpIHxcbiBcdFx0XHQoMSBcdTAwM2NcdTAwM2MgSFdUU1RBTVBfRklMVEVSX0FMTCk7XG4tXHRcdGluZm8tXHUwMDNlcGhjX2luZGV4ID0gUkVBRF9PTkNFKHByaXYtXHUwMDNlcHRwLnBoY19pbmRleCk7XG4rXHRcdGluZm8tXHUwMDNlcGhjX2luZGV4ID0gaW5kZXg7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0xODI2LDU1ICsxODM3LDI0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcmF2Yl9ldGh0b29sX29wcyA9IHtcbiB9O1xuIFxuIHN0YXRpYyBpbnQgcmF2Yl9zZXRfY29uZmlnX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4te1xuLVx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0Y29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyAqaW5mbyA9IHByaXYtXHUwMDNlaW5mbztcbi1cdGludCBlcnJvcjtcbi1cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHApIHtcbi1cdFx0ZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpO1xuLVx0XHRpZiAoZXJyb3IpXG4tXHRcdFx0cmV0dXJuIGVycm9yO1xuLVx0XHQvKiBTZXQgQ1NFTCB2YWx1ZSAqL1xuLVx0XHRyYXZiX21vZGlmeShuZGV2LCBDQ0MsIENDQ19DU0VMLCBDQ0NfQ1NFTF9IUEIpO1xuLVx0fSBlbHNlIGlmIChpbmZvLVx1MDAzZWNjY19nYWMpIHtcbi1cdFx0ZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcgfCBDQ0NfR0FDIHwgQ0NDX0NTRUxfSFBCKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGVycm9yID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTtcbi1cdH1cbi1cbi1cdHJldHVybiBlcnJvcjtcbi19XG4tXG4tc3RhdGljIHZvaWQgcmF2Yl9zZXRfZ3RpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbiBcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmluZm8gPSBwcml2LVx1MDAzZWluZm87XG4gXG4tXHRpZiAoIShpbmZvLVx1MDAzZWdwdHAgfHwgaW5mby1cdTAwM2VjY2NfZ2FjKSlcbi1cdFx0cmV0dXJuO1xuK1x0aWYgKGluZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXB0cC1cdTAwM2VzZXRfY29uZmlnX21vZGUpXG4rXHRcdHJldHVybiBpbmZvLVx1MDAzZXB0cC1cdTAwM2VzZXRfY29uZmlnX21vZGUobmRldik7XG4gXG4tXHRyYXZiX3dyaXRlKG5kZXYsIHByaXYtXHUwMDNlZ3RpX3RpdiwgR1RJKTtcbi1cbi1cdC8qIFJlcXVlc3QgR1RJIGxvYWRpbmcgKi9cbi1cdHJhdmJfbW9kaWZ5KG5kZXYsIEdDQ1IsIEdDQ1JfTFRJLCBHQ0NSX0xUSSk7XG4rXHRyZXR1cm4gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTtcbiB9XG4gXG4tc3RhdGljIGludCByYXZiX2NvbXB1dGVfZ3RpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3N0YXRpYyBpbnQgcmF2Yl9jb21wdXRlX2d0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNsayAqY2xrKVxuIHtcbiBcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmluZm8gPSBwcml2LVx1MDAzZWluZm87XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBuZGV2LVx1MDAzZWRldi5wYXJlbnQ7XG4gXHR1bnNpZ25lZCBsb25nIHJhdGU7XG4gXHR1NjQgaW5jO1xuIFxuLVx0aWYgKCEoaW5mby1cdTAwM2VncHRwIHx8IGluZm8tXHUwMDNlY2NjX2dhYykpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cF9yZWZfY2xrKVxuLVx0XHRyYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXHUwMDNlZ3B0cF9jbGspO1xuLVx0ZWxzZVxuLVx0XHRyYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXHUwMDNlY2xrKTtcbitcdHJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcbiBcdGlmICghcmF0ZSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtMTk3NCwxMSArMTk1NCwxMiBAQCBzdGF0aWMgaW50IHJhdmJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcbiBcdHJhdmJfZW1hY19pbml0KG5kZXYpO1xuIFxuLVx0cmF2Yl9zZXRfZ3RpKG5kZXYpO1xuLVxuIFx0LyogSW5pdGlhbGlzZSBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwIHx8IGluZm8tXHUwMDNlY2NjX2dhYylcbi1cdFx0cmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LVx1MDAzZXBkZXYpO1xuK1x0aWYgKGluZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXB0cC1cdTAwM2VuZGV2X29wZW4pIHtcbitcdFx0ZXJyb3IgPSBpbmZvLVx1MDAzZXB0cC1cdTAwM2VuZGV2X29wZW4obmRldik7XG4rXHRcdGlmIChlcnJvcilcbitcdFx0XHRnb3RvIG91dF9wdHBfc3RvcDtcbitcdH1cbiBcbiBcdC8qIFBIWSBjb250cm9sIHN0YXJ0ICovXG4gXHRlcnJvciA9IHJhdmJfcGh5X3N0YXJ0KG5kZXYpO1xuQEAgLTE5OTAsOSArMTk3MSw2IEBAIHN0YXRpYyBpbnQgcmF2Yl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0cmV0dXJuIDA7XG4gXG4gb3V0X3B0cF9zdG9wOlxuLVx0LyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwIHx8IGluZm8tXHUwMDNlY2NjX2dhYylcbi1cdFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcbiBcdHJhdmJfc3RvcF9kbWEobmRldik7XG4gb3V0X3NldF9yZXNldDpcbiBcdHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX1JFU0VUKTtcbkBAIC0yMDM2LDEwICsyMDE0LDYgQEAgc3RhdGljIHZvaWQgcmF2Yl90eF90aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5kZXYpO1xuIFxuLVx0LyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwKVxuLVx0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuLVxuIFx0LyogV2FpdCBmb3IgRE1BIHN0b3BwaW5nICovXG4gXHRpZiAocmF2Yl9zdG9wX2RtYShuZGV2KSkge1xuIFx0XHQvKiBJZiByYXZiX3N0b3BfZG1hKCkgZmFpbHMsIHRoZSBoYXJkd2FyZSBpcyBzdGlsbCBvcGVyYXRpbmdcbkBAIC0yMDcyLDEwICsyMDQ2LDYgQEAgc3RhdGljIHZvaWQgcmF2Yl90eF90aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cmF2Yl9lbWFjX2luaXQobmRldik7XG4gXG4gb3V0OlxuLVx0LyogSW5pdGlhbGlzZSBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwKVxuLVx0XHRyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtXHUwMDNlcGRldik7XG4tXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5kZXYpO1xuIFxuIG91dF91bmxvY2s6XG5AQCAtMjIwOCw3ICsyMTc4LDcgQEAgc3RhdGljIG5ldGRldl90eF90IHJhdmJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdGRlc2MtXHUwMDNlZHB0ciA9IGNwdV90b19sZTMyKGRtYV9hZGRyKTtcbiBcbiBcdC8qIFRYIHRpbWVzdGFtcCByZXF1aXJlZCAqL1xuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cCB8fCBpbmZvLVx1MDAzZWNjY19nYWMpIHtcbitcdGlmIChpbmZvLVx1MDAzZXB0cCkge1xuIFx0XHRpZiAocSA9PSBSQVZCX05DKSB7XG4gXHRcdFx0dHNfc2tiID0ga21hbGxvY19vYmooKnRzX3NrYiwgR0ZQX0FUT01JQyk7XG4gXHRcdFx0aWYgKCF0c19za2IpIHtcbkBAIC0yMzkwLDggKzIzNjAsOCBAQCBzdGF0aWMgaW50IHJhdmJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHR9XG4gXG4gXHQvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi9cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHAgfHwgaW5mby1cdTAwM2VjY2NfZ2FjKVxuLVx0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuK1x0aWYgKGluZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXB0cC1cdTAwM2VuZGV2X2Nsb3NlKVxuK1x0XHRpbmZvLVx1MDAzZXB0cC1cdTAwM2VuZGV2X2Nsb3NlKG5kZXYpO1xuIFxuIFx0LyogU2V0IHRoZSBjb25maWcgbW9kZSB0byBzdG9wIHRoZSBBVkItRE1BQydzIHByb2Nlc3NlcyAqL1xuIFx0aWYgKHJhdmJfc3RvcF9kbWEobmRldikgXHUwMDNjIDApXG5AQCAtMjM5OSw3ICsyMzY5LDcgQEAgc3RhdGljIGludCByYXZiX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHRcdCAgIFwiZGV2aWNlIHdpbGwgYmUgc3RvcHBlZCBhZnRlciBoL3cgcHJvY2Vzc2VzIGFyZSBkb25lLlxcblwiKTtcbiBcbiBcdC8qIENsZWFyIHRoZSB0aW1lc3RhbXAgbGlzdCAqL1xuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cCB8fCBpbmZvLVx1MDAzZWNjY19nYWMpIHtcbitcdGlmIChpbmZvLVx1MDAzZXB0cCkge1xuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHNfc2tiLCB0c19za2IyLCBcdTAwMjZwcml2LVx1MDAzZXRzX3NrYl9saXN0LCBsaXN0KSB7XG4gXHRcdFx0bGlzdF9kZWwoXHUwMDI2dHNfc2tiLVx1MDAzZWxpc3QpO1xuIFx0XHRcdGtmcmVlX3NrYih0c19za2ItXHUwMDNlc2tiKTtcbkBAIC0yNjgxLDYgKzI2NTEsNDIgQEAgc3RhdGljIGludCByYXZiX21kaW9fcmVsZWFzZShzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcmF2Yl9nZW4yX3B0cF9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXG4rXHRyZXR1cm4gcmF2Yl9jb21wdXRlX2d0aShuZGV2LCBwcml2LVx1MDAzZWNsayk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXG4rXHRyZXR1cm4gcHRwX2Nsb2NrX2luZGV4KHByaXYtXHUwMDNlcHRwLmNsb2NrKTtcbit9XG4rXG4rc3RhdGljIGludCByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBnUFRQIENsb2NrIFNlbGVjdCBIaWdoLXNwZWVkIHBlcmlwaGVyYWwgYnVzIGNsb2NrLiAqL1xuK1x0cmF2Yl9tb2RpZnkobmRldiwgQ0NDLCBDQ0NfQ1NFTCwgQ0NDX0NTRUxfSFBCKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfZ2VuMl9wdHBfaW5mbyA9IHtcbitcdC5wcm9iZSA9IHJhdmJfZ2VuMl9wdHBfcHJvYmUsXG4rXHQuY2xvY2tfaW5kZXggPSByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4LFxuK1x0LnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuMl9wdHBfc2V0X2NvbmZpZ19tb2RlLFxuK1x0LmRtYWNfc3RhcnQgPSByYXZiX3B0cF9pbml0LFxuK1x0LmRtYWNfc3RvcCA9IHJhdmJfcHRwX3N0b3AsXG4rfTtcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjJfaHdfaW5mbyA9IHtcbiBcdC5yZWNlaXZlID0gcmF2Yl9yeF9yY2FyLFxuIFx0LnNldF9yYXRlID0gcmF2Yl9zZXRfcmF0ZV9yY2FyLFxuQEAgLTI2OTksMTIgKzI3MDUsMjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW4yX2h3X2luZm8gPSB7XG4gXHRcdFx0ICBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpLFxuIFx0LnJ4X2Rlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcmF2Yl9leF9yeF9kZXNjKSxcbiBcdC5kYmF0X2VudHJ5X251bSA9IDIyLFxuK1x0LnB0cCA9IFx1MDAyNnJhdmJfZ2VuMl9wdHBfaW5mbyxcbiBcdC5hbGlnbmVkX3R4ID0gMSxcbi1cdC5ncHRwID0gMSxcbiBcdC5uY19xdWV1ZXMgPSAxLFxuIFx0Lm1hZ2ljX3BrdCA9IDEsXG4gfTtcbiBcbitzdGF0aWMgaW50IHJhdmJfZ2VuM19wdHBfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3tcbitcdC8qIEVuYWJsZSBnUFRQIENsb2NrIGFuZCBTZWxlY3QgSGlnaC1zcGVlZCBwZXJpcGhlcmFsIGJ1cyBjbG9jay4gKi9cbitcdHJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcgfCBDQ0NfR0FDIHwgQ0NDX0NTRUxfSFBCKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyByYXZiX2dlbjNfcHRwX2luZm8gPSB7XG4rXHQucHJvYmUgPSByYXZiX2dlbjJfcHRwX3Byb2JlLFxuK1x0LmNsb2NrX2luZGV4ID0gcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleCxcbitcdC5zZXRfY29uZmlnX21vZGUgPSByYXZiX2dlbjNfcHRwX3NldF9jb25maWdfbW9kZSxcbitcdC5uZGV2X29wZW4gPSByYXZiX3B0cF9pbml0LFxuK1x0Lm5kZXZfY2xvc2UgPSByYXZiX3B0cF9zdG9wLFxuK307XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW4zX2h3X2luZm8gPSB7XG4gXHQucmVjZWl2ZSA9IHJhdmJfcnhfcmNhcixcbiBcdC5zZXRfcmF0ZSA9IHJhdmJfc2V0X3JhdGVfcmNhcixcbkBAIC0yNzIzLDE1ICsyNzQzLDY2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuM19od19pbmZvID0ge1xuIFx0XHRcdCAgU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKSxcbiBcdC5yeF9kZXNjX3NpemUgPSBzaXplb2Yoc3RydWN0IHJhdmJfZXhfcnhfZGVzYyksXG4gXHQuZGJhdF9lbnRyeV9udW0gPSAyMixcbitcdC5wdHAgPSBcdTAwMjZyYXZiX2dlbjNfcHRwX2luZm8sXG4gXHQuaW50ZXJuYWxfZGVsYXkgPSAxLFxuIFx0LnR4X2NvdW50ZXJzID0gMSxcbiBcdC5tdWx0aV9pcnFzID0gMSxcbiBcdC5pcnFfZW5fZGlzID0gMSxcbi1cdC5jY2NfZ2FjID0gMSxcbiBcdC5uY19xdWV1ZXMgPSAxLFxuIFx0Lm1hZ2ljX3BrdCA9IDEsXG4gfTtcbiBcbitzdGF0aWMgaW50IHJhdmJfZ2VuNF9wdHBfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1xuK1x0cHJpdi1cdTAwM2VvZl9ncHRwID0gb2ZfcGFyc2VfcGhhbmRsZShwcml2LVx1MDAzZXBkZXYtXHUwMDNlZGV2Lm9mX25vZGUsIFwicHRwLXRpbWVyXCIsIDApO1xuK1x0aWYgKCFwcml2LVx1MDAzZW9mX2dwdHApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHByaXYtXHUwMDNlb2ZfZ3B0cCkpIHtcbitcdFx0b2Zfbm9kZV9wdXQocHJpdi1cdTAwM2VvZl9ncHRwKTtcbitcdFx0cHJpdi1cdTAwM2VvZl9ncHRwID0gTlVMTDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhdmJfZ2VuNF9wdHBfY2xvY2tfaW5kZXgoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1xuK1x0LyogSWYgbm8gY2xvY2ssIG1pbWljIHB0cF9jbG9ja19pbmRleF9ieV9vZl9ub2RlKCkgZmFpbCBhbmQgcmV0dXJuIC0xICovXG4rXHRpZiAoIXByaXYtXHUwMDNlb2ZfZ3B0cClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIHB0cF9jbG9ja19pbmRleF9ieV9vZl9ub2RlKHByaXYtXHUwMDNlb2ZfZ3B0cCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmF2Yl9nZW40X3B0cF9zZXRfY29uZmlnX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0aW50IHJldDtcbitcbitcdC8qIEVuYWJsZSBnUFRQIENsb2NrIGFuZCBTZWxlY3QgSGlnaC1zcGVlZCBwZXJpcGhlcmFsIGJ1cyBjbG9jay4gKi9cbitcdHJldCA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyB8IENDQ19HQUMgfCBDQ0NfQ1NFTF9IUEIpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIFNldCBQVFAgc291cmNlIHRvIEdQVFAgbW9kdWxlLCBvbmx5IG9wdGlvbiBvbiBHZW40LiAqL1xuK1x0aWYgKHByaXYtXHUwMDNlb2ZfZ3B0cClcbitcdFx0cmF2Yl9tb2RpZnkobmRldiwgQVBTUiwgQVBTUl9HUFRQVElNRVJfU09VUkNFIHwgQVBTUl9HUFRQQ0xPQ0ssXG4rXHRcdFx0ICAgIEFQU1JfR1BUUFRJTUVSX1NPVVJDRSB8IEFQU1JfR1BUUENMT0NLKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfZ2VuNF9wdHBfaW5mbyA9IHtcbitcdC5wcm9iZSA9IHJhdmJfZ2VuNF9wdHBfcHJvYmUsXG4rXHQuY2xvY2tfaW5kZXggPSByYXZiX2dlbjRfcHRwX2Nsb2NrX2luZGV4LFxuK1x0LnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuNF9wdHBfc2V0X2NvbmZpZ19tb2RlLFxuK307XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW40X2h3X2luZm8gPSB7XG4gXHQucmVjZWl2ZSA9IHJhdmJfcnhfcmNhcixcbiBcdC5zZXRfcmF0ZSA9IHJhdmJfc2V0X3JhdGVfcmNhcixcbkBAIC0yNzU0LDExICsyODI1LDMwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuNF9od19pbmZvID0ge1xuIFx0LnR4X2NvdW50ZXJzID0gMSxcbiBcdC5tdWx0aV9pcnFzID0gMSxcbiBcdC5pcnFfZW5fZGlzID0gMSxcbi1cdC5jY2NfZ2FjID0gMSxcbitcdC5wdHAgPSBcdTAwMjZyYXZiX2dlbjRfcHRwX2luZm8sXG4gXHQubmNfcXVldWVzID0gMSxcbiBcdC5tYWdpY19wa3QgPSAxLFxuIH07XG4gXG4rc3RhdGljIGludCByYXZiX3J6djJtX3B0cF9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXG4rXHRwcml2LVx1MDAzZWdwdHBfY2xrID0gZGV2bV9jbGtfZ2V0KFx1MDAyNnByaXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwiZ3B0cFwiKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2VncHRwX2NsaykpXG4rXHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlZ3B0cF9jbGspO1xuK1xuK1x0cmV0dXJuIHJhdmJfY29tcHV0ZV9ndGkobmRldiwgcHJpdi1cdTAwM2VncHRwX2Nsayk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9yenYybV9wdHBfaW5mbyA9IHtcbitcdC5wcm9iZSA9IHJhdmJfcnp2Mm1fcHRwX3Byb2JlLFxuK1x0LmNsb2NrX2luZGV4ID0gcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleCxcbitcdC5zZXRfY29uZmlnX21vZGUgPSByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZSxcbitcdC5kbWFjX3N0YXJ0ID0gcmF2Yl9wdHBfaW5pdCxcbitcdC5kbWFjX3N0b3AgPSByYXZiX3B0cF9zdG9wLFxuK307XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9yenYybV9od19pbmZvID0ge1xuIFx0LnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsXG4gXHQuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsXG5AQCAtMjc3OSw4ICsyODY5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9yenYybV9od19pbmZvID0ge1xuIFx0LmRiYXRfZW50cnlfbnVtID0gMjIsXG4gXHQubXVsdGlfaXJxcyA9IDEsXG4gXHQuZXJyX21nbXRfaXJxcyA9IDEsXG4tXHQuZ3B0cCA9IDEsXG4tXHQuZ3B0cF9yZWZfY2xrID0gMSxcbitcdC5wdHAgPSBcdTAwMjZyYXZiX3J6djJtX3B0cF9pbmZvLFxuIFx0Lm5jX3F1ZXVlcyA9IDEsXG4gXHQubWFnaWNfcGt0ID0gMSxcbiB9O1xuQEAgLTI5NTUsNyArMzA0NCw2IEBAIHN0YXRpYyBpbnQgcmF2Yl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0cHJpdi1cdTAwM2Vyc3RjID0gcnN0YztcbiBcdHByaXYtXHUwMDNlbmRldiA9IG5kZXY7XG4gXHRwcml2LVx1MDAzZXBkZXYgPSBwZGV2O1xuLVx0cHJpdi1cdTAwM2VwdHAucGhjX2luZGV4ID0gLTE7XG4gXHRwcml2LVx1MDAzZW51bV90eF9yaW5nW1JBVkJfQkVdID0gQkVfVFhfUklOR19TSVpFO1xuIFx0cHJpdi1cdTAwM2VudW1fcnhfcmluZ1tSQVZCX0JFXSA9IEJFX1JYX1JJTkdfU0laRTtcbiBcdGlmIChpbmZvLVx1MDAzZW5jX3F1ZXVlcykge1xuQEAgLTI5NzMsMTIgKzMwNjEsMTAgQEAgc3RhdGljIGludCByYXZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRcdGdvdG8gb3V0X3Jlc2V0X2Fzc2VydDtcbiBcdH1cbiBcbi1cdGlmIChpbmZvLVx1MDAzZWdwdHBfcmVmX2Nsaykge1xuLVx0XHRwcml2LVx1MDAzZWdwdHBfY2xrID0gZGV2bV9jbGtfZ2V0KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcImdwdHBcIik7XG4tXHRcdGlmIChJU19FUlIocHJpdi1cdTAwM2VncHRwX2NsaykpIHtcbi1cdFx0XHRlcnJvciA9IFBUUl9FUlIocHJpdi1cdTAwM2VncHRwX2Nsayk7XG4rXHRpZiAoaW5mby1cdTAwM2VwdHAgXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNlcHRwLVx1MDAzZXByb2JlKSB7XG4rXHRcdGVycm9yID0gaW5mby1cdTAwM2VwdHAtXHUwMDNlcHJvYmUobmRldik7XG4rXHRcdGlmIChlcnJvcilcbiBcdFx0XHRnb3RvIG91dF9yZXNldF9hc3NlcnQ7XG4tXHRcdH1cbiBcdH1cbiBcbiBcdHByaXYtXHUwMDNlcmVmY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcInJlZmNsa1wiKTtcbkBAIC0zMDMxLDEwICszMTE3LDYgQEAgc3RhdGljIGludCByYXZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRuZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZyYXZiX25ldGRldl9vcHM7XG4gXHRuZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2cmF2Yl9ldGh0b29sX29wcztcbiBcbi1cdGVycm9yID0gcmF2Yl9jb21wdXRlX2d0aShuZGV2KTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBvdXRfcnBtX3B1dDtcbi1cbiBcdHJhdmJfcGFyc2VfZGVsYXlfbW9kZShucCwgbmRldik7XG4gXG4gXHQvKiBBbGxvY2F0ZSBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyB0YWJsZSAqL1xuQEAgLTMxNTcsNiArMzIzOSw3IEBAIHN0YXRpYyB2b2lkIHJhdmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRwbV9ydW50aW1lX2Rpc2FibGUoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFx0cG1fcnVudGltZV9kb250X3VzZV9hdXRvc3VzcGVuZChkZXYpO1xuIFx0Y2xrX3VucHJlcGFyZShwcml2LVx1MDAzZXJlZmNsayk7XG4rXHRvZl9ub2RlX3B1dChwcml2LVx1MDAzZW9mX2dwdHApO1xuIFx0cmVzZXRfY29udHJvbF9hc3NlcnQocHJpdi1cdTAwM2Vyc3RjKTtcbiBcdGZyZWVfbmV0ZGV2KG5kZXYpO1xuIFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XG5AQCAtMzE4Miw5ICszMjY1LDYgQEAgc3RhdGljIGludCByYXZiX3dvbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdC8qIEVuYWJsZSBNYWdpY1BhY2tldCAqL1xuIFx0cmF2Yl9tb2RpZnkobmRldiwgRUNNUiwgRUNNUl9NUERFLCBFQ01SX01QREUpO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNlaW5mby1cdTAwM2VjY2NfZ2FjKVxuLVx0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuLVxuIFx0cmV0dXJuIGVuYWJsZV9pcnFfd2FrZShwcml2LVx1MDAzZWVtYWNfaXJxKTtcbiB9XG4gXG5AQCAtMzIwNCw5ICszMjg0LDYgQEAgc3RhdGljIGludCByYXZiX3dvbF9yZXN0b3JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4tXHRpZiAocHJpdi1cdTAwM2VpbmZvLVx1MDAzZWNjY19nYWMpXG4tXHRcdHJhdmJfcHRwX2luaXQobmRldiwgcHJpdi1cdTAwM2VwZGV2KTtcbi1cbiBcdGlmIChpbmZvLVx1MDAzZW5jX3F1ZXVlcylcbiBcdFx0bmFwaV9lbmFibGUoXHUwMDI2cHJpdi1cdTAwM2VuYXBpW1JBVkJfTkNdKTtcbiBcdG5hcGlfZW5hYmxlKFx1MDAyNnByaXYtXHUwMDNlbmFwaVtSQVZCX0JFXSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jXG5pbmRleCA0MzIxOGJjMTViMTUxLi4xOWQwMzliOWQyNGE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfcHRwLmNcbkBAIC0zMTMsMzEgKzMxMywzOSBAQCB2b2lkIHJhdmJfcHRwX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdHJhdmJfd3JpdGUobmRldiwgfihnaXMgfCBHSVNfUkVTRVJWRUQpLCBHSVMpO1xuIH1cbiBcbi12b2lkIHJhdmJfcHRwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4raW50IHJhdmJfcHRwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0c3RydWN0IHB0cF9jbG9jayAqY2xvY2s7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0aW50IHJldCA9IDA7XG4gXG4gXHRwcml2LVx1MDAzZXB0cC5pbmZvID0gcmF2Yl9wdHBfaW5mbztcbiBcbi1cdHByaXYtXHUwMDNlcHRwLmRlZmF1bHRfYWRkZW5kID0gcmF2Yl9yZWFkKG5kZXYsIEdUSSk7XG4rXHRwcml2LVx1MDAzZXB0cC5kZWZhdWx0X2FkZGVuZCA9IHByaXYtXHUwMDNlZ3RpX3RpdjtcbiBcdHByaXYtXHUwMDNlcHRwLmN1cnJlbnRfYWRkZW5kID0gcHJpdi1cdTAwM2VwdHAuZGVmYXVsdF9hZGRlbmQ7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwcml2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdC8qIFNldCBnUFRQIFRpbWVyIEluY3JlbWVudCBWYWx1ZS4gKi9cbitcdHJhdmJfd3JpdGUobmRldiwgcHJpdi1cdTAwM2VwdHAuZGVmYXVsdF9hZGRlbmQsIEdUSSk7XG4rXG4rXHQvKiBSZXF1ZXN0IEdUSSBsb2FkaW5nLiAqL1xuK1x0cmF2Yl9tb2RpZnkobmRldiwgR0NDUiwgR0NDUl9MVEksIEdDQ1JfTFRJKTtcbitcbitcdC8qIFdhaXQgZm9yIEdJVCBsb2FkaW5nIHRvIGNvbXBsZXRlLiAqL1xuIFx0cmF2Yl93YWl0KG5kZXYsIEdDQ1IsIEdDQ1JfVENSLCBHQ0NSX1RDUl9OT1JFUSk7XG4rXG4gXHRyYXZiX21vZGlmeShuZGV2LCBHQ0NSLCBHQ0NSX1RDU1MsIEdDQ1JfVENTU19BREpHUFRQKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRjbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZwcml2LVx1MDAzZXB0cC5pbmZvLCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4tXHRpZiAoSVNfRVJSKGNsb2NrKSkge1xuLVx0XHRuZXRkZXZfZXJyKG5kZXYsIFwiZmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJXBlXFxuXCIsIGNsb2NrKTtcbi1cdFx0Y2xvY2sgPSBOVUxMO1xuK1x0cHJpdi1cdTAwM2VwdHAuY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoXHUwMDI2cHJpdi1cdTAwM2VwdHAuaW5mbywgXHUwMDI2cHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4rXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlcHRwLmNsb2NrKSkge1xuK1x0XHRyZXQgPSBQVFJfRVJSKHByaXYtXHUwMDNlcHRwLmNsb2NrKTtcbitcdFx0cHJpdi1cdTAwM2VwdHAuY2xvY2sgPSBOVUxMO1xuK1x0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuIFx0fVxuIFxuLVx0V1JJVEVfT05DRShwcml2LVx1MDAzZXB0cC5jbG9jaywgY2xvY2spO1xuLVx0aWYgKGNsb2NrKVxuLVx0XHRXUklURV9PTkNFKHByaXYtXHUwMDNlcHRwLnBoY19pbmRleCwgcHRwX2Nsb2NrX2luZGV4KGNsb2NrKSk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCByYXZiX3B0cF9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuQEAgLTM2MCwxNCArMzY4LDEwIEBAIHN0YXRpYyB2b2lkIHJhdmJfcHRwX3N5bmNfaXJxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB2b2lkIHJhdmJfcHRwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0c3RydWN0IHB0cF9jbG9jayAqY2xvY2s7XG4tXG4tXHRXUklURV9PTkNFKHByaXYtXHUwMDNlcHRwLnBoY19pbmRleCwgLTEpO1xuLVx0Y2xvY2sgPSB4Y2hnKFx1MDAyNnByaXYtXHUwMDNlcHRwLmNsb2NrLCBOVUxMKTtcbiBcbiBcdHJhdmJfcHRwX2Rpc2FibGUobmRldik7XG4gXHRyYXZiX3B0cF9zeW5jX2lycXMobmRldik7XG4gXG4tXHRpZiAoY2xvY2spXG4tXHRcdHB0cF9jbG9ja191bnJlZ2lzdGVyKGNsb2NrKTtcbitcdGlmIChwcml2LVx1MDAzZXB0cC5jbG9jaylcbitcdFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIocHJpdi1cdTAwM2VwdHAuY2xvY2spO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjI2OjE1LjE5Mzk2NjE3N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNjcxNzAxNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB0aGlzIExpbnV4IGtlcm5lbCBwYXRjaCBhbmQgZGVjaWRlIGlmIGl0J3MgZnV6ei13b3J0aHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGRpZmYgYW5kIHNlZSB3aGF0J3MgYmVpbmcgdHdlYWtlZC4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGNoYW5nZXMgYWNyb3NzIGZvdXIgZmlsZXM6IGBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMsZXRoZXJhdmIueWFtbGAsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaGAsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jYCwgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfcHRwLmNgLiBUaGF0IGdpdmVzIG1lIGEgc3RhcnRpbmcgcG9pbnQuXG5cblRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYHJhdmJgLCB3aGljaCBmcm9tIHRoZSBmaWxlIHBhdGhzIGxvb2tzIGxpa2UgaXQncyBhIFJlbmVzYXMgRXRoZXJuZXQgQVZCIGRyaXZlci4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoZXRoZXIgdGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgYSBSZW5lc2FzIFNvQyBFdGhlcm5ldCBjb250cm9sbGVyLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHR5cGUgb2YgaGFyZHdhcmUgdGhpcyBwZXJ0YWlucyB0by4gTXkgcHJlZmVycmVkIG1ldGhvZCBpcyB1c3VhbGx5IHRvIGdsYW5jZSBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnYCB0byBjaGVjayBmb3IgdGhlIHByb3BlciBjb250ZXh0LCBvciBwZXJoYXBzIGxldmVyYWdlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIGByYXZiYCB3aXRoaW4gdGhlIHNvdXJjZSB0cmVlLiBUaGlzIHF1aWNrIGJpdCBvZiBhbmFseXNpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgYXJjaGl0ZWN0dXJlIGFuZCBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc2MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjI2OjI1Ljg2NTY3MTQyNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjA0NzExMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkFWQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZz0xOT1jb25maWcgU0hfRVRIXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWctMjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnOjI5OmNvbmZpZyBSQVZCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnLTMwLVxcdHRyaXN0YXRlIFxcXCJSZW5lc2FzIEV0aGVybmV0IEFWQiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyNjoyNS45NTc3MjM1MzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTg1MDI2MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBSZW5lc2FzIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbiB0aGUgYEtjb25maWdgIGZpbGUsIGxpa2VseSByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIGRyaXZlcidzIHNldHVwLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWdgLiBMaW5lIDI5IGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYXMgaXQncyBvZnRlbiB3aGVyZSB0aGUgY29yZSBkcml2ZXIgb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kIHRoYXQgYXJlYS4gTWF5YmUgYSBuZXcgb3B0aW9uIHdhcyBhZGRlZCBvciBhbiBvbGQgb25lIHJldmlzZWQsIEkgbmVlZCB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZC4gSSB3aWxsIHN0YXJ0IGJ5IHNlZWluZyB3aGF0J3MgcmlnaHQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzY2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjY6MjcuOTQyNzUyMjAxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdFxcdHNlbGVjdCBQSFlMSUJcXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgUmVuZXNhcyBTdXBlckggRXRoZXJuZXQgZGV2aWNlIGRyaXZlci5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIFJBVkJcXG4gIDMwOlxcdFxcdHRyaXN0YXRlIFxcXCJSZW5lc2FzIEV0aGVybmV0IEFWQiBzdXBwb3J0XFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1JFTkVTQVMgfHwgQ09NUElMRV9URVNUXFxuICAzMjpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAzMzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDM0OlxcdFxcdHNlbGVjdCBNSUlcXG4gIDM1OlxcdFxcdHNlbGVjdCBNRElPX0JJVEJBTkdcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gIDM3OlxcdFxcdHNlbGVjdCBQSFlMSUJcXG4gIDM4OlxcdFxcdHNlbGVjdCBSRVNFVF9DT05UUk9MTEVSXFxuICAzOTpcXHRcXHRoZWxwXFxuICA0MDpcXHRcXHQgIFJlbmVzYXMgRXRoZXJuZXQgQVZCIGRldmljZSBkcml2ZXIuXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBSRU5FU0FTX0VUSEVSX1NXSVRDSFxcbiAgNDM6XFx0XFx0dHJpc3RhdGUgXFxcIlJlbmVzYXMgRXRoZXJuZXQgU3dpdGNoIHN1cHBvcnRcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfUkVORVNBUyB8fCBDT01QSUxFX1RFU1RcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG4gIDQ2OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgNDc6XFx0XFx0c2VsZWN0IE1JSVxcbiAgNDg6XFx0XFx0c2VsZWN0IFBIWUxJTktcXG4gIDQ5OlxcdFxcdHNlbGVjdCBSRU5FU0FTX0dFTjRfUFRQXFxuICA1MDpcXHRcXHRoZWxwXFxuICA1MTpcXHRcXHQgIFJlbmVzYXMgRXRoZXJuZXQgU3dpdGNoIGRldmljZSBkcml2ZXIuXFxuICA1MjpcXHRcXG4gIDUzOlxcdGNvbmZpZyBSRU5FU0FTX0dFTjRfUFRQXFxuICA1NDpcXHRcXHR0cmlzdGF0ZSBcXFwiUmVuZXNhcyBSLUNhciBHZW40IGdQVFAgc3VwcG9ydFxcXCIgaWYgQ09NUElMRV9URVNUXFxuICA1NTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLXFxuICA1NjpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDU3OlxcdFxcdHNlbGVjdCBNSUlcXG4gIDU4OlxcdFxcdHNlbGVjdCBQSFlMSUJcXG4gIDU5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjY6MjcuOTQyODI0MzIxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYzMzYxMTM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSQVZCIERyaXZlciBhbmQgaXRzIFdvcnRoaW5lc3MgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcsIGFuZCB0aGUga2V5IGhlcmUgaXMgd2hldGhlciB0aGUgY29kZSB0b3VjaGVzIHNvbWV0aGluZyB0aGF0J3MgKnVucmVhY2hhYmxlKiBpbiBjb21tb24gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgcmF2YmAuLi4gdGhhdCdzIFJlbmVzYXMgRXRoZXJuZXQgQVZCIHN1cHBvcnQsIGFuIFNvQyBldGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlIGBBUkNIX1JFTkVTQVNgIGFyY2hpdGVjdHVyZS4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzIHdoZXRoZXIgdGhpcyBpcyBzb21ldGhpbmcgZW11bGF0ZWQgaW4gUUVNVSwgb3IgaWYgaXQncyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgdGhhdCAqcmVxdWlyZXMqIHBoeXNpY2FsIFJlbmVzYXMgUi1DYXIgb3IgUlogaGFyZHdhcmUgdG8gZnVuY3Rpb24uXG5cbkkgbmVlZCB0byBhcHBseSB0aGUgaW5zdHJ1Y3Rpb25zIGNhcmVmdWxseTsgSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggaW52b2x2ZXMgdW5yZWFjaGFibGUgY29kZSBwYXRocy4gVGhlIGNyaXRlcmlhIGxpc3RlZCBhcmUgcXVpdGUgc3BlY2lmaWM6IHRoaW5ncyB0aGF0IGFyZSBsaXRlcmFsbHkgaW1wb3NzaWJsZSB0byB0b3VjaCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcsIGxpa2UgVVNCIGdhZGdldCBjb2RlIG9yIGNlcnRhaW4gaGFyZHdhcmUgc2ltdWxhdG9ycywgb3IgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgZm9yIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVcy4gVGhvc2Uga2luZHMgb2YgdGhpbmdzIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUsIG5vdCBzdGFuZGFyZCBRRU1VIGVtdWxhdGlvbi5cblxuU28sIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB0aGlzOiBJcyBSZW5lc2FzIFJBVkIgKmVtdWxhdGVkKiBpbiBRRU1VIGluIGFueSB3YXk/IE9yIGlzIGl0IHB1cmVseSBhIHBsYXRmb3JtIGRyaXZlciwgZGVzaWduZWQgb25seSB0byB3b3JrIG9uIFJlbmVzYXMgU29Dcz8gSWYgaXQncyB0aGUgbGF0dGVyLCB0aGVuIGl0J3MgKmxpa2VseSogYSBuby1nbyBmb3IgZnV6emluZyBpbiBhIHN0YW5kYXJkIHZpcnR1YWwgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW55IFFFTVUgZW11bGF0aW9uIGZvciB0aGlzLCBvciBpZiBpdCdzIHN0cmljdGx5IGFuIFNvQyBwbGF0Zm9ybSBkcml2ZXIuIFRpbWUgdG8gZG8gc29tZSBkaWdnaW5nLlxuXG5JJ2xsIHN0YXJ0IHdpdGggYSBzZWFyY2ggZm9yIFwicmF2YlwiIGluIHRoZSBRRU1VIHNvdXJjZSBvciBkb2N1bWVudGF0aW9uLCBhbmQgSSB3aWxsIGNoZWNrIHRvIHNlZSBpZiBgcmF2YmAgaXMgcHVyZWx5IGFuIFNvQyBwbGF0Zm9ybSBkcml2ZXIuXG5cbkknbGwgYWxzbyBoYXZlIGEgbG9vayBhdCBob3cgYHJhdmJgIGlzIHByb2JlZCBhbmQgaW5pdGlhbGl6ZWQgdG8gZ2V0IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IGl0IGRlcGVuZHMgb24gdGhlIGhhcmR3YXJlLiBJJ2xsIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jYCBmb3Igc29tZSBjbHVlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMjksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyNjozMS41NzY0Mzg4MDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM0ODk2MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX3BsYXRmb3JtX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmM9MzM5NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciByYXZiX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmMtMzQwNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jOjM0MDU6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihyYXZiX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYy0zNDA2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyNjozMS42NTk5Mzg0MzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzg2ODE0NjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGByYXZiX2RyaXZlcmAncyBgb2ZfbWF0Y2hfdGFibGVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgcmF2Yl9kcml2ZXJgIGNvZGUgYWdhaW4uIFRpbWUgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBpdHMgYG9mX21hdGNoX3RhYmxlYC4gVGhpcyB0YWJsZSwgbmF0dXJhbGx5LCBpcyBjcml0aWNhbCBmb3IgZGV2aWNlIHRyZWUgYmluZGluZy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQncyBzdHJ1Y3R1cmVkLCB3aGF0IHByb3BlcnRpZXMgYXJlIGJlaW5nIG1hdGNoZWQsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gcHJvYmFibHkgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKlByb3BlcnR5IE1hdGNoaW5nOioqIFdoYXQgc3BlY2lmaWMgcHJvcGVydGllcyBpbiB0aGUgZGV2aWNlIHRyZWUgaXMgdGhpcyBkcml2ZXIgY29uZmlndXJlZCB0byBoYW5kbGU/IEFyZSB0aGV5IHVzaW5nIHRoZSBzdGFuZGFyZCBwcm9wZXJ0aWVzLCBvciBoYXZlIHRoZXkgaW50cm9kdWNlZCBhbnkgY3VzdG9tIG9uZXM/IEFyZSB0aGV5IHVzaW5nIGNvbXBhdGlibGUgc3RyaW5ncyBhcHByb3ByaWF0ZWx5P1xuKiAgICoqT3JkZXIgYW5kIFNwZWNpZmljaXR5OioqIEhvdyBhcmUgdGhlIGVudHJpZXMgb3JkZXJlZD8gQXJlIHRoZXkgcHJpb3JpdGl6ZWQgbG9naWNhbGx5IGJhc2VkIG9uIGRldmljZSB2YXJpYXRpb25zLCBvciBhcmUgdGhlcmUgYW55IGFtYmlndW91cyBtYXRjaGVzIHRoYXQgbWlnaHQgY2F1c2UgcHJvYmxlbXM/IElzIGl0IGJyb2FkIG9yIHNwZWNpZmljPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgZGV2aWNlcyB0byBtYXRjaCBpbiB0aGUgd3Jvbmcgb3JkZXI/XG4qICAgKipWZXJzaW9uIENvbnNpZGVyYXRpb25zOioqIEFyZSB0aGVyZSBhbnkgdmVyc2lvbiBjb25zaWRlcmF0aW9ucyB0byB0YWtlIGludG8gYWNjb3VudD8gT2xkZXIgb3IgbmV3ZXIgZGV2aWNlIHRyZWVzIHRoYXQgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoaXMgZHJpdmVyP1xuKiAgICoqT3ZlcmFsbCBTdHJhdGVneToqKiBJcyB0aGUgZHJpdmVyIGltcGxlbWVudGluZyBhbiBlZmZlY3RpdmUgYXBwcm9hY2ggdG8gbWFuYWdpbmcgZGlmZmVyZW50IGhhcmR3YXJlIHJldmlzaW9ucyBvciBjb25maWd1cmF0aW9ucz8gSXMgaXQgb3Zlcmx5IGNvbXBsZXgsIG9yIGlzIGl0IHNpbXBsZSwgZWxlZ2FudCwgYW5kIGVhc3kgdG8gbWFpbnRhaW4/XG4qICAgKipFcnJvciBQcmV2ZW50aW9uOioqIEZpbmFsbHksIEknbSBjaGVja2luZyBmb3IgYXJlYXMgdGhhdCBjb3VsZCBiZSB0aWdodGVuZWQgdXAgdG8gcHJldmVudCBlcnJvcnMuIERvZXMgaXQgc2VlbSBsaWtlIGFuIGFwcHJvcHJpYXRlIGFtb3VudCBvZiBjaGVja3MgYW5kIGJhbGFuY2VzIGFyZSBpbiBwbGFjZT9cblxuVW5kZXJzdGFuZGluZyB0aGlzIHRhYmxlIGlzIHRoZSBmaXJzdCBzdGVwIGluIGRlYnVnZ2luZyB0aGUgZHJpdmVyIHNvIEknbGwgYmUgcmVhbGx5IGZvY3VzaW5nIG9uIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkyNiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjI2OjM0LjQ0Njc1Njc5M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzcwOlxcdH1cXG4zMzcxOlxcdFxcbjMzNzI6XFx0c3RhdGljIGludCByYXZiX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuMzM3MzpcXHR7XFxuMzM3NDpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbjMzNzU6XFx0XFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbjMzNzY6XFx0XFxuMzM3NzpcXHRcXHRjbGtfZGlzYWJsZShwcml2LVxcdTAwM2VyZWZjbGspO1xcbjMzNzg6XFx0XFxuMzM3OTpcXHRcXHRyZXR1cm4gMDtcXG4zMzgwOlxcdH1cXG4zMzgxOlxcdFxcbjMzODI6XFx0c3RhdGljIGludCByYXZiX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4zMzgzOlxcdHtcXG4zMzg0OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuMzM4NTpcXHRcXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuMzM4NjpcXHRcXG4zMzg3OlxcdFxcdHJldHVybiBjbGtfZW5hYmxlKHByaXYtXFx1MDAzZXJlZmNsayk7XFxuMzM4ODpcXHR9XFxuMzM4OTpcXHRcXG4zMzkwOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyByYXZiX2Rldl9wbV9vcHMgPSB7XFxuMzM5MTpcXHRcXHRTWVNURU1fU0xFRVBfUE1fT1BTKHJhdmJfc3VzcGVuZCwgcmF2Yl9yZXN1bWUpXFxuMzM5MjpcXHRcXHRSVU5USU1FX1BNX09QUyhyYXZiX3J1bnRpbWVfc3VzcGVuZCwgcmF2Yl9ydW50aW1lX3Jlc3VtZSwgTlVMTClcXG4zMzkzOlxcdH07XFxuMzM5NDpcXHRcXG4zMzk1OlxcdHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJhdmJfZHJpdmVyID0ge1xcbjMzOTY6XFx0XFx0LnByb2JlXFx0XFx0PSByYXZiX3Byb2JlLFxcbjMzOTc6XFx0XFx0LnJlbW92ZVxcdFxcdD0gcmF2Yl9yZW1vdmUsXFxuMzM5ODpcXHRcXHQuZHJpdmVyID0ge1xcbjMzOTk6XFx0XFx0XFx0Lm5hbWVcXHQ9IFxcXCJyYXZiXFxcIixcXG4zNDAwOlxcdFxcdFxcdC5wbVxcdD0gcG1fcHRyKFxcdTAwMjZyYXZiX2Rldl9wbV9vcHMpLFxcbjM0MDE6XFx0XFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gcmF2Yl9tYXRjaF90YWJsZSxcXG4zNDAyOlxcdFxcdH0sXFxuMzQwMzpcXHR9O1xcbjM0MDQ6XFx0XFxuMzQwNTpcXHRtb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHJhdmJfZHJpdmVyKTtcXG4zNDA2OlxcdFxcbjM0MDc6XFx0TU9EVUxFX0FVVEhPUihcXFwiTWl0c3VoaXJvIEtpbXVyYSwgTWFzYXJ1IE5hZ2FpXFxcIik7XFxuMzQwODpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlJlbmVzYXMgRXRoZXJuZXQgQVZCIGRyaXZlclxcXCIpO1xcbjM0MDk6XFx0TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTCB2MlxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyNjozNC40NDY5MjM3MDNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTM0MzMxMDE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBUaGlzIFBhdGNoIGlzIE5vdCBGdXp6YWJsZSBpbiBTdGFuZGFyZCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBzbyBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCB0aGlzIHBhdGNoIHRhcmdldHMgdGhlIGByYXZiYCBkcml2ZXIsIHdoaWNoIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgUmVuZXNhcyBFdGhlcm5ldCBBVkIgY29udHJvbGxlcnMgZm91bmQgb24gdGhlaXIgUi1DYXIgYW5kIFJaL0cyTC9WMk0gc2VyaWVzIFNvQ3MuIFRoZSBrZXkgaGVyZSBpcyB0aGUgaGFyZHdhcmUgZGVwZW5kZW5jeS4gSXQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCB0aGlzIGRyaXZlciByZWxpZXMgb24gdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCB0aGUgY29ycmVzcG9uZGluZyBkZXZpY2UgdHJlZSBub2RlcyBwcmVzZW50IG9ubHkgb24gUmVuZXNhcyBTb0MgYm9hcmRzLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IFFFTVUsIGV2ZW4gaW4gdmlydHVhbGl6ZWQgc2V0dXBzIGxpa2UgR0NFIG9yIHN0YW5kYXJkIFFFTVUgaW5zdGFuY2VzICh4ODYgb3IgYXJtNjQgdmlydCBtYWNoaW5lcyksIGRvZXNuJ3QgZW11bGF0ZSB0aGVzZSBSZW5lc2FzIEV0aGVybmV0IEFWQiBjb250cm9sbGVycy4gVGhpcyBtZWFucyB0aGF0IGV2ZW4gaWYgSSB0cmllZCBydW5uaW5nIGZ1enppbmcgdG9vbHMgbGlrZSBzeXprYWxsZXIgaW4gdGhlc2UgdmlydHVhbCBlbnZpcm9ubWVudHMsIHRoZSBgcmF2YmAgZHJpdmVyIHdvdWxkbid0IGJlIGFjY2Vzc2libGUsIHByb2JlZCwgb3IgZXZlbiBleGVjdXRlZCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGlzIHNpbXBseSB1bmF2YWlsYWJsZS5cblxuTGV0IG1lIGJyZWFrIGRvd24gdGhlIHNwZWNpZmljczogdGhlIHBhdGNoIHRvdWNoZXMgdGhlIERUIGJpbmRpbmcgZG9jdW1lbnQsIGFuZCBzb3VyY2UgZmlsZXMgcmVsYXRlZCB0byB0aGUgYHJhdmJgIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBgcmF2Yi5oYCwgYHJhdmJfbWFpbi5jYCwgYW5kIGByYXZiX3B0cC5jYCBhcmUgYWxsIGltcGxpY2F0ZWQuIEl0J3MgZm9jdXNlZCBvbiB0aGUgUmVuZXNhcyBFdGhlcm5ldCBBVkIgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiXypgIHN1YnN5c3RlbS4gVGhlIHJlbGV2YW50IGhhcmR3YXJlIGlzIGNsZWFybHkgZGVmaW5lZDogUmVuZXNhcyBSLUNhciBHZW4yL0dlbjMvR2VuNCBhbmQgUlovVjJNIFNvQ3MuXG5cblRoZSBmdW5kYW1lbnRhbCBpc3N1ZSBpcyB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoZSBjb2RlLiBCZWNhdXNlIGl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIgZGVwZW5kZW50IG9uIHNwZWNpZmljIFJlbmVzYXMgaGFyZHdhcmUgYW5kIGl0cyBEVCwgaXQncyB1bnJlYWNoYWJsZSBpbiB0aGUgc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzIGNvbW1vbmx5IHVzZWQgZm9yIGZ1enppbmcuIFRodXMsIEkgYW0gY29uZmlkZW50IHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuXG5cbk5vdywgSSdtIGNoZWNraW5nIHRoZSByZXF1aXJlbWVudHMgZm9yIGBzZXQtcmVzdWx0c2AuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgIGFyZSBpcnJlbGV2YW50IGluIHRoaXMgY2FzZS4gTXkgcmVhc29uaW5nIGlzIGNvbmNpc2UsIGV4cGxhaW5pbmcgdGhlIGhhcmR3YXJlIGRlcGVuZGVuY3kgYW5kIGluYWNjZXNzaWJpbGl0eSBpbiB0aGUgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMuIEFuZCBmaW5hbGx5LCBgV29ydGhGdXp6aW5nYCBpcyB1bmVxdWl2b2NhbGx5IGBmYWxzZWAuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk0MywiT3V0cHV0VG9rZW5zIjo5NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjI2OjQzLjc5MDIzNjc3MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBSZW5lc2FzIEV0aGVybmV0IEFWQiAoUkFWQikgcGxhdGZvcm0gZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfKiksIHdoaWNoIGlzIHNwZWNpZmljIHRvIFJlbmVzYXMgUi1DYXIgYW5kIFJaIFNvQ3MgYW5kIHJlcXVpcmVzIHBoeXNpY2FsIFNvQyBoYXJkd2FyZSBub3QgYXZhaWxhYmxlIG9yIGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIFJlbmVzYXMgRXRoZXJuZXQgQVZCIChSQVZCKSBwbGF0Zm9ybSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl8qKSwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gUmVuZXNhcyBSLUNhciBhbmQgUlogU29DcyBhbmQgcmVxdWlyZXMgcGh5c2ljYWwgU29DIGhhcmR3YXJlIG5vdCBhdmFpbGFibGUgb3IgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyNjo0My43OTAyNzc2ODJaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowf7ntb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 01:07:46 +0000 UTC FinishedAt: 2026-09-03 01:26:45 +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+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIFJlbmVzYXMgRXRoZXJuZXQgQVZCIChSQVZCKSBwbGF0Zm9ybSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl8qKSwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gUmVuZXNhcyBSLUNhciBhbmQgUlogU29DcyBhbmQgcmVxdWlyZXMgcGh5c2ljYWwgU29DIGhhcmR3YXJlIG5vdCBhdmFpbGFibGUgb3IgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWFhZWFlYjA3NjRjNjc3ODgyM2FkMjNjM2QzYmZiNDY2MjJmYzhiMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDE6MjY6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMsZXRoZXJhdmIueWFtbFxuaW5kZXggMWUwMGVmNWIzYWNkYS4uZmFkMDAyNDkyNDIxYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMsZXRoZXJhdmIueWFtbFxuQEAgLTk3LDYgJiM0Mzs5Nyw4IEBAIHByb3BlcnRpZXM6XG4gXG4gICBwaHktaGFuZGxlOiB0cnVlXG4gXG4mIzQzOyAgcHRwLXRpbWVyOiB0cnVlXG4mIzQzO1xuICAgJiMzOTsjYWRkcmVzcy1jZWxscyYjMzk7OlxuICAgICBkZXNjcmlwdGlvbjogTnVtYmVyIG9mIGFkZHJlc3MgY2VsbHMgZm9yIHRoZSBNRElPIGJ1cy5cbiAgICAgY29uc3Q6IDFcbkBAIC0zMDUsNiAmIzQzOzMwNywxNSBAQCBhbGxPZjpcbiAgICAgICAgICAgICBpdGVtczpcbiAgICAgICAgICAgICAgIC0gY29uc3Q6IGZja1xuICAgICAgICAgICAgICAgLSBjb25zdDogcmVmY2xrXG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgbm90OlxuJiM0MzsgICAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgICBjb250YWluczpcbiYjNDM7ICAgICAgICAgICAgICBjb25zdDogcmVuZXNhcyxldGhlcmF2Yi1yY2FyLWdlbjRcbiYjNDM7ICAgIHRoZW46XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgcHRwLXRpbWVyOiBmYWxzZVxuIFxuIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmhcbmluZGV4IDNlZTRjNjEwODE4OTAuLjVkMzViNDBkN2M1ODQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmhcbkBAIC0yNDksNiAmIzQzOzI0OSw4IEBAIGVudW0gQVBTUl9CSVQge1xuIFx0QVBTUl9SRE1cdD0gMHgwMDAwMjAwMCxcbiBcdEFQU1JfVERNXHQ9IDB4MDAwMDQwMDAsXG4gXHRBUFNSX01JSVNFTEVDVFx0PSAweDAxMDAwMDAwLFx0LyogUi1DYXIgVjRNIG9ubHkgKi9cbiYjNDM7XHRBUFNSX0dQVFBUSU1FUl9TT1VSQ0UgPSBCSVQoMjUpLCAvKiBHZW40ICovXG4mIzQzO1x0QVBTUl9HUFRQQ0xPQ0tcdD0gQklUKDI5KSxcdC8qIEdlbjQgKi9cbiB9O1xuIFxuIC8qIFJDUiAqL1xuQEAgLTEwMjgsMTMgJiM0MzsxMDMwLDM3IEBAIHN0cnVjdCByYXZiX3B0cF9wZXJvdXQge1xuIHN0cnVjdCByYXZiX3B0cCB7XG4gXHRzdHJ1Y3QgcHRwX2Nsb2NrICpjbG9jaztcbiBcdHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBpbmZvO1xuLVx0aW50IHBoY19pbmRleDtcbiBcdHUzMiBkZWZhdWx0X2FkZGVuZDtcbiBcdHUzMiBjdXJyZW50X2FkZGVuZDtcbiBcdGludCBleHR0c1tOX0VYVF9UU107XG4gXHRzdHJ1Y3QgcmF2Yl9wdHBfcGVyb3V0IHBlcm91dFtOX1BFUl9PVVRdO1xuIH07XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gLSBQbGF0Zm9ybSBzcGVjaWZpYyBnUFRQIGJlaGF2aW9yXG4mIzQzOyAqXG4mIzQzOyAqIEVhY2ggZ2VuZXJhdGlvbiBvZiBSQVZCIGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IGJlaGF2aW9ycyB3aGVuIGludGVyYWN0aW5nXG4mIzQzOyAqIHdpdGggdGhlIGdQVFAgY2xvY2suIFRoaXMgc3RydWN0IHByb3ZpZGVzIHRoZSBjYWxsYmFja3MgdG8gYmUgY2FsbGVkIGF0XG4mIzQzOyAqIGNyaXRpY2FsIHBvaW50cyBpbiB0aGUgUkFWQiBkcml2ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIEBwcm9iZTpcdFx0UHJvYmUgdGhlIGdQVFAgY2xvY2tcbiYjNDM7ICogQGNsb2NrX2luZGV4Olx0R2V0IHRoZSBQVFAgY2xvY2sgaW5kZXgsIGlmIGFueVxuJiM0MzsgKiBAc2V0X2NvbmZpZ19tb2RlOlx0RW50ZXIgY29uZmlnIG1vZGVcbiYjNDM7ICogQGRtYWNfc3RhcnQ6XHRcdENhbGxlZCB3aGVuIHRoZSBETUFDIHN0YXJ0c1xuJiM0MzsgKiBAZG1hY19zdG9wOlx0XHRDYWxsZWQgd2hlbiB0aGUgRE1BQyBzdG9wc1xuJiM0MzsgKiBAbmRldl9vcGVuOlx0XHRDYWxsZWQgd2hlbiB0aGUgbmRldiBpcyBvcGVuZWRcbiYjNDM7ICogQG5kZXZfY2xvc2U6XHRcdENhbGxlZCB3aGVuIHRoZSBuZGV2IGlzIGNsb3NlZFxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHJhdmJfZ3B0cF9pbmZvIHtcbiYjNDM7XHRpbnQgKCpwcm9iZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuJiM0MztcdGludCAoKmNsb2NrX2luZGV4KShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4mIzQzO1x0aW50ICgqc2V0X2NvbmZpZ19tb2RlKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4mIzQzO1x0aW50ICgqZG1hY19zdGFydCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuJiM0MztcdHZvaWQgKCpkbWFjX3N0b3ApKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbiYjNDM7XHRpbnQgKCpuZGV2X29wZW4pKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbiYjNDM7XHR2b2lkICgqbmRldl9jbG9zZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgcmF2Yl9od19pbmZvIHtcbiBcdGludCAoKnJlY2VpdmUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgYnVkZ2V0LCBpbnQgcSk7XG4gXHR2b2lkICgqc2V0X3JhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbkBAIC0xMDUzLDYgJiM0MzsxMDc5LDcgQEAgc3RydWN0IHJhdmJfaHdfaW5mbyB7XG4gXHR1MzIgcnhfYnVmZmVyX3NpemU7XG4gXHR1MzIgcnhfZGVzY19zaXplO1xuIFx0dTMyIGRiYXRfZW50cnlfbnVtO1xuJiM0MztcdGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyAqcHRwOyAvKiBDYWxsYmFja3MgdG8gaGFuZGxlIGdQVFAgaW50ZXJhY3Rpb25zLiAqL1xuIFx0dW5zaWduZWQgYWxpZ25lZF90eDogMTtcbiBcdHVuc2lnbmVkIGNvYWxlc2NlX2lycXM6MTtcdC8qIE5lZWRzIHNvZnR3YXJlIElSUSBjb2FsZXNjaW5nICovXG4gXG5AQCAtMTA2Myw5ICYjNDM7MTA5MCw2IEBAIHN0cnVjdCByYXZiX2h3X2luZm8ge1xuIFx0dW5zaWduZWQgbXVsdGlfaXJxczoxO1x0XHQvKiBBVkItRE1BQyBhbmQgRS1NQUMgaGFzIG11bHRpcGxlIGlycXMgKi9cbiBcdHVuc2lnbmVkIGlycV9lbl9kaXM6MTtcdFx0LyogSGFzIHNlcGFyYXRlIGlycSBlbmFibGUgYW5kIGRpc2FibGUgcmVncyAqL1xuIFx0dW5zaWduZWQgZXJyX21nbXRfaXJxczoxO1x0LyogTGluZTEgKEVycikgYW5kIExpbmUyIChNZ210KSBpcnFzIGFyZSBzZXBhcmF0ZSAqL1xuLVx0dW5zaWduZWQgZ3B0cDoxO1x0XHQvKiBBVkItRE1BQyBoYXMgZ1BUUCBzdXBwb3J0ICovXG4tXHR1bnNpZ25lZCBjY2NfZ2FjOjE7XHRcdC8qIEFWQi1ETUFDIGhhcyBnUFRQIHN1cHBvcnQgYWN0aXZlIGluIGNvbmZpZyBtb2RlICovXG4tXHR1bnNpZ25lZCBncHRwX3JlZl9jbGs6MTtcdC8qIGdQVFAgaGFzIHNlcGFyYXRlIHJlZmVyZW5jZSBjbG9jayAqL1xuIFx0dW5zaWduZWQgbmNfcXVldWVzOjE7XHRcdC8qIEFWQi1ETUFDIGhhcyBSWCBhbmQgVFggTkMgcXVldWVzICovXG4gXHR1bnNpZ25lZCBtYWdpY19wa3Q6MTtcdFx0LyogRS1NQUMgc3VwcG9ydHMgbWFnaWMgcGFja2V0IGRldGVjdGlvbiAqL1xuIFx0dW5zaWduZWQgaGFsZl9kdXBsZXg6MTtcdFx0LyogRS1NQUMgc3VwcG9ydHMgaGFsZiBkdXBsZXggbW9kZSAqL1xuQEAgLTExMTAsNiAmIzQzOzExMzQsNyBAQCBzdHJ1Y3QgcmF2Yl9wcml2YXRlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgdHNfc2tiX2xpc3Q7XG4gXHR1MzIgdHNfc2tiX3RhZztcbiBcdHN0cnVjdCByYXZiX3B0cCBwdHA7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpvZl9ncHRwO1x0LyogUmVmZXJlbmNlIHRvIGV4dGVybmFsIGdQVFAgY2xvY2ssIGlmIGFueS4gKi9cbiBcdHNwaW5sb2NrX3QgbG9jaztcdFx0LyogUmVnaXN0ZXIgYWNjZXNzIGxvY2sgKi9cbiBcdHUzMiBjdXJfcnhbTlVNX1JYX1FVRVVFXTtcdC8qIENvbnN1bWVyIHJpbmcgaW5kaWNlcyAqL1xuIFx0dTMyIGRpcnR5X3J4W05VTV9SWF9RVUVVRV07XHQvKiBQcm9kdWNlciByaW5nIGluZGljZXMgKi9cbkBAIC0xMTYzLDcgJiM0MzsxMTg4LDcgQEAgdm9pZCByYXZiX21vZGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSByYXZiX3JlZyByZWcsIHUzMiBjbGVhcixcbiBpbnQgcmF2Yl93YWl0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHJhdmJfcmVnIHJlZywgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7XG4gXG4gdm9pZCByYXZiX3B0cF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuLXZvaWQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7XG4mIzQzO2ludCByYXZiX3B0cF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbiB2b2lkIHJhdmJfcHRwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuIFxuICNlbmRpZlx0LyogI2lmbmRlZiBfX1JBVkJfSF9fICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmNcbmluZGV4IGVhMWM3ZTUzNjc5MWUuLjY2YzljZDE1YTE5ZTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jXG5AQCAtNzA3LDcgJiM0Mzs3MDcsMTUgQEAgc3RhdGljIGludCByYXZiX2RtYWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuIFx0LyogU2V0dGluZyB0aGUgY29udHJvbCB3aWxsIHN0YXJ0IHRoZSBBVkItRE1BQyBwcm9jZXNzLiAqL1xuLVx0cmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX09QRVJBVElPTik7XG4mIzQzO1x0ZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19PUEVSQVRJT04pO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0LyogSW5pdGlhbGlzZSBQVFAgQ2xvY2sgZHJpdmVyICovXG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXB0cC1cdTAwM2VkbWFjX3N0YXJ0KVxuJiM0MztcdFx0cmV0dXJuIGluZm8tXHUwMDNlcHRwLVx1MDAzZWRtYWNfc3RhcnQobmRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCByYXZiX2dldF90eF90c3RhbXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG5AQCAtMTExNSw2ICYjNDM7MTEyMywxMCBAQCBzdGF0aWMgaW50IHJhdmJfc3RvcF9kbWEoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRcdFx0bmV0ZGV2X2VycihuZGV2LCBcJiMzNDtmYWlsZWQgdG8gc3RvcCBBWEkgQlVTXFxuXCYjMzQ7KTtcbiBcdH1cbiBcbiYjNDM7XHQvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi9cbiYjNDM7XHRpZiAoaW5mby1cdTAwM2VwdHAgXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNlcHRwLVx1MDAzZWRtYWNfc3RvcClcbiYjNDM7XHRcdGluZm8tXHUwMDNlcHRwLVx1MDAzZWRtYWNfc3RvcChuZGV2KTtcbiYjNDM7XG4gXHQvKiBTdG9wIEFWQi1ETUFDIHByb2Nlc3MgKi9cbiBcdHJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpO1xuIH1cbkBAIC0xNzE5LDkgJiM0MzsxNzMxLDcgQEAgc3RhdGljIGludCByYXZiX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXG4gXHRpZiAobmV0aWZfcnVubmluZyhuZGV2KSkge1xuIFx0XHRuZXRpZl9kZXZpY2VfZGV0YWNoKG5kZXYpO1xuLVx0XHQvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi9cbi1cdFx0aWYgKGluZm8tXHUwMDNlZ3B0cClcbi1cdFx0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuJiM0MztcbiBcdFx0LyogV2FpdCBmb3IgRE1BIHN0b3BwaW5nICovXG4gXHRcdGVycm9yID0gcmF2Yl9zdG9wX2RtYShuZGV2KTtcbiBcdFx0aWYgKGVycm9yKSB7XG5AQCAtMTc1MiwxMCAmIzQzOzE3NjIsNiBAQCBzdGF0aWMgaW50IHJhdmJfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcbiBcdFx0cmF2Yl9lbWFjX2luaXQobmRldik7XG4gXG4tXHRcdC8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0XHRpZiAoaW5mby1cdTAwM2VncHRwKVxuLVx0XHRcdHJhdmJfcHRwX2luaXQobmRldiwgcHJpdi1cdTAwM2VwZGV2KTtcbi1cbiBcdFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTtcbiBcdH1cbiBcbkBAIC0xNzY3LDggJiM0MzsxNzczLDEzIEBAIHN0YXRpYyBpbnQgcmF2Yl9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiB7XG4gXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHRjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvICpod19pbmZvID0gcHJpdi1cdTAwM2VpbmZvO1xuJiM0MztcdGludCBpbmRleCA9IC0xO1xuJiM0MztcbiYjNDM7XHRpZiAoaHdfaW5mby1cdTAwM2VwdHAgXHUwMDI2XHUwMDI2IGh3X2luZm8tXHUwMDNlcHRwLVx1MDAzZWNsb2NrX2luZGV4KVxuJiM0MztcdFx0aW5kZXggPSBod19pbmZvLVx1MDAzZXB0cC1cdTAwM2VjbG9ja19pbmRleChuZGV2KTtcbiBcbi1cdGlmIChod19pbmZvLVx1MDAzZWdwdHAgfHwgaHdfaW5mby1cdTAwM2VjY2NfZ2FjKSB7XG4mIzQzO1x0LyogT25seSBhZHZlcnRpc2UgcHRwIGNsb2NrIGlmIHByZXNlbnQuICovXG4mIzQzO1x0aWYgKGluZGV4IFx1MDAzZT0gMCkge1xuIFx0XHRpbmZvLVx1MDAzZXNvX3RpbWVzdGFtcGluZyA9XG4gXHRcdFx0U09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSB8XG4gXHRcdFx0U09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSB8XG5AQCAtMTc3OSw3ICYjNDM7MTc5MCw3IEBAIHN0YXRpYyBpbnQgcmF2Yl9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdFx0XHQoMSBcdTAwM2NcdTAwM2MgSFdUU1RBTVBfRklMVEVSX05PTkUpIHxcbiBcdFx0XHQoMSBcdTAwM2NcdTAwM2MgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVCkgfFxuIFx0XHRcdCgxIFx1MDAzY1x1MDAzYyBIV1RTVEFNUF9GSUxURVJfQUxMKTtcbi1cdFx0aW5mby1cdTAwM2VwaGNfaW5kZXggPSBSRUFEX09OQ0UocHJpdi1cdTAwM2VwdHAucGhjX2luZGV4KTtcbiYjNDM7XHRcdGluZm8tXHUwMDNlcGhjX2luZGV4ID0gaW5kZXg7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0xODI2LDU1ICYjNDM7MTgzNywyNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJhdmJfZXRodG9vbF9vcHMgPSB7XG4gfTtcbiBcbiBzdGF0aWMgaW50IHJhdmJfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLXtcbi1cdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmluZm8gPSBwcml2LVx1MDAzZWluZm87XG4tXHRpbnQgZXJyb3I7XG4tXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwKSB7XG4tXHRcdGVycm9yID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTtcbi1cdFx0aWYgKGVycm9yKVxuLVx0XHRcdHJldHVybiBlcnJvcjtcbi1cdFx0LyogU2V0IENTRUwgdmFsdWUgKi9cbi1cdFx0cmF2Yl9tb2RpZnkobmRldiwgQ0NDLCBDQ0NfQ1NFTCwgQ0NDX0NTRUxfSFBCKTtcbi1cdH0gZWxzZSBpZiAoaW5mby1cdTAwM2VjY2NfZ2FjKSB7XG4tXHRcdGVycm9yID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHIHwgQ0NDX0dBQyB8IENDQ19DU0VMX0hQQik7XG4tXHR9IGVsc2Uge1xuLVx0XHRlcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gZXJyb3I7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHJhdmJfc2V0X2d0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4gXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHRjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvICppbmZvID0gcHJpdi1cdTAwM2VpbmZvO1xuIFxuLVx0aWYgKCEoaW5mby1cdTAwM2VncHRwIHx8IGluZm8tXHUwMDNlY2NjX2dhYykpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRpZiAoaW5mby1cdTAwM2VwdHAgXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNlcHRwLVx1MDAzZXNldF9jb25maWdfbW9kZSlcbiYjNDM7XHRcdHJldHVybiBpbmZvLVx1MDAzZXB0cC1cdTAwM2VzZXRfY29uZmlnX21vZGUobmRldik7XG4gXG4tXHRyYXZiX3dyaXRlKG5kZXYsIHByaXYtXHUwMDNlZ3RpX3RpdiwgR1RJKTtcbi1cbi1cdC8qIFJlcXVlc3QgR1RJIGxvYWRpbmcgKi9cbi1cdHJhdmJfbW9kaWZ5KG5kZXYsIEdDQ1IsIEdDQ1JfTFRJLCBHQ0NSX0xUSSk7XG4mIzQzO1x0cmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcmF2Yl9jb21wdXRlX2d0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7c3RhdGljIGludCByYXZiX2NvbXB1dGVfZ3RpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2xrICpjbGspXG4ge1xuIFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0Y29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyAqaW5mbyA9IHByaXYtXHUwMDNlaW5mbztcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IG5kZXYtXHUwMDNlZGV2LnBhcmVudDtcbiBcdHVuc2lnbmVkIGxvbmcgcmF0ZTtcbiBcdHU2NCBpbmM7XG4gXG4tXHRpZiAoIShpbmZvLVx1MDAzZWdwdHAgfHwgaW5mby1cdTAwM2VjY2NfZ2FjKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwX3JlZl9jbGspXG4tXHRcdHJhdGUgPSBjbGtfZ2V0X3JhdGUocHJpdi1cdTAwM2VncHRwX2Nsayk7XG4tXHRlbHNlXG4tXHRcdHJhdGUgPSBjbGtfZ2V0X3JhdGUocHJpdi1cdTAwM2VjbGspO1xuJiM0MztcdHJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcbiBcdGlmICghcmF0ZSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtMTk3NCwxMSAmIzQzOzE5NTQsMTIgQEAgc3RhdGljIGludCByYXZiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXG4gXHRyYXZiX2VtYWNfaW5pdChuZGV2KTtcbiBcbi1cdHJhdmJfc2V0X2d0aShuZGV2KTtcbi1cbiBcdC8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cCB8fCBpbmZvLVx1MDAzZWNjY19nYWMpXG4tXHRcdHJhdmJfcHRwX2luaXQobmRldiwgcHJpdi1cdTAwM2VwZGV2KTtcbiYjNDM7XHRpZiAoaW5mby1cdTAwM2VwdHAgXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNlcHRwLVx1MDAzZW5kZXZfb3Blbikge1xuJiM0MztcdFx0ZXJyb3IgPSBpbmZvLVx1MDAzZXB0cC1cdTAwM2VuZGV2X29wZW4obmRldik7XG4mIzQzO1x0XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B0cF9zdG9wO1xuJiM0MztcdH1cbiBcbiBcdC8qIFBIWSBjb250cm9sIHN0YXJ0ICovXG4gXHRlcnJvciA9IHJhdmJfcGh5X3N0YXJ0KG5kZXYpO1xuQEAgLTE5OTAsOSAmIzQzOzE5NzEsNiBAQCBzdGF0aWMgaW50IHJhdmJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdHJldHVybiAwO1xuIFxuIG91dF9wdHBfc3RvcDpcbi1cdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cCB8fCBpbmZvLVx1MDAzZWNjY19nYWMpXG4tXHRcdHJhdmJfcHRwX3N0b3AobmRldik7XG4gXHRyYXZiX3N0b3BfZG1hKG5kZXYpO1xuIG91dF9zZXRfcmVzZXQ6XG4gXHRyYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19SRVNFVCk7XG5AQCAtMjAzNiwxMCAmIzQzOzIwMTQsNiBAQCBzdGF0aWMgdm9pZCByYXZiX3R4X3RpbWVvdXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmRldik7XG4gXG4tXHQvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi9cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHApXG4tXHRcdHJhdmJfcHRwX3N0b3AobmRldik7XG4tXG4gXHQvKiBXYWl0IGZvciBETUEgc3RvcHBpbmcgKi9cbiBcdGlmIChyYXZiX3N0b3BfZG1hKG5kZXYpKSB7XG4gXHRcdC8qIElmIHJhdmJfc3RvcF9kbWEoKSBmYWlscywgdGhlIGhhcmR3YXJlIGlzIHN0aWxsIG9wZXJhdGluZ1xuQEAgLTIwNzIsMTAgJiM0MzsyMDQ2LDYgQEAgc3RhdGljIHZvaWQgcmF2Yl90eF90aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cmF2Yl9lbWFjX2luaXQobmRldik7XG4gXG4gb3V0OlxuLVx0LyogSW5pdGlhbGlzZSBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwKVxuLVx0XHRyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtXHUwMDNlcGRldik7XG4tXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5kZXYpO1xuIFxuIG91dF91bmxvY2s6XG5AQCAtMjIwOCw3ICYjNDM7MjE3OCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCByYXZiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRkZXNjLVx1MDAzZWRwdHIgPSBjcHVfdG9fbGUzMihkbWFfYWRkcik7XG4gXG4gXHQvKiBUWCB0aW1lc3RhbXAgcmVxdWlyZWQgKi9cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHAgfHwgaW5mby1cdTAwM2VjY2NfZ2FjKSB7XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlcHRwKSB7XG4gXHRcdGlmIChxID09IFJBVkJfTkMpIHtcbiBcdFx0XHR0c19za2IgPSBrbWFsbG9jX29iaigqdHNfc2tiLCBHRlBfQVRPTUlDKTtcbiBcdFx0XHRpZiAoIXRzX3NrYikge1xuQEAgLTIzOTAsOCAmIzQzOzIzNjAsOCBAQCBzdGF0aWMgaW50IHJhdmJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHR9XG4gXG4gXHQvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi9cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHAgfHwgaW5mby1cdTAwM2VjY2NfZ2FjKVxuLVx0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZXB0cCBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2VwdHAtXHUwMDNlbmRldl9jbG9zZSlcbiYjNDM7XHRcdGluZm8tXHUwMDNlcHRwLVx1MDAzZW5kZXZfY2xvc2UobmRldik7XG4gXG4gXHQvKiBTZXQgdGhlIGNvbmZpZyBtb2RlIHRvIHN0b3AgdGhlIEFWQi1ETUFDJiMzOTtzIHByb2Nlc3NlcyAqL1xuIFx0aWYgKHJhdmJfc3RvcF9kbWEobmRldikgXHUwMDNjIDApXG5AQCAtMjM5OSw3ICYjNDM7MjM2OSw3IEBAIHN0YXRpYyBpbnQgcmF2Yl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0XHQgICBcJiMzNDtkZXZpY2Ugd2lsbCBiZSBzdG9wcGVkIGFmdGVyIGgvdyBwcm9jZXNzZXMgYXJlIGRvbmUuXFxuXCYjMzQ7KTtcbiBcbiBcdC8qIENsZWFyIHRoZSB0aW1lc3RhbXAgbGlzdCAqL1xuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cCB8fCBpbmZvLVx1MDAzZWNjY19nYWMpIHtcbiYjNDM7XHRpZiAoaW5mby1cdTAwM2VwdHApIHtcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRzX3NrYiwgdHNfc2tiMiwgXHUwMDI2cHJpdi1cdTAwM2V0c19za2JfbGlzdCwgbGlzdCkge1xuIFx0XHRcdGxpc3RfZGVsKFx1MDAyNnRzX3NrYi1cdTAwM2VsaXN0KTtcbiBcdFx0XHRrZnJlZV9za2IodHNfc2tiLVx1MDAzZXNrYik7XG5AQCAtMjY4MSw2ICYjNDM7MjY1MSw0MiBAQCBzdGF0aWMgaW50IHJhdmJfbWRpb19yZWxlYXNlKHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcmF2Yl9nZW4yX3B0cF9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJhdmJfY29tcHV0ZV9ndGkobmRldiwgcHJpdi1cdTAwM2VjbGspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuMl9wdHBfY2xvY2tfaW5kZXgoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwdHBfY2xvY2tfaW5kZXgocHJpdi1cdTAwM2VwdHAuY2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuMl9wdHBfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogZ1BUUCBDbG9jayBTZWxlY3QgSGlnaC1zcGVlZCBwZXJpcGhlcmFsIGJ1cyBjbG9jay4gKi9cbiYjNDM7XHRyYXZiX21vZGlmeShuZGV2LCBDQ0MsIENDQ19DU0VMLCBDQ0NfQ1NFTF9IUEIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyByYXZiX2dlbjJfcHRwX2luZm8gPSB7XG4mIzQzO1x0LnByb2JlID0gcmF2Yl9nZW4yX3B0cF9wcm9iZSxcbiYjNDM7XHQuY2xvY2tfaW5kZXggPSByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4LFxuJiM0MztcdC5zZXRfY29uZmlnX21vZGUgPSByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZSxcbiYjNDM7XHQuZG1hY19zdGFydCA9IHJhdmJfcHRwX2luaXQsXG4mIzQzO1x0LmRtYWNfc3RvcCA9IHJhdmJfcHRwX3N0b3AsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuMl9od19pbmZvID0ge1xuIFx0LnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsXG4gXHQuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsXG5AQCAtMjY5OSwxMiAmIzQzOzI3MDUsMjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW4yX2h3X2luZm8gPSB7XG4gXHRcdFx0ICBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpLFxuIFx0LnJ4X2Rlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcmF2Yl9leF9yeF9kZXNjKSxcbiBcdC5kYmF0X2VudHJ5X251bSA9IDIyLFxuJiM0MztcdC5wdHAgPSBcdTAwMjZyYXZiX2dlbjJfcHRwX2luZm8sXG4gXHQuYWxpZ25lZF90eCA9IDEsXG4tXHQuZ3B0cCA9IDEsXG4gXHQubmNfcXVldWVzID0gMSxcbiBcdC5tYWdpY19wa3QgPSAxLFxuIH07XG4gXG4mIzQzO3N0YXRpYyBpbnQgcmF2Yl9nZW4zX3B0cF9zZXRfY29uZmlnX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHQvKiBFbmFibGUgZ1BUUCBDbG9jayBhbmQgU2VsZWN0IEhpZ2gtc3BlZWQgcGVyaXBoZXJhbCBidXMgY2xvY2suICovXG4mIzQzO1x0cmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyB8IENDQ19HQUMgfCBDQ0NfQ1NFTF9IUEIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfZ2VuM19wdHBfaW5mbyA9IHtcbiYjNDM7XHQucHJvYmUgPSByYXZiX2dlbjJfcHRwX3Byb2JlLFxuJiM0MztcdC5jbG9ja19pbmRleCA9IHJhdmJfZ2VuMl9wdHBfY2xvY2tfaW5kZXgsXG4mIzQzO1x0LnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuM19wdHBfc2V0X2NvbmZpZ19tb2RlLFxuJiM0MztcdC5uZGV2X29wZW4gPSByYXZiX3B0cF9pbml0LFxuJiM0MztcdC5uZGV2X2Nsb3NlID0gcmF2Yl9wdHBfc3RvcCxcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW4zX2h3X2luZm8gPSB7XG4gXHQucmVjZWl2ZSA9IHJhdmJfcnhfcmNhcixcbiBcdC5zZXRfcmF0ZSA9IHJhdmJfc2V0X3JhdGVfcmNhcixcbkBAIC0yNzIzLDE1ICYjNDM7Mjc0Myw2NiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjNfaHdfaW5mbyA9IHtcbiBcdFx0XHQgIFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSksXG4gXHQucnhfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCByYXZiX2V4X3J4X2Rlc2MpLFxuIFx0LmRiYXRfZW50cnlfbnVtID0gMjIsXG4mIzQzO1x0LnB0cCA9IFx1MDAyNnJhdmJfZ2VuM19wdHBfaW5mbyxcbiBcdC5pbnRlcm5hbF9kZWxheSA9IDEsXG4gXHQudHhfY291bnRlcnMgPSAxLFxuIFx0Lm11bHRpX2lycXMgPSAxLFxuIFx0LmlycV9lbl9kaXMgPSAxLFxuLVx0LmNjY19nYWMgPSAxLFxuIFx0Lm5jX3F1ZXVlcyA9IDEsXG4gXHQubWFnaWNfcGt0ID0gMSxcbiB9O1xuIFxuJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuNF9wdHBfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlb2ZfZ3B0cCA9IG9mX3BhcnNlX3BoYW5kbGUocHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldi5vZl9ub2RlLCBcJiMzNDtwdHAtdGltZXJcJiMzNDssIDApO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2VvZl9ncHRwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwcml2LVx1MDAzZW9mX2dwdHApKSB7XG4mIzQzO1x0XHRvZl9ub2RlX3B1dChwcml2LVx1MDAzZW9mX2dwdHApO1xuJiM0MztcdFx0cHJpdi1cdTAwM2VvZl9ncHRwID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuNF9wdHBfY2xvY2tfaW5kZXgoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1xuJiM0MztcdC8qIElmIG5vIGNsb2NrLCBtaW1pYyBwdHBfY2xvY2tfaW5kZXhfYnlfb2Zfbm9kZSgpIGZhaWwgYW5kIHJldHVybiAtMSAqL1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2VvZl9ncHRwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHRwX2Nsb2NrX2luZGV4X2J5X29mX25vZGUocHJpdi1cdTAwM2VvZl9ncHRwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXZiX2dlbjRfcHRwX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBFbmFibGUgZ1BUUCBDbG9jayBhbmQgU2VsZWN0IEhpZ2gtc3BlZWQgcGVyaXBoZXJhbCBidXMgY2xvY2suICovXG4mIzQzO1x0cmV0ID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHIHwgQ0NDX0dBQyB8IENDQ19DU0VMX0hQQik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIFNldCBQVFAgc291cmNlIHRvIEdQVFAgbW9kdWxlLCBvbmx5IG9wdGlvbiBvbiBHZW40LiAqL1xuJiM0MztcdGlmIChwcml2LVx1MDAzZW9mX2dwdHApXG4mIzQzO1x0XHRyYXZiX21vZGlmeShuZGV2LCBBUFNSLCBBUFNSX0dQVFBUSU1FUl9TT1VSQ0UgfCBBUFNSX0dQVFBDTE9DSyxcbiYjNDM7XHRcdFx0ICAgIEFQU1JfR1BUUFRJTUVSX1NPVVJDRSB8IEFQU1JfR1BUUENMT0NLKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9nZW40X3B0cF9pbmZvID0ge1xuJiM0MztcdC5wcm9iZSA9IHJhdmJfZ2VuNF9wdHBfcHJvYmUsXG4mIzQzO1x0LmNsb2NrX2luZGV4ID0gcmF2Yl9nZW40X3B0cF9jbG9ja19pbmRleCxcbiYjNDM7XHQuc2V0X2NvbmZpZ19tb2RlID0gcmF2Yl9nZW40X3B0cF9zZXRfY29uZmlnX21vZGUsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuNF9od19pbmZvID0ge1xuIFx0LnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsXG4gXHQuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsXG5AQCAtMjc1NCwxMSAmIzQzOzI4MjUsMzAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW40X2h3X2luZm8gPSB7XG4gXHQudHhfY291bnRlcnMgPSAxLFxuIFx0Lm11bHRpX2lycXMgPSAxLFxuIFx0LmlycV9lbl9kaXMgPSAxLFxuLVx0LmNjY19nYWMgPSAxLFxuJiM0MztcdC5wdHAgPSBcdTAwMjZyYXZiX2dlbjRfcHRwX2luZm8sXG4gXHQubmNfcXVldWVzID0gMSxcbiBcdC5tYWdpY19wa3QgPSAxLFxuIH07XG4gXG4mIzQzO3N0YXRpYyBpbnQgcmF2Yl9yenYybV9wdHBfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlZ3B0cF9jbGsgPSBkZXZtX2Nsa19nZXQoXHUwMDI2cHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Z3B0cFwmIzM0Oyk7XG4mIzQzO1x0aWYgKElTX0VSUihwcml2LVx1MDAzZWdwdHBfY2xrKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlZ3B0cF9jbGspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmF2Yl9jb21wdXRlX2d0aShuZGV2LCBwcml2LVx1MDAzZWdwdHBfY2xrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyByYXZiX3J6djJtX3B0cF9pbmZvID0ge1xuJiM0MztcdC5wcm9iZSA9IHJhdmJfcnp2Mm1fcHRwX3Byb2JlLFxuJiM0MztcdC5jbG9ja19pbmRleCA9IHJhdmJfZ2VuMl9wdHBfY2xvY2tfaW5kZXgsXG4mIzQzO1x0LnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuMl9wdHBfc2V0X2NvbmZpZ19tb2RlLFxuJiM0MztcdC5kbWFjX3N0YXJ0ID0gcmF2Yl9wdHBfaW5pdCxcbiYjNDM7XHQuZG1hY19zdG9wID0gcmF2Yl9wdHBfc3RvcCxcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9yenYybV9od19pbmZvID0ge1xuIFx0LnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsXG4gXHQuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsXG5AQCAtMjc3OSw4ICYjNDM7Mjg2OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfcnp2Mm1faHdfaW5mbyA9IHtcbiBcdC5kYmF0X2VudHJ5X251bSA9IDIyLFxuIFx0Lm11bHRpX2lycXMgPSAxLFxuIFx0LmVycl9tZ210X2lycXMgPSAxLFxuLVx0LmdwdHAgPSAxLFxuLVx0LmdwdHBfcmVmX2NsayA9IDEsXG4mIzQzO1x0LnB0cCA9IFx1MDAyNnJhdmJfcnp2Mm1fcHRwX2luZm8sXG4gXHQubmNfcXVldWVzID0gMSxcbiBcdC5tYWdpY19wa3QgPSAxLFxuIH07XG5AQCAtMjk1NSw3ICYjNDM7MzA0NCw2IEBAIHN0YXRpYyBpbnQgcmF2Yl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0cHJpdi1cdTAwM2Vyc3RjID0gcnN0YztcbiBcdHByaXYtXHUwMDNlbmRldiA9IG5kZXY7XG4gXHRwcml2LVx1MDAzZXBkZXYgPSBwZGV2O1xuLVx0cHJpdi1cdTAwM2VwdHAucGhjX2luZGV4ID0gLTE7XG4gXHRwcml2LVx1MDAzZW51bV90eF9yaW5nW1JBVkJfQkVdID0gQkVfVFhfUklOR19TSVpFO1xuIFx0cHJpdi1cdTAwM2VudW1fcnhfcmluZ1tSQVZCX0JFXSA9IEJFX1JYX1JJTkdfU0laRTtcbiBcdGlmIChpbmZvLVx1MDAzZW5jX3F1ZXVlcykge1xuQEAgLTI5NzMsMTIgJiM0MzszMDYxLDEwIEBAIHN0YXRpYyBpbnQgcmF2Yl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRnb3RvIG91dF9yZXNldF9hc3NlcnQ7XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwX3JlZl9jbGspIHtcbi1cdFx0cHJpdi1cdTAwM2VncHRwX2NsayA9IGRldm1fY2xrX2dldChcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Z3B0cFwmIzM0Oyk7XG4tXHRcdGlmIChJU19FUlIocHJpdi1cdTAwM2VncHRwX2NsaykpIHtcbi1cdFx0XHRlcnJvciA9IFBUUl9FUlIocHJpdi1cdTAwM2VncHRwX2Nsayk7XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXB0cC1cdTAwM2Vwcm9iZSkge1xuJiM0MztcdFx0ZXJyb3IgPSBpbmZvLVx1MDAzZXB0cC1cdTAwM2Vwcm9iZShuZGV2KTtcbiYjNDM7XHRcdGlmIChlcnJvcilcbiBcdFx0XHRnb3RvIG91dF9yZXNldF9hc3NlcnQ7XG4tXHRcdH1cbiBcdH1cbiBcbiBcdHByaXYtXHUwMDNlcmVmY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtyZWZjbGtcJiMzNDspO1xuQEAgLTMwMzEsMTAgJiM0MzszMTE3LDYgQEAgc3RhdGljIGludCByYXZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRuZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZyYXZiX25ldGRldl9vcHM7XG4gXHRuZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2cmF2Yl9ldGh0b29sX29wcztcbiBcbi1cdGVycm9yID0gcmF2Yl9jb21wdXRlX2d0aShuZGV2KTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBvdXRfcnBtX3B1dDtcbi1cbiBcdHJhdmJfcGFyc2VfZGVsYXlfbW9kZShucCwgbmRldik7XG4gXG4gXHQvKiBBbGxvY2F0ZSBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyB0YWJsZSAqL1xuQEAgLTMxNTcsNiAmIzQzOzMyMzksNyBAQCBzdGF0aWMgdm9pZCByYXZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0cG1fcnVudGltZV9kaXNhYmxlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcdHBtX3J1bnRpbWVfZG9udF91c2VfYXV0b3N1c3BlbmQoZGV2KTtcbiBcdGNsa191bnByZXBhcmUocHJpdi1cdTAwM2VyZWZjbGspO1xuJiM0MztcdG9mX25vZGVfcHV0KHByaXYtXHUwMDNlb2ZfZ3B0cCk7XG4gXHRyZXNldF9jb250cm9sX2Fzc2VydChwcml2LVx1MDAzZXJzdGMpO1xuIFx0ZnJlZV9uZXRkZXYobmRldik7XG4gXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcbkBAIC0zMTgyLDkgJiM0MzszMjY1LDYgQEAgc3RhdGljIGludCByYXZiX3dvbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdC8qIEVuYWJsZSBNYWdpY1BhY2tldCAqL1xuIFx0cmF2Yl9tb2RpZnkobmRldiwgRUNNUiwgRUNNUl9NUERFLCBFQ01SX01QREUpO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNlaW5mby1cdTAwM2VjY2NfZ2FjKVxuLVx0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuLVxuIFx0cmV0dXJuIGVuYWJsZV9pcnFfd2FrZShwcml2LVx1MDAzZWVtYWNfaXJxKTtcbiB9XG4gXG5AQCAtMzIwNCw5ICYjNDM7MzI4NCw2IEBAIHN0YXRpYyBpbnQgcmF2Yl93b2xfcmVzdG9yZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNlaW5mby1cdTAwM2VjY2NfZ2FjKVxuLVx0XHRyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtXHUwMDNlcGRldik7XG4tXG4gXHRpZiAoaW5mby1cdTAwM2VuY19xdWV1ZXMpXG4gXHRcdG5hcGlfZW5hYmxlKFx1MDAyNnByaXYtXHUwMDNlbmFwaVtSQVZCX05DXSk7XG4gXHRuYXBpX2VuYWJsZShcdTAwMjZwcml2LVx1MDAzZW5hcGlbUkFWQl9CRV0pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuY1xuaW5kZXggNDMyMThiYzE1YjE1MS4uMTlkMDM5YjlkMjRhNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jXG5AQCAtMzEzLDMxICYjNDM7MzEzLDM5IEBAIHZvaWQgcmF2Yl9wdHBfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0cmF2Yl93cml0ZShuZGV2LCB+KGdpcyB8IEdJU19SRVNFUlZFRCksIEdJUyk7XG4gfVxuIFxuLXZvaWQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiYjNDM7aW50IHJhdmJfcHRwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0c3RydWN0IHB0cF9jbG9jayAqY2xvY2s7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdGludCByZXQgPSAwO1xuIFxuIFx0cHJpdi1cdTAwM2VwdHAuaW5mbyA9IHJhdmJfcHRwX2luZm87XG4gXG4tXHRwcml2LVx1MDAzZXB0cC5kZWZhdWx0X2FkZGVuZCA9IHJhdmJfcmVhZChuZGV2LCBHVEkpO1xuJiM0MztcdHByaXYtXHUwMDNlcHRwLmRlZmF1bHRfYWRkZW5kID0gcHJpdi1cdTAwM2VndGlfdGl2O1xuIFx0cHJpdi1cdTAwM2VwdHAuY3VycmVudF9hZGRlbmQgPSBwcml2LVx1MDAzZXB0cC5kZWZhdWx0X2FkZGVuZDtcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnByaXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHQvKiBTZXQgZ1BUUCBUaW1lciBJbmNyZW1lbnQgVmFsdWUuICovXG4mIzQzO1x0cmF2Yl93cml0ZShuZGV2LCBwcml2LVx1MDAzZXB0cC5kZWZhdWx0X2FkZGVuZCwgR1RJKTtcbiYjNDM7XG4mIzQzO1x0LyogUmVxdWVzdCBHVEkgbG9hZGluZy4gKi9cbiYjNDM7XHRyYXZiX21vZGlmeShuZGV2LCBHQ0NSLCBHQ0NSX0xUSSwgR0NDUl9MVEkpO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBHSVQgbG9hZGluZyB0byBjb21wbGV0ZS4gKi9cbiBcdHJhdmJfd2FpdChuZGV2LCBHQ0NSLCBHQ0NSX1RDUiwgR0NDUl9UQ1JfTk9SRVEpO1xuJiM0MztcbiBcdHJhdmJfbW9kaWZ5KG5kZXYsIEdDQ1IsIEdDQ1JfVENTUywgR0NDUl9UQ1NTX0FESkdQVFApO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdGNsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFx1MDAyNnByaXYtXHUwMDNlcHRwLmluZm8sIFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbi1cdGlmIChJU19FUlIoY2xvY2spKSB7XG4tXHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJXBlXFxuXCYjMzQ7LCBjbG9jayk7XG4tXHRcdGNsb2NrID0gTlVMTDtcbiYjNDM7XHRwcml2LVx1MDAzZXB0cC5jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZwcml2LVx1MDAzZXB0cC5pbmZvLCBcdTAwMjZwcml2LVx1MDAzZXBkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlcHRwLmNsb2NrKSkge1xuJiM0MztcdFx0cmV0ID0gUFRSX0VSUihwcml2LVx1MDAzZXB0cC5jbG9jayk7XG4mIzQzO1x0XHRwcml2LVx1MDAzZXB0cC5jbG9jayA9IE5VTEw7XG4mIzQzO1x0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuIFx0fVxuIFxuLVx0V1JJVEVfT05DRShwcml2LVx1MDAzZXB0cC5jbG9jaywgY2xvY2spO1xuLVx0aWYgKGNsb2NrKVxuLVx0XHRXUklURV9PTkNFKHByaXYtXHUwMDNlcHRwLnBoY19pbmRleCwgcHRwX2Nsb2NrX2luZGV4KGNsb2NrKSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcmF2Yl9wdHBfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbkBAIC0zNjAsMTQgJiM0MzszNjgsMTAgQEAgc3RhdGljIHZvaWQgcmF2Yl9wdHBfc3luY19pcnFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHZvaWQgcmF2Yl9wdHBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4gXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4tXHRzdHJ1Y3QgcHRwX2Nsb2NrICpjbG9jaztcbi1cbi1cdFdSSVRFX09OQ0UocHJpdi1cdTAwM2VwdHAucGhjX2luZGV4LCAtMSk7XG4tXHRjbG9jayA9IHhjaGcoXHUwMDI2cHJpdi1cdTAwM2VwdHAuY2xvY2ssIE5VTEwpO1xuIFxuIFx0cmF2Yl9wdHBfZGlzYWJsZShuZGV2KTtcbiBcdHJhdmJfcHRwX3N5bmNfaXJxcyhuZGV2KTtcbiBcbi1cdGlmIChjbG9jaylcbi1cdFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIoY2xvY2spO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXB0cC5jbG9jaylcbiYjNDM7XHRcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHByaXYtXHUwMDNlcHRwLmNsb2NrKTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIFJlbmVzYXMgRXRoZXJuZXQgQVZCIChSQVZCKSBwbGF0Zm9ybSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl8qKSwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gUmVuZXNhcyBSLUNhciBhbmQgUlogU29DcyBhbmQgcmVxdWlyZXMgcGh5c2ljYWwgU29DIGhhcmR3YXJlIG5vdCBhdmFpbGFibGUgb3IgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWFhZWFlYjA3NjRjNjc3ODgyM2FkMjNjM2QzYmZiNDY2MjJmYzhiMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDE6MjY6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMsZXRoZXJhdmIueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sCmluZGV4IDFlMDBlZjViM2FjZGEuLmZhZDAwMjQ5MjQyMWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sCkBAIC05Nyw2ICYjNDM7OTcsOCBAQCBwcm9wZXJ0aWVzOgogCiAgIHBoeS1oYW5kbGU6IHRydWUKIAomIzQzOyAgcHRwLXRpbWVyOiB0cnVlCiYjNDM7CiAgICYjMzk7I2FkZHJlc3MtY2VsbHMmIzM5OzoKICAgICBkZXNjcmlwdGlvbjogTnVtYmVyIG9mIGFkZHJlc3MgY2VsbHMgZm9yIHRoZSBNRElPIGJ1cy4KICAgICBjb25zdDogMQpAQCAtMzA1LDYgJiM0MzszMDcsMTUgQEAgYWxsT2Y6CiAgICAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgICAgLSBjb25zdDogZmNrCiAgICAgICAgICAgICAgIC0gY29uc3Q6IHJlZmNsawomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBub3Q6CiYjNDM7ICAgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICAgIGNvbnRhaW5zOgomIzQzOyAgICAgICAgICAgICAgY29uc3Q6IHJlbmVzYXMsZXRoZXJhdmItcmNhci1nZW40CiYjNDM7ICAgIHRoZW46CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIHB0cC10aW1lcjogZmFsc2UKIAogYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmgKaW5kZXggM2VlNGM2MTA4MTg5MC4uNWQzNWI0MGQ3YzU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmgKQEAgLTI0OSw2ICYjNDM7MjQ5LDggQEAgZW51bSBBUFNSX0JJVCB7CiAJQVBTUl9SRE0JPSAweDAwMDAyMDAwLAogCUFQU1JfVERNCT0gMHgwMDAwNDAwMCwKIAlBUFNSX01JSVNFTEVDVAk9IDB4MDEwMDAwMDAsCS8qIFItQ2FyIFY0TSBvbmx5ICovCiYjNDM7CUFQU1JfR1BUUFRJTUVSX1NPVVJDRSA9IEJJVCgyNSksIC8qIEdlbjQgKi8KJiM0MzsJQVBTUl9HUFRQQ0xPQ0sJPSBCSVQoMjkpLAkvKiBHZW40ICovCiB9OwogCiAvKiBSQ1IgKi8KQEAgLTEwMjgsMTMgJiM0MzsxMDMwLDM3IEBAIHN0cnVjdCByYXZiX3B0cF9wZXJvdXQgewogc3RydWN0IHJhdmJfcHRwIHsKIAlzdHJ1Y3QgcHRwX2Nsb2NrICpjbG9jazsKIAlzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gaW5mbzsKLQlpbnQgcGhjX2luZGV4OwogCXUzMiBkZWZhdWx0X2FkZGVuZDsKIAl1MzIgY3VycmVudF9hZGRlbmQ7CiAJaW50IGV4dHRzW05fRVhUX1RTXTsKIAlzdHJ1Y3QgcmF2Yl9wdHBfcGVyb3V0IHBlcm91dFtOX1BFUl9PVVRdOwogfTsKIAomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCByYXZiX2dwdHBfaW5mbyAtIFBsYXRmb3JtIHNwZWNpZmljIGdQVFAgYmVoYXZpb3IKJiM0MzsgKgomIzQzOyAqIEVhY2ggZ2VuZXJhdGlvbiBvZiBSQVZCIGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IGJlaGF2aW9ycyB3aGVuIGludGVyYWN0aW5nCiYjNDM7ICogd2l0aCB0aGUgZ1BUUCBjbG9jay4gVGhpcyBzdHJ1Y3QgcHJvdmlkZXMgdGhlIGNhbGxiYWNrcyB0byBiZSBjYWxsZWQgYXQKJiM0MzsgKiBjcml0aWNhbCBwb2ludHMgaW4gdGhlIFJBVkIgZHJpdmVyLgomIzQzOyAqCiYjNDM7ICogQHByb2JlOgkJUHJvYmUgdGhlIGdQVFAgY2xvY2sKJiM0MzsgKiBAY2xvY2tfaW5kZXg6CUdldCB0aGUgUFRQIGNsb2NrIGluZGV4LCBpZiBhbnkKJiM0MzsgKiBAc2V0X2NvbmZpZ19tb2RlOglFbnRlciBjb25maWcgbW9kZQomIzQzOyAqIEBkbWFjX3N0YXJ0OgkJQ2FsbGVkIHdoZW4gdGhlIERNQUMgc3RhcnRzCiYjNDM7ICogQGRtYWNfc3RvcDoJCUNhbGxlZCB3aGVuIHRoZSBETUFDIHN0b3BzCiYjNDM7ICogQG5kZXZfb3BlbjoJCUNhbGxlZCB3aGVuIHRoZSBuZGV2IGlzIG9wZW5lZAomIzQzOyAqIEBuZGV2X2Nsb3NlOgkJQ2FsbGVkIHdoZW4gdGhlIG5kZXYgaXMgY2xvc2VkCiYjNDM7ICovCiYjNDM7c3RydWN0IHJhdmJfZ3B0cF9pbmZvIHsKJiM0MzsJaW50ICgqcHJvYmUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKJiM0MzsJaW50ICgqY2xvY2tfaW5kZXgpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKJiM0MzsJaW50ICgqc2V0X2NvbmZpZ19tb2RlKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CiYjNDM7CWludCAoKmRtYWNfc3RhcnQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKJiM0MzsJdm9pZCAoKmRtYWNfc3RvcCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwomIzQzOwlpbnQgKCpuZGV2X29wZW4pKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKJiM0MzsJdm9pZCAoKm5kZXZfY2xvc2UpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKJiM0Mzt9OwomIzQzOwogc3RydWN0IHJhdmJfaHdfaW5mbyB7CiAJaW50ICgqcmVjZWl2ZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBidWRnZXQsIGludCBxKTsKIAl2b2lkICgqc2V0X3JhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKQEAgLTEwNTMsNiAmIzQzOzEwNzksNyBAQCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHsKIAl1MzIgcnhfYnVmZmVyX3NpemU7CiAJdTMyIHJ4X2Rlc2Nfc2l6ZTsKIAl1MzIgZGJhdF9lbnRyeV9udW07CiYjNDM7CWNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyAqcHRwOyAvKiBDYWxsYmFja3MgdG8gaGFuZGxlIGdQVFAgaW50ZXJhY3Rpb25zLiAqLwogCXVuc2lnbmVkIGFsaWduZWRfdHg6IDE7CiAJdW5zaWduZWQgY29hbGVzY2VfaXJxczoxOwkvKiBOZWVkcyBzb2Z0d2FyZSBJUlEgY29hbGVzY2luZyAqLwogCkBAIC0xMDYzLDkgJiM0MzsxMDkwLDYgQEAgc3RydWN0IHJhdmJfaHdfaW5mbyB7CiAJdW5zaWduZWQgbXVsdGlfaXJxczoxOwkJLyogQVZCLURNQUMgYW5kIEUtTUFDIGhhcyBtdWx0aXBsZSBpcnFzICovCiAJdW5zaWduZWQgaXJxX2VuX2RpczoxOwkJLyogSGFzIHNlcGFyYXRlIGlycSBlbmFibGUgYW5kIGRpc2FibGUgcmVncyAqLwogCXVuc2lnbmVkIGVycl9tZ210X2lycXM6MTsJLyogTGluZTEgKEVycikgYW5kIExpbmUyIChNZ210KSBpcnFzIGFyZSBzZXBhcmF0ZSAqLwotCXVuc2lnbmVkIGdwdHA6MTsJCS8qIEFWQi1ETUFDIGhhcyBnUFRQIHN1cHBvcnQgKi8KLQl1bnNpZ25lZCBjY2NfZ2FjOjE7CQkvKiBBVkItRE1BQyBoYXMgZ1BUUCBzdXBwb3J0IGFjdGl2ZSBpbiBjb25maWcgbW9kZSAqLwotCXVuc2lnbmVkIGdwdHBfcmVmX2NsazoxOwkvKiBnUFRQIGhhcyBzZXBhcmF0ZSByZWZlcmVuY2UgY2xvY2sgKi8KIAl1bnNpZ25lZCBuY19xdWV1ZXM6MTsJCS8qIEFWQi1ETUFDIGhhcyBSWCBhbmQgVFggTkMgcXVldWVzICovCiAJdW5zaWduZWQgbWFnaWNfcGt0OjE7CQkvKiBFLU1BQyBzdXBwb3J0cyBtYWdpYyBwYWNrZXQgZGV0ZWN0aW9uICovCiAJdW5zaWduZWQgaGFsZl9kdXBsZXg6MTsJCS8qIEUtTUFDIHN1cHBvcnRzIGhhbGYgZHVwbGV4IG1vZGUgKi8KQEAgLTExMTAsNiAmIzQzOzExMzQsNyBAQCBzdHJ1Y3QgcmF2Yl9wcml2YXRlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHRzX3NrYl9saXN0OwogCXUzMiB0c19za2JfdGFnOwogCXN0cnVjdCByYXZiX3B0cCBwdHA7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ3B0cDsJLyogUmVmZXJlbmNlIHRvIGV4dGVybmFsIGdQVFAgY2xvY2ssIGlmIGFueS4gKi8KIAlzcGlubG9ja190IGxvY2s7CQkvKiBSZWdpc3RlciBhY2Nlc3MgbG9jayAqLwogCXUzMiBjdXJfcnhbTlVNX1JYX1FVRVVFXTsJLyogQ29uc3VtZXIgcmluZyBpbmRpY2VzICovCiAJdTMyIGRpcnR5X3J4W05VTV9SWF9RVUVVRV07CS8qIFByb2R1Y2VyIHJpbmcgaW5kaWNlcyAqLwpAQCAtMTE2Myw3ICYjNDM7MTE4OCw3IEBAIHZvaWQgcmF2Yl9tb2RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGVudW0gcmF2Yl9yZWcgcmVnLCB1MzIgY2xlYXIsCiBpbnQgcmF2Yl93YWl0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHJhdmJfcmVnIHJlZywgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7CiAKIHZvaWQgcmF2Yl9wdHBfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKLXZvaWQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiYjNDM7aW50IHJhdmJfcHRwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwogdm9pZCByYXZiX3B0cF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKIAogI2VuZGlmCS8qICNpZm5kZWYgX19SQVZCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmMKaW5kZXggZWExYzdlNTM2NzkxZS4uNjZjOWNkMTVhMTllMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jCkBAIC03MDcsNyAmIzQzOzcwNywxNSBAQCBzdGF0aWMgaW50IHJhdmJfZG1hY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCQlyZXR1cm4gZXJyb3I7CiAKIAkvKiBTZXR0aW5nIHRoZSBjb250cm9sIHdpbGwgc3RhcnQgdGhlIEFWQi1ETUFDIHByb2Nlc3MuICovCi0JcmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX09QRVJBVElPTik7CiYjNDM7CWVycm9yID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfT1BFUkFUSU9OKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwomIzQzOwkvKiBJbml0aWFsaXNlIFBUUCBDbG9jayBkcml2ZXIgKi8KJiM0MzsJaWYgKGluZm8tJmd0O3B0cCAmYW1wOyZhbXA7IGluZm8tJmd0O3B0cC0mZ3Q7ZG1hY19zdGFydCkKJiM0MzsJCXJldHVybiBpbmZvLSZndDtwdHAtJmd0O2RtYWNfc3RhcnQobmRldik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCByYXZiX2dldF90eF90c3RhbXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCkBAIC0xMTE1LDYgJiM0MzsxMTIzLDEwIEBAIHN0YXRpYyBpbnQgcmF2Yl9zdG9wX2RtYShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAkJCW5ldGRldl9lcnIobmRldiwgJiMzNDtmYWlsZWQgdG8gc3RvcCBBWEkgQlVTXG4mIzM0Oyk7CiAJfQogCiYjNDM7CS8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqLwomIzQzOwlpZiAoaW5mby0mZ3Q7cHRwICZhbXA7JmFtcDsgaW5mby0mZ3Q7cHRwLSZndDtkbWFjX3N0b3ApCiYjNDM7CQlpbmZvLSZndDtwdHAtJmd0O2RtYWNfc3RvcChuZGV2KTsKJiM0MzsKIAkvKiBTdG9wIEFWQi1ETUFDIHByb2Nlc3MgKi8KIAlyZXR1cm4gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTsKIH0KQEAgLTE3MTksOSAmIzQzOzE3MzEsNyBAQCBzdGF0aWMgaW50IHJhdmJfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CiAJCW5ldGlmX2RldmljZV9kZXRhY2gobmRldik7Ci0JCS8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqLwotCQlpZiAoaW5mby0mZ3Q7Z3B0cCkKLQkJCXJhdmJfcHRwX3N0b3AobmRldik7CiYjNDM7CiAJCS8qIFdhaXQgZm9yIERNQSBzdG9wcGluZyAqLwogCQllcnJvciA9IHJhdmJfc3RvcF9kbWEobmRldik7CiAJCWlmIChlcnJvcikgewpAQCAtMTc1MiwxMCAmIzQzOzE3NjIsNiBAQCBzdGF0aWMgaW50IHJhdmJfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAogCQlyYXZiX2VtYWNfaW5pdChuZGV2KTsKIAotCQkvKiBJbml0aWFsaXNlIFBUUCBDbG9jayBkcml2ZXIgKi8KLQkJaWYgKGluZm8tJmd0O2dwdHApCi0JCQlyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtJmd0O3BkZXYpOwotCiAJCW5ldGlmX2RldmljZV9hdHRhY2gobmRldik7CiAJfQogCkBAIC0xNzY3LDggJiM0MzsxNzczLDEzIEBAIHN0YXRpYyBpbnQgcmF2Yl9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIHsKIAlzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyAqaHdfaW5mbyA9IHByaXYtJmd0O2luZm87CiYjNDM7CWludCBpbmRleCA9IC0xOwomIzQzOwomIzQzOwlpZiAoaHdfaW5mby0mZ3Q7cHRwICZhbXA7JmFtcDsgaHdfaW5mby0mZ3Q7cHRwLSZndDtjbG9ja19pbmRleCkKJiM0MzsJCWluZGV4ID0gaHdfaW5mby0mZ3Q7cHRwLSZndDtjbG9ja19pbmRleChuZGV2KTsKIAotCWlmIChod19pbmZvLSZndDtncHRwIHx8IGh3X2luZm8tJmd0O2NjY19nYWMpIHsKJiM0MzsJLyogT25seSBhZHZlcnRpc2UgcHRwIGNsb2NrIGlmIHByZXNlbnQuICovCiYjNDM7CWlmIChpbmRleCAmZ3Q7PSAwKSB7CiAJCWluZm8tJmd0O3NvX3RpbWVzdGFtcGluZyA9CiAJCQlTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFIHwKIAkJCVNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfApAQCAtMTc3OSw3ICYjNDM7MTc5MCw3IEBAIHN0YXRpYyBpbnQgcmF2Yl9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAkJCSgxICZsdDsmbHQ7IEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB8CiAJCQkoMSAmbHQ7Jmx0OyBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UKSB8CiAJCQkoMSAmbHQ7Jmx0OyBIV1RTVEFNUF9GSUxURVJfQUxMKTsKLQkJaW5mby0mZ3Q7cGhjX2luZGV4ID0gUkVBRF9PTkNFKHByaXYtJmd0O3B0cC5waGNfaW5kZXgpOwomIzQzOwkJaW5mby0mZ3Q7cGhjX2luZGV4ID0gaW5kZXg7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xODI2LDU1ICYjNDM7MTgzNywyNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJhdmJfZXRodG9vbF9vcHMgPSB7CiB9OwogCiBzdGF0aWMgaW50IHJhdmJfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQotewotCXN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQljb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvICppbmZvID0gcHJpdi0mZ3Q7aW5mbzsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoaW5mby0mZ3Q7Z3B0cCkgewotCQllcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQkJLyogU2V0IENTRUwgdmFsdWUgKi8KLQkJcmF2Yl9tb2RpZnkobmRldiwgQ0NDLCBDQ0NfQ1NFTCwgQ0NDX0NTRUxfSFBCKTsKLQl9IGVsc2UgaWYgKGluZm8tJmd0O2NjY19nYWMpIHsKLQkJZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcgfCBDQ0NfR0FDIHwgQ0NDX0NTRUxfSFBCKTsKLQl9IGVsc2UgewotCQllcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7Ci0JfQotCi0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgdm9pZCByYXZiX3NldF9ndGkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCWNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmluZm8gPSBwcml2LSZndDtpbmZvOwogCi0JaWYgKCEoaW5mby0mZ3Q7Z3B0cCB8fCBpbmZvLSZndDtjY2NfZ2FjKSkKLQkJcmV0dXJuOwomIzQzOwlpZiAoaW5mby0mZ3Q7cHRwICZhbXA7JmFtcDsgaW5mby0mZ3Q7cHRwLSZndDtzZXRfY29uZmlnX21vZGUpCiYjNDM7CQlyZXR1cm4gaW5mby0mZ3Q7cHRwLSZndDtzZXRfY29uZmlnX21vZGUobmRldik7CiAKLQlyYXZiX3dyaXRlKG5kZXYsIHByaXYtJmd0O2d0aV90aXYsIEdUSSk7Ci0KLQkvKiBSZXF1ZXN0IEdUSSBsb2FkaW5nICovCi0JcmF2Yl9tb2RpZnkobmRldiwgR0NDUiwgR0NDUl9MVEksIEdDQ1JfTFRJKTsKJiM0MzsJcmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7CiB9CiAKLXN0YXRpYyBpbnQgcmF2Yl9jb21wdXRlX2d0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0MztzdGF0aWMgaW50IHJhdmJfY29tcHV0ZV9ndGkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjbGsgKmNsaykKIHsKIAlzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7Ci0JY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyAqaW5mbyA9IHByaXYtJmd0O2luZm87CiAJc3RydWN0IGRldmljZSAqZGV2ID0gbmRldi0mZ3Q7ZGV2LnBhcmVudDsKIAl1bnNpZ25lZCBsb25nIHJhdGU7CiAJdTY0IGluYzsKIAotCWlmICghKGluZm8tJmd0O2dwdHAgfHwgaW5mby0mZ3Q7Y2NjX2dhYykpCi0JCXJldHVybiAwOwotCi0JaWYgKGluZm8tJmd0O2dwdHBfcmVmX2NsaykKLQkJcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LSZndDtncHRwX2Nsayk7Ci0JZWxzZQotCQlyYXRlID0gY2xrX2dldF9yYXRlKHByaXYtJmd0O2Nsayk7CiYjNDM7CXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKIAlpZiAoIXJhdGUpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xOTc0LDExICYjNDM7MTk1NCwxMiBAQCBzdGF0aWMgaW50IHJhdmJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAogCXJhdmJfZW1hY19pbml0KG5kZXYpOwogCi0JcmF2Yl9zZXRfZ3RpKG5kZXYpOwotCiAJLyogSW5pdGlhbGlzZSBQVFAgQ2xvY2sgZHJpdmVyICovCi0JaWYgKGluZm8tJmd0O2dwdHAgfHwgaW5mby0mZ3Q7Y2NjX2dhYykKLQkJcmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LSZndDtwZGV2KTsKJiM0MzsJaWYgKGluZm8tJmd0O3B0cCAmYW1wOyZhbXA7IGluZm8tJmd0O3B0cC0mZ3Q7bmRldl9vcGVuKSB7CiYjNDM7CQllcnJvciA9IGluZm8tJmd0O3B0cC0mZ3Q7bmRldl9vcGVuKG5kZXYpOwomIzQzOwkJaWYgKGVycm9yKQomIzQzOwkJCWdvdG8gb3V0X3B0cF9zdG9wOwomIzQzOwl9CiAKIAkvKiBQSFkgY29udHJvbCBzdGFydCAqLwogCWVycm9yID0gcmF2Yl9waHlfc3RhcnQobmRldik7CkBAIC0xOTkwLDkgJiM0MzsxOTcxLDYgQEAgc3RhdGljIGludCByYXZiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJcmV0dXJuIDA7CiAKIG91dF9wdHBfc3RvcDoKLQkvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi8KLQlpZiAoaW5mby0mZ3Q7Z3B0cCB8fCBpbmZvLSZndDtjY2NfZ2FjKQotCQlyYXZiX3B0cF9zdG9wKG5kZXYpOwogCXJhdmJfc3RvcF9kbWEobmRldik7CiBvdXRfc2V0X3Jlc2V0OgogCXJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX1JFU0VUKTsKQEAgLTIwMzYsMTAgJiM0MzsyMDE0LDYgQEAgc3RhdGljIHZvaWQgcmF2Yl90eF90aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCiAJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5kZXYpOwogCi0JLyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovCi0JaWYgKGluZm8tJmd0O2dwdHApCi0JCXJhdmJfcHRwX3N0b3AobmRldik7Ci0KIAkvKiBXYWl0IGZvciBETUEgc3RvcHBpbmcgKi8KIAlpZiAocmF2Yl9zdG9wX2RtYShuZGV2KSkgewogCQkvKiBJZiByYXZiX3N0b3BfZG1hKCkgZmFpbHMsIHRoZSBoYXJkd2FyZSBpcyBzdGlsbCBvcGVyYXRpbmcKQEAgLTIwNzIsMTAgJiM0MzsyMDQ2LDYgQEAgc3RhdGljIHZvaWQgcmF2Yl90eF90aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXJhdmJfZW1hY19pbml0KG5kZXYpOwogCiBvdXQ6Ci0JLyogSW5pdGlhbGlzZSBQVFAgQ2xvY2sgZHJpdmVyICovCi0JaWYgKGluZm8tJmd0O2dwdHApCi0JCXJhdmJfcHRwX2luaXQobmRldiwgcHJpdi0mZ3Q7cGRldik7Ci0KIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5kZXYpOwogCiBvdXRfdW5sb2NrOgpAQCAtMjIwOCw3ICYjNDM7MjE3OCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCByYXZiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJZGVzYy0mZ3Q7ZHB0ciA9IGNwdV90b19sZTMyKGRtYV9hZGRyKTsKIAogCS8qIFRYIHRpbWVzdGFtcCByZXF1aXJlZCAqLwotCWlmIChpbmZvLSZndDtncHRwIHx8IGluZm8tJmd0O2NjY19nYWMpIHsKJiM0MzsJaWYgKGluZm8tJmd0O3B0cCkgewogCQlpZiAocSA9PSBSQVZCX05DKSB7CiAJCQl0c19za2IgPSBrbWFsbG9jX29iaigqdHNfc2tiLCBHRlBfQVRPTUlDKTsKIAkJCWlmICghdHNfc2tiKSB7CkBAIC0yMzkwLDggJiM0MzsyMzYwLDggQEAgc3RhdGljIGludCByYXZiX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCX0KIAogCS8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqLwotCWlmIChpbmZvLSZndDtncHRwIHx8IGluZm8tJmd0O2NjY19nYWMpCi0JCXJhdmJfcHRwX3N0b3AobmRldik7CiYjNDM7CWlmIChpbmZvLSZndDtwdHAgJmFtcDsmYW1wOyBpbmZvLSZndDtwdHAtJmd0O25kZXZfY2xvc2UpCiYjNDM7CQlpbmZvLSZndDtwdHAtJmd0O25kZXZfY2xvc2UobmRldik7CiAKIAkvKiBTZXQgdGhlIGNvbmZpZyBtb2RlIHRvIHN0b3AgdGhlIEFWQi1ETUFDJiMzOTtzIHByb2Nlc3NlcyAqLwogCWlmIChyYXZiX3N0b3BfZG1hKG5kZXYpICZsdDsgMCkKQEAgLTIzOTksNyAmIzQzOzIzNjksNyBAQCBzdGF0aWMgaW50IHJhdmJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJCQkgICAmIzM0O2RldmljZSB3aWxsIGJlIHN0b3BwZWQgYWZ0ZXIgaC93IHByb2Nlc3NlcyBhcmUgZG9uZS5cbiYjMzQ7KTsKIAogCS8qIENsZWFyIHRoZSB0aW1lc3RhbXAgbGlzdCAqLwotCWlmIChpbmZvLSZndDtncHRwIHx8IGluZm8tJmd0O2NjY19nYWMpIHsKJiM0MzsJaWYgKGluZm8tJmd0O3B0cCkgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHNfc2tiLCB0c19za2IyLCAmYW1wO3ByaXYtJmd0O3RzX3NrYl9saXN0LCBsaXN0KSB7CiAJCQlsaXN0X2RlbCgmYW1wO3RzX3NrYi0mZ3Q7bGlzdCk7CiAJCQlrZnJlZV9za2IodHNfc2tiLSZndDtza2IpOwpAQCAtMjY4MSw2ICYjNDM7MjY1MSw0MiBAQCBzdGF0aWMgaW50IHJhdmJfbWRpb19yZWxlYXNlKHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuMl9wdHBfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CiYjNDM7CXJldHVybiByYXZiX2NvbXB1dGVfZ3RpKG5kZXYsIHByaXYtJmd0O2Nsayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHB0cF9jbG9ja19pbmRleChwcml2LSZndDtwdHAuY2xvY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuMl9wdHBfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIGdQVFAgQ2xvY2sgU2VsZWN0IEhpZ2gtc3BlZWQgcGVyaXBoZXJhbCBidXMgY2xvY2suICovCiYjNDM7CXJhdmJfbW9kaWZ5KG5kZXYsIENDQywgQ0NDX0NTRUwsIENDQ19DU0VMX0hQQik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfZ2VuMl9wdHBfaW5mbyA9IHsKJiM0MzsJLnByb2JlID0gcmF2Yl9nZW4yX3B0cF9wcm9iZSwKJiM0MzsJLmNsb2NrX2luZGV4ID0gcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleCwKJiM0MzsJLnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuMl9wdHBfc2V0X2NvbmZpZ19tb2RlLAomIzQzOwkuZG1hY19zdGFydCA9IHJhdmJfcHRwX2luaXQsCiYjNDM7CS5kbWFjX3N0b3AgPSByYXZiX3B0cF9zdG9wLAomIzQzO307CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjJfaHdfaW5mbyA9IHsKIAkucmVjZWl2ZSA9IHJhdmJfcnhfcmNhciwKIAkuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsCkBAIC0yNjk5LDEyICYjNDM7MjcwNSwyNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjJfaHdfaW5mbyA9IHsKIAkJCSAgU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKSwKIAkucnhfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCByYXZiX2V4X3J4X2Rlc2MpLAogCS5kYmF0X2VudHJ5X251bSA9IDIyLAomIzQzOwkucHRwID0gJmFtcDtyYXZiX2dlbjJfcHRwX2luZm8sCiAJLmFsaWduZWRfdHggPSAxLAotCS5ncHRwID0gMSwKIAkubmNfcXVldWVzID0gMSwKIAkubWFnaWNfcGt0ID0gMSwKIH07CiAKJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuM19wdHBfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJLyogRW5hYmxlIGdQVFAgQ2xvY2sgYW5kIFNlbGVjdCBIaWdoLXNwZWVkIHBlcmlwaGVyYWwgYnVzIGNsb2NrLiAqLwomIzQzOwlyZXR1cm4gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHIHwgQ0NDX0dBQyB8IENDQ19DU0VMX0hQQik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9nZW4zX3B0cF9pbmZvID0gewomIzQzOwkucHJvYmUgPSByYXZiX2dlbjJfcHRwX3Byb2JlLAomIzQzOwkuY2xvY2tfaW5kZXggPSByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4LAomIzQzOwkuc2V0X2NvbmZpZ19tb2RlID0gcmF2Yl9nZW4zX3B0cF9zZXRfY29uZmlnX21vZGUsCiYjNDM7CS5uZGV2X29wZW4gPSByYXZiX3B0cF9pbml0LAomIzQzOwkubmRldl9jbG9zZSA9IHJhdmJfcHRwX3N0b3AsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuM19od19pbmZvID0gewogCS5yZWNlaXZlID0gcmF2Yl9yeF9yY2FyLAogCS5zZXRfcmF0ZSA9IHJhdmJfc2V0X3JhdGVfcmNhciwKQEAgLTI3MjMsMTUgJiM0MzsyNzQzLDY2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuM19od19pbmZvID0gewogCQkJICBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpLAogCS5yeF9kZXNjX3NpemUgPSBzaXplb2Yoc3RydWN0IHJhdmJfZXhfcnhfZGVzYyksCiAJLmRiYXRfZW50cnlfbnVtID0gMjIsCiYjNDM7CS5wdHAgPSAmYW1wO3JhdmJfZ2VuM19wdHBfaW5mbywKIAkuaW50ZXJuYWxfZGVsYXkgPSAxLAogCS50eF9jb3VudGVycyA9IDEsCiAJLm11bHRpX2lycXMgPSAxLAogCS5pcnFfZW5fZGlzID0gMSwKLQkuY2NjX2dhYyA9IDEsCiAJLm5jX3F1ZXVlcyA9IDEsCiAJLm1hZ2ljX3BrdCA9IDEsCiB9OwogCiYjNDM7c3RhdGljIGludCByYXZiX2dlbjRfcHRwX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwomIzQzOwlwcml2LSZndDtvZl9ncHRwID0gb2ZfcGFyc2VfcGhhbmRsZShwcml2LSZndDtwZGV2LSZndDtkZXYub2Zfbm9kZSwgJiMzNDtwdHAtdGltZXImIzM0OywgMCk7CiYjNDM7CWlmICghcHJpdi0mZ3Q7b2ZfZ3B0cCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUocHJpdi0mZ3Q7b2ZfZ3B0cCkpIHsKJiM0MzsJCW9mX25vZGVfcHV0KHByaXYtJmd0O29mX2dwdHApOwomIzQzOwkJcHJpdi0mZ3Q7b2ZfZ3B0cCA9IE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmF2Yl9nZW40X3B0cF9jbG9ja19pbmRleChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsKJiM0MzsJLyogSWYgbm8gY2xvY2ssIG1pbWljIHB0cF9jbG9ja19pbmRleF9ieV9vZl9ub2RlKCkgZmFpbCBhbmQgcmV0dXJuIC0xICovCiYjNDM7CWlmICghcHJpdi0mZ3Q7b2ZfZ3B0cCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJcmV0dXJuIHB0cF9jbG9ja19pbmRleF9ieV9vZl9ub2RlKHByaXYtJmd0O29mX2dwdHApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuNF9wdHBfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkvKiBFbmFibGUgZ1BUUCBDbG9jayBhbmQgU2VsZWN0IEhpZ2gtc3BlZWQgcGVyaXBoZXJhbCBidXMgY2xvY2suICovCiYjNDM7CXJldCA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyB8IENDQ19HQUMgfCBDQ0NfQ1NFTF9IUEIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogU2V0IFBUUCBzb3VyY2UgdG8gR1BUUCBtb2R1bGUsIG9ubHkgb3B0aW9uIG9uIEdlbjQuICovCiYjNDM7CWlmIChwcml2LSZndDtvZl9ncHRwKQomIzQzOwkJcmF2Yl9tb2RpZnkobmRldiwgQVBTUiwgQVBTUl9HUFRQVElNRVJfU09VUkNFIHwgQVBTUl9HUFRQQ0xPQ0ssCiYjNDM7CQkJICAgIEFQU1JfR1BUUFRJTUVSX1NPVVJDRSB8IEFQU1JfR1BUUENMT0NLKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9nZW40X3B0cF9pbmZvID0gewomIzQzOwkucHJvYmUgPSByYXZiX2dlbjRfcHRwX3Byb2JlLAomIzQzOwkuY2xvY2tfaW5kZXggPSByYXZiX2dlbjRfcHRwX2Nsb2NrX2luZGV4LAomIzQzOwkuc2V0X2NvbmZpZ19tb2RlID0gcmF2Yl9nZW40X3B0cF9zZXRfY29uZmlnX21vZGUsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuNF9od19pbmZvID0gewogCS5yZWNlaXZlID0gcmF2Yl9yeF9yY2FyLAogCS5zZXRfcmF0ZSA9IHJhdmJfc2V0X3JhdGVfcmNhciwKQEAgLTI3NTQsMTEgJiM0MzsyODI1LDMwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuNF9od19pbmZvID0gewogCS50eF9jb3VudGVycyA9IDEsCiAJLm11bHRpX2lycXMgPSAxLAogCS5pcnFfZW5fZGlzID0gMSwKLQkuY2NjX2dhYyA9IDEsCiYjNDM7CS5wdHAgPSAmYW1wO3JhdmJfZ2VuNF9wdHBfaW5mbywKIAkubmNfcXVldWVzID0gMSwKIAkubWFnaWNfcGt0ID0gMSwKIH07CiAKJiM0MztzdGF0aWMgaW50IHJhdmJfcnp2Mm1fcHRwX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwomIzQzOwlwcml2LSZndDtncHRwX2NsayA9IGRldm1fY2xrX2dldCgmYW1wO3ByaXYtJmd0O3BkZXYtJmd0O2RldiwgJiMzNDtncHRwJiMzNDspOwomIzQzOwlpZiAoSVNfRVJSKHByaXYtJmd0O2dwdHBfY2xrKSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKHByaXYtJmd0O2dwdHBfY2xrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJhdmJfY29tcHV0ZV9ndGkobmRldiwgcHJpdi0mZ3Q7Z3B0cF9jbGspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfcnp2Mm1fcHRwX2luZm8gPSB7CiYjNDM7CS5wcm9iZSA9IHJhdmJfcnp2Mm1fcHRwX3Byb2JlLAomIzQzOwkuY2xvY2tfaW5kZXggPSByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4LAomIzQzOwkuc2V0X2NvbmZpZ19tb2RlID0gcmF2Yl9nZW4yX3B0cF9zZXRfY29uZmlnX21vZGUsCiYjNDM7CS5kbWFjX3N0YXJ0ID0gcmF2Yl9wdHBfaW5pdCwKJiM0MzsJLmRtYWNfc3RvcCA9IHJhdmJfcHRwX3N0b3AsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfcnp2Mm1faHdfaW5mbyA9IHsKIAkucmVjZWl2ZSA9IHJhdmJfcnhfcmNhciwKIAkuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsCkBAIC0yNzc5LDggJiM0MzsyODY5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9yenYybV9od19pbmZvID0gewogCS5kYmF0X2VudHJ5X251bSA9IDIyLAogCS5tdWx0aV9pcnFzID0gMSwKIAkuZXJyX21nbXRfaXJxcyA9IDEsCi0JLmdwdHAgPSAxLAotCS5ncHRwX3JlZl9jbGsgPSAxLAomIzQzOwkucHRwID0gJmFtcDtyYXZiX3J6djJtX3B0cF9pbmZvLAogCS5uY19xdWV1ZXMgPSAxLAogCS5tYWdpY19wa3QgPSAxLAogfTsKQEAgLTI5NTUsNyAmIzQzOzMwNDQsNiBAQCBzdGF0aWMgaW50IHJhdmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlwcml2LSZndDtyc3RjID0gcnN0YzsKIAlwcml2LSZndDtuZGV2ID0gbmRldjsKIAlwcml2LSZndDtwZGV2ID0gcGRldjsKLQlwcml2LSZndDtwdHAucGhjX2luZGV4ID0gLTE7CiAJcHJpdi0mZ3Q7bnVtX3R4X3JpbmdbUkFWQl9CRV0gPSBCRV9UWF9SSU5HX1NJWkU7CiAJcHJpdi0mZ3Q7bnVtX3J4X3JpbmdbUkFWQl9CRV0gPSBCRV9SWF9SSU5HX1NJWkU7CiAJaWYgKGluZm8tJmd0O25jX3F1ZXVlcykgewpAQCAtMjk3MywxMiAmIzQzOzMwNjEsMTAgQEAgc3RhdGljIGludCByYXZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCWdvdG8gb3V0X3Jlc2V0X2Fzc2VydDsKIAl9CiAKLQlpZiAoaW5mby0mZ3Q7Z3B0cF9yZWZfY2xrKSB7Ci0JCXByaXYtJmd0O2dwdHBfY2xrID0gZGV2bV9jbGtfZ2V0KCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O2dwdHAmIzM0Oyk7Ci0JCWlmIChJU19FUlIocHJpdi0mZ3Q7Z3B0cF9jbGspKSB7Ci0JCQllcnJvciA9IFBUUl9FUlIocHJpdi0mZ3Q7Z3B0cF9jbGspOwomIzQzOwlpZiAoaW5mby0mZ3Q7cHRwICZhbXA7JmFtcDsgaW5mby0mZ3Q7cHRwLSZndDtwcm9iZSkgewomIzQzOwkJZXJyb3IgPSBpbmZvLSZndDtwdHAtJmd0O3Byb2JlKG5kZXYpOwomIzQzOwkJaWYgKGVycm9yKQogCQkJZ290byBvdXRfcmVzZXRfYXNzZXJ0OwotCQl9CiAJfQogCiAJcHJpdi0mZ3Q7cmVmY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O3JlZmNsayYjMzQ7KTsKQEAgLTMwMzEsMTAgJiM0MzszMTE3LDYgQEAgc3RhdGljIGludCByYXZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJbmRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7cmF2Yl9uZXRkZXZfb3BzOwogCW5kZXYtJmd0O2V0aHRvb2xfb3BzID0gJmFtcDtyYXZiX2V0aHRvb2xfb3BzOwogCi0JZXJyb3IgPSByYXZiX2NvbXB1dGVfZ3RpKG5kZXYpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfcnBtX3B1dDsKLQogCXJhdmJfcGFyc2VfZGVsYXlfbW9kZShucCwgbmRldik7CiAKIAkvKiBBbGxvY2F0ZSBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyB0YWJsZSAqLwpAQCAtMzE1Nyw2ICYjNDM7MzIzOSw3IEBAIHN0YXRpYyB2b2lkIHJhdmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJcG1fcnVudGltZV9kaXNhYmxlKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKIAlwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKGRldik7CiAJY2xrX3VucHJlcGFyZShwcml2LSZndDtyZWZjbGspOwomIzQzOwlvZl9ub2RlX3B1dChwcml2LSZndDtvZl9ncHRwKTsKIAlyZXNldF9jb250cm9sX2Fzc2VydChwcml2LSZndDtyc3RjKTsKIAlmcmVlX25ldGRldihuZGV2KTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKQEAgLTMxODIsOSAmIzQzOzMyNjUsNiBAQCBzdGF0aWMgaW50IHJhdmJfd29sX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCS8qIEVuYWJsZSBNYWdpY1BhY2tldCAqLwogCXJhdmJfbW9kaWZ5KG5kZXYsIEVDTVIsIEVDTVJfTVBERSwgRUNNUl9NUERFKTsKIAotCWlmIChwcml2LSZndDtpbmZvLSZndDtjY2NfZ2FjKQotCQlyYXZiX3B0cF9zdG9wKG5kZXYpOwotCiAJcmV0dXJuIGVuYWJsZV9pcnFfd2FrZShwcml2LSZndDtlbWFjX2lycSk7CiB9CiAKQEAgLTMyMDQsOSAmIzQzOzMyODQsNiBAQCBzdGF0aWMgaW50IHJhdmJfd29sX3Jlc3RvcmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlpZiAocHJpdi0mZ3Q7aW5mby0mZ3Q7Y2NjX2dhYykKLQkJcmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LSZndDtwZGV2KTsKLQogCWlmIChpbmZvLSZndDtuY19xdWV1ZXMpCiAJCW5hcGlfZW5hYmxlKCZhbXA7cHJpdi0mZ3Q7bmFwaVtSQVZCX05DXSk7CiAJbmFwaV9lbmFibGUoJmFtcDtwcml2LSZndDtuYXBpW1JBVkJfQkVdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuYwppbmRleCA0MzIxOGJjMTViMTUxLi4xOWQwMzliOWQyNGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfcHRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jCkBAIC0zMTMsMzEgJiM0MzszMTMsMzkgQEAgdm9pZCByYXZiX3B0cF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJcmF2Yl93cml0ZShuZGV2LCB+KGdpcyB8IEdJU19SRVNFUlZFRCksIEdJUyk7CiB9CiAKLXZvaWQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKJiM0MztpbnQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7Ci0Jc3RydWN0IHB0cF9jbG9jayAqY2xvY2s7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJaW50IHJldCA9IDA7CiAKIAlwcml2LSZndDtwdHAuaW5mbyA9IHJhdmJfcHRwX2luZm87CiAKLQlwcml2LSZndDtwdHAuZGVmYXVsdF9hZGRlbmQgPSByYXZiX3JlYWQobmRldiwgR1RJKTsKJiM0MzsJcHJpdi0mZ3Q7cHRwLmRlZmF1bHRfYWRkZW5kID0gcHJpdi0mZ3Q7Z3RpX3RpdjsKIAlwcml2LSZndDtwdHAuY3VycmVudF9hZGRlbmQgPSBwcml2LSZndDtwdHAuZGVmYXVsdF9hZGRlbmQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ByaXYtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJLyogU2V0IGdQVFAgVGltZXIgSW5jcmVtZW50IFZhbHVlLiAqLwomIzQzOwlyYXZiX3dyaXRlKG5kZXYsIHByaXYtJmd0O3B0cC5kZWZhdWx0X2FkZGVuZCwgR1RJKTsKJiM0MzsKJiM0MzsJLyogUmVxdWVzdCBHVEkgbG9hZGluZy4gKi8KJiM0MzsJcmF2Yl9tb2RpZnkobmRldiwgR0NDUiwgR0NDUl9MVEksIEdDQ1JfTFRJKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgR0lUIGxvYWRpbmcgdG8gY29tcGxldGUuICovCiAJcmF2Yl93YWl0KG5kZXYsIEdDQ1IsIEdDQ1JfVENSLCBHQ0NSX1RDUl9OT1JFUSk7CiYjNDM7CiAJcmF2Yl9tb2RpZnkobmRldiwgR0NDUiwgR0NDUl9UQ1NTLCBHQ0NSX1RDU1NfQURKR1BUUCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O2xvY2ssIGZsYWdzKTsKIAotCWNsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKCZhbXA7cHJpdi0mZ3Q7cHRwLmluZm8sICZhbXA7cGRldi0mZ3Q7ZGV2KTsKLQlpZiAoSVNfRVJSKGNsb2NrKSkgewotCQluZXRkZXZfZXJyKG5kZXYsICYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJXBlXG4mIzM0OywgY2xvY2spOwotCQljbG9jayA9IE5VTEw7CiYjNDM7CXByaXYtJmd0O3B0cC5jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcigmYW1wO3ByaXYtJmd0O3B0cC5pbmZvLCAmYW1wO3ByaXYtJmd0O3BkZXYtJmd0O2Rldik7CiYjNDM7CWlmIChJU19FUlIocHJpdi0mZ3Q7cHRwLmNsb2NrKSkgewomIzQzOwkJcmV0ID0gUFRSX0VSUihwcml2LSZndDtwdHAuY2xvY2spOwomIzQzOwkJcHJpdi0mZ3Q7cHRwLmNsb2NrID0gTlVMTDsKJiM0MzsJCXJhdmJfcHRwX3N0b3AobmRldik7CiAJfQogCi0JV1JJVEVfT05DRShwcml2LSZndDtwdHAuY2xvY2ssIGNsb2NrKTsKLQlpZiAoY2xvY2spCi0JCVdSSVRFX09OQ0UocHJpdi0mZ3Q7cHRwLnBoY19pbmRleCwgcHRwX2Nsb2NrX2luZGV4KGNsb2NrKSk7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHJhdmJfcHRwX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCkBAIC0zNjAsMTQgJiM0MzszNjgsMTAgQEAgc3RhdGljIHZvaWQgcmF2Yl9wdHBfc3luY19pcnFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogdm9pZCByYXZiX3B0cF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQlzdHJ1Y3QgcHRwX2Nsb2NrICpjbG9jazsKLQotCVdSSVRFX09OQ0UocHJpdi0mZ3Q7cHRwLnBoY19pbmRleCwgLTEpOwotCWNsb2NrID0geGNoZygmYW1wO3ByaXYtJmd0O3B0cC5jbG9jaywgTlVMTCk7CiAKIAlyYXZiX3B0cF9kaXNhYmxlKG5kZXYpOwogCXJhdmJfcHRwX3N5bmNfaXJxcyhuZGV2KTsKIAotCWlmIChjbG9jaykKLQkJcHRwX2Nsb2NrX3VucmVnaXN0ZXIoY2xvY2spOwomIzQzOwlpZiAocHJpdi0mZ3Q7cHRwLmNsb2NrKQomIzQzOwkJcHRwX2Nsb2NrX3VucmVnaXN0ZXIocHJpdi0mZ3Q7cHRwLmNsb2NrKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB0aGlzIExpbnV4IGtlcm5lbCBwYXRjaCBhbmQgZGVjaWRlIGlmIGl0JiMzOTtzIGZ1enotd29ydGh5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBkaWZmIGFuZCBzZWUgd2hhdCYjMzk7cyBiZWluZyB0d2Vha2VkLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgY2hhbmdlcyBhY3Jvc3MgZm91ciBmaWxlczogYERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yi5oYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmNgLCBhbmQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuY2AuIFRoYXQgZ2l2ZXMgbWUgYSBzdGFydGluZyBwb2ludC4KClRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYHJhdmJgLCB3aGljaCBmcm9tIHRoZSBmaWxlIHBhdGhzIGxvb2tzIGxpa2UgaXQmIzM5O3MgYSBSZW5lc2FzIEV0aGVybmV0IEFWQiBkcml2ZXIuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBhIFJlbmVzYXMgU29DIEV0aGVybmV0IGNvbnRyb2xsZXIuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHR5cGUgb2YgaGFyZHdhcmUgdGhpcyBwZXJ0YWlucyB0by4gTXkgcHJlZmVycmVkIG1ldGhvZCBpcyB1c3VhbGx5IHRvIGdsYW5jZSBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnYCB0byBjaGVjayBmb3IgdGhlIHByb3BlciBjb250ZXh0LCBvciBwZXJoYXBzIGxldmVyYWdlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIGByYXZiYCB3aXRoaW4gdGhlIHNvdXJjZSB0cmVlLiBUaGlzIHF1aWNrIGJpdCBvZiBhbmFseXNpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgYXJjaGl0ZWN0dXJlIGFuZCBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSQVZCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWc9MTk9Y29uZmlnIFNIX0VUSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZy0yOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZzoyOTpjb25maWcgUkFWQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnLTMwLVx0dHJpc3RhdGUgXCYjMzQ7UmVuZXNhcyBFdGhlcm5ldCBBVkIgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzY2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIFJlbmVzYXMgRXRoZXJuZXQgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSByZW1lbWJlciBzZWVpbmcgc29tZXRoaW5nIGludGVyZXN0aW5nIGluIHRoZSBgS2NvbmZpZ2AgZmlsZSwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIG92ZXJhbGwgZHJpdmVyJiMzOTtzIHNldHVwLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnYC4gTGluZSAyOSBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIGl0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSBjb3JlIGRyaXZlciBvcHRpb25zIG9yIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZC4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kIHRoYXQgYXJlYS4gTWF5YmUgYSBuZXcgb3B0aW9uIHdhcyBhZGRlZCBvciBhbiBvbGQgb25lIHJldmlzZWQsIEkgbmVlZCB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZC4gSSB3aWxsIHN0YXJ0IGJ5IHNlZWluZyB3aGF0JiMzOTtzIHJpZ2h0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdFx0c2VsZWN0IFBIWUxJQlxuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBSZW5lc2FzIFN1cGVySCBFdGhlcm5ldCBkZXZpY2UgZHJpdmVyLlxuICAyODpcdFxuICAyOTpcdGNvbmZpZyBSQVZCXG4gIDMwOlx0XHR0cmlzdGF0ZSBcJiMzNDtSZW5lc2FzIEV0aGVybmV0IEFWQiBzdXBwb3J0XCYjMzQ7XG4gIDMxOlx0XHRkZXBlbmRzIG9uIEFSQ0hfUkVORVNBUyB8fCBDT01QSUxFX1RFU1RcbiAgMzI6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgMzM6XHRcdHNlbGVjdCBDUkMzMlxuICAzNDpcdFx0c2VsZWN0IE1JSVxuICAzNTpcdFx0c2VsZWN0IE1ESU9fQklUQkFOR1xuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTFxuICAzNzpcdFx0c2VsZWN0IFBIWUxJQlxuICAzODpcdFx0c2VsZWN0IFJFU0VUX0NPTlRST0xMRVJcbiAgMzk6XHRcdGhlbHBcbiAgNDA6XHRcdCAgUmVuZXNhcyBFdGhlcm5ldCBBVkIgZGV2aWNlIGRyaXZlci5cbiAgNDE6XHRcbiAgNDI6XHRjb25maWcgUkVORVNBU19FVEhFUl9TV0lUQ0hcbiAgNDM6XHRcdHRyaXN0YXRlIFwmIzM0O1JlbmVzYXMgRXRoZXJuZXQgU3dpdGNoIHN1cHBvcnRcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQVJDSF9SRU5FU0FTIHx8IENPTVBJTEVfVEVTVFxuICA0NTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS1xuICA0NjpcdFx0c2VsZWN0IENSQzMyXG4gIDQ3Olx0XHRzZWxlY3QgTUlJXG4gIDQ4Olx0XHRzZWxlY3QgUEhZTElOS1xuICA0OTpcdFx0c2VsZWN0IFJFTkVTQVNfR0VONF9QVFBcbiAgNTA6XHRcdGhlbHBcbiAgNTE6XHRcdCAgUmVuZXNhcyBFdGhlcm5ldCBTd2l0Y2ggZGV2aWNlIGRyaXZlci5cbiAgNTI6XHRcbiAgNTM6XHRjb25maWcgUkVORVNBU19HRU40X1BUUFxuICA1NDpcdFx0dHJpc3RhdGUgXCYjMzQ7UmVuZXNhcyBSLUNhciBHZW40IGdQVFAgc3VwcG9ydFwmIzM0OyBpZiBDT01QSUxFX1RFU1RcbiAgNTU6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcbiAgNTY6XHRcdHNlbGVjdCBDUkMzMlxuICA1NzpcdFx0c2VsZWN0IE1JSVxuICA1ODpcdFx0c2VsZWN0IFBIWUxJQlxuICA1OTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDI5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJBVkIgRHJpdmVyIGFuZCBpdHMgV29ydGhpbmVzcyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcsIGFuZCB0aGUga2V5IGhlcmUgaXMgd2hldGhlciB0aGUgY29kZSB0b3VjaGVzIHNvbWV0aGluZyB0aGF0JiMzOTtzICp1bnJlYWNoYWJsZSogaW4gY29tbW9uIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGByYXZiYC4uLiB0aGF0JiMzOTtzIFJlbmVzYXMgRXRoZXJuZXQgQVZCIHN1cHBvcnQsIGFuIFNvQyBldGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlIGBBUkNIX1JFTkVTQVNgIGFyY2hpdGVjdHVyZS4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzIHdoZXRoZXIgdGhpcyBpcyBzb21ldGhpbmcgZW11bGF0ZWQgaW4gUUVNVSwgb3IgaWYgaXQmIzM5O3MgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIHRoYXQgKnJlcXVpcmVzKiBwaHlzaWNhbCBSZW5lc2FzIFItQ2FyIG9yIFJaIGhhcmR3YXJlIHRvIGZ1bmN0aW9uLgoKSSBuZWVkIHRvIGFwcGx5IHRoZSBpbnN0cnVjdGlvbnMgY2FyZWZ1bGx5OyBJIG5lZWQgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBpbnZvbHZlcyB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiBUaGUgY3JpdGVyaWEgbGlzdGVkIGFyZSBxdWl0ZSBzcGVjaWZpYzogdGhpbmdzIHRoYXQgYXJlIGxpdGVyYWxseSBpbXBvc3NpYmxlIHRvIHRvdWNoIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZywgbGlrZSBVU0IgZ2FkZ2V0IGNvZGUgb3IgY2VydGFpbiBoYXJkd2FyZSBzaW11bGF0b3JzLCBvciB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyBmb3IgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFVzLiBUaG9zZSBraW5kcyBvZiB0aGluZ3MgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSwgbm90IHN0YW5kYXJkIFFFTVUgZW11bGF0aW9uLgoKU28sIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB0aGlzOiBJcyBSZW5lc2FzIFJBVkIgKmVtdWxhdGVkKiBpbiBRRU1VIGluIGFueSB3YXk/IE9yIGlzIGl0IHB1cmVseSBhIHBsYXRmb3JtIGRyaXZlciwgZGVzaWduZWQgb25seSB0byB3b3JrIG9uIFJlbmVzYXMgU29Dcz8gSWYgaXQmIzM5O3MgdGhlIGxhdHRlciwgdGhlbiBpdCYjMzk7cyAqbGlrZWx5KiBhIG5vLWdvIGZvciBmdXp6aW5nIGluIGEgc3RhbmRhcmQgdmlydHVhbCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYW55IFFFTVUgZW11bGF0aW9uIGZvciB0aGlzLCBvciBpZiBpdCYjMzk7cyBzdHJpY3RseSBhbiBTb0MgcGxhdGZvcm0gZHJpdmVyLiBUaW1lIHRvIGRvIHNvbWUgZGlnZ2luZy4KCkkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzZWFyY2ggZm9yICYjMzQ7cmF2YiYjMzQ7IGluIHRoZSBRRU1VIHNvdXJjZSBvciBkb2N1bWVudGF0aW9uLCBhbmQgSSB3aWxsIGNoZWNrIHRvIHNlZSBpZiBgcmF2YmAgaXMgcHVyZWx5IGFuIFNvQyBwbGF0Zm9ybSBkcml2ZXIuCgpJJiMzOTtsbCBhbHNvIGhhdmUgYSBsb29rIGF0IGhvdyBgcmF2YmAgaXMgcHJvYmVkIGFuZCBpbml0aWFsaXplZCB0byBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgaXQgZGVwZW5kcyBvbiB0aGUgaGFyZHdhcmUuIEkmIzM5O2xsIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jYCBmb3Igc29tZSBjbHVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfcGxhdGZvcm1fZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jPTMzOTU9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcmF2Yl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYy0zNDA0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYzozNDA1Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIocmF2Yl9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYy0zNDA2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTI2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgcmF2Yl9kcml2ZXJgJiMzOTtzIGBvZl9tYXRjaF90YWJsZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgcmF2Yl9kcml2ZXJgIGNvZGUgYWdhaW4uIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggaXRzIGBvZl9tYXRjaF90YWJsZWAuIFRoaXMgdGFibGUsIG5hdHVyYWxseSwgaXMgY3JpdGljYWwgZm9yIGRldmljZSB0cmVlIGJpbmRpbmcuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0JiMzOTtzIHN0cnVjdHVyZWQsIHdoYXQgcHJvcGVydGllcyBhcmUgYmVpbmcgbWF0Y2hlZCwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipQcm9wZXJ0eSBNYXRjaGluZzoqKiBXaGF0IHNwZWNpZmljIHByb3BlcnRpZXMgaW4gdGhlIGRldmljZSB0cmVlIGlzIHRoaXMgZHJpdmVyIGNvbmZpZ3VyZWQgdG8gaGFuZGxlPyBBcmUgdGhleSB1c2luZyB0aGUgc3RhbmRhcmQgcHJvcGVydGllcywgb3IgaGF2ZSB0aGV5IGludHJvZHVjZWQgYW55IGN1c3RvbSBvbmVzPyBBcmUgdGhleSB1c2luZyBjb21wYXRpYmxlIHN0cmluZ3MgYXBwcm9wcmlhdGVseT8KKiAgICoqT3JkZXIgYW5kIFNwZWNpZmljaXR5OioqIEhvdyBhcmUgdGhlIGVudHJpZXMgb3JkZXJlZD8gQXJlIHRoZXkgcHJpb3JpdGl6ZWQgbG9naWNhbGx5IGJhc2VkIG9uIGRldmljZSB2YXJpYXRpb25zLCBvciBhcmUgdGhlcmUgYW55IGFtYmlndW91cyBtYXRjaGVzIHRoYXQgbWlnaHQgY2F1c2UgcHJvYmxlbXM/IElzIGl0IGJyb2FkIG9yIHNwZWNpZmljPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgZGV2aWNlcyB0byBtYXRjaCBpbiB0aGUgd3Jvbmcgb3JkZXI/CiogICAqKlZlcnNpb24gQ29uc2lkZXJhdGlvbnM6KiogQXJlIHRoZXJlIGFueSB2ZXJzaW9uIGNvbnNpZGVyYXRpb25zIHRvIHRha2UgaW50byBhY2NvdW50PyBPbGRlciBvciBuZXdlciBkZXZpY2UgdHJlZXMgdGhhdCB3aWxsIGJlIGhhbmRsZWQgYnkgdGhpcyBkcml2ZXI/CiogICAqKk92ZXJhbGwgU3RyYXRlZ3k6KiogSXMgdGhlIGRyaXZlciBpbXBsZW1lbnRpbmcgYW4gZWZmZWN0aXZlIGFwcHJvYWNoIHRvIG1hbmFnaW5nIGRpZmZlcmVudCBoYXJkd2FyZSByZXZpc2lvbnMgb3IgY29uZmlndXJhdGlvbnM/IElzIGl0IG92ZXJseSBjb21wbGV4LCBvciBpcyBpdCBzaW1wbGUsIGVsZWdhbnQsIGFuZCBlYXN5IHRvIG1haW50YWluPwoqICAgKipFcnJvciBQcmV2ZW50aW9uOioqIEZpbmFsbHksIEkmIzM5O20gY2hlY2tpbmcgZm9yIGFyZWFzIHRoYXQgY291bGQgYmUgdGlnaHRlbmVkIHVwIHRvIHByZXZlbnQgZXJyb3JzLiBEb2VzIGl0IHNlZW0gbGlrZSBhbiBhcHByb3ByaWF0ZSBhbW91bnQgb2YgY2hlY2tzIGFuZCBiYWxhbmNlcyBhcmUgaW4gcGxhY2U/CgpVbmRlcnN0YW5kaW5nIHRoaXMgdGFibGUgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gZGVidWdnaW5nIHRoZSBkcml2ZXIgc28gSSYjMzk7bGwgYmUgcmVhbGx5IGZvY3VzaW5nIG9uIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzNzA6XHR9XG4zMzcxOlx0XG4zMzcyOlx0c3RhdGljIGludCByYXZiX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4zMzczOlx0e1xuMzM3NDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbjMzNzU6XHRcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbjMzNzY6XHRcbjMzNzc6XHRcdGNsa19kaXNhYmxlKHByaXYtXHUwMDNlcmVmY2xrKTtcbjMzNzg6XHRcbjMzNzk6XHRcdHJldHVybiAwO1xuMzM4MDpcdH1cbjMzODE6XHRcbjMzODI6XHRzdGF0aWMgaW50IHJhdmJfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuMzM4MzpcdHtcbjMzODQ6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4zMzg1Olx0XHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4zMzg2Olx0XG4zMzg3Olx0XHRyZXR1cm4gY2xrX2VuYWJsZShwcml2LVx1MDAzZXJlZmNsayk7XG4zMzg4Olx0fVxuMzM4OTpcdFxuMzM5MDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyByYXZiX2Rldl9wbV9vcHMgPSB7XG4zMzkxOlx0XHRTWVNURU1fU0xFRVBfUE1fT1BTKHJhdmJfc3VzcGVuZCwgcmF2Yl9yZXN1bWUpXG4zMzkyOlx0XHRSVU5USU1FX1BNX09QUyhyYXZiX3J1bnRpbWVfc3VzcGVuZCwgcmF2Yl9ydW50aW1lX3Jlc3VtZSwgTlVMTClcbjMzOTM6XHR9O1xuMzM5NDpcdFxuMzM5NTpcdHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJhdmJfZHJpdmVyID0ge1xuMzM5NjpcdFx0LnByb2JlXHRcdD0gcmF2Yl9wcm9iZSxcbjMzOTc6XHRcdC5yZW1vdmVcdFx0PSByYXZiX3JlbW92ZSxcbjMzOTg6XHRcdC5kcml2ZXIgPSB7XG4zMzk5Olx0XHRcdC5uYW1lXHQ9IFwmIzM0O3JhdmJcJiMzNDssXG4zNDAwOlx0XHRcdC5wbVx0PSBwbV9wdHIoXHUwMDI2cmF2Yl9kZXZfcG1fb3BzKSxcbjM0MDE6XHRcdFx0Lm9mX21hdGNoX3RhYmxlID0gcmF2Yl9tYXRjaF90YWJsZSxcbjM0MDI6XHRcdH0sXG4zNDAzOlx0fTtcbjM0MDQ6XHRcbjM0MDU6XHRtb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHJhdmJfZHJpdmVyKTtcbjM0MDY6XHRcbjM0MDc6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O01pdHN1aGlybyBLaW11cmEsIE1hc2FydSBOYWdhaVwmIzM0Oyk7XG4zNDA4Olx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1JlbmVzYXMgRXRoZXJuZXQgQVZCIGRyaXZlclwmIzM0Oyk7XG4zNDA5Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMIHYyXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NDMKCQkJCQkJCW91dHB1dDogOTcKCQkJCQkJCXRob3VnaHRzOiA0MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBOb3QgRnV6emFibGUgaW4gU3RhbmRhcmQgRW52aXJvbm1lbnRzKioKCk9rYXksIHNvIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIHRoaXMgcGF0Y2ggdGFyZ2V0cyB0aGUgYHJhdmJgIGRyaXZlciwgd2hpY2ggaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBSZW5lc2FzIEV0aGVybmV0IEFWQiBjb250cm9sbGVycyBmb3VuZCBvbiB0aGVpciBSLUNhciBhbmQgUlovRzJML1YyTSBzZXJpZXMgU29Dcy4gVGhlIGtleSBoZXJlIGlzIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmN5LiBJdCBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IHRoaXMgZHJpdmVyIHJlbGllcyBvbiB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGRldmljZSB0cmVlIG5vZGVzIHByZXNlbnQgb25seSBvbiBSZW5lc2FzIFNvQyBib2FyZHMuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBRRU1VLCBldmVuIGluIHZpcnR1YWxpemVkIHNldHVwcyBsaWtlIEdDRSBvciBzdGFuZGFyZCBRRU1VIGluc3RhbmNlcyAoeDg2IG9yIGFybTY0IHZpcnQgbWFjaGluZXMpLCBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZXNlIFJlbmVzYXMgRXRoZXJuZXQgQVZCIGNvbnRyb2xsZXJzLiBUaGlzIG1lYW5zIHRoYXQgZXZlbiBpZiBJIHRyaWVkIHJ1bm5pbmcgZnV6emluZyB0b29scyBsaWtlIHN5emthbGxlciBpbiB0aGVzZSB2aXJ0dWFsIGVudmlyb25tZW50cywgdGhlIGByYXZiYCBkcml2ZXIgd291bGRuJiMzOTt0IGJlIGFjY2Vzc2libGUsIHByb2JlZCwgb3IgZXZlbiBleGVjdXRlZCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGlzIHNpbXBseSB1bmF2YWlsYWJsZS4KCkxldCBtZSBicmVhayBkb3duIHRoZSBzcGVjaWZpY3M6IHRoZSBwYXRjaCB0b3VjaGVzIHRoZSBEVCBiaW5kaW5nIGRvY3VtZW50LCBhbmQgc291cmNlIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIGByYXZiYCBkcml2ZXIuIFNwZWNpZmljYWxseSwgYHJhdmIuaGAsIGByYXZiX21haW4uY2AsIGFuZCBgcmF2Yl9wdHAuY2AgYXJlIGFsbCBpbXBsaWNhdGVkLiBJdCYjMzk7cyBmb2N1c2VkIG9uIHRoZSBSZW5lc2FzIEV0aGVybmV0IEFWQiBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfKmAgc3Vic3lzdGVtLiBUaGUgcmVsZXZhbnQgaGFyZHdhcmUgaXMgY2xlYXJseSBkZWZpbmVkOiBSZW5lc2FzIFItQ2FyIEdlbjIvR2VuMy9HZW40IGFuZCBSWi9WMk0gU29Dcy4KClRoZSBmdW5kYW1lbnRhbCBpc3N1ZSBpcyB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoZSBjb2RlLiBCZWNhdXNlIGl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyIGRlcGVuZGVudCBvbiBzcGVjaWZpYyBSZW5lc2FzIGhhcmR3YXJlIGFuZCBpdHMgRFQsIGl0JiMzOTtzIHVucmVhY2hhYmxlIGluIHRoZSBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMgY29tbW9ubHkgdXNlZCBmb3IgZnV6emluZy4gVGh1cywgSSBhbSBjb25maWRlbnQgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4KCk5vdywgSSYjMzk7bSBjaGVja2luZyB0aGUgcmVxdWlyZW1lbnRzIGZvciBgc2V0LXJlc3VsdHNgLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBhcmUgaXJyZWxldmFudCBpbiB0aGlzIGNhc2UuIE15IHJlYXNvbmluZyBpcyBjb25jaXNlLCBleHBsYWluaW5nIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmN5IGFuZCBpbmFjY2Vzc2liaWxpdHkgaW4gdGhlIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBBbmQgZmluYWxseSwgYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgZmFsc2VgLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIFJlbmVzYXMgRXRoZXJuZXQgQVZCIChSQVZCKSBwbGF0Zm9ybSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl8qKSwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gUmVuZXNhcyBSLUNhciBhbmQgUlogU29DcyBhbmQgcmVxdWlyZXMgcGh5c2ljYWwgU29DIGhhcmR3YXJlIG5vdCBhdmFpbGFibGUgb3IgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBjaGFuZ2VzIG1vZGlmeSB0aGUgUmVuZXNhcyBFdGhlcm5ldCBBVkIgKFJBVkIpIHBsYXRmb3JtIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiXyopLCB3aGljaCBpcyBzcGVjaWZpYyB0byBSZW5lc2FzIFItQ2FyIGFuZCBSWiBTb0NzIGFuZCByZXF1aXJlcyBwaHlzaWNhbCBTb0MgaGFyZHdhcmUgbm90IGF2YWlsYWJsZSBvciBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyNjoxNC41Nzg3OTQwNTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTIxMTUwMDYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBSZW5lc2FzIEV0aGVybmV0IEFWQiAoUkFWQikgcGxhdGZvcm0gZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfKiksIHdoaWNoIGlzIHNwZWNpZmljIHRvIFJlbmVzYXMgUi1DYXIgYW5kIFJaIFNvQ3MgYW5kIHJlcXVpcmVzIHBoeXNpY2FsIFNvQyBoYXJkd2FyZSBub3QgYXZhaWxhYmxlIG9yIGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjY6MTQuNTc4ODAyNjMzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTM5OTc1NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1YWFlYWViMDc2NGM2Nzc4ODIzYWQyM2MzZDNiZmI0NjYyMmZjOGIwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMDE6MjY6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMsZXRoZXJhdmIueWFtbFxcbmluZGV4IDFlMDBlZjViM2FjZGEuLmZhZDAwMjQ5MjQyMWEgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMsZXRoZXJhdmIueWFtbFxcbkBAIC05Nyw2ICs5Nyw4IEBAIHByb3BlcnRpZXM6XFxuIFxcbiAgIHBoeS1oYW5kbGU6IHRydWVcXG4gXFxuKyAgcHRwLXRpbWVyOiB0cnVlXFxuK1xcbiAgICcjYWRkcmVzcy1jZWxscyc6XFxuICAgICBkZXNjcmlwdGlvbjogTnVtYmVyIG9mIGFkZHJlc3MgY2VsbHMgZm9yIHRoZSBNRElPIGJ1cy5cXG4gICAgIGNvbnN0OiAxXFxuQEAgLTMwNSw2ICszMDcsMTUgQEAgYWxsT2Y6XFxuICAgICAgICAgICAgIGl0ZW1zOlxcbiAgICAgICAgICAgICAgIC0gY29uc3Q6IGZja1xcbiAgICAgICAgICAgICAgIC0gY29uc3Q6IHJlZmNsa1xcbisgIC0gaWY6XFxuKyAgICAgIG5vdDpcXG4rICAgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICAgICAgY29udGFpbnM6XFxuKyAgICAgICAgICAgICAgY29uc3Q6IHJlbmVzYXMsZXRoZXJhdmItcmNhci1nZW40XFxuKyAgICB0aGVuOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIHB0cC10aW1lcjogZmFsc2VcXG4gXFxuIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaFxcbmluZGV4IDNlZTRjNjEwODE4OTAuLjVkMzViNDBkN2M1ODQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaFxcbkBAIC0yNDksNiArMjQ5LDggQEAgZW51bSBBUFNSX0JJVCB7XFxuIFxcdEFQU1JfUkRNXFx0PSAweDAwMDAyMDAwLFxcbiBcXHRBUFNSX1RETVxcdD0gMHgwMDAwNDAwMCxcXG4gXFx0QVBTUl9NSUlTRUxFQ1RcXHQ9IDB4MDEwMDAwMDAsXFx0LyogUi1DYXIgVjRNIG9ubHkgKi9cXG4rXFx0QVBTUl9HUFRQVElNRVJfU09VUkNFID0gQklUKDI1KSwgLyogR2VuNCAqL1xcbitcXHRBUFNSX0dQVFBDTE9DS1xcdD0gQklUKDI5KSxcXHQvKiBHZW40ICovXFxuIH07XFxuIFxcbiAvKiBSQ1IgKi9cXG5AQCAtMTAyOCwxMyArMTAzMCwzNyBAQCBzdHJ1Y3QgcmF2Yl9wdHBfcGVyb3V0IHtcXG4gc3RydWN0IHJhdmJfcHRwIHtcXG4gXFx0c3RydWN0IHB0cF9jbG9jayAqY2xvY2s7XFxuIFxcdHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBpbmZvO1xcbi1cXHRpbnQgcGhjX2luZGV4O1xcbiBcXHR1MzIgZGVmYXVsdF9hZGRlbmQ7XFxuIFxcdHUzMiBjdXJyZW50X2FkZGVuZDtcXG4gXFx0aW50IGV4dHRzW05fRVhUX1RTXTtcXG4gXFx0c3RydWN0IHJhdmJfcHRwX3Blcm91dCBwZXJvdXRbTl9QRVJfT1VUXTtcXG4gfTtcXG4gXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gLSBQbGF0Zm9ybSBzcGVjaWZpYyBnUFRQIGJlaGF2aW9yXFxuKyAqXFxuKyAqIEVhY2ggZ2VuZXJhdGlvbiBvZiBSQVZCIGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IGJlaGF2aW9ycyB3aGVuIGludGVyYWN0aW5nXFxuKyAqIHdpdGggdGhlIGdQVFAgY2xvY2suIFRoaXMgc3RydWN0IHByb3ZpZGVzIHRoZSBjYWxsYmFja3MgdG8gYmUgY2FsbGVkIGF0XFxuKyAqIGNyaXRpY2FsIHBvaW50cyBpbiB0aGUgUkFWQiBkcml2ZXIuXFxuKyAqXFxuKyAqIEBwcm9iZTpcXHRcXHRQcm9iZSB0aGUgZ1BUUCBjbG9ja1xcbisgKiBAY2xvY2tfaW5kZXg6XFx0R2V0IHRoZSBQVFAgY2xvY2sgaW5kZXgsIGlmIGFueVxcbisgKiBAc2V0X2NvbmZpZ19tb2RlOlxcdEVudGVyIGNvbmZpZyBtb2RlXFxuKyAqIEBkbWFjX3N0YXJ0OlxcdFxcdENhbGxlZCB3aGVuIHRoZSBETUFDIHN0YXJ0c1xcbisgKiBAZG1hY19zdG9wOlxcdFxcdENhbGxlZCB3aGVuIHRoZSBETUFDIHN0b3BzXFxuKyAqIEBuZGV2X29wZW46XFx0XFx0Q2FsbGVkIHdoZW4gdGhlIG5kZXYgaXMgb3BlbmVkXFxuKyAqIEBuZGV2X2Nsb3NlOlxcdFxcdENhbGxlZCB3aGVuIHRoZSBuZGV2IGlzIGNsb3NlZFxcbisgKi9cXG4rc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHtcXG4rXFx0aW50ICgqcHJvYmUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4rXFx0aW50ICgqY2xvY2tfaW5kZXgpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4rXFx0aW50ICgqc2V0X2NvbmZpZ19tb2RlKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XFxuK1xcdGludCAoKmRtYWNfc3RhcnQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4rXFx0dm9pZCAoKmRtYWNfc3RvcCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbitcXHRpbnQgKCpuZGV2X29wZW4pKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4rXFx0dm9pZCAoKm5kZXZfY2xvc2UpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4rfTtcXG4rXFxuIHN0cnVjdCByYXZiX2h3X2luZm8ge1xcbiBcXHRpbnQgKCpyZWNlaXZlKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IGJ1ZGdldCwgaW50IHEpO1xcbiBcXHR2b2lkICgqc2V0X3JhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG5AQCAtMTA1Myw2ICsxMDc5LDcgQEAgc3RydWN0IHJhdmJfaHdfaW5mbyB7XFxuIFxcdHUzMiByeF9idWZmZXJfc2l6ZTtcXG4gXFx0dTMyIHJ4X2Rlc2Nfc2l6ZTtcXG4gXFx0dTMyIGRiYXRfZW50cnlfbnVtO1xcbitcXHRjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gKnB0cDsgLyogQ2FsbGJhY2tzIHRvIGhhbmRsZSBnUFRQIGludGVyYWN0aW9ucy4gKi9cXG4gXFx0dW5zaWduZWQgYWxpZ25lZF90eDogMTtcXG4gXFx0dW5zaWduZWQgY29hbGVzY2VfaXJxczoxO1xcdC8qIE5lZWRzIHNvZnR3YXJlIElSUSBjb2FsZXNjaW5nICovXFxuIFxcbkBAIC0xMDYzLDkgKzEwOTAsNiBAQCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHtcXG4gXFx0dW5zaWduZWQgbXVsdGlfaXJxczoxO1xcdFxcdC8qIEFWQi1ETUFDIGFuZCBFLU1BQyBoYXMgbXVsdGlwbGUgaXJxcyAqL1xcbiBcXHR1bnNpZ25lZCBpcnFfZW5fZGlzOjE7XFx0XFx0LyogSGFzIHNlcGFyYXRlIGlycSBlbmFibGUgYW5kIGRpc2FibGUgcmVncyAqL1xcbiBcXHR1bnNpZ25lZCBlcnJfbWdtdF9pcnFzOjE7XFx0LyogTGluZTEgKEVycikgYW5kIExpbmUyIChNZ210KSBpcnFzIGFyZSBzZXBhcmF0ZSAqL1xcbi1cXHR1bnNpZ25lZCBncHRwOjE7XFx0XFx0LyogQVZCLURNQUMgaGFzIGdQVFAgc3VwcG9ydCAqL1xcbi1cXHR1bnNpZ25lZCBjY2NfZ2FjOjE7XFx0XFx0LyogQVZCLURNQUMgaGFzIGdQVFAgc3VwcG9ydCBhY3RpdmUgaW4gY29uZmlnIG1vZGUgKi9cXG4tXFx0dW5zaWduZWQgZ3B0cF9yZWZfY2xrOjE7XFx0LyogZ1BUUCBoYXMgc2VwYXJhdGUgcmVmZXJlbmNlIGNsb2NrICovXFxuIFxcdHVuc2lnbmVkIG5jX3F1ZXVlczoxO1xcdFxcdC8qIEFWQi1ETUFDIGhhcyBSWCBhbmQgVFggTkMgcXVldWVzICovXFxuIFxcdHVuc2lnbmVkIG1hZ2ljX3BrdDoxO1xcdFxcdC8qIEUtTUFDIHN1cHBvcnRzIG1hZ2ljIHBhY2tldCBkZXRlY3Rpb24gKi9cXG4gXFx0dW5zaWduZWQgaGFsZl9kdXBsZXg6MTtcXHRcXHQvKiBFLU1BQyBzdXBwb3J0cyBoYWxmIGR1cGxleCBtb2RlICovXFxuQEAgLTExMTAsNiArMTEzNCw3IEBAIHN0cnVjdCByYXZiX3ByaXZhdGUge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIHRzX3NrYl9saXN0O1xcbiBcXHR1MzIgdHNfc2tiX3RhZztcXG4gXFx0c3RydWN0IHJhdmJfcHRwIHB0cDtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpvZl9ncHRwO1xcdC8qIFJlZmVyZW5jZSB0byBleHRlcm5hbCBnUFRQIGNsb2NrLCBpZiBhbnkuICovXFxuIFxcdHNwaW5sb2NrX3QgbG9jaztcXHRcXHQvKiBSZWdpc3RlciBhY2Nlc3MgbG9jayAqL1xcbiBcXHR1MzIgY3VyX3J4W05VTV9SWF9RVUVVRV07XFx0LyogQ29uc3VtZXIgcmluZyBpbmRpY2VzICovXFxuIFxcdHUzMiBkaXJ0eV9yeFtOVU1fUlhfUVVFVUVdO1xcdC8qIFByb2R1Y2VyIHJpbmcgaW5kaWNlcyAqL1xcbkBAIC0xMTYzLDcgKzExODgsNyBAQCB2b2lkIHJhdmJfbW9kaWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHJhdmJfcmVnIHJlZywgdTMyIGNsZWFyLFxcbiBpbnQgcmF2Yl93YWl0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHJhdmJfcmVnIHJlZywgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7XFxuIFxcbiB2b2lkIHJhdmJfcHRwX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XFxuLXZvaWQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7XFxuK2ludCByYXZiX3B0cF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4gdm9pZCByYXZiX3B0cF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4gXFxuICNlbmRpZlxcdC8qICNpZm5kZWYgX19SQVZCX0hfXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uY1xcbmluZGV4IGVhMWM3ZTUzNjc5MWUuLjY2YzljZDE1YTE5ZTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmNcXG5AQCAtNzA3LDcgKzcwNywxNSBAQCBzdGF0aWMgaW50IHJhdmJfZG1hY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbiBcXHQvKiBTZXR0aW5nIHRoZSBjb250cm9sIHdpbGwgc3RhcnQgdGhlIEFWQi1ETUFDIHByb2Nlc3MuICovXFxuLVxcdHJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19PUEVSQVRJT04pO1xcbitcXHRlcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX09QRVJBVElPTik7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0LyogSW5pdGlhbGlzZSBQVFAgQ2xvY2sgZHJpdmVyICovXFxuK1xcdGlmIChpbmZvLVxcdTAwM2VwdHAgXFx1MDAyNlxcdTAwMjYgaW5mby1cXHUwMDNlcHRwLVxcdTAwM2VkbWFjX3N0YXJ0KVxcbitcXHRcXHRyZXR1cm4gaW5mby1cXHUwMDNlcHRwLVxcdTAwM2VkbWFjX3N0YXJ0KG5kZXYpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJhdmJfZ2V0X3R4X3RzdGFtcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG5AQCAtMTExNSw2ICsxMTIzLDEwIEBAIHN0YXRpYyBpbnQgcmF2Yl9zdG9wX2RtYShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0XFx0XFx0bmV0ZGV2X2VycihuZGV2LCBcXFwiZmFpbGVkIHRvIHN0b3AgQVhJIEJVU1xcXFxuXFxcIik7XFxuIFxcdH1cXG4gXFxuK1xcdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xcbitcXHRpZiAoaW5mby1cXHUwMDNlcHRwIFxcdTAwMjZcXHUwMDI2IGluZm8tXFx1MDAzZXB0cC1cXHUwMDNlZG1hY19zdG9wKVxcbitcXHRcXHRpbmZvLVxcdTAwM2VwdHAtXFx1MDAzZWRtYWNfc3RvcChuZGV2KTtcXG4rXFxuIFxcdC8qIFN0b3AgQVZCLURNQUMgcHJvY2VzcyAqL1xcbiBcXHRyZXR1cm4gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTtcXG4gfVxcbkBAIC0xNzE5LDkgKzE3MzEsNyBAQCBzdGF0aWMgaW50IHJhdmJfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4gXFxuIFxcdGlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7XFxuIFxcdFxcdG5ldGlmX2RldmljZV9kZXRhY2gobmRldik7XFxuLVxcdFxcdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xcbi1cXHRcXHRpZiAoaW5mby1cXHUwMDNlZ3B0cClcXG4tXFx0XFx0XFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcXG4rXFxuIFxcdFxcdC8qIFdhaXQgZm9yIERNQSBzdG9wcGluZyAqL1xcbiBcXHRcXHRlcnJvciA9IHJhdmJfc3RvcF9kbWEobmRldik7XFxuIFxcdFxcdGlmIChlcnJvcikge1xcbkBAIC0xNzUyLDEwICsxNzYyLDYgQEAgc3RhdGljIGludCByYXZiX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcbiBcXHRcXHRyYXZiX2VtYWNfaW5pdChuZGV2KTtcXG4gXFxuLVxcdFxcdC8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqL1xcbi1cXHRcXHRpZiAoaW5mby1cXHUwMDNlZ3B0cClcXG4tXFx0XFx0XFx0cmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LVxcdTAwM2VwZGV2KTtcXG4tXFxuIFxcdFxcdG5ldGlmX2RldmljZV9hdHRhY2gobmRldik7XFxuIFxcdH1cXG4gXFxuQEAgLTE3NjcsOCArMTc3MywxMyBAQCBzdGF0aWMgaW50IHJhdmJfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIHtcXG4gXFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbiBcXHRjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvICpod19pbmZvID0gcHJpdi1cXHUwMDNlaW5mbztcXG4rXFx0aW50IGluZGV4ID0gLTE7XFxuK1xcbitcXHRpZiAoaHdfaW5mby1cXHUwMDNlcHRwIFxcdTAwMjZcXHUwMDI2IGh3X2luZm8tXFx1MDAzZXB0cC1cXHUwMDNlY2xvY2tfaW5kZXgpXFxuK1xcdFxcdGluZGV4ID0gaHdfaW5mby1cXHUwMDNlcHRwLVxcdTAwM2VjbG9ja19pbmRleChuZGV2KTtcXG4gXFxuLVxcdGlmIChod19pbmZvLVxcdTAwM2VncHRwIHx8IGh3X2luZm8tXFx1MDAzZWNjY19nYWMpIHtcXG4rXFx0LyogT25seSBhZHZlcnRpc2UgcHRwIGNsb2NrIGlmIHByZXNlbnQuICovXFxuK1xcdGlmIChpbmRleCBcXHUwMDNlPSAwKSB7XFxuIFxcdFxcdGluZm8tXFx1MDAzZXNvX3RpbWVzdGFtcGluZyA9XFxuIFxcdFxcdFxcdFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUgfFxcbiBcXHRcXHRcXHRTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFIHxcXG5AQCAtMTc3OSw3ICsxNzkwLDcgQEAgc3RhdGljIGludCByYXZiX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHRcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBIV1RTVEFNUF9GSUxURVJfTk9ORSkgfFxcbiBcXHRcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UKSB8XFxuIFxcdFxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEhXVFNUQU1QX0ZJTFRFUl9BTEwpO1xcbi1cXHRcXHRpbmZvLVxcdTAwM2VwaGNfaW5kZXggPSBSRUFEX09OQ0UocHJpdi1cXHUwMDNlcHRwLnBoY19pbmRleCk7XFxuK1xcdFxcdGluZm8tXFx1MDAzZXBoY19pbmRleCA9IGluZGV4O1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTgyNiw1NSArMTgzNywyNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJhdmJfZXRodG9vbF9vcHMgPSB7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IHJhdmJfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi17XFxuLVxcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4tXFx0Y29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyAqaW5mbyA9IHByaXYtXFx1MDAzZWluZm87XFxuLVxcdGludCBlcnJvcjtcXG4tXFxuLVxcdGlmIChpbmZvLVxcdTAwM2VncHRwKSB7XFxuLVxcdFxcdGVycm9yID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTtcXG4tXFx0XFx0aWYgKGVycm9yKVxcbi1cXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuLVxcdFxcdC8qIFNldCBDU0VMIHZhbHVlICovXFxuLVxcdFxcdHJhdmJfbW9kaWZ5KG5kZXYsIENDQywgQ0NDX0NTRUwsIENDQ19DU0VMX0hQQik7XFxuLVxcdH0gZWxzZSBpZiAoaW5mby1cXHUwMDNlY2NjX2dhYykge1xcbi1cXHRcXHRlcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyB8IENDQ19HQUMgfCBDQ0NfQ1NFTF9IUEIpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRlcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBlcnJvcjtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgcmF2Yl9zZXRfZ3RpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4gXFx0Y29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyAqaW5mbyA9IHByaXYtXFx1MDAzZWluZm87XFxuIFxcbi1cXHRpZiAoIShpbmZvLVxcdTAwM2VncHRwIHx8IGluZm8tXFx1MDAzZWNjY19nYWMpKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdGlmIChpbmZvLVxcdTAwM2VwdHAgXFx1MDAyNlxcdTAwMjYgaW5mby1cXHUwMDNlcHRwLVxcdTAwM2VzZXRfY29uZmlnX21vZGUpXFxuK1xcdFxcdHJldHVybiBpbmZvLVxcdTAwM2VwdHAtXFx1MDAzZXNldF9jb25maWdfbW9kZShuZGV2KTtcXG4gXFxuLVxcdHJhdmJfd3JpdGUobmRldiwgcHJpdi1cXHUwMDNlZ3RpX3RpdiwgR1RJKTtcXG4tXFxuLVxcdC8qIFJlcXVlc3QgR1RJIGxvYWRpbmcgKi9cXG4tXFx0cmF2Yl9tb2RpZnkobmRldiwgR0NDUiwgR0NDUl9MVEksIEdDQ1JfTFRJKTtcXG4rXFx0cmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcmF2Yl9jb21wdXRlX2d0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4rc3RhdGljIGludCByYXZiX2NvbXB1dGVfZ3RpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2xrICpjbGspXFxuIHtcXG4gXFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbi1cXHRjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvICppbmZvID0gcHJpdi1cXHUwMDNlaW5mbztcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gbmRldi1cXHUwMDNlZGV2LnBhcmVudDtcXG4gXFx0dW5zaWduZWQgbG9uZyByYXRlO1xcbiBcXHR1NjQgaW5jO1xcbiBcXG4tXFx0aWYgKCEoaW5mby1cXHUwMDNlZ3B0cCB8fCBpbmZvLVxcdTAwM2VjY2NfZ2FjKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRpZiAoaW5mby1cXHUwMDNlZ3B0cF9yZWZfY2xrKVxcbi1cXHRcXHRyYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXFx1MDAzZWdwdHBfY2xrKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRyYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXFx1MDAzZWNsayk7XFxuK1xcdHJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcXG4gXFx0aWYgKCFyYXRlKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuQEAgLTE5NzQsMTEgKzE5NTQsMTIgQEAgc3RhdGljIGludCByYXZiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcbiBcXHRyYXZiX2VtYWNfaW5pdChuZGV2KTtcXG4gXFxuLVxcdHJhdmJfc2V0X2d0aShuZGV2KTtcXG4tXFxuIFxcdC8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqL1xcbi1cXHRpZiAoaW5mby1cXHUwMDNlZ3B0cCB8fCBpbmZvLVxcdTAwM2VjY2NfZ2FjKVxcbi1cXHRcXHRyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtXFx1MDAzZXBkZXYpO1xcbitcXHRpZiAoaW5mby1cXHUwMDNlcHRwIFxcdTAwMjZcXHUwMDI2IGluZm8tXFx1MDAzZXB0cC1cXHUwMDNlbmRldl9vcGVuKSB7XFxuK1xcdFxcdGVycm9yID0gaW5mby1cXHUwMDNlcHRwLVxcdTAwM2VuZGV2X29wZW4obmRldik7XFxuK1xcdFxcdGlmIChlcnJvcilcXG4rXFx0XFx0XFx0Z290byBvdXRfcHRwX3N0b3A7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIFBIWSBjb250cm9sIHN0YXJ0ICovXFxuIFxcdGVycm9yID0gcmF2Yl9waHlfc3RhcnQobmRldik7XFxuQEAgLTE5OTAsOSArMTk3MSw2IEBAIHN0YXRpYyBpbnQgcmF2Yl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIG91dF9wdHBfc3RvcDpcXG4tXFx0LyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovXFxuLVxcdGlmIChpbmZvLVxcdTAwM2VncHRwIHx8IGluZm8tXFx1MDAzZWNjY19nYWMpXFxuLVxcdFxcdHJhdmJfcHRwX3N0b3AobmRldik7XFxuIFxcdHJhdmJfc3RvcF9kbWEobmRldik7XFxuIG91dF9zZXRfcmVzZXQ6XFxuIFxcdHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX1JFU0VUKTtcXG5AQCAtMjAzNiwxMCArMjAxNCw2IEBAIHN0YXRpYyB2b2lkIHJhdmJfdHhfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFxuIFxcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZGV2KTtcXG4gXFxuLVxcdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xcbi1cXHRpZiAoaW5mby1cXHUwMDNlZ3B0cClcXG4tXFx0XFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcXG4tXFxuIFxcdC8qIFdhaXQgZm9yIERNQSBzdG9wcGluZyAqL1xcbiBcXHRpZiAocmF2Yl9zdG9wX2RtYShuZGV2KSkge1xcbiBcXHRcXHQvKiBJZiByYXZiX3N0b3BfZG1hKCkgZmFpbHMsIHRoZSBoYXJkd2FyZSBpcyBzdGlsbCBvcGVyYXRpbmdcXG5AQCAtMjA3MiwxMCArMjA0Niw2IEBAIHN0YXRpYyB2b2lkIHJhdmJfdHhfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0cmF2Yl9lbWFjX2luaXQobmRldik7XFxuIFxcbiBvdXQ6XFxuLVxcdC8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqL1xcbi1cXHRpZiAoaW5mby1cXHUwMDNlZ3B0cClcXG4tXFx0XFx0cmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LVxcdTAwM2VwZGV2KTtcXG4tXFxuIFxcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmRldik7XFxuIFxcbiBvdXRfdW5sb2NrOlxcbkBAIC0yMjA4LDcgKzIxNzgsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgcmF2Yl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRkZXNjLVxcdTAwM2VkcHRyID0gY3B1X3RvX2xlMzIoZG1hX2FkZHIpO1xcbiBcXG4gXFx0LyogVFggdGltZXN0YW1wIHJlcXVpcmVkICovXFxuLVxcdGlmIChpbmZvLVxcdTAwM2VncHRwIHx8IGluZm8tXFx1MDAzZWNjY19nYWMpIHtcXG4rXFx0aWYgKGluZm8tXFx1MDAzZXB0cCkge1xcbiBcXHRcXHRpZiAocSA9PSBSQVZCX05DKSB7XFxuIFxcdFxcdFxcdHRzX3NrYiA9IGttYWxsb2Nfb2JqKCp0c19za2IsIEdGUF9BVE9NSUMpO1xcbiBcXHRcXHRcXHRpZiAoIXRzX3NrYikge1xcbkBAIC0yMzkwLDggKzIzNjAsOCBAQCBzdGF0aWMgaW50IHJhdmJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdH1cXG4gXFxuIFxcdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xcbi1cXHRpZiAoaW5mby1cXHUwMDNlZ3B0cCB8fCBpbmZvLVxcdTAwM2VjY2NfZ2FjKVxcbi1cXHRcXHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xcbitcXHRpZiAoaW5mby1cXHUwMDNlcHRwIFxcdTAwMjZcXHUwMDI2IGluZm8tXFx1MDAzZXB0cC1cXHUwMDNlbmRldl9jbG9zZSlcXG4rXFx0XFx0aW5mby1cXHUwMDNlcHRwLVxcdTAwM2VuZGV2X2Nsb3NlKG5kZXYpO1xcbiBcXG4gXFx0LyogU2V0IHRoZSBjb25maWcgbW9kZSB0byBzdG9wIHRoZSBBVkItRE1BQydzIHByb2Nlc3NlcyAqL1xcbiBcXHRpZiAocmF2Yl9zdG9wX2RtYShuZGV2KSBcXHUwMDNjIDApXFxuQEAgLTIzOTksNyArMjM2OSw3IEBAIHN0YXRpYyBpbnQgcmF2Yl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0XFx0XFx0ICAgXFxcImRldmljZSB3aWxsIGJlIHN0b3BwZWQgYWZ0ZXIgaC93IHByb2Nlc3NlcyBhcmUgZG9uZS5cXFxcblxcXCIpO1xcbiBcXG4gXFx0LyogQ2xlYXIgdGhlIHRpbWVzdGFtcCBsaXN0ICovXFxuLVxcdGlmIChpbmZvLVxcdTAwM2VncHRwIHx8IGluZm8tXFx1MDAzZWNjY19nYWMpIHtcXG4rXFx0aWYgKGluZm8tXFx1MDAzZXB0cCkge1xcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHNfc2tiLCB0c19za2IyLCBcXHUwMDI2cHJpdi1cXHUwMDNldHNfc2tiX2xpc3QsIGxpc3QpIHtcXG4gXFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnRzX3NrYi1cXHUwMDNlbGlzdCk7XFxuIFxcdFxcdFxcdGtmcmVlX3NrYih0c19za2ItXFx1MDAzZXNrYik7XFxuQEAgLTI2ODEsNiArMjY1MSw0MiBAQCBzdGF0aWMgaW50IHJhdmJfbWRpb19yZWxlYXNlKHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHJhdmJfZ2VuMl9wdHBfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXG4rXFx0cmV0dXJuIHJhdmJfY29tcHV0ZV9ndGkobmRldiwgcHJpdi1cXHUwMDNlY2xrKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbit7XFxuK1xcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFxuK1xcdHJldHVybiBwdHBfY2xvY2tfaW5kZXgocHJpdi1cXHUwMDNlcHRwLmNsb2NrKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIGdQVFAgQ2xvY2sgU2VsZWN0IEhpZ2gtc3BlZWQgcGVyaXBoZXJhbCBidXMgY2xvY2suICovXFxuK1xcdHJhdmJfbW9kaWZ5KG5kZXYsIENDQywgQ0NDX0NTRUwsIENDQ19DU0VMX0hQQik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyByYXZiX2dlbjJfcHRwX2luZm8gPSB7XFxuK1xcdC5wcm9iZSA9IHJhdmJfZ2VuMl9wdHBfcHJvYmUsXFxuK1xcdC5jbG9ja19pbmRleCA9IHJhdmJfZ2VuMl9wdHBfY2xvY2tfaW5kZXgsXFxuK1xcdC5zZXRfY29uZmlnX21vZGUgPSByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZSxcXG4rXFx0LmRtYWNfc3RhcnQgPSByYXZiX3B0cF9pbml0LFxcbitcXHQuZG1hY19zdG9wID0gcmF2Yl9wdHBfc3RvcCxcXG4rfTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuMl9od19pbmZvID0ge1xcbiBcXHQucmVjZWl2ZSA9IHJhdmJfcnhfcmNhcixcXG4gXFx0LnNldF9yYXRlID0gcmF2Yl9zZXRfcmF0ZV9yY2FyLFxcbkBAIC0yNjk5LDEyICsyNzA1LDI2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuMl9od19pbmZvID0ge1xcbiBcXHRcXHRcXHQgIFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSksXFxuIFxcdC5yeF9kZXNjX3NpemUgPSBzaXplb2Yoc3RydWN0IHJhdmJfZXhfcnhfZGVzYyksXFxuIFxcdC5kYmF0X2VudHJ5X251bSA9IDIyLFxcbitcXHQucHRwID0gXFx1MDAyNnJhdmJfZ2VuMl9wdHBfaW5mbyxcXG4gXFx0LmFsaWduZWRfdHggPSAxLFxcbi1cXHQuZ3B0cCA9IDEsXFxuIFxcdC5uY19xdWV1ZXMgPSAxLFxcbiBcXHQubWFnaWNfcGt0ID0gMSxcXG4gfTtcXG4gXFxuK3N0YXRpYyBpbnQgcmF2Yl9nZW4zX3B0cF9zZXRfY29uZmlnX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0LyogRW5hYmxlIGdQVFAgQ2xvY2sgYW5kIFNlbGVjdCBIaWdoLXNwZWVkIHBlcmlwaGVyYWwgYnVzIGNsb2NrLiAqL1xcbitcXHRyZXR1cm4gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHIHwgQ0NDX0dBQyB8IENDQ19DU0VMX0hQQik7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9nZW4zX3B0cF9pbmZvID0ge1xcbitcXHQucHJvYmUgPSByYXZiX2dlbjJfcHRwX3Byb2JlLFxcbitcXHQuY2xvY2tfaW5kZXggPSByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4LFxcbitcXHQuc2V0X2NvbmZpZ19tb2RlID0gcmF2Yl9nZW4zX3B0cF9zZXRfY29uZmlnX21vZGUsXFxuK1xcdC5uZGV2X29wZW4gPSByYXZiX3B0cF9pbml0LFxcbitcXHQubmRldl9jbG9zZSA9IHJhdmJfcHRwX3N0b3AsXFxuK307XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjNfaHdfaW5mbyA9IHtcXG4gXFx0LnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsXFxuIFxcdC5zZXRfcmF0ZSA9IHJhdmJfc2V0X3JhdGVfcmNhcixcXG5AQCAtMjcyMywxNSArMjc0Myw2NiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjNfaHdfaW5mbyA9IHtcXG4gXFx0XFx0XFx0ICBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpLFxcbiBcXHQucnhfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCByYXZiX2V4X3J4X2Rlc2MpLFxcbiBcXHQuZGJhdF9lbnRyeV9udW0gPSAyMixcXG4rXFx0LnB0cCA9IFxcdTAwMjZyYXZiX2dlbjNfcHRwX2luZm8sXFxuIFxcdC5pbnRlcm5hbF9kZWxheSA9IDEsXFxuIFxcdC50eF9jb3VudGVycyA9IDEsXFxuIFxcdC5tdWx0aV9pcnFzID0gMSxcXG4gXFx0LmlycV9lbl9kaXMgPSAxLFxcbi1cXHQuY2NjX2dhYyA9IDEsXFxuIFxcdC5uY19xdWV1ZXMgPSAxLFxcbiBcXHQubWFnaWNfcGt0ID0gMSxcXG4gfTtcXG4gXFxuK3N0YXRpYyBpbnQgcmF2Yl9nZW40X3B0cF9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcbitcXHRwcml2LVxcdTAwM2VvZl9ncHRwID0gb2ZfcGFyc2VfcGhhbmRsZShwcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSwgXFxcInB0cC10aW1lclxcXCIsIDApO1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZW9mX2dwdHApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHByaXYtXFx1MDAzZW9mX2dwdHApKSB7XFxuK1xcdFxcdG9mX25vZGVfcHV0KHByaXYtXFx1MDAzZW9mX2dwdHApO1xcbitcXHRcXHRwcml2LVxcdTAwM2VvZl9ncHRwID0gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmF2Yl9nZW40X3B0cF9jbG9ja19pbmRleChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcbitcXHQvKiBJZiBubyBjbG9jaywgbWltaWMgcHRwX2Nsb2NrX2luZGV4X2J5X29mX25vZGUoKSBmYWlsIGFuZCByZXR1cm4gLTEgKi9cXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VvZl9ncHRwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRyZXR1cm4gcHRwX2Nsb2NrX2luZGV4X2J5X29mX25vZGUocHJpdi1cXHUwMDNlb2ZfZ3B0cCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmF2Yl9nZW40X3B0cF9zZXRfY29uZmlnX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LyogRW5hYmxlIGdQVFAgQ2xvY2sgYW5kIFNlbGVjdCBIaWdoLXNwZWVkIHBlcmlwaGVyYWwgYnVzIGNsb2NrLiAqL1xcbitcXHRyZXQgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcgfCBDQ0NfR0FDIHwgQ0NDX0NTRUxfSFBCKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIFNldCBQVFAgc291cmNlIHRvIEdQVFAgbW9kdWxlLCBvbmx5IG9wdGlvbiBvbiBHZW40LiAqL1xcbitcXHRpZiAocHJpdi1cXHUwMDNlb2ZfZ3B0cClcXG4rXFx0XFx0cmF2Yl9tb2RpZnkobmRldiwgQVBTUiwgQVBTUl9HUFRQVElNRVJfU09VUkNFIHwgQVBTUl9HUFRQQ0xPQ0ssXFxuK1xcdFxcdFxcdCAgICBBUFNSX0dQVFBUSU1FUl9TT1VSQ0UgfCBBUFNSX0dQVFBDTE9DSyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyByYXZiX2dlbjRfcHRwX2luZm8gPSB7XFxuK1xcdC5wcm9iZSA9IHJhdmJfZ2VuNF9wdHBfcHJvYmUsXFxuK1xcdC5jbG9ja19pbmRleCA9IHJhdmJfZ2VuNF9wdHBfY2xvY2tfaW5kZXgsXFxuK1xcdC5zZXRfY29uZmlnX21vZGUgPSByYXZiX2dlbjRfcHRwX3NldF9jb25maWdfbW9kZSxcXG4rfTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuNF9od19pbmZvID0ge1xcbiBcXHQucmVjZWl2ZSA9IHJhdmJfcnhfcmNhcixcXG4gXFx0LnNldF9yYXRlID0gcmF2Yl9zZXRfcmF0ZV9yY2FyLFxcbkBAIC0yNzU0LDExICsyODI1LDMwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuNF9od19pbmZvID0ge1xcbiBcXHQudHhfY291bnRlcnMgPSAxLFxcbiBcXHQubXVsdGlfaXJxcyA9IDEsXFxuIFxcdC5pcnFfZW5fZGlzID0gMSxcXG4tXFx0LmNjY19nYWMgPSAxLFxcbitcXHQucHRwID0gXFx1MDAyNnJhdmJfZ2VuNF9wdHBfaW5mbyxcXG4gXFx0Lm5jX3F1ZXVlcyA9IDEsXFxuIFxcdC5tYWdpY19wa3QgPSAxLFxcbiB9O1xcbiBcXG4rc3RhdGljIGludCByYXZiX3J6djJtX3B0cF9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcbitcXHRwcml2LVxcdTAwM2VncHRwX2NsayA9IGRldm1fY2xrX2dldChcXHUwMDI2cHJpdi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBcXFwiZ3B0cFxcXCIpO1xcbitcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZWdwdHBfY2xrKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cXHUwMDNlZ3B0cF9jbGspO1xcbitcXG4rXFx0cmV0dXJuIHJhdmJfY29tcHV0ZV9ndGkobmRldiwgcHJpdi1cXHUwMDNlZ3B0cF9jbGspO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfcnp2Mm1fcHRwX2luZm8gPSB7XFxuK1xcdC5wcm9iZSA9IHJhdmJfcnp2Mm1fcHRwX3Byb2JlLFxcbitcXHQuY2xvY2tfaW5kZXggPSByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4LFxcbitcXHQuc2V0X2NvbmZpZ19tb2RlID0gcmF2Yl9nZW4yX3B0cF9zZXRfY29uZmlnX21vZGUsXFxuK1xcdC5kbWFjX3N0YXJ0ID0gcmF2Yl9wdHBfaW5pdCxcXG4rXFx0LmRtYWNfc3RvcCA9IHJhdmJfcHRwX3N0b3AsXFxuK307XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX3J6djJtX2h3X2luZm8gPSB7XFxuIFxcdC5yZWNlaXZlID0gcmF2Yl9yeF9yY2FyLFxcbiBcXHQuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsXFxuQEAgLTI3NzksOCArMjg2OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfcnp2Mm1faHdfaW5mbyA9IHtcXG4gXFx0LmRiYXRfZW50cnlfbnVtID0gMjIsXFxuIFxcdC5tdWx0aV9pcnFzID0gMSxcXG4gXFx0LmVycl9tZ210X2lycXMgPSAxLFxcbi1cXHQuZ3B0cCA9IDEsXFxuLVxcdC5ncHRwX3JlZl9jbGsgPSAxLFxcbitcXHQucHRwID0gXFx1MDAyNnJhdmJfcnp2Mm1fcHRwX2luZm8sXFxuIFxcdC5uY19xdWV1ZXMgPSAxLFxcbiBcXHQubWFnaWNfcGt0ID0gMSxcXG4gfTtcXG5AQCAtMjk1NSw3ICszMDQ0LDYgQEAgc3RhdGljIGludCByYXZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdHByaXYtXFx1MDAzZXJzdGMgPSByc3RjO1xcbiBcXHRwcml2LVxcdTAwM2VuZGV2ID0gbmRldjtcXG4gXFx0cHJpdi1cXHUwMDNlcGRldiA9IHBkZXY7XFxuLVxcdHByaXYtXFx1MDAzZXB0cC5waGNfaW5kZXggPSAtMTtcXG4gXFx0cHJpdi1cXHUwMDNlbnVtX3R4X3JpbmdbUkFWQl9CRV0gPSBCRV9UWF9SSU5HX1NJWkU7XFxuIFxcdHByaXYtXFx1MDAzZW51bV9yeF9yaW5nW1JBVkJfQkVdID0gQkVfUlhfUklOR19TSVpFO1xcbiBcXHRpZiAoaW5mby1cXHUwMDNlbmNfcXVldWVzKSB7XFxuQEAgLTI5NzMsMTIgKzMwNjEsMTAgQEAgc3RhdGljIGludCByYXZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdFxcdGdvdG8gb3V0X3Jlc2V0X2Fzc2VydDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGluZm8tXFx1MDAzZWdwdHBfcmVmX2Nsaykge1xcbi1cXHRcXHRwcml2LVxcdTAwM2VncHRwX2NsayA9IGRldm1fY2xrX2dldChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZ3B0cFxcXCIpO1xcbi1cXHRcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZWdwdHBfY2xrKSkge1xcbi1cXHRcXHRcXHRlcnJvciA9IFBUUl9FUlIocHJpdi1cXHUwMDNlZ3B0cF9jbGspO1xcbitcXHRpZiAoaW5mby1cXHUwMDNlcHRwIFxcdTAwMjZcXHUwMDI2IGluZm8tXFx1MDAzZXB0cC1cXHUwMDNlcHJvYmUpIHtcXG4rXFx0XFx0ZXJyb3IgPSBpbmZvLVxcdTAwM2VwdHAtXFx1MDAzZXByb2JlKG5kZXYpO1xcbitcXHRcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X3Jlc2V0X2Fzc2VydDtcXG4tXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRwcml2LVxcdTAwM2VyZWZjbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWwoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcInJlZmNsa1xcXCIpO1xcbkBAIC0zMDMxLDEwICszMTE3LDYgQEAgc3RhdGljIGludCByYXZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdG5kZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2cmF2Yl9uZXRkZXZfb3BzO1xcbiBcXHRuZGV2LVxcdTAwM2VldGh0b29sX29wcyA9IFxcdTAwMjZyYXZiX2V0aHRvb2xfb3BzO1xcbiBcXG4tXFx0ZXJyb3IgPSByYXZiX2NvbXB1dGVfZ3RpKG5kZXYpO1xcbi1cXHRpZiAoZXJyb3IpXFxuLVxcdFxcdGdvdG8gb3V0X3JwbV9wdXQ7XFxuLVxcbiBcXHRyYXZiX3BhcnNlX2RlbGF5X21vZGUobnAsIG5kZXYpO1xcbiBcXG4gXFx0LyogQWxsb2NhdGUgZGVzY3JpcHRvciBiYXNlIGFkZHJlc3MgdGFibGUgKi9cXG5AQCAtMzE1Nyw2ICszMjM5LDcgQEAgc3RhdGljIHZvaWQgcmF2Yl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0cG1fcnVudGltZV9kaXNhYmxlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbiBcXHRwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKGRldik7XFxuIFxcdGNsa191bnByZXBhcmUocHJpdi1cXHUwMDNlcmVmY2xrKTtcXG4rXFx0b2Zfbm9kZV9wdXQocHJpdi1cXHUwMDNlb2ZfZ3B0cCk7XFxuIFxcdHJlc2V0X2NvbnRyb2xfYXNzZXJ0KHByaXYtXFx1MDAzZXJzdGMpO1xcbiBcXHRmcmVlX25ldGRldihuZGV2KTtcXG4gXFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XFxuQEAgLTMxODIsOSArMzI2NSw2IEBAIHN0YXRpYyBpbnQgcmF2Yl93b2xfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdC8qIEVuYWJsZSBNYWdpY1BhY2tldCAqL1xcbiBcXHRyYXZiX21vZGlmeShuZGV2LCBFQ01SLCBFQ01SX01QREUsIEVDTVJfTVBERSk7XFxuIFxcbi1cXHRpZiAocHJpdi1cXHUwMDNlaW5mby1cXHUwMDNlY2NjX2dhYylcXG4tXFx0XFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcXG4tXFxuIFxcdHJldHVybiBlbmFibGVfaXJxX3dha2UocHJpdi1cXHUwMDNlZW1hY19pcnEpO1xcbiB9XFxuIFxcbkBAIC0zMjA0LDkgKzMyODQsNiBAQCBzdGF0aWMgaW50IHJhdmJfd29sX3Jlc3RvcmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXG4tXFx0aWYgKHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZWNjY19nYWMpXFxuLVxcdFxcdHJhdmJfcHRwX2luaXQobmRldiwgcHJpdi1cXHUwMDNlcGRldik7XFxuLVxcbiBcXHRpZiAoaW5mby1cXHUwMDNlbmNfcXVldWVzKVxcbiBcXHRcXHRuYXBpX2VuYWJsZShcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaVtSQVZCX05DXSk7XFxuIFxcdG5hcGlfZW5hYmxlKFxcdTAwMjZwcml2LVxcdTAwM2VuYXBpW1JBVkJfQkVdKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jXFxuaW5kZXggNDMyMThiYzE1YjE1MS4uMTlkMDM5YjlkMjRhNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfcHRwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfcHRwLmNcXG5AQCAtMzEzLDMxICszMTMsMzkgQEAgdm9pZCByYXZiX3B0cF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdHJhdmJfd3JpdGUobmRldiwgfihnaXMgfCBHSVNfUkVTRVJWRUQpLCBHSVMpO1xcbiB9XFxuIFxcbi12b2lkIHJhdmJfcHRwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuK2ludCByYXZiX3B0cF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4tXFx0c3RydWN0IHB0cF9jbG9jayAqY2xvY2s7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0cHJpdi1cXHUwMDNlcHRwLmluZm8gPSByYXZiX3B0cF9pbmZvO1xcbiBcXG4tXFx0cHJpdi1cXHUwMDNlcHRwLmRlZmF1bHRfYWRkZW5kID0gcmF2Yl9yZWFkKG5kZXYsIEdUSSk7XFxuK1xcdHByaXYtXFx1MDAzZXB0cC5kZWZhdWx0X2FkZGVuZCA9IHByaXYtXFx1MDAzZWd0aV90aXY7XFxuIFxcdHByaXYtXFx1MDAzZXB0cC5jdXJyZW50X2FkZGVuZCA9IHByaXYtXFx1MDAzZXB0cC5kZWZhdWx0X2FkZGVuZDtcXG4gXFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHQvKiBTZXQgZ1BUUCBUaW1lciBJbmNyZW1lbnQgVmFsdWUuICovXFxuK1xcdHJhdmJfd3JpdGUobmRldiwgcHJpdi1cXHUwMDNlcHRwLmRlZmF1bHRfYWRkZW5kLCBHVEkpO1xcbitcXG4rXFx0LyogUmVxdWVzdCBHVEkgbG9hZGluZy4gKi9cXG4rXFx0cmF2Yl9tb2RpZnkobmRldiwgR0NDUiwgR0NDUl9MVEksIEdDQ1JfTFRJKTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIEdJVCBsb2FkaW5nIHRvIGNvbXBsZXRlLiAqL1xcbiBcXHRyYXZiX3dhaXQobmRldiwgR0NDUiwgR0NDUl9UQ1IsIEdDQ1JfVENSX05PUkVRKTtcXG4rXFxuIFxcdHJhdmJfbW9kaWZ5KG5kZXYsIEdDQ1IsIEdDQ1JfVENTUywgR0NDUl9UQ1NTX0FESkdQVFApO1xcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRjbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcXHUwMDI2cHJpdi1cXHUwMDNlcHRwLmluZm8sIFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbi1cXHRpZiAoSVNfRVJSKGNsb2NrKSkge1xcbi1cXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJmYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlcGVcXFxcblxcXCIsIGNsb2NrKTtcXG4tXFx0XFx0Y2xvY2sgPSBOVUxMO1xcbitcXHRwcml2LVxcdTAwM2VwdHAuY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoXFx1MDAyNnByaXYtXFx1MDAzZXB0cC5pbmZvLCBcXHUwMDI2cHJpdi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VwdHAuY2xvY2spKSB7XFxuK1xcdFxcdHJldCA9IFBUUl9FUlIocHJpdi1cXHUwMDNlcHRwLmNsb2NrKTtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlcHRwLmNsb2NrID0gTlVMTDtcXG4rXFx0XFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcXG4gXFx0fVxcbiBcXG4tXFx0V1JJVEVfT05DRShwcml2LVxcdTAwM2VwdHAuY2xvY2ssIGNsb2NrKTtcXG4tXFx0aWYgKGNsb2NrKVxcbi1cXHRcXHRXUklURV9PTkNFKHByaXYtXFx1MDAzZXB0cC5waGNfaW5kZXgsIHB0cF9jbG9ja19pbmRleChjbG9jaykpO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCByYXZiX3B0cF9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbkBAIC0zNjAsMTQgKzM2OCwxMCBAQCBzdGF0aWMgdm9pZCByYXZiX3B0cF9zeW5jX2lycXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIHZvaWQgcmF2Yl9wdHBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuLVxcdHN0cnVjdCBwdHBfY2xvY2sgKmNsb2NrO1xcbi1cXG4tXFx0V1JJVEVfT05DRShwcml2LVxcdTAwM2VwdHAucGhjX2luZGV4LCAtMSk7XFxuLVxcdGNsb2NrID0geGNoZyhcXHUwMDI2cHJpdi1cXHUwMDNlcHRwLmNsb2NrLCBOVUxMKTtcXG4gXFxuIFxcdHJhdmJfcHRwX2Rpc2FibGUobmRldik7XFxuIFxcdHJhdmJfcHRwX3N5bmNfaXJxcyhuZGV2KTtcXG4gXFxuLVxcdGlmIChjbG9jaylcXG4tXFx0XFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIoY2xvY2spO1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcHRwLmNsb2NrKVxcbitcXHRcXHRwdHBfY2xvY2tfdW5yZWdpc3Rlcihwcml2LVxcdTAwM2VwdHAuY2xvY2spO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjI2OjE1LjE5Mzk2Mjk4N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjg1OTYzMTE5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBSZW5lc2FzIEV0aGVybmV0IEFWQiAoUkFWQikgcGxhdGZvcm0gZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfKiksIHdoaWNoIGlzIHNwZWNpZmljIHRvIFJlbmVzYXMgUi1DYXIgYW5kIFJaIFNvQ3MgYW5kIHJlcXVpcmVzIHBoeXNpY2FsIFNvQyBoYXJkd2FyZSBub3QgYXZhaWxhYmxlIG9yIGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWFhZWFlYjA3NjRjNjc3ODgyM2FkMjNjM2QzYmZiNDY2MjJmYzhiMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDE6MjY6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMsZXRoZXJhdmIueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sXG5pbmRleCAxZTAwZWY1YjNhY2RhLi5mYWQwMDI0OTI0MjFhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sXG5AQCAtOTcsNiArOTcsOCBAQCBwcm9wZXJ0aWVzOlxuIFxuICAgcGh5LWhhbmRsZTogdHJ1ZVxuIFxuKyAgcHRwLXRpbWVyOiB0cnVlXG4rXG4gICAnI2FkZHJlc3MtY2VsbHMnOlxuICAgICBkZXNjcmlwdGlvbjogTnVtYmVyIG9mIGFkZHJlc3MgY2VsbHMgZm9yIHRoZSBNRElPIGJ1cy5cbiAgICAgY29uc3Q6IDFcbkBAIC0zMDUsNiArMzA3LDE1IEBAIGFsbE9mOlxuICAgICAgICAgICAgIGl0ZW1zOlxuICAgICAgICAgICAgICAgLSBjb25zdDogZmNrXG4gICAgICAgICAgICAgICAtIGNvbnN0OiByZWZjbGtcbisgIC0gaWY6XG4rICAgICAgbm90OlxuKyAgICAgICAgcHJvcGVydGllczpcbisgICAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgICBjb250YWluczpcbisgICAgICAgICAgICAgIGNvbnN0OiByZW5lc2FzLGV0aGVyYXZiLXJjYXItZ2VuNFxuKyAgICB0aGVuOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBwdHAtdGltZXI6IGZhbHNlXG4gXG4gYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaFxuaW5kZXggM2VlNGM2MTA4MTg5MC4uNWQzNWI0MGQ3YzU4NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaFxuQEAgLTI0OSw2ICsyNDksOCBAQCBlbnVtIEFQU1JfQklUIHtcbiBcdEFQU1JfUkRNXHQ9IDB4MDAwMDIwMDAsXG4gXHRBUFNSX1RETVx0PSAweDAwMDA0MDAwLFxuIFx0QVBTUl9NSUlTRUxFQ1RcdD0gMHgwMTAwMDAwMCxcdC8qIFItQ2FyIFY0TSBvbmx5ICovXG4rXHRBUFNSX0dQVFBUSU1FUl9TT1VSQ0UgPSBCSVQoMjUpLCAvKiBHZW40ICovXG4rXHRBUFNSX0dQVFBDTE9DS1x0PSBCSVQoMjkpLFx0LyogR2VuNCAqL1xuIH07XG4gXG4gLyogUkNSICovXG5AQCAtMTAyOCwxMyArMTAzMCwzNyBAQCBzdHJ1Y3QgcmF2Yl9wdHBfcGVyb3V0IHtcbiBzdHJ1Y3QgcmF2Yl9wdHAge1xuIFx0c3RydWN0IHB0cF9jbG9jayAqY2xvY2s7XG4gXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gaW5mbztcbi1cdGludCBwaGNfaW5kZXg7XG4gXHR1MzIgZGVmYXVsdF9hZGRlbmQ7XG4gXHR1MzIgY3VycmVudF9hZGRlbmQ7XG4gXHRpbnQgZXh0dHNbTl9FWFRfVFNdO1xuIFx0c3RydWN0IHJhdmJfcHRwX3Blcm91dCBwZXJvdXRbTl9QRVJfT1VUXTtcbiB9O1xuIFxuKy8qKlxuKyAqIHN0cnVjdCByYXZiX2dwdHBfaW5mbyAtIFBsYXRmb3JtIHNwZWNpZmljIGdQVFAgYmVoYXZpb3JcbisgKlxuKyAqIEVhY2ggZ2VuZXJhdGlvbiBvZiBSQVZCIGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IGJlaGF2aW9ycyB3aGVuIGludGVyYWN0aW5nXG4rICogd2l0aCB0aGUgZ1BUUCBjbG9jay4gVGhpcyBzdHJ1Y3QgcHJvdmlkZXMgdGhlIGNhbGxiYWNrcyB0byBiZSBjYWxsZWQgYXRcbisgKiBjcml0aWNhbCBwb2ludHMgaW4gdGhlIFJBVkIgZHJpdmVyLlxuKyAqXG4rICogQHByb2JlOlx0XHRQcm9iZSB0aGUgZ1BUUCBjbG9ja1xuKyAqIEBjbG9ja19pbmRleDpcdEdldCB0aGUgUFRQIGNsb2NrIGluZGV4LCBpZiBhbnlcbisgKiBAc2V0X2NvbmZpZ19tb2RlOlx0RW50ZXIgY29uZmlnIG1vZGVcbisgKiBAZG1hY19zdGFydDpcdFx0Q2FsbGVkIHdoZW4gdGhlIERNQUMgc3RhcnRzXG4rICogQGRtYWNfc3RvcDpcdFx0Q2FsbGVkIHdoZW4gdGhlIERNQUMgc3RvcHNcbisgKiBAbmRldl9vcGVuOlx0XHRDYWxsZWQgd2hlbiB0aGUgbmRldiBpcyBvcGVuZWRcbisgKiBAbmRldl9jbG9zZTpcdFx0Q2FsbGVkIHdoZW4gdGhlIG5kZXYgaXMgY2xvc2VkXG4rICovXG4rc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHtcbitcdGludCAoKnByb2JlKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4rXHRpbnQgKCpjbG9ja19pbmRleCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuK1x0aW50ICgqc2V0X2NvbmZpZ19tb2RlKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4rXHRpbnQgKCpkbWFjX3N0YXJ0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4rXHR2b2lkICgqZG1hY19zdG9wKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4rXHRpbnQgKCpuZGV2X29wZW4pKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbitcdHZvaWQgKCpuZGV2X2Nsb3NlKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4rfTtcbitcbiBzdHJ1Y3QgcmF2Yl9od19pbmZvIHtcbiBcdGludCAoKnJlY2VpdmUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgYnVkZ2V0LCBpbnQgcSk7XG4gXHR2b2lkICgqc2V0X3JhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbkBAIC0xMDUzLDYgKzEwNzksNyBAQCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHtcbiBcdHUzMiByeF9idWZmZXJfc2l6ZTtcbiBcdHUzMiByeF9kZXNjX3NpemU7XG4gXHR1MzIgZGJhdF9lbnRyeV9udW07XG4rXHRjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gKnB0cDsgLyogQ2FsbGJhY2tzIHRvIGhhbmRsZSBnUFRQIGludGVyYWN0aW9ucy4gKi9cbiBcdHVuc2lnbmVkIGFsaWduZWRfdHg6IDE7XG4gXHR1bnNpZ25lZCBjb2FsZXNjZV9pcnFzOjE7XHQvKiBOZWVkcyBzb2Z0d2FyZSBJUlEgY29hbGVzY2luZyAqL1xuIFxuQEAgLTEwNjMsOSArMTA5MCw2IEBAIHN0cnVjdCByYXZiX2h3X2luZm8ge1xuIFx0dW5zaWduZWQgbXVsdGlfaXJxczoxO1x0XHQvKiBBVkItRE1BQyBhbmQgRS1NQUMgaGFzIG11bHRpcGxlIGlycXMgKi9cbiBcdHVuc2lnbmVkIGlycV9lbl9kaXM6MTtcdFx0LyogSGFzIHNlcGFyYXRlIGlycSBlbmFibGUgYW5kIGRpc2FibGUgcmVncyAqL1xuIFx0dW5zaWduZWQgZXJyX21nbXRfaXJxczoxO1x0LyogTGluZTEgKEVycikgYW5kIExpbmUyIChNZ210KSBpcnFzIGFyZSBzZXBhcmF0ZSAqL1xuLVx0dW5zaWduZWQgZ3B0cDoxO1x0XHQvKiBBVkItRE1BQyBoYXMgZ1BUUCBzdXBwb3J0ICovXG4tXHR1bnNpZ25lZCBjY2NfZ2FjOjE7XHRcdC8qIEFWQi1ETUFDIGhhcyBnUFRQIHN1cHBvcnQgYWN0aXZlIGluIGNvbmZpZyBtb2RlICovXG4tXHR1bnNpZ25lZCBncHRwX3JlZl9jbGs6MTtcdC8qIGdQVFAgaGFzIHNlcGFyYXRlIHJlZmVyZW5jZSBjbG9jayAqL1xuIFx0dW5zaWduZWQgbmNfcXVldWVzOjE7XHRcdC8qIEFWQi1ETUFDIGhhcyBSWCBhbmQgVFggTkMgcXVldWVzICovXG4gXHR1bnNpZ25lZCBtYWdpY19wa3Q6MTtcdFx0LyogRS1NQUMgc3VwcG9ydHMgbWFnaWMgcGFja2V0IGRldGVjdGlvbiAqL1xuIFx0dW5zaWduZWQgaGFsZl9kdXBsZXg6MTtcdFx0LyogRS1NQUMgc3VwcG9ydHMgaGFsZiBkdXBsZXggbW9kZSAqL1xuQEAgLTExMTAsNiArMTEzNCw3IEBAIHN0cnVjdCByYXZiX3ByaXZhdGUge1xuIFx0c3RydWN0IGxpc3RfaGVhZCB0c19za2JfbGlzdDtcbiBcdHUzMiB0c19za2JfdGFnO1xuIFx0c3RydWN0IHJhdmJfcHRwIHB0cDtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ3B0cDtcdC8qIFJlZmVyZW5jZSB0byBleHRlcm5hbCBnUFRQIGNsb2NrLCBpZiBhbnkuICovXG4gXHRzcGlubG9ja190IGxvY2s7XHRcdC8qIFJlZ2lzdGVyIGFjY2VzcyBsb2NrICovXG4gXHR1MzIgY3VyX3J4W05VTV9SWF9RVUVVRV07XHQvKiBDb25zdW1lciByaW5nIGluZGljZXMgKi9cbiBcdHUzMiBkaXJ0eV9yeFtOVU1fUlhfUVVFVUVdO1x0LyogUHJvZHVjZXIgcmluZyBpbmRpY2VzICovXG5AQCAtMTE2Myw3ICsxMTg4LDcgQEAgdm9pZCByYXZiX21vZGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSByYXZiX3JlZyByZWcsIHUzMiBjbGVhcixcbiBpbnQgcmF2Yl93YWl0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHJhdmJfcmVnIHJlZywgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7XG4gXG4gdm9pZCByYXZiX3B0cF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuLXZvaWQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7XG4raW50IHJhdmJfcHRwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuIHZvaWQgcmF2Yl9wdHBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4gXG4gI2VuZGlmXHQvKiAjaWZuZGVmIF9fUkFWQl9IX18gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uY1xuaW5kZXggZWExYzdlNTM2NzkxZS4uNjZjOWNkMTVhMTllMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmNcbkBAIC03MDcsNyArNzA3LDE1IEBAIHN0YXRpYyBpbnQgcmF2Yl9kbWFjX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbiBcdC8qIFNldHRpbmcgdGhlIGNvbnRyb2wgd2lsbCBzdGFydCB0aGUgQVZCLURNQUMgcHJvY2Vzcy4gKi9cbi1cdHJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19PUEVSQVRJT04pO1xuK1x0ZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19PUEVSQVRJT04pO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHQvKiBJbml0aWFsaXNlIFBUUCBDbG9jayBkcml2ZXIgKi9cbitcdGlmIChpbmZvLVx1MDAzZXB0cCBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2VwdHAtXHUwMDNlZG1hY19zdGFydClcbitcdFx0cmV0dXJuIGluZm8tXHUwMDNlcHRwLVx1MDAzZWRtYWNfc3RhcnQobmRldik7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcmF2Yl9nZXRfdHhfdHN0YW1wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuQEAgLTExMTUsNiArMTEyMywxMCBAQCBzdGF0aWMgaW50IHJhdmJfc3RvcF9kbWEoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRcdFx0bmV0ZGV2X2VycihuZGV2LCBcImZhaWxlZCB0byBzdG9wIEFYSSBCVVNcXG5cIik7XG4gXHR9XG4gXG4rXHQvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi9cbitcdGlmIChpbmZvLVx1MDAzZXB0cCBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2VwdHAtXHUwMDNlZG1hY19zdG9wKVxuK1x0XHRpbmZvLVx1MDAzZXB0cC1cdTAwM2VkbWFjX3N0b3AobmRldik7XG4rXG4gXHQvKiBTdG9wIEFWQi1ETUFDIHByb2Nlc3MgKi9cbiBcdHJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpO1xuIH1cbkBAIC0xNzE5LDkgKzE3MzEsNyBAQCBzdGF0aWMgaW50IHJhdmJfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcbiBcdGlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7XG4gXHRcdG5ldGlmX2RldmljZV9kZXRhY2gobmRldik7XG4tXHRcdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0XHRpZiAoaW5mby1cdTAwM2VncHRwKVxuLVx0XHRcdHJhdmJfcHRwX3N0b3AobmRldik7XG4rXG4gXHRcdC8qIFdhaXQgZm9yIERNQSBzdG9wcGluZyAqL1xuIFx0XHRlcnJvciA9IHJhdmJfc3RvcF9kbWEobmRldik7XG4gXHRcdGlmIChlcnJvcikge1xuQEAgLTE3NTIsMTAgKzE3NjIsNiBAQCBzdGF0aWMgaW50IHJhdmJfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcbiBcdFx0cmF2Yl9lbWFjX2luaXQobmRldik7XG4gXG4tXHRcdC8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0XHRpZiAoaW5mby1cdTAwM2VncHRwKVxuLVx0XHRcdHJhdmJfcHRwX2luaXQobmRldiwgcHJpdi1cdTAwM2VwZGV2KTtcbi1cbiBcdFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTtcbiBcdH1cbiBcbkBAIC0xNzY3LDggKzE3NzMsMTMgQEAgc3RhdGljIGludCByYXZiX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIHtcbiBcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmh3X2luZm8gPSBwcml2LVx1MDAzZWluZm87XG4rXHRpbnQgaW5kZXggPSAtMTtcbitcbitcdGlmIChod19pbmZvLVx1MDAzZXB0cCBcdTAwMjZcdTAwMjYgaHdfaW5mby1cdTAwM2VwdHAtXHUwMDNlY2xvY2tfaW5kZXgpXG4rXHRcdGluZGV4ID0gaHdfaW5mby1cdTAwM2VwdHAtXHUwMDNlY2xvY2tfaW5kZXgobmRldik7XG4gXG4tXHRpZiAoaHdfaW5mby1cdTAwM2VncHRwIHx8IGh3X2luZm8tXHUwMDNlY2NjX2dhYykge1xuK1x0LyogT25seSBhZHZlcnRpc2UgcHRwIGNsb2NrIGlmIHByZXNlbnQuICovXG4rXHRpZiAoaW5kZXggXHUwMDNlPSAwKSB7XG4gXHRcdGluZm8tXHUwMDNlc29fdGltZXN0YW1waW5nID1cbiBcdFx0XHRTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFIHxcbiBcdFx0XHRTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFIHxcbkBAIC0xNzc5LDcgKzE3OTAsNyBAQCBzdGF0aWMgaW50IHJhdmJfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRcdFx0KDEgXHUwMDNjXHUwMDNjIEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB8XG4gXHRcdFx0KDEgXHUwMDNjXHUwMDNjIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQpIHxcbiBcdFx0XHQoMSBcdTAwM2NcdTAwM2MgSFdUU1RBTVBfRklMVEVSX0FMTCk7XG4tXHRcdGluZm8tXHUwMDNlcGhjX2luZGV4ID0gUkVBRF9PTkNFKHByaXYtXHUwMDNlcHRwLnBoY19pbmRleCk7XG4rXHRcdGluZm8tXHUwMDNlcGhjX2luZGV4ID0gaW5kZXg7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0xODI2LDU1ICsxODM3LDI0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcmF2Yl9ldGh0b29sX29wcyA9IHtcbiB9O1xuIFxuIHN0YXRpYyBpbnQgcmF2Yl9zZXRfY29uZmlnX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4te1xuLVx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0Y29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyAqaW5mbyA9IHByaXYtXHUwMDNlaW5mbztcbi1cdGludCBlcnJvcjtcbi1cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHApIHtcbi1cdFx0ZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpO1xuLVx0XHRpZiAoZXJyb3IpXG4tXHRcdFx0cmV0dXJuIGVycm9yO1xuLVx0XHQvKiBTZXQgQ1NFTCB2YWx1ZSAqL1xuLVx0XHRyYXZiX21vZGlmeShuZGV2LCBDQ0MsIENDQ19DU0VMLCBDQ0NfQ1NFTF9IUEIpO1xuLVx0fSBlbHNlIGlmIChpbmZvLVx1MDAzZWNjY19nYWMpIHtcbi1cdFx0ZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcgfCBDQ0NfR0FDIHwgQ0NDX0NTRUxfSFBCKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGVycm9yID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTtcbi1cdH1cbi1cbi1cdHJldHVybiBlcnJvcjtcbi19XG4tXG4tc3RhdGljIHZvaWQgcmF2Yl9zZXRfZ3RpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbiBcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmluZm8gPSBwcml2LVx1MDAzZWluZm87XG4gXG4tXHRpZiAoIShpbmZvLVx1MDAzZWdwdHAgfHwgaW5mby1cdTAwM2VjY2NfZ2FjKSlcbi1cdFx0cmV0dXJuO1xuK1x0aWYgKGluZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXB0cC1cdTAwM2VzZXRfY29uZmlnX21vZGUpXG4rXHRcdHJldHVybiBpbmZvLVx1MDAzZXB0cC1cdTAwM2VzZXRfY29uZmlnX21vZGUobmRldik7XG4gXG4tXHRyYXZiX3dyaXRlKG5kZXYsIHByaXYtXHUwMDNlZ3RpX3RpdiwgR1RJKTtcbi1cbi1cdC8qIFJlcXVlc3QgR1RJIGxvYWRpbmcgKi9cbi1cdHJhdmJfbW9kaWZ5KG5kZXYsIEdDQ1IsIEdDQ1JfTFRJLCBHQ0NSX0xUSSk7XG4rXHRyZXR1cm4gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTtcbiB9XG4gXG4tc3RhdGljIGludCByYXZiX2NvbXB1dGVfZ3RpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3N0YXRpYyBpbnQgcmF2Yl9jb21wdXRlX2d0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNsayAqY2xrKVxuIHtcbiBcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmluZm8gPSBwcml2LVx1MDAzZWluZm87XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBuZGV2LVx1MDAzZWRldi5wYXJlbnQ7XG4gXHR1bnNpZ25lZCBsb25nIHJhdGU7XG4gXHR1NjQgaW5jO1xuIFxuLVx0aWYgKCEoaW5mby1cdTAwM2VncHRwIHx8IGluZm8tXHUwMDNlY2NjX2dhYykpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cF9yZWZfY2xrKVxuLVx0XHRyYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXHUwMDNlZ3B0cF9jbGspO1xuLVx0ZWxzZVxuLVx0XHRyYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXHUwMDNlY2xrKTtcbitcdHJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcbiBcdGlmICghcmF0ZSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtMTk3NCwxMSArMTk1NCwxMiBAQCBzdGF0aWMgaW50IHJhdmJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcbiBcdHJhdmJfZW1hY19pbml0KG5kZXYpO1xuIFxuLVx0cmF2Yl9zZXRfZ3RpKG5kZXYpO1xuLVxuIFx0LyogSW5pdGlhbGlzZSBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwIHx8IGluZm8tXHUwMDNlY2NjX2dhYylcbi1cdFx0cmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LVx1MDAzZXBkZXYpO1xuK1x0aWYgKGluZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXB0cC1cdTAwM2VuZGV2X29wZW4pIHtcbitcdFx0ZXJyb3IgPSBpbmZvLVx1MDAzZXB0cC1cdTAwM2VuZGV2X29wZW4obmRldik7XG4rXHRcdGlmIChlcnJvcilcbitcdFx0XHRnb3RvIG91dF9wdHBfc3RvcDtcbitcdH1cbiBcbiBcdC8qIFBIWSBjb250cm9sIHN0YXJ0ICovXG4gXHRlcnJvciA9IHJhdmJfcGh5X3N0YXJ0KG5kZXYpO1xuQEAgLTE5OTAsOSArMTk3MSw2IEBAIHN0YXRpYyBpbnQgcmF2Yl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0cmV0dXJuIDA7XG4gXG4gb3V0X3B0cF9zdG9wOlxuLVx0LyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwIHx8IGluZm8tXHUwMDNlY2NjX2dhYylcbi1cdFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcbiBcdHJhdmJfc3RvcF9kbWEobmRldik7XG4gb3V0X3NldF9yZXNldDpcbiBcdHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX1JFU0VUKTtcbkBAIC0yMDM2LDEwICsyMDE0LDYgQEAgc3RhdGljIHZvaWQgcmF2Yl90eF90aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5kZXYpO1xuIFxuLVx0LyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwKVxuLVx0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuLVxuIFx0LyogV2FpdCBmb3IgRE1BIHN0b3BwaW5nICovXG4gXHRpZiAocmF2Yl9zdG9wX2RtYShuZGV2KSkge1xuIFx0XHQvKiBJZiByYXZiX3N0b3BfZG1hKCkgZmFpbHMsIHRoZSBoYXJkd2FyZSBpcyBzdGlsbCBvcGVyYXRpbmdcbkBAIC0yMDcyLDEwICsyMDQ2LDYgQEAgc3RhdGljIHZvaWQgcmF2Yl90eF90aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cmF2Yl9lbWFjX2luaXQobmRldik7XG4gXG4gb3V0OlxuLVx0LyogSW5pdGlhbGlzZSBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwKVxuLVx0XHRyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtXHUwMDNlcGRldik7XG4tXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5kZXYpO1xuIFxuIG91dF91bmxvY2s6XG5AQCAtMjIwOCw3ICsyMTc4LDcgQEAgc3RhdGljIG5ldGRldl90eF90IHJhdmJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdGRlc2MtXHUwMDNlZHB0ciA9IGNwdV90b19sZTMyKGRtYV9hZGRyKTtcbiBcbiBcdC8qIFRYIHRpbWVzdGFtcCByZXF1aXJlZCAqL1xuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cCB8fCBpbmZvLVx1MDAzZWNjY19nYWMpIHtcbitcdGlmIChpbmZvLVx1MDAzZXB0cCkge1xuIFx0XHRpZiAocSA9PSBSQVZCX05DKSB7XG4gXHRcdFx0dHNfc2tiID0ga21hbGxvY19vYmooKnRzX3NrYiwgR0ZQX0FUT01JQyk7XG4gXHRcdFx0aWYgKCF0c19za2IpIHtcbkBAIC0yMzkwLDggKzIzNjAsOCBAQCBzdGF0aWMgaW50IHJhdmJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHR9XG4gXG4gXHQvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi9cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHAgfHwgaW5mby1cdTAwM2VjY2NfZ2FjKVxuLVx0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuK1x0aWYgKGluZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXB0cC1cdTAwM2VuZGV2X2Nsb3NlKVxuK1x0XHRpbmZvLVx1MDAzZXB0cC1cdTAwM2VuZGV2X2Nsb3NlKG5kZXYpO1xuIFxuIFx0LyogU2V0IHRoZSBjb25maWcgbW9kZSB0byBzdG9wIHRoZSBBVkItRE1BQydzIHByb2Nlc3NlcyAqL1xuIFx0aWYgKHJhdmJfc3RvcF9kbWEobmRldikgXHUwMDNjIDApXG5AQCAtMjM5OSw3ICsyMzY5LDcgQEAgc3RhdGljIGludCByYXZiX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHRcdCAgIFwiZGV2aWNlIHdpbGwgYmUgc3RvcHBlZCBhZnRlciBoL3cgcHJvY2Vzc2VzIGFyZSBkb25lLlxcblwiKTtcbiBcbiBcdC8qIENsZWFyIHRoZSB0aW1lc3RhbXAgbGlzdCAqL1xuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cCB8fCBpbmZvLVx1MDAzZWNjY19nYWMpIHtcbitcdGlmIChpbmZvLVx1MDAzZXB0cCkge1xuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHNfc2tiLCB0c19za2IyLCBcdTAwMjZwcml2LVx1MDAzZXRzX3NrYl9saXN0LCBsaXN0KSB7XG4gXHRcdFx0bGlzdF9kZWwoXHUwMDI2dHNfc2tiLVx1MDAzZWxpc3QpO1xuIFx0XHRcdGtmcmVlX3NrYih0c19za2ItXHUwMDNlc2tiKTtcbkBAIC0yNjgxLDYgKzI2NTEsNDIgQEAgc3RhdGljIGludCByYXZiX21kaW9fcmVsZWFzZShzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcmF2Yl9nZW4yX3B0cF9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXG4rXHRyZXR1cm4gcmF2Yl9jb21wdXRlX2d0aShuZGV2LCBwcml2LVx1MDAzZWNsayk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXG4rXHRyZXR1cm4gcHRwX2Nsb2NrX2luZGV4KHByaXYtXHUwMDNlcHRwLmNsb2NrKTtcbit9XG4rXG4rc3RhdGljIGludCByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBnUFRQIENsb2NrIFNlbGVjdCBIaWdoLXNwZWVkIHBlcmlwaGVyYWwgYnVzIGNsb2NrLiAqL1xuK1x0cmF2Yl9tb2RpZnkobmRldiwgQ0NDLCBDQ0NfQ1NFTCwgQ0NDX0NTRUxfSFBCKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfZ2VuMl9wdHBfaW5mbyA9IHtcbitcdC5wcm9iZSA9IHJhdmJfZ2VuMl9wdHBfcHJvYmUsXG4rXHQuY2xvY2tfaW5kZXggPSByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4LFxuK1x0LnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuMl9wdHBfc2V0X2NvbmZpZ19tb2RlLFxuK1x0LmRtYWNfc3RhcnQgPSByYXZiX3B0cF9pbml0LFxuK1x0LmRtYWNfc3RvcCA9IHJhdmJfcHRwX3N0b3AsXG4rfTtcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjJfaHdfaW5mbyA9IHtcbiBcdC5yZWNlaXZlID0gcmF2Yl9yeF9yY2FyLFxuIFx0LnNldF9yYXRlID0gcmF2Yl9zZXRfcmF0ZV9yY2FyLFxuQEAgLTI2OTksMTIgKzI3MDUsMjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW4yX2h3X2luZm8gPSB7XG4gXHRcdFx0ICBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpLFxuIFx0LnJ4X2Rlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcmF2Yl9leF9yeF9kZXNjKSxcbiBcdC5kYmF0X2VudHJ5X251bSA9IDIyLFxuK1x0LnB0cCA9IFx1MDAyNnJhdmJfZ2VuMl9wdHBfaW5mbyxcbiBcdC5hbGlnbmVkX3R4ID0gMSxcbi1cdC5ncHRwID0gMSxcbiBcdC5uY19xdWV1ZXMgPSAxLFxuIFx0Lm1hZ2ljX3BrdCA9IDEsXG4gfTtcbiBcbitzdGF0aWMgaW50IHJhdmJfZ2VuM19wdHBfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3tcbitcdC8qIEVuYWJsZSBnUFRQIENsb2NrIGFuZCBTZWxlY3QgSGlnaC1zcGVlZCBwZXJpcGhlcmFsIGJ1cyBjbG9jay4gKi9cbitcdHJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcgfCBDQ0NfR0FDIHwgQ0NDX0NTRUxfSFBCKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyByYXZiX2dlbjNfcHRwX2luZm8gPSB7XG4rXHQucHJvYmUgPSByYXZiX2dlbjJfcHRwX3Byb2JlLFxuK1x0LmNsb2NrX2luZGV4ID0gcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleCxcbitcdC5zZXRfY29uZmlnX21vZGUgPSByYXZiX2dlbjNfcHRwX3NldF9jb25maWdfbW9kZSxcbitcdC5uZGV2X29wZW4gPSByYXZiX3B0cF9pbml0LFxuK1x0Lm5kZXZfY2xvc2UgPSByYXZiX3B0cF9zdG9wLFxuK307XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW4zX2h3X2luZm8gPSB7XG4gXHQucmVjZWl2ZSA9IHJhdmJfcnhfcmNhcixcbiBcdC5zZXRfcmF0ZSA9IHJhdmJfc2V0X3JhdGVfcmNhcixcbkBAIC0yNzIzLDE1ICsyNzQzLDY2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuM19od19pbmZvID0ge1xuIFx0XHRcdCAgU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKSxcbiBcdC5yeF9kZXNjX3NpemUgPSBzaXplb2Yoc3RydWN0IHJhdmJfZXhfcnhfZGVzYyksXG4gXHQuZGJhdF9lbnRyeV9udW0gPSAyMixcbitcdC5wdHAgPSBcdTAwMjZyYXZiX2dlbjNfcHRwX2luZm8sXG4gXHQuaW50ZXJuYWxfZGVsYXkgPSAxLFxuIFx0LnR4X2NvdW50ZXJzID0gMSxcbiBcdC5tdWx0aV9pcnFzID0gMSxcbiBcdC5pcnFfZW5fZGlzID0gMSxcbi1cdC5jY2NfZ2FjID0gMSxcbiBcdC5uY19xdWV1ZXMgPSAxLFxuIFx0Lm1hZ2ljX3BrdCA9IDEsXG4gfTtcbiBcbitzdGF0aWMgaW50IHJhdmJfZ2VuNF9wdHBfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1xuK1x0cHJpdi1cdTAwM2VvZl9ncHRwID0gb2ZfcGFyc2VfcGhhbmRsZShwcml2LVx1MDAzZXBkZXYtXHUwMDNlZGV2Lm9mX25vZGUsIFwicHRwLXRpbWVyXCIsIDApO1xuK1x0aWYgKCFwcml2LVx1MDAzZW9mX2dwdHApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHByaXYtXHUwMDNlb2ZfZ3B0cCkpIHtcbitcdFx0b2Zfbm9kZV9wdXQocHJpdi1cdTAwM2VvZl9ncHRwKTtcbitcdFx0cHJpdi1cdTAwM2VvZl9ncHRwID0gTlVMTDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhdmJfZ2VuNF9wdHBfY2xvY2tfaW5kZXgoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1xuK1x0LyogSWYgbm8gY2xvY2ssIG1pbWljIHB0cF9jbG9ja19pbmRleF9ieV9vZl9ub2RlKCkgZmFpbCBhbmQgcmV0dXJuIC0xICovXG4rXHRpZiAoIXByaXYtXHUwMDNlb2ZfZ3B0cClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIHB0cF9jbG9ja19pbmRleF9ieV9vZl9ub2RlKHByaXYtXHUwMDNlb2ZfZ3B0cCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmF2Yl9nZW40X3B0cF9zZXRfY29uZmlnX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0aW50IHJldDtcbitcbitcdC8qIEVuYWJsZSBnUFRQIENsb2NrIGFuZCBTZWxlY3QgSGlnaC1zcGVlZCBwZXJpcGhlcmFsIGJ1cyBjbG9jay4gKi9cbitcdHJldCA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyB8IENDQ19HQUMgfCBDQ0NfQ1NFTF9IUEIpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIFNldCBQVFAgc291cmNlIHRvIEdQVFAgbW9kdWxlLCBvbmx5IG9wdGlvbiBvbiBHZW40LiAqL1xuK1x0aWYgKHByaXYtXHUwMDNlb2ZfZ3B0cClcbitcdFx0cmF2Yl9tb2RpZnkobmRldiwgQVBTUiwgQVBTUl9HUFRQVElNRVJfU09VUkNFIHwgQVBTUl9HUFRQQ0xPQ0ssXG4rXHRcdFx0ICAgIEFQU1JfR1BUUFRJTUVSX1NPVVJDRSB8IEFQU1JfR1BUUENMT0NLKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfZ2VuNF9wdHBfaW5mbyA9IHtcbitcdC5wcm9iZSA9IHJhdmJfZ2VuNF9wdHBfcHJvYmUsXG4rXHQuY2xvY2tfaW5kZXggPSByYXZiX2dlbjRfcHRwX2Nsb2NrX2luZGV4LFxuK1x0LnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuNF9wdHBfc2V0X2NvbmZpZ19tb2RlLFxuK307XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW40X2h3X2luZm8gPSB7XG4gXHQucmVjZWl2ZSA9IHJhdmJfcnhfcmNhcixcbiBcdC5zZXRfcmF0ZSA9IHJhdmJfc2V0X3JhdGVfcmNhcixcbkBAIC0yNzU0LDExICsyODI1LDMwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuNF9od19pbmZvID0ge1xuIFx0LnR4X2NvdW50ZXJzID0gMSxcbiBcdC5tdWx0aV9pcnFzID0gMSxcbiBcdC5pcnFfZW5fZGlzID0gMSxcbi1cdC5jY2NfZ2FjID0gMSxcbitcdC5wdHAgPSBcdTAwMjZyYXZiX2dlbjRfcHRwX2luZm8sXG4gXHQubmNfcXVldWVzID0gMSxcbiBcdC5tYWdpY19wa3QgPSAxLFxuIH07XG4gXG4rc3RhdGljIGludCByYXZiX3J6djJtX3B0cF9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXG4rXHRwcml2LVx1MDAzZWdwdHBfY2xrID0gZGV2bV9jbGtfZ2V0KFx1MDAyNnByaXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwiZ3B0cFwiKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2VncHRwX2NsaykpXG4rXHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlZ3B0cF9jbGspO1xuK1xuK1x0cmV0dXJuIHJhdmJfY29tcHV0ZV9ndGkobmRldiwgcHJpdi1cdTAwM2VncHRwX2Nsayk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9yenYybV9wdHBfaW5mbyA9IHtcbitcdC5wcm9iZSA9IHJhdmJfcnp2Mm1fcHRwX3Byb2JlLFxuK1x0LmNsb2NrX2luZGV4ID0gcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleCxcbitcdC5zZXRfY29uZmlnX21vZGUgPSByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZSxcbitcdC5kbWFjX3N0YXJ0ID0gcmF2Yl9wdHBfaW5pdCxcbitcdC5kbWFjX3N0b3AgPSByYXZiX3B0cF9zdG9wLFxuK307XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9yenYybV9od19pbmZvID0ge1xuIFx0LnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsXG4gXHQuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsXG5AQCAtMjc3OSw4ICsyODY5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9yenYybV9od19pbmZvID0ge1xuIFx0LmRiYXRfZW50cnlfbnVtID0gMjIsXG4gXHQubXVsdGlfaXJxcyA9IDEsXG4gXHQuZXJyX21nbXRfaXJxcyA9IDEsXG4tXHQuZ3B0cCA9IDEsXG4tXHQuZ3B0cF9yZWZfY2xrID0gMSxcbitcdC5wdHAgPSBcdTAwMjZyYXZiX3J6djJtX3B0cF9pbmZvLFxuIFx0Lm5jX3F1ZXVlcyA9IDEsXG4gXHQubWFnaWNfcGt0ID0gMSxcbiB9O1xuQEAgLTI5NTUsNyArMzA0NCw2IEBAIHN0YXRpYyBpbnQgcmF2Yl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0cHJpdi1cdTAwM2Vyc3RjID0gcnN0YztcbiBcdHByaXYtXHUwMDNlbmRldiA9IG5kZXY7XG4gXHRwcml2LVx1MDAzZXBkZXYgPSBwZGV2O1xuLVx0cHJpdi1cdTAwM2VwdHAucGhjX2luZGV4ID0gLTE7XG4gXHRwcml2LVx1MDAzZW51bV90eF9yaW5nW1JBVkJfQkVdID0gQkVfVFhfUklOR19TSVpFO1xuIFx0cHJpdi1cdTAwM2VudW1fcnhfcmluZ1tSQVZCX0JFXSA9IEJFX1JYX1JJTkdfU0laRTtcbiBcdGlmIChpbmZvLVx1MDAzZW5jX3F1ZXVlcykge1xuQEAgLTI5NzMsMTIgKzMwNjEsMTAgQEAgc3RhdGljIGludCByYXZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRcdGdvdG8gb3V0X3Jlc2V0X2Fzc2VydDtcbiBcdH1cbiBcbi1cdGlmIChpbmZvLVx1MDAzZWdwdHBfcmVmX2Nsaykge1xuLVx0XHRwcml2LVx1MDAzZWdwdHBfY2xrID0gZGV2bV9jbGtfZ2V0KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcImdwdHBcIik7XG4tXHRcdGlmIChJU19FUlIocHJpdi1cdTAwM2VncHRwX2NsaykpIHtcbi1cdFx0XHRlcnJvciA9IFBUUl9FUlIocHJpdi1cdTAwM2VncHRwX2Nsayk7XG4rXHRpZiAoaW5mby1cdTAwM2VwdHAgXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNlcHRwLVx1MDAzZXByb2JlKSB7XG4rXHRcdGVycm9yID0gaW5mby1cdTAwM2VwdHAtXHUwMDNlcHJvYmUobmRldik7XG4rXHRcdGlmIChlcnJvcilcbiBcdFx0XHRnb3RvIG91dF9yZXNldF9hc3NlcnQ7XG4tXHRcdH1cbiBcdH1cbiBcbiBcdHByaXYtXHUwMDNlcmVmY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcInJlZmNsa1wiKTtcbkBAIC0zMDMxLDEwICszMTE3LDYgQEAgc3RhdGljIGludCByYXZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRuZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZyYXZiX25ldGRldl9vcHM7XG4gXHRuZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2cmF2Yl9ldGh0b29sX29wcztcbiBcbi1cdGVycm9yID0gcmF2Yl9jb21wdXRlX2d0aShuZGV2KTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBvdXRfcnBtX3B1dDtcbi1cbiBcdHJhdmJfcGFyc2VfZGVsYXlfbW9kZShucCwgbmRldik7XG4gXG4gXHQvKiBBbGxvY2F0ZSBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyB0YWJsZSAqL1xuQEAgLTMxNTcsNiArMzIzOSw3IEBAIHN0YXRpYyB2b2lkIHJhdmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRwbV9ydW50aW1lX2Rpc2FibGUoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFx0cG1fcnVudGltZV9kb250X3VzZV9hdXRvc3VzcGVuZChkZXYpO1xuIFx0Y2xrX3VucHJlcGFyZShwcml2LVx1MDAzZXJlZmNsayk7XG4rXHRvZl9ub2RlX3B1dChwcml2LVx1MDAzZW9mX2dwdHApO1xuIFx0cmVzZXRfY29udHJvbF9hc3NlcnQocHJpdi1cdTAwM2Vyc3RjKTtcbiBcdGZyZWVfbmV0ZGV2KG5kZXYpO1xuIFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XG5AQCAtMzE4Miw5ICszMjY1LDYgQEAgc3RhdGljIGludCByYXZiX3dvbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdC8qIEVuYWJsZSBNYWdpY1BhY2tldCAqL1xuIFx0cmF2Yl9tb2RpZnkobmRldiwgRUNNUiwgRUNNUl9NUERFLCBFQ01SX01QREUpO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNlaW5mby1cdTAwM2VjY2NfZ2FjKVxuLVx0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuLVxuIFx0cmV0dXJuIGVuYWJsZV9pcnFfd2FrZShwcml2LVx1MDAzZWVtYWNfaXJxKTtcbiB9XG4gXG5AQCAtMzIwNCw5ICszMjg0LDYgQEAgc3RhdGljIGludCByYXZiX3dvbF9yZXN0b3JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4tXHRpZiAocHJpdi1cdTAwM2VpbmZvLVx1MDAzZWNjY19nYWMpXG4tXHRcdHJhdmJfcHRwX2luaXQobmRldiwgcHJpdi1cdTAwM2VwZGV2KTtcbi1cbiBcdGlmIChpbmZvLVx1MDAzZW5jX3F1ZXVlcylcbiBcdFx0bmFwaV9lbmFibGUoXHUwMDI2cHJpdi1cdTAwM2VuYXBpW1JBVkJfTkNdKTtcbiBcdG5hcGlfZW5hYmxlKFx1MDAyNnByaXYtXHUwMDNlbmFwaVtSQVZCX0JFXSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jXG5pbmRleCA0MzIxOGJjMTViMTUxLi4xOWQwMzliOWQyNGE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfcHRwLmNcbkBAIC0zMTMsMzEgKzMxMywzOSBAQCB2b2lkIHJhdmJfcHRwX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdHJhdmJfd3JpdGUobmRldiwgfihnaXMgfCBHSVNfUkVTRVJWRUQpLCBHSVMpO1xuIH1cbiBcbi12b2lkIHJhdmJfcHRwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4raW50IHJhdmJfcHRwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0c3RydWN0IHB0cF9jbG9jayAqY2xvY2s7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0aW50IHJldCA9IDA7XG4gXG4gXHRwcml2LVx1MDAzZXB0cC5pbmZvID0gcmF2Yl9wdHBfaW5mbztcbiBcbi1cdHByaXYtXHUwMDNlcHRwLmRlZmF1bHRfYWRkZW5kID0gcmF2Yl9yZWFkKG5kZXYsIEdUSSk7XG4rXHRwcml2LVx1MDAzZXB0cC5kZWZhdWx0X2FkZGVuZCA9IHByaXYtXHUwMDNlZ3RpX3RpdjtcbiBcdHByaXYtXHUwMDNlcHRwLmN1cnJlbnRfYWRkZW5kID0gcHJpdi1cdTAwM2VwdHAuZGVmYXVsdF9hZGRlbmQ7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwcml2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdC8qIFNldCBnUFRQIFRpbWVyIEluY3JlbWVudCBWYWx1ZS4gKi9cbitcdHJhdmJfd3JpdGUobmRldiwgcHJpdi1cdTAwM2VwdHAuZGVmYXVsdF9hZGRlbmQsIEdUSSk7XG4rXG4rXHQvKiBSZXF1ZXN0IEdUSSBsb2FkaW5nLiAqL1xuK1x0cmF2Yl9tb2RpZnkobmRldiwgR0NDUiwgR0NDUl9MVEksIEdDQ1JfTFRJKTtcbitcbitcdC8qIFdhaXQgZm9yIEdJVCBsb2FkaW5nIHRvIGNvbXBsZXRlLiAqL1xuIFx0cmF2Yl93YWl0KG5kZXYsIEdDQ1IsIEdDQ1JfVENSLCBHQ0NSX1RDUl9OT1JFUSk7XG4rXG4gXHRyYXZiX21vZGlmeShuZGV2LCBHQ0NSLCBHQ0NSX1RDU1MsIEdDQ1JfVENTU19BREpHUFRQKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRjbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZwcml2LVx1MDAzZXB0cC5pbmZvLCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4tXHRpZiAoSVNfRVJSKGNsb2NrKSkge1xuLVx0XHRuZXRkZXZfZXJyKG5kZXYsIFwiZmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJXBlXFxuXCIsIGNsb2NrKTtcbi1cdFx0Y2xvY2sgPSBOVUxMO1xuK1x0cHJpdi1cdTAwM2VwdHAuY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoXHUwMDI2cHJpdi1cdTAwM2VwdHAuaW5mbywgXHUwMDI2cHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4rXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlcHRwLmNsb2NrKSkge1xuK1x0XHRyZXQgPSBQVFJfRVJSKHByaXYtXHUwMDNlcHRwLmNsb2NrKTtcbitcdFx0cHJpdi1cdTAwM2VwdHAuY2xvY2sgPSBOVUxMO1xuK1x0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuIFx0fVxuIFxuLVx0V1JJVEVfT05DRShwcml2LVx1MDAzZXB0cC5jbG9jaywgY2xvY2spO1xuLVx0aWYgKGNsb2NrKVxuLVx0XHRXUklURV9PTkNFKHByaXYtXHUwMDNlcHRwLnBoY19pbmRleCwgcHRwX2Nsb2NrX2luZGV4KGNsb2NrKSk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCByYXZiX3B0cF9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuQEAgLTM2MCwxNCArMzY4LDEwIEBAIHN0YXRpYyB2b2lkIHJhdmJfcHRwX3N5bmNfaXJxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB2b2lkIHJhdmJfcHRwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0c3RydWN0IHB0cF9jbG9jayAqY2xvY2s7XG4tXG4tXHRXUklURV9PTkNFKHByaXYtXHUwMDNlcHRwLnBoY19pbmRleCwgLTEpO1xuLVx0Y2xvY2sgPSB4Y2hnKFx1MDAyNnByaXYtXHUwMDNlcHRwLmNsb2NrLCBOVUxMKTtcbiBcbiBcdHJhdmJfcHRwX2Rpc2FibGUobmRldik7XG4gXHRyYXZiX3B0cF9zeW5jX2lycXMobmRldik7XG4gXG4tXHRpZiAoY2xvY2spXG4tXHRcdHB0cF9jbG9ja191bnJlZ2lzdGVyKGNsb2NrKTtcbitcdGlmIChwcml2LVx1MDAzZXB0cC5jbG9jaylcbitcdFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIocHJpdi1cdTAwM2VwdHAuY2xvY2spO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjI2OjE1LjE5Mzk2NjE3N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNjcxNzAxNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB0aGlzIExpbnV4IGtlcm5lbCBwYXRjaCBhbmQgZGVjaWRlIGlmIGl0J3MgZnV6ei13b3J0aHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGRpZmYgYW5kIHNlZSB3aGF0J3MgYmVpbmcgdHdlYWtlZC4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGNoYW5nZXMgYWNyb3NzIGZvdXIgZmlsZXM6IGBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMsZXRoZXJhdmIueWFtbGAsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaGAsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jYCwgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfcHRwLmNgLiBUaGF0IGdpdmVzIG1lIGEgc3RhcnRpbmcgcG9pbnQuXG5cblRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYHJhdmJgLCB3aGljaCBmcm9tIHRoZSBmaWxlIHBhdGhzIGxvb2tzIGxpa2UgaXQncyBhIFJlbmVzYXMgRXRoZXJuZXQgQVZCIGRyaXZlci4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoZXRoZXIgdGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgYSBSZW5lc2FzIFNvQyBFdGhlcm5ldCBjb250cm9sbGVyLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHR5cGUgb2YgaGFyZHdhcmUgdGhpcyBwZXJ0YWlucyB0by4gTXkgcHJlZmVycmVkIG1ldGhvZCBpcyB1c3VhbGx5IHRvIGdsYW5jZSBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnYCB0byBjaGVjayBmb3IgdGhlIHByb3BlciBjb250ZXh0LCBvciBwZXJoYXBzIGxldmVyYWdlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIGByYXZiYCB3aXRoaW4gdGhlIHNvdXJjZSB0cmVlLiBUaGlzIHF1aWNrIGJpdCBvZiBhbmFseXNpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgYXJjaGl0ZWN0dXJlIGFuZCBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc2MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjI2OjI1Ljg2NTY3MTQyNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjA0NzExMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkFWQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZz0xOT1jb25maWcgU0hfRVRIXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWctMjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnOjI5OmNvbmZpZyBSQVZCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnLTMwLVxcdHRyaXN0YXRlIFxcXCJSZW5lc2FzIEV0aGVybmV0IEFWQiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyNjoyNS45NTc3MjM1MzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTg1MDI2MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBSZW5lc2FzIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbiB0aGUgYEtjb25maWdgIGZpbGUsIGxpa2VseSByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIGRyaXZlcidzIHNldHVwLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWdgLiBMaW5lIDI5IGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYXMgaXQncyBvZnRlbiB3aGVyZSB0aGUgY29yZSBkcml2ZXIgb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kIHRoYXQgYXJlYS4gTWF5YmUgYSBuZXcgb3B0aW9uIHdhcyBhZGRlZCBvciBhbiBvbGQgb25lIHJldmlzZWQsIEkgbmVlZCB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZC4gSSB3aWxsIHN0YXJ0IGJ5IHNlZWluZyB3aGF0J3MgcmlnaHQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzY2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjY6MjcuOTQyNzUyMjAxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdFxcdHNlbGVjdCBQSFlMSUJcXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgUmVuZXNhcyBTdXBlckggRXRoZXJuZXQgZGV2aWNlIGRyaXZlci5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIFJBVkJcXG4gIDMwOlxcdFxcdHRyaXN0YXRlIFxcXCJSZW5lc2FzIEV0aGVybmV0IEFWQiBzdXBwb3J0XFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1JFTkVTQVMgfHwgQ09NUElMRV9URVNUXFxuICAzMjpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAzMzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDM0OlxcdFxcdHNlbGVjdCBNSUlcXG4gIDM1OlxcdFxcdHNlbGVjdCBNRElPX0JJVEJBTkdcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gIDM3OlxcdFxcdHNlbGVjdCBQSFlMSUJcXG4gIDM4OlxcdFxcdHNlbGVjdCBSRVNFVF9DT05UUk9MTEVSXFxuICAzOTpcXHRcXHRoZWxwXFxuICA0MDpcXHRcXHQgIFJlbmVzYXMgRXRoZXJuZXQgQVZCIGRldmljZSBkcml2ZXIuXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBSRU5FU0FTX0VUSEVSX1NXSVRDSFxcbiAgNDM6XFx0XFx0dHJpc3RhdGUgXFxcIlJlbmVzYXMgRXRoZXJuZXQgU3dpdGNoIHN1cHBvcnRcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfUkVORVNBUyB8fCBDT01QSUxFX1RFU1RcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG4gIDQ2OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgNDc6XFx0XFx0c2VsZWN0IE1JSVxcbiAgNDg6XFx0XFx0c2VsZWN0IFBIWUxJTktcXG4gIDQ5OlxcdFxcdHNlbGVjdCBSRU5FU0FTX0dFTjRfUFRQXFxuICA1MDpcXHRcXHRoZWxwXFxuICA1MTpcXHRcXHQgIFJlbmVzYXMgRXRoZXJuZXQgU3dpdGNoIGRldmljZSBkcml2ZXIuXFxuICA1MjpcXHRcXG4gIDUzOlxcdGNvbmZpZyBSRU5FU0FTX0dFTjRfUFRQXFxuICA1NDpcXHRcXHR0cmlzdGF0ZSBcXFwiUmVuZXNhcyBSLUNhciBHZW40IGdQVFAgc3VwcG9ydFxcXCIgaWYgQ09NUElMRV9URVNUXFxuICA1NTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLXFxuICA1NjpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDU3OlxcdFxcdHNlbGVjdCBNSUlcXG4gIDU4OlxcdFxcdHNlbGVjdCBQSFlMSUJcXG4gIDU5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjY6MjcuOTQyODI0MzIxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYzMzYxMTM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSQVZCIERyaXZlciBhbmQgaXRzIFdvcnRoaW5lc3MgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcsIGFuZCB0aGUga2V5IGhlcmUgaXMgd2hldGhlciB0aGUgY29kZSB0b3VjaGVzIHNvbWV0aGluZyB0aGF0J3MgKnVucmVhY2hhYmxlKiBpbiBjb21tb24gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgcmF2YmAuLi4gdGhhdCdzIFJlbmVzYXMgRXRoZXJuZXQgQVZCIHN1cHBvcnQsIGFuIFNvQyBldGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlIGBBUkNIX1JFTkVTQVNgIGFyY2hpdGVjdHVyZS4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzIHdoZXRoZXIgdGhpcyBpcyBzb21ldGhpbmcgZW11bGF0ZWQgaW4gUUVNVSwgb3IgaWYgaXQncyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgdGhhdCAqcmVxdWlyZXMqIHBoeXNpY2FsIFJlbmVzYXMgUi1DYXIgb3IgUlogaGFyZHdhcmUgdG8gZnVuY3Rpb24uXG5cbkkgbmVlZCB0byBhcHBseSB0aGUgaW5zdHJ1Y3Rpb25zIGNhcmVmdWxseTsgSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggaW52b2x2ZXMgdW5yZWFjaGFibGUgY29kZSBwYXRocy4gVGhlIGNyaXRlcmlhIGxpc3RlZCBhcmUgcXVpdGUgc3BlY2lmaWM6IHRoaW5ncyB0aGF0IGFyZSBsaXRlcmFsbHkgaW1wb3NzaWJsZSB0byB0b3VjaCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcsIGxpa2UgVVNCIGdhZGdldCBjb2RlIG9yIGNlcnRhaW4gaGFyZHdhcmUgc2ltdWxhdG9ycywgb3IgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgZm9yIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVcy4gVGhvc2Uga2luZHMgb2YgdGhpbmdzIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUsIG5vdCBzdGFuZGFyZCBRRU1VIGVtdWxhdGlvbi5cblxuU28sIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB0aGlzOiBJcyBSZW5lc2FzIFJBVkIgKmVtdWxhdGVkKiBpbiBRRU1VIGluIGFueSB3YXk/IE9yIGlzIGl0IHB1cmVseSBhIHBsYXRmb3JtIGRyaXZlciwgZGVzaWduZWQgb25seSB0byB3b3JrIG9uIFJlbmVzYXMgU29Dcz8gSWYgaXQncyB0aGUgbGF0dGVyLCB0aGVuIGl0J3MgKmxpa2VseSogYSBuby1nbyBmb3IgZnV6emluZyBpbiBhIHN0YW5kYXJkIHZpcnR1YWwgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW55IFFFTVUgZW11bGF0aW9uIGZvciB0aGlzLCBvciBpZiBpdCdzIHN0cmljdGx5IGFuIFNvQyBwbGF0Zm9ybSBkcml2ZXIuIFRpbWUgdG8gZG8gc29tZSBkaWdnaW5nLlxuXG5JJ2xsIHN0YXJ0IHdpdGggYSBzZWFyY2ggZm9yIFwicmF2YlwiIGluIHRoZSBRRU1VIHNvdXJjZSBvciBkb2N1bWVudGF0aW9uLCBhbmQgSSB3aWxsIGNoZWNrIHRvIHNlZSBpZiBgcmF2YmAgaXMgcHVyZWx5IGFuIFNvQyBwbGF0Zm9ybSBkcml2ZXIuXG5cbkknbGwgYWxzbyBoYXZlIGEgbG9vayBhdCBob3cgYHJhdmJgIGlzIHByb2JlZCBhbmQgaW5pdGlhbGl6ZWQgdG8gZ2V0IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IGl0IGRlcGVuZHMgb24gdGhlIGhhcmR3YXJlLiBJJ2xsIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jYCBmb3Igc29tZSBjbHVlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMjksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyNjozMS41NzY0Mzg4MDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM0ODk2MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX3BsYXRmb3JtX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmM9MzM5NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciByYXZiX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmMtMzQwNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jOjM0MDU6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihyYXZiX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYy0zNDA2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyNjozMS42NTk5Mzg0MzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzg2ODE0NjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGByYXZiX2RyaXZlcmAncyBgb2ZfbWF0Y2hfdGFibGVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgcmF2Yl9kcml2ZXJgIGNvZGUgYWdhaW4uIFRpbWUgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBpdHMgYG9mX21hdGNoX3RhYmxlYC4gVGhpcyB0YWJsZSwgbmF0dXJhbGx5LCBpcyBjcml0aWNhbCBmb3IgZGV2aWNlIHRyZWUgYmluZGluZy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQncyBzdHJ1Y3R1cmVkLCB3aGF0IHByb3BlcnRpZXMgYXJlIGJlaW5nIG1hdGNoZWQsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gcHJvYmFibHkgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKlByb3BlcnR5IE1hdGNoaW5nOioqIFdoYXQgc3BlY2lmaWMgcHJvcGVydGllcyBpbiB0aGUgZGV2aWNlIHRyZWUgaXMgdGhpcyBkcml2ZXIgY29uZmlndXJlZCB0byBoYW5kbGU/IEFyZSB0aGV5IHVzaW5nIHRoZSBzdGFuZGFyZCBwcm9wZXJ0aWVzLCBvciBoYXZlIHRoZXkgaW50cm9kdWNlZCBhbnkgY3VzdG9tIG9uZXM/IEFyZSB0aGV5IHVzaW5nIGNvbXBhdGlibGUgc3RyaW5ncyBhcHByb3ByaWF0ZWx5P1xuKiAgICoqT3JkZXIgYW5kIFNwZWNpZmljaXR5OioqIEhvdyBhcmUgdGhlIGVudHJpZXMgb3JkZXJlZD8gQXJlIHRoZXkgcHJpb3JpdGl6ZWQgbG9naWNhbGx5IGJhc2VkIG9uIGRldmljZSB2YXJpYXRpb25zLCBvciBhcmUgdGhlcmUgYW55IGFtYmlndW91cyBtYXRjaGVzIHRoYXQgbWlnaHQgY2F1c2UgcHJvYmxlbXM/IElzIGl0IGJyb2FkIG9yIHNwZWNpZmljPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgZGV2aWNlcyB0byBtYXRjaCBpbiB0aGUgd3Jvbmcgb3JkZXI/XG4qICAgKipWZXJzaW9uIENvbnNpZGVyYXRpb25zOioqIEFyZSB0aGVyZSBhbnkgdmVyc2lvbiBjb25zaWRlcmF0aW9ucyB0byB0YWtlIGludG8gYWNjb3VudD8gT2xkZXIgb3IgbmV3ZXIgZGV2aWNlIHRyZWVzIHRoYXQgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoaXMgZHJpdmVyP1xuKiAgICoqT3ZlcmFsbCBTdHJhdGVneToqKiBJcyB0aGUgZHJpdmVyIGltcGxlbWVudGluZyBhbiBlZmZlY3RpdmUgYXBwcm9hY2ggdG8gbWFuYWdpbmcgZGlmZmVyZW50IGhhcmR3YXJlIHJldmlzaW9ucyBvciBjb25maWd1cmF0aW9ucz8gSXMgaXQgb3Zlcmx5IGNvbXBsZXgsIG9yIGlzIGl0IHNpbXBsZSwgZWxlZ2FudCwgYW5kIGVhc3kgdG8gbWFpbnRhaW4/XG4qICAgKipFcnJvciBQcmV2ZW50aW9uOioqIEZpbmFsbHksIEknbSBjaGVja2luZyBmb3IgYXJlYXMgdGhhdCBjb3VsZCBiZSB0aWdodGVuZWQgdXAgdG8gcHJldmVudCBlcnJvcnMuIERvZXMgaXQgc2VlbSBsaWtlIGFuIGFwcHJvcHJpYXRlIGFtb3VudCBvZiBjaGVja3MgYW5kIGJhbGFuY2VzIGFyZSBpbiBwbGFjZT9cblxuVW5kZXJzdGFuZGluZyB0aGlzIHRhYmxlIGlzIHRoZSBmaXJzdCBzdGVwIGluIGRlYnVnZ2luZyB0aGUgZHJpdmVyIHNvIEknbGwgYmUgcmVhbGx5IGZvY3VzaW5nIG9uIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkyNiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjI2OjM0LjQ0Njc1Njc5M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzcwOlxcdH1cXG4zMzcxOlxcdFxcbjMzNzI6XFx0c3RhdGljIGludCByYXZiX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuMzM3MzpcXHR7XFxuMzM3NDpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbjMzNzU6XFx0XFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbjMzNzY6XFx0XFxuMzM3NzpcXHRcXHRjbGtfZGlzYWJsZShwcml2LVxcdTAwM2VyZWZjbGspO1xcbjMzNzg6XFx0XFxuMzM3OTpcXHRcXHRyZXR1cm4gMDtcXG4zMzgwOlxcdH1cXG4zMzgxOlxcdFxcbjMzODI6XFx0c3RhdGljIGludCByYXZiX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4zMzgzOlxcdHtcXG4zMzg0OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuMzM4NTpcXHRcXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuMzM4NjpcXHRcXG4zMzg3OlxcdFxcdHJldHVybiBjbGtfZW5hYmxlKHByaXYtXFx1MDAzZXJlZmNsayk7XFxuMzM4ODpcXHR9XFxuMzM4OTpcXHRcXG4zMzkwOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyByYXZiX2Rldl9wbV9vcHMgPSB7XFxuMzM5MTpcXHRcXHRTWVNURU1fU0xFRVBfUE1fT1BTKHJhdmJfc3VzcGVuZCwgcmF2Yl9yZXN1bWUpXFxuMzM5MjpcXHRcXHRSVU5USU1FX1BNX09QUyhyYXZiX3J1bnRpbWVfc3VzcGVuZCwgcmF2Yl9ydW50aW1lX3Jlc3VtZSwgTlVMTClcXG4zMzkzOlxcdH07XFxuMzM5NDpcXHRcXG4zMzk1OlxcdHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJhdmJfZHJpdmVyID0ge1xcbjMzOTY6XFx0XFx0LnByb2JlXFx0XFx0PSByYXZiX3Byb2JlLFxcbjMzOTc6XFx0XFx0LnJlbW92ZVxcdFxcdD0gcmF2Yl9yZW1vdmUsXFxuMzM5ODpcXHRcXHQuZHJpdmVyID0ge1xcbjMzOTk6XFx0XFx0XFx0Lm5hbWVcXHQ9IFxcXCJyYXZiXFxcIixcXG4zNDAwOlxcdFxcdFxcdC5wbVxcdD0gcG1fcHRyKFxcdTAwMjZyYXZiX2Rldl9wbV9vcHMpLFxcbjM0MDE6XFx0XFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gcmF2Yl9tYXRjaF90YWJsZSxcXG4zNDAyOlxcdFxcdH0sXFxuMzQwMzpcXHR9O1xcbjM0MDQ6XFx0XFxuMzQwNTpcXHRtb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHJhdmJfZHJpdmVyKTtcXG4zNDA2OlxcdFxcbjM0MDc6XFx0TU9EVUxFX0FVVEhPUihcXFwiTWl0c3VoaXJvIEtpbXVyYSwgTWFzYXJ1IE5hZ2FpXFxcIik7XFxuMzQwODpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlJlbmVzYXMgRXRoZXJuZXQgQVZCIGRyaXZlclxcXCIpO1xcbjM0MDk6XFx0TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTCB2MlxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyNjozNC40NDY5MjM3MDNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTM0MzMxMDE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBUaGlzIFBhdGNoIGlzIE5vdCBGdXp6YWJsZSBpbiBTdGFuZGFyZCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBzbyBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCB0aGlzIHBhdGNoIHRhcmdldHMgdGhlIGByYXZiYCBkcml2ZXIsIHdoaWNoIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgUmVuZXNhcyBFdGhlcm5ldCBBVkIgY29udHJvbGxlcnMgZm91bmQgb24gdGhlaXIgUi1DYXIgYW5kIFJaL0cyTC9WMk0gc2VyaWVzIFNvQ3MuIFRoZSBrZXkgaGVyZSBpcyB0aGUgaGFyZHdhcmUgZGVwZW5kZW5jeS4gSXQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCB0aGlzIGRyaXZlciByZWxpZXMgb24gdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCB0aGUgY29ycmVzcG9uZGluZyBkZXZpY2UgdHJlZSBub2RlcyBwcmVzZW50IG9ubHkgb24gUmVuZXNhcyBTb0MgYm9hcmRzLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IFFFTVUsIGV2ZW4gaW4gdmlydHVhbGl6ZWQgc2V0dXBzIGxpa2UgR0NFIG9yIHN0YW5kYXJkIFFFTVUgaW5zdGFuY2VzICh4ODYgb3IgYXJtNjQgdmlydCBtYWNoaW5lcyksIGRvZXNuJ3QgZW11bGF0ZSB0aGVzZSBSZW5lc2FzIEV0aGVybmV0IEFWQiBjb250cm9sbGVycy4gVGhpcyBtZWFucyB0aGF0IGV2ZW4gaWYgSSB0cmllZCBydW5uaW5nIGZ1enppbmcgdG9vbHMgbGlrZSBzeXprYWxsZXIgaW4gdGhlc2UgdmlydHVhbCBlbnZpcm9ubWVudHMsIHRoZSBgcmF2YmAgZHJpdmVyIHdvdWxkbid0IGJlIGFjY2Vzc2libGUsIHByb2JlZCwgb3IgZXZlbiBleGVjdXRlZCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGlzIHNpbXBseSB1bmF2YWlsYWJsZS5cblxuTGV0IG1lIGJyZWFrIGRvd24gdGhlIHNwZWNpZmljczogdGhlIHBhdGNoIHRvdWNoZXMgdGhlIERUIGJpbmRpbmcgZG9jdW1lbnQsIGFuZCBzb3VyY2UgZmlsZXMgcmVsYXRlZCB0byB0aGUgYHJhdmJgIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBgcmF2Yi5oYCwgYHJhdmJfbWFpbi5jYCwgYW5kIGByYXZiX3B0cC5jYCBhcmUgYWxsIGltcGxpY2F0ZWQuIEl0J3MgZm9jdXNlZCBvbiB0aGUgUmVuZXNhcyBFdGhlcm5ldCBBVkIgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiXypgIHN1YnN5c3RlbS4gVGhlIHJlbGV2YW50IGhhcmR3YXJlIGlzIGNsZWFybHkgZGVmaW5lZDogUmVuZXNhcyBSLUNhciBHZW4yL0dlbjMvR2VuNCBhbmQgUlovVjJNIFNvQ3MuXG5cblRoZSBmdW5kYW1lbnRhbCBpc3N1ZSBpcyB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoZSBjb2RlLiBCZWNhdXNlIGl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIgZGVwZW5kZW50IG9uIHNwZWNpZmljIFJlbmVzYXMgaGFyZHdhcmUgYW5kIGl0cyBEVCwgaXQncyB1bnJlYWNoYWJsZSBpbiB0aGUgc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzIGNvbW1vbmx5IHVzZWQgZm9yIGZ1enppbmcuIFRodXMsIEkgYW0gY29uZmlkZW50IHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuXG5cbk5vdywgSSdtIGNoZWNraW5nIHRoZSByZXF1aXJlbWVudHMgZm9yIGBzZXQtcmVzdWx0c2AuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgIGFyZSBpcnJlbGV2YW50IGluIHRoaXMgY2FzZS4gTXkgcmVhc29uaW5nIGlzIGNvbmNpc2UsIGV4cGxhaW5pbmcgdGhlIGhhcmR3YXJlIGRlcGVuZGVuY3kgYW5kIGluYWNjZXNzaWJpbGl0eSBpbiB0aGUgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMuIEFuZCBmaW5hbGx5LCBgV29ydGhGdXp6aW5nYCBpcyB1bmVxdWl2b2NhbGx5IGBmYWxzZWAuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk0MywiT3V0cHV0VG9rZW5zIjo5NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjI2OjQzLjc5MDIzNjc3MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBSZW5lc2FzIEV0aGVybmV0IEFWQiAoUkFWQikgcGxhdGZvcm0gZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfKiksIHdoaWNoIGlzIHNwZWNpZmljIHRvIFJlbmVzYXMgUi1DYXIgYW5kIFJaIFNvQ3MgYW5kIHJlcXVpcmVzIHBoeXNpY2FsIFNvQyBoYXJkd2FyZSBub3QgYXZhaWxhYmxlIG9yIGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIFJlbmVzYXMgRXRoZXJuZXQgQVZCIChSQVZCKSBwbGF0Zm9ybSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl8qKSwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gUmVuZXNhcyBSLUNhciBhbmQgUlogU29DcyBhbmQgcmVxdWlyZXMgcGh5c2ljYWwgU29DIGhhcmR3YXJlIG5vdCBhdmFpbGFibGUgb3IgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyNjo0My43OTAyNzc2ODJaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowf7ntb[1] Phase: Running StartedAt: 2026-09-03 01:26:55 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf7ntb[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-03 01:26:55 +0000 UTC FinishedAt: 2026-09-03 01:27:10 +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,}