Name: series-workflow8f4cz Phase: Failed StartedAt: 2026-07-11 06:58:24 +0000 UTC FinishedAt: 2026-07-11 07:31:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8f4cz[0] Phase: Succeeded StartedAt: 2026-07-11 06:58:24 +0000 UTC FinishedAt: 2026-07-11 07:30:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8f4cz[0].run-triage Phase: Succeeded StartedAt: 2026-07-11 06:58:24 +0000 UTC FinishedAt: 2026-07-11 07:30:51 +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+CgkJCTx0ZD4yMDI2LzA3LzExIDA3OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpeGdiZSBkcml2ZXIgKEludGVsIDEwIEdpZ2FiaXQgRXRoZXJuZXQpLCB3aGljaCBpcyBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlci4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzZWQgZm9yIGZ1enppbmcgKGxpa2UgUUVNVSBvciBHQ0UpIGRvIG5vdCBlbXVsYXRlIGl4Z2JlIGhhcmR3YXJlLCBtYWtpbmcgdGhlc2UgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDc6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5MzgwZGU3YjI3NjgzNDJmMDk4Y2Q4ZGIzOTg5NmZkMmRkNmRjNzdlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMDc6MzA6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlLmhcbmluZGV4IDliODIxNzUyM2ZkMjY2Li40NGNmMDM3Y2MxNjdlYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlLmhcbkBAIC05NTQsNiAmIzQzOzk1NCwxMSBAQCBleHRlcm4gY2hhciBpeGdiZV9kcml2ZXJfbmFtZVtdO1xuIGV4dGVybiBjaGFyIGl4Z2JlX2RlZmF1bHRfZGV2aWNlX2Rlc2NyW107XG4gI2VuZGlmIC8qIElYR0JFX0ZDT0UgKi9cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGl4Z2JlX25ldGlmX3J1bm5pbmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IG5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldik7XG4mIzQzO31cbiYjNDM7XG4gaW50IGl4Z2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4gaW50IGl4Z2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuIHZvaWQgaXhnYmVfdXAoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2RjYl9ubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZGNiX25sLmNcbmluZGV4IDM4MmQwOTdlNGIxMWUwLi43Yzc0MDhkMzI3NDJjNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2RjYl9ubC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9kY2JfbmwuY1xuQEAgLTI3NywxNyAmIzQzOzI3NywyMyBAQCBzdGF0aWMgdm9pZCBpeGdiZV9kY2JubF9nZXRfcGZjX2NmZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcHJpb3JpdHksXG4gc3RhdGljIHZvaWQgaXhnYmVfZGNibmxfZGV2cmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KGRldik7XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJ1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKGRldik7XG4gXG4gXHR3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX0lYR0JFX1JFU0VUVElORywgXHUwMDI2YWRhcHRlci1cdTAwM2VzdGF0ZSkpXG4gXHRcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4mIzQzO1x0aWYgKHJ1bm5pbmcpXG4gXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKGRldik7XG4gXG4gXHRpeGdiZV9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xuIFx0aXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcbiYjNDM7XHRpZiAocnVubmluZylcbiBcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX29wZW4oZGV2KTtcbiBcbiBcdGNsZWFyX2JpdChfX0lYR0JFX1JFU0VUVElORywgXHUwMDI2YWRhcHRlci1cdTAwM2VzdGF0ZSk7XG5AQCAtNTE1LDYgJiM0Mzs1MjEsOSBAQCBzdGF0aWMgaW50IGl4Z2JlX2RjYm5sX2llZWVfc2V0ZXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoIShhZGFwdGVyLVx1MDAzZWRjYnhfY2FwIFx1MDAyNiBEQ0JfQ0FQX0RDQlhfVkVSX0lFRUUpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVORVRET1dOO1xuJiM0MztcbiBcdGlmICghYWRhcHRlci1cdTAwM2VpeGdiZV9pZWVlX2V0cykge1xuIFx0XHRhZGFwdGVyLVx1MDAzZWl4Z2JlX2llZWVfZXRzID0ga21hbGxvY19vYmooc3RydWN0IGllZWVfZXRzKTtcbiBcdFx0aWYgKCFhZGFwdGVyLVx1MDAzZWl4Z2JlX2llZWVfZXRzKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2V0aHRvb2wuY1xuaW5kZXggMzZlNDNiNWU4OGQxZjAuLjAyYWZmNDExNDI2ZDE5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9ldGh0b29sLmNcbkBAIC00NjYsNiAmIzQzOzQ2Niw5IEBAIHN0YXRpYyBpbnQgaXhnYmVfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHR1MzIgYWR2ZXJ0aXNlZCwgb2xkO1xuIFx0aW50IGVyciA9IDA7XG4gXG4mIzQzO1x0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxuJiM0MztcdFx0cmV0dXJuIC1FTkVURE9XTjtcbiYjNDM7XG4gXHRpZiAoKGh3LVx1MDAzZXBoeS5tZWRpYV90eXBlID09IGl4Z2JlX21lZGlhX3R5cGVfY29wcGVyKSB8fFxuIFx0ICAgIChody1cdTAwM2VwaHkubXVsdGlzcGVlZF9maWJlcikpIHtcbiBcdFx0LypcbkBAIC01NzYsOSAmIzQzOzU3OSw5IEBAIHN0YXRpYyB2b2lkIGl4Z2JlX3NldF9wYXVzZXBhcmFtX2ZpbmFsaXplKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHQvKiBJZiB0aGUgdGhpbmcgY2hhbmdlZCB0aGVuIHdlJiMzOTtsbCB1cGRhdGUgYW5kIHVzZSBuZXcgYXV0b25lZy4gKi9cbiBcdGlmIChtZW1jbXAoZmMsIFx1MDAyNmh3LVx1MDAzZWZjLCBzaXplb2YoKmZjKSkpIHtcbiBcdFx0aHctXHUwMDNlZmMgPSAqZmM7XG4tXHRcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4mIzQzO1x0XHRpZiAoaXhnYmVfbmV0aWZfcnVubmluZyhuZXRkZXYpKVxuIFx0XHRcdGl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7XG4tXHRcdGVsc2VcbiYjNDM7XHRcdGVsc2UgaWYgKG5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4gXHRcdFx0aXhnYmVfcmVzZXQoYWRhcHRlcik7XG4gXHR9XG4gfVxuQEAgLTEyNjYsNyAmIzQzOzEyNjksNyBAQCBzdGF0aWMgaW50IGl4Z2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVfUkVTRVRUSU5HLCBcdTAwMjZhZGFwdGVyLVx1MDAzZXN0YXRlKSlcbiBcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuIFxuLVx0aWYgKCFuZXRpZl9ydW5uaW5nKGFkYXB0ZXItXHUwMDNlbmV0ZGV2KSkge1xuJiM0MztcdGlmICghaXhnYmVfbmV0aWZfcnVubmluZyhhZGFwdGVyLVx1MDAzZW5ldGRldikpIHtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYWRhcHRlci1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiBcdFx0XHRhZGFwdGVyLVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlY291bnQgPSBuZXdfdHhfY291bnQ7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFkYXB0ZXItXHUwMDNlbnVtX3hkcF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuQEAgLTIyNDksMTAgJiM0MzsyMjUyLDExIEBAIHN0YXRpYyB2b2lkIGl4Z2JlX2RpYWdfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdCAgICBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGhfdGVzdCwgdTY0ICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYobmV0ZGV2KTtcbi1cdGJvb2wgaWZfcnVubmluZyA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbiYjNDM7XHRib29sIGlmX3J1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldik7XG4gXG4tXHRpZiAoaXhnYmVfcmVtb3ZlZChhZGFwdGVyLVx1MDAzZWh3Lmh3X2FkZHIpKSB7XG4tXHRcdGVfZXJyKGh3LCBcJiMzNDtBZGFwdGVyIHJlbW92ZWQgLSB0ZXN0IGJsb2NrZWRcXG5cJiMzNDspO1xuJiM0MztcdGlmIChpeGdiZV9yZW1vdmVkKGFkYXB0ZXItXHUwMDNlaHcuaHdfYWRkcikgfHxcbiYjNDM7XHQgICAgIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpIHtcbiYjNDM7XHRcdGVfZXJyKGh3LCBcJiMzNDtBZGFwdGVyIHJlbW92ZWQgb3IgZGV0YWNoZWQgLSB0ZXN0IGJsb2NrZWRcXG5cJiMzNDspO1xuIFx0XHRkYXRhWzBdID0gMTtcbiBcdFx0ZGF0YVsxXSA9IDE7XG4gXHRcdGRhdGFbMl0gPSAxO1xuQEAgLTI0NjYsNyAmIzQzOzI0NzAsNyBAQCBzdGF0aWMgaW50IGl4Z2JlX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KG5ldGRldik7XG4gXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuJiM0MztcdGlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpXG4gXHRcdGl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0yNjUwLDcgJiM0MzsyNjU0LDggQEAgc3RhdGljIGludCBpeGdiZV9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ZWxzZVxuIFx0XHRcdC8qIHJ4IG9ubHkgb3IgbWl4ZWQgKi9cbiBcdFx0XHRxX3ZlY3Rvci1cdTAwM2VpdHIgPSByeF9pdHJfcGFyYW07XG4tXHRcdGl4Z2JlX3dyaXRlX2VpdHIocV92ZWN0b3IpO1xuJiM0MztcdFx0aWYgKG5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4mIzQzO1x0XHRcdGl4Z2JlX3dyaXRlX2VpdHIocV92ZWN0b3IpO1xuIFx0fVxuIFxuIFx0LypcbkBAIC0zNjk0LDYgJiM0MzszNjk5LDkgQEAgc3RhdGljIGludCBpeGdiZV9zZXRfZWVlX2U2MTAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdCAgICBrZWRhdGEtXHUwMDNlZWVlX2VuYWJsZWQpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiYjNDM7XHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVORVRET1dOO1xuJiM0MztcbiBcdGh3LVx1MDAzZXBoeS5lZWVfc3BlZWRzX2FkdmVydGlzZWQgPSBrZWRhdGEtXHUwMDNlZWVlX2VuYWJsZWQgP1xuIFx0XHRcdFx0XHRody1cdTAwM2VwaHkuZWVlX3NwZWVkc19zdXBwb3J0ZWQgOiAwO1xuIFxuQEAgLTM3MDksOSAmIzQzOzM3MTcsOSBAQCBzdGF0aWMgaW50IGl4Z2JlX3NldF9lZWVfZTYxMChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0ZWxzZVxuIFx0XHRhZGFwdGVyLVx1MDAzZWZsYWdzMiBcdTAwMjY9IH5JWEdCRV9GTEFHMl9FRUVfRU5BQkxFRDtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4mIzQzO1x0aWYgKGl4Z2JlX25ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiBcdFx0aXhnYmVfcmVpbml0X2xvY2tlZChhZGFwdGVyKTtcbi1cdGVsc2VcbiYjNDM7XHRlbHNlIGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxuIFx0XHRpeGdiZV9yZXNldChhZGFwdGVyKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTM3OTMsOSAmIzQzOzM4MDEsOSBAQCBzdGF0aWMgaW50IGl4Z2JlX3NldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZWRhdGEpXG4gXHR9XG4gXG4gXHQvKiByZXNldCBsaW5rICovXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuJiM0MztcdGlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpXG4gXHRcdGl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7XG4tXHRlbHNlXG4mIzQzO1x0ZWxzZSBpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbiBcdFx0aXhnYmVfcmVzZXQoYWRhcHRlcik7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0zODUxLDcgJiM0MzszODU5LDcgQEAgc3RhdGljIGludCBpeGdiZV9zZXRfcHJpdl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgcHJpdl9mbGFncylcbiBcdFx0YWRhcHRlci1cdTAwM2VmbGFnczIgPSBmbGFnczI7XG4gXG4gXHRcdC8qIHJlc2V0IGludGVyZmFjZSB0byByZXBvcHVsYXRlIHF1ZXVlcyAqL1xuLVx0XHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuJiM0MztcdFx0aWYgKGl4Z2JlX25ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiBcdFx0XHRpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2Zjb2UuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2Zjb2UuY1xuaW5kZXggMDExZmRhOWM2MTkzOWMuLmU0Y2Q0NjczZjIxYzJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZmNvZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9mY29lLmNcbkBAIC04MzYsNiAmIzQzOzgzNiwxMCBAQCBpbnQgaXhnYmVfZmNvZV9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KG5ldGRldik7XG4gXHRzdHJ1Y3QgaXhnYmVfZmNvZSAqZmNvZSA9IFx1MDAyNmFkYXB0ZXItXHUwMDNlZmNvZTtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1xuJiM0MztcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbiYjNDM7XHRcdHJldHVybiAtRU5FVERPV047XG4gXG4gXHRhdG9taWNfaW5jKFx1MDAyNmZjb2UtXHUwMDNlcmVmY250KTtcbiBcbkBAIC04NDUsMTIgJiM0Mzs4NDksMTQgQEAgaW50IGl4Z2JlX2Zjb2VfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoYWRhcHRlci1cdTAwM2VmbGFncyBcdTAwMjYgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdHJ1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldik7XG4mIzQzO1xuIFx0ZV9pbmZvKGRydiwgXCYjMzQ7RW5hYmxpbmcgRkNvRSBvZmZsb2FkIGZlYXR1cmVzLlxcblwmIzM0Oyk7XG4gXG4gXHRpZiAoYWRhcHRlci1cdTAwM2VmbGFncyBcdTAwMjYgSVhHQkVfRkxBR19TUklPVl9FTkFCTEVEKVxuIFx0XHRlX3dhcm4ocHJvYmUsIFwmIzM0O0VuYWJsaW5nIEZDb0Ugb24gUEYgd2lsbCBkaXNhYmxlIGxlZ2FjeSBWRnNcXG5cJiMzNDspO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiYjNDM7XHRpZiAocnVubmluZylcbiBcdFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcbiBcbiBcdC8qIEFsbG9jYXRlIHBlciBDUFUgbWVtb3J5IHRvIHRyYWNrIEREUCBwb29scyAqL1xuQEAgLTg2NSw3ICYjNDM7ODcxLDcgQEAgaW50IGl4Z2JlX2Zjb2VfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpeGdiZV9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xuIFx0aXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiYjNDM7XHRpZiAocnVubmluZylcbiBcdFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTg4Miw2ICYjNDM7ODg4LDEwIEBAIGludCBpeGdiZV9mY29lX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIGludCBpeGdiZV9mY29lX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KG5ldGRldik7XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVORVRET1dOO1xuIFxuIFx0aWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNmFkYXB0ZXItXHUwMDNlZmNvZS5yZWZjbnQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC04ODksOCAmIzQzOzg5OSwxMCBAQCBpbnQgaXhnYmVfZmNvZV9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoIShhZGFwdGVyLVx1MDAzZWZsYWdzIFx1MDAyNiBJWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdHJ1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldik7XG4mIzQzO1xuIFx0ZV9pbmZvKGRydiwgXCYjMzQ7RGlzYWJsaW5nIEZDb0Ugb2ZmbG9hZCBmZWF0dXJlcy5cXG5cJiMzNDspO1xuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiYjNDM7XHRpZiAocnVubmluZylcbiBcdFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcbiBcbiBcdC8qIEZyZWUgcGVyIENQVSBtZW1vcnkgdG8gdHJhY2sgRERQIHBvb2xzICovXG5AQCAtOTA2LDcgJiM0Mzs5MTgsNyBAQCBpbnQgaXhnYmVfZmNvZV9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpeGdiZV9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xuIFx0aXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiYjNDM7XHRpZiAocnVubmluZylcbiBcdFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uY1xuaW5kZXggODg3M2E4Y2M0YTE4NTEuLmYwY2I2NGE4NDAyMTRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmNcbkBAIC03NDAxLDcgJiM0Mzs3NDAxLDcgQEAgc3RhdGljIGludCBpeGdiZV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KVxuIFx0LyogbXVzdCBzZXQgbmV3IE1UVSBiZWZvcmUgY2FsbGluZyBkb3duIG9yIHVwICovXG4gXHRXUklURV9PTkNFKG5ldGRldi1cdTAwM2VtdHUsIG5ld19tdHUpO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiYjNDM7XHRpZiAoaXhnYmVfbmV0aWZfcnVubmluZyhuZXRkZXYpKVxuIFx0XHRpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtOTkwMyw2ICYjNDM7OTkwMyw3IEBAIGludCBpeGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiB7XG4gXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KGRldik7XG4gXHRzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gXHUwMDI2YWRhcHRlci1cdTAwM2VodztcbiYjNDM7XHRib29sIHJ1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKGRldik7XG4gXG4gXHQvKiBIYXJkd2FyZSBzdXBwb3J0cyB1cCB0byA4IHRyYWZmaWMgY2xhc3NlcyAqL1xuIFx0aWYgKHRjIFx1MDAzZSBhZGFwdGVyLVx1MDAzZWRjYl9jZmcubnVtX3Rjcy5wZ190Y3MpXG5AQCAtOTkxNSw3ICYjNDM7OTkxNiwxMCBAQCBpbnQgaXhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHQgKiBtYXRjaCBwYWNrZXQgYnVmZmVyIGFsaWdubWVudC4gVW5mb3J0dW5hdGVseSwgdGhlXG4gXHQgKiBoYXJkd2FyZSBpcyBub3QgZmxleGlibGUgZW5vdWdoIHRvIGRvIHRoaXMgZHluYW1pY2FsbHkuXG4gXHQgKi9cbi1cdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4mIzQzO1x0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuJiM0MztcdFx0cmV0dXJuIC1FTkVURE9XTjtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ1bm5pbmcpXG4gXHRcdGl4Z2JlX2Nsb3NlKGRldik7XG4gXHRlbHNlXG4gXHRcdGl4Z2JlX3Jlc2V0KGFkYXB0ZXIpO1xuQEAgLTk5MjgsNyAmIzQzOzk5MzIsNyBAQCBpbnQgaXhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHRcdFx0ZV93YXJuKHByb2JlLCBcJiMzNDtEQ0IgaXMgbm90IHN1cHBvcnRlZCB3aXRoIFhEUFxcblwmIzM0Oyk7XG4gXG4gXHRcdFx0aXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xuLVx0XHRcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4mIzQzO1x0XHRcdGlmIChydW5uaW5nKVxuIFx0XHRcdFx0aXhnYmVfb3BlbihkZXYpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG5AQCAtOTk2Myw3ICYjNDM7OTk2Nyw3IEBAIGludCBpeGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcbiBcdGl4Z2JlX2RlZnJhZ19tYWN2bGFuX3Bvb2xzKGRldik7XG4gXG4tXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxuJiM0MztcdGlmIChydW5uaW5nKVxuIFx0XHRyZXR1cm4gaXhnYmVfb3BlbihkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTA0ODksOSAmIzQzOzEwNDkzLDkgQEAgdm9pZCBpeGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYobmV0ZGV2KTtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4mIzQzO1x0aWYgKGl4Z2JlX25ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiBcdFx0aXhnYmVfcmVpbml0X2xvY2tlZChhZGFwdGVyKTtcbi1cdGVsc2VcbiYjNDM7XHRlbHNlIGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxuIFx0XHRpeGdiZV9yZXNldChhZGFwdGVyKTtcbiB9XG4gXG5AQCAtMTA4MjMsNyAmIzQzOzEwODI3LDcgQEAgc3RhdGljIHZvaWQgKml4Z2JlX2Z3ZF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICp2ZGV2KVxuIFx0YWNjZWwtXHUwMDNlcG9vbCA9IHBvb2w7XG4gXHRhY2NlbC1cdTAwM2VuZXRkZXYgPSB2ZGV2O1xuIFxuLVx0aWYgKCFuZXRpZl9ydW5uaW5nKHBkZXYpKVxuJiM0MztcdGlmICghaXhnYmVfbmV0aWZfcnVubmluZyhwZGV2KSlcbiBcdFx0cmV0dXJuIGFjY2VsO1xuIFxuIFx0ZXJyID0gaXhnYmVfZndkX3JpbmdfdXAoYWRhcHRlciwgYWNjZWwpO1xuQEAgLTEwOTU0LDggJiM0MzsxMDk1OCwxMCBAQCBzdGF0aWMgaW50IGl4Z2JlX3hkcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gXHRcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gXHRcdGVyciA9IGl4Z2JlX3NldHVwX3RjKGRldiwgYWRhcHRlci1cdTAwM2Vod190Y3MpO1xuIFxuLVx0XHRpZiAoZXJyKVxuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHR4Y2hnKFx1MDAyNmFkYXB0ZXItXHUwMDNleGRwX3Byb2csIG9sZF9wcm9nKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiBcdFx0aWYgKCFwcm9nKVxuIFx0XHRcdHhkcF9mZWF0dXJlc19jbGVhcl9yZWRpcmVjdF90YXJnZXQoZGV2KTtcbiBcdH0gZWxzZSB7XG5AQCAtMTIzMzgsNiAmIzQzOzEyMzQ0LDk0IEBAIHN0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGl4Z2JlX2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRyZXR1cm4gcmVzdWx0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGl4Z2JlX3BjaV9yZXNldF9wcmVwYXJlIC0gY2FsbGVkIGJlZm9yZSB0aGUgcGNpIGJ1cyBpcyByZXNldC5cbiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBRdWllc2NlIHRoZSBkcml2ZXIgaW4gcHJlcGFyYXRpb24gZm9yIGEgUENJIGZ1bmN0aW9uIHJlc2V0LiBDYWxsZWQgZnJvbVxuJiM0MzsgKiBwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoKSBiZWZvcmUgdGhlIGNvcmUgc2F2ZXMgY29uZmlnIHN0YXRlIGFuZCB3cml0ZXNcbiYjNDM7ICogUENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFIHRvIGNsZWFyIGJ1cyBtYXN0ZXJpbmcgYW5kIE1NSU8gZGVjb2RlLCBzbyBNTUlPXG4mIzQzOyAqIGFjY2VzcyB0byB0aGUgZGV2aWNlIGlzIHN0aWxsIHZhbGlkIGhlcmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpeGdiZV9wY2lfcmVzZXRfcHJlcGFyZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4mIzQzO1xuJiM0MztcdGlmICghYWRhcHRlcilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2ID0gYWRhcHRlci1cdTAwM2VuZXRkZXY7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdG5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTtcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuJiM0MztcdFx0aXhnYmVfY2xvc2Vfc3VzcGVuZChhZGFwdGVyKTtcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHQvKiBfX0lYR0JFX1JFU0VUVElORyBpcyBpbnRlbnRpb25hbGx5IG5vdCBzZXQgaGVyZTogaXQgaXMgc3B1biBvblxuJiM0MztcdCAqIHdoaWxlIGhvbGRpbmcgcnRubCBieSBpeGdiZV9yZWluaXRfbG9ja2VkKCksIGl4Z2JlX2RjYm5sX2RldnJlc2V0KClcbiYjNDM7XHQgKiBhbmQgdGhlIGV0aHRvb2wgcmVzZXQgcGF0aHMsIHNvIGhvbGRpbmcgaXQgYWNyb3NzIHRoZSBydG5sIGRyb3BcbiYjNDM7XHQgKiB3b3VsZCBkZWFkbG9jayB0aG9zZSBjYWxsZXJzIGFnYWluc3QgaXhnYmVfcGNpX3Jlc2V0X2RvbmUoKSwgd2hpY2hcbiYjNDM7XHQgKiBuZWVkcyB0byByZS1hY3F1aXJlIHJ0bmwuICBEdXJpbmcgdGhlIHJlc2V0IHdpbmRvdyBjb25jdXJyZW50XG4mIzQzO1x0ICogcnRubC1ob2xkaW5nIHBhdGhzIG11c3QgdHJlYXQgdGhlIG5ldGRldiBhcyBkZXRhY2hlZCwgd2hpbGUgdGVhcmRvd25cbiYjNDM7XHQgKiBwYXRocyBhbHNvIG9ic2VydmUgX19JWEdCRV9ET1dOIHNldCBieSBpeGdiZV9kb3duKCkgdmlhXG4mIzQzO1x0ICogaXhnYmVfY2xvc2Vfc3VzcGVuZCgpLCBtYXRjaGluZyB0aGUgZXhpc3RpbmcgaXhnYmVfaW9fZXJyb3JfZGV0ZWN0ZWQoKVxuJiM0MztcdCAqIGZsb3cuXG4mIzQzO1x0ICovXG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X2JpdChfX0lYR0JFX1NFUlZJQ0VfSU5JVEVELCBcdTAwMjZhZGFwdGVyLVx1MDAzZXN0YXRlKSkge1xuJiM0MztcdFx0LyogVGhlIHNlcnZpY2UgdGltZXIgd2FzIGFscmVhZHkgc3RvcHBlZCBieSBpeGdiZV9kb3duKCkgdmlhXG4mIzQzO1x0XHQgKiBpeGdiZV9jbG9zZV9zdXNwZW5kKCk7IGlmIHRoZSBuZXRkZXYgd2FzIG5vdCBydW5uaW5nLCB0aGVcbiYjNDM7XHRcdCAqIHRpbWVyIGlzIG5vdCBhcm1lZC4gIE9ubHkgdGhlIGN1cnJlbnRseSBxdWV1ZWQgc2VydmljZSB0YXNrXG4mIzQzO1x0XHQgKiAoaWYgYW55KSBzdGlsbCBuZWVkcyB0byBiZSBmbHVzaGVkIGhlcmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2YWRhcHRlci1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuJiM0MztcdFx0Y2xlYXJfYml0KF9fSVhHQkVfU0VSVklDRV9TQ0hFRCwgXHUwMDI2YWRhcHRlci1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogaXhnYmVfcGNpX3Jlc2V0X2RvbmUgLSBjYWxsZWQgYWZ0ZXIgdGhlIHBjaSBidXMgaGFzIGJlZW4gcmVzZXQuXG4mIzQzOyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmUtaW5pdGlhbGl6ZSB0aGUgZGV2aWNlIGFmdGVyIGEgUENJIGZ1bmN0aW9uIHJlc2V0LiBUaGUgUENJIGNvcmUgaGFzXG4mIzQzOyAqIGFscmVhZHkgY2FsbGVkIHBjaV9yZXN0b3JlX3N0YXRlKCkgYmVmb3JlIGludm9raW5nIHRoaXMgY2FsbGJhY2ssIHNvIHRoZVxuJiM0MzsgKiBzYXZlZCBDb21tYW5kIHJlZ2lzdGVyIChpbmNsdWRpbmcgYnVzIG1hc3RlcmluZykgaXMgYmFjayBpbiBwbGFjZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGl4Z2JlX3BjaV9yZXNldF9kb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghYWRhcHRlcilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2ID0gYWRhcHRlci1cdTAwM2VuZXRkZXY7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdGFkYXB0ZXItXHUwMDNlaHcuaHdfYWRkciA9IGFkYXB0ZXItXHUwMDNlaW9fYWRkcjtcbiYjNDM7XHRpeGdiZV9yZXNldChhZGFwdGVyKTtcbiYjNDM7XHRJWEdCRV9XUklURV9SRUcoXHUwMDI2YWRhcHRlci1cdTAwM2VodywgSVhHQkVfV1VTLCB+MCk7XG4mIzQzO1x0cnVubmluZyA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbiYjNDM7XHRpZiAocnVubmluZykge1xuJiM0MztcdFx0ZXJyID0gaXhnYmVfb3BlbihuZXRkZXYpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRlX2Rldl9lcnIoXCYjMzQ7Q2Fubm90IHJlLW9wZW4gbmV0ZGV2IGFmdGVyIFBDSSByZXNldDogJWQuIEEgbmV3IHJlc2V0IGlzIG5lZWRlZC5cXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICBlcnIpO1xuJiM0MztcdFx0XHRkZXZfY2xvc2UobmV0ZGV2KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0LyogUmVzdG9yZSBwcmVzZW5jZSBzbyB1c2Vyc3BhY2UgY2FuIHJldHJ5IGxhdGVyLiBJZiBpeGdiZV9vcGVuKCkgZmFpbGVkLFxuJiM0MztcdCAqIGRldl9jbG9zZSgpIGNsZWFyZWQgSUZGX1VQIGZpcnN0IHNvIG5ldGlmX2RldmljZV9hdHRhY2goKSB3aWxsIG5vdCB3YWtlXG4mIzQzO1x0ICogVHggcXVldWVzIHdpdGhvdXQgYSBzdWNjZXNzZnVsIG9wZW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpO1xuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaXhnYmVfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi5cbiAgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG5AQCAtMTIzNzAsNiAmIzQzOzEyNDY0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaXhnYmVfZXJyX2hhbmRsZXIgPSB7XG4gXHQuZXJyb3JfZGV0ZWN0ZWQgPSBpeGdiZV9pb19lcnJvcl9kZXRlY3RlZCxcbiBcdC5zbG90X3Jlc2V0ID0gaXhnYmVfaW9fc2xvdF9yZXNldCxcbiBcdC5yZXN1bWUgPSBpeGdiZV9pb19yZXN1bWUsXG4mIzQzO1x0LnJlc2V0X3ByZXBhcmUgPSBpeGdiZV9wY2lfcmVzZXRfcHJlcGFyZSxcbiYjNDM7XHQucmVzZXRfZG9uZSA9IGl4Z2JlX3BjaV9yZXNldF9kb25lLFxuIH07XG4gXG4gc3RhdGljIERFRklORV9TSU1QTEVfREVWX1BNX09QUyhpeGdiZV9wbV9vcHMsIGl4Z2JlX3N1c3BlbmQsIGl4Z2JlX3Jlc3VtZSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94c2suY1xuaW5kZXggODlmOTZjNDYzZjAyMjQuLjAyODIwOTgyYjIwMjZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jXG5AQCAtMzksNyAmIzQzOzM5LDcgQEAgc3RhdGljIGludCBpeGdiZV94c2tfcG9vbF9lbmFibGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0aWZfcnVubmluZyA9IG5ldGlmX3J1bm5pbmcoYWRhcHRlci1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuJiM0MztcdGlmX3J1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKGFkYXB0ZXItXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICBpeGdiZV9lbmFibGVkX3hkcF9hZGFwdGVyKGFkYXB0ZXIpO1xuIFxuIFx0aWYgKGlmX3J1bm5pbmcpXG5AQCAtNzEsNyAmIzQzOzcxLDcgQEAgc3RhdGljIGludCBpeGdiZV94c2tfcG9vbF9kaXNhYmxlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1MTYgcWlkKVxuIFx0aWYgKCFwb29sKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmX3J1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKGFkYXB0ZXItXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRpZl9ydW5uaW5nID0gaXhnYmVfbmV0aWZfcnVubmluZyhhZGFwdGVyLVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgaXhnYmVfZW5hYmxlZF94ZHBfYWRhcHRlcihhZGFwdGVyKTtcbiBcbiBcdGlmIChpZl9ydW5uaW5nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA3OjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpeGdiZSBkcml2ZXIgKEludGVsIDEwIEdpZ2FiaXQgRXRoZXJuZXQpLCB3aGljaCBpcyBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlci4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzZWQgZm9yIGZ1enppbmcgKGxpa2UgUUVNVSBvciBHQ0UpIGRvIG5vdCBlbXVsYXRlIGl4Z2JlIGhhcmR3YXJlLCBtYWtpbmcgdGhlc2UgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkzODBkZTdiMjc2ODM0MmYwOThjZDhkYjM5ODk2ZmQyZGQ2ZGM3N2UKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxMSAwNzozMDowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZS5oCmluZGV4IDliODIxNzUyM2ZkMjY2Li40NGNmMDM3Y2MxNjdlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZS5oCkBAIC05NTQsNiAmIzQzOzk1NCwxMSBAQCBleHRlcm4gY2hhciBpeGdiZV9kcml2ZXJfbmFtZVtdOwogZXh0ZXJuIGNoYXIgaXhnYmVfZGVmYXVsdF9kZXZpY2VfZGVzY3JbXTsKICNlbmRpZiAvKiBJWEdCRV9GQ09FICovCiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXhnYmVfbmV0aWZfcnVubmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIG5ldGlmX3J1bm5pbmcobmV0ZGV2KSAmYW1wOyZhbXA7IG5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldik7CiYjNDM7fQomIzQzOwogaW50IGl4Z2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiBpbnQgaXhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiB2b2lkIGl4Z2JlX3VwKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2RjYl9ubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZGNiX25sLmMKaW5kZXggMzgyZDA5N2U0YjExZTAuLjdjNzQwOGQzMjc0MmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9kY2JfbmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9kY2JfbmwuYwpAQCAtMjc3LDE3ICYjNDM7Mjc3LDIzIEBAIHN0YXRpYyB2b2lkIGl4Z2JlX2RjYm5sX2dldF9wZmNfY2ZnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwcmlvcml0eSwKIHN0YXRpYyB2b2lkIGl4Z2JlX2RjYm5sX2RldnJlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBpeGdiZV9mcm9tX25ldGRldihkZXYpOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CiYjNDM7CWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcnVubmluZyA9IGl4Z2JlX25ldGlmX3J1bm5pbmcoZGV2KTsKIAogCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVfUkVTRVRUSU5HLCAmYW1wO2FkYXB0ZXItJmd0O3N0YXRlKSkKIAkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKJiM0MzsJaWYgKHJ1bm5pbmcpCiAJCWRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX3N0b3AoZGV2KTsKIAogCWl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CiAJaXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKJiM0MzsJaWYgKHJ1bm5pbmcpCiAJCWRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX29wZW4oZGV2KTsKIAogCWNsZWFyX2JpdChfX0lYR0JFX1JFU0VUVElORywgJmFtcDthZGFwdGVyLSZndDtzdGF0ZSk7CkBAIC01MTUsNiAmIzQzOzUyMSw5IEBAIHN0YXRpYyBpbnQgaXhnYmVfZGNibmxfaWVlZV9zZXRldHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAoIShhZGFwdGVyLSZndDtkY2J4X2NhcCAmYW1wOyBEQ0JfQ0FQX0RDQlhfVkVSX0lFRUUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpCiYjNDM7CQlyZXR1cm4gLUVORVRET1dOOwomIzQzOwogCWlmICghYWRhcHRlci0mZ3Q7aXhnYmVfaWVlZV9ldHMpIHsKIAkJYWRhcHRlci0mZ3Q7aXhnYmVfaWVlZV9ldHMgPSBrbWFsbG9jX29iaihzdHJ1Y3QgaWVlZV9ldHMpOwogCQlpZiAoIWFkYXB0ZXItJmd0O2l4Z2JlX2llZWVfZXRzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jCmluZGV4IDM2ZTQzYjVlODhkMWYwLi4wMmFmZjQxMTQyNmQxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYwpAQCAtNDY2LDYgJiM0Mzs0NjYsOSBAQCBzdGF0aWMgaW50IGl4Z2JlX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXUzMiBhZHZlcnRpc2VkLCBvbGQ7CiAJaW50IGVyciA9IDA7CiAKJiM0MzsJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKQomIzQzOwkJcmV0dXJuIC1FTkVURE9XTjsKJiM0MzsKIAlpZiAoKGh3LSZndDtwaHkubWVkaWFfdHlwZSA9PSBpeGdiZV9tZWRpYV90eXBlX2NvcHBlcikgfHwKIAkgICAgKGh3LSZndDtwaHkubXVsdGlzcGVlZF9maWJlcikpIHsKIAkJLyoKQEAgLTU3Niw5ICYjNDM7NTc5LDkgQEAgc3RhdGljIHZvaWQgaXhnYmVfc2V0X3BhdXNlcGFyYW1fZmluYWxpemUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkvKiBJZiB0aGUgdGhpbmcgY2hhbmdlZCB0aGVuIHdlJiMzOTtsbCB1cGRhdGUgYW5kIHVzZSBuZXcgYXV0b25lZy4gKi8KIAlpZiAobWVtY21wKGZjLCAmYW1wO2h3LSZndDtmYywgc2l6ZW9mKCpmYykpKSB7CiAJCWh3LSZndDtmYyA9ICpmYzsKLQkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJCWlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCQlpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOwotCQllbHNlCiYjNDM7CQllbHNlIGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKQogCQkJaXhnYmVfcmVzZXQoYWRhcHRlcik7CiAJfQogfQpAQCAtMTI2Niw3ICYjNDM7MTI2OSw3IEBAIHN0YXRpYyBpbnQgaXhnYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVfUkVTRVRUSU5HLCAmYW1wO2FkYXB0ZXItJmd0O3N0YXRlKSkKIAkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGFkYXB0ZXItJmd0O25ldGRldikpIHsKJiM0MzsJaWYgKCFpeGdiZV9uZXRpZl9ydW5uaW5nKGFkYXB0ZXItJmd0O25ldGRldikpIHsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IGFkYXB0ZXItJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQogCQkJYWRhcHRlci0mZ3Q7dHhfcmluZ1tpXS0mZ3Q7Y291bnQgPSBuZXdfdHhfY291bnQ7CiAJCWZvciAoaSA9IDA7IGkgJmx0OyBhZGFwdGVyLSZndDtudW1feGRwX3F1ZXVlczsgaSYjNDM7JiM0MzspCkBAIC0yMjQ5LDEwICYjNDM7MjI1MiwxMSBAQCBzdGF0aWMgdm9pZCBpeGdiZV9kaWFnX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCSAgICBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGhfdGVzdCwgdTY0ICpkYXRhKQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYobmV0ZGV2KTsKLQlib29sIGlmX3J1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7CiYjNDM7CWJvb2wgaWZfcnVubmluZyA9IGl4Z2JlX25ldGlmX3J1bm5pbmcobmV0ZGV2KTsKIAotCWlmIChpeGdiZV9yZW1vdmVkKGFkYXB0ZXItJmd0O2h3Lmh3X2FkZHIpKSB7Ci0JCWVfZXJyKGh3LCAmIzM0O0FkYXB0ZXIgcmVtb3ZlZCAtIHRlc3QgYmxvY2tlZFxuJiMzNDspOwomIzQzOwlpZiAoaXhnYmVfcmVtb3ZlZChhZGFwdGVyLSZndDtody5od19hZGRyKSB8fAomIzQzOwkgICAgIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpIHsKJiM0MzsJCWVfZXJyKGh3LCAmIzM0O0FkYXB0ZXIgcmVtb3ZlZCBvciBkZXRhY2hlZCAtIHRlc3QgYmxvY2tlZFxuJiMzNDspOwogCQlkYXRhWzBdID0gMTsKIAkJZGF0YVsxXSA9IDE7CiAJCWRhdGFbMl0gPSAxOwpAQCAtMjQ2Niw3ICYjNDM7MjQ3MCw3IEBAIHN0YXRpYyBpbnQgaXhnYmVfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYobmV0ZGV2KTsKIAotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiYjNDM7CWlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCWl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7CiAKIAlyZXR1cm4gMDsKQEAgLTI2NTAsNyAmIzQzOzI2NTQsOCBAQCBzdGF0aWMgaW50IGl4Z2JlX3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQllbHNlCiAJCQkvKiByeCBvbmx5IG9yIG1peGVkICovCiAJCQlxX3ZlY3Rvci0mZ3Q7aXRyID0gcnhfaXRyX3BhcmFtOwotCQlpeGdiZV93cml0ZV9laXRyKHFfdmVjdG9yKTsKJiM0MzsJCWlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKQomIzQzOwkJCWl4Z2JlX3dyaXRlX2VpdHIocV92ZWN0b3IpOwogCX0KIAogCS8qCkBAIC0zNjk0LDYgJiM0MzszNjk5LDkgQEAgc3RhdGljIGludCBpeGdiZV9zZXRfZWVlX2U2MTAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkgICAga2VkYXRhLSZndDtlZWVfZW5hYmxlZCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiYjNDM7CWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSkKJiM0MzsJCXJldHVybiAtRU5FVERPV047CiYjNDM7CiAJaHctJmd0O3BoeS5lZWVfc3BlZWRzX2FkdmVydGlzZWQgPSBrZWRhdGEtJmd0O2VlZV9lbmFibGVkID8KIAkJCQkJaHctJmd0O3BoeS5lZWVfc3BlZWRzX3N1cHBvcnRlZCA6IDA7CiAKQEAgLTM3MDksOSAmIzQzOzM3MTcsOSBAQCBzdGF0aWMgaW50IGl4Z2JlX3NldF9lZWVfZTYxMChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCWVsc2UKIAkJYWRhcHRlci0mZ3Q7ZmxhZ3MyICZhbXA7PSB+SVhHQkVfRkxBRzJfRUVFX0VOQUJMRUQ7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQomIzQzOwlpZiAoaXhnYmVfbmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQlpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOwotCWVsc2UKJiM0MzsJZWxzZSBpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSkKIAkJaXhnYmVfcmVzZXQoYWRhcHRlcik7CiAKIAlyZXR1cm4gMDsKQEAgLTM3OTMsOSAmIzQzOzM4MDEsOSBAQCBzdGF0aWMgaW50IGl4Z2JlX3NldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZWRhdGEpCiAJfQogCiAJLyogcmVzZXQgbGluayAqLwotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiYjNDM7CWlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCWl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7Ci0JZWxzZQomIzQzOwllbHNlIGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKQogCQlpeGdiZV9yZXNldChhZGFwdGVyKTsKIAogCXJldHVybiAwOwpAQCAtMzg1MSw3ICYjNDM7Mzg1OSw3IEBAIHN0YXRpYyBpbnQgaXhnYmVfc2V0X3ByaXZfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHByaXZfZmxhZ3MpCiAJCWFkYXB0ZXItJmd0O2ZsYWdzMiA9IGZsYWdzMjsKIAogCQkvKiByZXNldCBpbnRlcmZhY2UgdG8gcmVwb3B1bGF0ZSBxdWV1ZXMgKi8KLQkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJCWlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCQlpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZmNvZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZmNvZS5jCmluZGV4IDAxMWZkYTljNjE5MzljLi5lNGNkNDY3M2YyMWMyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZmNvZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2Zjb2UuYwpAQCAtODM2LDYgJiM0Mzs4MzYsMTAgQEAgaW50IGl4Z2JlX2Zjb2VfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBpeGdiZV9mcm9tX25ldGRldihuZXRkZXYpOwogCXN0cnVjdCBpeGdiZV9mY29lICpmY29lID0gJmFtcDthZGFwdGVyLSZndDtmY29lOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CiYjNDM7CWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSkKJiM0MzsJCXJldHVybiAtRU5FVERPV047CiAKIAlhdG9taWNfaW5jKCZhbXA7ZmNvZS0mZ3Q7cmVmY250KTsKIApAQCAtODQ1LDEyICYjNDM7ODQ5LDE0IEBAIGludCBpeGdiZV9mY29lX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWlmIChhZGFwdGVyLSZndDtmbGFncyAmYW1wOyBJWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJcnVubmluZyA9IGl4Z2JlX25ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsKIAllX2luZm8oZHJ2LCAmIzM0O0VuYWJsaW5nIEZDb0Ugb2ZmbG9hZCBmZWF0dXJlcy5cbiYjMzQ7KTsKIAogCWlmIChhZGFwdGVyLSZndDtmbGFncyAmYW1wOyBJWEdCRV9GTEFHX1NSSU9WX0VOQUJMRUQpCiAJCWVfd2Fybihwcm9iZSwgJiMzNDtFbmFibGluZyBGQ29FIG9uIFBGIHdpbGwgZGlzYWJsZSBsZWdhY3kgVkZzXG4mIzM0Oyk7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQomIzQzOwlpZiAocnVubmluZykKIAkJbmV0ZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc3RvcChuZXRkZXYpOwogCiAJLyogQWxsb2NhdGUgcGVyIENQVSBtZW1vcnkgdG8gdHJhY2sgRERQIHBvb2xzICovCkBAIC04NjUsNyAmIzQzOzg3MSw3IEBAIGludCBpeGdiZV9mY29lX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CiAJaXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJaWYgKHJ1bm5pbmcpCiAJCW5ldGRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX29wZW4obmV0ZGV2KTsKIAogCXJldHVybiAwOwpAQCAtODgyLDYgJiM0Mzs4ODgsMTAgQEAgaW50IGl4Z2JlX2Zjb2VfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiBpbnQgaXhnYmVfZmNvZV9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBpeGdiZV9mcm9tX25ldGRldihuZXRkZXYpOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CiYjNDM7CWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSkKJiM0MzsJCXJldHVybiAtRU5FVERPV047CiAKIAlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDthZGFwdGVyLSZndDtmY29lLnJlZmNudCkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtODg5LDggJiM0Mzs4OTksMTAgQEAgaW50IGl4Z2JlX2Zjb2VfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWlmICghKGFkYXB0ZXItJmd0O2ZsYWdzICZhbXA7IElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJcnVubmluZyA9IGl4Z2JlX25ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsKIAllX2luZm8oZHJ2LCAmIzM0O0Rpc2FibGluZyBGQ29FIG9mZmxvYWQgZmVhdHVyZXMuXG4mIzM0Oyk7Ci0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJaWYgKHJ1bm5pbmcpCiAJCW5ldGRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX3N0b3AobmV0ZGV2KTsKIAogCS8qIEZyZWUgcGVyIENQVSBtZW1vcnkgdG8gdHJhY2sgRERQIHBvb2xzICovCkBAIC05MDYsNyAmIzQzOzkxOCw3IEBAIGludCBpeGdiZV9mY29lX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlpeGdiZV9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpOwogCWl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTsKIAotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiYjNDM7CWlmIChydW5uaW5nKQogCQluZXRkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19vcGVuKG5ldGRldik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYwppbmRleCA4ODczYThjYzRhMTg1MS4uZjBjYjY0YTg0MDIxNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTc0MDEsNyAmIzQzOzc0MDEsNyBAQCBzdGF0aWMgaW50IGl4Z2JlX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpCiAJLyogbXVzdCBzZXQgbmV3IE1UVSBiZWZvcmUgY2FsbGluZyBkb3duIG9yIHVwICovCiAJV1JJVEVfT05DRShuZXRkZXYtJmd0O210dSwgbmV3X210dSk7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQomIzQzOwlpZiAoaXhnYmVfbmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQlpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOwogCiAJcmV0dXJuIDA7CkBAIC05OTAzLDYgJiM0Mzs5OTAzLDcgQEAgaW50IGl4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYoZGV2KTsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFtcDthZGFwdGVyLSZndDtodzsKJiM0MzsJYm9vbCBydW5uaW5nID0gaXhnYmVfbmV0aWZfcnVubmluZyhkZXYpOwogCiAJLyogSGFyZHdhcmUgc3VwcG9ydHMgdXAgdG8gOCB0cmFmZmljIGNsYXNzZXMgKi8KIAlpZiAodGMgJmd0OyBhZGFwdGVyLSZndDtkY2JfY2ZnLm51bV90Y3MucGdfdGNzKQpAQCAtOTkxNSw3ICYjNDM7OTkxNiwxMCBAQCBpbnQgaXhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJICogbWF0Y2ggcGFja2V0IGJ1ZmZlciBhbGlnbm1lbnQuIFVuZm9ydHVuYXRlbHksIHRoZQogCSAqIGhhcmR3YXJlIGlzIG5vdCBmbGV4aWJsZSBlbm91Z2ggdG8gZG8gdGhpcyBkeW5hbWljYWxseS4KIAkgKi8KLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQomIzQzOwlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpCiYjNDM7CQlyZXR1cm4gLUVORVRET1dOOwomIzQzOwomIzQzOwlpZiAocnVubmluZykKIAkJaXhnYmVfY2xvc2UoZGV2KTsKIAllbHNlCiAJCWl4Z2JlX3Jlc2V0KGFkYXB0ZXIpOwpAQCAtOTkyOCw3ICYjNDM7OTkzMiw3IEBAIGludCBpeGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YykKIAkJCWVfd2Fybihwcm9iZSwgJiMzNDtEQ0IgaXMgbm90IHN1cHBvcnRlZCB3aXRoIFhEUFxuJiMzNDspOwogCiAJCQlpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7Ci0JCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQomIzQzOwkJCWlmIChydW5uaW5nKQogCQkJCWl4Z2JlX29wZW4oZGV2KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC05OTYzLDcgJiM0Mzs5OTY3LDcgQEAgaW50IGl4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKQogCiAJaXhnYmVfZGVmcmFnX21hY3ZsYW5fcG9vbHMoZGV2KTsKIAotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCiYjNDM7CWlmIChydW5uaW5nKQogCQlyZXR1cm4gaXhnYmVfb3BlbihkZXYpOwogCiAJcmV0dXJuIDA7CkBAIC0xMDQ4OSw5ICYjNDM7MTA0OTMsOSBAQCB2b2lkIGl4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBpeGdiZV9mcm9tX25ldGRldihuZXRkZXYpOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJaWYgKGl4Z2JlX25ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJaXhnYmVfcmVpbml0X2xvY2tlZChhZGFwdGVyKTsKLQllbHNlCiYjNDM7CWVsc2UgaWYgKG5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpCiAJCWl4Z2JlX3Jlc2V0KGFkYXB0ZXIpOwogfQogCkBAIC0xMDgyMyw3ICYjNDM7MTA4MjcsNyBAQCBzdGF0aWMgdm9pZCAqaXhnYmVfZndkX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqcGRldiwgc3RydWN0IG5ldF9kZXZpY2UgKnZkZXYpCiAJYWNjZWwtJmd0O3Bvb2wgPSBwb29sOwogCWFjY2VsLSZndDtuZXRkZXYgPSB2ZGV2OwogCi0JaWYgKCFuZXRpZl9ydW5uaW5nKHBkZXYpKQomIzQzOwlpZiAoIWl4Z2JlX25ldGlmX3J1bm5pbmcocGRldikpCiAJCXJldHVybiBhY2NlbDsKIAogCWVyciA9IGl4Z2JlX2Z3ZF9yaW5nX3VwKGFkYXB0ZXIsIGFjY2VsKTsKQEAgLTEwOTU0LDggJiM0MzsxMDk1OCwxMCBAQCBzdGF0aWMgaW50IGl4Z2JlX3hkcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiAJCQlzeW5jaHJvbml6ZV9yY3UoKTsKIAkJZXJyID0gaXhnYmVfc2V0dXBfdGMoZGV2LCBhZGFwdGVyLSZndDtod190Y3MpOwogCi0JCWlmIChlcnIpCiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJeGNoZygmYW1wO2FkYXB0ZXItJmd0O3hkcF9wcm9nLCBvbGRfcHJvZyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KIAkJaWYgKCFwcm9nKQogCQkJeGRwX2ZlYXR1cmVzX2NsZWFyX3JlZGlyZWN0X3RhcmdldChkZXYpOwogCX0gZWxzZSB7CkBAIC0xMjMzOCw2ICYjNDM7MTIzNDQsOTQgQEAgc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgaXhnYmVfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlyZXR1cm4gcmVzdWx0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogaXhnYmVfcGNpX3Jlc2V0X3ByZXBhcmUgLSBjYWxsZWQgYmVmb3JlIHRoZSBwY2kgYnVzIGlzIHJlc2V0LgomIzQzOyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKJiM0MzsgKgomIzQzOyAqIFF1aWVzY2UgdGhlIGRyaXZlciBpbiBwcmVwYXJhdGlvbiBmb3IgYSBQQ0kgZnVuY3Rpb24gcmVzZXQuIENhbGxlZCBmcm9tCiYjNDM7ICogcGNpX2Rldl9zYXZlX2FuZF9kaXNhYmxlKCkgYmVmb3JlIHRoZSBjb3JlIHNhdmVzIGNvbmZpZyBzdGF0ZSBhbmQgd3JpdGVzCiYjNDM7ICogUENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFIHRvIGNsZWFyIGJ1cyBtYXN0ZXJpbmcgYW5kIE1NSU8gZGVjb2RlLCBzbyBNTUlPCiYjNDM7ICogYWNjZXNzIHRvIHRoZSBkZXZpY2UgaXMgc3RpbGwgdmFsaWQgaGVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpeGdiZV9wY2lfcmVzZXRfcHJlcGFyZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwomIzQzOwomIzQzOwlpZiAoIWFkYXB0ZXIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW5ldGRldiA9IGFkYXB0ZXItJmd0O25ldGRldjsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJCWl4Z2JlX2Nsb3NlX3N1c3BlbmQoYWRhcHRlcik7CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CS8qIF9fSVhHQkVfUkVTRVRUSU5HIGlzIGludGVudGlvbmFsbHkgbm90IHNldCBoZXJlOiBpdCBpcyBzcHVuIG9uCiYjNDM7CSAqIHdoaWxlIGhvbGRpbmcgcnRubCBieSBpeGdiZV9yZWluaXRfbG9ja2VkKCksIGl4Z2JlX2RjYm5sX2RldnJlc2V0KCkKJiM0MzsJICogYW5kIHRoZSBldGh0b29sIHJlc2V0IHBhdGhzLCBzbyBob2xkaW5nIGl0IGFjcm9zcyB0aGUgcnRubCBkcm9wCiYjNDM7CSAqIHdvdWxkIGRlYWRsb2NrIHRob3NlIGNhbGxlcnMgYWdhaW5zdCBpeGdiZV9wY2lfcmVzZXRfZG9uZSgpLCB3aGljaAomIzQzOwkgKiBuZWVkcyB0byByZS1hY3F1aXJlIHJ0bmwuICBEdXJpbmcgdGhlIHJlc2V0IHdpbmRvdyBjb25jdXJyZW50CiYjNDM7CSAqIHJ0bmwtaG9sZGluZyBwYXRocyBtdXN0IHRyZWF0IHRoZSBuZXRkZXYgYXMgZGV0YWNoZWQsIHdoaWxlIHRlYXJkb3duCiYjNDM7CSAqIHBhdGhzIGFsc28gb2JzZXJ2ZSBfX0lYR0JFX0RPV04gc2V0IGJ5IGl4Z2JlX2Rvd24oKSB2aWEKJiM0MzsJICogaXhnYmVfY2xvc2Vfc3VzcGVuZCgpLCBtYXRjaGluZyB0aGUgZXhpc3RpbmcgaXhnYmVfaW9fZXJyb3JfZGV0ZWN0ZWQoKQomIzQzOwkgKiBmbG93LgomIzQzOwkgKi8KJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KF9fSVhHQkVfU0VSVklDRV9JTklURUQsICZhbXA7YWRhcHRlci0mZ3Q7c3RhdGUpKSB7CiYjNDM7CQkvKiBUaGUgc2VydmljZSB0aW1lciB3YXMgYWxyZWFkeSBzdG9wcGVkIGJ5IGl4Z2JlX2Rvd24oKSB2aWEKJiM0MzsJCSAqIGl4Z2JlX2Nsb3NlX3N1c3BlbmQoKTsgaWYgdGhlIG5ldGRldiB3YXMgbm90IHJ1bm5pbmcsIHRoZQomIzQzOwkJICogdGltZXIgaXMgbm90IGFybWVkLiAgT25seSB0aGUgY3VycmVudGx5IHF1ZXVlZCBzZXJ2aWNlIHRhc2sKJiM0MzsJCSAqIChpZiBhbnkpIHN0aWxsIG5lZWRzIHRvIGJlIGZsdXNoZWQgaGVyZS4KJiM0MzsJCSAqLwomIzQzOwkJY2FuY2VsX3dvcmtfc3luYygmYW1wO2FkYXB0ZXItJmd0O3NlcnZpY2VfdGFzayk7CiYjNDM7CQljbGVhcl9iaXQoX19JWEdCRV9TRVJWSUNFX1NDSEVELCAmYW1wO2FkYXB0ZXItJmd0O3N0YXRlKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBpeGdiZV9wY2lfcmVzZXRfZG9uZSAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC4KJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZS1pbml0aWFsaXplIHRoZSBkZXZpY2UgYWZ0ZXIgYSBQQ0kgZnVuY3Rpb24gcmVzZXQuIFRoZSBQQ0kgY29yZSBoYXMKJiM0MzsgKiBhbHJlYWR5IGNhbGxlZCBwY2lfcmVzdG9yZV9zdGF0ZSgpIGJlZm9yZSBpbnZva2luZyB0aGlzIGNhbGxiYWNrLCBzbyB0aGUKJiM0MzsgKiBzYXZlZCBDb21tYW5kIHJlZ2lzdGVyIChpbmNsdWRpbmcgYnVzIG1hc3RlcmluZykgaXMgYmFjayBpbiBwbGFjZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpeGdiZV9wY2lfcmVzZXRfZG9uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlpZiAoIWFkYXB0ZXIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW5ldGRldiA9IGFkYXB0ZXItJmd0O25ldGRldjsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CWFkYXB0ZXItJmd0O2h3Lmh3X2FkZHIgPSBhZGFwdGVyLSZndDtpb19hZGRyOwomIzQzOwlpeGdiZV9yZXNldChhZGFwdGVyKTsKJiM0MzsJSVhHQkVfV1JJVEVfUkVHKCZhbXA7YWRhcHRlci0mZ3Q7aHcsIElYR0JFX1dVUywgfjApOwomIzQzOwlydW5uaW5nID0gbmV0aWZfcnVubmluZyhuZXRkZXYpOwomIzQzOwlpZiAocnVubmluZykgewomIzQzOwkJZXJyID0gaXhnYmVfb3BlbihuZXRkZXYpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCWVfZGV2X2VycigmIzM0O0Nhbm5vdCByZS1vcGVuIG5ldGRldiBhZnRlciBQQ0kgcmVzZXQ6ICVkLiBBIG5ldyByZXNldCBpcyBuZWVkZWQuXG4mIzM0OywKJiM0MzsJCQkJICBlcnIpOwomIzQzOwkJCWRldl9jbG9zZShuZXRkZXYpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CS8qIFJlc3RvcmUgcHJlc2VuY2Ugc28gdXNlcnNwYWNlIGNhbiByZXRyeSBsYXRlci4gSWYgaXhnYmVfb3BlbigpIGZhaWxlZCwKJiM0MzsJICogZGV2X2Nsb3NlKCkgY2xlYXJlZCBJRkZfVVAgZmlyc3Qgc28gbmV0aWZfZGV2aWNlX2F0dGFjaCgpIHdpbGwgbm90IHdha2UKJiM0MzsJICogVHggcXVldWVzIHdpdGhvdXQgYSBzdWNjZXNzZnVsIG9wZW4uCiYjNDM7CSAqLwomIzQzOwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpeGdiZV9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLgogICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQpAQCAtMTIzNzAsNiAmIzQzOzEyNDY0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaXhnYmVfZXJyX2hhbmRsZXIgPSB7CiAJLmVycm9yX2RldGVjdGVkID0gaXhnYmVfaW9fZXJyb3JfZGV0ZWN0ZWQsCiAJLnNsb3RfcmVzZXQgPSBpeGdiZV9pb19zbG90X3Jlc2V0LAogCS5yZXN1bWUgPSBpeGdiZV9pb19yZXN1bWUsCiYjNDM7CS5yZXNldF9wcmVwYXJlID0gaXhnYmVfcGNpX3Jlc2V0X3ByZXBhcmUsCiYjNDM7CS5yZXNldF9kb25lID0gaXhnYmVfcGNpX3Jlc2V0X2RvbmUsCiB9OwogCiBzdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKGl4Z2JlX3BtX29wcywgaXhnYmVfc3VzcGVuZCwgaXhnYmVfcmVzdW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmMKaW5kZXggODlmOTZjNDYzZjAyMjQuLjAyODIwOTgyYjIwMjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94c2suYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94c2suYwpAQCAtMzksNyAmIzQzOzM5LDcgQEAgc3RhdGljIGludCBpeGdiZV94c2tfcG9vbF9lbmFibGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWlmX3J1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKGFkYXB0ZXItJmd0O25ldGRldikgJmFtcDsmYW1wOwomIzQzOwlpZl9ydW5uaW5nID0gaXhnYmVfbmV0aWZfcnVubmluZyhhZGFwdGVyLSZndDtuZXRkZXYpICZhbXA7JmFtcDsKIAkJICAgICBpeGdiZV9lbmFibGVkX3hkcF9hZGFwdGVyKGFkYXB0ZXIpOwogCiAJaWYgKGlmX3J1bm5pbmcpCkBAIC03MSw3ICYjNDM7NzEsNyBAQCBzdGF0aWMgaW50IGl4Z2JlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBxaWQpCiAJaWYgKCFwb29sKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmX3J1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKGFkYXB0ZXItJmd0O25ldGRldikgJmFtcDsmYW1wOwomIzQzOwlpZl9ydW5uaW5nID0gaXhnYmVfbmV0aWZfcnVubmluZyhhZGFwdGVyLSZndDtuZXRkZXYpICZhbXA7JmFtcDsKIAkJICAgICBpeGdiZV9lbmFibGVkX3hkcF9hZGFwdGVyKGFkYXB0ZXIpOwogCiAJaWYgKGlmX3J1bm5pbmcpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgb2YgdGhlIGl4Z2JlIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGBpeGdiZWAgZHJpdmVyLCBJbnRlbCYjMzk7cyAxMCBHaWdhYml0IEV0aGVybmV0IFBDSSBFeHByZXNzIGRyaXZlci4gSXQmIzM5O3MgbWFraW5nIHNvbWUgY2hhbmdlcyB0byBob3cgdGhlIGRyaXZlciBjaGVja3MgdGhlIG5ldHdvcmsgaW50ZXJmYWNlJiMzOTtzIHN0YXRlLCBhZGRpbmcgUENJIHJlc2V0IGhhbmRsZXJzLiBTZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwYXRjaC4gQnV0IG15IG1haW4gY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIGl0JiMzOTtzIHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6eiBpdC4KCk15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBhIHBoeXNpY2FsIG5ldHdvcmsgY2FyZCBkcml2ZXIuIEZ1enppbmcgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycyBpcyBnZW5lcmFsbHkgdHJpY2t5LCB1bmxlc3MgaXQmIzM5O3MgZW11bGF0ZWQgaW4gc29mdHdhcmUuIFNvLCBjYW4gdGhpcyBiZSBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFPyBUeXBpY2FsbHksIG5vLCB1bmxlc3Mgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgc29tZXRoaW5nIGxpa2UgYGUxMDAwZWAgaW4gUUVNVSwgb3IgYHZpcnRpb2AsIG9yIGB2ZXRoYCwgd2hpY2ggYXJlIGFsbCBlbXVsYXRpb25zLgoKV2FpdC4uLiBkb2VzIFFFTVUgZW11bGF0ZSBgaXhnYmVgPyBJIGNhbiYjMzk7dCBpbW1lZGlhdGVseSBjaGVjayB0aGUgUUVNVSBzb3VyY2UgZGlyZWN0bHkuIEkmIzM5O2QgdHlwaWNhbGx5IHNlYXJjaCBmb3IgdGhlIG1vZHVsZSBuYW1lIG9yIHNpbWlsYXIsIGJ1dCBJIGRvbiYjMzk7dCBoYXZlIGFjY2VzcyB0byB0aGF0IGhlcmUuIEFuZCwgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IHR5cGljYWxseSBmdXp6IFBDSSBkZXZpY2VzIGRpcmVjdGx5LCB1bmxlc3MgdGhleSYjMzk7cmUgZW11bGF0ZWQgb3IgdXNpbmcgc29tZSBicmlkZ2UgbGlrZSB2aGNpL3ZmaW8vZXRjLiBTeXprYWxsZXIgbWlnaHQgaGF2ZSBzb21lIGxpbWl0ZWQgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzIHRocm91Z2ggYSB2aXJ0dWFsIGJyaWRnZSwgYnV0IHRoZXkmIzM5O3JlIHVzdWFsbHkgc3BlY2lmaWMgb3IgbGltaXRlZC4KCkJ1dCB3YWl0IGEgbWludXRlLCBRRU1VICpkb2VzKiBoYXZlIG5ldHdvcmsgZGV2aWNlIGVtdWxhdGlvbnMuIEkga25vdyBpdCBoYXMgYGUxMDAwYCwgYGUxMDAwZWAsIGFuZCBgaWdiYC4gRG9lcyBRRU1VIGhhdmUgYGl4Z2JlYD8gTGV0IG1lIGxvb2suLi4gTm9wZSwgUUVNVSBoYXMgYGlnYmAsIHRoZSBJbnRlbCA4MjU3Ni4gYGl4Z2JlYCBpcyB0aGUgSW50ZWwgODI1OTkuIFFFTVUgZG9lc24mIzM5O3Qgc2VlbSB0byBoYXZlIG5hdGl2ZSBgaXhnYmVgIGVtdWxhdGlvbi4gSSBjYW4mIzM5O3QgcXVpY2tseSB2ZXJpZnkgdGhpcywgYnV0IHRoYXQmIzM5O3MgbXkgaHVuY2guCgpEb2VzIHN5emthbGxlciB0YXJnZXQgdGhpcz8gRG9lcyBpdCB1c2UgYHN5el9wY2lfZGV2aWNlYD8gTm8uIElzIGBpeGdiZWAgcmVhY2hhYmxlIGluIEdDRSBvciBRRU1VPyBHQ0UgdXNlcyBgdmlydGlvLW5ldGAgb3IgYGd2ZWAuIFFFTVUgdXNlcyBgZTEwMDBgLCBgZTEwMDBlYCwgYHZpcnRpby1uZXRgLCBldGMuIEkmIzM5O20gZ29pbmcgaW4gY2lyY2xlcyBoZXJlIQoKVGhlIGNvcmUgcHJvYmxlbSwgYW5kIHRoZSBwcm9tcHQgcmVpbmZvcmNlcyB0aGlzOiBUaGUgcGF0Y2ggZXhwbGljaXRseSBtZW50aW9ucyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgdW5sZXNzIGhhcmR3YXJlIGlzIGVtdWxhdGVkLiBJZiBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgYGl4Z2JlYCwgdGhlbiB0aGlzIHBhdGNoJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eSAqaXMqIHVucmVhY2hhYmxlIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLgoKSSYjMzk7ZCBuZWVkIHRvIGNoZWNrIGlmIFFFTVUgKmFjdHVhbGx5KiBlbXVsYXRlcyBgaXhnYmVgLiBJIGNhbiYjMzk7dCBjaGVjayBRRU1VIHNvdXJjZSwgYnV0IEkgY2FuIGNoZWNrIGZvciBhbnkgc3l6Ym90IHJlcG9ydHMgcmVsYXRlZCB0byBgaXhnYmVgLiBMZXQgbWUgbG9vay4uLiBOb3BlLiBRRU1VIGRvZXNuJiMzOTt0IHNlZW0gdG8gZW11bGF0ZSBpdC4gSXQgKmRvZXMqIGVtdWxhdGUgYGUxMDAwYCwgYGUxMDAwZWAsIGFuZCBgaWdiYC4KCk9rYXksIHNvIG1heWJlIEkgc2hvdWxkIGxvb2sgYXQgdGhlIGtlcm5lbCBzb3VyY2UuIERvZXMgdGhlIGtlcm5lbCBoYXZlIGFueSBoaW50cyBvZiBgaXhnYmVgIGJlaW5nIGZ1enplZCBvciB1c2VkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzPyBOby4gSSAqY291bGQqIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBoZXJlLCBiZWNhdXNlIG9mIHRoYXQuIFRoaXMgc2VlbXMgbGlrZSBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlciwgbm90IHNvbWV0aGluZyB0eXBpY2FsbHkgZnV6emVkIHVubGVzcyB0aGVyZSBpcyBlbXVsYXRpb24uCgpXYWl0LCBpcyBgaXhnYmVgIGVtdWxhdGVkPyBJIG5lZWQgdG8gc2VhcmNoIHRoZSB3ZWI6IFFFTVUgbmV0d29yayBkZXZpY2VzLiBObyBgaXhnYmVgLiBRRU1VIGFkZGVkIGBpZ2JgIHJlY2VudGx5IChJbnRlbCA4MjU3NikuIGBpeGdiZWAgaXMgMTBHYkUgKEludGVsIDgyNTk5KS4gUUVNVSBkb2VzbiYjMzk7dCBoYXZlIGl4Z2JlIGVtdWxhdGlvbi4gRXZlbiBpZiBpdCBkaWQsIHN5emthbGxlciBwcm9iYWJseSB3b3VsZG4mIzM5O3QgY29uZmlndXJlIGl0IHVubGVzcyBpdCB3YXMgYSBkZWZhdWx0LgoKU28gSSB0aGluayBJIGNhbiBjb25jbHVkZTogVW5sZXNzIHNvbWV0aGluZyB2ZXJ5IHNwZWNpZmljIGNhbiBiZSBhcnJhbmdlZCwgdGhlIHBhdGNoIGlzIGxpa2VseSBub3QgZnV6emFibGUuIFVubGVzcyB0aGVyZSBpcyBlbXVsYXRpb24uCgpMZXQmIzM5O3MgY2hlY2sgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzYCwgYnV0IEkmIzM5O2QgZ3Vlc3MgdGhlcmUmIzM5O3Mgbm90aGluZyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpeGdiZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3RpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmMtOC0gKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX3ZsYW4uYzo5OiAqICAjIGV0aHRvb2wgLUsgaXhnYmUyIHJ4dmxhbiBvZmZcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmMtMTAtICpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmMtMTEtICogVmVyaWZ5IHNldHRpbmc6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jOjEyOiAqICAjIGV0aHRvb2wgLWsgaXhnYmUyIHwgZ3JlcCByeC12bGFuLW9mZmxvYWRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmMtMTMtICogIHJ4LXZsYW4tb2ZmbG9hZDogb2ZmXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX3ZsYW4uYz0xMjc9Q29tbWFuZHMgdG8gc2V0dXAgVkxBTiBvbiBMaW51eCB0byB0ZXN0IHBhY2tldHMgZ2V0cyBkcm9wcGVkOlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX3ZsYW4uYy0xMjgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jOjEyOTogZXhwb3J0IFJPT1RERVY9aXhnYmUyXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jLTEzMC0gZXhwb3J0IFZMQU5JRD00MDExXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX3ZsYW4uYz0yNjU9Q29tbWFuZHMgdG8gc2V0dXAgVEMgdG8gdXNlIGFib3ZlIGJwZiBwcm9nOlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX3ZsYW4uYy0yNjYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jOjI2NzpleHBvcnQgUk9PVERFVj1peGdiZTJcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmMtMjY4LWV4cG9ydCBGSUxFPXhkcF92bGFuMDFfa2Vybi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MTkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgaXhnYmUgRHJpdmVyIGFuZCBTeXprYWxsZXImIzM5O3MgUENJIENhcGFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyBgaXhnYmVgIG1lbnRpb25lZCBjYXN1YWxseSBpbiB0aGUgY29tbWVudHMsIHdoaWNoIGRvZXNuJiMzOTt0IHJlYWxseSBnaXZlIG1lIGFueSBhY3Rpb25hYmxlIGluZm9ybWF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhYm91dCB0aGUgYWN0dWFsIGRyaXZlciBkaXJlY3Rvcnk6IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9gPyBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGRyaXZlciBsaXZlcy4KCk5vdywgbXkgaW5pdGlhbCBpbnR1aXRpb24gaXMgdGhhdCBzeXprYWxsZXIgKnJhcmVseSogZ2V0cyBpbnZvbHZlZCBpbiBmdXp6aW5nIHBoeXNpY2FsIEV0aGVybmV0IGRyaXZlcnMsIHVubGVzcyB0aGV5JiMzOTtyZSBydW5uaW5nIGluIHNvbWUga2luZCBvZiBlbXVsYXRlZCBlbnZpcm9ubWVudC4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBhcHByb2FjaC4KCkJ1dC4uLiBoYW5nIG9uLiBEb2VzIHN5emthbGxlciBldmVuICpoYXZlKiBhIG1lY2hhbmlzbSB0byBmdXp6IFBDSSBkZXZpY2VzPyBJIHNlZW0gdG8gcmVjYWxsIHNvbWV0aGluZyBhYm91dCBpdC4gTGV0IG1lIHRyeSB0byByZW1lbWJlciwgc29tZXRoaW5nIGxpa2UgYHN5el9wY2lfZGV2aWNlYCBvciBgc3l6X3BjaV9kZXZpY2Vfc2V0dXBgLi4uIE5vcGUsIHRoYXQmIzM5O3Mgbm90IHJpbmdpbmcgYW55IGJlbGxzLgoKV2FpdCBhIG1pbnV0ZSwgbWF5YmUgaXQgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyPyBJIGNvdWxkIGJlIG1pc3JlbWVtYmVyaW5nLCBvciBwZXJoYXBzIGl0JiMzOTtzIGJlZW4gYWRkZWQgcmVjZW50bHkuIExldCYjMzk7cyBub3QgYXNzdW1lIGFueXRoaW5nLiBJIG5lZWQgdG8gZ2V0IGJhY2sgdG8gYmFzaWNzIGFuZCBjaGVjayBpZiB0aGVyZSYjMzk7cyBhbnkgb2ZmaWNpYWwgc3l6a2FsbGVyIGRvY3VtZW50YXRpb24gb3IgZGVzY3JpcHRpb25zIHRoYXQgZm9jdXMgb24gUENJIGRldmljZSBmdXp6aW5nLiBJIGhhdmUgdG8gZmluZCBjb25jcmV0ZSBldmlkZW5jZSBhbmQgbm90IHJlbHkgb24gaGFsZi1yZW1lbWJlcmVkIG5vdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXpfcGNpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE3NgoJCQkJCQkJb3V0cHV0OiA4OAoJCQkJCQkJdGhvdWdodHM6IDU1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIGl4Z2JlIERyaXZlcioqCgpPa2F5LCBoZXJlJiMzOTtzIGhvdyBJJiMzOTttIGFwcHJvYWNoaW5nIHRoaXMuIFRoZSBwcm9tcHQgc3BlY2lmaWVzIGNyaXRlcmlhIGZvciBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVsZXZhbnQgY2xhdXNlIGlzIGFib3V0IGNvZGUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBpeGdiZWAsIGJlaW5nIGEgcGh5c2ljYWwgbmV0d29yayBjYXJkIGRyaXZlciAoSW50ZWwgMTBHYkUpLCBpcyBpbmhlcmVudGx5IHVucmVhY2hhYmxlIGluIHRoZXNlIHZpcnR1YWxpemVkIHNldHVwcy4gUUVNVSBlbXVsYXRlcyBvdGhlciBJbnRlbCBuZXR3b3JrIGNhcmRzIGxpa2UgZTEwMDAsIGUxMDAwZSwgYW5kIGlnYiwgYnV0IG5vdCBpeGdiZSwgYXMgZmFyIGFzIEkga25vdy4KCkkgbmVlZCB0byBjb25maXJtLCBzbyBJJiMzOTttIGRvaW5nIGEgcXVpY2sgbWVudGFsIHNlYXJjaC4gTm8gYHN5el9wY2lgIHdvdWxkIGJlIHVzZWQgaGVyZSBlaXRoZXIsIHNvIHRoYXQgaXMgYW5vdGhlciBwb2ludC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIG15IGtub3dsZWRnZSBiYXNlIOKAkyBsZXQmIzM5O3Mgc2VlLCBoYXMgUUVNVSBhZGRlZCBzdXBwb3J0IGZvciBpeGdiZT8gQWgsIEkgcmVtZW1iZXIgdGhleSBhZGRlZCBgaWdiYCByZWNlbnRseSwgYnV0IG5vdCBgaXhnYmVgLiBJIGtub3cgdGhhdCBzdGFuZGFyZCBRRU1VIGRvZXNuJiMzOTt0IG9mZmVyIGBpeGdiZWAgZW11bGF0aW9uLCB0aG91Z2ggc29tZSBmb3JrcyAqbWlnaHQqLCBidXQgaXQmIzM5O3Mgbm90IHRoZSBub3JtLiBBbmQgZXZlbiBpZiBhIGZvcmsgaGFkIGl0LCBzeXprYWxsZXIgaXMgdW5saWtlbHkgdG8gY29uZmlndXJlIG9yIHVzZSBzdWNoIGEgZGV2aWNlLiBTbywgaXQmIzM5O3Mgbm90IGdlbmVyYWxseSBhdmFpbGFibGUgaW4gYSBmdXp6aW5nIGNvbnRleHQuCgpDYW4gSSByZWFjaCB0aGUgY29kZSBzb21lIG90aGVyIHdheT8gUGVyaGFwcyB0aHJvdWdoIFZGSU8gKFZpcnR1YWwgRnVuY3Rpb24gSS9PKT8gQnV0IFZGSU8gcmVsaWVzIG9uIGhhcmR3YXJlIHBhc3N0aHJvdWdoIG9yLCBhdCBsZWFzdCwgYSBtb2NrIGRldmljZS4gSXMgdGhlcmUgYSBtb2NrIGRldmljZSBmb3IgYGl4Z2JlYD8gTm9wZSwgbm90IHRoYXQgSSYjMzk7bSBhd2FyZSBvZi4KClNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhci4gVGhlIGNvZGUgcGF0aHMgd2l0aGluIHRoZSBgaXhnYmVgIGRyaXZlciBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSB3aGljaCBzeXprYWxsZXIgZG9lcyBub3QgaGF2ZSBhY2Nlc3MgdG8uCgpMZXQgbWUganVzdCB2ZXJpZnkgdGhhdCB0aGVyZSYjMzk7cyBubyB2aXJ0dWFsIGRyaXZlciBhdmFpbGFibGUgaW4gdGhlIGtlcm5lbCB0aGF0IEkmIzM5O20gbWlzc2luZy4gUmlnaHQsIGBpeGdiZXZmYCBpcyB0aGUgdmlydHVhbCBmdW5jdGlvbiBkcml2ZXIsIGJ1dCB0aGF0ICpzdGlsbCogcmVxdWlyZXMgYSBwaHlzaWNhbCBQRiAocGh5c2ljYWwgZnVuY3Rpb24pIG9yIGFuIGVtdWxhdG9yLiBJdCBkb2VzbiYjMzk7dCBtYWtlIHRoaXMgcGF0aCByZWFjaGFibGUsIHNvIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXhnYmUgZHJpdmVyIChJbnRlbCAxMCBHaWdhYml0IEV0aGVybmV0KSwgd2hpY2ggaXMgYSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXIuIFN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2VkIGZvciBmdXp6aW5nIChsaWtlIFFFTVUgb3IgR0NFKSBkbyBub3QgZW11bGF0ZSBpeGdiZSBoYXJkd2FyZSwgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXhnYmUgZHJpdmVyIChJbnRlbCAxMCBHaWdhYml0IEV0aGVybmV0KSwgd2hpY2ggaXMgYSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXIuIFN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2VkIGZvciBmdXp6aW5nIChsaWtlIFFFTVUgb3IgR0NFKSBkbyBub3QgZW11bGF0ZSBpeGdiZSBoYXJkd2FyZSwgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTFUMDc6MzA6MDUuNTQxMDkzNTYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM5ODMyNzU1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpeGdiZSBkcml2ZXIgKEludGVsIDEwIEdpZ2FiaXQgRXRoZXJuZXQpLCB3aGljaCBpcyBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlci4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzZWQgZm9yIGZ1enppbmcgKGxpa2UgUUVNVSBvciBHQ0UpIGRvIG5vdCBlbXVsYXRlIGl4Z2JlIGhhcmR3YXJlLCBtYWtpbmcgdGhlc2UgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA3OjMwOjA1LjU0MTA5ODA5MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkxMTQ4NzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTM4MGRlN2IyNzY4MzQyZjA5OGNkOGRiMzk4OTZmZDJkZDZkYzc3ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxMSAwNzozMDowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmUuaFxcbmluZGV4IDliODIxNzUyM2ZkMjY2Li40NGNmMDM3Y2MxNjdlYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZS5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmUuaFxcbkBAIC05NTQsNiArOTU0LDExIEBAIGV4dGVybiBjaGFyIGl4Z2JlX2RyaXZlcl9uYW1lW107XFxuIGV4dGVybiBjaGFyIGl4Z2JlX2RlZmF1bHRfZGV2aWNlX2Rlc2NyW107XFxuICNlbmRpZiAvKiBJWEdCRV9GQ09FICovXFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgaXhnYmVfbmV0aWZfcnVubmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbit7XFxuK1xcdHJldHVybiBuZXRpZl9ydW5uaW5nKG5ldGRldikgXFx1MDAyNlxcdTAwMjYgbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KTtcXG4rfVxcbitcXG4gaW50IGl4Z2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuIGludCBpeGdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcXG4gdm9pZCBpeGdiZV91cChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2RjYl9ubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZGNiX25sLmNcXG5pbmRleCAzODJkMDk3ZTRiMTFlMC4uN2M3NDA4ZDMyNzQyYzcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZGNiX25sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9kY2JfbmwuY1xcbkBAIC0yNzcsMTcgKzI3NywyMyBAQCBzdGF0aWMgdm9pZCBpeGdiZV9kY2JubF9nZXRfcGZjX2NmZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcHJpb3JpdHksXFxuIHN0YXRpYyB2b2lkIGl4Z2JlX2RjYm5sX2RldnJlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBpeGdiZV9mcm9tX25ldGRldihkZXYpO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcbitcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJ1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKGRldik7XFxuIFxcbiBcXHR3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX0lYR0JFX1JFU0VUVElORywgXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXN0YXRlKSlcXG4gXFx0XFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xcbiBcXG4tXFx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcXG4rXFx0aWYgKHJ1bm5pbmcpXFxuIFxcdFxcdGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3N0b3AoZGV2KTtcXG4gXFxuIFxcdGl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7XFxuIFxcdGl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTtcXG4gXFxuLVxcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXFxuK1xcdGlmIChydW5uaW5nKVxcbiBcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19vcGVuKGRldik7XFxuIFxcbiBcXHRjbGVhcl9iaXQoX19JWEdCRV9SRVNFVFRJTkcsIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VzdGF0ZSk7XFxuQEAgLTUxNSw2ICs1MjEsOSBAQCBzdGF0aWMgaW50IGl4Z2JlX2RjYm5sX2llZWVfc2V0ZXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdGlmICghKGFkYXB0ZXItXFx1MDAzZWRjYnhfY2FwIFxcdTAwMjYgRENCX0NBUF9EQ0JYX1ZFUl9JRUVFKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXFxuK1xcdFxcdHJldHVybiAtRU5FVERPV047XFxuK1xcbiBcXHRpZiAoIWFkYXB0ZXItXFx1MDAzZWl4Z2JlX2llZWVfZXRzKSB7XFxuIFxcdFxcdGFkYXB0ZXItXFx1MDAzZWl4Z2JlX2llZWVfZXRzID0ga21hbGxvY19vYmooc3RydWN0IGllZWVfZXRzKTtcXG4gXFx0XFx0aWYgKCFhZGFwdGVyLVxcdTAwM2VpeGdiZV9pZWVlX2V0cylcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jXFxuaW5kZXggMzZlNDNiNWU4OGQxZjAuLjAyYWZmNDExNDI2ZDE5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2V0aHRvb2wuY1xcbkBAIC00NjYsNiArNDY2LDkgQEAgc3RhdGljIGludCBpeGdiZV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0dTMyIGFkdmVydGlzZWQsIG9sZDtcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcbitcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXFxuK1xcdFxcdHJldHVybiAtRU5FVERPV047XFxuK1xcbiBcXHRpZiAoKGh3LVxcdTAwM2VwaHkubWVkaWFfdHlwZSA9PSBpeGdiZV9tZWRpYV90eXBlX2NvcHBlcikgfHxcXG4gXFx0ICAgIChody1cXHUwMDNlcGh5Lm11bHRpc3BlZWRfZmliZXIpKSB7XFxuIFxcdFxcdC8qXFxuQEAgLTU3Niw5ICs1NzksOSBAQCBzdGF0aWMgdm9pZCBpeGdiZV9zZXRfcGF1c2VwYXJhbV9maW5hbGl6ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHQvKiBJZiB0aGUgdGhpbmcgY2hhbmdlZCB0aGVuIHdlJ2xsIHVwZGF0ZSBhbmQgdXNlIG5ldyBhdXRvbmVnLiAqL1xcbiBcXHRpZiAobWVtY21wKGZjLCBcXHUwMDI2aHctXFx1MDAzZWZjLCBzaXplb2YoKmZjKSkpIHtcXG4gXFx0XFx0aHctXFx1MDAzZWZjID0gKmZjO1xcbi1cXHRcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbitcXHRcXHRpZiAoaXhnYmVfbmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbiBcXHRcXHRcXHRpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpO1xcbi1cXHRcXHRlbHNlXFxuK1xcdFxcdGVsc2UgaWYgKG5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXFxuIFxcdFxcdFxcdGl4Z2JlX3Jlc2V0KGFkYXB0ZXIpO1xcbiBcXHR9XFxuIH1cXG5AQCAtMTI2Niw3ICsxMjY5LDcgQEAgc3RhdGljIGludCBpeGdiZV9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVfUkVTRVRUSU5HLCBcXHUwMDI2YWRhcHRlci1cXHUwMDNlc3RhdGUpKVxcbiBcXHRcXHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XFxuIFxcbi1cXHRpZiAoIW5ldGlmX3J1bm5pbmcoYWRhcHRlci1cXHUwMDNlbmV0ZGV2KSkge1xcbitcXHRpZiAoIWl4Z2JlX25ldGlmX3J1bm5pbmcoYWRhcHRlci1cXHUwMDNlbmV0ZGV2KSkge1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYWRhcHRlci1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbiBcXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2V0eF9yaW5nW2ldLVxcdTAwM2Vjb3VudCA9IG5ld190eF9jb3VudDtcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFkYXB0ZXItXFx1MDAzZW51bV94ZHBfcXVldWVzOyBpKyspXFxuQEAgLTIyNDksMTAgKzIyNTIsMTEgQEAgc3RhdGljIHZvaWQgaXhnYmVfZGlhZ190ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGhfdGVzdCwgdTY0ICpkYXRhKVxcbiB7XFxuIFxcdHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYobmV0ZGV2KTtcXG4tXFx0Ym9vbCBpZl9ydW5uaW5nID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbitcXHRib29sIGlmX3J1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldik7XFxuIFxcbi1cXHRpZiAoaXhnYmVfcmVtb3ZlZChhZGFwdGVyLVxcdTAwM2Vody5od19hZGRyKSkge1xcbi1cXHRcXHRlX2VycihodywgXFxcIkFkYXB0ZXIgcmVtb3ZlZCAtIHRlc3QgYmxvY2tlZFxcXFxuXFxcIik7XFxuK1xcdGlmIChpeGdiZV9yZW1vdmVkKGFkYXB0ZXItXFx1MDAzZWh3Lmh3X2FkZHIpIHx8XFxuK1xcdCAgICAhbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSkge1xcbitcXHRcXHRlX2VycihodywgXFxcIkFkYXB0ZXIgcmVtb3ZlZCBvciBkZXRhY2hlZCAtIHRlc3QgYmxvY2tlZFxcXFxuXFxcIik7XFxuIFxcdFxcdGRhdGFbMF0gPSAxO1xcbiBcXHRcXHRkYXRhWzFdID0gMTtcXG4gXFx0XFx0ZGF0YVsyXSA9IDE7XFxuQEAgLTI0NjYsNyArMjQ3MCw3IEBAIHN0YXRpYyBpbnQgaXhnYmVfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYobmV0ZGV2KTtcXG4gXFxuLVxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdGlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuIFxcdFxcdGl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMjY1MCw3ICsyNjU0LDggQEAgc3RhdGljIGludCBpeGdiZV9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHQvKiByeCBvbmx5IG9yIG1peGVkICovXFxuIFxcdFxcdFxcdHFfdmVjdG9yLVxcdTAwM2VpdHIgPSByeF9pdHJfcGFyYW07XFxuLVxcdFxcdGl4Z2JlX3dyaXRlX2VpdHIocV92ZWN0b3IpO1xcbitcXHRcXHRpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcXG4rXFx0XFx0XFx0aXhnYmVfd3JpdGVfZWl0cihxX3ZlY3Rvcik7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuQEAgLTM2OTQsNiArMzY5OSw5IEBAIHN0YXRpYyBpbnQgaXhnYmVfc2V0X2VlZV9lNjEwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdCAgICBrZWRhdGEtXFx1MDAzZWVlZV9lbmFibGVkKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbitcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXFxuK1xcdFxcdHJldHVybiAtRU5FVERPV047XFxuK1xcbiBcXHRody1cXHUwMDNlcGh5LmVlZV9zcGVlZHNfYWR2ZXJ0aXNlZCA9IGtlZGF0YS1cXHUwMDNlZWVlX2VuYWJsZWQgP1xcbiBcXHRcXHRcXHRcXHRcXHRody1cXHUwMDNlcGh5LmVlZV9zcGVlZHNfc3VwcG9ydGVkIDogMDtcXG4gXFxuQEAgLTM3MDksOSArMzcxNyw5IEBAIHN0YXRpYyBpbnQgaXhnYmVfc2V0X2VlZV9lNjEwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdGVsc2VcXG4gXFx0XFx0YWRhcHRlci1cXHUwMDNlZmxhZ3MyIFxcdTAwMjY9IH5JWEdCRV9GTEFHMl9FRUVfRU5BQkxFRDtcXG4gXFxuLVxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdGlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuIFxcdFxcdGl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7XFxuLVxcdGVsc2VcXG4rXFx0ZWxzZSBpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcXG4gXFx0XFx0aXhnYmVfcmVzZXQoYWRhcHRlcik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMzc5Myw5ICszODAxLDkgQEAgc3RhdGljIGludCBpeGdiZV9zZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVkYXRhKVxcbiBcXHR9XFxuIFxcbiBcXHQvKiByZXNldCBsaW5rICovXFxuLVxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdGlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuIFxcdFxcdGl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7XFxuLVxcdGVsc2VcXG4rXFx0ZWxzZSBpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcXG4gXFx0XFx0aXhnYmVfcmVzZXQoYWRhcHRlcik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMzg1MSw3ICszODU5LDcgQEAgc3RhdGljIGludCBpeGdiZV9zZXRfcHJpdl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgcHJpdl9mbGFncylcXG4gXFx0XFx0YWRhcHRlci1cXHUwMDNlZmxhZ3MyID0gZmxhZ3MyO1xcbiBcXG4gXFx0XFx0LyogcmVzZXQgaW50ZXJmYWNlIHRvIHJlcG9wdWxhdGUgcXVldWVzICovXFxuLVxcdFxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdFxcdGlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuIFxcdFxcdFxcdGl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2Zjb2UuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2Zjb2UuY1xcbmluZGV4IDAxMWZkYTljNjE5MzljLi5lNGNkNDY3M2YyMWMyYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9mY29lLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9mY29lLmNcXG5AQCAtODM2LDYgKzgzNiwxMCBAQCBpbnQgaXhnYmVfZmNvZV9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KG5ldGRldik7XFxuIFxcdHN0cnVjdCBpeGdiZV9mY29lICpmY29lID0gXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWZjb2U7XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFxuK1xcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcXG4rXFx0XFx0cmV0dXJuIC1FTkVURE9XTjtcXG4gXFxuIFxcdGF0b21pY19pbmMoXFx1MDAyNmZjb2UtXFx1MDAzZXJlZmNudCk7XFxuIFxcbkBAIC04NDUsMTIgKzg0OSwxNCBAQCBpbnQgaXhnYmVfZmNvZV9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aWYgKGFkYXB0ZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0cnVubmluZyA9IGl4Z2JlX25ldGlmX3J1bm5pbmcobmV0ZGV2KTtcXG4rXFxuIFxcdGVfaW5mbyhkcnYsIFxcXCJFbmFibGluZyBGQ29FIG9mZmxvYWQgZmVhdHVyZXMuXFxcXG5cXFwiKTtcXG4gXFxuIFxcdGlmIChhZGFwdGVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRClcXG4gXFx0XFx0ZV93YXJuKHByb2JlLCBcXFwiRW5hYmxpbmcgRkNvRSBvbiBQRiB3aWxsIGRpc2FibGUgbGVnYWN5IFZGc1xcXFxuXFxcIik7XFxuIFxcbi1cXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbitcXHRpZiAocnVubmluZylcXG4gXFx0XFx0bmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xcbiBcXG4gXFx0LyogQWxsb2NhdGUgcGVyIENQVSBtZW1vcnkgdG8gdHJhY2sgRERQIHBvb2xzICovXFxuQEAgLTg2NSw3ICs4NzEsNyBAQCBpbnQgaXhnYmVfZmNvZV9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aXhnYmVfY2xlYXJfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTtcXG4gXFx0aXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xcbiBcXG4tXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcXG4rXFx0aWYgKHJ1bm5pbmcpXFxuIFxcdFxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC04ODIsNiArODg4LDEwIEBAIGludCBpeGdiZV9mY29lX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBpbnQgaXhnYmVfZmNvZV9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBpeGdiZV9mcm9tX25ldGRldihuZXRkZXYpO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcbitcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXFxuK1xcdFxcdHJldHVybiAtRU5FVERPV047XFxuIFxcbiBcXHRpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWZjb2UucmVmY250KSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTg4OSw4ICs4OTksMTAgQEAgaW50IGl4Z2JlX2Zjb2VfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRpZiAoIShhZGFwdGVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRydW5uaW5nID0gaXhnYmVfbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbitcXG4gXFx0ZV9pbmZvKGRydiwgXFxcIkRpc2FibGluZyBGQ29FIG9mZmxvYWQgZmVhdHVyZXMuXFxcXG5cXFwiKTtcXG4tXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcXG4rXFx0aWYgKHJ1bm5pbmcpXFxuIFxcdFxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcXG4gXFxuIFxcdC8qIEZyZWUgcGVyIENQVSBtZW1vcnkgdG8gdHJhY2sgRERQIHBvb2xzICovXFxuQEAgLTkwNiw3ICs5MTgsNyBAQCBpbnQgaXhnYmVfZmNvZV9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7XFxuIFxcdGl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTtcXG4gXFxuLVxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdGlmIChydW5uaW5nKVxcbiBcXHRcXHRuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19vcGVuKG5ldGRldik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jXFxuaW5kZXggODg3M2E4Y2M0YTE4NTEuLmYwY2I2NGE4NDAyMTRiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uY1xcbkBAIC03NDAxLDcgKzc0MDEsNyBAQCBzdGF0aWMgaW50IGl4Z2JlX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpXFxuIFxcdC8qIG11c3Qgc2V0IG5ldyBNVFUgYmVmb3JlIGNhbGxpbmcgZG93biBvciB1cCAqL1xcbiBcXHRXUklURV9PTkNFKG5ldGRldi1cXHUwMDNlbXR1LCBuZXdfbXR1KTtcXG4gXFxuLVxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdGlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuIFxcdFxcdGl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtOTkwMyw2ICs5OTAzLDcgQEAgaW50IGl4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxcbiB7XFxuIFxcdHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYoZGV2KTtcXG4gXFx0c3RydWN0IGl4Z2JlX2h3ICpodyA9IFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VodztcXG4rXFx0Ym9vbCBydW5uaW5nID0gaXhnYmVfbmV0aWZfcnVubmluZyhkZXYpO1xcbiBcXG4gXFx0LyogSGFyZHdhcmUgc3VwcG9ydHMgdXAgdG8gOCB0cmFmZmljIGNsYXNzZXMgKi9cXG4gXFx0aWYgKHRjIFxcdTAwM2UgYWRhcHRlci1cXHUwMDNlZGNiX2NmZy5udW1fdGNzLnBnX3RjcylcXG5AQCAtOTkxNSw3ICs5OTE2LDEwIEBAIGludCBpeGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcXG4gXFx0ICogbWF0Y2ggcGFja2V0IGJ1ZmZlciBhbGlnbm1lbnQuIFVuZm9ydHVuYXRlbHksIHRoZVxcbiBcXHQgKiBoYXJkd2FyZSBpcyBub3QgZmxleGlibGUgZW5vdWdoIHRvIGRvIHRoaXMgZHluYW1pY2FsbHkuXFxuIFxcdCAqL1xcbi1cXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxcbitcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXFxuK1xcdFxcdHJldHVybiAtRU5FVERPV047XFxuK1xcbitcXHRpZiAocnVubmluZylcXG4gXFx0XFx0aXhnYmVfY2xvc2UoZGV2KTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRpeGdiZV9yZXNldChhZGFwdGVyKTtcXG5AQCAtOTkyOCw3ICs5OTMyLDcgQEAgaW50IGl4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxcbiBcXHRcXHRcXHRlX3dhcm4ocHJvYmUsIFxcXCJEQ0IgaXMgbm90IHN1cHBvcnRlZCB3aXRoIFhEUFxcXFxuXFxcIik7XFxuIFxcbiBcXHRcXHRcXHRpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7XFxuLVxcdFxcdFxcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXFxuK1xcdFxcdFxcdGlmIChydW5uaW5nKVxcbiBcXHRcXHRcXHRcXHRpeGdiZV9vcGVuKGRldik7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHR9XFxuQEAgLTk5NjMsNyArOTk2Nyw3IEBAIGludCBpeGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcXG4gXFxuIFxcdGl4Z2JlX2RlZnJhZ19tYWN2bGFuX3Bvb2xzKGRldik7XFxuIFxcbi1cXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxcbitcXHRpZiAocnVubmluZylcXG4gXFx0XFx0cmV0dXJuIGl4Z2JlX29wZW4oZGV2KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC0xMDQ4OSw5ICsxMDQ5Myw5IEBAIHZvaWQgaXhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KG5ldGRldik7XFxuIFxcbi1cXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbitcXHRpZiAoaXhnYmVfbmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbiBcXHRcXHRpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpO1xcbi1cXHRlbHNlXFxuK1xcdGVsc2UgaWYgKG5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXFxuIFxcdFxcdGl4Z2JlX3Jlc2V0KGFkYXB0ZXIpO1xcbiB9XFxuIFxcbkBAIC0xMDgyMyw3ICsxMDgyNyw3IEBAIHN0YXRpYyB2b2lkICppeGdiZV9md2RfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpwZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqdmRldilcXG4gXFx0YWNjZWwtXFx1MDAzZXBvb2wgPSBwb29sO1xcbiBcXHRhY2NlbC1cXHUwMDNlbmV0ZGV2ID0gdmRldjtcXG4gXFxuLVxcdGlmICghbmV0aWZfcnVubmluZyhwZGV2KSlcXG4rXFx0aWYgKCFpeGdiZV9uZXRpZl9ydW5uaW5nKHBkZXYpKVxcbiBcXHRcXHRyZXR1cm4gYWNjZWw7XFxuIFxcbiBcXHRlcnIgPSBpeGdiZV9md2RfcmluZ191cChhZGFwdGVyLCBhY2NlbCk7XFxuQEAgLTEwOTU0LDggKzEwOTU4LDEwIEBAIHN0YXRpYyBpbnQgaXhnYmVfeGRwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4gXFx0XFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuIFxcdFxcdGVyciA9IGl4Z2JlX3NldHVwX3RjKGRldiwgYWRhcHRlci1cXHUwMDNlaHdfdGNzKTtcXG4gXFxuLVxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0eGNoZyhcXHUwMDI2YWRhcHRlci1cXHUwMDNleGRwX3Byb2csIG9sZF9wcm9nKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4gXFx0XFx0aWYgKCFwcm9nKVxcbiBcXHRcXHRcXHR4ZHBfZmVhdHVyZXNfY2xlYXJfcmVkaXJlY3RfdGFyZ2V0KGRldik7XFxuIFxcdH0gZWxzZSB7XFxuQEAgLTEyMzM4LDYgKzEyMzQ0LDk0IEBAIHN0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGl4Z2JlX2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdHJldHVybiByZXN1bHQ7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBpeGdiZV9wY2lfcmVzZXRfcHJlcGFyZSAtIGNhbGxlZCBiZWZvcmUgdGhlIHBjaSBidXMgaXMgcmVzZXQuXFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcXG4rICpcXG4rICogUXVpZXNjZSB0aGUgZHJpdmVyIGluIHByZXBhcmF0aW9uIGZvciBhIFBDSSBmdW5jdGlvbiByZXNldC4gQ2FsbGVkIGZyb21cXG4rICogcGNpX2Rldl9zYXZlX2FuZF9kaXNhYmxlKCkgYmVmb3JlIHRoZSBjb3JlIHNhdmVzIGNvbmZpZyBzdGF0ZSBhbmQgd3JpdGVzXFxuKyAqIFBDSV9DT01NQU5EX0lOVFhfRElTQUJMRSB0byBjbGVhciBidXMgbWFzdGVyaW5nIGFuZCBNTUlPIGRlY29kZSwgc28gTU1JT1xcbisgKiBhY2Nlc3MgdG8gdGhlIGRldmljZSBpcyBzdGlsbCB2YWxpZCBoZXJlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgaXhnYmVfcGNpX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuK1xcbitcXHRpZiAoIWFkYXB0ZXIpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG5ldGRldiA9IGFkYXB0ZXItXFx1MDAzZW5ldGRldjtcXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRuZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7XFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdFxcdGl4Z2JlX2Nsb3NlX3N1c3BlbmQoYWRhcHRlcik7XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbitcXHQvKiBfX0lYR0JFX1JFU0VUVElORyBpcyBpbnRlbnRpb25hbGx5IG5vdCBzZXQgaGVyZTogaXQgaXMgc3B1biBvblxcbitcXHQgKiB3aGlsZSBob2xkaW5nIHJ0bmwgYnkgaXhnYmVfcmVpbml0X2xvY2tlZCgpLCBpeGdiZV9kY2JubF9kZXZyZXNldCgpXFxuK1xcdCAqIGFuZCB0aGUgZXRodG9vbCByZXNldCBwYXRocywgc28gaG9sZGluZyBpdCBhY3Jvc3MgdGhlIHJ0bmwgZHJvcFxcbitcXHQgKiB3b3VsZCBkZWFkbG9jayB0aG9zZSBjYWxsZXJzIGFnYWluc3QgaXhnYmVfcGNpX3Jlc2V0X2RvbmUoKSwgd2hpY2hcXG4rXFx0ICogbmVlZHMgdG8gcmUtYWNxdWlyZSBydG5sLiAgRHVyaW5nIHRoZSByZXNldCB3aW5kb3cgY29uY3VycmVudFxcbitcXHQgKiBydG5sLWhvbGRpbmcgcGF0aHMgbXVzdCB0cmVhdCB0aGUgbmV0ZGV2IGFzIGRldGFjaGVkLCB3aGlsZSB0ZWFyZG93blxcbitcXHQgKiBwYXRocyBhbHNvIG9ic2VydmUgX19JWEdCRV9ET1dOIHNldCBieSBpeGdiZV9kb3duKCkgdmlhXFxuK1xcdCAqIGl4Z2JlX2Nsb3NlX3N1c3BlbmQoKSwgbWF0Y2hpbmcgdGhlIGV4aXN0aW5nIGl4Z2JlX2lvX2Vycm9yX2RldGVjdGVkKClcXG4rXFx0ICogZmxvdy5cXG4rXFx0ICovXFxuK1xcbitcXHRpZiAodGVzdF9iaXQoX19JWEdCRV9TRVJWSUNFX0lOSVRFRCwgXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXN0YXRlKSkge1xcbitcXHRcXHQvKiBUaGUgc2VydmljZSB0aW1lciB3YXMgYWxyZWFkeSBzdG9wcGVkIGJ5IGl4Z2JlX2Rvd24oKSB2aWFcXG4rXFx0XFx0ICogaXhnYmVfY2xvc2Vfc3VzcGVuZCgpOyBpZiB0aGUgbmV0ZGV2IHdhcyBub3QgcnVubmluZywgdGhlXFxuK1xcdFxcdCAqIHRpbWVyIGlzIG5vdCBhcm1lZC4gIE9ubHkgdGhlIGN1cnJlbnRseSBxdWV1ZWQgc2VydmljZSB0YXNrXFxuK1xcdFxcdCAqIChpZiBhbnkpIHN0aWxsIG5lZWRzIHRvIGJlIGZsdXNoZWQgaGVyZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXNlcnZpY2VfdGFzayk7XFxuK1xcdFxcdGNsZWFyX2JpdChfX0lYR0JFX1NFUlZJQ0VfU0NIRUQsIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rLyoqXFxuKyAqIGl4Z2JlX3BjaV9yZXNldF9kb25lIC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LlxcbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXFxuKyAqXFxuKyAqIFJlLWluaXRpYWxpemUgdGhlIGRldmljZSBhZnRlciBhIFBDSSBmdW5jdGlvbiByZXNldC4gVGhlIFBDSSBjb3JlIGhhc1xcbisgKiBhbHJlYWR5IGNhbGxlZCBwY2lfcmVzdG9yZV9zdGF0ZSgpIGJlZm9yZSBpbnZva2luZyB0aGlzIGNhbGxiYWNrLCBzbyB0aGVcXG4rICogc2F2ZWQgQ29tbWFuZCByZWdpc3RlciAoaW5jbHVkaW5nIGJ1cyBtYXN0ZXJpbmcpIGlzIGJhY2sgaW4gcGxhY2UuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpeGdiZV9wY2lfcmVzZXRfZG9uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4re1xcbitcXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4rXFx0Ym9vbCBydW5uaW5nO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFxuK1xcdGlmICghYWRhcHRlcilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bmV0ZGV2ID0gYWRhcHRlci1cXHUwMDNlbmV0ZGV2O1xcbitcXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcdGFkYXB0ZXItXFx1MDAzZWh3Lmh3X2FkZHIgPSBhZGFwdGVyLVxcdTAwM2Vpb19hZGRyO1xcbitcXHRpeGdiZV9yZXNldChhZGFwdGVyKTtcXG4rXFx0SVhHQkVfV1JJVEVfUkVHKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VodywgSVhHQkVfV1VTLCB+MCk7XFxuK1xcdHJ1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XFxuK1xcdGlmIChydW5uaW5nKSB7XFxuK1xcdFxcdGVyciA9IGl4Z2JlX29wZW4obmV0ZGV2KTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRlX2Rldl9lcnIoXFxcIkNhbm5vdCByZS1vcGVuIG5ldGRldiBhZnRlciBQQ0kgcmVzZXQ6ICVkLiBBIG5ldyByZXNldCBpcyBuZWVkZWQuXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgIGVycik7XFxuK1xcdFxcdFxcdGRldl9jbG9zZShuZXRkZXYpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0LyogUmVzdG9yZSBwcmVzZW5jZSBzbyB1c2Vyc3BhY2UgY2FuIHJldHJ5IGxhdGVyLiBJZiBpeGdiZV9vcGVuKCkgZmFpbGVkLFxcbitcXHQgKiBkZXZfY2xvc2UoKSBjbGVhcmVkIElGRl9VUCBmaXJzdCBzbyBuZXRpZl9kZXZpY2VfYXR0YWNoKCkgd2lsbCBub3Qgd2FrZVxcbitcXHQgKiBUeCBxdWV1ZXMgd2l0aG91dCBhIHN1Y2Nlc3NmdWwgb3Blbi5cXG4rXFx0ICovXFxuK1xcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGl4Z2JlX2lvX3Jlc3VtZSAtIGNhbGxlZCB3aGVuIHRyYWZmaWMgY2FuIHN0YXJ0IGZsb3dpbmcgYWdhaW4uXFxuICAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcXG5AQCAtMTIzNzAsNiArMTI0NjQsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBpeGdiZV9lcnJfaGFuZGxlciA9IHtcXG4gXFx0LmVycm9yX2RldGVjdGVkID0gaXhnYmVfaW9fZXJyb3JfZGV0ZWN0ZWQsXFxuIFxcdC5zbG90X3Jlc2V0ID0gaXhnYmVfaW9fc2xvdF9yZXNldCxcXG4gXFx0LnJlc3VtZSA9IGl4Z2JlX2lvX3Jlc3VtZSxcXG4rXFx0LnJlc2V0X3ByZXBhcmUgPSBpeGdiZV9wY2lfcmVzZXRfcHJlcGFyZSxcXG4rXFx0LnJlc2V0X2RvbmUgPSBpeGdiZV9wY2lfcmVzZXRfZG9uZSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBERUZJTkVfU0lNUExFX0RFVl9QTV9PUFMoaXhnYmVfcG1fb3BzLCBpeGdiZV9zdXNwZW5kLCBpeGdiZV9yZXN1bWUpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94c2suYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jXFxuaW5kZXggODlmOTZjNDYzZjAyMjQuLjAyODIwOTgyYjIwMjZhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmNcXG5AQCAtMzksNyArMzksNyBAQCBzdGF0aWMgaW50IGl4Z2JlX3hza19wb29sX2VuYWJsZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcixcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdGlmX3J1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKGFkYXB0ZXItXFx1MDAzZW5ldGRldikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0aWZfcnVubmluZyA9IGl4Z2JlX25ldGlmX3J1bm5pbmcoYWRhcHRlci1cXHUwMDNlbmV0ZGV2KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgIGl4Z2JlX2VuYWJsZWRfeGRwX2FkYXB0ZXIoYWRhcHRlcik7XFxuIFxcbiBcXHRpZiAoaWZfcnVubmluZylcXG5AQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgaW50IGl4Z2JlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBxaWQpXFxuIFxcdGlmICghcG9vbClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRpZl9ydW5uaW5nID0gbmV0aWZfcnVubmluZyhhZGFwdGVyLVxcdTAwM2VuZXRkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdGlmX3J1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKGFkYXB0ZXItXFx1MDAzZW5ldGRldikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICBpeGdiZV9lbmFibGVkX3hkcF9hZGFwdGVyKGFkYXB0ZXIpO1xcbiBcXG4gXFx0aWYgKGlmX3J1bm5pbmcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA3OjMwOjA2LjEzMzEwMzY0NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzOTEyNjAyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpeGdiZSBkcml2ZXIgKEludGVsIDEwIEdpZ2FiaXQgRXRoZXJuZXQpLCB3aGljaCBpcyBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlci4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzZWQgZm9yIGZ1enppbmcgKGxpa2UgUUVNVSBvciBHQ0UpIGRvIG5vdCBlbXVsYXRlIGl4Z2JlIGhhcmR3YXJlLCBtYWtpbmcgdGhlc2UgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTM4MGRlN2IyNzY4MzQyZjA5OGNkOGRiMzk4OTZmZDJkZDZkYzc3ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDExIDA3OjMwOjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlLmhcbmluZGV4IDliODIxNzUyM2ZkMjY2Li40NGNmMDM3Y2MxNjdlYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlLmhcbkBAIC05NTQsNiArOTU0LDExIEBAIGV4dGVybiBjaGFyIGl4Z2JlX2RyaXZlcl9uYW1lW107XG4gZXh0ZXJuIGNoYXIgaXhnYmVfZGVmYXVsdF9kZXZpY2VfZGVzY3JbXTtcbiAjZW5kaWYgLyogSVhHQkVfRkNPRSAqL1xuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV9uZXRpZl9ydW5uaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4re1xuK1x0cmV0dXJuIG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjYgbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KTtcbit9XG4rXG4gaW50IGl4Z2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4gaW50IGl4Z2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuIHZvaWQgaXhnYmVfdXAoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2RjYl9ubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZGNiX25sLmNcbmluZGV4IDM4MmQwOTdlNGIxMWUwLi43Yzc0MDhkMzI3NDJjNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2RjYl9ubC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9kY2JfbmwuY1xuQEAgLTI3NywxNyArMjc3LDIzIEBAIHN0YXRpYyB2b2lkIGl4Z2JlX2RjYm5sX2dldF9wZmNfY2ZnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwcmlvcml0eSxcbiBzdGF0aWMgdm9pZCBpeGdiZV9kY2JubF9kZXZyZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYoZGV2KTtcbitcdGJvb2wgcnVubmluZztcbitcbitcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cnVubmluZyA9IGl4Z2JlX25ldGlmX3J1bm5pbmcoZGV2KTtcbiBcbiBcdHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVfUkVTRVRUSU5HLCBcdTAwMjZhZGFwdGVyLVx1MDAzZXN0YXRlKSlcbiBcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcbitcdGlmIChydW5uaW5nKVxuIFx0XHRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RvcChkZXYpO1xuIFxuIFx0aXhnYmVfY2xlYXJfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTtcbiBcdGl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4rXHRpZiAocnVubmluZylcbiBcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX29wZW4oZGV2KTtcbiBcbiBcdGNsZWFyX2JpdChfX0lYR0JFX1JFU0VUVElORywgXHUwMDI2YWRhcHRlci1cdTAwM2VzdGF0ZSk7XG5AQCAtNTE1LDYgKzUyMSw5IEBAIHN0YXRpYyBpbnQgaXhnYmVfZGNibmxfaWVlZV9zZXRldHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmICghKGFkYXB0ZXItXHUwMDNlZGNieF9jYXAgXHUwMDI2IERDQl9DQVBfRENCWF9WRVJfSUVFRSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuK1x0XHRyZXR1cm4gLUVORVRET1dOO1xuK1xuIFx0aWYgKCFhZGFwdGVyLVx1MDAzZWl4Z2JlX2llZWVfZXRzKSB7XG4gXHRcdGFkYXB0ZXItXHUwMDNlaXhnYmVfaWVlZV9ldHMgPSBrbWFsbG9jX29iaihzdHJ1Y3QgaWVlZV9ldHMpO1xuIFx0XHRpZiAoIWFkYXB0ZXItXHUwMDNlaXhnYmVfaWVlZV9ldHMpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jXG5pbmRleCAzNmU0M2I1ZTg4ZDFmMC4uMDJhZmY0MTE0MjZkMTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2V0aHRvb2wuY1xuQEAgLTQ2Niw2ICs0NjYsOSBAQCBzdGF0aWMgaW50IGl4Z2JlX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0dTMyIGFkdmVydGlzZWQsIG9sZDtcbiBcdGludCBlcnIgPSAwO1xuIFxuK1x0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxuK1x0XHRyZXR1cm4gLUVORVRET1dOO1xuK1xuIFx0aWYgKChody1cdTAwM2VwaHkubWVkaWFfdHlwZSA9PSBpeGdiZV9tZWRpYV90eXBlX2NvcHBlcikgfHxcbiBcdCAgICAoaHctXHUwMDNlcGh5Lm11bHRpc3BlZWRfZmliZXIpKSB7XG4gXHRcdC8qXG5AQCAtNTc2LDkgKzU3OSw5IEBAIHN0YXRpYyB2b2lkIGl4Z2JlX3NldF9wYXVzZXBhcmFtX2ZpbmFsaXplKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHQvKiBJZiB0aGUgdGhpbmcgY2hhbmdlZCB0aGVuIHdlJ2xsIHVwZGF0ZSBhbmQgdXNlIG5ldyBhdXRvbmVnLiAqL1xuIFx0aWYgKG1lbWNtcChmYywgXHUwMDI2aHctXHUwMDNlZmMsIHNpemVvZigqZmMpKSkge1xuIFx0XHRody1cdTAwM2VmYyA9ICpmYztcbi1cdFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbitcdFx0aWYgKGl4Z2JlX25ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiBcdFx0XHRpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpO1xuLVx0XHRlbHNlXG4rXHRcdGVsc2UgaWYgKG5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4gXHRcdFx0aXhnYmVfcmVzZXQoYWRhcHRlcik7XG4gXHR9XG4gfVxuQEAgLTEyNjYsNyArMTI2OSw3IEBAIHN0YXRpYyBpbnQgaXhnYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0d2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JWEdCRV9SRVNFVFRJTkcsIFx1MDAyNmFkYXB0ZXItXHUwMDNlc3RhdGUpKVxuIFx0XHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XG4gXG4tXHRpZiAoIW5ldGlmX3J1bm5pbmcoYWRhcHRlci1cdTAwM2VuZXRkZXYpKSB7XG4rXHRpZiAoIWl4Z2JlX25ldGlmX3J1bm5pbmcoYWRhcHRlci1cdTAwM2VuZXRkZXYpKSB7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFkYXB0ZXItXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxuIFx0XHRcdGFkYXB0ZXItXHUwMDNldHhfcmluZ1tpXS1cdTAwM2Vjb3VudCA9IG5ld190eF9jb3VudDtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYWRhcHRlci1cdTAwM2VudW1feGRwX3F1ZXVlczsgaSsrKVxuQEAgLTIyNDksMTAgKzIyNTIsMTEgQEAgc3RhdGljIHZvaWQgaXhnYmVfZGlhZ190ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0ICAgIHN0cnVjdCBldGh0b29sX3Rlc3QgKmV0aF90ZXN0LCB1NjQgKmRhdGEpXG4ge1xuIFx0c3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBpeGdiZV9mcm9tX25ldGRldihuZXRkZXYpO1xuLVx0Ym9vbCBpZl9ydW5uaW5nID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuK1x0Ym9vbCBpZl9ydW5uaW5nID0gaXhnYmVfbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuIFxuLVx0aWYgKGl4Z2JlX3JlbW92ZWQoYWRhcHRlci1cdTAwM2Vody5od19hZGRyKSkge1xuLVx0XHRlX2VycihodywgXCJBZGFwdGVyIHJlbW92ZWQgLSB0ZXN0IGJsb2NrZWRcXG5cIik7XG4rXHRpZiAoaXhnYmVfcmVtb3ZlZChhZGFwdGVyLVx1MDAzZWh3Lmh3X2FkZHIpIHx8XG4rXHQgICAgIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpIHtcbitcdFx0ZV9lcnIoaHcsIFwiQWRhcHRlciByZW1vdmVkIG9yIGRldGFjaGVkIC0gdGVzdCBibG9ja2VkXFxuXCIpO1xuIFx0XHRkYXRhWzBdID0gMTtcbiBcdFx0ZGF0YVsxXSA9IDE7XG4gXHRcdGRhdGFbMl0gPSAxO1xuQEAgLTI0NjYsNyArMjQ3MCw3IEBAIHN0YXRpYyBpbnQgaXhnYmVfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYobmV0ZGV2KTtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRpZiAoaXhnYmVfbmV0aWZfcnVubmluZyhuZXRkZXYpKVxuIFx0XHRpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMjY1MCw3ICsyNjU0LDggQEAgc3RhdGljIGludCBpeGdiZV9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ZWxzZVxuIFx0XHRcdC8qIHJ4IG9ubHkgb3IgbWl4ZWQgKi9cbiBcdFx0XHRxX3ZlY3Rvci1cdTAwM2VpdHIgPSByeF9pdHJfcGFyYW07XG4tXHRcdGl4Z2JlX3dyaXRlX2VpdHIocV92ZWN0b3IpO1xuK1x0XHRpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbitcdFx0XHRpeGdiZV93cml0ZV9laXRyKHFfdmVjdG9yKTtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMzY5NCw2ICszNjk5LDkgQEAgc3RhdGljIGludCBpeGdiZV9zZXRfZWVlX2U2MTAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdCAgICBrZWRhdGEtXHUwMDNlZWVlX2VuYWJsZWQpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbitcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbitcdFx0cmV0dXJuIC1FTkVURE9XTjtcbitcbiBcdGh3LVx1MDAzZXBoeS5lZWVfc3BlZWRzX2FkdmVydGlzZWQgPSBrZWRhdGEtXHUwMDNlZWVlX2VuYWJsZWQgP1xuIFx0XHRcdFx0XHRody1cdTAwM2VwaHkuZWVlX3NwZWVkc19zdXBwb3J0ZWQgOiAwO1xuIFxuQEAgLTM3MDksOSArMzcxNyw5IEBAIHN0YXRpYyBpbnQgaXhnYmVfc2V0X2VlZV9lNjEwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRlbHNlXG4gXHRcdGFkYXB0ZXItXHUwMDNlZmxhZ3MyIFx1MDAyNj0gfklYR0JFX0ZMQUcyX0VFRV9FTkFCTEVEO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbitcdGlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpXG4gXHRcdGl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7XG4tXHRlbHNlXG4rXHRlbHNlIGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxuIFx0XHRpeGdiZV9yZXNldChhZGFwdGVyKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTM3OTMsOSArMzgwMSw5IEBAIHN0YXRpYyBpbnQgaXhnYmVfc2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplZGF0YSlcbiBcdH1cbiBcbiBcdC8qIHJlc2V0IGxpbmsgKi9cbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRpZiAoaXhnYmVfbmV0aWZfcnVubmluZyhuZXRkZXYpKVxuIFx0XHRpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpO1xuLVx0ZWxzZVxuK1x0ZWxzZSBpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbiBcdFx0aXhnYmVfcmVzZXQoYWRhcHRlcik7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0zODUxLDcgKzM4NTksNyBAQCBzdGF0aWMgaW50IGl4Z2JlX3NldF9wcml2X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBwcml2X2ZsYWdzKVxuIFx0XHRhZGFwdGVyLVx1MDAzZWZsYWdzMiA9IGZsYWdzMjtcbiBcbiBcdFx0LyogcmVzZXQgaW50ZXJmYWNlIHRvIHJlcG9wdWxhdGUgcXVldWVzICovXG4tXHRcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRcdGlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpXG4gXHRcdFx0aXhnYmVfcmVpbml0X2xvY2tlZChhZGFwdGVyKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9mY29lLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9mY29lLmNcbmluZGV4IDAxMWZkYTljNjE5MzljLi5lNGNkNDY3M2YyMWMyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2Zjb2UuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZmNvZS5jXG5AQCAtODM2LDYgKzgzNiwxMCBAQCBpbnQgaXhnYmVfZmNvZV9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KG5ldGRldik7XG4gXHRzdHJ1Y3QgaXhnYmVfZmNvZSAqZmNvZSA9IFx1MDAyNmFkYXB0ZXItXHUwMDNlZmNvZTtcbitcdGJvb2wgcnVubmluZztcbitcbitcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbitcdFx0cmV0dXJuIC1FTkVURE9XTjtcbiBcbiBcdGF0b21pY19pbmMoXHUwMDI2ZmNvZS1cdTAwM2VyZWZjbnQpO1xuIFxuQEAgLTg0NSwxMiArODQ5LDE0IEBAIGludCBpeGdiZV9mY29lX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aWYgKGFkYXB0ZXItXHUwMDNlZmxhZ3MgXHUwMDI2IElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdHJ1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXG4gXHRlX2luZm8oZHJ2LCBcIkVuYWJsaW5nIEZDb0Ugb2ZmbG9hZCBmZWF0dXJlcy5cXG5cIik7XG4gXG4gXHRpZiAoYWRhcHRlci1cdTAwM2VmbGFncyBcdTAwMjYgSVhHQkVfRkxBR19TUklPVl9FTkFCTEVEKVxuIFx0XHRlX3dhcm4ocHJvYmUsIFwiRW5hYmxpbmcgRkNvRSBvbiBQRiB3aWxsIGRpc2FibGUgbGVnYWN5IFZGc1xcblwiKTtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRpZiAocnVubmluZylcbiBcdFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcbiBcbiBcdC8qIEFsbG9jYXRlIHBlciBDUFUgbWVtb3J5IHRvIHRyYWNrIEREUCBwb29scyAqL1xuQEAgLTg2NSw3ICs4NzEsNyBAQCBpbnQgaXhnYmVfZmNvZV9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7XG4gXHRpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7XG4gXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuK1x0aWYgKHJ1bm5pbmcpXG4gXHRcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04ODIsNiArODg4LDEwIEBAIGludCBpeGdiZV9mY29lX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIGludCBpeGdiZV9mY29lX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KG5ldGRldik7XG4rXHRib29sIHJ1bm5pbmc7XG4rXG4rXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4rXHRcdHJldHVybiAtRU5FVERPV047XG4gXG4gXHRpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2YWRhcHRlci1cdTAwM2VmY29lLnJlZmNudCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTg4OSw4ICs4OTksMTAgQEAgaW50IGl4Z2JlX2Zjb2VfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aWYgKCEoYWRhcHRlci1cdTAwM2VmbGFncyBcdTAwMjYgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdHJ1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXG4gXHRlX2luZm8oZHJ2LCBcIkRpc2FibGluZyBGQ29FIG9mZmxvYWQgZmVhdHVyZXMuXFxuXCIpO1xuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbitcdGlmIChydW5uaW5nKVxuIFx0XHRuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuIFxuIFx0LyogRnJlZSBwZXIgQ1BVIG1lbW9yeSB0byB0cmFjayBERFAgcG9vbHMgKi9cbkBAIC05MDYsNyArOTE4LDcgQEAgaW50IGl4Z2JlX2Zjb2VfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aXhnYmVfY2xlYXJfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTtcbiBcdGl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRpZiAocnVubmluZylcbiBcdFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uY1xuaW5kZXggODg3M2E4Y2M0YTE4NTEuLmYwY2I2NGE4NDAyMTRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmNcbkBAIC03NDAxLDcgKzc0MDEsNyBAQCBzdGF0aWMgaW50IGl4Z2JlX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpXG4gXHQvKiBtdXN0IHNldCBuZXcgTVRVIGJlZm9yZSBjYWxsaW5nIGRvd24gb3IgdXAgKi9cbiBcdFdSSVRFX09OQ0UobmV0ZGV2LVx1MDAzZW10dSwgbmV3X210dSk7XG4gXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuK1x0aWYgKGl4Z2JlX25ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiBcdFx0aXhnYmVfcmVpbml0X2xvY2tlZChhZGFwdGVyKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTk5MDMsNiArOTkwMyw3IEBAIGludCBpeGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiB7XG4gXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KGRldik7XG4gXHRzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gXHUwMDI2YWRhcHRlci1cdTAwM2VodztcbitcdGJvb2wgcnVubmluZyA9IGl4Z2JlX25ldGlmX3J1bm5pbmcoZGV2KTtcbiBcbiBcdC8qIEhhcmR3YXJlIHN1cHBvcnRzIHVwIHRvIDggdHJhZmZpYyBjbGFzc2VzICovXG4gXHRpZiAodGMgXHUwMDNlIGFkYXB0ZXItXHUwMDNlZGNiX2NmZy5udW1fdGNzLnBnX3RjcylcbkBAIC05OTE1LDcgKzk5MTYsMTAgQEAgaW50IGl4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxuIFx0ICogbWF0Y2ggcGFja2V0IGJ1ZmZlciBhbGlnbm1lbnQuIFVuZm9ydHVuYXRlbHksIHRoZVxuIFx0ICogaGFyZHdhcmUgaXMgbm90IGZsZXhpYmxlIGVub3VnaCB0byBkbyB0aGlzIGR5bmFtaWNhbGx5LlxuIFx0ICovXG4tXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxuK1x0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuK1x0XHRyZXR1cm4gLUVORVRET1dOO1xuK1xuK1x0aWYgKHJ1bm5pbmcpXG4gXHRcdGl4Z2JlX2Nsb3NlKGRldik7XG4gXHRlbHNlXG4gXHRcdGl4Z2JlX3Jlc2V0KGFkYXB0ZXIpO1xuQEAgLTk5MjgsNyArOTkzMiw3IEBAIGludCBpeGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcdFx0XHRlX3dhcm4ocHJvYmUsIFwiRENCIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBYRFBcXG5cIik7XG4gXG4gXHRcdFx0aXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xuLVx0XHRcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4rXHRcdFx0aWYgKHJ1bm5pbmcpXG4gXHRcdFx0XHRpeGdiZV9vcGVuKGRldik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbkBAIC05OTYzLDcgKzk5NjcsNyBAQCBpbnQgaXhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXG4gXHRpeGdiZV9kZWZyYWdfbWFjdmxhbl9wb29scyhkZXYpO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcbitcdGlmIChydW5uaW5nKVxuIFx0XHRyZXR1cm4gaXhnYmVfb3BlbihkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTA0ODksOSArMTA0OTMsOSBAQCB2b2lkIGl4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBpeGdiZV9mcm9tX25ldGRldihuZXRkZXYpO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbitcdGlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpXG4gXHRcdGl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7XG4tXHRlbHNlXG4rXHRlbHNlIGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxuIFx0XHRpeGdiZV9yZXNldChhZGFwdGVyKTtcbiB9XG4gXG5AQCAtMTA4MjMsNyArMTA4MjcsNyBAQCBzdGF0aWMgdm9pZCAqaXhnYmVfZndkX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqcGRldiwgc3RydWN0IG5ldF9kZXZpY2UgKnZkZXYpXG4gXHRhY2NlbC1cdTAwM2Vwb29sID0gcG9vbDtcbiBcdGFjY2VsLVx1MDAzZW5ldGRldiA9IHZkZXY7XG4gXG4tXHRpZiAoIW5ldGlmX3J1bm5pbmcocGRldikpXG4rXHRpZiAoIWl4Z2JlX25ldGlmX3J1bm5pbmcocGRldikpXG4gXHRcdHJldHVybiBhY2NlbDtcbiBcbiBcdGVyciA9IGl4Z2JlX2Z3ZF9yaW5nX3VwKGFkYXB0ZXIsIGFjY2VsKTtcbkBAIC0xMDk1NCw4ICsxMDk1OCwxMCBAQCBzdGF0aWMgaW50IGl4Z2JlX3hkcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gXHRcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gXHRcdGVyciA9IGl4Z2JlX3NldHVwX3RjKGRldiwgYWRhcHRlci1cdTAwM2Vod190Y3MpO1xuIFxuLVx0XHRpZiAoZXJyKVxuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0eGNoZyhcdTAwMjZhZGFwdGVyLVx1MDAzZXhkcF9wcm9nLCBvbGRfcHJvZyk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbiBcdFx0aWYgKCFwcm9nKVxuIFx0XHRcdHhkcF9mZWF0dXJlc19jbGVhcl9yZWRpcmVjdF90YXJnZXQoZGV2KTtcbiBcdH0gZWxzZSB7XG5AQCAtMTIzMzgsNiArMTIzNDQsOTQgQEAgc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgaXhnYmVfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdHJldHVybiByZXN1bHQ7XG4gfVxuIFxuKy8qKlxuKyAqIGl4Z2JlX3BjaV9yZXNldF9wcmVwYXJlIC0gY2FsbGVkIGJlZm9yZSB0aGUgcGNpIGJ1cyBpcyByZXNldC5cbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4rICpcbisgKiBRdWllc2NlIHRoZSBkcml2ZXIgaW4gcHJlcGFyYXRpb24gZm9yIGEgUENJIGZ1bmN0aW9uIHJlc2V0LiBDYWxsZWQgZnJvbVxuKyAqIHBjaV9kZXZfc2F2ZV9hbmRfZGlzYWJsZSgpIGJlZm9yZSB0aGUgY29yZSBzYXZlcyBjb25maWcgc3RhdGUgYW5kIHdyaXRlc1xuKyAqIFBDSV9DT01NQU5EX0lOVFhfRElTQUJMRSB0byBjbGVhciBidXMgbWFzdGVyaW5nIGFuZCBNTUlPIGRlY29kZSwgc28gTU1JT1xuKyAqIGFjY2VzcyB0byB0aGUgZGV2aWNlIGlzIHN0aWxsIHZhbGlkIGhlcmUuXG4rICovXG4rc3RhdGljIHZvaWQgaXhnYmVfcGNpX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0c3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuK1xuK1x0aWYgKCFhZGFwdGVyKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRuZXRkZXYgPSBhZGFwdGVyLVx1MDAzZW5ldGRldjtcbitcbitcdHJ0bmxfbG9jaygpO1xuK1x0bmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpO1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbitcdFx0aXhnYmVfY2xvc2Vfc3VzcGVuZChhZGFwdGVyKTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHQvKiBfX0lYR0JFX1JFU0VUVElORyBpcyBpbnRlbnRpb25hbGx5IG5vdCBzZXQgaGVyZTogaXQgaXMgc3B1biBvblxuK1x0ICogd2hpbGUgaG9sZGluZyBydG5sIGJ5IGl4Z2JlX3JlaW5pdF9sb2NrZWQoKSwgaXhnYmVfZGNibmxfZGV2cmVzZXQoKVxuK1x0ICogYW5kIHRoZSBldGh0b29sIHJlc2V0IHBhdGhzLCBzbyBob2xkaW5nIGl0IGFjcm9zcyB0aGUgcnRubCBkcm9wXG4rXHQgKiB3b3VsZCBkZWFkbG9jayB0aG9zZSBjYWxsZXJzIGFnYWluc3QgaXhnYmVfcGNpX3Jlc2V0X2RvbmUoKSwgd2hpY2hcbitcdCAqIG5lZWRzIHRvIHJlLWFjcXVpcmUgcnRubC4gIER1cmluZyB0aGUgcmVzZXQgd2luZG93IGNvbmN1cnJlbnRcbitcdCAqIHJ0bmwtaG9sZGluZyBwYXRocyBtdXN0IHRyZWF0IHRoZSBuZXRkZXYgYXMgZGV0YWNoZWQsIHdoaWxlIHRlYXJkb3duXG4rXHQgKiBwYXRocyBhbHNvIG9ic2VydmUgX19JWEdCRV9ET1dOIHNldCBieSBpeGdiZV9kb3duKCkgdmlhXG4rXHQgKiBpeGdiZV9jbG9zZV9zdXNwZW5kKCksIG1hdGNoaW5nIHRoZSBleGlzdGluZyBpeGdiZV9pb19lcnJvcl9kZXRlY3RlZCgpXG4rXHQgKiBmbG93LlxuK1x0ICovXG4rXG4rXHRpZiAodGVzdF9iaXQoX19JWEdCRV9TRVJWSUNFX0lOSVRFRCwgXHUwMDI2YWRhcHRlci1cdTAwM2VzdGF0ZSkpIHtcbitcdFx0LyogVGhlIHNlcnZpY2UgdGltZXIgd2FzIGFscmVhZHkgc3RvcHBlZCBieSBpeGdiZV9kb3duKCkgdmlhXG4rXHRcdCAqIGl4Z2JlX2Nsb3NlX3N1c3BlbmQoKTsgaWYgdGhlIG5ldGRldiB3YXMgbm90IHJ1bm5pbmcsIHRoZVxuK1x0XHQgKiB0aW1lciBpcyBub3QgYXJtZWQuICBPbmx5IHRoZSBjdXJyZW50bHkgcXVldWVkIHNlcnZpY2UgdGFza1xuK1x0XHQgKiAoaWYgYW55KSBzdGlsbCBuZWVkcyB0byBiZSBmbHVzaGVkIGhlcmUuXG4rXHRcdCAqL1xuK1x0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmFkYXB0ZXItXHUwMDNlc2VydmljZV90YXNrKTtcbitcdFx0Y2xlYXJfYml0KF9fSVhHQkVfU0VSVklDRV9TQ0hFRCwgXHUwMDI2YWRhcHRlci1cdTAwM2VzdGF0ZSk7XG4rXHR9XG4rfVxuK1xuKy8qKlxuKyAqIGl4Z2JlX3BjaV9yZXNldF9kb25lIC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LlxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbisgKlxuKyAqIFJlLWluaXRpYWxpemUgdGhlIGRldmljZSBhZnRlciBhIFBDSSBmdW5jdGlvbiByZXNldC4gVGhlIFBDSSBjb3JlIGhhc1xuKyAqIGFscmVhZHkgY2FsbGVkIHBjaV9yZXN0b3JlX3N0YXRlKCkgYmVmb3JlIGludm9raW5nIHRoaXMgY2FsbGJhY2ssIHNvIHRoZVxuKyAqIHNhdmVkIENvbW1hbmQgcmVnaXN0ZXIgKGluY2x1ZGluZyBidXMgbWFzdGVyaW5nKSBpcyBiYWNrIGluIHBsYWNlLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGl4Z2JlX3BjaV9yZXNldF9kb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbitcdHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbitcdGJvb2wgcnVubmluZztcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0aWYgKCFhZGFwdGVyKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRuZXRkZXYgPSBhZGFwdGVyLVx1MDAzZW5ldGRldjtcbitcbitcdHJ0bmxfbG9jaygpO1xuK1x0YWRhcHRlci1cdTAwM2Vody5od19hZGRyID0gYWRhcHRlci1cdTAwM2Vpb19hZGRyO1xuK1x0aXhnYmVfcmVzZXQoYWRhcHRlcik7XG4rXHRJWEdCRV9XUklURV9SRUcoXHUwMDI2YWRhcHRlci1cdTAwM2VodywgSVhHQkVfV1VTLCB+MCk7XG4rXHRydW5uaW5nID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuK1x0aWYgKHJ1bm5pbmcpIHtcbitcdFx0ZXJyID0gaXhnYmVfb3BlbihuZXRkZXYpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0ZV9kZXZfZXJyKFwiQ2Fubm90IHJlLW9wZW4gbmV0ZGV2IGFmdGVyIFBDSSByZXNldDogJWQuIEEgbmV3IHJlc2V0IGlzIG5lZWRlZC5cXG5cIixcbitcdFx0XHRcdCAgZXJyKTtcbitcdFx0XHRkZXZfY2xvc2UobmV0ZGV2KTtcbitcdFx0fVxuK1x0fVxuK1x0LyogUmVzdG9yZSBwcmVzZW5jZSBzbyB1c2Vyc3BhY2UgY2FuIHJldHJ5IGxhdGVyLiBJZiBpeGdiZV9vcGVuKCkgZmFpbGVkLFxuK1x0ICogZGV2X2Nsb3NlKCkgY2xlYXJlZCBJRkZfVVAgZmlyc3Qgc28gbmV0aWZfZGV2aWNlX2F0dGFjaCgpIHdpbGwgbm90IHdha2VcbitcdCAqIFR4IHF1ZXVlcyB3aXRob3V0IGEgc3VjY2Vzc2Z1bCBvcGVuLlxuK1x0ICovXG4rXHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7XG4rXHRydG5sX3VubG9jaygpO1xuK31cbitcbiAvKipcbiAgKiBpeGdiZV9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLlxuICAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbkBAIC0xMjM3MCw2ICsxMjQ2NCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGl4Z2JlX2Vycl9oYW5kbGVyID0ge1xuIFx0LmVycm9yX2RldGVjdGVkID0gaXhnYmVfaW9fZXJyb3JfZGV0ZWN0ZWQsXG4gXHQuc2xvdF9yZXNldCA9IGl4Z2JlX2lvX3Nsb3RfcmVzZXQsXG4gXHQucmVzdW1lID0gaXhnYmVfaW9fcmVzdW1lLFxuK1x0LnJlc2V0X3ByZXBhcmUgPSBpeGdiZV9wY2lfcmVzZXRfcHJlcGFyZSxcbitcdC5yZXNldF9kb25lID0gaXhnYmVfcGNpX3Jlc2V0X2RvbmUsXG4gfTtcbiBcbiBzdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKGl4Z2JlX3BtX29wcywgaXhnYmVfc3VzcGVuZCwgaXhnYmVfcmVzdW1lKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94c2suYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jXG5pbmRleCA4OWY5NmM0NjNmMDIyNC4uMDI4MjA5ODJiMjAyNmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94c2suY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmNcbkBAIC0zOSw3ICszOSw3IEBAIHN0YXRpYyBpbnQgaXhnYmVfeHNrX3Bvb2xfZW5hYmxlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmX3J1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKGFkYXB0ZXItXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbitcdGlmX3J1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKGFkYXB0ZXItXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICBpeGdiZV9lbmFibGVkX3hkcF9hZGFwdGVyKGFkYXB0ZXIpO1xuIFxuIFx0aWYgKGlmX3J1bm5pbmcpXG5AQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgaW50IGl4Z2JlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBxaWQpXG4gXHRpZiAoIXBvb2wpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWZfcnVubmluZyA9IG5ldGlmX3J1bm5pbmcoYWRhcHRlci1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuK1x0aWZfcnVubmluZyA9IGl4Z2JlX25ldGlmX3J1bm5pbmcoYWRhcHRlci1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIGl4Z2JlX2VuYWJsZWRfeGRwX2FkYXB0ZXIoYWRhcHRlcik7XG4gXG4gXHRpZiAoaWZfcnVubmluZylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA3OjMwOjA2LjEzMzEwNTA4NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MzA0MDk1NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHkgb2YgdGhlIGl4Z2JlIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBgaXhnYmVgIGRyaXZlciwgSW50ZWwncyAxMCBHaWdhYml0IEV0aGVybmV0IFBDSSBFeHByZXNzIGRyaXZlci4gSXQncyBtYWtpbmcgc29tZSBjaGFuZ2VzIHRvIGhvdyB0aGUgZHJpdmVyIGNoZWNrcyB0aGUgbmV0d29yayBpbnRlcmZhY2UncyBzdGF0ZSwgYWRkaW5nIFBDSSByZXNldCBoYW5kbGVycy4gU2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgcGF0Y2guIEJ1dCBteSBtYWluIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciBpdCdzIHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6eiBpdC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgcGh5c2ljYWwgbmV0d29yayBjYXJkIGRyaXZlci4gRnV6emluZyBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIGlzIGdlbmVyYWxseSB0cmlja3ksIHVubGVzcyBpdCdzIGVtdWxhdGVkIGluIHNvZnR3YXJlLiBTbywgY2FuIHRoaXMgYmUgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRT8gVHlwaWNhbGx5LCBubywgdW5sZXNzIHdlJ3JlIHRhbGtpbmcgYWJvdXQgc29tZXRoaW5nIGxpa2UgYGUxMDAwZWAgaW4gUUVNVSwgb3IgYHZpcnRpb2AsIG9yIGB2ZXRoYCwgd2hpY2ggYXJlIGFsbCBlbXVsYXRpb25zLlxuXG5XYWl0Li4uIGRvZXMgUUVNVSBlbXVsYXRlIGBpeGdiZWA/IEkgY2FuJ3QgaW1tZWRpYXRlbHkgY2hlY2sgdGhlIFFFTVUgc291cmNlIGRpcmVjdGx5LiBJJ2QgdHlwaWNhbGx5IHNlYXJjaCBmb3IgdGhlIG1vZHVsZSBuYW1lIG9yIHNpbWlsYXIsIGJ1dCBJIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoYXQgaGVyZS4gQW5kLCBzeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgZnV6eiBQQ0kgZGV2aWNlcyBkaXJlY3RseSwgdW5sZXNzIHRoZXkncmUgZW11bGF0ZWQgb3IgdXNpbmcgc29tZSBicmlkZ2UgbGlrZSB2aGNpL3ZmaW8vZXRjLiBTeXprYWxsZXIgbWlnaHQgaGF2ZSBzb21lIGxpbWl0ZWQgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzIHRocm91Z2ggYSB2aXJ0dWFsIGJyaWRnZSwgYnV0IHRoZXkncmUgdXN1YWxseSBzcGVjaWZpYyBvciBsaW1pdGVkLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZSwgUUVNVSAqZG9lcyogaGF2ZSBuZXR3b3JrIGRldmljZSBlbXVsYXRpb25zLiBJIGtub3cgaXQgaGFzIGBlMTAwMGAsIGBlMTAwMGVgLCBhbmQgYGlnYmAuIERvZXMgUUVNVSBoYXZlIGBpeGdiZWA/IExldCBtZSBsb29rLi4uIE5vcGUsIFFFTVUgaGFzIGBpZ2JgLCB0aGUgSW50ZWwgODI1NzYuIGBpeGdiZWAgaXMgdGhlIEludGVsIDgyNTk5LiBRRU1VIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIG5hdGl2ZSBgaXhnYmVgIGVtdWxhdGlvbi4gSSBjYW4ndCBxdWlja2x5IHZlcmlmeSB0aGlzLCBidXQgdGhhdCdzIG15IGh1bmNoLlxuXG5Eb2VzIHN5emthbGxlciB0YXJnZXQgdGhpcz8gRG9lcyBpdCB1c2UgYHN5el9wY2lfZGV2aWNlYD8gTm8uIElzIGBpeGdiZWAgcmVhY2hhYmxlIGluIEdDRSBvciBRRU1VPyBHQ0UgdXNlcyBgdmlydGlvLW5ldGAgb3IgYGd2ZWAuIFFFTVUgdXNlcyBgZTEwMDBgLCBgZTEwMDBlYCwgYHZpcnRpby1uZXRgLCBldGMuIEknbSBnb2luZyBpbiBjaXJjbGVzIGhlcmUhXG5cblRoZSBjb3JlIHByb2JsZW0sIGFuZCB0aGUgcHJvbXB0IHJlaW5mb3JjZXMgdGhpczogVGhlIHBhdGNoIGV4cGxpY2l0bHkgbWVudGlvbnMgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIHVubGVzcyBoYXJkd2FyZSBpcyBlbXVsYXRlZC4gSWYgUUVNVSBkb2Vzbid0IGVtdWxhdGUgYGl4Z2JlYCwgdGhlbiB0aGlzIHBhdGNoJ3MgY29yZSBmdW5jdGlvbmFsaXR5ICppcyogdW5yZWFjaGFibGUgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuXG5cbkknZCBuZWVkIHRvIGNoZWNrIGlmIFFFTVUgKmFjdHVhbGx5KiBlbXVsYXRlcyBgaXhnYmVgLiBJIGNhbid0IGNoZWNrIFFFTVUgc291cmNlLCBidXQgSSBjYW4gY2hlY2sgZm9yIGFueSBzeXpib3QgcmVwb3J0cyByZWxhdGVkIHRvIGBpeGdiZWAuIExldCBtZSBsb29rLi4uIE5vcGUuIFFFTVUgZG9lc24ndCBzZWVtIHRvIGVtdWxhdGUgaXQuIEl0ICpkb2VzKiBlbXVsYXRlIGBlMTAwMGAsIGBlMTAwMGVgLCBhbmQgYGlnYmAuXG5cbk9rYXksIHNvIG1heWJlIEkgc2hvdWxkIGxvb2sgYXQgdGhlIGtlcm5lbCBzb3VyY2UuIERvZXMgdGhlIGtlcm5lbCBoYXZlIGFueSBoaW50cyBvZiBgaXhnYmVgIGJlaW5nIGZ1enplZCBvciB1c2VkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzPyBOby4gSSAqY291bGQqIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBoZXJlLCBiZWNhdXNlIG9mIHRoYXQuIFRoaXMgc2VlbXMgbGlrZSBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlciwgbm90IHNvbWV0aGluZyB0eXBpY2FsbHkgZnV6emVkIHVubGVzcyB0aGVyZSBpcyBlbXVsYXRpb24uXG5cbldhaXQsIGlzIGBpeGdiZWAgZW11bGF0ZWQ/IEkgbmVlZCB0byBzZWFyY2ggdGhlIHdlYjogUUVNVSBuZXR3b3JrIGRldmljZXMuIE5vIGBpeGdiZWAuIFFFTVUgYWRkZWQgYGlnYmAgcmVjZW50bHkgKEludGVsIDgyNTc2KS4gYGl4Z2JlYCBpcyAxMEdiRSAoSW50ZWwgODI1OTkpLiBRRU1VIGRvZXNuJ3QgaGF2ZSBpeGdiZSBlbXVsYXRpb24uIEV2ZW4gaWYgaXQgZGlkLCBzeXprYWxsZXIgcHJvYmFibHkgd291bGRuJ3QgY29uZmlndXJlIGl0IHVubGVzcyBpdCB3YXMgYSBkZWZhdWx0LlxuXG5TbyBJIHRoaW5rIEkgY2FuIGNvbmNsdWRlOiBVbmxlc3Mgc29tZXRoaW5nIHZlcnkgc3BlY2lmaWMgY2FuIGJlIGFycmFuZ2VkLCB0aGUgcGF0Y2ggaXMgbGlrZWx5IG5vdCBmdXp6YWJsZS4gVW5sZXNzIHRoZXJlIGlzIGVtdWxhdGlvbi5cblxuTGV0J3MgY2hlY2sgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzYCwgYnV0IEknZCBndWVzcyB0aGVyZSdzIG5vdGhpbmcgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDc6MzA6MjMuNDM3MjAyMTQxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTc3ODYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpeGdiZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ0b29scy90ZXN0aW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jLTgtICpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jOjk6ICogICMgZXRodG9vbCAtSyBpeGdiZTIgcnh2bGFuIG9mZlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmMtMTAtICpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jLTExLSAqIFZlcmlmeSBzZXR0aW5nOlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmM6MTI6ICogICMgZXRodG9vbCAtayBpeGdiZTIgfCBncmVwIHJ4LXZsYW4tb2ZmbG9hZFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmMtMTMtICogIHJ4LXZsYW4tb2ZmbG9hZDogb2ZmXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jPTEyNz1Db21tYW5kcyB0byBzZXR1cCBWTEFOIG9uIExpbnV4IHRvIHRlc3QgcGFja2V0cyBnZXRzIGRyb3BwZWQ6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX3ZsYW4uYy0xMjgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX3ZsYW4uYzoxMjk6IGV4cG9ydCBST09UREVWPWl4Z2JlMlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmMtMTMwLSBleHBvcnQgVkxBTklEPTQwMTFcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmM9MjY1PUNvbW1hbmRzIHRvIHNldHVwIFRDIHRvIHVzZSBhYm92ZSBicGYgcHJvZzpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jLTI2Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jOjI2NzpleHBvcnQgUk9PVERFVj1peGdiZTJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jLTI2OC1leHBvcnQgRklMRT14ZHBfdmxhbjAxX2tlcm4ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwNzozMDoyMy42Mzg5ODYxMTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjUxNDE2NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGl4Z2JlIERyaXZlciBhbmQgU3l6a2FsbGVyJ3MgUENJIENhcGFiaWxpdGllcyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYGl4Z2JlYCBtZW50aW9uZWQgY2FzdWFsbHkgaW4gdGhlIGNvbW1lbnRzLCB3aGljaCBkb2Vzbid0IHJlYWxseSBnaXZlIG1lIGFueSBhY3Rpb25hYmxlIGluZm9ybWF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhYm91dCB0aGUgYWN0dWFsIGRyaXZlciBkaXJlY3Rvcnk6IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9gPyBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgZHJpdmVyIGxpdmVzLlxuXG5Ob3csIG15IGluaXRpYWwgaW50dWl0aW9uIGlzIHRoYXQgc3l6a2FsbGVyICpyYXJlbHkqIGdldHMgaW52b2x2ZWQgaW4gZnV6emluZyBwaHlzaWNhbCBFdGhlcm5ldCBkcml2ZXJzLCB1bmxlc3MgdGhleSdyZSBydW5uaW5nIGluIHNvbWUga2luZCBvZiBlbXVsYXRlZCBlbnZpcm9ubWVudC4gVGhhdCdzIHVzdWFsbHkgdGhlIGFwcHJvYWNoLlxuXG5CdXQuLi4gaGFuZyBvbi4gRG9lcyBzeXprYWxsZXIgZXZlbiAqaGF2ZSogYSBtZWNoYW5pc20gdG8gZnV6eiBQQ0kgZGV2aWNlcz8gSSBzZWVtIHRvIHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgaXQuIExldCBtZSB0cnkgdG8gcmVtZW1iZXIsIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2RldmljZWAgb3IgYHN5el9wY2lfZGV2aWNlX3NldHVwYC4uLiBOb3BlLCB0aGF0J3Mgbm90IHJpbmdpbmcgYW55IGJlbGxzLlxuXG5XYWl0IGEgbWludXRlLCBtYXliZSBpdCAqZG9lcyogaGF2ZSBhIFBDSSBmdXp6ZXI/IEkgY291bGQgYmUgbWlzcmVtZW1iZXJpbmcsIG9yIHBlcmhhcHMgaXQncyBiZWVuIGFkZGVkIHJlY2VudGx5LiBMZXQncyBub3QgYXNzdW1lIGFueXRoaW5nLiBJIG5lZWQgdG8gZ2V0IGJhY2sgdG8gYmFzaWNzIGFuZCBjaGVjayBpZiB0aGVyZSdzIGFueSBvZmZpY2lhbCBzeXprYWxsZXIgZG9jdW1lbnRhdGlvbiBvciBkZXNjcmlwdGlvbnMgdGhhdCBmb2N1cyBvbiBQQ0kgZGV2aWNlIGZ1enppbmcuIEkgaGF2ZSB0byBmaW5kIGNvbmNyZXRlIGV2aWRlbmNlIGFuZCBub3QgcmVseSBvbiBoYWxmLXJlbWVtYmVyZWQgbm90aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MTksIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDc6MzA6MjguMjkwNDA0ODY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjA2MDEzMzAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5el9wY2lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwNzozMDozMC42MTEwMTUyODhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTEzMzE5MjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBEZWNpc2lvbiBmb3IgaXhnYmUgRHJpdmVyKipcblxuT2theSwgaGVyZSdzIGhvdyBJJ20gYXBwcm9hY2hpbmcgdGhpcy4gVGhlIHByb21wdCBzcGVjaWZpZXMgY3JpdGVyaWEgZm9yIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWxldmFudCBjbGF1c2UgaXMgYWJvdXQgY29kZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGl4Z2JlYCwgYmVpbmcgYSBwaHlzaWNhbCBuZXR3b3JrIGNhcmQgZHJpdmVyIChJbnRlbCAxMEdiRSksIGlzIGluaGVyZW50bHkgdW5yZWFjaGFibGUgaW4gdGhlc2UgdmlydHVhbGl6ZWQgc2V0dXBzLiBRRU1VIGVtdWxhdGVzIG90aGVyIEludGVsIG5ldHdvcmsgY2FyZHMgbGlrZSBlMTAwMCwgZTEwMDBlLCBhbmQgaWdiLCBidXQgbm90IGl4Z2JlLCBhcyBmYXIgYXMgSSBrbm93LlxuXG5JIG5lZWQgdG8gY29uZmlybSwgc28gSSdtIGRvaW5nIGEgcXVpY2sgbWVudGFsIHNlYXJjaC4gTm8gYHN5el9wY2lgIHdvdWxkIGJlIHVzZWQgaGVyZSBlaXRoZXIsIHNvIHRoYXQgaXMgYW5vdGhlciBwb2ludC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIG15IGtub3dsZWRnZSBiYXNlIOKAkyBsZXQncyBzZWUsIGhhcyBRRU1VIGFkZGVkIHN1cHBvcnQgZm9yIGl4Z2JlPyBBaCwgSSByZW1lbWJlciB0aGV5IGFkZGVkIGBpZ2JgIHJlY2VudGx5LCBidXQgbm90IGBpeGdiZWAuIEkga25vdyB0aGF0IHN0YW5kYXJkIFFFTVUgZG9lc24ndCBvZmZlciBgaXhnYmVgIGVtdWxhdGlvbiwgdGhvdWdoIHNvbWUgZm9ya3MgKm1pZ2h0KiwgYnV0IGl0J3Mgbm90IHRoZSBub3JtLiBBbmQgZXZlbiBpZiBhIGZvcmsgaGFkIGl0LCBzeXprYWxsZXIgaXMgdW5saWtlbHkgdG8gY29uZmlndXJlIG9yIHVzZSBzdWNoIGEgZGV2aWNlLiBTbywgaXQncyBub3QgZ2VuZXJhbGx5IGF2YWlsYWJsZSBpbiBhIGZ1enppbmcgY29udGV4dC5cblxuQ2FuIEkgcmVhY2ggdGhlIGNvZGUgc29tZSBvdGhlciB3YXk/IFBlcmhhcHMgdGhyb3VnaCBWRklPIChWaXJ0dWFsIEZ1bmN0aW9uIEkvTyk/IEJ1dCBWRklPIHJlbGllcyBvbiBoYXJkd2FyZSBwYXNzdGhyb3VnaCBvciwgYXQgbGVhc3QsIGEgbW9jayBkZXZpY2UuIElzIHRoZXJlIGEgbW9jayBkZXZpY2UgZm9yIGBpeGdiZWA/IE5vcGUsIG5vdCB0aGF0IEknbSBhd2FyZSBvZi5cblxuU28sIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyLiBUaGUgY29kZSBwYXRocyB3aXRoaW4gdGhlIGBpeGdiZWAgZHJpdmVyIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEl0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHdoaWNoIHN5emthbGxlciBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0by5cblxuTGV0IG1lIGp1c3QgdmVyaWZ5IHRoYXQgdGhlcmUncyBubyB2aXJ0dWFsIGRyaXZlciBhdmFpbGFibGUgaW4gdGhlIGtlcm5lbCB0aGF0IEknbSBtaXNzaW5nLiBSaWdodCwgYGl4Z2JldmZgIGlzIHRoZSB2aXJ0dWFsIGZ1bmN0aW9uIGRyaXZlciwgYnV0IHRoYXQgKnN0aWxsKiByZXF1aXJlcyBhIHBoeXNpY2FsIFBGIChwaHlzaWNhbCBmdW5jdGlvbikgb3IgYW4gZW11bGF0b3IuIEl0IGRvZXNuJ3QgbWFrZSB0aGlzIHBhdGggcmVhY2hhYmxlLCBzbyBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTc2LCJPdXRwdXRUb2tlbnMiOjg4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA3OjMwOjM5LjUyNDMzNzA2OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl4Z2JlIGRyaXZlciAoSW50ZWwgMTAgR2lnYWJpdCBFdGhlcm5ldCksIHdoaWNoIGlzIGEgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVyLiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNlZCBmb3IgZnV6emluZyAobGlrZSBRRU1VIG9yIEdDRSkgZG8gbm90IGVtdWxhdGUgaXhnYmUgaGFyZHdhcmUsIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl4Z2JlIGRyaXZlciAoSW50ZWwgMTAgR2lnYWJpdCBFdGhlcm5ldCksIHdoaWNoIGlzIGEgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVyLiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNlZCBmb3IgZnV6emluZyAobGlrZSBRRU1VIG9yIEdDRSkgZG8gbm90IGVtdWxhdGUgaXhnYmUgaGFyZHdhcmUsIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow8f4cz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-11 06:58:24 +0000 UTC FinishedAt: 2026-07-11 07:30:41 +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+CgkJCTx0ZD4yMDI2LzA3LzExIDA3OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpeGdiZSBkcml2ZXIgKEludGVsIDEwIEdpZ2FiaXQgRXRoZXJuZXQpLCB3aGljaCBpcyBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlci4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzZWQgZm9yIGZ1enppbmcgKGxpa2UgUUVNVSBvciBHQ0UpIGRvIG5vdCBlbXVsYXRlIGl4Z2JlIGhhcmR3YXJlLCBtYWtpbmcgdGhlc2UgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDc6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5MzgwZGU3YjI3NjgzNDJmMDk4Y2Q4ZGIzOTg5NmZkMmRkNmRjNzdlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMDc6MzA6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlLmhcbmluZGV4IDliODIxNzUyM2ZkMjY2Li40NGNmMDM3Y2MxNjdlYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlLmhcbkBAIC05NTQsNiAmIzQzOzk1NCwxMSBAQCBleHRlcm4gY2hhciBpeGdiZV9kcml2ZXJfbmFtZVtdO1xuIGV4dGVybiBjaGFyIGl4Z2JlX2RlZmF1bHRfZGV2aWNlX2Rlc2NyW107XG4gI2VuZGlmIC8qIElYR0JFX0ZDT0UgKi9cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGl4Z2JlX25ldGlmX3J1bm5pbmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IG5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldik7XG4mIzQzO31cbiYjNDM7XG4gaW50IGl4Z2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4gaW50IGl4Z2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuIHZvaWQgaXhnYmVfdXAoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2RjYl9ubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZGNiX25sLmNcbmluZGV4IDM4MmQwOTdlNGIxMWUwLi43Yzc0MDhkMzI3NDJjNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2RjYl9ubC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9kY2JfbmwuY1xuQEAgLTI3NywxNyAmIzQzOzI3NywyMyBAQCBzdGF0aWMgdm9pZCBpeGdiZV9kY2JubF9nZXRfcGZjX2NmZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcHJpb3JpdHksXG4gc3RhdGljIHZvaWQgaXhnYmVfZGNibmxfZGV2cmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KGRldik7XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJ1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKGRldik7XG4gXG4gXHR3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX0lYR0JFX1JFU0VUVElORywgXHUwMDI2YWRhcHRlci1cdTAwM2VzdGF0ZSkpXG4gXHRcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4mIzQzO1x0aWYgKHJ1bm5pbmcpXG4gXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKGRldik7XG4gXG4gXHRpeGdiZV9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xuIFx0aXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcbiYjNDM7XHRpZiAocnVubmluZylcbiBcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX29wZW4oZGV2KTtcbiBcbiBcdGNsZWFyX2JpdChfX0lYR0JFX1JFU0VUVElORywgXHUwMDI2YWRhcHRlci1cdTAwM2VzdGF0ZSk7XG5AQCAtNTE1LDYgJiM0Mzs1MjEsOSBAQCBzdGF0aWMgaW50IGl4Z2JlX2RjYm5sX2llZWVfc2V0ZXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoIShhZGFwdGVyLVx1MDAzZWRjYnhfY2FwIFx1MDAyNiBEQ0JfQ0FQX0RDQlhfVkVSX0lFRUUpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVORVRET1dOO1xuJiM0MztcbiBcdGlmICghYWRhcHRlci1cdTAwM2VpeGdiZV9pZWVlX2V0cykge1xuIFx0XHRhZGFwdGVyLVx1MDAzZWl4Z2JlX2llZWVfZXRzID0ga21hbGxvY19vYmooc3RydWN0IGllZWVfZXRzKTtcbiBcdFx0aWYgKCFhZGFwdGVyLVx1MDAzZWl4Z2JlX2llZWVfZXRzKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2V0aHRvb2wuY1xuaW5kZXggMzZlNDNiNWU4OGQxZjAuLjAyYWZmNDExNDI2ZDE5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9ldGh0b29sLmNcbkBAIC00NjYsNiAmIzQzOzQ2Niw5IEBAIHN0YXRpYyBpbnQgaXhnYmVfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHR1MzIgYWR2ZXJ0aXNlZCwgb2xkO1xuIFx0aW50IGVyciA9IDA7XG4gXG4mIzQzO1x0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxuJiM0MztcdFx0cmV0dXJuIC1FTkVURE9XTjtcbiYjNDM7XG4gXHRpZiAoKGh3LVx1MDAzZXBoeS5tZWRpYV90eXBlID09IGl4Z2JlX21lZGlhX3R5cGVfY29wcGVyKSB8fFxuIFx0ICAgIChody1cdTAwM2VwaHkubXVsdGlzcGVlZF9maWJlcikpIHtcbiBcdFx0LypcbkBAIC01NzYsOSAmIzQzOzU3OSw5IEBAIHN0YXRpYyB2b2lkIGl4Z2JlX3NldF9wYXVzZXBhcmFtX2ZpbmFsaXplKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHQvKiBJZiB0aGUgdGhpbmcgY2hhbmdlZCB0aGVuIHdlJiMzOTtsbCB1cGRhdGUgYW5kIHVzZSBuZXcgYXV0b25lZy4gKi9cbiBcdGlmIChtZW1jbXAoZmMsIFx1MDAyNmh3LVx1MDAzZWZjLCBzaXplb2YoKmZjKSkpIHtcbiBcdFx0aHctXHUwMDNlZmMgPSAqZmM7XG4tXHRcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4mIzQzO1x0XHRpZiAoaXhnYmVfbmV0aWZfcnVubmluZyhuZXRkZXYpKVxuIFx0XHRcdGl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7XG4tXHRcdGVsc2VcbiYjNDM7XHRcdGVsc2UgaWYgKG5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4gXHRcdFx0aXhnYmVfcmVzZXQoYWRhcHRlcik7XG4gXHR9XG4gfVxuQEAgLTEyNjYsNyAmIzQzOzEyNjksNyBAQCBzdGF0aWMgaW50IGl4Z2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVfUkVTRVRUSU5HLCBcdTAwMjZhZGFwdGVyLVx1MDAzZXN0YXRlKSlcbiBcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuIFxuLVx0aWYgKCFuZXRpZl9ydW5uaW5nKGFkYXB0ZXItXHUwMDNlbmV0ZGV2KSkge1xuJiM0MztcdGlmICghaXhnYmVfbmV0aWZfcnVubmluZyhhZGFwdGVyLVx1MDAzZW5ldGRldikpIHtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYWRhcHRlci1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiBcdFx0XHRhZGFwdGVyLVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlY291bnQgPSBuZXdfdHhfY291bnQ7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFkYXB0ZXItXHUwMDNlbnVtX3hkcF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuQEAgLTIyNDksMTAgJiM0MzsyMjUyLDExIEBAIHN0YXRpYyB2b2lkIGl4Z2JlX2RpYWdfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdCAgICBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGhfdGVzdCwgdTY0ICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYobmV0ZGV2KTtcbi1cdGJvb2wgaWZfcnVubmluZyA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbiYjNDM7XHRib29sIGlmX3J1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldik7XG4gXG4tXHRpZiAoaXhnYmVfcmVtb3ZlZChhZGFwdGVyLVx1MDAzZWh3Lmh3X2FkZHIpKSB7XG4tXHRcdGVfZXJyKGh3LCBcJiMzNDtBZGFwdGVyIHJlbW92ZWQgLSB0ZXN0IGJsb2NrZWRcXG5cJiMzNDspO1xuJiM0MztcdGlmIChpeGdiZV9yZW1vdmVkKGFkYXB0ZXItXHUwMDNlaHcuaHdfYWRkcikgfHxcbiYjNDM7XHQgICAgIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpIHtcbiYjNDM7XHRcdGVfZXJyKGh3LCBcJiMzNDtBZGFwdGVyIHJlbW92ZWQgb3IgZGV0YWNoZWQgLSB0ZXN0IGJsb2NrZWRcXG5cJiMzNDspO1xuIFx0XHRkYXRhWzBdID0gMTtcbiBcdFx0ZGF0YVsxXSA9IDE7XG4gXHRcdGRhdGFbMl0gPSAxO1xuQEAgLTI0NjYsNyAmIzQzOzI0NzAsNyBAQCBzdGF0aWMgaW50IGl4Z2JlX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KG5ldGRldik7XG4gXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuJiM0MztcdGlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpXG4gXHRcdGl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0yNjUwLDcgJiM0MzsyNjU0LDggQEAgc3RhdGljIGludCBpeGdiZV9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ZWxzZVxuIFx0XHRcdC8qIHJ4IG9ubHkgb3IgbWl4ZWQgKi9cbiBcdFx0XHRxX3ZlY3Rvci1cdTAwM2VpdHIgPSByeF9pdHJfcGFyYW07XG4tXHRcdGl4Z2JlX3dyaXRlX2VpdHIocV92ZWN0b3IpO1xuJiM0MztcdFx0aWYgKG5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4mIzQzO1x0XHRcdGl4Z2JlX3dyaXRlX2VpdHIocV92ZWN0b3IpO1xuIFx0fVxuIFxuIFx0LypcbkBAIC0zNjk0LDYgJiM0MzszNjk5LDkgQEAgc3RhdGljIGludCBpeGdiZV9zZXRfZWVlX2U2MTAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdCAgICBrZWRhdGEtXHUwMDNlZWVlX2VuYWJsZWQpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiYjNDM7XHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVORVRET1dOO1xuJiM0MztcbiBcdGh3LVx1MDAzZXBoeS5lZWVfc3BlZWRzX2FkdmVydGlzZWQgPSBrZWRhdGEtXHUwMDNlZWVlX2VuYWJsZWQgP1xuIFx0XHRcdFx0XHRody1cdTAwM2VwaHkuZWVlX3NwZWVkc19zdXBwb3J0ZWQgOiAwO1xuIFxuQEAgLTM3MDksOSAmIzQzOzM3MTcsOSBAQCBzdGF0aWMgaW50IGl4Z2JlX3NldF9lZWVfZTYxMChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0ZWxzZVxuIFx0XHRhZGFwdGVyLVx1MDAzZWZsYWdzMiBcdTAwMjY9IH5JWEdCRV9GTEFHMl9FRUVfRU5BQkxFRDtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4mIzQzO1x0aWYgKGl4Z2JlX25ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiBcdFx0aXhnYmVfcmVpbml0X2xvY2tlZChhZGFwdGVyKTtcbi1cdGVsc2VcbiYjNDM7XHRlbHNlIGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxuIFx0XHRpeGdiZV9yZXNldChhZGFwdGVyKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTM3OTMsOSAmIzQzOzM4MDEsOSBAQCBzdGF0aWMgaW50IGl4Z2JlX3NldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZWRhdGEpXG4gXHR9XG4gXG4gXHQvKiByZXNldCBsaW5rICovXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuJiM0MztcdGlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpXG4gXHRcdGl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7XG4tXHRlbHNlXG4mIzQzO1x0ZWxzZSBpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbiBcdFx0aXhnYmVfcmVzZXQoYWRhcHRlcik7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0zODUxLDcgJiM0MzszODU5LDcgQEAgc3RhdGljIGludCBpeGdiZV9zZXRfcHJpdl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgcHJpdl9mbGFncylcbiBcdFx0YWRhcHRlci1cdTAwM2VmbGFnczIgPSBmbGFnczI7XG4gXG4gXHRcdC8qIHJlc2V0IGludGVyZmFjZSB0byByZXBvcHVsYXRlIHF1ZXVlcyAqL1xuLVx0XHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuJiM0MztcdFx0aWYgKGl4Z2JlX25ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiBcdFx0XHRpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2Zjb2UuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2Zjb2UuY1xuaW5kZXggMDExZmRhOWM2MTkzOWMuLmU0Y2Q0NjczZjIxYzJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZmNvZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9mY29lLmNcbkBAIC04MzYsNiAmIzQzOzgzNiwxMCBAQCBpbnQgaXhnYmVfZmNvZV9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KG5ldGRldik7XG4gXHRzdHJ1Y3QgaXhnYmVfZmNvZSAqZmNvZSA9IFx1MDAyNmFkYXB0ZXItXHUwMDNlZmNvZTtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1xuJiM0MztcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbiYjNDM7XHRcdHJldHVybiAtRU5FVERPV047XG4gXG4gXHRhdG9taWNfaW5jKFx1MDAyNmZjb2UtXHUwMDNlcmVmY250KTtcbiBcbkBAIC04NDUsMTIgJiM0Mzs4NDksMTQgQEAgaW50IGl4Z2JlX2Zjb2VfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoYWRhcHRlci1cdTAwM2VmbGFncyBcdTAwMjYgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdHJ1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldik7XG4mIzQzO1xuIFx0ZV9pbmZvKGRydiwgXCYjMzQ7RW5hYmxpbmcgRkNvRSBvZmZsb2FkIGZlYXR1cmVzLlxcblwmIzM0Oyk7XG4gXG4gXHRpZiAoYWRhcHRlci1cdTAwM2VmbGFncyBcdTAwMjYgSVhHQkVfRkxBR19TUklPVl9FTkFCTEVEKVxuIFx0XHRlX3dhcm4ocHJvYmUsIFwmIzM0O0VuYWJsaW5nIEZDb0Ugb24gUEYgd2lsbCBkaXNhYmxlIGxlZ2FjeSBWRnNcXG5cJiMzNDspO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiYjNDM7XHRpZiAocnVubmluZylcbiBcdFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcbiBcbiBcdC8qIEFsbG9jYXRlIHBlciBDUFUgbWVtb3J5IHRvIHRyYWNrIEREUCBwb29scyAqL1xuQEAgLTg2NSw3ICYjNDM7ODcxLDcgQEAgaW50IGl4Z2JlX2Zjb2VfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpeGdiZV9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xuIFx0aXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiYjNDM7XHRpZiAocnVubmluZylcbiBcdFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTg4Miw2ICYjNDM7ODg4LDEwIEBAIGludCBpeGdiZV9mY29lX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIGludCBpeGdiZV9mY29lX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KG5ldGRldik7XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVORVRET1dOO1xuIFxuIFx0aWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNmFkYXB0ZXItXHUwMDNlZmNvZS5yZWZjbnQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC04ODksOCAmIzQzOzg5OSwxMCBAQCBpbnQgaXhnYmVfZmNvZV9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoIShhZGFwdGVyLVx1MDAzZWZsYWdzIFx1MDAyNiBJWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdHJ1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldik7XG4mIzQzO1xuIFx0ZV9pbmZvKGRydiwgXCYjMzQ7RGlzYWJsaW5nIEZDb0Ugb2ZmbG9hZCBmZWF0dXJlcy5cXG5cJiMzNDspO1xuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiYjNDM7XHRpZiAocnVubmluZylcbiBcdFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcbiBcbiBcdC8qIEZyZWUgcGVyIENQVSBtZW1vcnkgdG8gdHJhY2sgRERQIHBvb2xzICovXG5AQCAtOTA2LDcgJiM0Mzs5MTgsNyBAQCBpbnQgaXhnYmVfZmNvZV9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpeGdiZV9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xuIFx0aXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiYjNDM7XHRpZiAocnVubmluZylcbiBcdFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uY1xuaW5kZXggODg3M2E4Y2M0YTE4NTEuLmYwY2I2NGE4NDAyMTRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmNcbkBAIC03NDAxLDcgJiM0Mzs3NDAxLDcgQEAgc3RhdGljIGludCBpeGdiZV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KVxuIFx0LyogbXVzdCBzZXQgbmV3IE1UVSBiZWZvcmUgY2FsbGluZyBkb3duIG9yIHVwICovXG4gXHRXUklURV9PTkNFKG5ldGRldi1cdTAwM2VtdHUsIG5ld19tdHUpO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiYjNDM7XHRpZiAoaXhnYmVfbmV0aWZfcnVubmluZyhuZXRkZXYpKVxuIFx0XHRpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtOTkwMyw2ICYjNDM7OTkwMyw3IEBAIGludCBpeGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiB7XG4gXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KGRldik7XG4gXHRzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gXHUwMDI2YWRhcHRlci1cdTAwM2VodztcbiYjNDM7XHRib29sIHJ1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKGRldik7XG4gXG4gXHQvKiBIYXJkd2FyZSBzdXBwb3J0cyB1cCB0byA4IHRyYWZmaWMgY2xhc3NlcyAqL1xuIFx0aWYgKHRjIFx1MDAzZSBhZGFwdGVyLVx1MDAzZWRjYl9jZmcubnVtX3Rjcy5wZ190Y3MpXG5AQCAtOTkxNSw3ICYjNDM7OTkxNiwxMCBAQCBpbnQgaXhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHQgKiBtYXRjaCBwYWNrZXQgYnVmZmVyIGFsaWdubWVudC4gVW5mb3J0dW5hdGVseSwgdGhlXG4gXHQgKiBoYXJkd2FyZSBpcyBub3QgZmxleGlibGUgZW5vdWdoIHRvIGRvIHRoaXMgZHluYW1pY2FsbHkuXG4gXHQgKi9cbi1cdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4mIzQzO1x0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuJiM0MztcdFx0cmV0dXJuIC1FTkVURE9XTjtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ1bm5pbmcpXG4gXHRcdGl4Z2JlX2Nsb3NlKGRldik7XG4gXHRlbHNlXG4gXHRcdGl4Z2JlX3Jlc2V0KGFkYXB0ZXIpO1xuQEAgLTk5MjgsNyAmIzQzOzk5MzIsNyBAQCBpbnQgaXhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHRcdFx0ZV93YXJuKHByb2JlLCBcJiMzNDtEQ0IgaXMgbm90IHN1cHBvcnRlZCB3aXRoIFhEUFxcblwmIzM0Oyk7XG4gXG4gXHRcdFx0aXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xuLVx0XHRcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4mIzQzO1x0XHRcdGlmIChydW5uaW5nKVxuIFx0XHRcdFx0aXhnYmVfb3BlbihkZXYpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG5AQCAtOTk2Myw3ICYjNDM7OTk2Nyw3IEBAIGludCBpeGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcbiBcdGl4Z2JlX2RlZnJhZ19tYWN2bGFuX3Bvb2xzKGRldik7XG4gXG4tXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxuJiM0MztcdGlmIChydW5uaW5nKVxuIFx0XHRyZXR1cm4gaXhnYmVfb3BlbihkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTA0ODksOSAmIzQzOzEwNDkzLDkgQEAgdm9pZCBpeGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYobmV0ZGV2KTtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4mIzQzO1x0aWYgKGl4Z2JlX25ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiBcdFx0aXhnYmVfcmVpbml0X2xvY2tlZChhZGFwdGVyKTtcbi1cdGVsc2VcbiYjNDM7XHRlbHNlIGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxuIFx0XHRpeGdiZV9yZXNldChhZGFwdGVyKTtcbiB9XG4gXG5AQCAtMTA4MjMsNyAmIzQzOzEwODI3LDcgQEAgc3RhdGljIHZvaWQgKml4Z2JlX2Z3ZF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICp2ZGV2KVxuIFx0YWNjZWwtXHUwMDNlcG9vbCA9IHBvb2w7XG4gXHRhY2NlbC1cdTAwM2VuZXRkZXYgPSB2ZGV2O1xuIFxuLVx0aWYgKCFuZXRpZl9ydW5uaW5nKHBkZXYpKVxuJiM0MztcdGlmICghaXhnYmVfbmV0aWZfcnVubmluZyhwZGV2KSlcbiBcdFx0cmV0dXJuIGFjY2VsO1xuIFxuIFx0ZXJyID0gaXhnYmVfZndkX3JpbmdfdXAoYWRhcHRlciwgYWNjZWwpO1xuQEAgLTEwOTU0LDggJiM0MzsxMDk1OCwxMCBAQCBzdGF0aWMgaW50IGl4Z2JlX3hkcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gXHRcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gXHRcdGVyciA9IGl4Z2JlX3NldHVwX3RjKGRldiwgYWRhcHRlci1cdTAwM2Vod190Y3MpO1xuIFxuLVx0XHRpZiAoZXJyKVxuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHR4Y2hnKFx1MDAyNmFkYXB0ZXItXHUwMDNleGRwX3Byb2csIG9sZF9wcm9nKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiBcdFx0aWYgKCFwcm9nKVxuIFx0XHRcdHhkcF9mZWF0dXJlc19jbGVhcl9yZWRpcmVjdF90YXJnZXQoZGV2KTtcbiBcdH0gZWxzZSB7XG5AQCAtMTIzMzgsNiAmIzQzOzEyMzQ0LDk0IEBAIHN0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGl4Z2JlX2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRyZXR1cm4gcmVzdWx0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGl4Z2JlX3BjaV9yZXNldF9wcmVwYXJlIC0gY2FsbGVkIGJlZm9yZSB0aGUgcGNpIGJ1cyBpcyByZXNldC5cbiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBRdWllc2NlIHRoZSBkcml2ZXIgaW4gcHJlcGFyYXRpb24gZm9yIGEgUENJIGZ1bmN0aW9uIHJlc2V0LiBDYWxsZWQgZnJvbVxuJiM0MzsgKiBwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoKSBiZWZvcmUgdGhlIGNvcmUgc2F2ZXMgY29uZmlnIHN0YXRlIGFuZCB3cml0ZXNcbiYjNDM7ICogUENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFIHRvIGNsZWFyIGJ1cyBtYXN0ZXJpbmcgYW5kIE1NSU8gZGVjb2RlLCBzbyBNTUlPXG4mIzQzOyAqIGFjY2VzcyB0byB0aGUgZGV2aWNlIGlzIHN0aWxsIHZhbGlkIGhlcmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpeGdiZV9wY2lfcmVzZXRfcHJlcGFyZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4mIzQzO1xuJiM0MztcdGlmICghYWRhcHRlcilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2ID0gYWRhcHRlci1cdTAwM2VuZXRkZXY7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdG5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTtcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuJiM0MztcdFx0aXhnYmVfY2xvc2Vfc3VzcGVuZChhZGFwdGVyKTtcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHQvKiBfX0lYR0JFX1JFU0VUVElORyBpcyBpbnRlbnRpb25hbGx5IG5vdCBzZXQgaGVyZTogaXQgaXMgc3B1biBvblxuJiM0MztcdCAqIHdoaWxlIGhvbGRpbmcgcnRubCBieSBpeGdiZV9yZWluaXRfbG9ja2VkKCksIGl4Z2JlX2RjYm5sX2RldnJlc2V0KClcbiYjNDM7XHQgKiBhbmQgdGhlIGV0aHRvb2wgcmVzZXQgcGF0aHMsIHNvIGhvbGRpbmcgaXQgYWNyb3NzIHRoZSBydG5sIGRyb3BcbiYjNDM7XHQgKiB3b3VsZCBkZWFkbG9jayB0aG9zZSBjYWxsZXJzIGFnYWluc3QgaXhnYmVfcGNpX3Jlc2V0X2RvbmUoKSwgd2hpY2hcbiYjNDM7XHQgKiBuZWVkcyB0byByZS1hY3F1aXJlIHJ0bmwuICBEdXJpbmcgdGhlIHJlc2V0IHdpbmRvdyBjb25jdXJyZW50XG4mIzQzO1x0ICogcnRubC1ob2xkaW5nIHBhdGhzIG11c3QgdHJlYXQgdGhlIG5ldGRldiBhcyBkZXRhY2hlZCwgd2hpbGUgdGVhcmRvd25cbiYjNDM7XHQgKiBwYXRocyBhbHNvIG9ic2VydmUgX19JWEdCRV9ET1dOIHNldCBieSBpeGdiZV9kb3duKCkgdmlhXG4mIzQzO1x0ICogaXhnYmVfY2xvc2Vfc3VzcGVuZCgpLCBtYXRjaGluZyB0aGUgZXhpc3RpbmcgaXhnYmVfaW9fZXJyb3JfZGV0ZWN0ZWQoKVxuJiM0MztcdCAqIGZsb3cuXG4mIzQzO1x0ICovXG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X2JpdChfX0lYR0JFX1NFUlZJQ0VfSU5JVEVELCBcdTAwMjZhZGFwdGVyLVx1MDAzZXN0YXRlKSkge1xuJiM0MztcdFx0LyogVGhlIHNlcnZpY2UgdGltZXIgd2FzIGFscmVhZHkgc3RvcHBlZCBieSBpeGdiZV9kb3duKCkgdmlhXG4mIzQzO1x0XHQgKiBpeGdiZV9jbG9zZV9zdXNwZW5kKCk7IGlmIHRoZSBuZXRkZXYgd2FzIG5vdCBydW5uaW5nLCB0aGVcbiYjNDM7XHRcdCAqIHRpbWVyIGlzIG5vdCBhcm1lZC4gIE9ubHkgdGhlIGN1cnJlbnRseSBxdWV1ZWQgc2VydmljZSB0YXNrXG4mIzQzO1x0XHQgKiAoaWYgYW55KSBzdGlsbCBuZWVkcyB0byBiZSBmbHVzaGVkIGhlcmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2YWRhcHRlci1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuJiM0MztcdFx0Y2xlYXJfYml0KF9fSVhHQkVfU0VSVklDRV9TQ0hFRCwgXHUwMDI2YWRhcHRlci1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogaXhnYmVfcGNpX3Jlc2V0X2RvbmUgLSBjYWxsZWQgYWZ0ZXIgdGhlIHBjaSBidXMgaGFzIGJlZW4gcmVzZXQuXG4mIzQzOyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmUtaW5pdGlhbGl6ZSB0aGUgZGV2aWNlIGFmdGVyIGEgUENJIGZ1bmN0aW9uIHJlc2V0LiBUaGUgUENJIGNvcmUgaGFzXG4mIzQzOyAqIGFscmVhZHkgY2FsbGVkIHBjaV9yZXN0b3JlX3N0YXRlKCkgYmVmb3JlIGludm9raW5nIHRoaXMgY2FsbGJhY2ssIHNvIHRoZVxuJiM0MzsgKiBzYXZlZCBDb21tYW5kIHJlZ2lzdGVyIChpbmNsdWRpbmcgYnVzIG1hc3RlcmluZykgaXMgYmFjayBpbiBwbGFjZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGl4Z2JlX3BjaV9yZXNldF9kb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghYWRhcHRlcilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2ID0gYWRhcHRlci1cdTAwM2VuZXRkZXY7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdGFkYXB0ZXItXHUwMDNlaHcuaHdfYWRkciA9IGFkYXB0ZXItXHUwMDNlaW9fYWRkcjtcbiYjNDM7XHRpeGdiZV9yZXNldChhZGFwdGVyKTtcbiYjNDM7XHRJWEdCRV9XUklURV9SRUcoXHUwMDI2YWRhcHRlci1cdTAwM2VodywgSVhHQkVfV1VTLCB+MCk7XG4mIzQzO1x0cnVubmluZyA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbiYjNDM7XHRpZiAocnVubmluZykge1xuJiM0MztcdFx0ZXJyID0gaXhnYmVfb3BlbihuZXRkZXYpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRlX2Rldl9lcnIoXCYjMzQ7Q2Fubm90IHJlLW9wZW4gbmV0ZGV2IGFmdGVyIFBDSSByZXNldDogJWQuIEEgbmV3IHJlc2V0IGlzIG5lZWRlZC5cXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICBlcnIpO1xuJiM0MztcdFx0XHRkZXZfY2xvc2UobmV0ZGV2KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0LyogUmVzdG9yZSBwcmVzZW5jZSBzbyB1c2Vyc3BhY2UgY2FuIHJldHJ5IGxhdGVyLiBJZiBpeGdiZV9vcGVuKCkgZmFpbGVkLFxuJiM0MztcdCAqIGRldl9jbG9zZSgpIGNsZWFyZWQgSUZGX1VQIGZpcnN0IHNvIG5ldGlmX2RldmljZV9hdHRhY2goKSB3aWxsIG5vdCB3YWtlXG4mIzQzO1x0ICogVHggcXVldWVzIHdpdGhvdXQgYSBzdWNjZXNzZnVsIG9wZW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpO1xuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaXhnYmVfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi5cbiAgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG5AQCAtMTIzNzAsNiAmIzQzOzEyNDY0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaXhnYmVfZXJyX2hhbmRsZXIgPSB7XG4gXHQuZXJyb3JfZGV0ZWN0ZWQgPSBpeGdiZV9pb19lcnJvcl9kZXRlY3RlZCxcbiBcdC5zbG90X3Jlc2V0ID0gaXhnYmVfaW9fc2xvdF9yZXNldCxcbiBcdC5yZXN1bWUgPSBpeGdiZV9pb19yZXN1bWUsXG4mIzQzO1x0LnJlc2V0X3ByZXBhcmUgPSBpeGdiZV9wY2lfcmVzZXRfcHJlcGFyZSxcbiYjNDM7XHQucmVzZXRfZG9uZSA9IGl4Z2JlX3BjaV9yZXNldF9kb25lLFxuIH07XG4gXG4gc3RhdGljIERFRklORV9TSU1QTEVfREVWX1BNX09QUyhpeGdiZV9wbV9vcHMsIGl4Z2JlX3N1c3BlbmQsIGl4Z2JlX3Jlc3VtZSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94c2suY1xuaW5kZXggODlmOTZjNDYzZjAyMjQuLjAyODIwOTgyYjIwMjZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jXG5AQCAtMzksNyAmIzQzOzM5LDcgQEAgc3RhdGljIGludCBpeGdiZV94c2tfcG9vbF9lbmFibGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0aWZfcnVubmluZyA9IG5ldGlmX3J1bm5pbmcoYWRhcHRlci1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuJiM0MztcdGlmX3J1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKGFkYXB0ZXItXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICBpeGdiZV9lbmFibGVkX3hkcF9hZGFwdGVyKGFkYXB0ZXIpO1xuIFxuIFx0aWYgKGlmX3J1bm5pbmcpXG5AQCAtNzEsNyAmIzQzOzcxLDcgQEAgc3RhdGljIGludCBpeGdiZV94c2tfcG9vbF9kaXNhYmxlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1MTYgcWlkKVxuIFx0aWYgKCFwb29sKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmX3J1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKGFkYXB0ZXItXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRpZl9ydW5uaW5nID0gaXhnYmVfbmV0aWZfcnVubmluZyhhZGFwdGVyLVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgaXhnYmVfZW5hYmxlZF94ZHBfYWRhcHRlcihhZGFwdGVyKTtcbiBcbiBcdGlmIChpZl9ydW5uaW5nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA3OjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpeGdiZSBkcml2ZXIgKEludGVsIDEwIEdpZ2FiaXQgRXRoZXJuZXQpLCB3aGljaCBpcyBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlci4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzZWQgZm9yIGZ1enppbmcgKGxpa2UgUUVNVSBvciBHQ0UpIGRvIG5vdCBlbXVsYXRlIGl4Z2JlIGhhcmR3YXJlLCBtYWtpbmcgdGhlc2UgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkzODBkZTdiMjc2ODM0MmYwOThjZDhkYjM5ODk2ZmQyZGQ2ZGM3N2UKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxMSAwNzozMDowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZS5oCmluZGV4IDliODIxNzUyM2ZkMjY2Li40NGNmMDM3Y2MxNjdlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZS5oCkBAIC05NTQsNiAmIzQzOzk1NCwxMSBAQCBleHRlcm4gY2hhciBpeGdiZV9kcml2ZXJfbmFtZVtdOwogZXh0ZXJuIGNoYXIgaXhnYmVfZGVmYXVsdF9kZXZpY2VfZGVzY3JbXTsKICNlbmRpZiAvKiBJWEdCRV9GQ09FICovCiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXhnYmVfbmV0aWZfcnVubmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIG5ldGlmX3J1bm5pbmcobmV0ZGV2KSAmYW1wOyZhbXA7IG5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldik7CiYjNDM7fQomIzQzOwogaW50IGl4Z2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiBpbnQgaXhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiB2b2lkIGl4Z2JlX3VwKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2RjYl9ubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZGNiX25sLmMKaW5kZXggMzgyZDA5N2U0YjExZTAuLjdjNzQwOGQzMjc0MmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9kY2JfbmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9kY2JfbmwuYwpAQCAtMjc3LDE3ICYjNDM7Mjc3LDIzIEBAIHN0YXRpYyB2b2lkIGl4Z2JlX2RjYm5sX2dldF9wZmNfY2ZnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwcmlvcml0eSwKIHN0YXRpYyB2b2lkIGl4Z2JlX2RjYm5sX2RldnJlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBpeGdiZV9mcm9tX25ldGRldihkZXYpOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CiYjNDM7CWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcnVubmluZyA9IGl4Z2JlX25ldGlmX3J1bm5pbmcoZGV2KTsKIAogCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVfUkVTRVRUSU5HLCAmYW1wO2FkYXB0ZXItJmd0O3N0YXRlKSkKIAkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKJiM0MzsJaWYgKHJ1bm5pbmcpCiAJCWRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX3N0b3AoZGV2KTsKIAogCWl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CiAJaXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKJiM0MzsJaWYgKHJ1bm5pbmcpCiAJCWRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX29wZW4oZGV2KTsKIAogCWNsZWFyX2JpdChfX0lYR0JFX1JFU0VUVElORywgJmFtcDthZGFwdGVyLSZndDtzdGF0ZSk7CkBAIC01MTUsNiAmIzQzOzUyMSw5IEBAIHN0YXRpYyBpbnQgaXhnYmVfZGNibmxfaWVlZV9zZXRldHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAoIShhZGFwdGVyLSZndDtkY2J4X2NhcCAmYW1wOyBEQ0JfQ0FQX0RDQlhfVkVSX0lFRUUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpCiYjNDM7CQlyZXR1cm4gLUVORVRET1dOOwomIzQzOwogCWlmICghYWRhcHRlci0mZ3Q7aXhnYmVfaWVlZV9ldHMpIHsKIAkJYWRhcHRlci0mZ3Q7aXhnYmVfaWVlZV9ldHMgPSBrbWFsbG9jX29iaihzdHJ1Y3QgaWVlZV9ldHMpOwogCQlpZiAoIWFkYXB0ZXItJmd0O2l4Z2JlX2llZWVfZXRzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jCmluZGV4IDM2ZTQzYjVlODhkMWYwLi4wMmFmZjQxMTQyNmQxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYwpAQCAtNDY2LDYgJiM0Mzs0NjYsOSBAQCBzdGF0aWMgaW50IGl4Z2JlX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXUzMiBhZHZlcnRpc2VkLCBvbGQ7CiAJaW50IGVyciA9IDA7CiAKJiM0MzsJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKQomIzQzOwkJcmV0dXJuIC1FTkVURE9XTjsKJiM0MzsKIAlpZiAoKGh3LSZndDtwaHkubWVkaWFfdHlwZSA9PSBpeGdiZV9tZWRpYV90eXBlX2NvcHBlcikgfHwKIAkgICAgKGh3LSZndDtwaHkubXVsdGlzcGVlZF9maWJlcikpIHsKIAkJLyoKQEAgLTU3Niw5ICYjNDM7NTc5LDkgQEAgc3RhdGljIHZvaWQgaXhnYmVfc2V0X3BhdXNlcGFyYW1fZmluYWxpemUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkvKiBJZiB0aGUgdGhpbmcgY2hhbmdlZCB0aGVuIHdlJiMzOTtsbCB1cGRhdGUgYW5kIHVzZSBuZXcgYXV0b25lZy4gKi8KIAlpZiAobWVtY21wKGZjLCAmYW1wO2h3LSZndDtmYywgc2l6ZW9mKCpmYykpKSB7CiAJCWh3LSZndDtmYyA9ICpmYzsKLQkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJCWlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCQlpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOwotCQllbHNlCiYjNDM7CQllbHNlIGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKQogCQkJaXhnYmVfcmVzZXQoYWRhcHRlcik7CiAJfQogfQpAQCAtMTI2Niw3ICYjNDM7MTI2OSw3IEBAIHN0YXRpYyBpbnQgaXhnYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVfUkVTRVRUSU5HLCAmYW1wO2FkYXB0ZXItJmd0O3N0YXRlKSkKIAkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGFkYXB0ZXItJmd0O25ldGRldikpIHsKJiM0MzsJaWYgKCFpeGdiZV9uZXRpZl9ydW5uaW5nKGFkYXB0ZXItJmd0O25ldGRldikpIHsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IGFkYXB0ZXItJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQogCQkJYWRhcHRlci0mZ3Q7dHhfcmluZ1tpXS0mZ3Q7Y291bnQgPSBuZXdfdHhfY291bnQ7CiAJCWZvciAoaSA9IDA7IGkgJmx0OyBhZGFwdGVyLSZndDtudW1feGRwX3F1ZXVlczsgaSYjNDM7JiM0MzspCkBAIC0yMjQ5LDEwICYjNDM7MjI1MiwxMSBAQCBzdGF0aWMgdm9pZCBpeGdiZV9kaWFnX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCSAgICBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGhfdGVzdCwgdTY0ICpkYXRhKQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYobmV0ZGV2KTsKLQlib29sIGlmX3J1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7CiYjNDM7CWJvb2wgaWZfcnVubmluZyA9IGl4Z2JlX25ldGlmX3J1bm5pbmcobmV0ZGV2KTsKIAotCWlmIChpeGdiZV9yZW1vdmVkKGFkYXB0ZXItJmd0O2h3Lmh3X2FkZHIpKSB7Ci0JCWVfZXJyKGh3LCAmIzM0O0FkYXB0ZXIgcmVtb3ZlZCAtIHRlc3QgYmxvY2tlZFxuJiMzNDspOwomIzQzOwlpZiAoaXhnYmVfcmVtb3ZlZChhZGFwdGVyLSZndDtody5od19hZGRyKSB8fAomIzQzOwkgICAgIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpIHsKJiM0MzsJCWVfZXJyKGh3LCAmIzM0O0FkYXB0ZXIgcmVtb3ZlZCBvciBkZXRhY2hlZCAtIHRlc3QgYmxvY2tlZFxuJiMzNDspOwogCQlkYXRhWzBdID0gMTsKIAkJZGF0YVsxXSA9IDE7CiAJCWRhdGFbMl0gPSAxOwpAQCAtMjQ2Niw3ICYjNDM7MjQ3MCw3IEBAIHN0YXRpYyBpbnQgaXhnYmVfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYobmV0ZGV2KTsKIAotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiYjNDM7CWlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCWl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7CiAKIAlyZXR1cm4gMDsKQEAgLTI2NTAsNyAmIzQzOzI2NTQsOCBAQCBzdGF0aWMgaW50IGl4Z2JlX3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQllbHNlCiAJCQkvKiByeCBvbmx5IG9yIG1peGVkICovCiAJCQlxX3ZlY3Rvci0mZ3Q7aXRyID0gcnhfaXRyX3BhcmFtOwotCQlpeGdiZV93cml0ZV9laXRyKHFfdmVjdG9yKTsKJiM0MzsJCWlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKQomIzQzOwkJCWl4Z2JlX3dyaXRlX2VpdHIocV92ZWN0b3IpOwogCX0KIAogCS8qCkBAIC0zNjk0LDYgJiM0MzszNjk5LDkgQEAgc3RhdGljIGludCBpeGdiZV9zZXRfZWVlX2U2MTAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkgICAga2VkYXRhLSZndDtlZWVfZW5hYmxlZCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiYjNDM7CWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSkKJiM0MzsJCXJldHVybiAtRU5FVERPV047CiYjNDM7CiAJaHctJmd0O3BoeS5lZWVfc3BlZWRzX2FkdmVydGlzZWQgPSBrZWRhdGEtJmd0O2VlZV9lbmFibGVkID8KIAkJCQkJaHctJmd0O3BoeS5lZWVfc3BlZWRzX3N1cHBvcnRlZCA6IDA7CiAKQEAgLTM3MDksOSAmIzQzOzM3MTcsOSBAQCBzdGF0aWMgaW50IGl4Z2JlX3NldF9lZWVfZTYxMChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCWVsc2UKIAkJYWRhcHRlci0mZ3Q7ZmxhZ3MyICZhbXA7PSB+SVhHQkVfRkxBRzJfRUVFX0VOQUJMRUQ7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQomIzQzOwlpZiAoaXhnYmVfbmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQlpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOwotCWVsc2UKJiM0MzsJZWxzZSBpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSkKIAkJaXhnYmVfcmVzZXQoYWRhcHRlcik7CiAKIAlyZXR1cm4gMDsKQEAgLTM3OTMsOSAmIzQzOzM4MDEsOSBAQCBzdGF0aWMgaW50IGl4Z2JlX3NldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZWRhdGEpCiAJfQogCiAJLyogcmVzZXQgbGluayAqLwotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiYjNDM7CWlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCWl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7Ci0JZWxzZQomIzQzOwllbHNlIGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKQogCQlpeGdiZV9yZXNldChhZGFwdGVyKTsKIAogCXJldHVybiAwOwpAQCAtMzg1MSw3ICYjNDM7Mzg1OSw3IEBAIHN0YXRpYyBpbnQgaXhnYmVfc2V0X3ByaXZfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHByaXZfZmxhZ3MpCiAJCWFkYXB0ZXItJmd0O2ZsYWdzMiA9IGZsYWdzMjsKIAogCQkvKiByZXNldCBpbnRlcmZhY2UgdG8gcmVwb3B1bGF0ZSBxdWV1ZXMgKi8KLQkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJCWlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCQlpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZmNvZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZmNvZS5jCmluZGV4IDAxMWZkYTljNjE5MzljLi5lNGNkNDY3M2YyMWMyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZmNvZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2Zjb2UuYwpAQCAtODM2LDYgJiM0Mzs4MzYsMTAgQEAgaW50IGl4Z2JlX2Zjb2VfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBpeGdiZV9mcm9tX25ldGRldihuZXRkZXYpOwogCXN0cnVjdCBpeGdiZV9mY29lICpmY29lID0gJmFtcDthZGFwdGVyLSZndDtmY29lOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CiYjNDM7CWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSkKJiM0MzsJCXJldHVybiAtRU5FVERPV047CiAKIAlhdG9taWNfaW5jKCZhbXA7ZmNvZS0mZ3Q7cmVmY250KTsKIApAQCAtODQ1LDEyICYjNDM7ODQ5LDE0IEBAIGludCBpeGdiZV9mY29lX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWlmIChhZGFwdGVyLSZndDtmbGFncyAmYW1wOyBJWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJcnVubmluZyA9IGl4Z2JlX25ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsKIAllX2luZm8oZHJ2LCAmIzM0O0VuYWJsaW5nIEZDb0Ugb2ZmbG9hZCBmZWF0dXJlcy5cbiYjMzQ7KTsKIAogCWlmIChhZGFwdGVyLSZndDtmbGFncyAmYW1wOyBJWEdCRV9GTEFHX1NSSU9WX0VOQUJMRUQpCiAJCWVfd2Fybihwcm9iZSwgJiMzNDtFbmFibGluZyBGQ29FIG9uIFBGIHdpbGwgZGlzYWJsZSBsZWdhY3kgVkZzXG4mIzM0Oyk7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQomIzQzOwlpZiAocnVubmluZykKIAkJbmV0ZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc3RvcChuZXRkZXYpOwogCiAJLyogQWxsb2NhdGUgcGVyIENQVSBtZW1vcnkgdG8gdHJhY2sgRERQIHBvb2xzICovCkBAIC04NjUsNyAmIzQzOzg3MSw3IEBAIGludCBpeGdiZV9mY29lX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CiAJaXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJaWYgKHJ1bm5pbmcpCiAJCW5ldGRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX29wZW4obmV0ZGV2KTsKIAogCXJldHVybiAwOwpAQCAtODgyLDYgJiM0Mzs4ODgsMTAgQEAgaW50IGl4Z2JlX2Zjb2VfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiBpbnQgaXhnYmVfZmNvZV9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBpeGdiZV9mcm9tX25ldGRldihuZXRkZXYpOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CiYjNDM7CWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSkKJiM0MzsJCXJldHVybiAtRU5FVERPV047CiAKIAlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDthZGFwdGVyLSZndDtmY29lLnJlZmNudCkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtODg5LDggJiM0Mzs4OTksMTAgQEAgaW50IGl4Z2JlX2Zjb2VfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWlmICghKGFkYXB0ZXItJmd0O2ZsYWdzICZhbXA7IElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJcnVubmluZyA9IGl4Z2JlX25ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsKIAllX2luZm8oZHJ2LCAmIzM0O0Rpc2FibGluZyBGQ29FIG9mZmxvYWQgZmVhdHVyZXMuXG4mIzM0Oyk7Ci0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJaWYgKHJ1bm5pbmcpCiAJCW5ldGRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX3N0b3AobmV0ZGV2KTsKIAogCS8qIEZyZWUgcGVyIENQVSBtZW1vcnkgdG8gdHJhY2sgRERQIHBvb2xzICovCkBAIC05MDYsNyAmIzQzOzkxOCw3IEBAIGludCBpeGdiZV9mY29lX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlpeGdiZV9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpOwogCWl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTsKIAotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiYjNDM7CWlmIChydW5uaW5nKQogCQluZXRkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19vcGVuKG5ldGRldik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYwppbmRleCA4ODczYThjYzRhMTg1MS4uZjBjYjY0YTg0MDIxNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTc0MDEsNyAmIzQzOzc0MDEsNyBAQCBzdGF0aWMgaW50IGl4Z2JlX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpCiAJLyogbXVzdCBzZXQgbmV3IE1UVSBiZWZvcmUgY2FsbGluZyBkb3duIG9yIHVwICovCiAJV1JJVEVfT05DRShuZXRkZXYtJmd0O210dSwgbmV3X210dSk7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQomIzQzOwlpZiAoaXhnYmVfbmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQlpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOwogCiAJcmV0dXJuIDA7CkBAIC05OTAzLDYgJiM0Mzs5OTAzLDcgQEAgaW50IGl4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYoZGV2KTsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFtcDthZGFwdGVyLSZndDtodzsKJiM0MzsJYm9vbCBydW5uaW5nID0gaXhnYmVfbmV0aWZfcnVubmluZyhkZXYpOwogCiAJLyogSGFyZHdhcmUgc3VwcG9ydHMgdXAgdG8gOCB0cmFmZmljIGNsYXNzZXMgKi8KIAlpZiAodGMgJmd0OyBhZGFwdGVyLSZndDtkY2JfY2ZnLm51bV90Y3MucGdfdGNzKQpAQCAtOTkxNSw3ICYjNDM7OTkxNiwxMCBAQCBpbnQgaXhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJICogbWF0Y2ggcGFja2V0IGJ1ZmZlciBhbGlnbm1lbnQuIFVuZm9ydHVuYXRlbHksIHRoZQogCSAqIGhhcmR3YXJlIGlzIG5vdCBmbGV4aWJsZSBlbm91Z2ggdG8gZG8gdGhpcyBkeW5hbWljYWxseS4KIAkgKi8KLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQomIzQzOwlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpCiYjNDM7CQlyZXR1cm4gLUVORVRET1dOOwomIzQzOwomIzQzOwlpZiAocnVubmluZykKIAkJaXhnYmVfY2xvc2UoZGV2KTsKIAllbHNlCiAJCWl4Z2JlX3Jlc2V0KGFkYXB0ZXIpOwpAQCAtOTkyOCw3ICYjNDM7OTkzMiw3IEBAIGludCBpeGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YykKIAkJCWVfd2Fybihwcm9iZSwgJiMzNDtEQ0IgaXMgbm90IHN1cHBvcnRlZCB3aXRoIFhEUFxuJiMzNDspOwogCiAJCQlpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7Ci0JCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQomIzQzOwkJCWlmIChydW5uaW5nKQogCQkJCWl4Z2JlX29wZW4oZGV2KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC05OTYzLDcgJiM0Mzs5OTY3LDcgQEAgaW50IGl4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKQogCiAJaXhnYmVfZGVmcmFnX21hY3ZsYW5fcG9vbHMoZGV2KTsKIAotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCiYjNDM7CWlmIChydW5uaW5nKQogCQlyZXR1cm4gaXhnYmVfb3BlbihkZXYpOwogCiAJcmV0dXJuIDA7CkBAIC0xMDQ4OSw5ICYjNDM7MTA0OTMsOSBAQCB2b2lkIGl4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBpeGdiZV9mcm9tX25ldGRldihuZXRkZXYpOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJaWYgKGl4Z2JlX25ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJaXhnYmVfcmVpbml0X2xvY2tlZChhZGFwdGVyKTsKLQllbHNlCiYjNDM7CWVsc2UgaWYgKG5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpCiAJCWl4Z2JlX3Jlc2V0KGFkYXB0ZXIpOwogfQogCkBAIC0xMDgyMyw3ICYjNDM7MTA4MjcsNyBAQCBzdGF0aWMgdm9pZCAqaXhnYmVfZndkX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqcGRldiwgc3RydWN0IG5ldF9kZXZpY2UgKnZkZXYpCiAJYWNjZWwtJmd0O3Bvb2wgPSBwb29sOwogCWFjY2VsLSZndDtuZXRkZXYgPSB2ZGV2OwogCi0JaWYgKCFuZXRpZl9ydW5uaW5nKHBkZXYpKQomIzQzOwlpZiAoIWl4Z2JlX25ldGlmX3J1bm5pbmcocGRldikpCiAJCXJldHVybiBhY2NlbDsKIAogCWVyciA9IGl4Z2JlX2Z3ZF9yaW5nX3VwKGFkYXB0ZXIsIGFjY2VsKTsKQEAgLTEwOTU0LDggJiM0MzsxMDk1OCwxMCBAQCBzdGF0aWMgaW50IGl4Z2JlX3hkcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiAJCQlzeW5jaHJvbml6ZV9yY3UoKTsKIAkJZXJyID0gaXhnYmVfc2V0dXBfdGMoZGV2LCBhZGFwdGVyLSZndDtod190Y3MpOwogCi0JCWlmIChlcnIpCiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJeGNoZygmYW1wO2FkYXB0ZXItJmd0O3hkcF9wcm9nLCBvbGRfcHJvZyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KIAkJaWYgKCFwcm9nKQogCQkJeGRwX2ZlYXR1cmVzX2NsZWFyX3JlZGlyZWN0X3RhcmdldChkZXYpOwogCX0gZWxzZSB7CkBAIC0xMjMzOCw2ICYjNDM7MTIzNDQsOTQgQEAgc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgaXhnYmVfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlyZXR1cm4gcmVzdWx0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogaXhnYmVfcGNpX3Jlc2V0X3ByZXBhcmUgLSBjYWxsZWQgYmVmb3JlIHRoZSBwY2kgYnVzIGlzIHJlc2V0LgomIzQzOyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKJiM0MzsgKgomIzQzOyAqIFF1aWVzY2UgdGhlIGRyaXZlciBpbiBwcmVwYXJhdGlvbiBmb3IgYSBQQ0kgZnVuY3Rpb24gcmVzZXQuIENhbGxlZCBmcm9tCiYjNDM7ICogcGNpX2Rldl9zYXZlX2FuZF9kaXNhYmxlKCkgYmVmb3JlIHRoZSBjb3JlIHNhdmVzIGNvbmZpZyBzdGF0ZSBhbmQgd3JpdGVzCiYjNDM7ICogUENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFIHRvIGNsZWFyIGJ1cyBtYXN0ZXJpbmcgYW5kIE1NSU8gZGVjb2RlLCBzbyBNTUlPCiYjNDM7ICogYWNjZXNzIHRvIHRoZSBkZXZpY2UgaXMgc3RpbGwgdmFsaWQgaGVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpeGdiZV9wY2lfcmVzZXRfcHJlcGFyZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwomIzQzOwomIzQzOwlpZiAoIWFkYXB0ZXIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW5ldGRldiA9IGFkYXB0ZXItJmd0O25ldGRldjsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJCWl4Z2JlX2Nsb3NlX3N1c3BlbmQoYWRhcHRlcik7CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CS8qIF9fSVhHQkVfUkVTRVRUSU5HIGlzIGludGVudGlvbmFsbHkgbm90IHNldCBoZXJlOiBpdCBpcyBzcHVuIG9uCiYjNDM7CSAqIHdoaWxlIGhvbGRpbmcgcnRubCBieSBpeGdiZV9yZWluaXRfbG9ja2VkKCksIGl4Z2JlX2RjYm5sX2RldnJlc2V0KCkKJiM0MzsJICogYW5kIHRoZSBldGh0b29sIHJlc2V0IHBhdGhzLCBzbyBob2xkaW5nIGl0IGFjcm9zcyB0aGUgcnRubCBkcm9wCiYjNDM7CSAqIHdvdWxkIGRlYWRsb2NrIHRob3NlIGNhbGxlcnMgYWdhaW5zdCBpeGdiZV9wY2lfcmVzZXRfZG9uZSgpLCB3aGljaAomIzQzOwkgKiBuZWVkcyB0byByZS1hY3F1aXJlIHJ0bmwuICBEdXJpbmcgdGhlIHJlc2V0IHdpbmRvdyBjb25jdXJyZW50CiYjNDM7CSAqIHJ0bmwtaG9sZGluZyBwYXRocyBtdXN0IHRyZWF0IHRoZSBuZXRkZXYgYXMgZGV0YWNoZWQsIHdoaWxlIHRlYXJkb3duCiYjNDM7CSAqIHBhdGhzIGFsc28gb2JzZXJ2ZSBfX0lYR0JFX0RPV04gc2V0IGJ5IGl4Z2JlX2Rvd24oKSB2aWEKJiM0MzsJICogaXhnYmVfY2xvc2Vfc3VzcGVuZCgpLCBtYXRjaGluZyB0aGUgZXhpc3RpbmcgaXhnYmVfaW9fZXJyb3JfZGV0ZWN0ZWQoKQomIzQzOwkgKiBmbG93LgomIzQzOwkgKi8KJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KF9fSVhHQkVfU0VSVklDRV9JTklURUQsICZhbXA7YWRhcHRlci0mZ3Q7c3RhdGUpKSB7CiYjNDM7CQkvKiBUaGUgc2VydmljZSB0aW1lciB3YXMgYWxyZWFkeSBzdG9wcGVkIGJ5IGl4Z2JlX2Rvd24oKSB2aWEKJiM0MzsJCSAqIGl4Z2JlX2Nsb3NlX3N1c3BlbmQoKTsgaWYgdGhlIG5ldGRldiB3YXMgbm90IHJ1bm5pbmcsIHRoZQomIzQzOwkJICogdGltZXIgaXMgbm90IGFybWVkLiAgT25seSB0aGUgY3VycmVudGx5IHF1ZXVlZCBzZXJ2aWNlIHRhc2sKJiM0MzsJCSAqIChpZiBhbnkpIHN0aWxsIG5lZWRzIHRvIGJlIGZsdXNoZWQgaGVyZS4KJiM0MzsJCSAqLwomIzQzOwkJY2FuY2VsX3dvcmtfc3luYygmYW1wO2FkYXB0ZXItJmd0O3NlcnZpY2VfdGFzayk7CiYjNDM7CQljbGVhcl9iaXQoX19JWEdCRV9TRVJWSUNFX1NDSEVELCAmYW1wO2FkYXB0ZXItJmd0O3N0YXRlKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBpeGdiZV9wY2lfcmVzZXRfZG9uZSAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC4KJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZS1pbml0aWFsaXplIHRoZSBkZXZpY2UgYWZ0ZXIgYSBQQ0kgZnVuY3Rpb24gcmVzZXQuIFRoZSBQQ0kgY29yZSBoYXMKJiM0MzsgKiBhbHJlYWR5IGNhbGxlZCBwY2lfcmVzdG9yZV9zdGF0ZSgpIGJlZm9yZSBpbnZva2luZyB0aGlzIGNhbGxiYWNrLCBzbyB0aGUKJiM0MzsgKiBzYXZlZCBDb21tYW5kIHJlZ2lzdGVyIChpbmNsdWRpbmcgYnVzIG1hc3RlcmluZykgaXMgYmFjayBpbiBwbGFjZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpeGdiZV9wY2lfcmVzZXRfZG9uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlpZiAoIWFkYXB0ZXIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW5ldGRldiA9IGFkYXB0ZXItJmd0O25ldGRldjsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CWFkYXB0ZXItJmd0O2h3Lmh3X2FkZHIgPSBhZGFwdGVyLSZndDtpb19hZGRyOwomIzQzOwlpeGdiZV9yZXNldChhZGFwdGVyKTsKJiM0MzsJSVhHQkVfV1JJVEVfUkVHKCZhbXA7YWRhcHRlci0mZ3Q7aHcsIElYR0JFX1dVUywgfjApOwomIzQzOwlydW5uaW5nID0gbmV0aWZfcnVubmluZyhuZXRkZXYpOwomIzQzOwlpZiAocnVubmluZykgewomIzQzOwkJZXJyID0gaXhnYmVfb3BlbihuZXRkZXYpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCWVfZGV2X2VycigmIzM0O0Nhbm5vdCByZS1vcGVuIG5ldGRldiBhZnRlciBQQ0kgcmVzZXQ6ICVkLiBBIG5ldyByZXNldCBpcyBuZWVkZWQuXG4mIzM0OywKJiM0MzsJCQkJICBlcnIpOwomIzQzOwkJCWRldl9jbG9zZShuZXRkZXYpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CS8qIFJlc3RvcmUgcHJlc2VuY2Ugc28gdXNlcnNwYWNlIGNhbiByZXRyeSBsYXRlci4gSWYgaXhnYmVfb3BlbigpIGZhaWxlZCwKJiM0MzsJICogZGV2X2Nsb3NlKCkgY2xlYXJlZCBJRkZfVVAgZmlyc3Qgc28gbmV0aWZfZGV2aWNlX2F0dGFjaCgpIHdpbGwgbm90IHdha2UKJiM0MzsJICogVHggcXVldWVzIHdpdGhvdXQgYSBzdWNjZXNzZnVsIG9wZW4uCiYjNDM7CSAqLwomIzQzOwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpeGdiZV9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLgogICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQpAQCAtMTIzNzAsNiAmIzQzOzEyNDY0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaXhnYmVfZXJyX2hhbmRsZXIgPSB7CiAJLmVycm9yX2RldGVjdGVkID0gaXhnYmVfaW9fZXJyb3JfZGV0ZWN0ZWQsCiAJLnNsb3RfcmVzZXQgPSBpeGdiZV9pb19zbG90X3Jlc2V0LAogCS5yZXN1bWUgPSBpeGdiZV9pb19yZXN1bWUsCiYjNDM7CS5yZXNldF9wcmVwYXJlID0gaXhnYmVfcGNpX3Jlc2V0X3ByZXBhcmUsCiYjNDM7CS5yZXNldF9kb25lID0gaXhnYmVfcGNpX3Jlc2V0X2RvbmUsCiB9OwogCiBzdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKGl4Z2JlX3BtX29wcywgaXhnYmVfc3VzcGVuZCwgaXhnYmVfcmVzdW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmMKaW5kZXggODlmOTZjNDYzZjAyMjQuLjAyODIwOTgyYjIwMjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94c2suYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94c2suYwpAQCAtMzksNyAmIzQzOzM5LDcgQEAgc3RhdGljIGludCBpeGdiZV94c2tfcG9vbF9lbmFibGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWlmX3J1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKGFkYXB0ZXItJmd0O25ldGRldikgJmFtcDsmYW1wOwomIzQzOwlpZl9ydW5uaW5nID0gaXhnYmVfbmV0aWZfcnVubmluZyhhZGFwdGVyLSZndDtuZXRkZXYpICZhbXA7JmFtcDsKIAkJICAgICBpeGdiZV9lbmFibGVkX3hkcF9hZGFwdGVyKGFkYXB0ZXIpOwogCiAJaWYgKGlmX3J1bm5pbmcpCkBAIC03MSw3ICYjNDM7NzEsNyBAQCBzdGF0aWMgaW50IGl4Z2JlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBxaWQpCiAJaWYgKCFwb29sKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmX3J1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKGFkYXB0ZXItJmd0O25ldGRldikgJmFtcDsmYW1wOwomIzQzOwlpZl9ydW5uaW5nID0gaXhnYmVfbmV0aWZfcnVubmluZyhhZGFwdGVyLSZndDtuZXRkZXYpICZhbXA7JmFtcDsKIAkJICAgICBpeGdiZV9lbmFibGVkX3hkcF9hZGFwdGVyKGFkYXB0ZXIpOwogCiAJaWYgKGlmX3J1bm5pbmcpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgb2YgdGhlIGl4Z2JlIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGBpeGdiZWAgZHJpdmVyLCBJbnRlbCYjMzk7cyAxMCBHaWdhYml0IEV0aGVybmV0IFBDSSBFeHByZXNzIGRyaXZlci4gSXQmIzM5O3MgbWFraW5nIHNvbWUgY2hhbmdlcyB0byBob3cgdGhlIGRyaXZlciBjaGVja3MgdGhlIG5ldHdvcmsgaW50ZXJmYWNlJiMzOTtzIHN0YXRlLCBhZGRpbmcgUENJIHJlc2V0IGhhbmRsZXJzLiBTZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwYXRjaC4gQnV0IG15IG1haW4gY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIGl0JiMzOTtzIHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6eiBpdC4KCk15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBhIHBoeXNpY2FsIG5ldHdvcmsgY2FyZCBkcml2ZXIuIEZ1enppbmcgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycyBpcyBnZW5lcmFsbHkgdHJpY2t5LCB1bmxlc3MgaXQmIzM5O3MgZW11bGF0ZWQgaW4gc29mdHdhcmUuIFNvLCBjYW4gdGhpcyBiZSBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFPyBUeXBpY2FsbHksIG5vLCB1bmxlc3Mgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgc29tZXRoaW5nIGxpa2UgYGUxMDAwZWAgaW4gUUVNVSwgb3IgYHZpcnRpb2AsIG9yIGB2ZXRoYCwgd2hpY2ggYXJlIGFsbCBlbXVsYXRpb25zLgoKV2FpdC4uLiBkb2VzIFFFTVUgZW11bGF0ZSBgaXhnYmVgPyBJIGNhbiYjMzk7dCBpbW1lZGlhdGVseSBjaGVjayB0aGUgUUVNVSBzb3VyY2UgZGlyZWN0bHkuIEkmIzM5O2QgdHlwaWNhbGx5IHNlYXJjaCBmb3IgdGhlIG1vZHVsZSBuYW1lIG9yIHNpbWlsYXIsIGJ1dCBJIGRvbiYjMzk7dCBoYXZlIGFjY2VzcyB0byB0aGF0IGhlcmUuIEFuZCwgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IHR5cGljYWxseSBmdXp6IFBDSSBkZXZpY2VzIGRpcmVjdGx5LCB1bmxlc3MgdGhleSYjMzk7cmUgZW11bGF0ZWQgb3IgdXNpbmcgc29tZSBicmlkZ2UgbGlrZSB2aGNpL3ZmaW8vZXRjLiBTeXprYWxsZXIgbWlnaHQgaGF2ZSBzb21lIGxpbWl0ZWQgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzIHRocm91Z2ggYSB2aXJ0dWFsIGJyaWRnZSwgYnV0IHRoZXkmIzM5O3JlIHVzdWFsbHkgc3BlY2lmaWMgb3IgbGltaXRlZC4KCkJ1dCB3YWl0IGEgbWludXRlLCBRRU1VICpkb2VzKiBoYXZlIG5ldHdvcmsgZGV2aWNlIGVtdWxhdGlvbnMuIEkga25vdyBpdCBoYXMgYGUxMDAwYCwgYGUxMDAwZWAsIGFuZCBgaWdiYC4gRG9lcyBRRU1VIGhhdmUgYGl4Z2JlYD8gTGV0IG1lIGxvb2suLi4gTm9wZSwgUUVNVSBoYXMgYGlnYmAsIHRoZSBJbnRlbCA4MjU3Ni4gYGl4Z2JlYCBpcyB0aGUgSW50ZWwgODI1OTkuIFFFTVUgZG9lc24mIzM5O3Qgc2VlbSB0byBoYXZlIG5hdGl2ZSBgaXhnYmVgIGVtdWxhdGlvbi4gSSBjYW4mIzM5O3QgcXVpY2tseSB2ZXJpZnkgdGhpcywgYnV0IHRoYXQmIzM5O3MgbXkgaHVuY2guCgpEb2VzIHN5emthbGxlciB0YXJnZXQgdGhpcz8gRG9lcyBpdCB1c2UgYHN5el9wY2lfZGV2aWNlYD8gTm8uIElzIGBpeGdiZWAgcmVhY2hhYmxlIGluIEdDRSBvciBRRU1VPyBHQ0UgdXNlcyBgdmlydGlvLW5ldGAgb3IgYGd2ZWAuIFFFTVUgdXNlcyBgZTEwMDBgLCBgZTEwMDBlYCwgYHZpcnRpby1uZXRgLCBldGMuIEkmIzM5O20gZ29pbmcgaW4gY2lyY2xlcyBoZXJlIQoKVGhlIGNvcmUgcHJvYmxlbSwgYW5kIHRoZSBwcm9tcHQgcmVpbmZvcmNlcyB0aGlzOiBUaGUgcGF0Y2ggZXhwbGljaXRseSBtZW50aW9ucyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgdW5sZXNzIGhhcmR3YXJlIGlzIGVtdWxhdGVkLiBJZiBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgYGl4Z2JlYCwgdGhlbiB0aGlzIHBhdGNoJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eSAqaXMqIHVucmVhY2hhYmxlIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLgoKSSYjMzk7ZCBuZWVkIHRvIGNoZWNrIGlmIFFFTVUgKmFjdHVhbGx5KiBlbXVsYXRlcyBgaXhnYmVgLiBJIGNhbiYjMzk7dCBjaGVjayBRRU1VIHNvdXJjZSwgYnV0IEkgY2FuIGNoZWNrIGZvciBhbnkgc3l6Ym90IHJlcG9ydHMgcmVsYXRlZCB0byBgaXhnYmVgLiBMZXQgbWUgbG9vay4uLiBOb3BlLiBRRU1VIGRvZXNuJiMzOTt0IHNlZW0gdG8gZW11bGF0ZSBpdC4gSXQgKmRvZXMqIGVtdWxhdGUgYGUxMDAwYCwgYGUxMDAwZWAsIGFuZCBgaWdiYC4KCk9rYXksIHNvIG1heWJlIEkgc2hvdWxkIGxvb2sgYXQgdGhlIGtlcm5lbCBzb3VyY2UuIERvZXMgdGhlIGtlcm5lbCBoYXZlIGFueSBoaW50cyBvZiBgaXhnYmVgIGJlaW5nIGZ1enplZCBvciB1c2VkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzPyBOby4gSSAqY291bGQqIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBoZXJlLCBiZWNhdXNlIG9mIHRoYXQuIFRoaXMgc2VlbXMgbGlrZSBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlciwgbm90IHNvbWV0aGluZyB0eXBpY2FsbHkgZnV6emVkIHVubGVzcyB0aGVyZSBpcyBlbXVsYXRpb24uCgpXYWl0LCBpcyBgaXhnYmVgIGVtdWxhdGVkPyBJIG5lZWQgdG8gc2VhcmNoIHRoZSB3ZWI6IFFFTVUgbmV0d29yayBkZXZpY2VzLiBObyBgaXhnYmVgLiBRRU1VIGFkZGVkIGBpZ2JgIHJlY2VudGx5IChJbnRlbCA4MjU3NikuIGBpeGdiZWAgaXMgMTBHYkUgKEludGVsIDgyNTk5KS4gUUVNVSBkb2VzbiYjMzk7dCBoYXZlIGl4Z2JlIGVtdWxhdGlvbi4gRXZlbiBpZiBpdCBkaWQsIHN5emthbGxlciBwcm9iYWJseSB3b3VsZG4mIzM5O3QgY29uZmlndXJlIGl0IHVubGVzcyBpdCB3YXMgYSBkZWZhdWx0LgoKU28gSSB0aGluayBJIGNhbiBjb25jbHVkZTogVW5sZXNzIHNvbWV0aGluZyB2ZXJ5IHNwZWNpZmljIGNhbiBiZSBhcnJhbmdlZCwgdGhlIHBhdGNoIGlzIGxpa2VseSBub3QgZnV6emFibGUuIFVubGVzcyB0aGVyZSBpcyBlbXVsYXRpb24uCgpMZXQmIzM5O3MgY2hlY2sgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzYCwgYnV0IEkmIzM5O2QgZ3Vlc3MgdGhlcmUmIzM5O3Mgbm90aGluZyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpeGdiZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3RpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmMtOC0gKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX3ZsYW4uYzo5OiAqICAjIGV0aHRvb2wgLUsgaXhnYmUyIHJ4dmxhbiBvZmZcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmMtMTAtICpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmMtMTEtICogVmVyaWZ5IHNldHRpbmc6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jOjEyOiAqICAjIGV0aHRvb2wgLWsgaXhnYmUyIHwgZ3JlcCByeC12bGFuLW9mZmxvYWRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmMtMTMtICogIHJ4LXZsYW4tb2ZmbG9hZDogb2ZmXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX3ZsYW4uYz0xMjc9Q29tbWFuZHMgdG8gc2V0dXAgVkxBTiBvbiBMaW51eCB0byB0ZXN0IHBhY2tldHMgZ2V0cyBkcm9wcGVkOlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX3ZsYW4uYy0xMjgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jOjEyOTogZXhwb3J0IFJPT1RERVY9aXhnYmUyXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jLTEzMC0gZXhwb3J0IFZMQU5JRD00MDExXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX3ZsYW4uYz0yNjU9Q29tbWFuZHMgdG8gc2V0dXAgVEMgdG8gdXNlIGFib3ZlIGJwZiBwcm9nOlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX3ZsYW4uYy0yNjYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jOjI2NzpleHBvcnQgUk9PVERFVj1peGdiZTJcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmMtMjY4LWV4cG9ydCBGSUxFPXhkcF92bGFuMDFfa2Vybi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MTkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgaXhnYmUgRHJpdmVyIGFuZCBTeXprYWxsZXImIzM5O3MgUENJIENhcGFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyBgaXhnYmVgIG1lbnRpb25lZCBjYXN1YWxseSBpbiB0aGUgY29tbWVudHMsIHdoaWNoIGRvZXNuJiMzOTt0IHJlYWxseSBnaXZlIG1lIGFueSBhY3Rpb25hYmxlIGluZm9ybWF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhYm91dCB0aGUgYWN0dWFsIGRyaXZlciBkaXJlY3Rvcnk6IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9gPyBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGRyaXZlciBsaXZlcy4KCk5vdywgbXkgaW5pdGlhbCBpbnR1aXRpb24gaXMgdGhhdCBzeXprYWxsZXIgKnJhcmVseSogZ2V0cyBpbnZvbHZlZCBpbiBmdXp6aW5nIHBoeXNpY2FsIEV0aGVybmV0IGRyaXZlcnMsIHVubGVzcyB0aGV5JiMzOTtyZSBydW5uaW5nIGluIHNvbWUga2luZCBvZiBlbXVsYXRlZCBlbnZpcm9ubWVudC4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBhcHByb2FjaC4KCkJ1dC4uLiBoYW5nIG9uLiBEb2VzIHN5emthbGxlciBldmVuICpoYXZlKiBhIG1lY2hhbmlzbSB0byBmdXp6IFBDSSBkZXZpY2VzPyBJIHNlZW0gdG8gcmVjYWxsIHNvbWV0aGluZyBhYm91dCBpdC4gTGV0IG1lIHRyeSB0byByZW1lbWJlciwgc29tZXRoaW5nIGxpa2UgYHN5el9wY2lfZGV2aWNlYCBvciBgc3l6X3BjaV9kZXZpY2Vfc2V0dXBgLi4uIE5vcGUsIHRoYXQmIzM5O3Mgbm90IHJpbmdpbmcgYW55IGJlbGxzLgoKV2FpdCBhIG1pbnV0ZSwgbWF5YmUgaXQgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyPyBJIGNvdWxkIGJlIG1pc3JlbWVtYmVyaW5nLCBvciBwZXJoYXBzIGl0JiMzOTtzIGJlZW4gYWRkZWQgcmVjZW50bHkuIExldCYjMzk7cyBub3QgYXNzdW1lIGFueXRoaW5nLiBJIG5lZWQgdG8gZ2V0IGJhY2sgdG8gYmFzaWNzIGFuZCBjaGVjayBpZiB0aGVyZSYjMzk7cyBhbnkgb2ZmaWNpYWwgc3l6a2FsbGVyIGRvY3VtZW50YXRpb24gb3IgZGVzY3JpcHRpb25zIHRoYXQgZm9jdXMgb24gUENJIGRldmljZSBmdXp6aW5nLiBJIGhhdmUgdG8gZmluZCBjb25jcmV0ZSBldmlkZW5jZSBhbmQgbm90IHJlbHkgb24gaGFsZi1yZW1lbWJlcmVkIG5vdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXpfcGNpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE3NgoJCQkJCQkJb3V0cHV0OiA4OAoJCQkJCQkJdGhvdWdodHM6IDU1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIGl4Z2JlIERyaXZlcioqCgpPa2F5LCBoZXJlJiMzOTtzIGhvdyBJJiMzOTttIGFwcHJvYWNoaW5nIHRoaXMuIFRoZSBwcm9tcHQgc3BlY2lmaWVzIGNyaXRlcmlhIGZvciBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVsZXZhbnQgY2xhdXNlIGlzIGFib3V0IGNvZGUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBpeGdiZWAsIGJlaW5nIGEgcGh5c2ljYWwgbmV0d29yayBjYXJkIGRyaXZlciAoSW50ZWwgMTBHYkUpLCBpcyBpbmhlcmVudGx5IHVucmVhY2hhYmxlIGluIHRoZXNlIHZpcnR1YWxpemVkIHNldHVwcy4gUUVNVSBlbXVsYXRlcyBvdGhlciBJbnRlbCBuZXR3b3JrIGNhcmRzIGxpa2UgZTEwMDAsIGUxMDAwZSwgYW5kIGlnYiwgYnV0IG5vdCBpeGdiZSwgYXMgZmFyIGFzIEkga25vdy4KCkkgbmVlZCB0byBjb25maXJtLCBzbyBJJiMzOTttIGRvaW5nIGEgcXVpY2sgbWVudGFsIHNlYXJjaC4gTm8gYHN5el9wY2lgIHdvdWxkIGJlIHVzZWQgaGVyZSBlaXRoZXIsIHNvIHRoYXQgaXMgYW5vdGhlciBwb2ludC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIG15IGtub3dsZWRnZSBiYXNlIOKAkyBsZXQmIzM5O3Mgc2VlLCBoYXMgUUVNVSBhZGRlZCBzdXBwb3J0IGZvciBpeGdiZT8gQWgsIEkgcmVtZW1iZXIgdGhleSBhZGRlZCBgaWdiYCByZWNlbnRseSwgYnV0IG5vdCBgaXhnYmVgLiBJIGtub3cgdGhhdCBzdGFuZGFyZCBRRU1VIGRvZXNuJiMzOTt0IG9mZmVyIGBpeGdiZWAgZW11bGF0aW9uLCB0aG91Z2ggc29tZSBmb3JrcyAqbWlnaHQqLCBidXQgaXQmIzM5O3Mgbm90IHRoZSBub3JtLiBBbmQgZXZlbiBpZiBhIGZvcmsgaGFkIGl0LCBzeXprYWxsZXIgaXMgdW5saWtlbHkgdG8gY29uZmlndXJlIG9yIHVzZSBzdWNoIGEgZGV2aWNlLiBTbywgaXQmIzM5O3Mgbm90IGdlbmVyYWxseSBhdmFpbGFibGUgaW4gYSBmdXp6aW5nIGNvbnRleHQuCgpDYW4gSSByZWFjaCB0aGUgY29kZSBzb21lIG90aGVyIHdheT8gUGVyaGFwcyB0aHJvdWdoIFZGSU8gKFZpcnR1YWwgRnVuY3Rpb24gSS9PKT8gQnV0IFZGSU8gcmVsaWVzIG9uIGhhcmR3YXJlIHBhc3N0aHJvdWdoIG9yLCBhdCBsZWFzdCwgYSBtb2NrIGRldmljZS4gSXMgdGhlcmUgYSBtb2NrIGRldmljZSBmb3IgYGl4Z2JlYD8gTm9wZSwgbm90IHRoYXQgSSYjMzk7bSBhd2FyZSBvZi4KClNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhci4gVGhlIGNvZGUgcGF0aHMgd2l0aGluIHRoZSBgaXhnYmVgIGRyaXZlciBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSB3aGljaCBzeXprYWxsZXIgZG9lcyBub3QgaGF2ZSBhY2Nlc3MgdG8uCgpMZXQgbWUganVzdCB2ZXJpZnkgdGhhdCB0aGVyZSYjMzk7cyBubyB2aXJ0dWFsIGRyaXZlciBhdmFpbGFibGUgaW4gdGhlIGtlcm5lbCB0aGF0IEkmIzM5O20gbWlzc2luZy4gUmlnaHQsIGBpeGdiZXZmYCBpcyB0aGUgdmlydHVhbCBmdW5jdGlvbiBkcml2ZXIsIGJ1dCB0aGF0ICpzdGlsbCogcmVxdWlyZXMgYSBwaHlzaWNhbCBQRiAocGh5c2ljYWwgZnVuY3Rpb24pIG9yIGFuIGVtdWxhdG9yLiBJdCBkb2VzbiYjMzk7dCBtYWtlIHRoaXMgcGF0aCByZWFjaGFibGUsIHNvIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXhnYmUgZHJpdmVyIChJbnRlbCAxMCBHaWdhYml0IEV0aGVybmV0KSwgd2hpY2ggaXMgYSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXIuIFN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2VkIGZvciBmdXp6aW5nIChsaWtlIFFFTVUgb3IgR0NFKSBkbyBub3QgZW11bGF0ZSBpeGdiZSBoYXJkd2FyZSwgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXhnYmUgZHJpdmVyIChJbnRlbCAxMCBHaWdhYml0IEV0aGVybmV0KSwgd2hpY2ggaXMgYSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXIuIFN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2VkIGZvciBmdXp6aW5nIChsaWtlIFFFTVUgb3IgR0NFKSBkbyBub3QgZW11bGF0ZSBpeGdiZSBoYXJkd2FyZSwgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTFUMDc6MzA6MDUuNTQxMDkzNTYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM5ODMyNzU1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpeGdiZSBkcml2ZXIgKEludGVsIDEwIEdpZ2FiaXQgRXRoZXJuZXQpLCB3aGljaCBpcyBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlci4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzZWQgZm9yIGZ1enppbmcgKGxpa2UgUUVNVSBvciBHQ0UpIGRvIG5vdCBlbXVsYXRlIGl4Z2JlIGhhcmR3YXJlLCBtYWtpbmcgdGhlc2UgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA3OjMwOjA1LjU0MTA5ODA5MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkxMTQ4NzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTM4MGRlN2IyNzY4MzQyZjA5OGNkOGRiMzk4OTZmZDJkZDZkYzc3ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxMSAwNzozMDowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmUuaFxcbmluZGV4IDliODIxNzUyM2ZkMjY2Li40NGNmMDM3Y2MxNjdlYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZS5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmUuaFxcbkBAIC05NTQsNiArOTU0LDExIEBAIGV4dGVybiBjaGFyIGl4Z2JlX2RyaXZlcl9uYW1lW107XFxuIGV4dGVybiBjaGFyIGl4Z2JlX2RlZmF1bHRfZGV2aWNlX2Rlc2NyW107XFxuICNlbmRpZiAvKiBJWEdCRV9GQ09FICovXFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgaXhnYmVfbmV0aWZfcnVubmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbit7XFxuK1xcdHJldHVybiBuZXRpZl9ydW5uaW5nKG5ldGRldikgXFx1MDAyNlxcdTAwMjYgbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KTtcXG4rfVxcbitcXG4gaW50IGl4Z2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuIGludCBpeGdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcXG4gdm9pZCBpeGdiZV91cChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2RjYl9ubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZGNiX25sLmNcXG5pbmRleCAzODJkMDk3ZTRiMTFlMC4uN2M3NDA4ZDMyNzQyYzcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZGNiX25sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9kY2JfbmwuY1xcbkBAIC0yNzcsMTcgKzI3NywyMyBAQCBzdGF0aWMgdm9pZCBpeGdiZV9kY2JubF9nZXRfcGZjX2NmZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcHJpb3JpdHksXFxuIHN0YXRpYyB2b2lkIGl4Z2JlX2RjYm5sX2RldnJlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBpeGdiZV9mcm9tX25ldGRldihkZXYpO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcbitcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJ1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKGRldik7XFxuIFxcbiBcXHR3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX0lYR0JFX1JFU0VUVElORywgXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXN0YXRlKSlcXG4gXFx0XFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xcbiBcXG4tXFx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcXG4rXFx0aWYgKHJ1bm5pbmcpXFxuIFxcdFxcdGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3N0b3AoZGV2KTtcXG4gXFxuIFxcdGl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7XFxuIFxcdGl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTtcXG4gXFxuLVxcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXFxuK1xcdGlmIChydW5uaW5nKVxcbiBcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19vcGVuKGRldik7XFxuIFxcbiBcXHRjbGVhcl9iaXQoX19JWEdCRV9SRVNFVFRJTkcsIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VzdGF0ZSk7XFxuQEAgLTUxNSw2ICs1MjEsOSBAQCBzdGF0aWMgaW50IGl4Z2JlX2RjYm5sX2llZWVfc2V0ZXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdGlmICghKGFkYXB0ZXItXFx1MDAzZWRjYnhfY2FwIFxcdTAwMjYgRENCX0NBUF9EQ0JYX1ZFUl9JRUVFKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXFxuK1xcdFxcdHJldHVybiAtRU5FVERPV047XFxuK1xcbiBcXHRpZiAoIWFkYXB0ZXItXFx1MDAzZWl4Z2JlX2llZWVfZXRzKSB7XFxuIFxcdFxcdGFkYXB0ZXItXFx1MDAzZWl4Z2JlX2llZWVfZXRzID0ga21hbGxvY19vYmooc3RydWN0IGllZWVfZXRzKTtcXG4gXFx0XFx0aWYgKCFhZGFwdGVyLVxcdTAwM2VpeGdiZV9pZWVlX2V0cylcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jXFxuaW5kZXggMzZlNDNiNWU4OGQxZjAuLjAyYWZmNDExNDI2ZDE5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2V0aHRvb2wuY1xcbkBAIC00NjYsNiArNDY2LDkgQEAgc3RhdGljIGludCBpeGdiZV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0dTMyIGFkdmVydGlzZWQsIG9sZDtcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcbitcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXFxuK1xcdFxcdHJldHVybiAtRU5FVERPV047XFxuK1xcbiBcXHRpZiAoKGh3LVxcdTAwM2VwaHkubWVkaWFfdHlwZSA9PSBpeGdiZV9tZWRpYV90eXBlX2NvcHBlcikgfHxcXG4gXFx0ICAgIChody1cXHUwMDNlcGh5Lm11bHRpc3BlZWRfZmliZXIpKSB7XFxuIFxcdFxcdC8qXFxuQEAgLTU3Niw5ICs1NzksOSBAQCBzdGF0aWMgdm9pZCBpeGdiZV9zZXRfcGF1c2VwYXJhbV9maW5hbGl6ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHQvKiBJZiB0aGUgdGhpbmcgY2hhbmdlZCB0aGVuIHdlJ2xsIHVwZGF0ZSBhbmQgdXNlIG5ldyBhdXRvbmVnLiAqL1xcbiBcXHRpZiAobWVtY21wKGZjLCBcXHUwMDI2aHctXFx1MDAzZWZjLCBzaXplb2YoKmZjKSkpIHtcXG4gXFx0XFx0aHctXFx1MDAzZWZjID0gKmZjO1xcbi1cXHRcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbitcXHRcXHRpZiAoaXhnYmVfbmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbiBcXHRcXHRcXHRpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpO1xcbi1cXHRcXHRlbHNlXFxuK1xcdFxcdGVsc2UgaWYgKG5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXFxuIFxcdFxcdFxcdGl4Z2JlX3Jlc2V0KGFkYXB0ZXIpO1xcbiBcXHR9XFxuIH1cXG5AQCAtMTI2Niw3ICsxMjY5LDcgQEAgc3RhdGljIGludCBpeGdiZV9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVfUkVTRVRUSU5HLCBcXHUwMDI2YWRhcHRlci1cXHUwMDNlc3RhdGUpKVxcbiBcXHRcXHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XFxuIFxcbi1cXHRpZiAoIW5ldGlmX3J1bm5pbmcoYWRhcHRlci1cXHUwMDNlbmV0ZGV2KSkge1xcbitcXHRpZiAoIWl4Z2JlX25ldGlmX3J1bm5pbmcoYWRhcHRlci1cXHUwMDNlbmV0ZGV2KSkge1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYWRhcHRlci1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbiBcXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2V0eF9yaW5nW2ldLVxcdTAwM2Vjb3VudCA9IG5ld190eF9jb3VudDtcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFkYXB0ZXItXFx1MDAzZW51bV94ZHBfcXVldWVzOyBpKyspXFxuQEAgLTIyNDksMTAgKzIyNTIsMTEgQEAgc3RhdGljIHZvaWQgaXhnYmVfZGlhZ190ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGhfdGVzdCwgdTY0ICpkYXRhKVxcbiB7XFxuIFxcdHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYobmV0ZGV2KTtcXG4tXFx0Ym9vbCBpZl9ydW5uaW5nID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbitcXHRib29sIGlmX3J1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldik7XFxuIFxcbi1cXHRpZiAoaXhnYmVfcmVtb3ZlZChhZGFwdGVyLVxcdTAwM2Vody5od19hZGRyKSkge1xcbi1cXHRcXHRlX2VycihodywgXFxcIkFkYXB0ZXIgcmVtb3ZlZCAtIHRlc3QgYmxvY2tlZFxcXFxuXFxcIik7XFxuK1xcdGlmIChpeGdiZV9yZW1vdmVkKGFkYXB0ZXItXFx1MDAzZWh3Lmh3X2FkZHIpIHx8XFxuK1xcdCAgICAhbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSkge1xcbitcXHRcXHRlX2VycihodywgXFxcIkFkYXB0ZXIgcmVtb3ZlZCBvciBkZXRhY2hlZCAtIHRlc3QgYmxvY2tlZFxcXFxuXFxcIik7XFxuIFxcdFxcdGRhdGFbMF0gPSAxO1xcbiBcXHRcXHRkYXRhWzFdID0gMTtcXG4gXFx0XFx0ZGF0YVsyXSA9IDE7XFxuQEAgLTI0NjYsNyArMjQ3MCw3IEBAIHN0YXRpYyBpbnQgaXhnYmVfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYobmV0ZGV2KTtcXG4gXFxuLVxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdGlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuIFxcdFxcdGl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMjY1MCw3ICsyNjU0LDggQEAgc3RhdGljIGludCBpeGdiZV9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHQvKiByeCBvbmx5IG9yIG1peGVkICovXFxuIFxcdFxcdFxcdHFfdmVjdG9yLVxcdTAwM2VpdHIgPSByeF9pdHJfcGFyYW07XFxuLVxcdFxcdGl4Z2JlX3dyaXRlX2VpdHIocV92ZWN0b3IpO1xcbitcXHRcXHRpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcXG4rXFx0XFx0XFx0aXhnYmVfd3JpdGVfZWl0cihxX3ZlY3Rvcik7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuQEAgLTM2OTQsNiArMzY5OSw5IEBAIHN0YXRpYyBpbnQgaXhnYmVfc2V0X2VlZV9lNjEwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdCAgICBrZWRhdGEtXFx1MDAzZWVlZV9lbmFibGVkKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbitcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXFxuK1xcdFxcdHJldHVybiAtRU5FVERPV047XFxuK1xcbiBcXHRody1cXHUwMDNlcGh5LmVlZV9zcGVlZHNfYWR2ZXJ0aXNlZCA9IGtlZGF0YS1cXHUwMDNlZWVlX2VuYWJsZWQgP1xcbiBcXHRcXHRcXHRcXHRcXHRody1cXHUwMDNlcGh5LmVlZV9zcGVlZHNfc3VwcG9ydGVkIDogMDtcXG4gXFxuQEAgLTM3MDksOSArMzcxNyw5IEBAIHN0YXRpYyBpbnQgaXhnYmVfc2V0X2VlZV9lNjEwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdGVsc2VcXG4gXFx0XFx0YWRhcHRlci1cXHUwMDNlZmxhZ3MyIFxcdTAwMjY9IH5JWEdCRV9GTEFHMl9FRUVfRU5BQkxFRDtcXG4gXFxuLVxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdGlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuIFxcdFxcdGl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7XFxuLVxcdGVsc2VcXG4rXFx0ZWxzZSBpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcXG4gXFx0XFx0aXhnYmVfcmVzZXQoYWRhcHRlcik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMzc5Myw5ICszODAxLDkgQEAgc3RhdGljIGludCBpeGdiZV9zZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVkYXRhKVxcbiBcXHR9XFxuIFxcbiBcXHQvKiByZXNldCBsaW5rICovXFxuLVxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdGlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuIFxcdFxcdGl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7XFxuLVxcdGVsc2VcXG4rXFx0ZWxzZSBpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcXG4gXFx0XFx0aXhnYmVfcmVzZXQoYWRhcHRlcik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMzg1MSw3ICszODU5LDcgQEAgc3RhdGljIGludCBpeGdiZV9zZXRfcHJpdl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgcHJpdl9mbGFncylcXG4gXFx0XFx0YWRhcHRlci1cXHUwMDNlZmxhZ3MyID0gZmxhZ3MyO1xcbiBcXG4gXFx0XFx0LyogcmVzZXQgaW50ZXJmYWNlIHRvIHJlcG9wdWxhdGUgcXVldWVzICovXFxuLVxcdFxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdFxcdGlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuIFxcdFxcdFxcdGl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2Zjb2UuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2Zjb2UuY1xcbmluZGV4IDAxMWZkYTljNjE5MzljLi5lNGNkNDY3M2YyMWMyYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9mY29lLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9mY29lLmNcXG5AQCAtODM2LDYgKzgzNiwxMCBAQCBpbnQgaXhnYmVfZmNvZV9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KG5ldGRldik7XFxuIFxcdHN0cnVjdCBpeGdiZV9mY29lICpmY29lID0gXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWZjb2U7XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFxuK1xcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcXG4rXFx0XFx0cmV0dXJuIC1FTkVURE9XTjtcXG4gXFxuIFxcdGF0b21pY19pbmMoXFx1MDAyNmZjb2UtXFx1MDAzZXJlZmNudCk7XFxuIFxcbkBAIC04NDUsMTIgKzg0OSwxNCBAQCBpbnQgaXhnYmVfZmNvZV9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aWYgKGFkYXB0ZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0cnVubmluZyA9IGl4Z2JlX25ldGlmX3J1bm5pbmcobmV0ZGV2KTtcXG4rXFxuIFxcdGVfaW5mbyhkcnYsIFxcXCJFbmFibGluZyBGQ29FIG9mZmxvYWQgZmVhdHVyZXMuXFxcXG5cXFwiKTtcXG4gXFxuIFxcdGlmIChhZGFwdGVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRClcXG4gXFx0XFx0ZV93YXJuKHByb2JlLCBcXFwiRW5hYmxpbmcgRkNvRSBvbiBQRiB3aWxsIGRpc2FibGUgbGVnYWN5IFZGc1xcXFxuXFxcIik7XFxuIFxcbi1cXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbitcXHRpZiAocnVubmluZylcXG4gXFx0XFx0bmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xcbiBcXG4gXFx0LyogQWxsb2NhdGUgcGVyIENQVSBtZW1vcnkgdG8gdHJhY2sgRERQIHBvb2xzICovXFxuQEAgLTg2NSw3ICs4NzEsNyBAQCBpbnQgaXhnYmVfZmNvZV9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aXhnYmVfY2xlYXJfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTtcXG4gXFx0aXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xcbiBcXG4tXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcXG4rXFx0aWYgKHJ1bm5pbmcpXFxuIFxcdFxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC04ODIsNiArODg4LDEwIEBAIGludCBpeGdiZV9mY29lX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBpbnQgaXhnYmVfZmNvZV9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBpeGdiZV9mcm9tX25ldGRldihuZXRkZXYpO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcbitcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXFxuK1xcdFxcdHJldHVybiAtRU5FVERPV047XFxuIFxcbiBcXHRpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWZjb2UucmVmY250KSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTg4OSw4ICs4OTksMTAgQEAgaW50IGl4Z2JlX2Zjb2VfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRpZiAoIShhZGFwdGVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRydW5uaW5nID0gaXhnYmVfbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbitcXG4gXFx0ZV9pbmZvKGRydiwgXFxcIkRpc2FibGluZyBGQ29FIG9mZmxvYWQgZmVhdHVyZXMuXFxcXG5cXFwiKTtcXG4tXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcXG4rXFx0aWYgKHJ1bm5pbmcpXFxuIFxcdFxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcXG4gXFxuIFxcdC8qIEZyZWUgcGVyIENQVSBtZW1vcnkgdG8gdHJhY2sgRERQIHBvb2xzICovXFxuQEAgLTkwNiw3ICs5MTgsNyBAQCBpbnQgaXhnYmVfZmNvZV9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7XFxuIFxcdGl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTtcXG4gXFxuLVxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdGlmIChydW5uaW5nKVxcbiBcXHRcXHRuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19vcGVuKG5ldGRldik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jXFxuaW5kZXggODg3M2E4Y2M0YTE4NTEuLmYwY2I2NGE4NDAyMTRiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uY1xcbkBAIC03NDAxLDcgKzc0MDEsNyBAQCBzdGF0aWMgaW50IGl4Z2JlX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpXFxuIFxcdC8qIG11c3Qgc2V0IG5ldyBNVFUgYmVmb3JlIGNhbGxpbmcgZG93biBvciB1cCAqL1xcbiBcXHRXUklURV9PTkNFKG5ldGRldi1cXHUwMDNlbXR1LCBuZXdfbXR1KTtcXG4gXFxuLVxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdGlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuIFxcdFxcdGl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtOTkwMyw2ICs5OTAzLDcgQEAgaW50IGl4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxcbiB7XFxuIFxcdHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYoZGV2KTtcXG4gXFx0c3RydWN0IGl4Z2JlX2h3ICpodyA9IFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VodztcXG4rXFx0Ym9vbCBydW5uaW5nID0gaXhnYmVfbmV0aWZfcnVubmluZyhkZXYpO1xcbiBcXG4gXFx0LyogSGFyZHdhcmUgc3VwcG9ydHMgdXAgdG8gOCB0cmFmZmljIGNsYXNzZXMgKi9cXG4gXFx0aWYgKHRjIFxcdTAwM2UgYWRhcHRlci1cXHUwMDNlZGNiX2NmZy5udW1fdGNzLnBnX3RjcylcXG5AQCAtOTkxNSw3ICs5OTE2LDEwIEBAIGludCBpeGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcXG4gXFx0ICogbWF0Y2ggcGFja2V0IGJ1ZmZlciBhbGlnbm1lbnQuIFVuZm9ydHVuYXRlbHksIHRoZVxcbiBcXHQgKiBoYXJkd2FyZSBpcyBub3QgZmxleGlibGUgZW5vdWdoIHRvIGRvIHRoaXMgZHluYW1pY2FsbHkuXFxuIFxcdCAqL1xcbi1cXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxcbitcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXFxuK1xcdFxcdHJldHVybiAtRU5FVERPV047XFxuK1xcbitcXHRpZiAocnVubmluZylcXG4gXFx0XFx0aXhnYmVfY2xvc2UoZGV2KTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRpeGdiZV9yZXNldChhZGFwdGVyKTtcXG5AQCAtOTkyOCw3ICs5OTMyLDcgQEAgaW50IGl4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxcbiBcXHRcXHRcXHRlX3dhcm4ocHJvYmUsIFxcXCJEQ0IgaXMgbm90IHN1cHBvcnRlZCB3aXRoIFhEUFxcXFxuXFxcIik7XFxuIFxcbiBcXHRcXHRcXHRpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7XFxuLVxcdFxcdFxcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXFxuK1xcdFxcdFxcdGlmIChydW5uaW5nKVxcbiBcXHRcXHRcXHRcXHRpeGdiZV9vcGVuKGRldik7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHR9XFxuQEAgLTk5NjMsNyArOTk2Nyw3IEBAIGludCBpeGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcXG4gXFxuIFxcdGl4Z2JlX2RlZnJhZ19tYWN2bGFuX3Bvb2xzKGRldik7XFxuIFxcbi1cXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxcbitcXHRpZiAocnVubmluZylcXG4gXFx0XFx0cmV0dXJuIGl4Z2JlX29wZW4oZGV2KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC0xMDQ4OSw5ICsxMDQ5Myw5IEBAIHZvaWQgaXhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KG5ldGRldik7XFxuIFxcbi1cXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbitcXHRpZiAoaXhnYmVfbmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbiBcXHRcXHRpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpO1xcbi1cXHRlbHNlXFxuK1xcdGVsc2UgaWYgKG5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXFxuIFxcdFxcdGl4Z2JlX3Jlc2V0KGFkYXB0ZXIpO1xcbiB9XFxuIFxcbkBAIC0xMDgyMyw3ICsxMDgyNyw3IEBAIHN0YXRpYyB2b2lkICppeGdiZV9md2RfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpwZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqdmRldilcXG4gXFx0YWNjZWwtXFx1MDAzZXBvb2wgPSBwb29sO1xcbiBcXHRhY2NlbC1cXHUwMDNlbmV0ZGV2ID0gdmRldjtcXG4gXFxuLVxcdGlmICghbmV0aWZfcnVubmluZyhwZGV2KSlcXG4rXFx0aWYgKCFpeGdiZV9uZXRpZl9ydW5uaW5nKHBkZXYpKVxcbiBcXHRcXHRyZXR1cm4gYWNjZWw7XFxuIFxcbiBcXHRlcnIgPSBpeGdiZV9md2RfcmluZ191cChhZGFwdGVyLCBhY2NlbCk7XFxuQEAgLTEwOTU0LDggKzEwOTU4LDEwIEBAIHN0YXRpYyBpbnQgaXhnYmVfeGRwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4gXFx0XFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuIFxcdFxcdGVyciA9IGl4Z2JlX3NldHVwX3RjKGRldiwgYWRhcHRlci1cXHUwMDNlaHdfdGNzKTtcXG4gXFxuLVxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0eGNoZyhcXHUwMDI2YWRhcHRlci1cXHUwMDNleGRwX3Byb2csIG9sZF9wcm9nKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4gXFx0XFx0aWYgKCFwcm9nKVxcbiBcXHRcXHRcXHR4ZHBfZmVhdHVyZXNfY2xlYXJfcmVkaXJlY3RfdGFyZ2V0KGRldik7XFxuIFxcdH0gZWxzZSB7XFxuQEAgLTEyMzM4LDYgKzEyMzQ0LDk0IEBAIHN0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGl4Z2JlX2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdHJldHVybiByZXN1bHQ7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBpeGdiZV9wY2lfcmVzZXRfcHJlcGFyZSAtIGNhbGxlZCBiZWZvcmUgdGhlIHBjaSBidXMgaXMgcmVzZXQuXFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcXG4rICpcXG4rICogUXVpZXNjZSB0aGUgZHJpdmVyIGluIHByZXBhcmF0aW9uIGZvciBhIFBDSSBmdW5jdGlvbiByZXNldC4gQ2FsbGVkIGZyb21cXG4rICogcGNpX2Rldl9zYXZlX2FuZF9kaXNhYmxlKCkgYmVmb3JlIHRoZSBjb3JlIHNhdmVzIGNvbmZpZyBzdGF0ZSBhbmQgd3JpdGVzXFxuKyAqIFBDSV9DT01NQU5EX0lOVFhfRElTQUJMRSB0byBjbGVhciBidXMgbWFzdGVyaW5nIGFuZCBNTUlPIGRlY29kZSwgc28gTU1JT1xcbisgKiBhY2Nlc3MgdG8gdGhlIGRldmljZSBpcyBzdGlsbCB2YWxpZCBoZXJlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgaXhnYmVfcGNpX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuK1xcbitcXHRpZiAoIWFkYXB0ZXIpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG5ldGRldiA9IGFkYXB0ZXItXFx1MDAzZW5ldGRldjtcXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRuZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7XFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdFxcdGl4Z2JlX2Nsb3NlX3N1c3BlbmQoYWRhcHRlcik7XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbitcXHQvKiBfX0lYR0JFX1JFU0VUVElORyBpcyBpbnRlbnRpb25hbGx5IG5vdCBzZXQgaGVyZTogaXQgaXMgc3B1biBvblxcbitcXHQgKiB3aGlsZSBob2xkaW5nIHJ0bmwgYnkgaXhnYmVfcmVpbml0X2xvY2tlZCgpLCBpeGdiZV9kY2JubF9kZXZyZXNldCgpXFxuK1xcdCAqIGFuZCB0aGUgZXRodG9vbCByZXNldCBwYXRocywgc28gaG9sZGluZyBpdCBhY3Jvc3MgdGhlIHJ0bmwgZHJvcFxcbitcXHQgKiB3b3VsZCBkZWFkbG9jayB0aG9zZSBjYWxsZXJzIGFnYWluc3QgaXhnYmVfcGNpX3Jlc2V0X2RvbmUoKSwgd2hpY2hcXG4rXFx0ICogbmVlZHMgdG8gcmUtYWNxdWlyZSBydG5sLiAgRHVyaW5nIHRoZSByZXNldCB3aW5kb3cgY29uY3VycmVudFxcbitcXHQgKiBydG5sLWhvbGRpbmcgcGF0aHMgbXVzdCB0cmVhdCB0aGUgbmV0ZGV2IGFzIGRldGFjaGVkLCB3aGlsZSB0ZWFyZG93blxcbitcXHQgKiBwYXRocyBhbHNvIG9ic2VydmUgX19JWEdCRV9ET1dOIHNldCBieSBpeGdiZV9kb3duKCkgdmlhXFxuK1xcdCAqIGl4Z2JlX2Nsb3NlX3N1c3BlbmQoKSwgbWF0Y2hpbmcgdGhlIGV4aXN0aW5nIGl4Z2JlX2lvX2Vycm9yX2RldGVjdGVkKClcXG4rXFx0ICogZmxvdy5cXG4rXFx0ICovXFxuK1xcbitcXHRpZiAodGVzdF9iaXQoX19JWEdCRV9TRVJWSUNFX0lOSVRFRCwgXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXN0YXRlKSkge1xcbitcXHRcXHQvKiBUaGUgc2VydmljZSB0aW1lciB3YXMgYWxyZWFkeSBzdG9wcGVkIGJ5IGl4Z2JlX2Rvd24oKSB2aWFcXG4rXFx0XFx0ICogaXhnYmVfY2xvc2Vfc3VzcGVuZCgpOyBpZiB0aGUgbmV0ZGV2IHdhcyBub3QgcnVubmluZywgdGhlXFxuK1xcdFxcdCAqIHRpbWVyIGlzIG5vdCBhcm1lZC4gIE9ubHkgdGhlIGN1cnJlbnRseSBxdWV1ZWQgc2VydmljZSB0YXNrXFxuK1xcdFxcdCAqIChpZiBhbnkpIHN0aWxsIG5lZWRzIHRvIGJlIGZsdXNoZWQgaGVyZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXNlcnZpY2VfdGFzayk7XFxuK1xcdFxcdGNsZWFyX2JpdChfX0lYR0JFX1NFUlZJQ0VfU0NIRUQsIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rLyoqXFxuKyAqIGl4Z2JlX3BjaV9yZXNldF9kb25lIC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LlxcbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXFxuKyAqXFxuKyAqIFJlLWluaXRpYWxpemUgdGhlIGRldmljZSBhZnRlciBhIFBDSSBmdW5jdGlvbiByZXNldC4gVGhlIFBDSSBjb3JlIGhhc1xcbisgKiBhbHJlYWR5IGNhbGxlZCBwY2lfcmVzdG9yZV9zdGF0ZSgpIGJlZm9yZSBpbnZva2luZyB0aGlzIGNhbGxiYWNrLCBzbyB0aGVcXG4rICogc2F2ZWQgQ29tbWFuZCByZWdpc3RlciAoaW5jbHVkaW5nIGJ1cyBtYXN0ZXJpbmcpIGlzIGJhY2sgaW4gcGxhY2UuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpeGdiZV9wY2lfcmVzZXRfZG9uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4re1xcbitcXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4rXFx0Ym9vbCBydW5uaW5nO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFxuK1xcdGlmICghYWRhcHRlcilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bmV0ZGV2ID0gYWRhcHRlci1cXHUwMDNlbmV0ZGV2O1xcbitcXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcdGFkYXB0ZXItXFx1MDAzZWh3Lmh3X2FkZHIgPSBhZGFwdGVyLVxcdTAwM2Vpb19hZGRyO1xcbitcXHRpeGdiZV9yZXNldChhZGFwdGVyKTtcXG4rXFx0SVhHQkVfV1JJVEVfUkVHKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VodywgSVhHQkVfV1VTLCB+MCk7XFxuK1xcdHJ1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XFxuK1xcdGlmIChydW5uaW5nKSB7XFxuK1xcdFxcdGVyciA9IGl4Z2JlX29wZW4obmV0ZGV2KTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRlX2Rldl9lcnIoXFxcIkNhbm5vdCByZS1vcGVuIG5ldGRldiBhZnRlciBQQ0kgcmVzZXQ6ICVkLiBBIG5ldyByZXNldCBpcyBuZWVkZWQuXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgIGVycik7XFxuK1xcdFxcdFxcdGRldl9jbG9zZShuZXRkZXYpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0LyogUmVzdG9yZSBwcmVzZW5jZSBzbyB1c2Vyc3BhY2UgY2FuIHJldHJ5IGxhdGVyLiBJZiBpeGdiZV9vcGVuKCkgZmFpbGVkLFxcbitcXHQgKiBkZXZfY2xvc2UoKSBjbGVhcmVkIElGRl9VUCBmaXJzdCBzbyBuZXRpZl9kZXZpY2VfYXR0YWNoKCkgd2lsbCBub3Qgd2FrZVxcbitcXHQgKiBUeCBxdWV1ZXMgd2l0aG91dCBhIHN1Y2Nlc3NmdWwgb3Blbi5cXG4rXFx0ICovXFxuK1xcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGl4Z2JlX2lvX3Jlc3VtZSAtIGNhbGxlZCB3aGVuIHRyYWZmaWMgY2FuIHN0YXJ0IGZsb3dpbmcgYWdhaW4uXFxuICAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcXG5AQCAtMTIzNzAsNiArMTI0NjQsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBpeGdiZV9lcnJfaGFuZGxlciA9IHtcXG4gXFx0LmVycm9yX2RldGVjdGVkID0gaXhnYmVfaW9fZXJyb3JfZGV0ZWN0ZWQsXFxuIFxcdC5zbG90X3Jlc2V0ID0gaXhnYmVfaW9fc2xvdF9yZXNldCxcXG4gXFx0LnJlc3VtZSA9IGl4Z2JlX2lvX3Jlc3VtZSxcXG4rXFx0LnJlc2V0X3ByZXBhcmUgPSBpeGdiZV9wY2lfcmVzZXRfcHJlcGFyZSxcXG4rXFx0LnJlc2V0X2RvbmUgPSBpeGdiZV9wY2lfcmVzZXRfZG9uZSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBERUZJTkVfU0lNUExFX0RFVl9QTV9PUFMoaXhnYmVfcG1fb3BzLCBpeGdiZV9zdXNwZW5kLCBpeGdiZV9yZXN1bWUpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94c2suYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jXFxuaW5kZXggODlmOTZjNDYzZjAyMjQuLjAyODIwOTgyYjIwMjZhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmNcXG5AQCAtMzksNyArMzksNyBAQCBzdGF0aWMgaW50IGl4Z2JlX3hza19wb29sX2VuYWJsZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcixcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdGlmX3J1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKGFkYXB0ZXItXFx1MDAzZW5ldGRldikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0aWZfcnVubmluZyA9IGl4Z2JlX25ldGlmX3J1bm5pbmcoYWRhcHRlci1cXHUwMDNlbmV0ZGV2KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgIGl4Z2JlX2VuYWJsZWRfeGRwX2FkYXB0ZXIoYWRhcHRlcik7XFxuIFxcbiBcXHRpZiAoaWZfcnVubmluZylcXG5AQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgaW50IGl4Z2JlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBxaWQpXFxuIFxcdGlmICghcG9vbClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRpZl9ydW5uaW5nID0gbmV0aWZfcnVubmluZyhhZGFwdGVyLVxcdTAwM2VuZXRkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdGlmX3J1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKGFkYXB0ZXItXFx1MDAzZW5ldGRldikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICBpeGdiZV9lbmFibGVkX3hkcF9hZGFwdGVyKGFkYXB0ZXIpO1xcbiBcXG4gXFx0aWYgKGlmX3J1bm5pbmcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA3OjMwOjA2LjEzMzEwMzY0NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzOTEyNjAyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpeGdiZSBkcml2ZXIgKEludGVsIDEwIEdpZ2FiaXQgRXRoZXJuZXQpLCB3aGljaCBpcyBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlci4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzZWQgZm9yIGZ1enppbmcgKGxpa2UgUUVNVSBvciBHQ0UpIGRvIG5vdCBlbXVsYXRlIGl4Z2JlIGhhcmR3YXJlLCBtYWtpbmcgdGhlc2UgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTM4MGRlN2IyNzY4MzQyZjA5OGNkOGRiMzk4OTZmZDJkZDZkYzc3ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDExIDA3OjMwOjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlLmhcbmluZGV4IDliODIxNzUyM2ZkMjY2Li40NGNmMDM3Y2MxNjdlYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlLmhcbkBAIC05NTQsNiArOTU0LDExIEBAIGV4dGVybiBjaGFyIGl4Z2JlX2RyaXZlcl9uYW1lW107XG4gZXh0ZXJuIGNoYXIgaXhnYmVfZGVmYXVsdF9kZXZpY2VfZGVzY3JbXTtcbiAjZW5kaWYgLyogSVhHQkVfRkNPRSAqL1xuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV9uZXRpZl9ydW5uaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4re1xuK1x0cmV0dXJuIG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjYgbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KTtcbit9XG4rXG4gaW50IGl4Z2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4gaW50IGl4Z2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuIHZvaWQgaXhnYmVfdXAoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2RjYl9ubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZGNiX25sLmNcbmluZGV4IDM4MmQwOTdlNGIxMWUwLi43Yzc0MDhkMzI3NDJjNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2RjYl9ubC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9kY2JfbmwuY1xuQEAgLTI3NywxNyArMjc3LDIzIEBAIHN0YXRpYyB2b2lkIGl4Z2JlX2RjYm5sX2dldF9wZmNfY2ZnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwcmlvcml0eSxcbiBzdGF0aWMgdm9pZCBpeGdiZV9kY2JubF9kZXZyZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYoZGV2KTtcbitcdGJvb2wgcnVubmluZztcbitcbitcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cnVubmluZyA9IGl4Z2JlX25ldGlmX3J1bm5pbmcoZGV2KTtcbiBcbiBcdHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVfUkVTRVRUSU5HLCBcdTAwMjZhZGFwdGVyLVx1MDAzZXN0YXRlKSlcbiBcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcbitcdGlmIChydW5uaW5nKVxuIFx0XHRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RvcChkZXYpO1xuIFxuIFx0aXhnYmVfY2xlYXJfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTtcbiBcdGl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4rXHRpZiAocnVubmluZylcbiBcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX29wZW4oZGV2KTtcbiBcbiBcdGNsZWFyX2JpdChfX0lYR0JFX1JFU0VUVElORywgXHUwMDI2YWRhcHRlci1cdTAwM2VzdGF0ZSk7XG5AQCAtNTE1LDYgKzUyMSw5IEBAIHN0YXRpYyBpbnQgaXhnYmVfZGNibmxfaWVlZV9zZXRldHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmICghKGFkYXB0ZXItXHUwMDNlZGNieF9jYXAgXHUwMDI2IERDQl9DQVBfRENCWF9WRVJfSUVFRSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuK1x0XHRyZXR1cm4gLUVORVRET1dOO1xuK1xuIFx0aWYgKCFhZGFwdGVyLVx1MDAzZWl4Z2JlX2llZWVfZXRzKSB7XG4gXHRcdGFkYXB0ZXItXHUwMDNlaXhnYmVfaWVlZV9ldHMgPSBrbWFsbG9jX29iaihzdHJ1Y3QgaWVlZV9ldHMpO1xuIFx0XHRpZiAoIWFkYXB0ZXItXHUwMDNlaXhnYmVfaWVlZV9ldHMpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jXG5pbmRleCAzNmU0M2I1ZTg4ZDFmMC4uMDJhZmY0MTE0MjZkMTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2V0aHRvb2wuY1xuQEAgLTQ2Niw2ICs0NjYsOSBAQCBzdGF0aWMgaW50IGl4Z2JlX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0dTMyIGFkdmVydGlzZWQsIG9sZDtcbiBcdGludCBlcnIgPSAwO1xuIFxuK1x0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxuK1x0XHRyZXR1cm4gLUVORVRET1dOO1xuK1xuIFx0aWYgKChody1cdTAwM2VwaHkubWVkaWFfdHlwZSA9PSBpeGdiZV9tZWRpYV90eXBlX2NvcHBlcikgfHxcbiBcdCAgICAoaHctXHUwMDNlcGh5Lm11bHRpc3BlZWRfZmliZXIpKSB7XG4gXHRcdC8qXG5AQCAtNTc2LDkgKzU3OSw5IEBAIHN0YXRpYyB2b2lkIGl4Z2JlX3NldF9wYXVzZXBhcmFtX2ZpbmFsaXplKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHQvKiBJZiB0aGUgdGhpbmcgY2hhbmdlZCB0aGVuIHdlJ2xsIHVwZGF0ZSBhbmQgdXNlIG5ldyBhdXRvbmVnLiAqL1xuIFx0aWYgKG1lbWNtcChmYywgXHUwMDI2aHctXHUwMDNlZmMsIHNpemVvZigqZmMpKSkge1xuIFx0XHRody1cdTAwM2VmYyA9ICpmYztcbi1cdFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbitcdFx0aWYgKGl4Z2JlX25ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiBcdFx0XHRpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpO1xuLVx0XHRlbHNlXG4rXHRcdGVsc2UgaWYgKG5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4gXHRcdFx0aXhnYmVfcmVzZXQoYWRhcHRlcik7XG4gXHR9XG4gfVxuQEAgLTEyNjYsNyArMTI2OSw3IEBAIHN0YXRpYyBpbnQgaXhnYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0d2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JWEdCRV9SRVNFVFRJTkcsIFx1MDAyNmFkYXB0ZXItXHUwMDNlc3RhdGUpKVxuIFx0XHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XG4gXG4tXHRpZiAoIW5ldGlmX3J1bm5pbmcoYWRhcHRlci1cdTAwM2VuZXRkZXYpKSB7XG4rXHRpZiAoIWl4Z2JlX25ldGlmX3J1bm5pbmcoYWRhcHRlci1cdTAwM2VuZXRkZXYpKSB7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFkYXB0ZXItXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxuIFx0XHRcdGFkYXB0ZXItXHUwMDNldHhfcmluZ1tpXS1cdTAwM2Vjb3VudCA9IG5ld190eF9jb3VudDtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYWRhcHRlci1cdTAwM2VudW1feGRwX3F1ZXVlczsgaSsrKVxuQEAgLTIyNDksMTAgKzIyNTIsMTEgQEAgc3RhdGljIHZvaWQgaXhnYmVfZGlhZ190ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0ICAgIHN0cnVjdCBldGh0b29sX3Rlc3QgKmV0aF90ZXN0LCB1NjQgKmRhdGEpXG4ge1xuIFx0c3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBpeGdiZV9mcm9tX25ldGRldihuZXRkZXYpO1xuLVx0Ym9vbCBpZl9ydW5uaW5nID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuK1x0Ym9vbCBpZl9ydW5uaW5nID0gaXhnYmVfbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuIFxuLVx0aWYgKGl4Z2JlX3JlbW92ZWQoYWRhcHRlci1cdTAwM2Vody5od19hZGRyKSkge1xuLVx0XHRlX2VycihodywgXCJBZGFwdGVyIHJlbW92ZWQgLSB0ZXN0IGJsb2NrZWRcXG5cIik7XG4rXHRpZiAoaXhnYmVfcmVtb3ZlZChhZGFwdGVyLVx1MDAzZWh3Lmh3X2FkZHIpIHx8XG4rXHQgICAgIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpIHtcbitcdFx0ZV9lcnIoaHcsIFwiQWRhcHRlciByZW1vdmVkIG9yIGRldGFjaGVkIC0gdGVzdCBibG9ja2VkXFxuXCIpO1xuIFx0XHRkYXRhWzBdID0gMTtcbiBcdFx0ZGF0YVsxXSA9IDE7XG4gXHRcdGRhdGFbMl0gPSAxO1xuQEAgLTI0NjYsNyArMjQ3MCw3IEBAIHN0YXRpYyBpbnQgaXhnYmVfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYobmV0ZGV2KTtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRpZiAoaXhnYmVfbmV0aWZfcnVubmluZyhuZXRkZXYpKVxuIFx0XHRpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMjY1MCw3ICsyNjU0LDggQEAgc3RhdGljIGludCBpeGdiZV9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ZWxzZVxuIFx0XHRcdC8qIHJ4IG9ubHkgb3IgbWl4ZWQgKi9cbiBcdFx0XHRxX3ZlY3Rvci1cdTAwM2VpdHIgPSByeF9pdHJfcGFyYW07XG4tXHRcdGl4Z2JlX3dyaXRlX2VpdHIocV92ZWN0b3IpO1xuK1x0XHRpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbitcdFx0XHRpeGdiZV93cml0ZV9laXRyKHFfdmVjdG9yKTtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMzY5NCw2ICszNjk5LDkgQEAgc3RhdGljIGludCBpeGdiZV9zZXRfZWVlX2U2MTAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdCAgICBrZWRhdGEtXHUwMDNlZWVlX2VuYWJsZWQpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbitcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbitcdFx0cmV0dXJuIC1FTkVURE9XTjtcbitcbiBcdGh3LVx1MDAzZXBoeS5lZWVfc3BlZWRzX2FkdmVydGlzZWQgPSBrZWRhdGEtXHUwMDNlZWVlX2VuYWJsZWQgP1xuIFx0XHRcdFx0XHRody1cdTAwM2VwaHkuZWVlX3NwZWVkc19zdXBwb3J0ZWQgOiAwO1xuIFxuQEAgLTM3MDksOSArMzcxNyw5IEBAIHN0YXRpYyBpbnQgaXhnYmVfc2V0X2VlZV9lNjEwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRlbHNlXG4gXHRcdGFkYXB0ZXItXHUwMDNlZmxhZ3MyIFx1MDAyNj0gfklYR0JFX0ZMQUcyX0VFRV9FTkFCTEVEO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbitcdGlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpXG4gXHRcdGl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7XG4tXHRlbHNlXG4rXHRlbHNlIGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxuIFx0XHRpeGdiZV9yZXNldChhZGFwdGVyKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTM3OTMsOSArMzgwMSw5IEBAIHN0YXRpYyBpbnQgaXhnYmVfc2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplZGF0YSlcbiBcdH1cbiBcbiBcdC8qIHJlc2V0IGxpbmsgKi9cbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRpZiAoaXhnYmVfbmV0aWZfcnVubmluZyhuZXRkZXYpKVxuIFx0XHRpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpO1xuLVx0ZWxzZVxuK1x0ZWxzZSBpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbiBcdFx0aXhnYmVfcmVzZXQoYWRhcHRlcik7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0zODUxLDcgKzM4NTksNyBAQCBzdGF0aWMgaW50IGl4Z2JlX3NldF9wcml2X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBwcml2X2ZsYWdzKVxuIFx0XHRhZGFwdGVyLVx1MDAzZWZsYWdzMiA9IGZsYWdzMjtcbiBcbiBcdFx0LyogcmVzZXQgaW50ZXJmYWNlIHRvIHJlcG9wdWxhdGUgcXVldWVzICovXG4tXHRcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRcdGlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpXG4gXHRcdFx0aXhnYmVfcmVpbml0X2xvY2tlZChhZGFwdGVyKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9mY29lLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9mY29lLmNcbmluZGV4IDAxMWZkYTljNjE5MzljLi5lNGNkNDY3M2YyMWMyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2Zjb2UuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZmNvZS5jXG5AQCAtODM2LDYgKzgzNiwxMCBAQCBpbnQgaXhnYmVfZmNvZV9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KG5ldGRldik7XG4gXHRzdHJ1Y3QgaXhnYmVfZmNvZSAqZmNvZSA9IFx1MDAyNmFkYXB0ZXItXHUwMDNlZmNvZTtcbitcdGJvb2wgcnVubmluZztcbitcbitcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbitcdFx0cmV0dXJuIC1FTkVURE9XTjtcbiBcbiBcdGF0b21pY19pbmMoXHUwMDI2ZmNvZS1cdTAwM2VyZWZjbnQpO1xuIFxuQEAgLTg0NSwxMiArODQ5LDE0IEBAIGludCBpeGdiZV9mY29lX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aWYgKGFkYXB0ZXItXHUwMDNlZmxhZ3MgXHUwMDI2IElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdHJ1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXG4gXHRlX2luZm8oZHJ2LCBcIkVuYWJsaW5nIEZDb0Ugb2ZmbG9hZCBmZWF0dXJlcy5cXG5cIik7XG4gXG4gXHRpZiAoYWRhcHRlci1cdTAwM2VmbGFncyBcdTAwMjYgSVhHQkVfRkxBR19TUklPVl9FTkFCTEVEKVxuIFx0XHRlX3dhcm4ocHJvYmUsIFwiRW5hYmxpbmcgRkNvRSBvbiBQRiB3aWxsIGRpc2FibGUgbGVnYWN5IFZGc1xcblwiKTtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRpZiAocnVubmluZylcbiBcdFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcbiBcbiBcdC8qIEFsbG9jYXRlIHBlciBDUFUgbWVtb3J5IHRvIHRyYWNrIEREUCBwb29scyAqL1xuQEAgLTg2NSw3ICs4NzEsNyBAQCBpbnQgaXhnYmVfZmNvZV9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7XG4gXHRpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7XG4gXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuK1x0aWYgKHJ1bm5pbmcpXG4gXHRcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04ODIsNiArODg4LDEwIEBAIGludCBpeGdiZV9mY29lX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIGludCBpeGdiZV9mY29lX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KG5ldGRldik7XG4rXHRib29sIHJ1bm5pbmc7XG4rXG4rXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4rXHRcdHJldHVybiAtRU5FVERPV047XG4gXG4gXHRpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2YWRhcHRlci1cdTAwM2VmY29lLnJlZmNudCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTg4OSw4ICs4OTksMTAgQEAgaW50IGl4Z2JlX2Zjb2VfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aWYgKCEoYWRhcHRlci1cdTAwM2VmbGFncyBcdTAwMjYgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdHJ1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXG4gXHRlX2luZm8oZHJ2LCBcIkRpc2FibGluZyBGQ29FIG9mZmxvYWQgZmVhdHVyZXMuXFxuXCIpO1xuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbitcdGlmIChydW5uaW5nKVxuIFx0XHRuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuIFxuIFx0LyogRnJlZSBwZXIgQ1BVIG1lbW9yeSB0byB0cmFjayBERFAgcG9vbHMgKi9cbkBAIC05MDYsNyArOTE4LDcgQEAgaW50IGl4Z2JlX2Zjb2VfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aXhnYmVfY2xlYXJfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTtcbiBcdGl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRpZiAocnVubmluZylcbiBcdFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uY1xuaW5kZXggODg3M2E4Y2M0YTE4NTEuLmYwY2I2NGE4NDAyMTRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmNcbkBAIC03NDAxLDcgKzc0MDEsNyBAQCBzdGF0aWMgaW50IGl4Z2JlX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpXG4gXHQvKiBtdXN0IHNldCBuZXcgTVRVIGJlZm9yZSBjYWxsaW5nIGRvd24gb3IgdXAgKi9cbiBcdFdSSVRFX09OQ0UobmV0ZGV2LVx1MDAzZW10dSwgbmV3X210dSk7XG4gXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuK1x0aWYgKGl4Z2JlX25ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiBcdFx0aXhnYmVfcmVpbml0X2xvY2tlZChhZGFwdGVyKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTk5MDMsNiArOTkwMyw3IEBAIGludCBpeGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiB7XG4gXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KGRldik7XG4gXHRzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gXHUwMDI2YWRhcHRlci1cdTAwM2VodztcbitcdGJvb2wgcnVubmluZyA9IGl4Z2JlX25ldGlmX3J1bm5pbmcoZGV2KTtcbiBcbiBcdC8qIEhhcmR3YXJlIHN1cHBvcnRzIHVwIHRvIDggdHJhZmZpYyBjbGFzc2VzICovXG4gXHRpZiAodGMgXHUwMDNlIGFkYXB0ZXItXHUwMDNlZGNiX2NmZy5udW1fdGNzLnBnX3RjcylcbkBAIC05OTE1LDcgKzk5MTYsMTAgQEAgaW50IGl4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxuIFx0ICogbWF0Y2ggcGFja2V0IGJ1ZmZlciBhbGlnbm1lbnQuIFVuZm9ydHVuYXRlbHksIHRoZVxuIFx0ICogaGFyZHdhcmUgaXMgbm90IGZsZXhpYmxlIGVub3VnaCB0byBkbyB0aGlzIGR5bmFtaWNhbGx5LlxuIFx0ICovXG4tXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxuK1x0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuK1x0XHRyZXR1cm4gLUVORVRET1dOO1xuK1xuK1x0aWYgKHJ1bm5pbmcpXG4gXHRcdGl4Z2JlX2Nsb3NlKGRldik7XG4gXHRlbHNlXG4gXHRcdGl4Z2JlX3Jlc2V0KGFkYXB0ZXIpO1xuQEAgLTk5MjgsNyArOTkzMiw3IEBAIGludCBpeGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcdFx0XHRlX3dhcm4ocHJvYmUsIFwiRENCIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBYRFBcXG5cIik7XG4gXG4gXHRcdFx0aXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xuLVx0XHRcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4rXHRcdFx0aWYgKHJ1bm5pbmcpXG4gXHRcdFx0XHRpeGdiZV9vcGVuKGRldik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbkBAIC05OTYzLDcgKzk5NjcsNyBAQCBpbnQgaXhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXG4gXHRpeGdiZV9kZWZyYWdfbWFjdmxhbl9wb29scyhkZXYpO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcbitcdGlmIChydW5uaW5nKVxuIFx0XHRyZXR1cm4gaXhnYmVfb3BlbihkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTA0ODksOSArMTA0OTMsOSBAQCB2b2lkIGl4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBpeGdiZV9mcm9tX25ldGRldihuZXRkZXYpO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbitcdGlmIChpeGdiZV9uZXRpZl9ydW5uaW5nKG5ldGRldikpXG4gXHRcdGl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7XG4tXHRlbHNlXG4rXHRlbHNlIGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxuIFx0XHRpeGdiZV9yZXNldChhZGFwdGVyKTtcbiB9XG4gXG5AQCAtMTA4MjMsNyArMTA4MjcsNyBAQCBzdGF0aWMgdm9pZCAqaXhnYmVfZndkX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqcGRldiwgc3RydWN0IG5ldF9kZXZpY2UgKnZkZXYpXG4gXHRhY2NlbC1cdTAwM2Vwb29sID0gcG9vbDtcbiBcdGFjY2VsLVx1MDAzZW5ldGRldiA9IHZkZXY7XG4gXG4tXHRpZiAoIW5ldGlmX3J1bm5pbmcocGRldikpXG4rXHRpZiAoIWl4Z2JlX25ldGlmX3J1bm5pbmcocGRldikpXG4gXHRcdHJldHVybiBhY2NlbDtcbiBcbiBcdGVyciA9IGl4Z2JlX2Z3ZF9yaW5nX3VwKGFkYXB0ZXIsIGFjY2VsKTtcbkBAIC0xMDk1NCw4ICsxMDk1OCwxMCBAQCBzdGF0aWMgaW50IGl4Z2JlX3hkcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gXHRcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gXHRcdGVyciA9IGl4Z2JlX3NldHVwX3RjKGRldiwgYWRhcHRlci1cdTAwM2Vod190Y3MpO1xuIFxuLVx0XHRpZiAoZXJyKVxuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0eGNoZyhcdTAwMjZhZGFwdGVyLVx1MDAzZXhkcF9wcm9nLCBvbGRfcHJvZyk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbiBcdFx0aWYgKCFwcm9nKVxuIFx0XHRcdHhkcF9mZWF0dXJlc19jbGVhcl9yZWRpcmVjdF90YXJnZXQoZGV2KTtcbiBcdH0gZWxzZSB7XG5AQCAtMTIzMzgsNiArMTIzNDQsOTQgQEAgc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgaXhnYmVfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdHJldHVybiByZXN1bHQ7XG4gfVxuIFxuKy8qKlxuKyAqIGl4Z2JlX3BjaV9yZXNldF9wcmVwYXJlIC0gY2FsbGVkIGJlZm9yZSB0aGUgcGNpIGJ1cyBpcyByZXNldC5cbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4rICpcbisgKiBRdWllc2NlIHRoZSBkcml2ZXIgaW4gcHJlcGFyYXRpb24gZm9yIGEgUENJIGZ1bmN0aW9uIHJlc2V0LiBDYWxsZWQgZnJvbVxuKyAqIHBjaV9kZXZfc2F2ZV9hbmRfZGlzYWJsZSgpIGJlZm9yZSB0aGUgY29yZSBzYXZlcyBjb25maWcgc3RhdGUgYW5kIHdyaXRlc1xuKyAqIFBDSV9DT01NQU5EX0lOVFhfRElTQUJMRSB0byBjbGVhciBidXMgbWFzdGVyaW5nIGFuZCBNTUlPIGRlY29kZSwgc28gTU1JT1xuKyAqIGFjY2VzcyB0byB0aGUgZGV2aWNlIGlzIHN0aWxsIHZhbGlkIGhlcmUuXG4rICovXG4rc3RhdGljIHZvaWQgaXhnYmVfcGNpX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0c3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuK1xuK1x0aWYgKCFhZGFwdGVyKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRuZXRkZXYgPSBhZGFwdGVyLVx1MDAzZW5ldGRldjtcbitcbitcdHJ0bmxfbG9jaygpO1xuK1x0bmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpO1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbitcdFx0aXhnYmVfY2xvc2Vfc3VzcGVuZChhZGFwdGVyKTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHQvKiBfX0lYR0JFX1JFU0VUVElORyBpcyBpbnRlbnRpb25hbGx5IG5vdCBzZXQgaGVyZTogaXQgaXMgc3B1biBvblxuK1x0ICogd2hpbGUgaG9sZGluZyBydG5sIGJ5IGl4Z2JlX3JlaW5pdF9sb2NrZWQoKSwgaXhnYmVfZGNibmxfZGV2cmVzZXQoKVxuK1x0ICogYW5kIHRoZSBldGh0b29sIHJlc2V0IHBhdGhzLCBzbyBob2xkaW5nIGl0IGFjcm9zcyB0aGUgcnRubCBkcm9wXG4rXHQgKiB3b3VsZCBkZWFkbG9jayB0aG9zZSBjYWxsZXJzIGFnYWluc3QgaXhnYmVfcGNpX3Jlc2V0X2RvbmUoKSwgd2hpY2hcbitcdCAqIG5lZWRzIHRvIHJlLWFjcXVpcmUgcnRubC4gIER1cmluZyB0aGUgcmVzZXQgd2luZG93IGNvbmN1cnJlbnRcbitcdCAqIHJ0bmwtaG9sZGluZyBwYXRocyBtdXN0IHRyZWF0IHRoZSBuZXRkZXYgYXMgZGV0YWNoZWQsIHdoaWxlIHRlYXJkb3duXG4rXHQgKiBwYXRocyBhbHNvIG9ic2VydmUgX19JWEdCRV9ET1dOIHNldCBieSBpeGdiZV9kb3duKCkgdmlhXG4rXHQgKiBpeGdiZV9jbG9zZV9zdXNwZW5kKCksIG1hdGNoaW5nIHRoZSBleGlzdGluZyBpeGdiZV9pb19lcnJvcl9kZXRlY3RlZCgpXG4rXHQgKiBmbG93LlxuK1x0ICovXG4rXG4rXHRpZiAodGVzdF9iaXQoX19JWEdCRV9TRVJWSUNFX0lOSVRFRCwgXHUwMDI2YWRhcHRlci1cdTAwM2VzdGF0ZSkpIHtcbitcdFx0LyogVGhlIHNlcnZpY2UgdGltZXIgd2FzIGFscmVhZHkgc3RvcHBlZCBieSBpeGdiZV9kb3duKCkgdmlhXG4rXHRcdCAqIGl4Z2JlX2Nsb3NlX3N1c3BlbmQoKTsgaWYgdGhlIG5ldGRldiB3YXMgbm90IHJ1bm5pbmcsIHRoZVxuK1x0XHQgKiB0aW1lciBpcyBub3QgYXJtZWQuICBPbmx5IHRoZSBjdXJyZW50bHkgcXVldWVkIHNlcnZpY2UgdGFza1xuK1x0XHQgKiAoaWYgYW55KSBzdGlsbCBuZWVkcyB0byBiZSBmbHVzaGVkIGhlcmUuXG4rXHRcdCAqL1xuK1x0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmFkYXB0ZXItXHUwMDNlc2VydmljZV90YXNrKTtcbitcdFx0Y2xlYXJfYml0KF9fSVhHQkVfU0VSVklDRV9TQ0hFRCwgXHUwMDI2YWRhcHRlci1cdTAwM2VzdGF0ZSk7XG4rXHR9XG4rfVxuK1xuKy8qKlxuKyAqIGl4Z2JlX3BjaV9yZXNldF9kb25lIC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LlxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbisgKlxuKyAqIFJlLWluaXRpYWxpemUgdGhlIGRldmljZSBhZnRlciBhIFBDSSBmdW5jdGlvbiByZXNldC4gVGhlIFBDSSBjb3JlIGhhc1xuKyAqIGFscmVhZHkgY2FsbGVkIHBjaV9yZXN0b3JlX3N0YXRlKCkgYmVmb3JlIGludm9raW5nIHRoaXMgY2FsbGJhY2ssIHNvIHRoZVxuKyAqIHNhdmVkIENvbW1hbmQgcmVnaXN0ZXIgKGluY2x1ZGluZyBidXMgbWFzdGVyaW5nKSBpcyBiYWNrIGluIHBsYWNlLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGl4Z2JlX3BjaV9yZXNldF9kb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbitcdHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbitcdGJvb2wgcnVubmluZztcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0aWYgKCFhZGFwdGVyKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRuZXRkZXYgPSBhZGFwdGVyLVx1MDAzZW5ldGRldjtcbitcbitcdHJ0bmxfbG9jaygpO1xuK1x0YWRhcHRlci1cdTAwM2Vody5od19hZGRyID0gYWRhcHRlci1cdTAwM2Vpb19hZGRyO1xuK1x0aXhnYmVfcmVzZXQoYWRhcHRlcik7XG4rXHRJWEdCRV9XUklURV9SRUcoXHUwMDI2YWRhcHRlci1cdTAwM2VodywgSVhHQkVfV1VTLCB+MCk7XG4rXHRydW5uaW5nID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuK1x0aWYgKHJ1bm5pbmcpIHtcbitcdFx0ZXJyID0gaXhnYmVfb3BlbihuZXRkZXYpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0ZV9kZXZfZXJyKFwiQ2Fubm90IHJlLW9wZW4gbmV0ZGV2IGFmdGVyIFBDSSByZXNldDogJWQuIEEgbmV3IHJlc2V0IGlzIG5lZWRlZC5cXG5cIixcbitcdFx0XHRcdCAgZXJyKTtcbitcdFx0XHRkZXZfY2xvc2UobmV0ZGV2KTtcbitcdFx0fVxuK1x0fVxuK1x0LyogUmVzdG9yZSBwcmVzZW5jZSBzbyB1c2Vyc3BhY2UgY2FuIHJldHJ5IGxhdGVyLiBJZiBpeGdiZV9vcGVuKCkgZmFpbGVkLFxuK1x0ICogZGV2X2Nsb3NlKCkgY2xlYXJlZCBJRkZfVVAgZmlyc3Qgc28gbmV0aWZfZGV2aWNlX2F0dGFjaCgpIHdpbGwgbm90IHdha2VcbitcdCAqIFR4IHF1ZXVlcyB3aXRob3V0IGEgc3VjY2Vzc2Z1bCBvcGVuLlxuK1x0ICovXG4rXHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7XG4rXHRydG5sX3VubG9jaygpO1xuK31cbitcbiAvKipcbiAgKiBpeGdiZV9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLlxuICAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbkBAIC0xMjM3MCw2ICsxMjQ2NCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGl4Z2JlX2Vycl9oYW5kbGVyID0ge1xuIFx0LmVycm9yX2RldGVjdGVkID0gaXhnYmVfaW9fZXJyb3JfZGV0ZWN0ZWQsXG4gXHQuc2xvdF9yZXNldCA9IGl4Z2JlX2lvX3Nsb3RfcmVzZXQsXG4gXHQucmVzdW1lID0gaXhnYmVfaW9fcmVzdW1lLFxuK1x0LnJlc2V0X3ByZXBhcmUgPSBpeGdiZV9wY2lfcmVzZXRfcHJlcGFyZSxcbitcdC5yZXNldF9kb25lID0gaXhnYmVfcGNpX3Jlc2V0X2RvbmUsXG4gfTtcbiBcbiBzdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKGl4Z2JlX3BtX29wcywgaXhnYmVfc3VzcGVuZCwgaXhnYmVfcmVzdW1lKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94c2suYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jXG5pbmRleCA4OWY5NmM0NjNmMDIyNC4uMDI4MjA5ODJiMjAyNmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94c2suY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmNcbkBAIC0zOSw3ICszOSw3IEBAIHN0YXRpYyBpbnQgaXhnYmVfeHNrX3Bvb2xfZW5hYmxlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmX3J1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKGFkYXB0ZXItXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbitcdGlmX3J1bm5pbmcgPSBpeGdiZV9uZXRpZl9ydW5uaW5nKGFkYXB0ZXItXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICBpeGdiZV9lbmFibGVkX3hkcF9hZGFwdGVyKGFkYXB0ZXIpO1xuIFxuIFx0aWYgKGlmX3J1bm5pbmcpXG5AQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgaW50IGl4Z2JlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBxaWQpXG4gXHRpZiAoIXBvb2wpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWZfcnVubmluZyA9IG5ldGlmX3J1bm5pbmcoYWRhcHRlci1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuK1x0aWZfcnVubmluZyA9IGl4Z2JlX25ldGlmX3J1bm5pbmcoYWRhcHRlci1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIGl4Z2JlX2VuYWJsZWRfeGRwX2FkYXB0ZXIoYWRhcHRlcik7XG4gXG4gXHRpZiAoaWZfcnVubmluZylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA3OjMwOjA2LjEzMzEwNTA4NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MzA0MDk1NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHkgb2YgdGhlIGl4Z2JlIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBgaXhnYmVgIGRyaXZlciwgSW50ZWwncyAxMCBHaWdhYml0IEV0aGVybmV0IFBDSSBFeHByZXNzIGRyaXZlci4gSXQncyBtYWtpbmcgc29tZSBjaGFuZ2VzIHRvIGhvdyB0aGUgZHJpdmVyIGNoZWNrcyB0aGUgbmV0d29yayBpbnRlcmZhY2UncyBzdGF0ZSwgYWRkaW5nIFBDSSByZXNldCBoYW5kbGVycy4gU2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgcGF0Y2guIEJ1dCBteSBtYWluIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciBpdCdzIHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6eiBpdC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgcGh5c2ljYWwgbmV0d29yayBjYXJkIGRyaXZlci4gRnV6emluZyBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIGlzIGdlbmVyYWxseSB0cmlja3ksIHVubGVzcyBpdCdzIGVtdWxhdGVkIGluIHNvZnR3YXJlLiBTbywgY2FuIHRoaXMgYmUgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRT8gVHlwaWNhbGx5LCBubywgdW5sZXNzIHdlJ3JlIHRhbGtpbmcgYWJvdXQgc29tZXRoaW5nIGxpa2UgYGUxMDAwZWAgaW4gUUVNVSwgb3IgYHZpcnRpb2AsIG9yIGB2ZXRoYCwgd2hpY2ggYXJlIGFsbCBlbXVsYXRpb25zLlxuXG5XYWl0Li4uIGRvZXMgUUVNVSBlbXVsYXRlIGBpeGdiZWA/IEkgY2FuJ3QgaW1tZWRpYXRlbHkgY2hlY2sgdGhlIFFFTVUgc291cmNlIGRpcmVjdGx5LiBJJ2QgdHlwaWNhbGx5IHNlYXJjaCBmb3IgdGhlIG1vZHVsZSBuYW1lIG9yIHNpbWlsYXIsIGJ1dCBJIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoYXQgaGVyZS4gQW5kLCBzeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgZnV6eiBQQ0kgZGV2aWNlcyBkaXJlY3RseSwgdW5sZXNzIHRoZXkncmUgZW11bGF0ZWQgb3IgdXNpbmcgc29tZSBicmlkZ2UgbGlrZSB2aGNpL3ZmaW8vZXRjLiBTeXprYWxsZXIgbWlnaHQgaGF2ZSBzb21lIGxpbWl0ZWQgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzIHRocm91Z2ggYSB2aXJ0dWFsIGJyaWRnZSwgYnV0IHRoZXkncmUgdXN1YWxseSBzcGVjaWZpYyBvciBsaW1pdGVkLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZSwgUUVNVSAqZG9lcyogaGF2ZSBuZXR3b3JrIGRldmljZSBlbXVsYXRpb25zLiBJIGtub3cgaXQgaGFzIGBlMTAwMGAsIGBlMTAwMGVgLCBhbmQgYGlnYmAuIERvZXMgUUVNVSBoYXZlIGBpeGdiZWA/IExldCBtZSBsb29rLi4uIE5vcGUsIFFFTVUgaGFzIGBpZ2JgLCB0aGUgSW50ZWwgODI1NzYuIGBpeGdiZWAgaXMgdGhlIEludGVsIDgyNTk5LiBRRU1VIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIG5hdGl2ZSBgaXhnYmVgIGVtdWxhdGlvbi4gSSBjYW4ndCBxdWlja2x5IHZlcmlmeSB0aGlzLCBidXQgdGhhdCdzIG15IGh1bmNoLlxuXG5Eb2VzIHN5emthbGxlciB0YXJnZXQgdGhpcz8gRG9lcyBpdCB1c2UgYHN5el9wY2lfZGV2aWNlYD8gTm8uIElzIGBpeGdiZWAgcmVhY2hhYmxlIGluIEdDRSBvciBRRU1VPyBHQ0UgdXNlcyBgdmlydGlvLW5ldGAgb3IgYGd2ZWAuIFFFTVUgdXNlcyBgZTEwMDBgLCBgZTEwMDBlYCwgYHZpcnRpby1uZXRgLCBldGMuIEknbSBnb2luZyBpbiBjaXJjbGVzIGhlcmUhXG5cblRoZSBjb3JlIHByb2JsZW0sIGFuZCB0aGUgcHJvbXB0IHJlaW5mb3JjZXMgdGhpczogVGhlIHBhdGNoIGV4cGxpY2l0bHkgbWVudGlvbnMgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIHVubGVzcyBoYXJkd2FyZSBpcyBlbXVsYXRlZC4gSWYgUUVNVSBkb2Vzbid0IGVtdWxhdGUgYGl4Z2JlYCwgdGhlbiB0aGlzIHBhdGNoJ3MgY29yZSBmdW5jdGlvbmFsaXR5ICppcyogdW5yZWFjaGFibGUgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuXG5cbkknZCBuZWVkIHRvIGNoZWNrIGlmIFFFTVUgKmFjdHVhbGx5KiBlbXVsYXRlcyBgaXhnYmVgLiBJIGNhbid0IGNoZWNrIFFFTVUgc291cmNlLCBidXQgSSBjYW4gY2hlY2sgZm9yIGFueSBzeXpib3QgcmVwb3J0cyByZWxhdGVkIHRvIGBpeGdiZWAuIExldCBtZSBsb29rLi4uIE5vcGUuIFFFTVUgZG9lc24ndCBzZWVtIHRvIGVtdWxhdGUgaXQuIEl0ICpkb2VzKiBlbXVsYXRlIGBlMTAwMGAsIGBlMTAwMGVgLCBhbmQgYGlnYmAuXG5cbk9rYXksIHNvIG1heWJlIEkgc2hvdWxkIGxvb2sgYXQgdGhlIGtlcm5lbCBzb3VyY2UuIERvZXMgdGhlIGtlcm5lbCBoYXZlIGFueSBoaW50cyBvZiBgaXhnYmVgIGJlaW5nIGZ1enplZCBvciB1c2VkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzPyBOby4gSSAqY291bGQqIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBoZXJlLCBiZWNhdXNlIG9mIHRoYXQuIFRoaXMgc2VlbXMgbGlrZSBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlciwgbm90IHNvbWV0aGluZyB0eXBpY2FsbHkgZnV6emVkIHVubGVzcyB0aGVyZSBpcyBlbXVsYXRpb24uXG5cbldhaXQsIGlzIGBpeGdiZWAgZW11bGF0ZWQ/IEkgbmVlZCB0byBzZWFyY2ggdGhlIHdlYjogUUVNVSBuZXR3b3JrIGRldmljZXMuIE5vIGBpeGdiZWAuIFFFTVUgYWRkZWQgYGlnYmAgcmVjZW50bHkgKEludGVsIDgyNTc2KS4gYGl4Z2JlYCBpcyAxMEdiRSAoSW50ZWwgODI1OTkpLiBRRU1VIGRvZXNuJ3QgaGF2ZSBpeGdiZSBlbXVsYXRpb24uIEV2ZW4gaWYgaXQgZGlkLCBzeXprYWxsZXIgcHJvYmFibHkgd291bGRuJ3QgY29uZmlndXJlIGl0IHVubGVzcyBpdCB3YXMgYSBkZWZhdWx0LlxuXG5TbyBJIHRoaW5rIEkgY2FuIGNvbmNsdWRlOiBVbmxlc3Mgc29tZXRoaW5nIHZlcnkgc3BlY2lmaWMgY2FuIGJlIGFycmFuZ2VkLCB0aGUgcGF0Y2ggaXMgbGlrZWx5IG5vdCBmdXp6YWJsZS4gVW5sZXNzIHRoZXJlIGlzIGVtdWxhdGlvbi5cblxuTGV0J3MgY2hlY2sgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzYCwgYnV0IEknZCBndWVzcyB0aGVyZSdzIG5vdGhpbmcgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDc6MzA6MjMuNDM3MjAyMTQxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTc3ODYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpeGdiZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ0b29scy90ZXN0aW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jLTgtICpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jOjk6ICogICMgZXRodG9vbCAtSyBpeGdiZTIgcnh2bGFuIG9mZlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmMtMTAtICpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jLTExLSAqIFZlcmlmeSBzZXR0aW5nOlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmM6MTI6ICogICMgZXRodG9vbCAtayBpeGdiZTIgfCBncmVwIHJ4LXZsYW4tb2ZmbG9hZFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmMtMTMtICogIHJ4LXZsYW4tb2ZmbG9hZDogb2ZmXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jPTEyNz1Db21tYW5kcyB0byBzZXR1cCBWTEFOIG9uIExpbnV4IHRvIHRlc3QgcGFja2V0cyBnZXRzIGRyb3BwZWQ6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX3ZsYW4uYy0xMjgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX3ZsYW4uYzoxMjk6IGV4cG9ydCBST09UREVWPWl4Z2JlMlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmMtMTMwLSBleHBvcnQgVkxBTklEPTQwMTFcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmM9MjY1PUNvbW1hbmRzIHRvIHNldHVwIFRDIHRvIHVzZSBhYm92ZSBicGYgcHJvZzpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jLTI2Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jOjI2NzpleHBvcnQgUk9PVERFVj1peGdiZTJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jLTI2OC1leHBvcnQgRklMRT14ZHBfdmxhbjAxX2tlcm4ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwNzozMDoyMy42Mzg5ODYxMTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjUxNDE2NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGl4Z2JlIERyaXZlciBhbmQgU3l6a2FsbGVyJ3MgUENJIENhcGFiaWxpdGllcyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYGl4Z2JlYCBtZW50aW9uZWQgY2FzdWFsbHkgaW4gdGhlIGNvbW1lbnRzLCB3aGljaCBkb2Vzbid0IHJlYWxseSBnaXZlIG1lIGFueSBhY3Rpb25hYmxlIGluZm9ybWF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhYm91dCB0aGUgYWN0dWFsIGRyaXZlciBkaXJlY3Rvcnk6IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9gPyBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgZHJpdmVyIGxpdmVzLlxuXG5Ob3csIG15IGluaXRpYWwgaW50dWl0aW9uIGlzIHRoYXQgc3l6a2FsbGVyICpyYXJlbHkqIGdldHMgaW52b2x2ZWQgaW4gZnV6emluZyBwaHlzaWNhbCBFdGhlcm5ldCBkcml2ZXJzLCB1bmxlc3MgdGhleSdyZSBydW5uaW5nIGluIHNvbWUga2luZCBvZiBlbXVsYXRlZCBlbnZpcm9ubWVudC4gVGhhdCdzIHVzdWFsbHkgdGhlIGFwcHJvYWNoLlxuXG5CdXQuLi4gaGFuZyBvbi4gRG9lcyBzeXprYWxsZXIgZXZlbiAqaGF2ZSogYSBtZWNoYW5pc20gdG8gZnV6eiBQQ0kgZGV2aWNlcz8gSSBzZWVtIHRvIHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgaXQuIExldCBtZSB0cnkgdG8gcmVtZW1iZXIsIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2RldmljZWAgb3IgYHN5el9wY2lfZGV2aWNlX3NldHVwYC4uLiBOb3BlLCB0aGF0J3Mgbm90IHJpbmdpbmcgYW55IGJlbGxzLlxuXG5XYWl0IGEgbWludXRlLCBtYXliZSBpdCAqZG9lcyogaGF2ZSBhIFBDSSBmdXp6ZXI/IEkgY291bGQgYmUgbWlzcmVtZW1iZXJpbmcsIG9yIHBlcmhhcHMgaXQncyBiZWVuIGFkZGVkIHJlY2VudGx5LiBMZXQncyBub3QgYXNzdW1lIGFueXRoaW5nLiBJIG5lZWQgdG8gZ2V0IGJhY2sgdG8gYmFzaWNzIGFuZCBjaGVjayBpZiB0aGVyZSdzIGFueSBvZmZpY2lhbCBzeXprYWxsZXIgZG9jdW1lbnRhdGlvbiBvciBkZXNjcmlwdGlvbnMgdGhhdCBmb2N1cyBvbiBQQ0kgZGV2aWNlIGZ1enppbmcuIEkgaGF2ZSB0byBmaW5kIGNvbmNyZXRlIGV2aWRlbmNlIGFuZCBub3QgcmVseSBvbiBoYWxmLXJlbWVtYmVyZWQgbm90aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MTksIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDc6MzA6MjguMjkwNDA0ODY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjA2MDEzMzAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5el9wY2lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwNzozMDozMC42MTEwMTUyODhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTEzMzE5MjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBEZWNpc2lvbiBmb3IgaXhnYmUgRHJpdmVyKipcblxuT2theSwgaGVyZSdzIGhvdyBJJ20gYXBwcm9hY2hpbmcgdGhpcy4gVGhlIHByb21wdCBzcGVjaWZpZXMgY3JpdGVyaWEgZm9yIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWxldmFudCBjbGF1c2UgaXMgYWJvdXQgY29kZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGl4Z2JlYCwgYmVpbmcgYSBwaHlzaWNhbCBuZXR3b3JrIGNhcmQgZHJpdmVyIChJbnRlbCAxMEdiRSksIGlzIGluaGVyZW50bHkgdW5yZWFjaGFibGUgaW4gdGhlc2UgdmlydHVhbGl6ZWQgc2V0dXBzLiBRRU1VIGVtdWxhdGVzIG90aGVyIEludGVsIG5ldHdvcmsgY2FyZHMgbGlrZSBlMTAwMCwgZTEwMDBlLCBhbmQgaWdiLCBidXQgbm90IGl4Z2JlLCBhcyBmYXIgYXMgSSBrbm93LlxuXG5JIG5lZWQgdG8gY29uZmlybSwgc28gSSdtIGRvaW5nIGEgcXVpY2sgbWVudGFsIHNlYXJjaC4gTm8gYHN5el9wY2lgIHdvdWxkIGJlIHVzZWQgaGVyZSBlaXRoZXIsIHNvIHRoYXQgaXMgYW5vdGhlciBwb2ludC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIG15IGtub3dsZWRnZSBiYXNlIOKAkyBsZXQncyBzZWUsIGhhcyBRRU1VIGFkZGVkIHN1cHBvcnQgZm9yIGl4Z2JlPyBBaCwgSSByZW1lbWJlciB0aGV5IGFkZGVkIGBpZ2JgIHJlY2VudGx5LCBidXQgbm90IGBpeGdiZWAuIEkga25vdyB0aGF0IHN0YW5kYXJkIFFFTVUgZG9lc24ndCBvZmZlciBgaXhnYmVgIGVtdWxhdGlvbiwgdGhvdWdoIHNvbWUgZm9ya3MgKm1pZ2h0KiwgYnV0IGl0J3Mgbm90IHRoZSBub3JtLiBBbmQgZXZlbiBpZiBhIGZvcmsgaGFkIGl0LCBzeXprYWxsZXIgaXMgdW5saWtlbHkgdG8gY29uZmlndXJlIG9yIHVzZSBzdWNoIGEgZGV2aWNlLiBTbywgaXQncyBub3QgZ2VuZXJhbGx5IGF2YWlsYWJsZSBpbiBhIGZ1enppbmcgY29udGV4dC5cblxuQ2FuIEkgcmVhY2ggdGhlIGNvZGUgc29tZSBvdGhlciB3YXk/IFBlcmhhcHMgdGhyb3VnaCBWRklPIChWaXJ0dWFsIEZ1bmN0aW9uIEkvTyk/IEJ1dCBWRklPIHJlbGllcyBvbiBoYXJkd2FyZSBwYXNzdGhyb3VnaCBvciwgYXQgbGVhc3QsIGEgbW9jayBkZXZpY2UuIElzIHRoZXJlIGEgbW9jayBkZXZpY2UgZm9yIGBpeGdiZWA/IE5vcGUsIG5vdCB0aGF0IEknbSBhd2FyZSBvZi5cblxuU28sIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyLiBUaGUgY29kZSBwYXRocyB3aXRoaW4gdGhlIGBpeGdiZWAgZHJpdmVyIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEl0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHdoaWNoIHN5emthbGxlciBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0by5cblxuTGV0IG1lIGp1c3QgdmVyaWZ5IHRoYXQgdGhlcmUncyBubyB2aXJ0dWFsIGRyaXZlciBhdmFpbGFibGUgaW4gdGhlIGtlcm5lbCB0aGF0IEknbSBtaXNzaW5nLiBSaWdodCwgYGl4Z2JldmZgIGlzIHRoZSB2aXJ0dWFsIGZ1bmN0aW9uIGRyaXZlciwgYnV0IHRoYXQgKnN0aWxsKiByZXF1aXJlcyBhIHBoeXNpY2FsIFBGIChwaHlzaWNhbCBmdW5jdGlvbikgb3IgYW4gZW11bGF0b3IuIEl0IGRvZXNuJ3QgbWFrZSB0aGlzIHBhdGggcmVhY2hhYmxlLCBzbyBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTc2LCJPdXRwdXRUb2tlbnMiOjg4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA3OjMwOjM5LjUyNDMzNzA2OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl4Z2JlIGRyaXZlciAoSW50ZWwgMTAgR2lnYWJpdCBFdGhlcm5ldCksIHdoaWNoIGlzIGEgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVyLiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNlZCBmb3IgZnV6emluZyAobGlrZSBRRU1VIG9yIEdDRSkgZG8gbm90IGVtdWxhdGUgaXhnYmUgaGFyZHdhcmUsIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl4Z2JlIGRyaXZlciAoSW50ZWwgMTAgR2lnYWJpdCBFdGhlcm5ldCksIHdoaWNoIGlzIGEgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVyLiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNlZCBmb3IgZnV6emluZyAobGlrZSBRRU1VIG9yIEdDRSkgZG8gbm90IGVtdWxhdGUgaXhnYmUgaGFyZHdhcmUsIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow8f4cz[1] Phase: Running StartedAt: 2026-07-11 07:30:51 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8f4cz[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-11 07:30:51 +0000 UTC FinishedAt: 2026-07-11 07:30:57 +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,}