Name: series-workflowd222l Phase: Failed StartedAt: 2026-07-25 13:18:32 +0000 UTC FinishedAt: 2026-07-25 13:49:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd222l[0] Phase: Succeeded StartedAt: 2026-07-25 13:18:32 +0000 UTC FinishedAt: 2026-07-25 13:48:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd222l[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 13:18:32 +0000 UTC FinishedAt: 2026-07-25 13:48:53 +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+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBhUXVhbnRpYSBBUXRpb24gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS8pLiBUaGlzIGlzIGEgZHJpdmVyIGZvciBhIHBoeXNpY2FsIFBDSWUgbmV0d29yayBjYXJkIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTFjZGJhMjg0ZWY4YjFhMGQ1OWZlMzkxNWQ5ZGFmYTc3ODQ4ZGUxNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDEzOjQ4OjI0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9LY29uZmlnXG5pbmRleCBjZWMyMDE4Yzg0YTliYy4uYzhmYjdiMzNlNWI3MWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9LY29uZmlnXG5AQCAtMjAsNiAmIzQzOzIwLDcgQEAgY29uZmlnIEFRVElPTlxuIFx0dHJpc3RhdGUgXCYjMzQ7YVF1YW50aWEgQVF0aW9uKHRtKSBTdXBwb3J0XCYjMzQ7XG4gXHRkZXBlbmRzIG9uIFBDSVxuIFx0ZGVwZW5kcyBvbiBNQUNTRUMgfHwgTUFDU0VDPW5cbiYjNDM7XHRzZWxlY3QgUEFHRV9QT09MXG4gXHRoZWxwXG4gXHQgIFRoaXMgZW5hYmxlcyB0aGUgc3VwcG9ydCBmb3IgdGhlIGFRdWFudGlhIEFRdGlvbih0bSkgRXRoZXJuZXQgY2FyZC5cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmNcbmluZGV4IDQyMGFmOTU4ZDQ4NjFhLi4wZjUxMjViZDIzMTU5NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jXG5AQCAtMTAwLDkgJiM0MzsxMDAsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFxX2V0aHRvb2xfcXVldWVfcnhfc3RhdF9uYW1lc1tdID0ge1xuIFx0XCYjMzQ7JXNRdWV1ZVslZF0gQWxsb2NGYWlsc1wmIzM0OyxcbiBcdFwmIzM0OyVzUXVldWVbJWRdIFNrYkFsbG9jRmFpbHNcJiMzNDssXG4gXHRcJiMzNDslc1F1ZXVlWyVkXSBQb2xsc1wmIzM0Oyxcbi1cdFwmIzM0OyVzUXVldWVbJWRdIFBhZ2VGbGlwc1wmIzM0Oyxcbi1cdFwmIzM0OyVzUXVldWVbJWRdIFBhZ2VSZXVzZXNcJiMzNDssXG4tXHRcJiMzNDslc1F1ZXVlWyVkXSBQYWdlRnJlZXNcJiMzNDssXG4gXHRcJiMzNDslc1F1ZXVlWyVkXSBYZHBBYm9ydFwmIzM0OyxcbiBcdFwmIzM0OyVzUXVldWVbJWRdIFhkcERyb3BcJiMzNDssXG4gXHRcJiMzNDslc1F1ZXVlWyVkXSBYZHBQYXNzXCYjMzQ7LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcHRwLmNcbmluZGV4IDU1OGFjOTIzN2Y3NTllLi4zYTQwZDk4NmNkNjc4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3B0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9wdHAuY1xuQEAgLTEzLDYgJiM0MzsxMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2NsYXNzaWZ5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsb2Nrc291cmNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L3hkcC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7YXFfbmljLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDthcV9wdHAuaFwmIzM0O1xuQEAgLTExOTIsMTIgJiM0MzsxMTkzLDIzIEBAIGludCBhcV9wdHBfcmluZ19hbGxvYyhzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYylcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2V4aXRfcHRwX3R4O1xuIFxuJiM0MztcdGVyciA9IHhkcF9yeHFfaW5mb19yZWcoXHUwMDI2YXFfcHRwLVx1MDAzZXB0cF9yeC54ZHBfcnhxLCBhcV9uaWMtXHUwMDNlbmRldixcbiYjNDM7XHRcdFx0ICAgICAgIHJ4X3JpbmdfaWR4LCBhcV9wdHAtXHUwMDNlbmFwaS5uYXBpX2lkKTtcbiYjNDM7XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfZXhpdF9wdHBfcng7XG4mIzQzO1xuJiM0MztcdGVyciA9IHhkcF9yeHFfaW5mb19yZWdfbWVtX21vZGVsKFx1MDAyNmFxX3B0cC1cdTAwM2VwdHBfcngueGRwX3J4cSxcbiYjNDM7XHRcdFx0XHRcdCBNRU1fVFlQRV9QQUdFX1BPT0wsXG4mIzQzO1x0XHRcdFx0XHQgYXFfcHRwLVx1MDAzZXB0cF9yeC5wZ19wb29sKTtcbiYjNDM7XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfZXhpdF94ZHBfcnhxO1xuJiM0MztcbiBcdGlmIChhcV9wdHAtXHUwMDNlYTFfcHRwKSB7XG4gXHRcdGVyciA9IGFxX3JpbmdfaHd0c19yeF9hbGxvYyhcdTAwMjZhcV9wdHAtXHUwMDNlaHd0c19yeCwgYXFfbmljLCBQVFBfSFdTVF9SSU5HX0lEWCxcbiBcdFx0XHRcdFx0ICAgIGFxX25pYy1cdTAwM2VhcV9uaWNfY2ZnLnJ4ZHMsXG4gXHRcdFx0XHRcdCAgICBhcV9uaWMtXHUwMDNlYXFfbmljX2NmZy5hcV9od19jYXBzLVx1MDAzZXJ4ZF9zaXplKTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGVycl9leGl0X3B0cF9yeDtcbiYjNDM7XHRcdFx0Z290byBlcnJfZXhpdF94ZHBfcnhxO1xuIFx0fVxuIFxuIFx0ZXJyID0gYXFfcHRwX3NrYl9yaW5nX2luaXQoXHUwMDI2YXFfcHRwLVx1MDAzZXNrYl9yaW5nLCBhcV9uaWMtXHUwMDNlYXFfbmljX2NmZy5yeGRzKTtcbkBAIC0xMjE3LDYgJiM0MzsxMjI5LDggQEAgaW50IGFxX3B0cF9yaW5nX2FsbG9jKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljKVxuIGVycl9leGl0X2h3dHNfcng6XG4gXHRpZiAoYXFfcHRwLVx1MDAzZWExX3B0cClcbiBcdFx0YXFfcmluZ19od3RzX3J4X2ZyZWUoXHUwMDI2YXFfcHRwLVx1MDAzZWh3dHNfcngpO1xuJiM0MztlcnJfZXhpdF94ZHBfcnhxOlxuJiM0MztcdHhkcF9yeHFfaW5mb191bnJlZyhcdTAwMjZhcV9wdHAtXHUwMDNlcHRwX3J4LnhkcF9yeHEpO1xuIGVycl9leGl0X3B0cF9yeDpcbiBcdGFxX3JpbmdfZnJlZShcdTAwMjZhcV9wdHAtXHUwMDNlcHRwX3J4KTtcbiBlcnJfZXhpdF9wdHBfdHg6XG5AQCAtMTIzMyw2ICYjNDM7MTI0Nyw4IEBAIHZvaWQgYXFfcHRwX3JpbmdfZnJlZShzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYylcbiBcdFx0cmV0dXJuO1xuIFxuIFx0YXFfcmluZ19mcmVlKFx1MDAyNmFxX3B0cC1cdTAwM2VwdHBfdHgpO1xuJiM0MztcdGlmICh4ZHBfcnhxX2luZm9faXNfcmVnKFx1MDAyNmFxX3B0cC1cdTAwM2VwdHBfcngueGRwX3J4cSkpXG4mIzQzO1x0XHR4ZHBfcnhxX2luZm9fdW5yZWcoXHUwMDI2YXFfcHRwLVx1MDAzZXB0cF9yeC54ZHBfcnhxKTtcbiBcdGFxX3JpbmdfZnJlZShcdTAwMjZhcV9wdHAtXHUwMDNlcHRwX3J4KTtcbiBcdGlmIChhcV9wdHAtXHUwMDNlYTFfcHRwKVxuIFx0XHRhcV9yaW5nX2h3dHNfcnhfZnJlZShcdTAwMjZhcV9wdHAtXHUwMDNlaHd0c19yeCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jXG5pbmRleCA4ZmYwN2RlMmJkNTI0MC4uOWRkODgxNzEwNTk0MjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuY1xuQEAgLTE0LDEyMCAmIzQzOzE0LDM3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7YXFfdmVjLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDthcV9tYWluLmhcJiMzNDtcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGRwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWx0ZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl90cmFjZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gXG4tc3RhdGljIHZvaWQgYXFfZ2V0X3J4cGFnZXNfeGRwKHN0cnVjdCBhcV9yaW5nX2J1ZmZfcyAqYnVmZixcbi1cdFx0XHQgICAgICAgc3RydWN0IHhkcF9idWZmICp4ZHApXG4te1xuLVx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2luZm87XG4tXHRpbnQgaTtcbi1cbi1cdGlmICh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkge1xuLVx0XHRzaW5mbyA9IHhkcF9nZXRfc2hhcmVkX2luZm9fZnJvbV9idWZmKHhkcCk7XG4tXG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNpbmZvLVx1MDAzZW5yX2ZyYWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdHNrYl9mcmFnX3QgKmZyYWcgPSBcdTAwMjZzaW5mby1cdTAwM2VmcmFnc1tpXTtcbi1cbi1cdFx0XHRwYWdlX3JlZl9pbmMoc2tiX2ZyYWdfcGFnZShmcmFnKSk7XG4tXHRcdH1cbi1cdH1cbi1cdHBhZ2VfcmVmX2luYyhidWZmLVx1MDAzZXJ4ZGF0YS5wYWdlKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGFxX2ZyZWVfcnhwYWdlKHN0cnVjdCBhcV9yeHBhZ2UgKnJ4cGFnZSwgc3RydWN0IGRldmljZSAqZGV2KVxuLXtcbi1cdHVuc2lnbmVkIGludCBsZW4gPSBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIHJ4cGFnZS1cdTAwM2VvcmRlcjtcbi1cbi1cdGRtYV91bm1hcF9wYWdlKGRldiwgcnhwYWdlLVx1MDAzZWRhZGRyLCBsZW4sIERNQV9GUk9NX0RFVklDRSk7XG4tXG4tXHQvKiBEcm9wIHRoZSByZWYgZm9yIGJlaW5nIGluIHRoZSByaW5nLiAqL1xuLVx0X19mcmVlX3BhZ2VzKHJ4cGFnZS1cdTAwM2VwYWdlLCByeHBhZ2UtXHUwMDNlb3JkZXIpO1xuLVx0cnhwYWdlLVx1MDAzZXBhZ2UgPSBOVUxMO1xuLX1cbi1cbi1zdGF0aWMgaW50IGFxX2FsbG9jX3J4cGFnZXMoc3RydWN0IGFxX3J4cGFnZSAqcnhwYWdlLCBzdHJ1Y3QgYXFfcmluZ19zICpyeF9yaW5nKVxuJiM0MztzdGF0aWMgaW50IGFxX2dldF9yeHBhZ2VzKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsIHN0cnVjdCBhcV9yaW5nX2J1ZmZfcyAqcnhidWYpXG4ge1xuLVx0c3RydWN0IGRldmljZSAqZGV2ID0gYXFfbmljX2dldF9kZXYocnhfcmluZy1cdTAwM2VhcV9uaWMpO1xuLVx0dW5zaWduZWQgaW50IG9yZGVyID0gcnhfcmluZy1cdTAwM2VwYWdlX29yZGVyO1xuJiM0MztcdHVuc2lnbmVkIGludCBzaXplID0gc2VsZi1cdTAwM2VwYWdlX29mZnNldCAmIzQzOyBzZWxmLVx1MDAzZWZyYW1lX21heCAmIzQzO1xuJiM0MztcdFx0XHQgICAgc2VsZi1cdTAwM2V0YWlsX3NpemU7XG4mIzQzO1x0dW5zaWduZWQgaW50IHBnX29mZjtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuLVx0aW50IHJldCA9IC1FTk9NRU07XG4tXHRkbWFfYWRkcl90IGRhZGRyO1xuLVxuLVx0cGFnZSA9IGRldl9hbGxvY19wYWdlcyhvcmRlcik7XG4tXHRpZiAodW5saWtlbHkoIXBhZ2UpKVxuLVx0XHRnb3RvIGVycl9leGl0O1xuLVxuLVx0ZGFkZHIgPSBkbWFfbWFwX3BhZ2UoZGV2LCBwYWdlLCAwLCBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyLFxuLVx0XHRcdCAgICAgRE1BX0ZST01fREVWSUNFKTtcbi1cbi1cdGlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRhZGRyKSkpXG4tXHRcdGdvdG8gZnJlZV9wYWdlO1xuLVxuLVx0cnhwYWdlLVx1MDAzZXBhZ2UgPSBwYWdlO1xuLVx0cnhwYWdlLVx1MDAzZWRhZGRyID0gZGFkZHI7XG4tXHRyeHBhZ2UtXHUwMDNlb3JkZXIgPSBvcmRlcjtcbi1cdHJ4cGFnZS1cdTAwM2VwZ19vZmYgPSByeF9yaW5nLVx1MDAzZXBhZ2Vfb2Zmc2V0O1xuLVxuLVx0cmV0dXJuIDA7XG4tXG4tZnJlZV9wYWdlOlxuLVx0X19mcmVlX3BhZ2VzKHBhZ2UsIG9yZGVyKTtcbiBcbi1lcnJfZXhpdDpcbi1cdHJldHVybiByZXQ7XG4tfVxuJiM0MztcdC8qIEJ1ZmZlcnMgd2hvc2UgcGFnZSB3YXMgbm90IHBhc3NlZCB1cCB0aGUgc3RhY2sgYXJlIHJlcG9zdGVkXG4mIzQzO1x0ICogd2l0aCB0aGUgZGF0YSB0aGV5IGFscmVhZHkgY2FycnkgZGlzY2FyZGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyeGJ1Zi1cdTAwM2VyeGRhdGEucGFnZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuLXN0YXRpYyBpbnQgYXFfZ2V0X3J4cGFnZXMoc3RydWN0IGFxX3JpbmdfcyAqc2VsZiwgc3RydWN0IGFxX3JpbmdfYnVmZl9zICpyeGJ1Zilcbi17XG4tXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBzZWxmLVx1MDAzZXBhZ2Vfb3JkZXI7XG4tXHR1MTYgcGFnZV9vZmZzZXQgPSBzZWxmLVx1MDAzZXBhZ2Vfb2Zmc2V0O1xuLVx0dTE2IGZyYW1lX21heCA9IHNlbGYtXHUwMDNlZnJhbWVfbWF4O1xuLVx0dTE2IHRhaWxfc2l6ZSA9IHNlbGYtXHUwMDNldGFpbF9zaXplO1xuLVx0aW50IHJldDtcbi1cbi1cdGlmIChyeGJ1Zi1cdTAwM2VyeGRhdGEucGFnZSkge1xuLVx0XHQvKiBPbmUgbWVhbnMgcmluZyBpcyB0aGUgb25seSB1c2VyIGFuZCBjYW4gcmV1c2UgKi9cbi1cdFx0aWYgKHBhZ2VfcmVmX2NvdW50KHJ4YnVmLVx1MDAzZXJ4ZGF0YS5wYWdlKSBcdTAwM2UgMSkge1xuLVx0XHRcdC8qIFRyeSByZXVzZSBidWZmZXIgKi9cbi1cdFx0XHRyeGJ1Zi1cdTAwM2VyeGRhdGEucGdfb2ZmICYjNDM7PSBmcmFtZV9tYXggJiM0MzsgcGFnZV9vZmZzZXQgJiM0Mztcbi1cdFx0XHRcdFx0XHR0YWlsX3NpemU7XG4tXHRcdFx0aWYgKHJ4YnVmLVx1MDAzZXJ4ZGF0YS5wZ19vZmYgJiM0MzsgZnJhbWVfbWF4ICYjNDM7IHRhaWxfc2l6ZSBcdTAwM2M9XG4tXHRcdFx0ICAgIChQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyKSkge1xuLVx0XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzZWxmLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbi1cdFx0XHRcdHNlbGYtXHUwMDNlc3RhdHMucngucGdfZmxpcHMmIzQzOyYjNDM7O1xuLVx0XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c2VsZi1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4tXG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdC8qIEJ1ZmZlciBleGhhdXN0ZWQuIFdlIGhhdmUgb3RoZXIgdXNlcnMgYW5kXG4tXHRcdFx0XHQgKiBzaG91bGQgcmVsZWFzZSB0aGlzIHBhZ2UgYW5kIHJlYWxsb2Ncbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0YXFfZnJlZV9yeHBhZ2UoXHUwMDI2cnhidWYtXHUwMDNlcnhkYXRhLFxuLVx0XHRcdFx0XHQgICAgICAgYXFfbmljX2dldF9kZXYoc2VsZi1cdTAwM2VhcV9uaWMpKTtcbi1cdFx0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c2VsZi1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4tXHRcdFx0XHRzZWxmLVx1MDAzZXN0YXRzLnJ4LnBnX2xvc3RzJiM0MzsmIzQzOztcbi1cdFx0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnNlbGYtXHUwMDNlc3RhdHMucnguc3luY3ApO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRyeGJ1Zi1cdTAwM2VyeGRhdGEucGdfb2ZmID0gcGFnZV9vZmZzZXQ7XG4tXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzZWxmLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbi1cdFx0XHRzZWxmLVx1MDAzZXN0YXRzLnJ4LnBnX3JldXNlcyYjNDM7JiM0Mzs7XG4tXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c2VsZi1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4tXHRcdH1cbiYjNDM7XHRwYWdlID0gcGFnZV9wb29sX2Rldl9hbGxvY19mcmFnKHNlbGYtXHUwMDNlcGdfcG9vbCwgXHUwMDI2cGdfb2ZmLCBzaXplKTtcbiYjNDM7XHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XG4mIzQzO1x0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnNlbGYtXHUwMDNlc3RhdHMucnguc3luY3ApO1xuJiM0MztcdFx0c2VsZi1cdTAwM2VzdGF0cy5yeC5hbGxvY19mYWlscyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzZWxmLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuLVx0aWYgKCFyeGJ1Zi1cdTAwM2VyeGRhdGEucGFnZSkge1xuLVx0XHRyZXQgPSBhcV9hbGxvY19yeHBhZ2VzKFx1MDAyNnJ4YnVmLVx1MDAzZXJ4ZGF0YSwgc2VsZik7XG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnNlbGYtXHUwMDNlc3RhdHMucnguc3luY3ApO1xuLVx0XHRcdHNlbGYtXHUwMDNlc3RhdHMucnguYWxsb2NfZmFpbHMmIzQzOyYjNDM7O1xuLVx0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnNlbGYtXHUwMDNlc3RhdHMucnguc3luY3ApO1xuLVx0XHR9XG4tXHRcdHJldHVybiByZXQ7XG4tXHR9XG4mIzQzO1x0cnhidWYtXHUwMDNlcnhkYXRhLnBhZ2UgPSBwYWdlO1xuJiM0MztcdHJ4YnVmLVx1MDAzZXJ4ZGF0YS5kYWRkciA9IHBhZ2VfcG9vbF9nZXRfZG1hX2FkZHIocGFnZSk7XG4mIzQzO1x0cnhidWYtXHUwMDNlcnhkYXRhLnBnX29mZiA9IHBnX29mZiAmIzQzOyBzZWxmLVx1MDAzZXBhZ2Vfb2Zmc2V0O1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTE3OSw2ICYjNDM7OTYsMTUgQEAgaW50IGFxX3JpbmdfcnhfYWxsb2Moc3RydWN0IGFxX3JpbmdfcyAqc2VsZixcbiBcdFx0ICAgICB1bnNpZ25lZCBpbnQgaWR4LFxuIFx0XHQgICAgIHN0cnVjdCBhcV9uaWNfY2ZnX3MgKmFxX25pY19jZmcpXG4ge1xuJiM0MztcdHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHBwX3BhcmFtcyA9IHtcbiYjNDM7XHRcdC5mbGFncyA9IFBQX0ZMQUdfRE1BX01BUCB8IFBQX0ZMQUdfRE1BX1NZTkNfREVWLFxuJiM0MztcdFx0LnBvb2xfc2l6ZSA9IGFxX25pY19jZmctXHUwMDNlcnhkcyxcbiYjNDM7XHRcdC5uaWQgPSBOVU1BX05PX05PREUsXG4mIzQzO1x0XHQuZGV2ID0gYXFfbmljX2dldF9kZXYoYXFfbmljKSxcbiYjNDM7XHRcdC5kbWFfZGlyID0gRE1BX0ZST01fREVWSUNFLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IHBhZ2VfcG9vbCAqcG9vbDtcbiYjNDM7XG4gXHRzZWxmLVx1MDAzZWFxX25pYyA9IGFxX25pYztcbiBcdHNlbGYtXHUwMDNlaWR4ID0gaWR4O1xuIFx0c2VsZi1cdTAwM2VzaXplID0gYXFfbmljX2NmZy1cdTAwM2VyeGRzO1xuQEAgLTIwMCw2ICYjNDM7MTI2LDE4IEBAIGludCBhcV9yaW5nX3J4X2FsbG9jKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsXG4gXHRcdHNlbGYtXHUwMDNldGFpbF9zaXplID0gMDtcbiBcdH1cbiBcbiYjNDM7XHRwcF9wYXJhbXMub3JkZXIgPSBzZWxmLVx1MDAzZXBhZ2Vfb3JkZXI7XG4mIzQzO1x0cHBfcGFyYW1zLm1heF9sZW4gPSBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIHNlbGYtXHUwMDNlcGFnZV9vcmRlcjtcbiYjNDM7XG4mIzQzO1x0cG9vbCA9IHBhZ2VfcG9vbF9jcmVhdGUoXHUwMDI2cHBfcGFyYW1zKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBvb2wpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocG9vbCk7XG4mIzQzO1xuJiM0MztcdHNlbGYtXHUwMDNlcGdfcG9vbCA9IHBvb2w7XG4mIzQzO1xuJiM0MztcdC8qIE9uIGZhaWx1cmUgYXFfcmluZ19hbGxvYygpIGNhbGxzIGFxX3JpbmdfZnJlZSgpLCB3aGljaCBhbHNvXG4mIzQzO1x0ICogZGVzdHJveXMgdGhlIHBhZ2UgcG9vbC5cbiYjNDM7XHQgKi9cbiBcdHJldHVybiBhcV9yaW5nX2FsbG9jKHNlbGYsIGFxX25pYyk7XG4gfVxuIFxuQEAgLTM0Niw3ICYjNDM7Mjg0LDExIEBAIGJvb2wgYXFfcmluZ190eF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKVxuIFx0XHRcdCYjNDM7JiM0MztzZWxmLVx1MDAzZXN0YXRzLnR4LnBhY2tldHM7XG4gXHRcdFx0c2VsZi1cdTAwM2VzdGF0cy50eC5ieXRlcyAmIzQzOz0geGRwX2dldF9mcmFtZV9sZW4oYnVmZi1cdTAwM2V4ZHBmKTtcbiBcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzZWxmLVx1MDAzZXN0YXRzLnR4LnN5bmNwKTtcbi1cdFx0XHR4ZHBfcmV0dXJuX2ZyYW1lX3J4X25hcGkoYnVmZi1cdTAwM2V4ZHBmKTtcbiYjNDM7XHRcdFx0LyogRnJhbWVzIHF1ZXVlZCB2aWEgbmRvX3hkcF94bWl0KCkgbWF5IGNvbWUgZnJvbSBhXG4mIzQzO1x0XHRcdCAqIHBhZ2UgcG9vbCBvd25lZCBieSBhbm90aGVyIE5BUEkgY29udGV4dDogbm8gZGlyZWN0XG4mIzQzO1x0XHRcdCAqIHJlY3ljbGluZy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHhkcF9yZXR1cm5fZnJhbWUoYnVmZi1cdTAwM2V4ZHBmKTtcbiBcdFx0fVxuIFxuIG91dDpcbkBAIC0zNjAsNiAmIzQzOzMwMiwzNSBAQCBib29sIGFxX3JpbmdfdHhfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqc2VsZilcbiBcdHJldHVybiAhIWJ1ZGdldDtcbiB9XG4gXG4mIzQzO3ZvaWQgYXFfcmluZ190eF9kZWluaXQoc3RydWN0IGFxX3JpbmdfcyAqc2VsZilcbiYjNDM7e1xuJiM0MztcdGlmICghc2VsZilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7IHNlbGYtXHUwMDNlc3dfaGVhZCAhPSBzZWxmLVx1MDAzZXN3X3RhaWw7XG4mIzQzO1x0XHRzZWxmLVx1MDAzZXN3X2hlYWQgPSBhcV9yaW5nX25leHRfZHgoc2VsZiwgc2VsZi1cdTAwM2Vzd19oZWFkKSkge1xuJiM0MztcdFx0c3RydWN0IGFxX3JpbmdfYnVmZl9zICpidWZmID0gXHUwMDI2c2VsZi1cdTAwM2VidWZmX3Jpbmdbc2VsZi1cdTAwM2Vzd19oZWFkXTtcbiYjNDM7XHRcdHN0cnVjdCBkZXZpY2UgKm5kZXYgPSBhcV9uaWNfZ2V0X2RldihzZWxmLVx1MDAzZWFxX25pYyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGJ1ZmYtXHUwMDNlaXNfbWFwcGVkKSB7XG4mIzQzO1x0XHRcdGlmIChidWZmLVx1MDAzZWlzX3NvcCkge1xuJiM0MztcdFx0XHRcdGRtYV91bm1hcF9zaW5nbGUobmRldiwgYnVmZi1cdTAwM2VwYSwgYnVmZi1cdTAwM2VsZW4sXG4mIzQzO1x0XHRcdFx0XHRcdCBETUFfVE9fREVWSUNFKTtcbiYjNDM7XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRkbWFfdW5tYXBfcGFnZShuZGV2LCBidWZmLVx1MDAzZXBhLCBidWZmLVx1MDAzZWxlbixcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBETUFfVE9fREVWSUNFKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChidWZmLVx1MDAzZWlzX2VvcCkge1xuJiM0MztcdFx0XHRpZiAoYnVmZi1cdTAwM2Vza2IpXG4mIzQzO1x0XHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoYnVmZi1cdTAwM2Vza2IpO1xuJiM0MztcdFx0XHRlbHNlIGlmIChidWZmLVx1MDAzZXhkcGYpXG4mIzQzO1x0XHRcdFx0eGRwX3JldHVybl9mcmFtZShidWZmLVx1MDAzZXhkcGYpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBhcV9yeF9jaGVja3N1bShzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLFxuIFx0XHRcdCAgIHN0cnVjdCBhcV9yaW5nX2J1ZmZfcyAqYnVmZixcbiBcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuQEAgLTQwOCwyMiAmIzQzOzM3OSwxNSBAQCBpbnQgYXFfeGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG51bV9mcmFtZXMsXG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbi1cdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdFx0c3RydWN0IGFxX3JpbmdfYnVmZl9zICpidWZmKVxuJiM0MztcdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmO1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbiBcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XG4gXHRpZiAodW5saWtlbHkoIXhkcGYpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdHNrYiA9IHhkcF9idWlsZF9za2JfZnJvbV9mcmFtZSh4ZHBmLCBkZXYpO1xuLVx0aWYgKCFza2IpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0YXFfZ2V0X3J4cGFnZXNfeGRwKGJ1ZmYsIHhkcCk7XG4tXHRyZXR1cm4gc2tiO1xuJiM0MztcdHJldHVybiB4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoeGRwZiwgZGV2KTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsXG5AQCAtNDQ0LDggJiM0Mzs0MDgsMTYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsXG4gXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeF9yaW5nLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbiBcbiBcdHByb2cgPSBSRUFEX09OQ0UocnhfcmluZy1cdTAwM2V4ZHBfcHJvZyk7XG4tXHRpZiAoIXByb2cpXG4tXHRcdHJldHVybiBhcV94ZHBfYnVpbGRfc2tiKHhkcCwgYXFfbmljLVx1MDAzZW5kZXYsIGJ1ZmYpO1xuJiM0MztcdGlmICghcHJvZykge1xuJiM0MztcdFx0c2tiID0gYXFfeGRwX2J1aWxkX3NrYih4ZHAsIGFxX25pYy1cdTAwM2VuZGV2KTtcbiYjNDM7XHRcdC8qIFRoZSByaW5nIGhhcyBhbHJlYWR5IGhhbmRlZCBpdHMgcGFnZSBwb29sIHJlZmVyZW5jZSB0byB0aGVcbiYjNDM7XHRcdCAqIHhkcF9idWZmLCBzbyBpZiB0aGUgc2tiIGNvdWxkIG5vdCBiZSBidWlsdCB0aGUgYnVmZmVyIG11c3RcbiYjNDM7XHRcdCAqIGJlIHJldHVybmVkIHRvIHRoZSBwb29sIGhlcmUgb3IgaXRzIGZyYWdtZW50cyB3b3VsZCBsZWFrLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIXNrYilcbiYjNDM7XHRcdFx0eGRwX3JldHVybl9idWZmKHhkcCk7XG4mIzQzO1x0XHRyZXR1cm4gc2tiO1xuJiM0MztcdH1cbiBcbiBcdHByZWZldGNodyh4ZHAtXHUwMDNlZGF0YV9oYXJkX3N0YXJ0KTsgLyogeGRwX2ZyYW1lIHdyaXRlICovXG4gXG5AQCAtNDU2LDcgJiM0Mzs0MjgsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFxX3hkcF9ydW5fcHJvZyhzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYyxcbiBcdGFjdCA9IGJwZl9wcm9nX3J1bl94ZHAocHJvZywgeGRwKTtcbiBcdHN3aXRjaCAoYWN0KSB7XG4gXHRjYXNlIFhEUF9QQVNTOlxuLVx0XHRza2IgPSBhcV94ZHBfYnVpbGRfc2tiKHhkcCwgYXFfbmljLVx1MDAzZW5kZXYsIGJ1ZmYpO1xuJiM0MztcdFx0c2tiID0gYXFfeGRwX2J1aWxkX3NrYih4ZHAsIGFxX25pYy1cdTAwM2VuZGV2KTtcbiBcdFx0aWYgKCFza2IpXG4gXHRcdFx0Z290byBvdXRfYWJvcnRlZDtcbiBcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyeF9yaW5nLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbkBAIC00NzQsNyAmIzQzOzQ0Niw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX3J1bl9wcm9nKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLFxuIFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4X3JpbmctXHUwMDNlc3RhdHMucnguc3luY3ApO1xuIFx0XHQmIzQzOyYjNDM7cnhfcmluZy1cdTAwM2VzdGF0cy5yeC54ZHBfdHg7XG4gXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4X3JpbmctXHUwMDNlc3RhdHMucnguc3luY3ApO1xuLVx0XHRhcV9nZXRfcnhwYWdlc194ZHAoYnVmZiwgeGRwKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFhEUF9SRURJUkVDVDpcbiBcdFx0aWYgKHhkcF9kb19yZWRpcmVjdChhcV9uaWMtXHUwMDNlbmRldiwgeGRwLCBwcm9nKSBcdTAwM2MgMClcbkBAIC00ODMsNyAmIzQzOzQ1NCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX3J1bl9wcm9nKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLFxuIFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4X3JpbmctXHUwMDNlc3RhdHMucnguc3luY3ApO1xuIFx0XHQmIzQzOyYjNDM7cnhfcmluZy1cdTAwM2VzdGF0cy5yeC54ZHBfcmVkaXJlY3Q7XG4gXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4X3JpbmctXHUwMDNlc3RhdHMucnguc3luY3ApO1xuLVx0XHRhcV9nZXRfcnhwYWdlc194ZHAoYnVmZiwgeGRwKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRmYWxsdGhyb3VnaDtcbkBAIC00OTQsMTEgJiM0Mzs0NjQsMTMgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsXG4gXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4X3JpbmctXHUwMDNlc3RhdHMucnguc3luY3ApO1xuIFx0XHR0cmFjZV94ZHBfZXhjZXB0aW9uKGFxX25pYy1cdTAwM2VuZGV2LCBwcm9nLCBhY3QpO1xuIFx0XHRicGZfd2Fybl9pbnZhbGlkX3hkcF9hY3Rpb24oYXFfbmljLVx1MDAzZW5kZXYsIHByb2csIGFjdCk7XG4mIzQzO1x0XHR4ZHBfcmV0dXJuX2J1ZmYoeGRwKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFhEUF9EUk9QOlxuIFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4X3JpbmctXHUwMDNlc3RhdHMucnguc3luY3ApO1xuIFx0XHQmIzQzOyYjNDM7cnhfcmluZy1cdTAwM2VzdGF0cy5yeC54ZHBfZHJvcDtcbiBcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cnhfcmluZy1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4mIzQzO1x0XHR4ZHBfcmV0dXJuX2J1ZmYoeGRwKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG5AQCAtNTE3LDggJiM0Mzs0ODksMTEgQEAgc3RhdGljIGJvb2wgYXFfYWRkX3J4X2ZyYWdtZW50KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdGRvIHtcbiBcdFx0c2tiX2ZyYWdfdCAqZnJhZztcbiBcbi1cdFx0aWYgKHVubGlrZWx5KHNpbmZvLVx1MDAzZW5yX2ZyYWdzIFx1MDAzZT0gTUFYX1NLQl9GUkFHUykpXG4mIzQzO1x0XHRpZiAodW5saWtlbHkoc2luZm8tXHUwMDNlbnJfZnJhZ3MgXHUwMDNlPSBNQVhfU0tCX0ZSQUdTKSkge1xuJiM0MztcdFx0XHQvKiBBdHRhY2hlZCBmcmFncyBtdXN0IHJlYWNoIHhkcF9yZXR1cm5fYnVmZigpICovXG4mIzQzO1x0XHRcdHhkcF9idWZmX3NldF9mcmFnc19mbGFnKHhkcCk7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGZyYWcgPSBcdTAwMjZzaW5mby1cdTAwM2VmcmFnc1tzaW5mby1cdTAwM2Vucl9mcmFncyYjNDM7JiM0MztdO1xuIFx0XHRidWZmXyA9IFx1MDAyNnJpbmctXHUwMDNlYnVmZl9yaW5nW2J1ZmZfLVx1MDAzZW5leHRdO1xuQEAgLTU0Miw2ICYjNDM7NTE3LDExIEBAIHN0YXRpYyBib29sIGFxX2FkZF9yeF9mcmFnbWVudChzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRcdGlmIChwYWdlX2lzX3BmbWVtYWxsb2MoYnVmZl8tXHUwMDNlcnhkYXRhLnBhZ2UpKVxuIFx0XHRcdHhkcF9idWZmX3NldF9mcmFnX3BmbWVtYWxsb2MoeGRwKTtcbiBcbiYjNDM7XHRcdC8qIFRoZSBmcmFnJiMzOTtzIHBhZ2UgcG9vbCByZWZlcmVuY2UgaXMgb3duZWQgYnkgdGhlIHhkcF9idWZmXG4mIzQzO1x0XHQgKiBmcm9tIG5vdyBvbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0YnVmZl8tXHUwMDNlcnhkYXRhLnBhZ2UgPSBOVUxMO1xuJiM0MztcbiBcdH0gd2hpbGUgKCFidWZmXy1cdTAwM2Vpc19lb3ApO1xuIFxuIFx0eGRwX2J1ZmZfc2V0X2ZyYWdzX2ZsYWcoeGRwKTtcbkBAIC02NDUsNiAmIzQzOzYyNSw3IEBAIHN0YXRpYyBpbnQgX19hcV9yaW5nX3J4X2NsZWFuKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZXJyX2V4aXQ7XG4gXHRcdH1cbiYjNDM7XHRcdHNrYl9tYXJrX2Zvcl9yZWN5Y2xlKHNrYik7XG4gXHRcdGlmIChpc19wdHBfcmluZylcbiBcdFx0XHRidWZmLVx1MDAzZWxlbiAtPVxuIFx0XHRcdFx0YXFfcHRwX2V4dHJhY3RfdHMoc2VsZi1cdTAwM2VhcV9uaWMsIHNrYl9od3RzdGFtcHMoc2tiKSxcbkBAIC02NjUsNyAmIzQzOzY0Niw3IEBAIHN0YXRpYyBpbnQgX19hcV9yaW5nX3J4X2NsZWFuKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0XHRcdFx0YnVmZi1cdTAwM2VyeGRhdGEucGdfb2ZmICYjNDM7IGhkcl9sZW4sXG4gXHRcdFx0XHRcdGJ1ZmYtXHUwMDNlbGVuIC0gaGRyX2xlbixcbiBcdFx0XHRcdFx0c2VsZi1cdTAwM2VmcmFtZV9tYXgpO1xuLVx0XHRcdHBhZ2VfcmVmX2luYyhidWZmLVx1MDAzZXJ4ZGF0YS5wYWdlKTtcbiYjNDM7XHRcdFx0YnVmZi1cdTAwM2VyeGRhdGEucGFnZSA9IE5VTEw7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKCFidWZmLVx1MDAzZWlzX2VvcCkge1xuQEAgLTY4NCw3ICYjNDM7NjY1LDcgQEAgc3RhdGljIGludCBfX2FxX3JpbmdfcnhfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqc2VsZiwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0XHRcdFx0XHRcdGJ1ZmZfLVx1MDAzZXJ4ZGF0YS5wZ19vZmYsXG4gXHRcdFx0XHRcdFx0YnVmZl8tXHUwMDNlbGVuLFxuIFx0XHRcdFx0XHRcdHNlbGYtXHUwMDNlZnJhbWVfbWF4KTtcbi1cdFx0XHRcdHBhZ2VfcmVmX2luYyhidWZmXy1cdTAwM2VyeGRhdGEucGFnZSk7XG4mIzQzO1x0XHRcdFx0YnVmZl8tXHUwMDNlcnhkYXRhLnBhZ2UgPSBOVUxMO1xuIFx0XHRcdFx0YnVmZl8tXHUwMDNlaXNfY2xlYW5lZCA9IDE7XG4gXG4gXHRcdFx0XHRidWZmLVx1MDAzZWlzX2lwX2NzbyBcdTAwMjY9IGJ1ZmZfLVx1MDAzZWlzX2lwX2NzbztcbkBAIC04MjIsNiAmIzQzOzgwMywxMSBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ194ZHBfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqcnhfcmluZyxcbiBcdFx0eGRwX2luaXRfYnVmZihcdTAwMjZ4ZHAsIGZyYW1lX3N6LCBcdTAwMjZyeF9yaW5nLVx1MDAzZXhkcF9yeHEpO1xuIFx0XHR4ZHBfcHJlcGFyZV9idWZmKFx1MDAyNnhkcCwgaGFyZF9zdGFydCwgcnhfcmluZy1cdTAwM2VwYWdlX29mZnNldCxcbiBcdFx0XHRcdCBidWZmLVx1MDAzZWxlbiwgZmFsc2UpO1xuJiM0MztcdFx0LyogVGhlIHhkcF9idWZmIG93bnMgdGhlIGJ1ZmZlciYjMzk7cyBwYWdlIHBvb2wgcmVmZXJlbmNlIGZyb21cbiYjNDM7XHRcdCAqIGhlcmUgb247IGl0IGNvbWVzIGJhY2sgdGhyb3VnaCB0aGUgTUVNX1RZUEVfUEFHRV9QT09MXG4mIzQzO1x0XHQgKiBtZW1vcnkgbW9kZWwgb24gZXZlcnkgWERQIHZlcmRpY3QuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGJ1ZmYtXHUwMDNlcnhkYXRhLnBhZ2UgPSBOVUxMO1xuIFx0XHRpZiAoIWJ1ZmYtXHUwMDNlaXNfZW9wKSB7XG4gXHRcdFx0aWYgKGFxX2FkZF9yeF9mcmFnbWVudChkZXYsIHJ4X3JpbmcsIGJ1ZmYsIFx1MDAyNnhkcCkpIHtcbiBcdFx0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cnhfcmluZy1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG5AQCAtODI5LDYgJiM0Mzs4MTUsNyBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ194ZHBfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqcnhfcmluZyxcbiBcdFx0XHRcdHJ4X3JpbmctXHUwMDNlc3RhdHMucnguYnl0ZXMgJiM0Mzs9IHhkcF9nZXRfYnVmZl9sZW4oXHUwMDI2eGRwKTtcbiBcdFx0XHRcdCYjNDM7JiM0MztyeF9yaW5nLVx1MDAzZXN0YXRzLnJ4LnhkcF9hYm9ydGVkO1xuIFx0XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cnhfcmluZy1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4mIzQzO1x0XHRcdFx0eGRwX3JldHVybl9idWZmKFx1MDAyNnhkcCk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXHRcdH1cbkBAIC05MjEsMTUgJiM0Mzs5MDgsMzEgQEAgaW50IGFxX3JpbmdfcnhfZmlsbChzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKVxuIFxuIHZvaWQgYXFfcmluZ19yeF9kZWluaXQoc3RydWN0IGFxX3JpbmdfcyAqc2VsZilcbiB7XG4tXHRpZiAoIXNlbGYpXG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1xuJiM0MztcdGlmICghc2VsZiB8fCAhc2VsZi1cdTAwM2VidWZmX3JpbmcpXG4gXHRcdHJldHVybjtcbiBcbi1cdGZvciAoOyBzZWxmLVx1MDAzZXN3X2hlYWQgIT0gc2VsZi1cdTAwM2Vzd190YWlsO1xuLVx0XHRzZWxmLVx1MDAzZXN3X2hlYWQgPSBhcV9yaW5nX25leHRfZHgoc2VsZiwgc2VsZi1cdTAwM2Vzd19oZWFkKSkge1xuLVx0XHRzdHJ1Y3QgYXFfcmluZ19idWZmX3MgKmJ1ZmYgPSBcdTAwMjZzZWxmLVx1MDAzZWJ1ZmZfcmluZ1tzZWxmLVx1MDAzZXN3X2hlYWRdO1xuJiM0MztcdC8qIFJlbGVhc2UgZXZlcnkgcGFnZSBzdGlsbCBvd25lZCBieSB0aGUgcmluZy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFdhbGtpbmcgW3N3X2hlYWQsIHN3X3RhaWwpIGlzIG5vdCBlbm91Z2g6IHJlZmlsbCBpcyBiYXRjaGVkXG4mIzQzO1x0ICogKGFxX3JpbmdfcnhfZmlsbCgpIHdhaXRzIGZvciBBUV9DRkdfUlhfUkVGSUxMX1RIUkVTIGZyZWUgc2xvdHMpLFxuJiM0MztcdCAqIHNvIHNsb3RzIHRoYXQgd2VyZSBjbGVhbmVkIGJ1dCBub3QgeWV0IHJlcG9zdGVkIGFjY3VtdWxhdGUgaW4gdGhlXG4mIzQzO1x0ICogW3N3X3RhaWwsIHN3X2hlYWQpIGdhcCwgYW5kIHRoZXkga2VlcCB0aGVpciBwYWdlIGZvciByZXVzZS4gV2Fsa1xuJiM0MztcdCAqIHRoZSB3aG9sZSByaW5nIGFuZCByZWxlYXNlIHdoYXRldmVyIGlzIGxlZnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2VsZi1cdTAwM2VzaXplOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGFxX3JpbmdfYnVmZl9zICpidWZmID0gXHUwMDI2c2VsZi1cdTAwM2VidWZmX3JpbmdbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFidWZmLVx1MDAzZXJ4ZGF0YS5wYWdlKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0YXFfZnJlZV9yeHBhZ2UoXHUwMDI2YnVmZi1cdTAwM2VyeGRhdGEsIGFxX25pY19nZXRfZGV2KHNlbGYtXHUwMDNlYXFfbmljKSk7XG4mIzQzO1x0XHRwYWdlX3Bvb2xfcHV0X2Z1bGxfcGFnZShzZWxmLVx1MDAzZXBnX3Bvb2wsIGJ1ZmYtXHUwMDNlcnhkYXRhLnBhZ2UsXG4mIzQzO1x0XHRcdFx0XHRmYWxzZSk7XG4mIzQzO1x0XHRidWZmLVx1MDAzZXJ4ZGF0YS5wYWdlID0gTlVMTDtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0c2VsZi1cdTAwM2Vzd19oZWFkID0gc2VsZi1cdTAwM2Vzd190YWlsO1xuIH1cbiBcbiB2b2lkIGFxX3JpbmdfZnJlZShzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKVxuQEAgLTk0MCw2ICYjNDM7OTQzLDExIEBAIHZvaWQgYXFfcmluZ19mcmVlKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYpXG4gXHRrZnJlZShzZWxmLVx1MDAzZWJ1ZmZfcmluZyk7XG4gXHRzZWxmLVx1MDAzZWJ1ZmZfcmluZyA9IE5VTEw7XG4gXG4mIzQzO1x0aWYgKHNlbGYtXHUwMDNlcGdfcG9vbCkge1xuJiM0MztcdFx0cGFnZV9wb29sX2Rlc3Ryb3koc2VsZi1cdTAwM2VwZ19wb29sKTtcbiYjNDM7XHRcdHNlbGYtXHUwMDNlcGdfcG9vbCA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChzZWxmLVx1MDAzZWR4X3JpbmcpIHtcbiBcdFx0ZG1hX2ZyZWVfY29oZXJlbnQoYXFfbmljX2dldF9kZXYoc2VsZi1cdTAwM2VhcV9uaWMpLFxuIFx0XHRcdFx0ICBzZWxmLVx1MDAzZXNpemUgKiBzZWxmLVx1MDAzZWR4X3NpemUsIHNlbGYtXHUwMDNlZHhfcmluZyxcbkBAIC05NzgsOSAmIzQzOzk4Niw2IEBAIHVuc2lnbmVkIGludCBhcV9yaW5nX2ZpbGxfc3RhdHNfZGF0YShzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLCB1NjQgKmRhdGEpXG4gXHRcdFx0ZGF0YVsmIzQzOyYjNDM7Y291bnRdID0gc2VsZi1cdTAwM2VzdGF0cy5yeC5hbGxvY19mYWlscztcbiBcdFx0XHRkYXRhWyYjNDM7JiM0Mztjb3VudF0gPSBzZWxmLVx1MDAzZXN0YXRzLnJ4LnNrYl9hbGxvY19mYWlscztcbiBcdFx0XHRkYXRhWyYjNDM7JiM0Mztjb3VudF0gPSBzZWxmLVx1MDAzZXN0YXRzLnJ4LnBvbGxzO1xuLVx0XHRcdGRhdGFbJiM0MzsmIzQzO2NvdW50XSA9IHNlbGYtXHUwMDNlc3RhdHMucngucGdfZmxpcHM7XG4tXHRcdFx0ZGF0YVsmIzQzOyYjNDM7Y291bnRdID0gc2VsZi1cdTAwM2VzdGF0cy5yeC5wZ19yZXVzZXM7XG4tXHRcdFx0ZGF0YVsmIzQzOyYjNDM7Y291bnRdID0gc2VsZi1cdTAwM2VzdGF0cy5yeC5wZ19sb3N0cztcbiBcdFx0XHRkYXRhWyYjNDM7JiM0Mztjb3VudF0gPSBzZWxmLVx1MDAzZXN0YXRzLnJ4LnhkcF9hYm9ydGVkO1xuIFx0XHRcdGRhdGFbJiM0MzsmIzQzO2NvdW50XSA9IHNlbGYtXHUwMDNlc3RhdHMucngueGRwX2Ryb3A7XG4gXHRcdFx0ZGF0YVsmIzQzOyYjNDM7Y291bnRdID0gc2VsZi1cdTAwM2VzdGF0cy5yeC54ZHBfcGFzcztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmhcbmluZGV4IGE3MGI4ODBhZGE2N2U5Li41OGJjYWRiM2UzY2NkMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5oXG5AQCAtMTcsMTIgJiM0MzsxNywxMiBAQFxuICNkZWZpbmUgQVFfWERQX1RBSUxST09NXHRcdFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSlcbiBcbiBzdHJ1Y3QgcGFnZTtcbiYjNDM7c3RydWN0IHBhZ2VfcG9vbDtcbiBzdHJ1Y3QgYXFfbmljX2NmZ19zO1xuIFxuIHN0cnVjdCBhcV9yeHBhZ2Uge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHRkbWFfYWRkcl90IGRhZGRyO1xuLVx0dW5zaWduZWQgaW50IG9yZGVyO1xuIFx0dW5zaWduZWQgaW50IHBnX29mZjtcbiB9O1xuIFxuQEAgLTEwNSw5ICYjNDM7MTA1LDYgQEAgc3RydWN0IGFxX3Jpbmdfc3RhdHNfcnhfcyB7XG4gXHR1NjQgYWxsb2NfZmFpbHM7XG4gXHR1NjQgc2tiX2FsbG9jX2ZhaWxzO1xuIFx0dTY0IHBvbGxzO1xuLVx0dTY0IHBnX2xvc3RzO1xuLVx0dTY0IHBnX2ZsaXBzO1xuLVx0dTY0IHBnX3JldXNlcztcbiBcdHU2NCB4ZHBfYWJvcnRlZDtcbiBcdHU2NCB4ZHBfZHJvcDtcbiBcdHU2NCB4ZHBfcGFzcztcbkBAIC0xNTEsNiAmIzQzOzE0OCw3IEBAIHN0cnVjdCBhcV9yaW5nX3Mge1xuIFx0dTE2IHRhaWxfc2l6ZTtcbiBcdHVuaW9uIGFxX3Jpbmdfc3RhdHNfcyBzdGF0cztcbiBcdGRtYV9hZGRyX3QgZHhfcmluZ19wYTtcbiYjNDM7XHRzdHJ1Y3QgcGFnZV9wb29sICpwZ19wb29sO1xuIFx0c3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZztcbiBcdGVudW0gYXRsX3JpbmdfdHlwZSByaW5nX3R5cGU7XG4gXHRzdHJ1Y3QgeGRwX3J4cV9pbmZvIHhkcF9yeHE7XG5AQCAtMjAyLDYgJiM0MzsyMDAsNyBAQCB2b2lkIGFxX3JpbmdfdXBkYXRlX3F1ZXVlX3N0YXRlKHN0cnVjdCBhcV9yaW5nX3MgKnJpbmcpO1xuIHZvaWQgYXFfcmluZ19xdWV1ZV93YWtlKHN0cnVjdCBhcV9yaW5nX3MgKnJpbmcpO1xuIHZvaWQgYXFfcmluZ19xdWV1ZV9zdG9wKHN0cnVjdCBhcV9yaW5nX3MgKnJpbmcpO1xuIGJvb2wgYXFfcmluZ190eF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKTtcbiYjNDM7dm9pZCBhcV9yaW5nX3R4X2RlaW5pdChzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKTtcbiBpbnQgYXFfeGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG51bV9mcmFtZXMsXG4gXHRcdHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMsIHUzMiBmbGFncyk7XG4gaW50IGFxX3JpbmdfcnhfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqc2VsZixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV92ZWMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3ZlYy5jXG5pbmRleCAyZjkwMzNjZWVkOGNlMy4uOGUxNTQwNWQ0OTQxOWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV92ZWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfdmVjLmNcbkBAIC0xNDYsMjUgJiM0MzsxNDYsMzIgQEAgaW50IGFxX3ZlY19yaW5nX2FsbG9jKHN0cnVjdCBhcV92ZWNfcyAqc2VsZiwgc3RydWN0IGFxX25pY19zICphcV9uaWMsXG4gXHRcdGFxX25pY19zZXRfdHhfcmluZyhhcV9uaWMsIGlkeF9yaW5nLCByaW5nKTtcbiBcbiBcdFx0cmluZyA9IFx1MDAyNnNlbGYtXHUwMDNlcmluZ1tpXVtBUV9WRUNfUlhfSURdO1xuJiM0MztcdFx0LyogUmVnaXN0ZXJpbmcgdGhlIE1FTV9UWVBFX1BBR0VfUE9PTCBtZW1vcnkgbW9kZWwgYmVsb3cgbmVlZHNcbiYjNDM7XHRcdCAqIHRoZSBwYWdlIHBvb2wgY3JlYXRlZCBieSBhcV9yaW5nX3J4X2FsbG9jKCksIHNvIHRoZSByaW5nIGlzXG4mIzQzO1x0XHQgKiBhbGxvY2F0ZWQgZmlyc3QuIElmIGEgcmVnaXN0cmF0aW9uIGZhaWxzLCB0aGUgcmluZyBoYXMgdG8gYmVcbiYjNDM7XHRcdCAqIGZyZWVkIGV4cGxpY2l0bHk6IHJ4X3JpbmdzIGlzIG5vdCBpbmNyZW1lbnRlZCB5ZXQsIHNvIHRoZVxuJiM0MztcdFx0ICogdW53aW5kIHRocm91Z2ggYXFfdmVjX3JpbmdfZnJlZSgpIHdvdWxkIG5vdCBjb3ZlciBpdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZXJyID0gYXFfcmluZ19yeF9hbGxvYyhyaW5nLCBhcV9uaWMsIGlkeF9yaW5nLCBhcV9uaWNfY2ZnKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gZXJyX2V4aXQ7XG4mIzQzO1xuIFx0XHRpZiAoeGRwX3J4cV9pbmZvX3JlZyhcdTAwMjZyaW5nLVx1MDAzZXhkcF9yeHEsXG4gXHRcdFx0XHQgICAgIGFxX25pYy1cdTAwM2VuZGV2LCBpZHgsXG4gXHRcdFx0XHQgICAgIHNlbGYtXHUwMDNlbmFwaS5uYXBpX2lkKSBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRhcV9yaW5nX2ZyZWUocmluZyk7XG4gXHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRnb3RvIGVycl9leGl0O1xuIFx0XHR9XG4gXHRcdGlmICh4ZHBfcnhxX2luZm9fcmVnX21lbV9tb2RlbChcdTAwMjZyaW5nLVx1MDAzZXhkcF9yeHEsXG4tXHRcdFx0XHRcdCAgICAgICBNRU1fVFlQRV9QQUdFX1NIQVJFRCwgTlVMTCkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBNRU1fVFlQRV9QQUdFX1BPT0wsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgcmluZy1cdTAwM2VwZ19wb29sKSBcdTAwM2MgMCkge1xuIFx0XHRcdHhkcF9yeHFfaW5mb191bnJlZyhcdTAwMjZyaW5nLVx1MDAzZXhkcF9yeHEpO1xuJiM0MztcdFx0XHRhcV9yaW5nX2ZyZWUocmluZyk7XG4gXHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRnb3RvIGVycl9leGl0O1xuIFx0XHR9XG4gXG4tXHRcdGVyciA9IGFxX3JpbmdfcnhfYWxsb2MocmluZywgYXFfbmljLCBpZHhfcmluZywgYXFfbmljX2NmZyk7XG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHR4ZHBfcnhxX2luZm9fdW5yZWcoXHUwMDI2cmluZy1cdTAwM2V4ZHBfcnhxKTtcbi1cdFx0XHRnb3RvIGVycl9leGl0O1xuLVx0XHR9XG4tXG4gXHRcdCYjNDM7JiM0MztzZWxmLVx1MDAzZXJ4X3JpbmdzO1xuIFx0fVxuIFxuQEAgLTI3NSw3ICYjNDM7MjgyLDcgQEAgdm9pZCBhcV92ZWNfZGVpbml0KHN0cnVjdCBhcV92ZWNfcyAqc2VsZilcbiBcbiBcdGZvciAoaSA9IDBVOyBzZWxmLVx1MDAzZXR4X3JpbmdzIFx1MDAzZSBpOyAmIzQzOyYjNDM7aSkge1xuIFx0XHRyaW5nID0gc2VsZi1cdTAwM2VyaW5nW2ldO1xuLVx0XHRhcV9yaW5nX3R4X2NsZWFuKFx1MDAyNnJpbmdbQVFfVkVDX1RYX0lEXSk7XG4mIzQzO1x0XHRhcV9yaW5nX3R4X2RlaW5pdChcdTAwMjZyaW5nW0FRX1ZFQ19UWF9JRF0pO1xuIFx0XHRhcV9yaW5nX3J4X2RlaW5pdChcdTAwMjZyaW5nW0FRX1ZFQ19SWF9JRF0pO1xuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgYVF1YW50aWEgQVF0aW9uIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvKS4gVGhpcyBpcyBhIGRyaXZlciBmb3IgYSBwaHlzaWNhbCBQQ0llIG5ldHdvcmsgY2FyZCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGExY2RiYTI4NGVmOGIxYTBkNTlmZTM5MTVkOWRhZmE3Nzg0OGRlMTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAyNSAxMzo0ODoyNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9LY29uZmlnCmluZGV4IGNlYzIwMThjODRhOWJjLi5jOGZiN2IzM2U1YjcxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9LY29uZmlnCkBAIC0yMCw2ICYjNDM7MjAsNyBAQCBjb25maWcgQVFUSU9OCiAJdHJpc3RhdGUgJiMzNDthUXVhbnRpYSBBUXRpb24odG0pIFN1cHBvcnQmIzM0OwogCWRlcGVuZHMgb24gUENJCiAJZGVwZW5kcyBvbiBNQUNTRUMgfHwgTUFDU0VDPW4KJiM0MzsJc2VsZWN0IFBBR0VfUE9PTAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgc3VwcG9ydCBmb3IgdGhlIGFRdWFudGlhIEFRdGlvbih0bSkgRXRoZXJuZXQgY2FyZC4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jCmluZGV4IDQyMGFmOTU4ZDQ4NjFhLi4wZjUxMjViZDIzMTU5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYwpAQCAtMTAwLDkgJiM0MzsxMDAsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFxX2V0aHRvb2xfcXVldWVfcnhfc3RhdF9uYW1lc1tdID0gewogCSYjMzQ7JXNRdWV1ZVslZF0gQWxsb2NGYWlscyYjMzQ7LAogCSYjMzQ7JXNRdWV1ZVslZF0gU2tiQWxsb2NGYWlscyYjMzQ7LAogCSYjMzQ7JXNRdWV1ZVslZF0gUG9sbHMmIzM0OywKLQkmIzM0OyVzUXVldWVbJWRdIFBhZ2VGbGlwcyYjMzQ7LAotCSYjMzQ7JXNRdWV1ZVslZF0gUGFnZVJldXNlcyYjMzQ7LAotCSYjMzQ7JXNRdWV1ZVslZF0gUGFnZUZyZWVzJiMzNDssCiAJJiMzNDslc1F1ZXVlWyVkXSBYZHBBYm9ydCYjMzQ7LAogCSYjMzQ7JXNRdWV1ZVslZF0gWGRwRHJvcCYjMzQ7LAogCSYjMzQ7JXNRdWV1ZVslZF0gWGRwUGFzcyYjMzQ7LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9wdHAuYwppbmRleCA1NThhYzkyMzdmNzU5ZS4uM2E0MGQ5ODZjZDY3ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3B0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3B0cC5jCkBAIC0xMyw2ICYjNDM7MTMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbGFzc2lmeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ludGVycnVwdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nsb2Nrc291cmNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC94ZHAuaCZndDsKIAogI2luY2x1ZGUgJiMzNDthcV9uaWMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2FxX3B0cC5oJiMzNDsKQEAgLTExOTIsMTIgJiM0MzsxMTkzLDIzIEBAIGludCBhcV9wdHBfcmluZ19hbGxvYyhzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYykKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9leGl0X3B0cF90eDsKIAomIzQzOwllcnIgPSB4ZHBfcnhxX2luZm9fcmVnKCZhbXA7YXFfcHRwLSZndDtwdHBfcngueGRwX3J4cSwgYXFfbmljLSZndDtuZGV2LAomIzQzOwkJCSAgICAgICByeF9yaW5nX2lkeCwgYXFfcHRwLSZndDtuYXBpLm5hcGlfaWQpOwomIzQzOwlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX2V4aXRfcHRwX3J4OwomIzQzOwomIzQzOwllcnIgPSB4ZHBfcnhxX2luZm9fcmVnX21lbV9tb2RlbCgmYW1wO2FxX3B0cC0mZ3Q7cHRwX3J4LnhkcF9yeHEsCiYjNDM7CQkJCQkgTUVNX1RZUEVfUEFHRV9QT09MLAomIzQzOwkJCQkJIGFxX3B0cC0mZ3Q7cHRwX3J4LnBnX3Bvb2wpOwomIzQzOwlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX2V4aXRfeGRwX3J4cTsKJiM0MzsKIAlpZiAoYXFfcHRwLSZndDthMV9wdHApIHsKIAkJZXJyID0gYXFfcmluZ19od3RzX3J4X2FsbG9jKCZhbXA7YXFfcHRwLSZndDtod3RzX3J4LCBhcV9uaWMsIFBUUF9IV1NUX1JJTkdfSURYLAogCQkJCQkgICAgYXFfbmljLSZndDthcV9uaWNfY2ZnLnJ4ZHMsCiAJCQkJCSAgICBhcV9uaWMtJmd0O2FxX25pY19jZmcuYXFfaHdfY2Fwcy0mZ3Q7cnhkX3NpemUpOwogCQlpZiAoZXJyKQotCQkJZ290byBlcnJfZXhpdF9wdHBfcng7CiYjNDM7CQkJZ290byBlcnJfZXhpdF94ZHBfcnhxOwogCX0KIAogCWVyciA9IGFxX3B0cF9za2JfcmluZ19pbml0KCZhbXA7YXFfcHRwLSZndDtza2JfcmluZywgYXFfbmljLSZndDthcV9uaWNfY2ZnLnJ4ZHMpOwpAQCAtMTIxNyw2ICYjNDM7MTIyOSw4IEBAIGludCBhcV9wdHBfcmluZ19hbGxvYyhzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYykKIGVycl9leGl0X2h3dHNfcng6CiAJaWYgKGFxX3B0cC0mZ3Q7YTFfcHRwKQogCQlhcV9yaW5nX2h3dHNfcnhfZnJlZSgmYW1wO2FxX3B0cC0mZ3Q7aHd0c19yeCk7CiYjNDM7ZXJyX2V4aXRfeGRwX3J4cToKJiM0MzsJeGRwX3J4cV9pbmZvX3VucmVnKCZhbXA7YXFfcHRwLSZndDtwdHBfcngueGRwX3J4cSk7CiBlcnJfZXhpdF9wdHBfcng6CiAJYXFfcmluZ19mcmVlKCZhbXA7YXFfcHRwLSZndDtwdHBfcngpOwogZXJyX2V4aXRfcHRwX3R4OgpAQCAtMTIzMyw2ICYjNDM7MTI0Nyw4IEBAIHZvaWQgYXFfcHRwX3JpbmdfZnJlZShzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYykKIAkJcmV0dXJuOwogCiAJYXFfcmluZ19mcmVlKCZhbXA7YXFfcHRwLSZndDtwdHBfdHgpOwomIzQzOwlpZiAoeGRwX3J4cV9pbmZvX2lzX3JlZygmYW1wO2FxX3B0cC0mZ3Q7cHRwX3J4LnhkcF9yeHEpKQomIzQzOwkJeGRwX3J4cV9pbmZvX3VucmVnKCZhbXA7YXFfcHRwLSZndDtwdHBfcngueGRwX3J4cSk7CiAJYXFfcmluZ19mcmVlKCZhbXA7YXFfcHRwLSZndDtwdHBfcngpOwogCWlmIChhcV9wdHAtJmd0O2ExX3B0cCkKIAkJYXFfcmluZ19od3RzX3J4X2ZyZWUoJmFtcDthcV9wdHAtJmd0O2h3dHNfcngpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jCmluZGV4IDhmZjA3ZGUyYmQ1MjQwLi45ZGQ4ODE3MTA1OTQyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuYwpAQCAtMTQsMTIwICYjNDM7MTQsMzcgQEAKICNpbmNsdWRlICYjMzQ7YXFfdmVjLmgmIzM0OwogI2luY2x1ZGUgJiMzNDthcV9tYWluLmgmIzM0OwogCiYjNDM7I2luY2x1ZGUgJmx0O25ldC9wYWdlX3Bvb2wvaGVscGVycy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC94ZHAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWx0ZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9icGZfdHJhY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGhlcmRldmljZS5oJmd0OwogCi1zdGF0aWMgdm9pZCBhcV9nZXRfcnhwYWdlc194ZHAoc3RydWN0IGFxX3JpbmdfYnVmZl9zICpidWZmLAotCQkJICAgICAgIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKQotewotCXN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNpbmZvOwotCWludCBpOwotCi0JaWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKSB7Ci0JCXNpbmZvID0geGRwX2dldF9zaGFyZWRfaW5mb19mcm9tX2J1ZmYoeGRwKTsKLQotCQlmb3IgKGkgPSAwOyBpICZsdDsgc2luZm8tJmd0O25yX2ZyYWdzOyBpJiM0MzsmIzQzOykgewotCQkJc2tiX2ZyYWdfdCAqZnJhZyA9ICZhbXA7c2luZm8tJmd0O2ZyYWdzW2ldOwotCi0JCQlwYWdlX3JlZl9pbmMoc2tiX2ZyYWdfcGFnZShmcmFnKSk7Ci0JCX0KLQl9Ci0JcGFnZV9yZWZfaW5jKGJ1ZmYtJmd0O3J4ZGF0YS5wYWdlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFxX2ZyZWVfcnhwYWdlKHN0cnVjdCBhcV9yeHBhZ2UgKnJ4cGFnZSwgc3RydWN0IGRldmljZSAqZGV2KQotewotCXVuc2lnbmVkIGludCBsZW4gPSBQQUdFX1NJWkUgJmx0OyZsdDsgcnhwYWdlLSZndDtvcmRlcjsKLQotCWRtYV91bm1hcF9wYWdlKGRldiwgcnhwYWdlLSZndDtkYWRkciwgbGVuLCBETUFfRlJPTV9ERVZJQ0UpOwotCi0JLyogRHJvcCB0aGUgcmVmIGZvciBiZWluZyBpbiB0aGUgcmluZy4gKi8KLQlfX2ZyZWVfcGFnZXMocnhwYWdlLSZndDtwYWdlLCByeHBhZ2UtJmd0O29yZGVyKTsKLQlyeHBhZ2UtJmd0O3BhZ2UgPSBOVUxMOwotfQotCi1zdGF0aWMgaW50IGFxX2FsbG9jX3J4cGFnZXMoc3RydWN0IGFxX3J4cGFnZSAqcnhwYWdlLCBzdHJ1Y3QgYXFfcmluZ19zICpyeF9yaW5nKQomIzQzO3N0YXRpYyBpbnQgYXFfZ2V0X3J4cGFnZXMoc3RydWN0IGFxX3JpbmdfcyAqc2VsZiwgc3RydWN0IGFxX3JpbmdfYnVmZl9zICpyeGJ1ZikKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhcV9uaWNfZ2V0X2RldihyeF9yaW5nLSZndDthcV9uaWMpOwotCXVuc2lnbmVkIGludCBvcmRlciA9IHJ4X3JpbmctJmd0O3BhZ2Vfb3JkZXI7CiYjNDM7CXVuc2lnbmVkIGludCBzaXplID0gc2VsZi0mZ3Q7cGFnZV9vZmZzZXQgJiM0Mzsgc2VsZi0mZ3Q7ZnJhbWVfbWF4ICYjNDM7CiYjNDM7CQkJICAgIHNlbGYtJmd0O3RhaWxfc2l6ZTsKJiM0MzsJdW5zaWduZWQgaW50IHBnX29mZjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlpbnQgcmV0ID0gLUVOT01FTTsKLQlkbWFfYWRkcl90IGRhZGRyOwotCi0JcGFnZSA9IGRldl9hbGxvY19wYWdlcyhvcmRlcik7Ci0JaWYgKHVubGlrZWx5KCFwYWdlKSkKLQkJZ290byBlcnJfZXhpdDsKLQotCWRhZGRyID0gZG1hX21hcF9wYWdlKGRldiwgcGFnZSwgMCwgUEFHRV9TSVpFICZsdDsmbHQ7IG9yZGVyLAotCQkJICAgICBETUFfRlJPTV9ERVZJQ0UpOwotCi0JaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgZGFkZHIpKSkKLQkJZ290byBmcmVlX3BhZ2U7Ci0KLQlyeHBhZ2UtJmd0O3BhZ2UgPSBwYWdlOwotCXJ4cGFnZS0mZ3Q7ZGFkZHIgPSBkYWRkcjsKLQlyeHBhZ2UtJmd0O29yZGVyID0gb3JkZXI7Ci0JcnhwYWdlLSZndDtwZ19vZmYgPSByeF9yaW5nLSZndDtwYWdlX29mZnNldDsKLQotCXJldHVybiAwOwotCi1mcmVlX3BhZ2U6Ci0JX19mcmVlX3BhZ2VzKHBhZ2UsIG9yZGVyKTsKIAotZXJyX2V4aXQ6Ci0JcmV0dXJuIHJldDsKLX0KJiM0MzsJLyogQnVmZmVycyB3aG9zZSBwYWdlIHdhcyBub3QgcGFzc2VkIHVwIHRoZSBzdGFjayBhcmUgcmVwb3N0ZWQKJiM0MzsJICogd2l0aCB0aGUgZGF0YSB0aGV5IGFscmVhZHkgY2FycnkgZGlzY2FyZGVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJ4YnVmLSZndDtyeGRhdGEucGFnZSkKJiM0MzsJCXJldHVybiAwOwogCi1zdGF0aWMgaW50IGFxX2dldF9yeHBhZ2VzKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsIHN0cnVjdCBhcV9yaW5nX2J1ZmZfcyAqcnhidWYpCi17Ci0JdW5zaWduZWQgaW50IG9yZGVyID0gc2VsZi0mZ3Q7cGFnZV9vcmRlcjsKLQl1MTYgcGFnZV9vZmZzZXQgPSBzZWxmLSZndDtwYWdlX29mZnNldDsKLQl1MTYgZnJhbWVfbWF4ID0gc2VsZi0mZ3Q7ZnJhbWVfbWF4OwotCXUxNiB0YWlsX3NpemUgPSBzZWxmLSZndDt0YWlsX3NpemU7Ci0JaW50IHJldDsKLQotCWlmIChyeGJ1Zi0mZ3Q7cnhkYXRhLnBhZ2UpIHsKLQkJLyogT25lIG1lYW5zIHJpbmcgaXMgdGhlIG9ubHkgdXNlciBhbmQgY2FuIHJldXNlICovCi0JCWlmIChwYWdlX3JlZl9jb3VudChyeGJ1Zi0mZ3Q7cnhkYXRhLnBhZ2UpICZndDsgMSkgewotCQkJLyogVHJ5IHJldXNlIGJ1ZmZlciAqLwotCQkJcnhidWYtJmd0O3J4ZGF0YS5wZ19vZmYgJiM0Mzs9IGZyYW1lX21heCAmIzQzOyBwYWdlX29mZnNldCAmIzQzOwotCQkJCQkJdGFpbF9zaXplOwotCQkJaWYgKHJ4YnVmLSZndDtyeGRhdGEucGdfb2ZmICYjNDM7IGZyYW1lX21heCAmIzQzOyB0YWlsX3NpemUgJmx0Oz0KLQkJCSAgICAoUEFHRV9TSVpFICZsdDsmbHQ7IG9yZGVyKSkgewotCQkJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtzZWxmLSZndDtzdGF0cy5yeC5zeW5jcCk7Ci0JCQkJc2VsZi0mZ3Q7c3RhdHMucngucGdfZmxpcHMmIzQzOyYjNDM7OwotCQkJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7c2VsZi0mZ3Q7c3RhdHMucnguc3luY3ApOwotCi0JCQl9IGVsc2UgewotCQkJCS8qIEJ1ZmZlciBleGhhdXN0ZWQuIFdlIGhhdmUgb3RoZXIgdXNlcnMgYW5kCi0JCQkJICogc2hvdWxkIHJlbGVhc2UgdGhpcyBwYWdlIGFuZCByZWFsbG9jCi0JCQkJICovCi0JCQkJYXFfZnJlZV9yeHBhZ2UoJmFtcDtyeGJ1Zi0mZ3Q7cnhkYXRhLAotCQkJCQkgICAgICAgYXFfbmljX2dldF9kZXYoc2VsZi0mZ3Q7YXFfbmljKSk7Ci0JCQkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3NlbGYtJmd0O3N0YXRzLnJ4LnN5bmNwKTsKLQkJCQlzZWxmLSZndDtzdGF0cy5yeC5wZ19sb3N0cyYjNDM7JiM0Mzs7Ci0JCQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtzZWxmLSZndDtzdGF0cy5yeC5zeW5jcCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlyeGJ1Zi0mZ3Q7cnhkYXRhLnBnX29mZiA9IHBhZ2Vfb2Zmc2V0OwotCQkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3NlbGYtJmd0O3N0YXRzLnJ4LnN5bmNwKTsKLQkJCXNlbGYtJmd0O3N0YXRzLnJ4LnBnX3JldXNlcyYjNDM7JiM0Mzs7Ci0JCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3NlbGYtJmd0O3N0YXRzLnJ4LnN5bmNwKTsKLQkJfQomIzQzOwlwYWdlID0gcGFnZV9wb29sX2Rldl9hbGxvY19mcmFnKHNlbGYtJmd0O3BnX3Bvb2wsICZhbXA7cGdfb2ZmLCBzaXplKTsKJiM0MzsJaWYgKHVubGlrZWx5KCFwYWdlKSkgewomIzQzOwkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3NlbGYtJmd0O3N0YXRzLnJ4LnN5bmNwKTsKJiM0MzsJCXNlbGYtJmd0O3N0YXRzLnJ4LmFsbG9jX2ZhaWxzJiM0MzsmIzQzOzsKJiM0MzsJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7c2VsZi0mZ3Q7c3RhdHMucnguc3luY3ApOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaWYgKCFyeGJ1Zi0mZ3Q7cnhkYXRhLnBhZ2UpIHsKLQkJcmV0ID0gYXFfYWxsb2NfcnhwYWdlcygmYW1wO3J4YnVmLSZndDtyeGRhdGEsIHNlbGYpOwotCQlpZiAocmV0KSB7Ci0JCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7c2VsZi0mZ3Q7c3RhdHMucnguc3luY3ApOwotCQkJc2VsZi0mZ3Q7c3RhdHMucnguYWxsb2NfZmFpbHMmIzQzOyYjNDM7OwotCQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtzZWxmLSZndDtzdGF0cy5yeC5zeW5jcCk7Ci0JCX0KLQkJcmV0dXJuIHJldDsKLQl9CiYjNDM7CXJ4YnVmLSZndDtyeGRhdGEucGFnZSA9IHBhZ2U7CiYjNDM7CXJ4YnVmLSZndDtyeGRhdGEuZGFkZHIgPSBwYWdlX3Bvb2xfZ2V0X2RtYV9hZGRyKHBhZ2UpOwomIzQzOwlyeGJ1Zi0mZ3Q7cnhkYXRhLnBnX29mZiA9IHBnX29mZiAmIzQzOyBzZWxmLSZndDtwYWdlX29mZnNldDsKIAogCXJldHVybiAwOwogfQpAQCAtMTc5LDYgJiM0Mzs5NiwxNSBAQCBpbnQgYXFfcmluZ19yeF9hbGxvYyhzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLAogCQkgICAgIHVuc2lnbmVkIGludCBpZHgsCiAJCSAgICAgc3RydWN0IGFxX25pY19jZmdfcyAqYXFfbmljX2NmZykKIHsKJiM0MzsJc3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMgcHBfcGFyYW1zID0gewomIzQzOwkJLmZsYWdzID0gUFBfRkxBR19ETUFfTUFQIHwgUFBfRkxBR19ETUFfU1lOQ19ERVYsCiYjNDM7CQkucG9vbF9zaXplID0gYXFfbmljX2NmZy0mZ3Q7cnhkcywKJiM0MzsJCS5uaWQgPSBOVU1BX05PX05PREUsCiYjNDM7CQkuZGV2ID0gYXFfbmljX2dldF9kZXYoYXFfbmljKSwKJiM0MzsJCS5kbWFfZGlyID0gRE1BX0ZST01fREVWSUNFLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgcGFnZV9wb29sICpwb29sOwomIzQzOwogCXNlbGYtJmd0O2FxX25pYyA9IGFxX25pYzsKIAlzZWxmLSZndDtpZHggPSBpZHg7CiAJc2VsZi0mZ3Q7c2l6ZSA9IGFxX25pY19jZmctJmd0O3J4ZHM7CkBAIC0yMDAsNiAmIzQzOzEyNiwxOCBAQCBpbnQgYXFfcmluZ19yeF9hbGxvYyhzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLAogCQlzZWxmLSZndDt0YWlsX3NpemUgPSAwOwogCX0KIAomIzQzOwlwcF9wYXJhbXMub3JkZXIgPSBzZWxmLSZndDtwYWdlX29yZGVyOwomIzQzOwlwcF9wYXJhbXMubWF4X2xlbiA9IFBBR0VfU0laRSAmbHQ7Jmx0OyBzZWxmLSZndDtwYWdlX29yZGVyOwomIzQzOwomIzQzOwlwb29sID0gcGFnZV9wb29sX2NyZWF0ZSgmYW1wO3BwX3BhcmFtcyk7CiYjNDM7CWlmIChJU19FUlIocG9vbCkpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihwb29sKTsKJiM0MzsKJiM0MzsJc2VsZi0mZ3Q7cGdfcG9vbCA9IHBvb2w7CiYjNDM7CiYjNDM7CS8qIE9uIGZhaWx1cmUgYXFfcmluZ19hbGxvYygpIGNhbGxzIGFxX3JpbmdfZnJlZSgpLCB3aGljaCBhbHNvCiYjNDM7CSAqIGRlc3Ryb3lzIHRoZSBwYWdlIHBvb2wuCiYjNDM7CSAqLwogCXJldHVybiBhcV9yaW5nX2FsbG9jKHNlbGYsIGFxX25pYyk7CiB9CiAKQEAgLTM0Niw3ICYjNDM7Mjg0LDExIEBAIGJvb2wgYXFfcmluZ190eF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKQogCQkJJiM0MzsmIzQzO3NlbGYtJmd0O3N0YXRzLnR4LnBhY2tldHM7CiAJCQlzZWxmLSZndDtzdGF0cy50eC5ieXRlcyAmIzQzOz0geGRwX2dldF9mcmFtZV9sZW4oYnVmZi0mZ3Q7eGRwZik7CiAJCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3NlbGYtJmd0O3N0YXRzLnR4LnN5bmNwKTsKLQkJCXhkcF9yZXR1cm5fZnJhbWVfcnhfbmFwaShidWZmLSZndDt4ZHBmKTsKJiM0MzsJCQkvKiBGcmFtZXMgcXVldWVkIHZpYSBuZG9feGRwX3htaXQoKSBtYXkgY29tZSBmcm9tIGEKJiM0MzsJCQkgKiBwYWdlIHBvb2wgb3duZWQgYnkgYW5vdGhlciBOQVBJIGNvbnRleHQ6IG5vIGRpcmVjdAomIzQzOwkJCSAqIHJlY3ljbGluZy4KJiM0MzsJCQkgKi8KJiM0MzsJCQl4ZHBfcmV0dXJuX2ZyYW1lKGJ1ZmYtJmd0O3hkcGYpOwogCQl9CiAKIG91dDoKQEAgLTM2MCw2ICYjNDM7MzAyLDM1IEBAIGJvb2wgYXFfcmluZ190eF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKQogCXJldHVybiAhIWJ1ZGdldDsKIH0KIAomIzQzO3ZvaWQgYXFfcmluZ190eF9kZWluaXQoc3RydWN0IGFxX3JpbmdfcyAqc2VsZikKJiM0Mzt7CiYjNDM7CWlmICghc2VsZikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yICg7IHNlbGYtJmd0O3N3X2hlYWQgIT0gc2VsZi0mZ3Q7c3dfdGFpbDsKJiM0MzsJCXNlbGYtJmd0O3N3X2hlYWQgPSBhcV9yaW5nX25leHRfZHgoc2VsZiwgc2VsZi0mZ3Q7c3dfaGVhZCkpIHsKJiM0MzsJCXN0cnVjdCBhcV9yaW5nX2J1ZmZfcyAqYnVmZiA9ICZhbXA7c2VsZi0mZ3Q7YnVmZl9yaW5nW3NlbGYtJmd0O3N3X2hlYWRdOwomIzQzOwkJc3RydWN0IGRldmljZSAqbmRldiA9IGFxX25pY19nZXRfZGV2KHNlbGYtJmd0O2FxX25pYyk7CiYjNDM7CiYjNDM7CQlpZiAoYnVmZi0mZ3Q7aXNfbWFwcGVkKSB7CiYjNDM7CQkJaWYgKGJ1ZmYtJmd0O2lzX3NvcCkgewomIzQzOwkJCQlkbWFfdW5tYXBfc2luZ2xlKG5kZXYsIGJ1ZmYtJmd0O3BhLCBidWZmLSZndDtsZW4sCiYjNDM7CQkJCQkJIERNQV9UT19ERVZJQ0UpOwomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCWRtYV91bm1hcF9wYWdlKG5kZXYsIGJ1ZmYtJmd0O3BhLCBidWZmLSZndDtsZW4sCiYjNDM7CQkJCQkgICAgICAgRE1BX1RPX0RFVklDRSk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKGJ1ZmYtJmd0O2lzX2VvcCkgewomIzQzOwkJCWlmIChidWZmLSZndDtza2IpCiYjNDM7CQkJCWRldl9rZnJlZV9za2JfYW55KGJ1ZmYtJmd0O3NrYik7CiYjNDM7CQkJZWxzZSBpZiAoYnVmZi0mZ3Q7eGRwZikKJiM0MzsJCQkJeGRwX3JldHVybl9mcmFtZShidWZmLSZndDt4ZHBmKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGFxX3J4X2NoZWNrc3VtKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsCiAJCQkgICBzdHJ1Y3QgYXFfcmluZ19idWZmX3MgKmJ1ZmYsCiAJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtNDA4LDIyICYjNDM7Mzc5LDE1IEBAIGludCBhcV94ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtX2ZyYW1lcywKIH0KIAogc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLAotCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQlzdHJ1Y3QgYXFfcmluZ19idWZmX3MgKmJ1ZmYpCiYjNDM7CQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB4ZHBfZnJhbWUgKnhkcGY7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCXhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7CiAJaWYgKHVubGlrZWx5KCF4ZHBmKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlza2IgPSB4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoeGRwZiwgZGV2KTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlhcV9nZXRfcnhwYWdlc194ZHAoYnVmZiwgeGRwKTsKLQlyZXR1cm4gc2tiOwomIzQzOwlyZXR1cm4geGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHhkcGYsIGRldik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX3J1bl9wcm9nKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLApAQCAtNDQ0LDggJiM0Mzs0MDgsMTYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsCiAJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtyeF9yaW5nLSZndDtzdGF0cy5yeC5zeW5jcCk7CiAKIAlwcm9nID0gUkVBRF9PTkNFKHJ4X3JpbmctJmd0O3hkcF9wcm9nKTsKLQlpZiAoIXByb2cpCi0JCXJldHVybiBhcV94ZHBfYnVpbGRfc2tiKHhkcCwgYXFfbmljLSZndDtuZGV2LCBidWZmKTsKJiM0MzsJaWYgKCFwcm9nKSB7CiYjNDM7CQlza2IgPSBhcV94ZHBfYnVpbGRfc2tiKHhkcCwgYXFfbmljLSZndDtuZGV2KTsKJiM0MzsJCS8qIFRoZSByaW5nIGhhcyBhbHJlYWR5IGhhbmRlZCBpdHMgcGFnZSBwb29sIHJlZmVyZW5jZSB0byB0aGUKJiM0MzsJCSAqIHhkcF9idWZmLCBzbyBpZiB0aGUgc2tiIGNvdWxkIG5vdCBiZSBidWlsdCB0aGUgYnVmZmVyIG11c3QKJiM0MzsJCSAqIGJlIHJldHVybmVkIHRvIHRoZSBwb29sIGhlcmUgb3IgaXRzIGZyYWdtZW50cyB3b3VsZCBsZWFrLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIXNrYikKJiM0MzsJCQl4ZHBfcmV0dXJuX2J1ZmYoeGRwKTsKJiM0MzsJCXJldHVybiBza2I7CiYjNDM7CX0KIAogCXByZWZldGNodyh4ZHAtJmd0O2RhdGFfaGFyZF9zdGFydCk7IC8qIHhkcF9mcmFtZSB3cml0ZSAqLwogCkBAIC00NTYsNyAmIzQzOzQyOCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX3J1bl9wcm9nKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLAogCWFjdCA9IGJwZl9wcm9nX3J1bl94ZHAocHJvZywgeGRwKTsKIAlzd2l0Y2ggKGFjdCkgewogCWNhc2UgWERQX1BBU1M6Ci0JCXNrYiA9IGFxX3hkcF9idWlsZF9za2IoeGRwLCBhcV9uaWMtJmd0O25kZXYsIGJ1ZmYpOwomIzQzOwkJc2tiID0gYXFfeGRwX2J1aWxkX3NrYih4ZHAsIGFxX25pYy0mZ3Q7bmRldik7CiAJCWlmICghc2tiKQogCQkJZ290byBvdXRfYWJvcnRlZDsKIAkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3J4X3JpbmctJmd0O3N0YXRzLnJ4LnN5bmNwKTsKQEAgLTQ3NCw3ICYjNDM7NDQ2LDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsCiAJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtyeF9yaW5nLSZndDtzdGF0cy5yeC5zeW5jcCk7CiAJCSYjNDM7JiM0MztyeF9yaW5nLSZndDtzdGF0cy5yeC54ZHBfdHg7CiAJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7cnhfcmluZy0mZ3Q7c3RhdHMucnguc3luY3ApOwotCQlhcV9nZXRfcnhwYWdlc194ZHAoYnVmZiwgeGRwKTsKIAkJYnJlYWs7CiAJY2FzZSBYRFBfUkVESVJFQ1Q6CiAJCWlmICh4ZHBfZG9fcmVkaXJlY3QoYXFfbmljLSZndDtuZGV2LCB4ZHAsIHByb2cpICZsdDsgMCkKQEAgLTQ4Myw3ICYjNDM7NDU0LDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsCiAJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtyeF9yaW5nLSZndDtzdGF0cy5yeC5zeW5jcCk7CiAJCSYjNDM7JiM0MztyeF9yaW5nLSZndDtzdGF0cy5yeC54ZHBfcmVkaXJlY3Q7CiAJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7cnhfcmluZy0mZ3Q7c3RhdHMucnguc3luY3ApOwotCQlhcV9nZXRfcnhwYWdlc194ZHAoYnVmZiwgeGRwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZmFsbHRocm91Z2g7CkBAIC00OTQsMTEgJiM0Mzs0NjQsMTMgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsCiAJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7cnhfcmluZy0mZ3Q7c3RhdHMucnguc3luY3ApOwogCQl0cmFjZV94ZHBfZXhjZXB0aW9uKGFxX25pYy0mZ3Q7bmRldiwgcHJvZywgYWN0KTsKIAkJYnBmX3dhcm5faW52YWxpZF94ZHBfYWN0aW9uKGFxX25pYy0mZ3Q7bmRldiwgcHJvZywgYWN0KTsKJiM0MzsJCXhkcF9yZXR1cm5fYnVmZih4ZHApOwogCQlicmVhazsKIAljYXNlIFhEUF9EUk9QOgogCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7cnhfcmluZy0mZ3Q7c3RhdHMucnguc3luY3ApOwogCQkmIzQzOyYjNDM7cnhfcmluZy0mZ3Q7c3RhdHMucngueGRwX2Ryb3A7CiAJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7cnhfcmluZy0mZ3Q7c3RhdHMucnguc3luY3ApOwomIzQzOwkJeGRwX3JldHVybl9idWZmKHhkcCk7CiAJCWJyZWFrOwogCX0KIApAQCAtNTE3LDggJiM0Mzs0ODksMTEgQEAgc3RhdGljIGJvb2wgYXFfYWRkX3J4X2ZyYWdtZW50KHN0cnVjdCBkZXZpY2UgKmRldiwKIAlkbyB7CiAJCXNrYl9mcmFnX3QgKmZyYWc7CiAKLQkJaWYgKHVubGlrZWx5KHNpbmZvLSZndDtucl9mcmFncyAmZ3Q7PSBNQVhfU0tCX0ZSQUdTKSkKJiM0MzsJCWlmICh1bmxpa2VseShzaW5mby0mZ3Q7bnJfZnJhZ3MgJmd0Oz0gTUFYX1NLQl9GUkFHUykpIHsKJiM0MzsJCQkvKiBBdHRhY2hlZCBmcmFncyBtdXN0IHJlYWNoIHhkcF9yZXR1cm5fYnVmZigpICovCiYjNDM7CQkJeGRwX2J1ZmZfc2V0X2ZyYWdzX2ZsYWcoeGRwKTsKIAkJCXJldHVybiB0cnVlOwomIzQzOwkJfQogCiAJCWZyYWcgPSAmYW1wO3NpbmZvLSZndDtmcmFnc1tzaW5mby0mZ3Q7bnJfZnJhZ3MmIzQzOyYjNDM7XTsKIAkJYnVmZl8gPSAmYW1wO3JpbmctJmd0O2J1ZmZfcmluZ1tidWZmXy0mZ3Q7bmV4dF07CkBAIC01NDIsNiAmIzQzOzUxNywxMSBAQCBzdGF0aWMgYm9vbCBhcV9hZGRfcnhfZnJhZ21lbnQoc3RydWN0IGRldmljZSAqZGV2LAogCQlpZiAocGFnZV9pc19wZm1lbWFsbG9jKGJ1ZmZfLSZndDtyeGRhdGEucGFnZSkpCiAJCQl4ZHBfYnVmZl9zZXRfZnJhZ19wZm1lbWFsbG9jKHhkcCk7CiAKJiM0MzsJCS8qIFRoZSBmcmFnJiMzOTtzIHBhZ2UgcG9vbCByZWZlcmVuY2UgaXMgb3duZWQgYnkgdGhlIHhkcF9idWZmCiYjNDM7CQkgKiBmcm9tIG5vdyBvbi4KJiM0MzsJCSAqLwomIzQzOwkJYnVmZl8tJmd0O3J4ZGF0YS5wYWdlID0gTlVMTDsKJiM0MzsKIAl9IHdoaWxlICghYnVmZl8tJmd0O2lzX2VvcCk7CiAKIAl4ZHBfYnVmZl9zZXRfZnJhZ3NfZmxhZyh4ZHApOwpAQCAtNjQ1LDYgJiM0Mzs2MjUsNyBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ19yeF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBlcnJfZXhpdDsKIAkJfQomIzQzOwkJc2tiX21hcmtfZm9yX3JlY3ljbGUoc2tiKTsKIAkJaWYgKGlzX3B0cF9yaW5nKQogCQkJYnVmZi0mZ3Q7bGVuIC09CiAJCQkJYXFfcHRwX2V4dHJhY3RfdHMoc2VsZi0mZ3Q7YXFfbmljLCBza2JfaHd0c3RhbXBzKHNrYiksCkBAIC02NjUsNyAmIzQzOzY0Niw3IEBAIHN0YXRpYyBpbnQgX19hcV9yaW5nX3J4X2NsZWFuKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAkJCQkJYnVmZi0mZ3Q7cnhkYXRhLnBnX29mZiAmIzQzOyBoZHJfbGVuLAogCQkJCQlidWZmLSZndDtsZW4gLSBoZHJfbGVuLAogCQkJCQlzZWxmLSZndDtmcmFtZV9tYXgpOwotCQkJcGFnZV9yZWZfaW5jKGJ1ZmYtJmd0O3J4ZGF0YS5wYWdlKTsKJiM0MzsJCQlidWZmLSZndDtyeGRhdGEucGFnZSA9IE5VTEw7CiAJCX0KIAogCQlpZiAoIWJ1ZmYtJmd0O2lzX2VvcCkgewpAQCAtNjg0LDcgJiM0Mzs2NjUsNyBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ19yeF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQkJCQlidWZmXy0mZ3Q7cnhkYXRhLnBnX29mZiwKIAkJCQkJCWJ1ZmZfLSZndDtsZW4sCiAJCQkJCQlzZWxmLSZndDtmcmFtZV9tYXgpOwotCQkJCXBhZ2VfcmVmX2luYyhidWZmXy0mZ3Q7cnhkYXRhLnBhZ2UpOwomIzQzOwkJCQlidWZmXy0mZ3Q7cnhkYXRhLnBhZ2UgPSBOVUxMOwogCQkJCWJ1ZmZfLSZndDtpc19jbGVhbmVkID0gMTsKIAogCQkJCWJ1ZmYtJmd0O2lzX2lwX2NzbyAmYW1wOz0gYnVmZl8tJmd0O2lzX2lwX2NzbzsKQEAgLTgyMiw2ICYjNDM7ODAzLDExIEBAIHN0YXRpYyBpbnQgX19hcV9yaW5nX3hkcF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpyeF9yaW5nLAogCQl4ZHBfaW5pdF9idWZmKCZhbXA7eGRwLCBmcmFtZV9zeiwgJmFtcDtyeF9yaW5nLSZndDt4ZHBfcnhxKTsKIAkJeGRwX3ByZXBhcmVfYnVmZigmYW1wO3hkcCwgaGFyZF9zdGFydCwgcnhfcmluZy0mZ3Q7cGFnZV9vZmZzZXQsCiAJCQkJIGJ1ZmYtJmd0O2xlbiwgZmFsc2UpOwomIzQzOwkJLyogVGhlIHhkcF9idWZmIG93bnMgdGhlIGJ1ZmZlciYjMzk7cyBwYWdlIHBvb2wgcmVmZXJlbmNlIGZyb20KJiM0MzsJCSAqIGhlcmUgb247IGl0IGNvbWVzIGJhY2sgdGhyb3VnaCB0aGUgTUVNX1RZUEVfUEFHRV9QT09MCiYjNDM7CQkgKiBtZW1vcnkgbW9kZWwgb24gZXZlcnkgWERQIHZlcmRpY3QuCiYjNDM7CQkgKi8KJiM0MzsJCWJ1ZmYtJmd0O3J4ZGF0YS5wYWdlID0gTlVMTDsKIAkJaWYgKCFidWZmLSZndDtpc19lb3ApIHsKIAkJCWlmIChhcV9hZGRfcnhfZnJhZ21lbnQoZGV2LCByeF9yaW5nLCBidWZmLCAmYW1wO3hkcCkpIHsKIAkJCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7cnhfcmluZy0mZ3Q7c3RhdHMucnguc3luY3ApOwpAQCAtODI5LDYgJiM0Mzs4MTUsNyBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ194ZHBfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqcnhfcmluZywKIAkJCQlyeF9yaW5nLSZndDtzdGF0cy5yeC5ieXRlcyAmIzQzOz0geGRwX2dldF9idWZmX2xlbigmYW1wO3hkcCk7CiAJCQkJJiM0MzsmIzQzO3J4X3JpbmctJmd0O3N0YXRzLnJ4LnhkcF9hYm9ydGVkOwogCQkJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7cnhfcmluZy0mZ3Q7c3RhdHMucnguc3luY3ApOwomIzQzOwkJCQl4ZHBfcmV0dXJuX2J1ZmYoJmFtcDt4ZHApOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQl9CkBAIC05MjEsMTUgJiM0Mzs5MDgsMzEgQEAgaW50IGFxX3JpbmdfcnhfZmlsbChzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKQogCiB2b2lkIGFxX3JpbmdfcnhfZGVpbml0KHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYpCiB7Ci0JaWYgKCFzZWxmKQomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKCFzZWxmIHx8ICFzZWxmLSZndDtidWZmX3JpbmcpCiAJCXJldHVybjsKIAotCWZvciAoOyBzZWxmLSZndDtzd19oZWFkICE9IHNlbGYtJmd0O3N3X3RhaWw7Ci0JCXNlbGYtJmd0O3N3X2hlYWQgPSBhcV9yaW5nX25leHRfZHgoc2VsZiwgc2VsZi0mZ3Q7c3dfaGVhZCkpIHsKLQkJc3RydWN0IGFxX3JpbmdfYnVmZl9zICpidWZmID0gJmFtcDtzZWxmLSZndDtidWZmX3Jpbmdbc2VsZi0mZ3Q7c3dfaGVhZF07CiYjNDM7CS8qIFJlbGVhc2UgZXZlcnkgcGFnZSBzdGlsbCBvd25lZCBieSB0aGUgcmluZy4KJiM0MzsJICoKJiM0MzsJICogV2Fsa2luZyBbc3dfaGVhZCwgc3dfdGFpbCkgaXMgbm90IGVub3VnaDogcmVmaWxsIGlzIGJhdGNoZWQKJiM0MzsJICogKGFxX3JpbmdfcnhfZmlsbCgpIHdhaXRzIGZvciBBUV9DRkdfUlhfUkVGSUxMX1RIUkVTIGZyZWUgc2xvdHMpLAomIzQzOwkgKiBzbyBzbG90cyB0aGF0IHdlcmUgY2xlYW5lZCBidXQgbm90IHlldCByZXBvc3RlZCBhY2N1bXVsYXRlIGluIHRoZQomIzQzOwkgKiBbc3dfdGFpbCwgc3dfaGVhZCkgZ2FwLCBhbmQgdGhleSBrZWVwIHRoZWlyIHBhZ2UgZm9yIHJldXNlLiBXYWxrCiYjNDM7CSAqIHRoZSB3aG9sZSByaW5nIGFuZCByZWxlYXNlIHdoYXRldmVyIGlzIGxlZnQuCiYjNDM7CSAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgc2VsZi0mZ3Q7c2l6ZTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBhcV9yaW5nX2J1ZmZfcyAqYnVmZiA9ICZhbXA7c2VsZi0mZ3Q7YnVmZl9yaW5nW2ldOwomIzQzOwomIzQzOwkJaWYgKCFidWZmLSZndDtyeGRhdGEucGFnZSkKJiM0MzsJCQljb250aW51ZTsKIAotCQlhcV9mcmVlX3J4cGFnZSgmYW1wO2J1ZmYtJmd0O3J4ZGF0YSwgYXFfbmljX2dldF9kZXYoc2VsZi0mZ3Q7YXFfbmljKSk7CiYjNDM7CQlwYWdlX3Bvb2xfcHV0X2Z1bGxfcGFnZShzZWxmLSZndDtwZ19wb29sLCBidWZmLSZndDtyeGRhdGEucGFnZSwKJiM0MzsJCQkJCWZhbHNlKTsKJiM0MzsJCWJ1ZmYtJmd0O3J4ZGF0YS5wYWdlID0gTlVMTDsKIAl9CiYjNDM7CiYjNDM7CXNlbGYtJmd0O3N3X2hlYWQgPSBzZWxmLSZndDtzd190YWlsOwogfQogCiB2b2lkIGFxX3JpbmdfZnJlZShzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKQpAQCAtOTQwLDYgJiM0Mzs5NDMsMTEgQEAgdm9pZCBhcV9yaW5nX2ZyZWUoc3RydWN0IGFxX3JpbmdfcyAqc2VsZikKIAlrZnJlZShzZWxmLSZndDtidWZmX3JpbmcpOwogCXNlbGYtJmd0O2J1ZmZfcmluZyA9IE5VTEw7CiAKJiM0MzsJaWYgKHNlbGYtJmd0O3BnX3Bvb2wpIHsKJiM0MzsJCXBhZ2VfcG9vbF9kZXN0cm95KHNlbGYtJmd0O3BnX3Bvb2wpOwomIzQzOwkJc2VsZi0mZ3Q7cGdfcG9vbCA9IE5VTEw7CiYjNDM7CX0KJiM0MzsKIAlpZiAoc2VsZi0mZ3Q7ZHhfcmluZykgewogCQlkbWFfZnJlZV9jb2hlcmVudChhcV9uaWNfZ2V0X2RldihzZWxmLSZndDthcV9uaWMpLAogCQkJCSAgc2VsZi0mZ3Q7c2l6ZSAqIHNlbGYtJmd0O2R4X3NpemUsIHNlbGYtJmd0O2R4X3JpbmcsCkBAIC05NzgsOSAmIzQzOzk4Niw2IEBAIHVuc2lnbmVkIGludCBhcV9yaW5nX2ZpbGxfc3RhdHNfZGF0YShzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLCB1NjQgKmRhdGEpCiAJCQlkYXRhWyYjNDM7JiM0Mztjb3VudF0gPSBzZWxmLSZndDtzdGF0cy5yeC5hbGxvY19mYWlsczsKIAkJCWRhdGFbJiM0MzsmIzQzO2NvdW50XSA9IHNlbGYtJmd0O3N0YXRzLnJ4LnNrYl9hbGxvY19mYWlsczsKIAkJCWRhdGFbJiM0MzsmIzQzO2NvdW50XSA9IHNlbGYtJmd0O3N0YXRzLnJ4LnBvbGxzOwotCQkJZGF0YVsmIzQzOyYjNDM7Y291bnRdID0gc2VsZi0mZ3Q7c3RhdHMucngucGdfZmxpcHM7Ci0JCQlkYXRhWyYjNDM7JiM0Mztjb3VudF0gPSBzZWxmLSZndDtzdGF0cy5yeC5wZ19yZXVzZXM7Ci0JCQlkYXRhWyYjNDM7JiM0Mztjb3VudF0gPSBzZWxmLSZndDtzdGF0cy5yeC5wZ19sb3N0czsKIAkJCWRhdGFbJiM0MzsmIzQzO2NvdW50XSA9IHNlbGYtJmd0O3N0YXRzLnJ4LnhkcF9hYm9ydGVkOwogCQkJZGF0YVsmIzQzOyYjNDM7Y291bnRdID0gc2VsZi0mZ3Q7c3RhdHMucngueGRwX2Ryb3A7CiAJCQlkYXRhWyYjNDM7JiM0Mztjb3VudF0gPSBzZWxmLSZndDtzdGF0cy5yeC54ZHBfcGFzczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuaAppbmRleCBhNzBiODgwYWRhNjdlOS4uNThiY2FkYjNlM2NjZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmgKQEAgLTE3LDEyICYjNDM7MTcsMTIgQEAKICNkZWZpbmUgQVFfWERQX1RBSUxST09NCQlTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpCiAKIHN0cnVjdCBwYWdlOwomIzQzO3N0cnVjdCBwYWdlX3Bvb2w7CiBzdHJ1Y3QgYXFfbmljX2NmZ19zOwogCiBzdHJ1Y3QgYXFfcnhwYWdlIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlkbWFfYWRkcl90IGRhZGRyOwotCXVuc2lnbmVkIGludCBvcmRlcjsKIAl1bnNpZ25lZCBpbnQgcGdfb2ZmOwogfTsKIApAQCAtMTA1LDkgJiM0MzsxMDUsNiBAQCBzdHJ1Y3QgYXFfcmluZ19zdGF0c19yeF9zIHsKIAl1NjQgYWxsb2NfZmFpbHM7CiAJdTY0IHNrYl9hbGxvY19mYWlsczsKIAl1NjQgcG9sbHM7Ci0JdTY0IHBnX2xvc3RzOwotCXU2NCBwZ19mbGlwczsKLQl1NjQgcGdfcmV1c2VzOwogCXU2NCB4ZHBfYWJvcnRlZDsKIAl1NjQgeGRwX2Ryb3A7CiAJdTY0IHhkcF9wYXNzOwpAQCAtMTUxLDYgJiM0MzsxNDgsNyBAQCBzdHJ1Y3QgYXFfcmluZ19zIHsKIAl1MTYgdGFpbF9zaXplOwogCXVuaW9uIGFxX3Jpbmdfc3RhdHNfcyBzdGF0czsKIAlkbWFfYWRkcl90IGR4X3JpbmdfcGE7CiYjNDM7CXN0cnVjdCBwYWdlX3Bvb2wgKnBnX3Bvb2w7CiAJc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZzsKIAllbnVtIGF0bF9yaW5nX3R5cGUgcmluZ190eXBlOwogCXN0cnVjdCB4ZHBfcnhxX2luZm8geGRwX3J4cTsKQEAgLTIwMiw2ICYjNDM7MjAwLDcgQEAgdm9pZCBhcV9yaW5nX3VwZGF0ZV9xdWV1ZV9zdGF0ZShzdHJ1Y3QgYXFfcmluZ19zICpyaW5nKTsKIHZvaWQgYXFfcmluZ19xdWV1ZV93YWtlKHN0cnVjdCBhcV9yaW5nX3MgKnJpbmcpOwogdm9pZCBhcV9yaW5nX3F1ZXVlX3N0b3Aoc3RydWN0IGFxX3JpbmdfcyAqcmluZyk7CiBib29sIGFxX3JpbmdfdHhfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqc2VsZik7CiYjNDM7dm9pZCBhcV9yaW5nX3R4X2RlaW5pdChzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKTsKIGludCBhcV94ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtX2ZyYW1lcywKIAkJc3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcywgdTMyIGZsYWdzKTsKIGludCBhcV9yaW5nX3J4X2NsZWFuKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV92ZWMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3ZlYy5jCmluZGV4IDJmOTAzM2NlZWQ4Y2UzLi44ZTE1NDA1ZDQ5NDE5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfdmVjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfdmVjLmMKQEAgLTE0NiwyNSAmIzQzOzE0NiwzMiBAQCBpbnQgYXFfdmVjX3JpbmdfYWxsb2Moc3RydWN0IGFxX3ZlY19zICpzZWxmLCBzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYywKIAkJYXFfbmljX3NldF90eF9yaW5nKGFxX25pYywgaWR4X3JpbmcsIHJpbmcpOwogCiAJCXJpbmcgPSAmYW1wO3NlbGYtJmd0O3JpbmdbaV1bQVFfVkVDX1JYX0lEXTsKJiM0MzsJCS8qIFJlZ2lzdGVyaW5nIHRoZSBNRU1fVFlQRV9QQUdFX1BPT0wgbWVtb3J5IG1vZGVsIGJlbG93IG5lZWRzCiYjNDM7CQkgKiB0aGUgcGFnZSBwb29sIGNyZWF0ZWQgYnkgYXFfcmluZ19yeF9hbGxvYygpLCBzbyB0aGUgcmluZyBpcwomIzQzOwkJICogYWxsb2NhdGVkIGZpcnN0LiBJZiBhIHJlZ2lzdHJhdGlvbiBmYWlscywgdGhlIHJpbmcgaGFzIHRvIGJlCiYjNDM7CQkgKiBmcmVlZCBleHBsaWNpdGx5OiByeF9yaW5ncyBpcyBub3QgaW5jcmVtZW50ZWQgeWV0LCBzbyB0aGUKJiM0MzsJCSAqIHVud2luZCB0aHJvdWdoIGFxX3ZlY19yaW5nX2ZyZWUoKSB3b3VsZCBub3QgY292ZXIgaXQuCiYjNDM7CQkgKi8KJiM0MzsJCWVyciA9IGFxX3JpbmdfcnhfYWxsb2MocmluZywgYXFfbmljLCBpZHhfcmluZywgYXFfbmljX2NmZyk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZXJyX2V4aXQ7CiYjNDM7CiAJCWlmICh4ZHBfcnhxX2luZm9fcmVnKCZhbXA7cmluZy0mZ3Q7eGRwX3J4cSwKIAkJCQkgICAgIGFxX25pYy0mZ3Q7bmRldiwgaWR4LAogCQkJCSAgICAgc2VsZi0mZ3Q7bmFwaS5uYXBpX2lkKSAmbHQ7IDApIHsKJiM0MzsJCQlhcV9yaW5nX2ZyZWUocmluZyk7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBlcnJfZXhpdDsKIAkJfQogCQlpZiAoeGRwX3J4cV9pbmZvX3JlZ19tZW1fbW9kZWwoJmFtcDtyaW5nLSZndDt4ZHBfcnhxLAotCQkJCQkgICAgICAgTUVNX1RZUEVfUEFHRV9TSEFSRUQsIE5VTEwpICZsdDsgMCkgewomIzQzOwkJCQkJICAgICAgIE1FTV9UWVBFX1BBR0VfUE9PTCwKJiM0MzsJCQkJCSAgICAgICByaW5nLSZndDtwZ19wb29sKSAmbHQ7IDApIHsKIAkJCXhkcF9yeHFfaW5mb191bnJlZygmYW1wO3JpbmctJmd0O3hkcF9yeHEpOwomIzQzOwkJCWFxX3JpbmdfZnJlZShyaW5nKTsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlnb3RvIGVycl9leGl0OwogCQl9CiAKLQkJZXJyID0gYXFfcmluZ19yeF9hbGxvYyhyaW5nLCBhcV9uaWMsIGlkeF9yaW5nLCBhcV9uaWNfY2ZnKTsKLQkJaWYgKGVycikgewotCQkJeGRwX3J4cV9pbmZvX3VucmVnKCZhbXA7cmluZy0mZ3Q7eGRwX3J4cSk7Ci0JCQlnb3RvIGVycl9leGl0OwotCQl9Ci0KIAkJJiM0MzsmIzQzO3NlbGYtJmd0O3J4X3JpbmdzOwogCX0KIApAQCAtMjc1LDcgJiM0MzsyODIsNyBAQCB2b2lkIGFxX3ZlY19kZWluaXQoc3RydWN0IGFxX3ZlY19zICpzZWxmKQogCiAJZm9yIChpID0gMFU7IHNlbGYtJmd0O3R4X3JpbmdzICZndDsgaTsgJiM0MzsmIzQzO2kpIHsKIAkJcmluZyA9IHNlbGYtJmd0O3JpbmdbaV07Ci0JCWFxX3JpbmdfdHhfY2xlYW4oJmFtcDtyaW5nW0FRX1ZFQ19UWF9JRF0pOwomIzQzOwkJYXFfcmluZ190eF9kZWluaXQoJmFtcDtyaW5nW0FRX1ZFQ19UWF9JRF0pOwogCQlhcV9yaW5nX3J4X2RlaW5pdCgmYW1wO3JpbmdbQVFfVkVDX1JYX0lEXSk7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjk4CgkJCQkJCQlvdXRwdXQ6IDkxCgkJCQkJCQl0aG91Z2h0czogMTMwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IEFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGFuIGFRdWFudGlhIERyaXZlciBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7dmUgZ290IGEgcGF0Y2ggdG91Y2hpbmcgdGhlIGFRdWFudGlhIEFRdGlvbiBFdGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYC4gVGhlIGtleSBjaGFuZ2VzIGludm9sdmUgYSBuZXcgbWVtb3J5IGFsbG9jYXRpb24gbW9kZWwgdXNpbmcgYFBBR0VfUE9PTGAgZm9yIFJYIHJpbmdzLCBtb2RpZmljYXRpb25zIHRvIGhhbmRsZSBYRFAgZnJhbWVzLCBhbmQgZGUtaW5pdGlhbGl6YXRpb24gb2YgVFggYnVmZmVycy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGlzIGV2ZW4gcmVhY2hhYmxlIGZvciBmdXp6aW5nLgoKTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyBkcml2ZXIgYWNjZXNzaWJsZSB3aXRoaW4gYSB0eXBpY2FsIFFFTVUgc2V0dXA/IGFRdWFudGlhIGlzIGEgMTBHYkUgUENJZSBjYXJkLCByaWdodD8gTGV0JiMzOTtzIGNoZWNrIHRoZSBzb3VyY2Ugb3IgYSBxdWljayBzZWFyY2guLi4gTm9wZSwgYVF1YW50aWEgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQmIzM5O3MgYSBodWdlIHJlZCBmbGFnLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBpZiBpdCYjMzk7cyBjb25zaWRlcmVkIGEgcGh5c2ljYWwgY2FyZC4gTG9va2luZyBhdCB0aGUgaW5zdHJ1Y3Rpb25zLCB0aGV5IHNwZWNpZmljYWxseSBzYXkgdG8gbWFyayB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyBhcyBub3Qgd29ydGggZnV6emluZyBpZiB0aGV5IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUuCgpEb2VzIHN5emthbGxlciBvZmZlciBhIHdheSBhcm91bmQgdGhpcz8gQ291bGQgaXQgZnV6eiBQQ0kgZGV2aWNlcyBzb21laG93PyBXYWl0LCB5ZXMsIGl0IGhhcyBQQ0kgZnV6emluZy4gQnV0IGNhbiBzeXprYWxsZXIgKmVtdWxhdGUqIHRoZSBkZXZpY2UgRE1BIHJpbmcgYnVmZmVycz8gIE5vLCBpdCB1c2VzIGEgdmlydHVhbCBQQ0kgaG9zdCBicmlkZ2UsIG9yIGp1c3QgZnV6emVzIHRoZSBjb25maWcgc3BhY2UuIEl0IHNwZWNpZmljYWxseSBzYXlzIHRoYXQgdGhlc2UgcGF0aHMgYXJlIHVucmVhY2hhYmxlIHdoZW4geW91IHJlcXVpcmUgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLiBBbHNvLCBzeXprYWxsZXIgdGVzdHMgcGF0Y2hlcyBzdWJtaXR0ZWQgdG8gbWFpbGluZyBsaXN0cywgc28gdGhpcyBwYXRjaCBpcyBiZWluZyB0ZXN0ZWQsIGJ1dCBkb2VzbiYjMzk7dCBtZWFuIGl0IGlzIGZ1enplZC4KCk9rYXksIGxldCYjMzk7cyB2ZXJpZnkgaWYgYVF1YW50aWEgaXMgYSBwaHlzaWNhbCBQQ0llIGNhcmQuIENoZWNraW5nIHRoZSBLY29uZmlnIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9LY29uZmlnYCByZXZlYWxzOiAmIzM0O1RoaXMgZW5hYmxlcyB0aGUgc3VwcG9ydCBmb3IgdGhlIGFRdWFudGlhIEFRdGlvbih0bSkgRXRoZXJuZXQgY2FyZC4mIzM0OyAgSXQgZGVwZW5kcyBvbiBQQ0kuIENvbmZpcm1lZDogaXQmIzM5O3MgYSBwaHlzaWNhbCBFdGhlcm5ldCBjYXJkLiBUaGVyZWZvcmUgaXQgZmFsbHMgdW5kZXIgdGhlICYjMzQ7bm90IHdvcnRoIGZ1enppbmcmIzM0OyBjYXRlZ29yeS4KCklzIHRoZXJlIGFueSBjaGFuY2Ugb2YgZnV6emluZyB2aWEgYW5vdGhlciByb3V0ZSwgbGlrZSBhIHZpcnR1YWwgZHJpdmVyPyBOb3BlLCBpdCYjMzk7cyBhIHN0YW5kYXJkIEV0aGVybmV0IGRyaXZlciBmb3IgYSBwaHlzaWNhbCBQQ0llIGNhcmQuIERvdWJsZS1jaGVja2luZyBhZ2Fpbi4uLiBubyBRRU1VIGVtdWxhdGlvbi4KClJldmlzaXRpbmcgdGhlIHByb21wdCYjMzk7cyBjcml0ZXJpYTogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsgYVF1YW50aWEgZml0cyB0aGF0IGRlc2NyaXB0aW9uIHBlcmZlY3RseS4gSXQgaXMgYSBwaHlzaWNhbCBQQ0llIEV0aGVybmV0IGNhcmQuIEl0IGlzbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCYjMzk7cyBlbGltaW5hdGUgdGhlIHBvc3NpYmlsaXR5IG9mIGEgVVNCIGNvbm5lY3Rpb24uIFRoZSBLY29uZmlnIHNheXMgaXQgYGRlcGVuZHMgb24gUENJYC4gT2theSwgdGhhdCYjMzk7cyBpdC4gSXQmIzM5O3Mgc3RyaWN0bHkgd2l0aGluIHRoZSBhUXVhbnRpYSBkcml2ZXIuCgpTbywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgV29ydGhGdXp6aW5nPWZhbHNlLiBUaGlzIHBhdGNoIG1vZGlmaWVzIGEgZHJpdmVyIGZvciBhIHBoeXNpY2FsIFBDSWUgY2FyZCBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLCBzbyB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4KCkkmIzM5O20gcmVhZHkgdG8gbW92ZSBvbi4gTGV0JiMzOTtzIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgYVF1YW50aWEgQVF0aW9uIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvKS4gVGhpcyBpcyBhIGRyaXZlciBmb3IgYSBwaHlzaWNhbCBQQ0llIG5ldHdvcmsgY2FyZCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIGFRdWFudGlhIEFRdGlvbiBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhLykuIFRoaXMgaXMgYSBkcml2ZXIgZm9yIGEgcGh5c2ljYWwgUENJZSBuZXR3b3JrIGNhcmQgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzo0ODoyNi41NjYwMTE5MjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM3MTA3OTExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIGFRdWFudGlhIEFRdGlvbiBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhLykuIFRoaXMgaXMgYSBkcml2ZXIgZm9yIGEgcGh5c2ljYWwgUENJZSBuZXR3b3JrIGNhcmQgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjQ4OjI2LjU2NjAyMDAwNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg3NTY3MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTFjZGJhMjg0ZWY4YjFhMGQ1OWZlMzkxNWQ5ZGFmYTc3ODQ4ZGUxNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAyNSAxMzo0ODoyNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvS2NvbmZpZ1xcbmluZGV4IGNlYzIwMThjODRhOWJjLi5jOGZiN2IzM2U1YjcxYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvS2NvbmZpZ1xcbkBAIC0yMCw2ICsyMCw3IEBAIGNvbmZpZyBBUVRJT05cXG4gXFx0dHJpc3RhdGUgXFxcImFRdWFudGlhIEFRdGlvbih0bSkgU3VwcG9ydFxcXCJcXG4gXFx0ZGVwZW5kcyBvbiBQQ0lcXG4gXFx0ZGVwZW5kcyBvbiBNQUNTRUMgfHwgTUFDU0VDPW5cXG4rXFx0c2VsZWN0IFBBR0VfUE9PTFxcbiBcXHRoZWxwXFxuIFxcdCAgVGhpcyBlbmFibGVzIHRoZSBzdXBwb3J0IGZvciB0aGUgYVF1YW50aWEgQVF0aW9uKHRtKSBFdGhlcm5ldCBjYXJkLlxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jXFxuaW5kZXggNDIwYWY5NThkNDg2MWEuLjBmNTEyNWJkMjMxNTk0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuY1xcbkBAIC0xMDAsOSArMTAwLDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhcV9ldGh0b29sX3F1ZXVlX3J4X3N0YXRfbmFtZXNbXSA9IHtcXG4gXFx0XFxcIiVzUXVldWVbJWRdIEFsbG9jRmFpbHNcXFwiLFxcbiBcXHRcXFwiJXNRdWV1ZVslZF0gU2tiQWxsb2NGYWlsc1xcXCIsXFxuIFxcdFxcXCIlc1F1ZXVlWyVkXSBQb2xsc1xcXCIsXFxuLVxcdFxcXCIlc1F1ZXVlWyVkXSBQYWdlRmxpcHNcXFwiLFxcbi1cXHRcXFwiJXNRdWV1ZVslZF0gUGFnZVJldXNlc1xcXCIsXFxuLVxcdFxcXCIlc1F1ZXVlWyVkXSBQYWdlRnJlZXNcXFwiLFxcbiBcXHRcXFwiJXNRdWV1ZVslZF0gWGRwQWJvcnRcXFwiLFxcbiBcXHRcXFwiJXNRdWV1ZVslZF0gWGRwRHJvcFxcXCIsXFxuIFxcdFxcXCIlc1F1ZXVlWyVkXSBYZHBQYXNzXFxcIixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9wdHAuY1xcbmluZGV4IDU1OGFjOTIzN2Y3NTllLi4zYTQwZDk4NmNkNjc4NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9wdHAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3B0cC5jXFxuQEAgLTEzLDYgKzEzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbGFzc2lmeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZXJydXB0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbG9ja3NvdXJjZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3hkcC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImFxX25pYy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiYXFfcHRwLmhcXFwiXFxuQEAgLTExOTIsMTIgKzExOTMsMjMgQEAgaW50IGFxX3B0cF9yaW5nX2FsbG9jKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljKVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl9leGl0X3B0cF90eDtcXG4gXFxuK1xcdGVyciA9IHhkcF9yeHFfaW5mb19yZWcoXFx1MDAyNmFxX3B0cC1cXHUwMDNlcHRwX3J4LnhkcF9yeHEsIGFxX25pYy1cXHUwMDNlbmRldixcXG4rXFx0XFx0XFx0ICAgICAgIHJ4X3JpbmdfaWR4LCBhcV9wdHAtXFx1MDAzZW5hcGkubmFwaV9pZCk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9leGl0X3B0cF9yeDtcXG4rXFxuK1xcdGVyciA9IHhkcF9yeHFfaW5mb19yZWdfbWVtX21vZGVsKFxcdTAwMjZhcV9wdHAtXFx1MDAzZXB0cF9yeC54ZHBfcnhxLFxcbitcXHRcXHRcXHRcXHRcXHQgTUVNX1RZUEVfUEFHRV9QT09MLFxcbitcXHRcXHRcXHRcXHRcXHQgYXFfcHRwLVxcdTAwM2VwdHBfcngucGdfcG9vbCk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9leGl0X3hkcF9yeHE7XFxuK1xcbiBcXHRpZiAoYXFfcHRwLVxcdTAwM2VhMV9wdHApIHtcXG4gXFx0XFx0ZXJyID0gYXFfcmluZ19od3RzX3J4X2FsbG9jKFxcdTAwMjZhcV9wdHAtXFx1MDAzZWh3dHNfcngsIGFxX25pYywgUFRQX0hXU1RfUklOR19JRFgsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBhcV9uaWMtXFx1MDAzZWFxX25pY19jZmcucnhkcyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIGFxX25pYy1cXHUwMDNlYXFfbmljX2NmZy5hcV9od19jYXBzLVxcdTAwM2VyeGRfc2l6ZSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGdvdG8gZXJyX2V4aXRfcHRwX3J4O1xcbitcXHRcXHRcXHRnb3RvIGVycl9leGl0X3hkcF9yeHE7XFxuIFxcdH1cXG4gXFxuIFxcdGVyciA9IGFxX3B0cF9za2JfcmluZ19pbml0KFxcdTAwMjZhcV9wdHAtXFx1MDAzZXNrYl9yaW5nLCBhcV9uaWMtXFx1MDAzZWFxX25pY19jZmcucnhkcyk7XFxuQEAgLTEyMTcsNiArMTIyOSw4IEBAIGludCBhcV9wdHBfcmluZ19hbGxvYyhzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYylcXG4gZXJyX2V4aXRfaHd0c19yeDpcXG4gXFx0aWYgKGFxX3B0cC1cXHUwMDNlYTFfcHRwKVxcbiBcXHRcXHRhcV9yaW5nX2h3dHNfcnhfZnJlZShcXHUwMDI2YXFfcHRwLVxcdTAwM2Vod3RzX3J4KTtcXG4rZXJyX2V4aXRfeGRwX3J4cTpcXG4rXFx0eGRwX3J4cV9pbmZvX3VucmVnKFxcdTAwMjZhcV9wdHAtXFx1MDAzZXB0cF9yeC54ZHBfcnhxKTtcXG4gZXJyX2V4aXRfcHRwX3J4OlxcbiBcXHRhcV9yaW5nX2ZyZWUoXFx1MDAyNmFxX3B0cC1cXHUwMDNlcHRwX3J4KTtcXG4gZXJyX2V4aXRfcHRwX3R4OlxcbkBAIC0xMjMzLDYgKzEyNDcsOCBAQCB2b2lkIGFxX3B0cF9yaW5nX2ZyZWUoc3RydWN0IGFxX25pY19zICphcV9uaWMpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGFxX3JpbmdfZnJlZShcXHUwMDI2YXFfcHRwLVxcdTAwM2VwdHBfdHgpO1xcbitcXHRpZiAoeGRwX3J4cV9pbmZvX2lzX3JlZyhcXHUwMDI2YXFfcHRwLVxcdTAwM2VwdHBfcngueGRwX3J4cSkpXFxuK1xcdFxcdHhkcF9yeHFfaW5mb191bnJlZyhcXHUwMDI2YXFfcHRwLVxcdTAwM2VwdHBfcngueGRwX3J4cSk7XFxuIFxcdGFxX3JpbmdfZnJlZShcXHUwMDI2YXFfcHRwLVxcdTAwM2VwdHBfcngpO1xcbiBcXHRpZiAoYXFfcHRwLVxcdTAwM2VhMV9wdHApXFxuIFxcdFxcdGFxX3JpbmdfaHd0c19yeF9mcmVlKFxcdTAwMjZhcV9wdHAtXFx1MDAzZWh3dHNfcngpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmNcXG5pbmRleCA4ZmYwN2RlMmJkNTI0MC4uOWRkODgxNzEwNTk0MjcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jXFxuQEAgLTE0LDEyMCArMTQsMzcgQEBcXG4gI2luY2x1ZGUgXFxcImFxX3ZlYy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiYXFfbWFpbi5oXFxcIlxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9wYWdlX3Bvb2wvaGVscGVycy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3hkcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsdGVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfdHJhY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFxcdTAwM2VcXG4gXFxuLXN0YXRpYyB2b2lkIGFxX2dldF9yeHBhZ2VzX3hkcChzdHJ1Y3QgYXFfcmluZ19idWZmX3MgKmJ1ZmYsXFxuLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4te1xcbi1cXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaW5mbztcXG4tXFx0aW50IGk7XFxuLVxcbi1cXHRpZiAoeGRwX2J1ZmZfaGFzX2ZyYWdzKHhkcCkpIHtcXG4tXFx0XFx0c2luZm8gPSB4ZHBfZ2V0X3NoYXJlZF9pbmZvX2Zyb21fYnVmZih4ZHApO1xcbi1cXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNpbmZvLVxcdTAwM2Vucl9mcmFnczsgaSsrKSB7XFxuLVxcdFxcdFxcdHNrYl9mcmFnX3QgKmZyYWcgPSBcXHUwMDI2c2luZm8tXFx1MDAzZWZyYWdzW2ldO1xcbi1cXG4tXFx0XFx0XFx0cGFnZV9yZWZfaW5jKHNrYl9mcmFnX3BhZ2UoZnJhZykpO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFx0cGFnZV9yZWZfaW5jKGJ1ZmYtXFx1MDAzZXJ4ZGF0YS5wYWdlKTtcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSB2b2lkIGFxX2ZyZWVfcnhwYWdlKHN0cnVjdCBhcV9yeHBhZ2UgKnJ4cGFnZSwgc3RydWN0IGRldmljZSAqZGV2KVxcbi17XFxuLVxcdHVuc2lnbmVkIGludCBsZW4gPSBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2MgcnhwYWdlLVxcdTAwM2VvcmRlcjtcXG4tXFxuLVxcdGRtYV91bm1hcF9wYWdlKGRldiwgcnhwYWdlLVxcdTAwM2VkYWRkciwgbGVuLCBETUFfRlJPTV9ERVZJQ0UpO1xcbi1cXG4tXFx0LyogRHJvcCB0aGUgcmVmIGZvciBiZWluZyBpbiB0aGUgcmluZy4gKi9cXG4tXFx0X19mcmVlX3BhZ2VzKHJ4cGFnZS1cXHUwMDNlcGFnZSwgcnhwYWdlLVxcdTAwM2VvcmRlcik7XFxuLVxcdHJ4cGFnZS1cXHUwMDNlcGFnZSA9IE5VTEw7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgYXFfYWxsb2NfcnhwYWdlcyhzdHJ1Y3QgYXFfcnhwYWdlICpyeHBhZ2UsIHN0cnVjdCBhcV9yaW5nX3MgKnJ4X3JpbmcpXFxuK3N0YXRpYyBpbnQgYXFfZ2V0X3J4cGFnZXMoc3RydWN0IGFxX3JpbmdfcyAqc2VsZiwgc3RydWN0IGFxX3JpbmdfYnVmZl9zICpyeGJ1ZilcXG4ge1xcbi1cXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhcV9uaWNfZ2V0X2RldihyeF9yaW5nLVxcdTAwM2VhcV9uaWMpO1xcbi1cXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSByeF9yaW5nLVxcdTAwM2VwYWdlX29yZGVyO1xcbitcXHR1bnNpZ25lZCBpbnQgc2l6ZSA9IHNlbGYtXFx1MDAzZXBhZ2Vfb2Zmc2V0ICsgc2VsZi1cXHUwMDNlZnJhbWVfbWF4ICtcXG4rXFx0XFx0XFx0ICAgIHNlbGYtXFx1MDAzZXRhaWxfc2l6ZTtcXG4rXFx0dW5zaWduZWQgaW50IHBnX29mZjtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuLVxcdGludCByZXQgPSAtRU5PTUVNO1xcbi1cXHRkbWFfYWRkcl90IGRhZGRyO1xcbi1cXG4tXFx0cGFnZSA9IGRldl9hbGxvY19wYWdlcyhvcmRlcik7XFxuLVxcdGlmICh1bmxpa2VseSghcGFnZSkpXFxuLVxcdFxcdGdvdG8gZXJyX2V4aXQ7XFxuLVxcbi1cXHRkYWRkciA9IGRtYV9tYXBfcGFnZShkZXYsIHBhZ2UsIDAsIFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlcixcXG4tXFx0XFx0XFx0ICAgICBETUFfRlJPTV9ERVZJQ0UpO1xcbi1cXG4tXFx0aWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgZGFkZHIpKSlcXG4tXFx0XFx0Z290byBmcmVlX3BhZ2U7XFxuLVxcbi1cXHRyeHBhZ2UtXFx1MDAzZXBhZ2UgPSBwYWdlO1xcbi1cXHRyeHBhZ2UtXFx1MDAzZWRhZGRyID0gZGFkZHI7XFxuLVxcdHJ4cGFnZS1cXHUwMDNlb3JkZXIgPSBvcmRlcjtcXG4tXFx0cnhwYWdlLVxcdTAwM2VwZ19vZmYgPSByeF9yaW5nLVxcdTAwM2VwYWdlX29mZnNldDtcXG4tXFxuLVxcdHJldHVybiAwO1xcbi1cXG4tZnJlZV9wYWdlOlxcbi1cXHRfX2ZyZWVfcGFnZXMocGFnZSwgb3JkZXIpO1xcbiBcXG4tZXJyX2V4aXQ6XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4rXFx0LyogQnVmZmVycyB3aG9zZSBwYWdlIHdhcyBub3QgcGFzc2VkIHVwIHRoZSBzdGFjayBhcmUgcmVwb3N0ZWRcXG4rXFx0ICogd2l0aCB0aGUgZGF0YSB0aGV5IGFscmVhZHkgY2FycnkgZGlzY2FyZGVkLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJ4YnVmLVxcdTAwM2VyeGRhdGEucGFnZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1zdGF0aWMgaW50IGFxX2dldF9yeHBhZ2VzKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsIHN0cnVjdCBhcV9yaW5nX2J1ZmZfcyAqcnhidWYpXFxuLXtcXG4tXFx0dW5zaWduZWQgaW50IG9yZGVyID0gc2VsZi1cXHUwMDNlcGFnZV9vcmRlcjtcXG4tXFx0dTE2IHBhZ2Vfb2Zmc2V0ID0gc2VsZi1cXHUwMDNlcGFnZV9vZmZzZXQ7XFxuLVxcdHUxNiBmcmFtZV9tYXggPSBzZWxmLVxcdTAwM2VmcmFtZV9tYXg7XFxuLVxcdHUxNiB0YWlsX3NpemUgPSBzZWxmLVxcdTAwM2V0YWlsX3NpemU7XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRpZiAocnhidWYtXFx1MDAzZXJ4ZGF0YS5wYWdlKSB7XFxuLVxcdFxcdC8qIE9uZSBtZWFucyByaW5nIGlzIHRoZSBvbmx5IHVzZXIgYW5kIGNhbiByZXVzZSAqL1xcbi1cXHRcXHRpZiAocGFnZV9yZWZfY291bnQocnhidWYtXFx1MDAzZXJ4ZGF0YS5wYWdlKSBcXHUwMDNlIDEpIHtcXG4tXFx0XFx0XFx0LyogVHJ5IHJldXNlIGJ1ZmZlciAqL1xcbi1cXHRcXHRcXHRyeGJ1Zi1cXHUwMDNlcnhkYXRhLnBnX29mZiArPSBmcmFtZV9tYXggKyBwYWdlX29mZnNldCArXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHRhaWxfc2l6ZTtcXG4tXFx0XFx0XFx0aWYgKHJ4YnVmLVxcdTAwM2VyeGRhdGEucGdfb2ZmICsgZnJhbWVfbWF4ICsgdGFpbF9zaXplIFxcdTAwM2M9XFxuLVxcdFxcdFxcdCAgICAoUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSkge1xcbi1cXHRcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZzZWxmLVxcdTAwM2VzdGF0cy5yeC5zeW5jcCk7XFxuLVxcdFxcdFxcdFxcdHNlbGYtXFx1MDAzZXN0YXRzLnJ4LnBnX2ZsaXBzKys7XFxuLVxcdFxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZzZWxmLVxcdTAwM2VzdGF0cy5yeC5zeW5jcCk7XFxuLVxcbi1cXHRcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRcXHQvKiBCdWZmZXIgZXhoYXVzdGVkLiBXZSBoYXZlIG90aGVyIHVzZXJzIGFuZFxcbi1cXHRcXHRcXHRcXHQgKiBzaG91bGQgcmVsZWFzZSB0aGlzIHBhZ2UgYW5kIHJlYWxsb2NcXG4tXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdGFxX2ZyZWVfcnhwYWdlKFxcdTAwMjZyeGJ1Zi1cXHUwMDNlcnhkYXRhLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgYXFfbmljX2dldF9kZXYoc2VsZi1cXHUwMDNlYXFfbmljKSk7XFxuLVxcdFxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnNlbGYtXFx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcXG4tXFx0XFx0XFx0XFx0c2VsZi1cXHUwMDNlc3RhdHMucngucGdfbG9zdHMrKztcXG4tXFx0XFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnNlbGYtXFx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRyeGJ1Zi1cXHUwMDNlcnhkYXRhLnBnX29mZiA9IHBhZ2Vfb2Zmc2V0O1xcbi1cXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZzZWxmLVxcdTAwM2VzdGF0cy5yeC5zeW5jcCk7XFxuLVxcdFxcdFxcdHNlbGYtXFx1MDAzZXN0YXRzLnJ4LnBnX3JldXNlcysrO1xcbi1cXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2c2VsZi1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbi1cXHRcXHR9XFxuK1xcdHBhZ2UgPSBwYWdlX3Bvb2xfZGV2X2FsbG9jX2ZyYWcoc2VsZi1cXHUwMDNlcGdfcG9vbCwgXFx1MDAyNnBnX29mZiwgc2l6ZSk7XFxuK1xcdGlmICh1bmxpa2VseSghcGFnZSkpIHtcXG4rXFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2c2VsZi1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbitcXHRcXHRzZWxmLVxcdTAwM2VzdGF0cy5yeC5hbGxvY19mYWlscysrO1xcbitcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2c2VsZi1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFyeGJ1Zi1cXHUwMDNlcnhkYXRhLnBhZ2UpIHtcXG4tXFx0XFx0cmV0ID0gYXFfYWxsb2NfcnhwYWdlcyhcXHUwMDI2cnhidWYtXFx1MDAzZXJ4ZGF0YSwgc2VsZik7XFxuLVxcdFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2c2VsZi1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbi1cXHRcXHRcXHRzZWxmLVxcdTAwM2VzdGF0cy5yeC5hbGxvY19mYWlscysrO1xcbi1cXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2c2VsZi1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcdH1cXG4rXFx0cnhidWYtXFx1MDAzZXJ4ZGF0YS5wYWdlID0gcGFnZTtcXG4rXFx0cnhidWYtXFx1MDAzZXJ4ZGF0YS5kYWRkciA9IHBhZ2VfcG9vbF9nZXRfZG1hX2FkZHIocGFnZSk7XFxuK1xcdHJ4YnVmLVxcdTAwM2VyeGRhdGEucGdfb2ZmID0gcGdfb2ZmICsgc2VsZi1cXHUwMDNlcGFnZV9vZmZzZXQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0xNzksNiArOTYsMTUgQEAgaW50IGFxX3JpbmdfcnhfYWxsb2Moc3RydWN0IGFxX3JpbmdfcyAqc2VsZixcXG4gXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgaWR4LFxcbiBcXHRcXHQgICAgIHN0cnVjdCBhcV9uaWNfY2ZnX3MgKmFxX25pY19jZmcpXFxuIHtcXG4rXFx0c3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMgcHBfcGFyYW1zID0ge1xcbitcXHRcXHQuZmxhZ3MgPSBQUF9GTEFHX0RNQV9NQVAgfCBQUF9GTEFHX0RNQV9TWU5DX0RFVixcXG4rXFx0XFx0LnBvb2xfc2l6ZSA9IGFxX25pY19jZmctXFx1MDAzZXJ4ZHMsXFxuK1xcdFxcdC5uaWQgPSBOVU1BX05PX05PREUsXFxuK1xcdFxcdC5kZXYgPSBhcV9uaWNfZ2V0X2RldihhcV9uaWMpLFxcbitcXHRcXHQuZG1hX2RpciA9IERNQV9GUk9NX0RFVklDRSxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IHBhZ2VfcG9vbCAqcG9vbDtcXG4rXFxuIFxcdHNlbGYtXFx1MDAzZWFxX25pYyA9IGFxX25pYztcXG4gXFx0c2VsZi1cXHUwMDNlaWR4ID0gaWR4O1xcbiBcXHRzZWxmLVxcdTAwM2VzaXplID0gYXFfbmljX2NmZy1cXHUwMDNlcnhkcztcXG5AQCAtMjAwLDYgKzEyNiwxOCBAQCBpbnQgYXFfcmluZ19yeF9hbGxvYyhzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLFxcbiBcXHRcXHRzZWxmLVxcdTAwM2V0YWlsX3NpemUgPSAwO1xcbiBcXHR9XFxuIFxcbitcXHRwcF9wYXJhbXMub3JkZXIgPSBzZWxmLVxcdTAwM2VwYWdlX29yZGVyO1xcbitcXHRwcF9wYXJhbXMubWF4X2xlbiA9IFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBzZWxmLVxcdTAwM2VwYWdlX29yZGVyO1xcbitcXG4rXFx0cG9vbCA9IHBhZ2VfcG9vbF9jcmVhdGUoXFx1MDAyNnBwX3BhcmFtcyk7XFxuK1xcdGlmIChJU19FUlIocG9vbCkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHBvb2wpO1xcbitcXG4rXFx0c2VsZi1cXHUwMDNlcGdfcG9vbCA9IHBvb2w7XFxuK1xcbitcXHQvKiBPbiBmYWlsdXJlIGFxX3JpbmdfYWxsb2MoKSBjYWxscyBhcV9yaW5nX2ZyZWUoKSwgd2hpY2ggYWxzb1xcbitcXHQgKiBkZXN0cm95cyB0aGUgcGFnZSBwb29sLlxcbitcXHQgKi9cXG4gXFx0cmV0dXJuIGFxX3JpbmdfYWxsb2Moc2VsZiwgYXFfbmljKTtcXG4gfVxcbiBcXG5AQCAtMzQ2LDcgKzI4NCwxMSBAQCBib29sIGFxX3JpbmdfdHhfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqc2VsZilcXG4gXFx0XFx0XFx0KytzZWxmLVxcdTAwM2VzdGF0cy50eC5wYWNrZXRzO1xcbiBcXHRcXHRcXHRzZWxmLVxcdTAwM2VzdGF0cy50eC5ieXRlcyArPSB4ZHBfZ2V0X2ZyYW1lX2xlbihidWZmLVxcdTAwM2V4ZHBmKTtcXG4gXFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnNlbGYtXFx1MDAzZXN0YXRzLnR4LnN5bmNwKTtcXG4tXFx0XFx0XFx0eGRwX3JldHVybl9mcmFtZV9yeF9uYXBpKGJ1ZmYtXFx1MDAzZXhkcGYpO1xcbitcXHRcXHRcXHQvKiBGcmFtZXMgcXVldWVkIHZpYSBuZG9feGRwX3htaXQoKSBtYXkgY29tZSBmcm9tIGFcXG4rXFx0XFx0XFx0ICogcGFnZSBwb29sIG93bmVkIGJ5IGFub3RoZXIgTkFQSSBjb250ZXh0OiBubyBkaXJlY3RcXG4rXFx0XFx0XFx0ICogcmVjeWNsaW5nLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0eGRwX3JldHVybl9mcmFtZShidWZmLVxcdTAwM2V4ZHBmKTtcXG4gXFx0XFx0fVxcbiBcXG4gb3V0OlxcbkBAIC0zNjAsNiArMzAyLDM1IEBAIGJvb2wgYXFfcmluZ190eF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKVxcbiBcXHRyZXR1cm4gISFidWRnZXQ7XFxuIH1cXG4gXFxuK3ZvaWQgYXFfcmluZ190eF9kZWluaXQoc3RydWN0IGFxX3JpbmdfcyAqc2VsZilcXG4re1xcbitcXHRpZiAoIXNlbGYpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoOyBzZWxmLVxcdTAwM2Vzd19oZWFkICE9IHNlbGYtXFx1MDAzZXN3X3RhaWw7XFxuK1xcdFxcdHNlbGYtXFx1MDAzZXN3X2hlYWQgPSBhcV9yaW5nX25leHRfZHgoc2VsZiwgc2VsZi1cXHUwMDNlc3dfaGVhZCkpIHtcXG4rXFx0XFx0c3RydWN0IGFxX3JpbmdfYnVmZl9zICpidWZmID0gXFx1MDAyNnNlbGYtXFx1MDAzZWJ1ZmZfcmluZ1tzZWxmLVxcdTAwM2Vzd19oZWFkXTtcXG4rXFx0XFx0c3RydWN0IGRldmljZSAqbmRldiA9IGFxX25pY19nZXRfZGV2KHNlbGYtXFx1MDAzZWFxX25pYyk7XFxuK1xcbitcXHRcXHRpZiAoYnVmZi1cXHUwMDNlaXNfbWFwcGVkKSB7XFxuK1xcdFxcdFxcdGlmIChidWZmLVxcdTAwM2Vpc19zb3ApIHtcXG4rXFx0XFx0XFx0XFx0ZG1hX3VubWFwX3NpbmdsZShuZGV2LCBidWZmLVxcdTAwM2VwYSwgYnVmZi1cXHUwMDNlbGVuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgRE1BX1RPX0RFVklDRSk7XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdGRtYV91bm1hcF9wYWdlKG5kZXYsIGJ1ZmYtXFx1MDAzZXBhLCBidWZmLVxcdTAwM2VsZW4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBETUFfVE9fREVWSUNFKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoYnVmZi1cXHUwMDNlaXNfZW9wKSB7XFxuK1xcdFxcdFxcdGlmIChidWZmLVxcdTAwM2Vza2IpXFxuK1xcdFxcdFxcdFxcdGRldl9rZnJlZV9za2JfYW55KGJ1ZmYtXFx1MDAzZXNrYik7XFxuK1xcdFxcdFxcdGVsc2UgaWYgKGJ1ZmYtXFx1MDAzZXhkcGYpXFxuK1xcdFxcdFxcdFxcdHhkcF9yZXR1cm5fZnJhbWUoYnVmZi1cXHUwMDNleGRwZik7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBhcV9yeF9jaGVja3N1bShzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgYXFfcmluZ19idWZmX3MgKmJ1ZmYsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpXFxuQEAgLTQwOCwyMiArMzc5LDE1IEBAIGludCBhcV94ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtX2ZyYW1lcyxcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYXFfcmluZ19idWZmX3MgKmJ1ZmYpXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZjtcXG4tXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFxuIFxcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XFxuIFxcdGlmICh1bmxpa2VseSgheGRwZikpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0c2tiID0geGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHhkcGYsIGRldik7XFxuLVxcdGlmICghc2tiKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFxuLVxcdGFxX2dldF9yeHBhZ2VzX3hkcChidWZmLCB4ZHApO1xcbi1cXHRyZXR1cm4gc2tiO1xcbitcXHRyZXR1cm4geGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHhkcGYsIGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX3J1bl9wcm9nKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLFxcbkBAIC00NDQsOCArNDA4LDE2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX3J1bl9wcm9nKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLFxcbiBcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cnhfcmluZy1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbiBcXG4gXFx0cHJvZyA9IFJFQURfT05DRShyeF9yaW5nLVxcdTAwM2V4ZHBfcHJvZyk7XFxuLVxcdGlmICghcHJvZylcXG4tXFx0XFx0cmV0dXJuIGFxX3hkcF9idWlsZF9za2IoeGRwLCBhcV9uaWMtXFx1MDAzZW5kZXYsIGJ1ZmYpO1xcbitcXHRpZiAoIXByb2cpIHtcXG4rXFx0XFx0c2tiID0gYXFfeGRwX2J1aWxkX3NrYih4ZHAsIGFxX25pYy1cXHUwMDNlbmRldik7XFxuK1xcdFxcdC8qIFRoZSByaW5nIGhhcyBhbHJlYWR5IGhhbmRlZCBpdHMgcGFnZSBwb29sIHJlZmVyZW5jZSB0byB0aGVcXG4rXFx0XFx0ICogeGRwX2J1ZmYsIHNvIGlmIHRoZSBza2IgY291bGQgbm90IGJlIGJ1aWx0IHRoZSBidWZmZXIgbXVzdFxcbitcXHRcXHQgKiBiZSByZXR1cm5lZCB0byB0aGUgcG9vbCBoZXJlIG9yIGl0cyBmcmFnbWVudHMgd291bGQgbGVhay5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghc2tiKVxcbitcXHRcXHRcXHR4ZHBfcmV0dXJuX2J1ZmYoeGRwKTtcXG4rXFx0XFx0cmV0dXJuIHNrYjtcXG4rXFx0fVxcbiBcXG4gXFx0cHJlZmV0Y2h3KHhkcC1cXHUwMDNlZGF0YV9oYXJkX3N0YXJ0KTsgLyogeGRwX2ZyYW1lIHdyaXRlICovXFxuIFxcbkBAIC00NTYsNyArNDI4LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsXFxuIFxcdGFjdCA9IGJwZl9wcm9nX3J1bl94ZHAocHJvZywgeGRwKTtcXG4gXFx0c3dpdGNoIChhY3QpIHtcXG4gXFx0Y2FzZSBYRFBfUEFTUzpcXG4tXFx0XFx0c2tiID0gYXFfeGRwX2J1aWxkX3NrYih4ZHAsIGFxX25pYy1cXHUwMDNlbmRldiwgYnVmZik7XFxuK1xcdFxcdHNrYiA9IGFxX3hkcF9idWlsZF9za2IoeGRwLCBhcV9uaWMtXFx1MDAzZW5kZXYpO1xcbiBcXHRcXHRpZiAoIXNrYilcXG4gXFx0XFx0XFx0Z290byBvdXRfYWJvcnRlZDtcXG4gXFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2cnhfcmluZy1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbkBAIC00NzQsNyArNDQ2LDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsXFxuIFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJ4X3JpbmctXFx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcXG4gXFx0XFx0KytyeF9yaW5nLVxcdTAwM2VzdGF0cy5yeC54ZHBfdHg7XFxuIFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZyeF9yaW5nLVxcdTAwM2VzdGF0cy5yeC5zeW5jcCk7XFxuLVxcdFxcdGFxX2dldF9yeHBhZ2VzX3hkcChidWZmLCB4ZHApO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBYRFBfUkVESVJFQ1Q6XFxuIFxcdFxcdGlmICh4ZHBfZG9fcmVkaXJlY3QoYXFfbmljLVxcdTAwM2VuZGV2LCB4ZHAsIHByb2cpIFxcdTAwM2MgMClcXG5AQCAtNDgzLDcgKzQ1NCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX3J1bl9wcm9nKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLFxcbiBcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZyeF9yaW5nLVxcdTAwM2VzdGF0cy5yeC5zeW5jcCk7XFxuIFxcdFxcdCsrcnhfcmluZy1cXHUwMDNlc3RhdHMucngueGRwX3JlZGlyZWN0O1xcbiBcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cnhfcmluZy1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbi1cXHRcXHRhcV9nZXRfcnhwYWdlc194ZHAoYnVmZiwgeGRwKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGZhbGx0aHJvdWdoO1xcbkBAIC00OTQsMTEgKzQ2NCwxMyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFxX3hkcF9ydW5fcHJvZyhzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYyxcXG4gXFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnJ4X3JpbmctXFx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcXG4gXFx0XFx0dHJhY2VfeGRwX2V4Y2VwdGlvbihhcV9uaWMtXFx1MDAzZW5kZXYsIHByb2csIGFjdCk7XFxuIFxcdFxcdGJwZl93YXJuX2ludmFsaWRfeGRwX2FjdGlvbihhcV9uaWMtXFx1MDAzZW5kZXYsIHByb2csIGFjdCk7XFxuK1xcdFxcdHhkcF9yZXR1cm5fYnVmZih4ZHApO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBYRFBfRFJPUDpcXG4gXFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2cnhfcmluZy1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbiBcXHRcXHQrK3J4X3JpbmctXFx1MDAzZXN0YXRzLnJ4LnhkcF9kcm9wO1xcbiBcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cnhfcmluZy1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbitcXHRcXHR4ZHBfcmV0dXJuX2J1ZmYoeGRwKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuQEAgLTUxNyw4ICs0ODksMTEgQEAgc3RhdGljIGJvb2wgYXFfYWRkX3J4X2ZyYWdtZW50KHN0cnVjdCBkZXZpY2UgKmRldixcXG4gXFx0ZG8ge1xcbiBcXHRcXHRza2JfZnJhZ190ICpmcmFnO1xcbiBcXG4tXFx0XFx0aWYgKHVubGlrZWx5KHNpbmZvLVxcdTAwM2Vucl9mcmFncyBcXHUwMDNlPSBNQVhfU0tCX0ZSQUdTKSlcXG4rXFx0XFx0aWYgKHVubGlrZWx5KHNpbmZvLVxcdTAwM2Vucl9mcmFncyBcXHUwMDNlPSBNQVhfU0tCX0ZSQUdTKSkge1xcbitcXHRcXHRcXHQvKiBBdHRhY2hlZCBmcmFncyBtdXN0IHJlYWNoIHhkcF9yZXR1cm5fYnVmZigpICovXFxuK1xcdFxcdFxcdHhkcF9idWZmX3NldF9mcmFnc19mbGFnKHhkcCk7XFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRmcmFnID0gXFx1MDAyNnNpbmZvLVxcdTAwM2VmcmFnc1tzaW5mby1cXHUwMDNlbnJfZnJhZ3MrK107XFxuIFxcdFxcdGJ1ZmZfID0gXFx1MDAyNnJpbmctXFx1MDAzZWJ1ZmZfcmluZ1tidWZmXy1cXHUwMDNlbmV4dF07XFxuQEAgLTU0Miw2ICs1MTcsMTEgQEAgc3RhdGljIGJvb2wgYXFfYWRkX3J4X2ZyYWdtZW50KHN0cnVjdCBkZXZpY2UgKmRldixcXG4gXFx0XFx0aWYgKHBhZ2VfaXNfcGZtZW1hbGxvYyhidWZmXy1cXHUwMDNlcnhkYXRhLnBhZ2UpKVxcbiBcXHRcXHRcXHR4ZHBfYnVmZl9zZXRfZnJhZ19wZm1lbWFsbG9jKHhkcCk7XFxuIFxcbitcXHRcXHQvKiBUaGUgZnJhZydzIHBhZ2UgcG9vbCByZWZlcmVuY2UgaXMgb3duZWQgYnkgdGhlIHhkcF9idWZmXFxuK1xcdFxcdCAqIGZyb20gbm93IG9uLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0YnVmZl8tXFx1MDAzZXJ4ZGF0YS5wYWdlID0gTlVMTDtcXG4rXFxuIFxcdH0gd2hpbGUgKCFidWZmXy1cXHUwMDNlaXNfZW9wKTtcXG4gXFxuIFxcdHhkcF9idWZmX3NldF9mcmFnc19mbGFnKHhkcCk7XFxuQEAgLTY0NSw2ICs2MjUsNyBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ19yeF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuIFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIFxcdFxcdFxcdGdvdG8gZXJyX2V4aXQ7XFxuIFxcdFxcdH1cXG4rXFx0XFx0c2tiX21hcmtfZm9yX3JlY3ljbGUoc2tiKTtcXG4gXFx0XFx0aWYgKGlzX3B0cF9yaW5nKVxcbiBcXHRcXHRcXHRidWZmLVxcdTAwM2VsZW4gLT1cXG4gXFx0XFx0XFx0XFx0YXFfcHRwX2V4dHJhY3RfdHMoc2VsZi1cXHUwMDNlYXFfbmljLCBza2JfaHd0c3RhbXBzKHNrYiksXFxuQEAgLTY2NSw3ICs2NDYsNyBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ19yeF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuIFxcdFxcdFxcdFxcdFxcdGJ1ZmYtXFx1MDAzZXJ4ZGF0YS5wZ19vZmYgKyBoZHJfbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHRidWZmLVxcdTAwM2VsZW4gLSBoZHJfbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHRzZWxmLVxcdTAwM2VmcmFtZV9tYXgpO1xcbi1cXHRcXHRcXHRwYWdlX3JlZl9pbmMoYnVmZi1cXHUwMDNlcnhkYXRhLnBhZ2UpO1xcbitcXHRcXHRcXHRidWZmLVxcdTAwM2VyeGRhdGEucGFnZSA9IE5VTEw7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmICghYnVmZi1cXHUwMDNlaXNfZW9wKSB7XFxuQEAgLTY4NCw3ICs2NjUsNyBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ19yeF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGJ1ZmZfLVxcdTAwM2VyeGRhdGEucGdfb2ZmLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRidWZmXy1cXHUwMDNlbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRzZWxmLVxcdTAwM2VmcmFtZV9tYXgpO1xcbi1cXHRcXHRcXHRcXHRwYWdlX3JlZl9pbmMoYnVmZl8tXFx1MDAzZXJ4ZGF0YS5wYWdlKTtcXG4rXFx0XFx0XFx0XFx0YnVmZl8tXFx1MDAzZXJ4ZGF0YS5wYWdlID0gTlVMTDtcXG4gXFx0XFx0XFx0XFx0YnVmZl8tXFx1MDAzZWlzX2NsZWFuZWQgPSAxO1xcbiBcXG4gXFx0XFx0XFx0XFx0YnVmZi1cXHUwMDNlaXNfaXBfY3NvIFxcdTAwMjY9IGJ1ZmZfLVxcdTAwM2Vpc19pcF9jc287XFxuQEAgLTgyMiw2ICs4MDMsMTEgQEAgc3RhdGljIGludCBfX2FxX3JpbmdfeGRwX2NsZWFuKHN0cnVjdCBhcV9yaW5nX3MgKnJ4X3JpbmcsXFxuIFxcdFxcdHhkcF9pbml0X2J1ZmYoXFx1MDAyNnhkcCwgZnJhbWVfc3osIFxcdTAwMjZyeF9yaW5nLVxcdTAwM2V4ZHBfcnhxKTtcXG4gXFx0XFx0eGRwX3ByZXBhcmVfYnVmZihcXHUwMDI2eGRwLCBoYXJkX3N0YXJ0LCByeF9yaW5nLVxcdTAwM2VwYWdlX29mZnNldCxcXG4gXFx0XFx0XFx0XFx0IGJ1ZmYtXFx1MDAzZWxlbiwgZmFsc2UpO1xcbitcXHRcXHQvKiBUaGUgeGRwX2J1ZmYgb3ducyB0aGUgYnVmZmVyJ3MgcGFnZSBwb29sIHJlZmVyZW5jZSBmcm9tXFxuK1xcdFxcdCAqIGhlcmUgb247IGl0IGNvbWVzIGJhY2sgdGhyb3VnaCB0aGUgTUVNX1RZUEVfUEFHRV9QT09MXFxuK1xcdFxcdCAqIG1lbW9yeSBtb2RlbCBvbiBldmVyeSBYRFAgdmVyZGljdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGJ1ZmYtXFx1MDAzZXJ4ZGF0YS5wYWdlID0gTlVMTDtcXG4gXFx0XFx0aWYgKCFidWZmLVxcdTAwM2Vpc19lb3ApIHtcXG4gXFx0XFx0XFx0aWYgKGFxX2FkZF9yeF9mcmFnbWVudChkZXYsIHJ4X3JpbmcsIGJ1ZmYsIFxcdTAwMjZ4ZHApKSB7XFxuIFxcdFxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJ4X3JpbmctXFx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcXG5AQCAtODI5LDYgKzgxNSw3IEBAIHN0YXRpYyBpbnQgX19hcV9yaW5nX3hkcF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpyeF9yaW5nLFxcbiBcXHRcXHRcXHRcXHRyeF9yaW5nLVxcdTAwM2VzdGF0cy5yeC5ieXRlcyArPSB4ZHBfZ2V0X2J1ZmZfbGVuKFxcdTAwMjZ4ZHApO1xcbiBcXHRcXHRcXHRcXHQrK3J4X3JpbmctXFx1MDAzZXN0YXRzLnJ4LnhkcF9hYm9ydGVkO1xcbiBcXHRcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cnhfcmluZy1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbitcXHRcXHRcXHRcXHR4ZHBfcmV0dXJuX2J1ZmYoXFx1MDAyNnhkcCk7XFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG5AQCAtOTIxLDE1ICs5MDgsMzEgQEAgaW50IGFxX3JpbmdfcnhfZmlsbChzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKVxcbiBcXG4gdm9pZCBhcV9yaW5nX3J4X2RlaW5pdChzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKVxcbiB7XFxuLVxcdGlmICghc2VsZilcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcbitcXHRpZiAoIXNlbGYgfHwgIXNlbGYtXFx1MDAzZWJ1ZmZfcmluZylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0Zm9yICg7IHNlbGYtXFx1MDAzZXN3X2hlYWQgIT0gc2VsZi1cXHUwMDNlc3dfdGFpbDtcXG4tXFx0XFx0c2VsZi1cXHUwMDNlc3dfaGVhZCA9IGFxX3JpbmdfbmV4dF9keChzZWxmLCBzZWxmLVxcdTAwM2Vzd19oZWFkKSkge1xcbi1cXHRcXHRzdHJ1Y3QgYXFfcmluZ19idWZmX3MgKmJ1ZmYgPSBcXHUwMDI2c2VsZi1cXHUwMDNlYnVmZl9yaW5nW3NlbGYtXFx1MDAzZXN3X2hlYWRdO1xcbitcXHQvKiBSZWxlYXNlIGV2ZXJ5IHBhZ2Ugc3RpbGwgb3duZWQgYnkgdGhlIHJpbmcuXFxuK1xcdCAqXFxuK1xcdCAqIFdhbGtpbmcgW3N3X2hlYWQsIHN3X3RhaWwpIGlzIG5vdCBlbm91Z2g6IHJlZmlsbCBpcyBiYXRjaGVkXFxuK1xcdCAqIChhcV9yaW5nX3J4X2ZpbGwoKSB3YWl0cyBmb3IgQVFfQ0ZHX1JYX1JFRklMTF9USFJFUyBmcmVlIHNsb3RzKSxcXG4rXFx0ICogc28gc2xvdHMgdGhhdCB3ZXJlIGNsZWFuZWQgYnV0IG5vdCB5ZXQgcmVwb3N0ZWQgYWNjdW11bGF0ZSBpbiB0aGVcXG4rXFx0ICogW3N3X3RhaWwsIHN3X2hlYWQpIGdhcCwgYW5kIHRoZXkga2VlcCB0aGVpciBwYWdlIGZvciByZXVzZS4gV2Fsa1xcbitcXHQgKiB0aGUgd2hvbGUgcmluZyBhbmQgcmVsZWFzZSB3aGF0ZXZlciBpcyBsZWZ0LlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNlbGYtXFx1MDAzZXNpemU7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgYXFfcmluZ19idWZmX3MgKmJ1ZmYgPSBcXHUwMDI2c2VsZi1cXHUwMDNlYnVmZl9yaW5nW2ldO1xcbitcXG4rXFx0XFx0aWYgKCFidWZmLVxcdTAwM2VyeGRhdGEucGFnZSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRhcV9mcmVlX3J4cGFnZShcXHUwMDI2YnVmZi1cXHUwMDNlcnhkYXRhLCBhcV9uaWNfZ2V0X2RldihzZWxmLVxcdTAwM2VhcV9uaWMpKTtcXG4rXFx0XFx0cGFnZV9wb29sX3B1dF9mdWxsX3BhZ2Uoc2VsZi1cXHUwMDNlcGdfcG9vbCwgYnVmZi1cXHUwMDNlcnhkYXRhLnBhZ2UsXFxuK1xcdFxcdFxcdFxcdFxcdGZhbHNlKTtcXG4rXFx0XFx0YnVmZi1cXHUwMDNlcnhkYXRhLnBhZ2UgPSBOVUxMO1xcbiBcXHR9XFxuK1xcbitcXHRzZWxmLVxcdTAwM2Vzd19oZWFkID0gc2VsZi1cXHUwMDNlc3dfdGFpbDtcXG4gfVxcbiBcXG4gdm9pZCBhcV9yaW5nX2ZyZWUoc3RydWN0IGFxX3JpbmdfcyAqc2VsZilcXG5AQCAtOTQwLDYgKzk0MywxMSBAQCB2b2lkIGFxX3JpbmdfZnJlZShzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKVxcbiBcXHRrZnJlZShzZWxmLVxcdTAwM2VidWZmX3JpbmcpO1xcbiBcXHRzZWxmLVxcdTAwM2VidWZmX3JpbmcgPSBOVUxMO1xcbiBcXG4rXFx0aWYgKHNlbGYtXFx1MDAzZXBnX3Bvb2wpIHtcXG4rXFx0XFx0cGFnZV9wb29sX2Rlc3Ryb3koc2VsZi1cXHUwMDNlcGdfcG9vbCk7XFxuK1xcdFxcdHNlbGYtXFx1MDAzZXBnX3Bvb2wgPSBOVUxMO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoc2VsZi1cXHUwMDNlZHhfcmluZykge1xcbiBcXHRcXHRkbWFfZnJlZV9jb2hlcmVudChhcV9uaWNfZ2V0X2RldihzZWxmLVxcdTAwM2VhcV9uaWMpLFxcbiBcXHRcXHRcXHRcXHQgIHNlbGYtXFx1MDAzZXNpemUgKiBzZWxmLVxcdTAwM2VkeF9zaXplLCBzZWxmLVxcdTAwM2VkeF9yaW5nLFxcbkBAIC05NzgsOSArOTg2LDYgQEAgdW5zaWduZWQgaW50IGFxX3JpbmdfZmlsbF9zdGF0c19kYXRhKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsIHU2NCAqZGF0YSlcXG4gXFx0XFx0XFx0ZGF0YVsrK2NvdW50XSA9IHNlbGYtXFx1MDAzZXN0YXRzLnJ4LmFsbG9jX2ZhaWxzO1xcbiBcXHRcXHRcXHRkYXRhWysrY291bnRdID0gc2VsZi1cXHUwMDNlc3RhdHMucnguc2tiX2FsbG9jX2ZhaWxzO1xcbiBcXHRcXHRcXHRkYXRhWysrY291bnRdID0gc2VsZi1cXHUwMDNlc3RhdHMucngucG9sbHM7XFxuLVxcdFxcdFxcdGRhdGFbKytjb3VudF0gPSBzZWxmLVxcdTAwM2VzdGF0cy5yeC5wZ19mbGlwcztcXG4tXFx0XFx0XFx0ZGF0YVsrK2NvdW50XSA9IHNlbGYtXFx1MDAzZXN0YXRzLnJ4LnBnX3JldXNlcztcXG4tXFx0XFx0XFx0ZGF0YVsrK2NvdW50XSA9IHNlbGYtXFx1MDAzZXN0YXRzLnJ4LnBnX2xvc3RzO1xcbiBcXHRcXHRcXHRkYXRhWysrY291bnRdID0gc2VsZi1cXHUwMDNlc3RhdHMucngueGRwX2Fib3J0ZWQ7XFxuIFxcdFxcdFxcdGRhdGFbKytjb3VudF0gPSBzZWxmLVxcdTAwM2VzdGF0cy5yeC54ZHBfZHJvcDtcXG4gXFx0XFx0XFx0ZGF0YVsrK2NvdW50XSA9IHNlbGYtXFx1MDAzZXN0YXRzLnJ4LnhkcF9wYXNzO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmhcXG5pbmRleCBhNzBiODgwYWRhNjdlOS4uNThiY2FkYjNlM2NjZDMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5oXFxuQEAgLTE3LDEyICsxNywxMiBAQFxcbiAjZGVmaW5lIEFRX1hEUF9UQUlMUk9PTVxcdFxcdFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSlcXG4gXFxuIHN0cnVjdCBwYWdlO1xcbitzdHJ1Y3QgcGFnZV9wb29sO1xcbiBzdHJ1Y3QgYXFfbmljX2NmZ19zO1xcbiBcXG4gc3RydWN0IGFxX3J4cGFnZSB7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHRkbWFfYWRkcl90IGRhZGRyO1xcbi1cXHR1bnNpZ25lZCBpbnQgb3JkZXI7XFxuIFxcdHVuc2lnbmVkIGludCBwZ19vZmY7XFxuIH07XFxuIFxcbkBAIC0xMDUsOSArMTA1LDYgQEAgc3RydWN0IGFxX3Jpbmdfc3RhdHNfcnhfcyB7XFxuIFxcdHU2NCBhbGxvY19mYWlscztcXG4gXFx0dTY0IHNrYl9hbGxvY19mYWlscztcXG4gXFx0dTY0IHBvbGxzO1xcbi1cXHR1NjQgcGdfbG9zdHM7XFxuLVxcdHU2NCBwZ19mbGlwcztcXG4tXFx0dTY0IHBnX3JldXNlcztcXG4gXFx0dTY0IHhkcF9hYm9ydGVkO1xcbiBcXHR1NjQgeGRwX2Ryb3A7XFxuIFxcdHU2NCB4ZHBfcGFzcztcXG5AQCAtMTUxLDYgKzE0OCw3IEBAIHN0cnVjdCBhcV9yaW5nX3Mge1xcbiBcXHR1MTYgdGFpbF9zaXplO1xcbiBcXHR1bmlvbiBhcV9yaW5nX3N0YXRzX3Mgc3RhdHM7XFxuIFxcdGRtYV9hZGRyX3QgZHhfcmluZ19wYTtcXG4rXFx0c3RydWN0IHBhZ2VfcG9vbCAqcGdfcG9vbDtcXG4gXFx0c3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZztcXG4gXFx0ZW51bSBhdGxfcmluZ190eXBlIHJpbmdfdHlwZTtcXG4gXFx0c3RydWN0IHhkcF9yeHFfaW5mbyB4ZHBfcnhxO1xcbkBAIC0yMDIsNiArMjAwLDcgQEAgdm9pZCBhcV9yaW5nX3VwZGF0ZV9xdWV1ZV9zdGF0ZShzdHJ1Y3QgYXFfcmluZ19zICpyaW5nKTtcXG4gdm9pZCBhcV9yaW5nX3F1ZXVlX3dha2Uoc3RydWN0IGFxX3JpbmdfcyAqcmluZyk7XFxuIHZvaWQgYXFfcmluZ19xdWV1ZV9zdG9wKHN0cnVjdCBhcV9yaW5nX3MgKnJpbmcpO1xcbiBib29sIGFxX3JpbmdfdHhfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqc2VsZik7XFxuK3ZvaWQgYXFfcmluZ190eF9kZWluaXQoc3RydWN0IGFxX3JpbmdfcyAqc2VsZik7XFxuIGludCBhcV94ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtX2ZyYW1lcyxcXG4gXFx0XFx0c3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcywgdTMyIGZsYWdzKTtcXG4gaW50IGFxX3JpbmdfcnhfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqc2VsZixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfdmVjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV92ZWMuY1xcbmluZGV4IDJmOTAzM2NlZWQ4Y2UzLi44ZTE1NDA1ZDQ5NDE5ZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV92ZWMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3ZlYy5jXFxuQEAgLTE0NiwyNSArMTQ2LDMyIEBAIGludCBhcV92ZWNfcmluZ19hbGxvYyhzdHJ1Y3QgYXFfdmVjX3MgKnNlbGYsIHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLFxcbiBcXHRcXHRhcV9uaWNfc2V0X3R4X3JpbmcoYXFfbmljLCBpZHhfcmluZywgcmluZyk7XFxuIFxcbiBcXHRcXHRyaW5nID0gXFx1MDAyNnNlbGYtXFx1MDAzZXJpbmdbaV1bQVFfVkVDX1JYX0lEXTtcXG4rXFx0XFx0LyogUmVnaXN0ZXJpbmcgdGhlIE1FTV9UWVBFX1BBR0VfUE9PTCBtZW1vcnkgbW9kZWwgYmVsb3cgbmVlZHNcXG4rXFx0XFx0ICogdGhlIHBhZ2UgcG9vbCBjcmVhdGVkIGJ5IGFxX3JpbmdfcnhfYWxsb2MoKSwgc28gdGhlIHJpbmcgaXNcXG4rXFx0XFx0ICogYWxsb2NhdGVkIGZpcnN0LiBJZiBhIHJlZ2lzdHJhdGlvbiBmYWlscywgdGhlIHJpbmcgaGFzIHRvIGJlXFxuK1xcdFxcdCAqIGZyZWVkIGV4cGxpY2l0bHk6IHJ4X3JpbmdzIGlzIG5vdCBpbmNyZW1lbnRlZCB5ZXQsIHNvIHRoZVxcbitcXHRcXHQgKiB1bndpbmQgdGhyb3VnaCBhcV92ZWNfcmluZ19mcmVlKCkgd291bGQgbm90IGNvdmVyIGl0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZXJyID0gYXFfcmluZ19yeF9hbGxvYyhyaW5nLCBhcV9uaWMsIGlkeF9yaW5nLCBhcV9uaWNfY2ZnKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBlcnJfZXhpdDtcXG4rXFxuIFxcdFxcdGlmICh4ZHBfcnhxX2luZm9fcmVnKFxcdTAwMjZyaW5nLVxcdTAwM2V4ZHBfcnhxLFxcbiBcXHRcXHRcXHRcXHQgICAgIGFxX25pYy1cXHUwMDNlbmRldiwgaWR4LFxcbiBcXHRcXHRcXHRcXHQgICAgIHNlbGYtXFx1MDAzZW5hcGkubmFwaV9pZCkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGFxX3JpbmdfZnJlZShyaW5nKTtcXG4gXFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0XFx0XFx0Z290byBlcnJfZXhpdDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoeGRwX3J4cV9pbmZvX3JlZ19tZW1fbW9kZWwoXFx1MDAyNnJpbmctXFx1MDAzZXhkcF9yeHEsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBNRU1fVFlQRV9QQUdFX1NIQVJFRCwgTlVMTCkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBNRU1fVFlQRV9QQUdFX1BPT0wsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICByaW5nLVxcdTAwM2VwZ19wb29sKSBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0eGRwX3J4cV9pbmZvX3VucmVnKFxcdTAwMjZyaW5nLVxcdTAwM2V4ZHBfcnhxKTtcXG4rXFx0XFx0XFx0YXFfcmluZ19mcmVlKHJpbmcpO1xcbiBcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRcXHRnb3RvIGVycl9leGl0O1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRlcnIgPSBhcV9yaW5nX3J4X2FsbG9jKHJpbmcsIGFxX25pYywgaWR4X3JpbmcsIGFxX25pY19jZmcpO1xcbi1cXHRcXHRpZiAoZXJyKSB7XFxuLVxcdFxcdFxcdHhkcF9yeHFfaW5mb191bnJlZyhcXHUwMDI2cmluZy1cXHUwMDNleGRwX3J4cSk7XFxuLVxcdFxcdFxcdGdvdG8gZXJyX2V4aXQ7XFxuLVxcdFxcdH1cXG4tXFxuIFxcdFxcdCsrc2VsZi1cXHUwMDNlcnhfcmluZ3M7XFxuIFxcdH1cXG4gXFxuQEAgLTI3NSw3ICsyODIsNyBAQCB2b2lkIGFxX3ZlY19kZWluaXQoc3RydWN0IGFxX3ZlY19zICpzZWxmKVxcbiBcXG4gXFx0Zm9yIChpID0gMFU7IHNlbGYtXFx1MDAzZXR4X3JpbmdzIFxcdTAwM2UgaTsgKytpKSB7XFxuIFxcdFxcdHJpbmcgPSBzZWxmLVxcdTAwM2VyaW5nW2ldO1xcbi1cXHRcXHRhcV9yaW5nX3R4X2NsZWFuKFxcdTAwMjZyaW5nW0FRX1ZFQ19UWF9JRF0pO1xcbitcXHRcXHRhcV9yaW5nX3R4X2RlaW5pdChcXHUwMDI2cmluZ1tBUV9WRUNfVFhfSURdKTtcXG4gXFx0XFx0YXFfcmluZ19yeF9kZWluaXQoXFx1MDAyNnJpbmdbQVFfVkVDX1JYX0lEXSk7XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjQ4OjI3LjI1NDQ5OTM0OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0NjgyNTg0NTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgYVF1YW50aWEgQVF0aW9uIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvKS4gVGhpcyBpcyBhIGRyaXZlciBmb3IgYSBwaHlzaWNhbCBQQ0llIG5ldHdvcmsgY2FyZCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTFjZGJhMjg0ZWY4YjFhMGQ1OWZlMzkxNWQ5ZGFmYTc3ODQ4ZGUxNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDEzOjQ4OjI0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL0tjb25maWdcbmluZGV4IGNlYzIwMThjODRhOWJjLi5jOGZiN2IzM2U1YjcxYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL0tjb25maWdcbkBAIC0yMCw2ICsyMCw3IEBAIGNvbmZpZyBBUVRJT05cbiBcdHRyaXN0YXRlIFwiYVF1YW50aWEgQVF0aW9uKHRtKSBTdXBwb3J0XCJcbiBcdGRlcGVuZHMgb24gUENJXG4gXHRkZXBlbmRzIG9uIE1BQ1NFQyB8fCBNQUNTRUM9blxuK1x0c2VsZWN0IFBBR0VfUE9PTFxuIFx0aGVscFxuIFx0ICBUaGlzIGVuYWJsZXMgdGhlIHN1cHBvcnQgZm9yIHRoZSBhUXVhbnRpYSBBUXRpb24odG0pIEV0aGVybmV0IGNhcmQuXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jXG5pbmRleCA0MjBhZjk1OGQ0ODYxYS4uMGY1MTI1YmQyMzE1OTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuY1xuQEAgLTEwMCw5ICsxMDAsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFxX2V0aHRvb2xfcXVldWVfcnhfc3RhdF9uYW1lc1tdID0ge1xuIFx0XCIlc1F1ZXVlWyVkXSBBbGxvY0ZhaWxzXCIsXG4gXHRcIiVzUXVldWVbJWRdIFNrYkFsbG9jRmFpbHNcIixcbiBcdFwiJXNRdWV1ZVslZF0gUG9sbHNcIixcbi1cdFwiJXNRdWV1ZVslZF0gUGFnZUZsaXBzXCIsXG4tXHRcIiVzUXVldWVbJWRdIFBhZ2VSZXVzZXNcIixcbi1cdFwiJXNRdWV1ZVslZF0gUGFnZUZyZWVzXCIsXG4gXHRcIiVzUXVldWVbJWRdIFhkcEFib3J0XCIsXG4gXHRcIiVzUXVldWVbJWRdIFhkcERyb3BcIixcbiBcdFwiJXNRdWV1ZVslZF0gWGRwUGFzc1wiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcHRwLmNcbmluZGV4IDU1OGFjOTIzN2Y3NTllLi4zYTQwZDk4NmNkNjc4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9wdHAuY1xuQEAgLTEzLDYgKzEzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xhc3NpZnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xvY2tzb3VyY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC94ZHAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiYXFfbmljLmhcIlxuICNpbmNsdWRlIFwiYXFfcHRwLmhcIlxuQEAgLTExOTIsMTIgKzExOTMsMjMgQEAgaW50IGFxX3B0cF9yaW5nX2FsbG9jKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljKVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfZXhpdF9wdHBfdHg7XG4gXG4rXHRlcnIgPSB4ZHBfcnhxX2luZm9fcmVnKFx1MDAyNmFxX3B0cC1cdTAwM2VwdHBfcngueGRwX3J4cSwgYXFfbmljLVx1MDAzZW5kZXYsXG4rXHRcdFx0ICAgICAgIHJ4X3JpbmdfaWR4LCBhcV9wdHAtXHUwMDNlbmFwaS5uYXBpX2lkKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX2V4aXRfcHRwX3J4O1xuK1xuK1x0ZXJyID0geGRwX3J4cV9pbmZvX3JlZ19tZW1fbW9kZWwoXHUwMDI2YXFfcHRwLVx1MDAzZXB0cF9yeC54ZHBfcnhxLFxuK1x0XHRcdFx0XHQgTUVNX1RZUEVfUEFHRV9QT09MLFxuK1x0XHRcdFx0XHQgYXFfcHRwLVx1MDAzZXB0cF9yeC5wZ19wb29sKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX2V4aXRfeGRwX3J4cTtcbitcbiBcdGlmIChhcV9wdHAtXHUwMDNlYTFfcHRwKSB7XG4gXHRcdGVyciA9IGFxX3JpbmdfaHd0c19yeF9hbGxvYyhcdTAwMjZhcV9wdHAtXHUwMDNlaHd0c19yeCwgYXFfbmljLCBQVFBfSFdTVF9SSU5HX0lEWCxcbiBcdFx0XHRcdFx0ICAgIGFxX25pYy1cdTAwM2VhcV9uaWNfY2ZnLnJ4ZHMsXG4gXHRcdFx0XHRcdCAgICBhcV9uaWMtXHUwMDNlYXFfbmljX2NmZy5hcV9od19jYXBzLVx1MDAzZXJ4ZF9zaXplKTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGVycl9leGl0X3B0cF9yeDtcbitcdFx0XHRnb3RvIGVycl9leGl0X3hkcF9yeHE7XG4gXHR9XG4gXG4gXHRlcnIgPSBhcV9wdHBfc2tiX3JpbmdfaW5pdChcdTAwMjZhcV9wdHAtXHUwMDNlc2tiX3JpbmcsIGFxX25pYy1cdTAwM2VhcV9uaWNfY2ZnLnJ4ZHMpO1xuQEAgLTEyMTcsNiArMTIyOSw4IEBAIGludCBhcV9wdHBfcmluZ19hbGxvYyhzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYylcbiBlcnJfZXhpdF9od3RzX3J4OlxuIFx0aWYgKGFxX3B0cC1cdTAwM2VhMV9wdHApXG4gXHRcdGFxX3JpbmdfaHd0c19yeF9mcmVlKFx1MDAyNmFxX3B0cC1cdTAwM2Vod3RzX3J4KTtcbitlcnJfZXhpdF94ZHBfcnhxOlxuK1x0eGRwX3J4cV9pbmZvX3VucmVnKFx1MDAyNmFxX3B0cC1cdTAwM2VwdHBfcngueGRwX3J4cSk7XG4gZXJyX2V4aXRfcHRwX3J4OlxuIFx0YXFfcmluZ19mcmVlKFx1MDAyNmFxX3B0cC1cdTAwM2VwdHBfcngpO1xuIGVycl9leGl0X3B0cF90eDpcbkBAIC0xMjMzLDYgKzEyNDcsOCBAQCB2b2lkIGFxX3B0cF9yaW5nX2ZyZWUoc3RydWN0IGFxX25pY19zICphcV9uaWMpXG4gXHRcdHJldHVybjtcbiBcbiBcdGFxX3JpbmdfZnJlZShcdTAwMjZhcV9wdHAtXHUwMDNlcHRwX3R4KTtcbitcdGlmICh4ZHBfcnhxX2luZm9faXNfcmVnKFx1MDAyNmFxX3B0cC1cdTAwM2VwdHBfcngueGRwX3J4cSkpXG4rXHRcdHhkcF9yeHFfaW5mb191bnJlZyhcdTAwMjZhcV9wdHAtXHUwMDNlcHRwX3J4LnhkcF9yeHEpO1xuIFx0YXFfcmluZ19mcmVlKFx1MDAyNmFxX3B0cC1cdTAwM2VwdHBfcngpO1xuIFx0aWYgKGFxX3B0cC1cdTAwM2VhMV9wdHApXG4gXHRcdGFxX3JpbmdfaHd0c19yeF9mcmVlKFx1MDAyNmFxX3B0cC1cdTAwM2Vod3RzX3J4KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmNcbmluZGV4IDhmZjA3ZGUyYmQ1MjQwLi45ZGQ4ODE3MTA1OTQyNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jXG5AQCAtMTQsMTIwICsxNCwzNyBAQFxuICNpbmNsdWRlIFwiYXFfdmVjLmhcIlxuICNpbmNsdWRlIFwiYXFfbWFpbi5oXCJcbiBcbisjaW5jbHVkZSBcdTAwM2NuZXQvcGFnZV9wb29sL2hlbHBlcnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZHAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbHRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX3RyYWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiBcbi1zdGF0aWMgdm9pZCBhcV9nZXRfcnhwYWdlc194ZHAoc3RydWN0IGFxX3JpbmdfYnVmZl9zICpidWZmLFxuLVx0XHRcdCAgICAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi17XG4tXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaW5mbztcbi1cdGludCBpO1xuLVxuLVx0aWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKSB7XG4tXHRcdHNpbmZvID0geGRwX2dldF9zaGFyZWRfaW5mb19mcm9tX2J1ZmYoeGRwKTtcbi1cbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2luZm8tXHUwMDNlbnJfZnJhZ3M7IGkrKykge1xuLVx0XHRcdHNrYl9mcmFnX3QgKmZyYWcgPSBcdTAwMjZzaW5mby1cdTAwM2VmcmFnc1tpXTtcbi1cbi1cdFx0XHRwYWdlX3JlZl9pbmMoc2tiX2ZyYWdfcGFnZShmcmFnKSk7XG4tXHRcdH1cbi1cdH1cbi1cdHBhZ2VfcmVmX2luYyhidWZmLVx1MDAzZXJ4ZGF0YS5wYWdlKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGFxX2ZyZWVfcnhwYWdlKHN0cnVjdCBhcV9yeHBhZ2UgKnJ4cGFnZSwgc3RydWN0IGRldmljZSAqZGV2KVxuLXtcbi1cdHVuc2lnbmVkIGludCBsZW4gPSBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIHJ4cGFnZS1cdTAwM2VvcmRlcjtcbi1cbi1cdGRtYV91bm1hcF9wYWdlKGRldiwgcnhwYWdlLVx1MDAzZWRhZGRyLCBsZW4sIERNQV9GUk9NX0RFVklDRSk7XG4tXG4tXHQvKiBEcm9wIHRoZSByZWYgZm9yIGJlaW5nIGluIHRoZSByaW5nLiAqL1xuLVx0X19mcmVlX3BhZ2VzKHJ4cGFnZS1cdTAwM2VwYWdlLCByeHBhZ2UtXHUwMDNlb3JkZXIpO1xuLVx0cnhwYWdlLVx1MDAzZXBhZ2UgPSBOVUxMO1xuLX1cbi1cbi1zdGF0aWMgaW50IGFxX2FsbG9jX3J4cGFnZXMoc3RydWN0IGFxX3J4cGFnZSAqcnhwYWdlLCBzdHJ1Y3QgYXFfcmluZ19zICpyeF9yaW5nKVxuK3N0YXRpYyBpbnQgYXFfZ2V0X3J4cGFnZXMoc3RydWN0IGFxX3JpbmdfcyAqc2VsZiwgc3RydWN0IGFxX3JpbmdfYnVmZl9zICpyeGJ1ZilcbiB7XG4tXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhcV9uaWNfZ2V0X2RldihyeF9yaW5nLVx1MDAzZWFxX25pYyk7XG4tXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSByeF9yaW5nLVx1MDAzZXBhZ2Vfb3JkZXI7XG4rXHR1bnNpZ25lZCBpbnQgc2l6ZSA9IHNlbGYtXHUwMDNlcGFnZV9vZmZzZXQgKyBzZWxmLVx1MDAzZWZyYW1lX21heCArXG4rXHRcdFx0ICAgIHNlbGYtXHUwMDNldGFpbF9zaXplO1xuK1x0dW5zaWduZWQgaW50IHBnX29mZjtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuLVx0aW50IHJldCA9IC1FTk9NRU07XG4tXHRkbWFfYWRkcl90IGRhZGRyO1xuLVxuLVx0cGFnZSA9IGRldl9hbGxvY19wYWdlcyhvcmRlcik7XG4tXHRpZiAodW5saWtlbHkoIXBhZ2UpKVxuLVx0XHRnb3RvIGVycl9leGl0O1xuLVxuLVx0ZGFkZHIgPSBkbWFfbWFwX3BhZ2UoZGV2LCBwYWdlLCAwLCBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyLFxuLVx0XHRcdCAgICAgRE1BX0ZST01fREVWSUNFKTtcbi1cbi1cdGlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRhZGRyKSkpXG4tXHRcdGdvdG8gZnJlZV9wYWdlO1xuLVxuLVx0cnhwYWdlLVx1MDAzZXBhZ2UgPSBwYWdlO1xuLVx0cnhwYWdlLVx1MDAzZWRhZGRyID0gZGFkZHI7XG4tXHRyeHBhZ2UtXHUwMDNlb3JkZXIgPSBvcmRlcjtcbi1cdHJ4cGFnZS1cdTAwM2VwZ19vZmYgPSByeF9yaW5nLVx1MDAzZXBhZ2Vfb2Zmc2V0O1xuLVxuLVx0cmV0dXJuIDA7XG4tXG4tZnJlZV9wYWdlOlxuLVx0X19mcmVlX3BhZ2VzKHBhZ2UsIG9yZGVyKTtcbiBcbi1lcnJfZXhpdDpcbi1cdHJldHVybiByZXQ7XG4tfVxuK1x0LyogQnVmZmVycyB3aG9zZSBwYWdlIHdhcyBub3QgcGFzc2VkIHVwIHRoZSBzdGFjayBhcmUgcmVwb3N0ZWRcbitcdCAqIHdpdGggdGhlIGRhdGEgdGhleSBhbHJlYWR5IGNhcnJ5IGRpc2NhcmRlZC5cbitcdCAqL1xuK1x0aWYgKHJ4YnVmLVx1MDAzZXJ4ZGF0YS5wYWdlKVxuK1x0XHRyZXR1cm4gMDtcbiBcbi1zdGF0aWMgaW50IGFxX2dldF9yeHBhZ2VzKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsIHN0cnVjdCBhcV9yaW5nX2J1ZmZfcyAqcnhidWYpXG4te1xuLVx0dW5zaWduZWQgaW50IG9yZGVyID0gc2VsZi1cdTAwM2VwYWdlX29yZGVyO1xuLVx0dTE2IHBhZ2Vfb2Zmc2V0ID0gc2VsZi1cdTAwM2VwYWdlX29mZnNldDtcbi1cdHUxNiBmcmFtZV9tYXggPSBzZWxmLVx1MDAzZWZyYW1lX21heDtcbi1cdHUxNiB0YWlsX3NpemUgPSBzZWxmLVx1MDAzZXRhaWxfc2l6ZTtcbi1cdGludCByZXQ7XG4tXG4tXHRpZiAocnhidWYtXHUwMDNlcnhkYXRhLnBhZ2UpIHtcbi1cdFx0LyogT25lIG1lYW5zIHJpbmcgaXMgdGhlIG9ubHkgdXNlciBhbmQgY2FuIHJldXNlICovXG4tXHRcdGlmIChwYWdlX3JlZl9jb3VudChyeGJ1Zi1cdTAwM2VyeGRhdGEucGFnZSkgXHUwMDNlIDEpIHtcbi1cdFx0XHQvKiBUcnkgcmV1c2UgYnVmZmVyICovXG4tXHRcdFx0cnhidWYtXHUwMDNlcnhkYXRhLnBnX29mZiArPSBmcmFtZV9tYXggKyBwYWdlX29mZnNldCArXG4tXHRcdFx0XHRcdFx0dGFpbF9zaXplO1xuLVx0XHRcdGlmIChyeGJ1Zi1cdTAwM2VyeGRhdGEucGdfb2ZmICsgZnJhbWVfbWF4ICsgdGFpbF9zaXplIFx1MDAzYz1cbi1cdFx0XHQgICAgKFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpKSB7XG4tXHRcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnNlbGYtXHUwMDNlc3RhdHMucnguc3luY3ApO1xuLVx0XHRcdFx0c2VsZi1cdTAwM2VzdGF0cy5yeC5wZ19mbGlwcysrO1xuLVx0XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c2VsZi1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4tXG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdC8qIEJ1ZmZlciBleGhhdXN0ZWQuIFdlIGhhdmUgb3RoZXIgdXNlcnMgYW5kXG4tXHRcdFx0XHQgKiBzaG91bGQgcmVsZWFzZSB0aGlzIHBhZ2UgYW5kIHJlYWxsb2Ncbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0YXFfZnJlZV9yeHBhZ2UoXHUwMDI2cnhidWYtXHUwMDNlcnhkYXRhLFxuLVx0XHRcdFx0XHQgICAgICAgYXFfbmljX2dldF9kZXYoc2VsZi1cdTAwM2VhcV9uaWMpKTtcbi1cdFx0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c2VsZi1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4tXHRcdFx0XHRzZWxmLVx1MDAzZXN0YXRzLnJ4LnBnX2xvc3RzKys7XG4tXHRcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzZWxmLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cnhidWYtXHUwMDNlcnhkYXRhLnBnX29mZiA9IHBhZ2Vfb2Zmc2V0O1xuLVx0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c2VsZi1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4tXHRcdFx0c2VsZi1cdTAwM2VzdGF0cy5yeC5wZ19yZXVzZXMrKztcbi1cdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzZWxmLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbi1cdFx0fVxuK1x0cGFnZSA9IHBhZ2VfcG9vbF9kZXZfYWxsb2NfZnJhZyhzZWxmLVx1MDAzZXBnX3Bvb2wsIFx1MDAyNnBnX29mZiwgc2l6ZSk7XG4rXHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XG4rXHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c2VsZi1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4rXHRcdHNlbGYtXHUwMDNlc3RhdHMucnguYWxsb2NfZmFpbHMrKztcbitcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c2VsZi1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuLVx0aWYgKCFyeGJ1Zi1cdTAwM2VyeGRhdGEucGFnZSkge1xuLVx0XHRyZXQgPSBhcV9hbGxvY19yeHBhZ2VzKFx1MDAyNnJ4YnVmLVx1MDAzZXJ4ZGF0YSwgc2VsZik7XG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnNlbGYtXHUwMDNlc3RhdHMucnguc3luY3ApO1xuLVx0XHRcdHNlbGYtXHUwMDNlc3RhdHMucnguYWxsb2NfZmFpbHMrKztcbi1cdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzZWxmLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbi1cdFx0fVxuLVx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuK1x0cnhidWYtXHUwMDNlcnhkYXRhLnBhZ2UgPSBwYWdlO1xuK1x0cnhidWYtXHUwMDNlcnhkYXRhLmRhZGRyID0gcGFnZV9wb29sX2dldF9kbWFfYWRkcihwYWdlKTtcbitcdHJ4YnVmLVx1MDAzZXJ4ZGF0YS5wZ19vZmYgPSBwZ19vZmYgKyBzZWxmLVx1MDAzZXBhZ2Vfb2Zmc2V0O1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTE3OSw2ICs5NiwxNSBAQCBpbnQgYXFfcmluZ19yeF9hbGxvYyhzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLFxuIFx0XHQgICAgIHVuc2lnbmVkIGludCBpZHgsXG4gXHRcdCAgICAgc3RydWN0IGFxX25pY19jZmdfcyAqYXFfbmljX2NmZylcbiB7XG4rXHRzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyBwcF9wYXJhbXMgPSB7XG4rXHRcdC5mbGFncyA9IFBQX0ZMQUdfRE1BX01BUCB8IFBQX0ZMQUdfRE1BX1NZTkNfREVWLFxuK1x0XHQucG9vbF9zaXplID0gYXFfbmljX2NmZy1cdTAwM2VyeGRzLFxuK1x0XHQubmlkID0gTlVNQV9OT19OT0RFLFxuK1x0XHQuZGV2ID0gYXFfbmljX2dldF9kZXYoYXFfbmljKSxcbitcdFx0LmRtYV9kaXIgPSBETUFfRlJPTV9ERVZJQ0UsXG4rXHR9O1xuK1x0c3RydWN0IHBhZ2VfcG9vbCAqcG9vbDtcbitcbiBcdHNlbGYtXHUwMDNlYXFfbmljID0gYXFfbmljO1xuIFx0c2VsZi1cdTAwM2VpZHggPSBpZHg7XG4gXHRzZWxmLVx1MDAzZXNpemUgPSBhcV9uaWNfY2ZnLVx1MDAzZXJ4ZHM7XG5AQCAtMjAwLDYgKzEyNiwxOCBAQCBpbnQgYXFfcmluZ19yeF9hbGxvYyhzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLFxuIFx0XHRzZWxmLVx1MDAzZXRhaWxfc2l6ZSA9IDA7XG4gXHR9XG4gXG4rXHRwcF9wYXJhbXMub3JkZXIgPSBzZWxmLVx1MDAzZXBhZ2Vfb3JkZXI7XG4rXHRwcF9wYXJhbXMubWF4X2xlbiA9IFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgc2VsZi1cdTAwM2VwYWdlX29yZGVyO1xuK1xuK1x0cG9vbCA9IHBhZ2VfcG9vbF9jcmVhdGUoXHUwMDI2cHBfcGFyYW1zKTtcbitcdGlmIChJU19FUlIocG9vbCkpXG4rXHRcdHJldHVybiBQVFJfRVJSKHBvb2wpO1xuK1xuK1x0c2VsZi1cdTAwM2VwZ19wb29sID0gcG9vbDtcbitcbitcdC8qIE9uIGZhaWx1cmUgYXFfcmluZ19hbGxvYygpIGNhbGxzIGFxX3JpbmdfZnJlZSgpLCB3aGljaCBhbHNvXG4rXHQgKiBkZXN0cm95cyB0aGUgcGFnZSBwb29sLlxuK1x0ICovXG4gXHRyZXR1cm4gYXFfcmluZ19hbGxvYyhzZWxmLCBhcV9uaWMpO1xuIH1cbiBcbkBAIC0zNDYsNyArMjg0LDExIEBAIGJvb2wgYXFfcmluZ190eF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKVxuIFx0XHRcdCsrc2VsZi1cdTAwM2VzdGF0cy50eC5wYWNrZXRzO1xuIFx0XHRcdHNlbGYtXHUwMDNlc3RhdHMudHguYnl0ZXMgKz0geGRwX2dldF9mcmFtZV9sZW4oYnVmZi1cdTAwM2V4ZHBmKTtcbiBcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzZWxmLVx1MDAzZXN0YXRzLnR4LnN5bmNwKTtcbi1cdFx0XHR4ZHBfcmV0dXJuX2ZyYW1lX3J4X25hcGkoYnVmZi1cdTAwM2V4ZHBmKTtcbitcdFx0XHQvKiBGcmFtZXMgcXVldWVkIHZpYSBuZG9feGRwX3htaXQoKSBtYXkgY29tZSBmcm9tIGFcbitcdFx0XHQgKiBwYWdlIHBvb2wgb3duZWQgYnkgYW5vdGhlciBOQVBJIGNvbnRleHQ6IG5vIGRpcmVjdFxuK1x0XHRcdCAqIHJlY3ljbGluZy5cbitcdFx0XHQgKi9cbitcdFx0XHR4ZHBfcmV0dXJuX2ZyYW1lKGJ1ZmYtXHUwMDNleGRwZik7XG4gXHRcdH1cbiBcbiBvdXQ6XG5AQCAtMzYwLDYgKzMwMiwzNSBAQCBib29sIGFxX3JpbmdfdHhfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqc2VsZilcbiBcdHJldHVybiAhIWJ1ZGdldDtcbiB9XG4gXG4rdm9pZCBhcV9yaW5nX3R4X2RlaW5pdChzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKVxuK3tcbitcdGlmICghc2VsZilcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yICg7IHNlbGYtXHUwMDNlc3dfaGVhZCAhPSBzZWxmLVx1MDAzZXN3X3RhaWw7XG4rXHRcdHNlbGYtXHUwMDNlc3dfaGVhZCA9IGFxX3JpbmdfbmV4dF9keChzZWxmLCBzZWxmLVx1MDAzZXN3X2hlYWQpKSB7XG4rXHRcdHN0cnVjdCBhcV9yaW5nX2J1ZmZfcyAqYnVmZiA9IFx1MDAyNnNlbGYtXHUwMDNlYnVmZl9yaW5nW3NlbGYtXHUwMDNlc3dfaGVhZF07XG4rXHRcdHN0cnVjdCBkZXZpY2UgKm5kZXYgPSBhcV9uaWNfZ2V0X2RldihzZWxmLVx1MDAzZWFxX25pYyk7XG4rXG4rXHRcdGlmIChidWZmLVx1MDAzZWlzX21hcHBlZCkge1xuK1x0XHRcdGlmIChidWZmLVx1MDAzZWlzX3NvcCkge1xuK1x0XHRcdFx0ZG1hX3VubWFwX3NpbmdsZShuZGV2LCBidWZmLVx1MDAzZXBhLCBidWZmLVx1MDAzZWxlbixcbitcdFx0XHRcdFx0XHQgRE1BX1RPX0RFVklDRSk7XG4rXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdGRtYV91bm1hcF9wYWdlKG5kZXYsIGJ1ZmYtXHUwMDNlcGEsIGJ1ZmYtXHUwMDNlbGVuLFxuK1x0XHRcdFx0XHQgICAgICAgRE1BX1RPX0RFVklDRSk7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXG4rXHRcdGlmIChidWZmLVx1MDAzZWlzX2VvcCkge1xuK1x0XHRcdGlmIChidWZmLVx1MDAzZXNrYilcbitcdFx0XHRcdGRldl9rZnJlZV9za2JfYW55KGJ1ZmYtXHUwMDNlc2tiKTtcbitcdFx0XHRlbHNlIGlmIChidWZmLVx1MDAzZXhkcGYpXG4rXHRcdFx0XHR4ZHBfcmV0dXJuX2ZyYW1lKGJ1ZmYtXHUwMDNleGRwZik7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgYXFfcnhfY2hlY2tzdW0oc3RydWN0IGFxX3JpbmdfcyAqc2VsZixcbiBcdFx0XHQgICBzdHJ1Y3QgYXFfcmluZ19idWZmX3MgKmJ1ZmYsXG4gXHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbkBAIC00MDgsMjIgKzM3OSwxNSBAQCBpbnQgYXFfeGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG51bV9mcmFtZXMsXG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbi1cdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdFx0c3RydWN0IGFxX3JpbmdfYnVmZl9zICpidWZmKVxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGY7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuIFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcbiBcdGlmICh1bmxpa2VseSgheGRwZikpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0c2tiID0geGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHhkcGYsIGRldik7XG4tXHRpZiAoIXNrYilcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRhcV9nZXRfcnhwYWdlc194ZHAoYnVmZiwgeGRwKTtcbi1cdHJldHVybiBza2I7XG4rXHRyZXR1cm4geGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHhkcGYsIGRldik7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX3J1bl9wcm9nKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLFxuQEAgLTQ0NCw4ICs0MDgsMTYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsXG4gXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeF9yaW5nLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbiBcbiBcdHByb2cgPSBSRUFEX09OQ0UocnhfcmluZy1cdTAwM2V4ZHBfcHJvZyk7XG4tXHRpZiAoIXByb2cpXG4tXHRcdHJldHVybiBhcV94ZHBfYnVpbGRfc2tiKHhkcCwgYXFfbmljLVx1MDAzZW5kZXYsIGJ1ZmYpO1xuK1x0aWYgKCFwcm9nKSB7XG4rXHRcdHNrYiA9IGFxX3hkcF9idWlsZF9za2IoeGRwLCBhcV9uaWMtXHUwMDNlbmRldik7XG4rXHRcdC8qIFRoZSByaW5nIGhhcyBhbHJlYWR5IGhhbmRlZCBpdHMgcGFnZSBwb29sIHJlZmVyZW5jZSB0byB0aGVcbitcdFx0ICogeGRwX2J1ZmYsIHNvIGlmIHRoZSBza2IgY291bGQgbm90IGJlIGJ1aWx0IHRoZSBidWZmZXIgbXVzdFxuK1x0XHQgKiBiZSByZXR1cm5lZCB0byB0aGUgcG9vbCBoZXJlIG9yIGl0cyBmcmFnbWVudHMgd291bGQgbGVhay5cbitcdFx0ICovXG4rXHRcdGlmICghc2tiKVxuK1x0XHRcdHhkcF9yZXR1cm5fYnVmZih4ZHApO1xuK1x0XHRyZXR1cm4gc2tiO1xuK1x0fVxuIFxuIFx0cHJlZmV0Y2h3KHhkcC1cdTAwM2VkYXRhX2hhcmRfc3RhcnQpOyAvKiB4ZHBfZnJhbWUgd3JpdGUgKi9cbiBcbkBAIC00NTYsNyArNDI4LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsXG4gXHRhY3QgPSBicGZfcHJvZ19ydW5feGRwKHByb2csIHhkcCk7XG4gXHRzd2l0Y2ggKGFjdCkge1xuIFx0Y2FzZSBYRFBfUEFTUzpcbi1cdFx0c2tiID0gYXFfeGRwX2J1aWxkX3NrYih4ZHAsIGFxX25pYy1cdTAwM2VuZGV2LCBidWZmKTtcbitcdFx0c2tiID0gYXFfeGRwX2J1aWxkX3NrYih4ZHAsIGFxX25pYy1cdTAwM2VuZGV2KTtcbiBcdFx0aWYgKCFza2IpXG4gXHRcdFx0Z290byBvdXRfYWJvcnRlZDtcbiBcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyeF9yaW5nLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbkBAIC00NzQsNyArNDQ2LDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsXG4gXHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cnhfcmluZy1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4gXHRcdCsrcnhfcmluZy1cdTAwM2VzdGF0cy5yeC54ZHBfdHg7XG4gXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4X3JpbmctXHUwMDNlc3RhdHMucnguc3luY3ApO1xuLVx0XHRhcV9nZXRfcnhwYWdlc194ZHAoYnVmZiwgeGRwKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFhEUF9SRURJUkVDVDpcbiBcdFx0aWYgKHhkcF9kb19yZWRpcmVjdChhcV9uaWMtXHUwMDNlbmRldiwgeGRwLCBwcm9nKSBcdTAwM2MgMClcbkBAIC00ODMsNyArNDU0LDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsXG4gXHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cnhfcmluZy1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4gXHRcdCsrcnhfcmluZy1cdTAwM2VzdGF0cy5yeC54ZHBfcmVkaXJlY3Q7XG4gXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4X3JpbmctXHUwMDNlc3RhdHMucnguc3luY3ApO1xuLVx0XHRhcV9nZXRfcnhwYWdlc194ZHAoYnVmZiwgeGRwKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRmYWxsdGhyb3VnaDtcbkBAIC00OTQsMTEgKzQ2NCwxMyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFxX3hkcF9ydW5fcHJvZyhzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYyxcbiBcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cnhfcmluZy1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4gXHRcdHRyYWNlX3hkcF9leGNlcHRpb24oYXFfbmljLVx1MDAzZW5kZXYsIHByb2csIGFjdCk7XG4gXHRcdGJwZl93YXJuX2ludmFsaWRfeGRwX2FjdGlvbihhcV9uaWMtXHUwMDNlbmRldiwgcHJvZywgYWN0KTtcbitcdFx0eGRwX3JldHVybl9idWZmKHhkcCk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBYRFBfRFJPUDpcbiBcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyeF9yaW5nLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbiBcdFx0KytyeF9yaW5nLVx1MDAzZXN0YXRzLnJ4LnhkcF9kcm9wO1xuIFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeF9yaW5nLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbitcdFx0eGRwX3JldHVybl9idWZmKHhkcCk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuQEAgLTUxNyw4ICs0ODksMTEgQEAgc3RhdGljIGJvb2wgYXFfYWRkX3J4X2ZyYWdtZW50KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdGRvIHtcbiBcdFx0c2tiX2ZyYWdfdCAqZnJhZztcbiBcbi1cdFx0aWYgKHVubGlrZWx5KHNpbmZvLVx1MDAzZW5yX2ZyYWdzIFx1MDAzZT0gTUFYX1NLQl9GUkFHUykpXG4rXHRcdGlmICh1bmxpa2VseShzaW5mby1cdTAwM2Vucl9mcmFncyBcdTAwM2U9IE1BWF9TS0JfRlJBR1MpKSB7XG4rXHRcdFx0LyogQXR0YWNoZWQgZnJhZ3MgbXVzdCByZWFjaCB4ZHBfcmV0dXJuX2J1ZmYoKSAqL1xuK1x0XHRcdHhkcF9idWZmX3NldF9mcmFnc19mbGFnKHhkcCk7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdH1cbiBcbiBcdFx0ZnJhZyA9IFx1MDAyNnNpbmZvLVx1MDAzZWZyYWdzW3NpbmZvLVx1MDAzZW5yX2ZyYWdzKytdO1xuIFx0XHRidWZmXyA9IFx1MDAyNnJpbmctXHUwMDNlYnVmZl9yaW5nW2J1ZmZfLVx1MDAzZW5leHRdO1xuQEAgLTU0Miw2ICs1MTcsMTEgQEAgc3RhdGljIGJvb2wgYXFfYWRkX3J4X2ZyYWdtZW50KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0aWYgKHBhZ2VfaXNfcGZtZW1hbGxvYyhidWZmXy1cdTAwM2VyeGRhdGEucGFnZSkpXG4gXHRcdFx0eGRwX2J1ZmZfc2V0X2ZyYWdfcGZtZW1hbGxvYyh4ZHApO1xuIFxuK1x0XHQvKiBUaGUgZnJhZydzIHBhZ2UgcG9vbCByZWZlcmVuY2UgaXMgb3duZWQgYnkgdGhlIHhkcF9idWZmXG4rXHRcdCAqIGZyb20gbm93IG9uLlxuK1x0XHQgKi9cbitcdFx0YnVmZl8tXHUwMDNlcnhkYXRhLnBhZ2UgPSBOVUxMO1xuK1xuIFx0fSB3aGlsZSAoIWJ1ZmZfLVx1MDAzZWlzX2VvcCk7XG4gXG4gXHR4ZHBfYnVmZl9zZXRfZnJhZ3NfZmxhZyh4ZHApO1xuQEAgLTY0NSw2ICs2MjUsNyBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ19yeF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRnb3RvIGVycl9leGl0O1xuIFx0XHR9XG4rXHRcdHNrYl9tYXJrX2Zvcl9yZWN5Y2xlKHNrYik7XG4gXHRcdGlmIChpc19wdHBfcmluZylcbiBcdFx0XHRidWZmLVx1MDAzZWxlbiAtPVxuIFx0XHRcdFx0YXFfcHRwX2V4dHJhY3RfdHMoc2VsZi1cdTAwM2VhcV9uaWMsIHNrYl9od3RzdGFtcHMoc2tiKSxcbkBAIC02NjUsNyArNjQ2LDcgQEAgc3RhdGljIGludCBfX2FxX3JpbmdfcnhfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqc2VsZiwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0XHRcdFx0XHRidWZmLVx1MDAzZXJ4ZGF0YS5wZ19vZmYgKyBoZHJfbGVuLFxuIFx0XHRcdFx0XHRidWZmLVx1MDAzZWxlbiAtIGhkcl9sZW4sXG4gXHRcdFx0XHRcdHNlbGYtXHUwMDNlZnJhbWVfbWF4KTtcbi1cdFx0XHRwYWdlX3JlZl9pbmMoYnVmZi1cdTAwM2VyeGRhdGEucGFnZSk7XG4rXHRcdFx0YnVmZi1cdTAwM2VyeGRhdGEucGFnZSA9IE5VTEw7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKCFidWZmLVx1MDAzZWlzX2VvcCkge1xuQEAgLTY4NCw3ICs2NjUsNyBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ19yeF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0XHRcdFx0YnVmZl8tXHUwMDNlcnhkYXRhLnBnX29mZixcbiBcdFx0XHRcdFx0XHRidWZmXy1cdTAwM2VsZW4sXG4gXHRcdFx0XHRcdFx0c2VsZi1cdTAwM2VmcmFtZV9tYXgpO1xuLVx0XHRcdFx0cGFnZV9yZWZfaW5jKGJ1ZmZfLVx1MDAzZXJ4ZGF0YS5wYWdlKTtcbitcdFx0XHRcdGJ1ZmZfLVx1MDAzZXJ4ZGF0YS5wYWdlID0gTlVMTDtcbiBcdFx0XHRcdGJ1ZmZfLVx1MDAzZWlzX2NsZWFuZWQgPSAxO1xuIFxuIFx0XHRcdFx0YnVmZi1cdTAwM2Vpc19pcF9jc28gXHUwMDI2PSBidWZmXy1cdTAwM2Vpc19pcF9jc287XG5AQCAtODIyLDYgKzgwMywxMSBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ194ZHBfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqcnhfcmluZyxcbiBcdFx0eGRwX2luaXRfYnVmZihcdTAwMjZ4ZHAsIGZyYW1lX3N6LCBcdTAwMjZyeF9yaW5nLVx1MDAzZXhkcF9yeHEpO1xuIFx0XHR4ZHBfcHJlcGFyZV9idWZmKFx1MDAyNnhkcCwgaGFyZF9zdGFydCwgcnhfcmluZy1cdTAwM2VwYWdlX29mZnNldCxcbiBcdFx0XHRcdCBidWZmLVx1MDAzZWxlbiwgZmFsc2UpO1xuK1x0XHQvKiBUaGUgeGRwX2J1ZmYgb3ducyB0aGUgYnVmZmVyJ3MgcGFnZSBwb29sIHJlZmVyZW5jZSBmcm9tXG4rXHRcdCAqIGhlcmUgb247IGl0IGNvbWVzIGJhY2sgdGhyb3VnaCB0aGUgTUVNX1RZUEVfUEFHRV9QT09MXG4rXHRcdCAqIG1lbW9yeSBtb2RlbCBvbiBldmVyeSBYRFAgdmVyZGljdC5cbitcdFx0ICovXG4rXHRcdGJ1ZmYtXHUwMDNlcnhkYXRhLnBhZ2UgPSBOVUxMO1xuIFx0XHRpZiAoIWJ1ZmYtXHUwMDNlaXNfZW9wKSB7XG4gXHRcdFx0aWYgKGFxX2FkZF9yeF9mcmFnbWVudChkZXYsIHJ4X3JpbmcsIGJ1ZmYsIFx1MDAyNnhkcCkpIHtcbiBcdFx0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cnhfcmluZy1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG5AQCAtODI5LDYgKzgxNSw3IEBAIHN0YXRpYyBpbnQgX19hcV9yaW5nX3hkcF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpyeF9yaW5nLFxuIFx0XHRcdFx0cnhfcmluZy1cdTAwM2VzdGF0cy5yeC5ieXRlcyArPSB4ZHBfZ2V0X2J1ZmZfbGVuKFx1MDAyNnhkcCk7XG4gXHRcdFx0XHQrK3J4X3JpbmctXHUwMDNlc3RhdHMucngueGRwX2Fib3J0ZWQ7XG4gXHRcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeF9yaW5nLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbitcdFx0XHRcdHhkcF9yZXR1cm5fYnVmZihcdTAwMjZ4ZHApO1xuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuIFx0XHR9XG5AQCAtOTIxLDE1ICs5MDgsMzEgQEAgaW50IGFxX3JpbmdfcnhfZmlsbChzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKVxuIFxuIHZvaWQgYXFfcmluZ19yeF9kZWluaXQoc3RydWN0IGFxX3JpbmdfcyAqc2VsZilcbiB7XG4tXHRpZiAoIXNlbGYpXG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdGlmICghc2VsZiB8fCAhc2VsZi1cdTAwM2VidWZmX3JpbmcpXG4gXHRcdHJldHVybjtcbiBcbi1cdGZvciAoOyBzZWxmLVx1MDAzZXN3X2hlYWQgIT0gc2VsZi1cdTAwM2Vzd190YWlsO1xuLVx0XHRzZWxmLVx1MDAzZXN3X2hlYWQgPSBhcV9yaW5nX25leHRfZHgoc2VsZiwgc2VsZi1cdTAwM2Vzd19oZWFkKSkge1xuLVx0XHRzdHJ1Y3QgYXFfcmluZ19idWZmX3MgKmJ1ZmYgPSBcdTAwMjZzZWxmLVx1MDAzZWJ1ZmZfcmluZ1tzZWxmLVx1MDAzZXN3X2hlYWRdO1xuK1x0LyogUmVsZWFzZSBldmVyeSBwYWdlIHN0aWxsIG93bmVkIGJ5IHRoZSByaW5nLlxuK1x0ICpcbitcdCAqIFdhbGtpbmcgW3N3X2hlYWQsIHN3X3RhaWwpIGlzIG5vdCBlbm91Z2g6IHJlZmlsbCBpcyBiYXRjaGVkXG4rXHQgKiAoYXFfcmluZ19yeF9maWxsKCkgd2FpdHMgZm9yIEFRX0NGR19SWF9SRUZJTExfVEhSRVMgZnJlZSBzbG90cyksXG4rXHQgKiBzbyBzbG90cyB0aGF0IHdlcmUgY2xlYW5lZCBidXQgbm90IHlldCByZXBvc3RlZCBhY2N1bXVsYXRlIGluIHRoZVxuK1x0ICogW3N3X3RhaWwsIHN3X2hlYWQpIGdhcCwgYW5kIHRoZXkga2VlcCB0aGVpciBwYWdlIGZvciByZXVzZS4gV2Fsa1xuK1x0ICogdGhlIHdob2xlIHJpbmcgYW5kIHJlbGVhc2Ugd2hhdGV2ZXIgaXMgbGVmdC5cbitcdCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2VsZi1cdTAwM2VzaXplOyBpKyspIHtcbitcdFx0c3RydWN0IGFxX3JpbmdfYnVmZl9zICpidWZmID0gXHUwMDI2c2VsZi1cdTAwM2VidWZmX3JpbmdbaV07XG4rXG4rXHRcdGlmICghYnVmZi1cdTAwM2VyeGRhdGEucGFnZSlcbitcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0YXFfZnJlZV9yeHBhZ2UoXHUwMDI2YnVmZi1cdTAwM2VyeGRhdGEsIGFxX25pY19nZXRfZGV2KHNlbGYtXHUwMDNlYXFfbmljKSk7XG4rXHRcdHBhZ2VfcG9vbF9wdXRfZnVsbF9wYWdlKHNlbGYtXHUwMDNlcGdfcG9vbCwgYnVmZi1cdTAwM2VyeGRhdGEucGFnZSxcbitcdFx0XHRcdFx0ZmFsc2UpO1xuK1x0XHRidWZmLVx1MDAzZXJ4ZGF0YS5wYWdlID0gTlVMTDtcbiBcdH1cbitcbitcdHNlbGYtXHUwMDNlc3dfaGVhZCA9IHNlbGYtXHUwMDNlc3dfdGFpbDtcbiB9XG4gXG4gdm9pZCBhcV9yaW5nX2ZyZWUoc3RydWN0IGFxX3JpbmdfcyAqc2VsZilcbkBAIC05NDAsNiArOTQzLDExIEBAIHZvaWQgYXFfcmluZ19mcmVlKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYpXG4gXHRrZnJlZShzZWxmLVx1MDAzZWJ1ZmZfcmluZyk7XG4gXHRzZWxmLVx1MDAzZWJ1ZmZfcmluZyA9IE5VTEw7XG4gXG4rXHRpZiAoc2VsZi1cdTAwM2VwZ19wb29sKSB7XG4rXHRcdHBhZ2VfcG9vbF9kZXN0cm95KHNlbGYtXHUwMDNlcGdfcG9vbCk7XG4rXHRcdHNlbGYtXHUwMDNlcGdfcG9vbCA9IE5VTEw7XG4rXHR9XG4rXG4gXHRpZiAoc2VsZi1cdTAwM2VkeF9yaW5nKSB7XG4gXHRcdGRtYV9mcmVlX2NvaGVyZW50KGFxX25pY19nZXRfZGV2KHNlbGYtXHUwMDNlYXFfbmljKSxcbiBcdFx0XHRcdCAgc2VsZi1cdTAwM2VzaXplICogc2VsZi1cdTAwM2VkeF9zaXplLCBzZWxmLVx1MDAzZWR4X3JpbmcsXG5AQCAtOTc4LDkgKzk4Niw2IEBAIHVuc2lnbmVkIGludCBhcV9yaW5nX2ZpbGxfc3RhdHNfZGF0YShzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLCB1NjQgKmRhdGEpXG4gXHRcdFx0ZGF0YVsrK2NvdW50XSA9IHNlbGYtXHUwMDNlc3RhdHMucnguYWxsb2NfZmFpbHM7XG4gXHRcdFx0ZGF0YVsrK2NvdW50XSA9IHNlbGYtXHUwMDNlc3RhdHMucnguc2tiX2FsbG9jX2ZhaWxzO1xuIFx0XHRcdGRhdGFbKytjb3VudF0gPSBzZWxmLVx1MDAzZXN0YXRzLnJ4LnBvbGxzO1xuLVx0XHRcdGRhdGFbKytjb3VudF0gPSBzZWxmLVx1MDAzZXN0YXRzLnJ4LnBnX2ZsaXBzO1xuLVx0XHRcdGRhdGFbKytjb3VudF0gPSBzZWxmLVx1MDAzZXN0YXRzLnJ4LnBnX3JldXNlcztcbi1cdFx0XHRkYXRhWysrY291bnRdID0gc2VsZi1cdTAwM2VzdGF0cy5yeC5wZ19sb3N0cztcbiBcdFx0XHRkYXRhWysrY291bnRdID0gc2VsZi1cdTAwM2VzdGF0cy5yeC54ZHBfYWJvcnRlZDtcbiBcdFx0XHRkYXRhWysrY291bnRdID0gc2VsZi1cdTAwM2VzdGF0cy5yeC54ZHBfZHJvcDtcbiBcdFx0XHRkYXRhWysrY291bnRdID0gc2VsZi1cdTAwM2VzdGF0cy5yeC54ZHBfcGFzcztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmhcbmluZGV4IGE3MGI4ODBhZGE2N2U5Li41OGJjYWRiM2UzY2NkMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5oXG5AQCAtMTcsMTIgKzE3LDEyIEBAXG4gI2RlZmluZSBBUV9YRFBfVEFJTFJPT01cdFx0U0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKVxuIFxuIHN0cnVjdCBwYWdlO1xuK3N0cnVjdCBwYWdlX3Bvb2w7XG4gc3RydWN0IGFxX25pY19jZmdfcztcbiBcbiBzdHJ1Y3QgYXFfcnhwYWdlIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0ZG1hX2FkZHJfdCBkYWRkcjtcbi1cdHVuc2lnbmVkIGludCBvcmRlcjtcbiBcdHVuc2lnbmVkIGludCBwZ19vZmY7XG4gfTtcbiBcbkBAIC0xMDUsOSArMTA1LDYgQEAgc3RydWN0IGFxX3Jpbmdfc3RhdHNfcnhfcyB7XG4gXHR1NjQgYWxsb2NfZmFpbHM7XG4gXHR1NjQgc2tiX2FsbG9jX2ZhaWxzO1xuIFx0dTY0IHBvbGxzO1xuLVx0dTY0IHBnX2xvc3RzO1xuLVx0dTY0IHBnX2ZsaXBzO1xuLVx0dTY0IHBnX3JldXNlcztcbiBcdHU2NCB4ZHBfYWJvcnRlZDtcbiBcdHU2NCB4ZHBfZHJvcDtcbiBcdHU2NCB4ZHBfcGFzcztcbkBAIC0xNTEsNiArMTQ4LDcgQEAgc3RydWN0IGFxX3JpbmdfcyB7XG4gXHR1MTYgdGFpbF9zaXplO1xuIFx0dW5pb24gYXFfcmluZ19zdGF0c19zIHN0YXRzO1xuIFx0ZG1hX2FkZHJfdCBkeF9yaW5nX3BhO1xuK1x0c3RydWN0IHBhZ2VfcG9vbCAqcGdfcG9vbDtcbiBcdHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2c7XG4gXHRlbnVtIGF0bF9yaW5nX3R5cGUgcmluZ190eXBlO1xuIFx0c3RydWN0IHhkcF9yeHFfaW5mbyB4ZHBfcnhxO1xuQEAgLTIwMiw2ICsyMDAsNyBAQCB2b2lkIGFxX3JpbmdfdXBkYXRlX3F1ZXVlX3N0YXRlKHN0cnVjdCBhcV9yaW5nX3MgKnJpbmcpO1xuIHZvaWQgYXFfcmluZ19xdWV1ZV93YWtlKHN0cnVjdCBhcV9yaW5nX3MgKnJpbmcpO1xuIHZvaWQgYXFfcmluZ19xdWV1ZV9zdG9wKHN0cnVjdCBhcV9yaW5nX3MgKnJpbmcpO1xuIGJvb2wgYXFfcmluZ190eF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKTtcbit2b2lkIGFxX3JpbmdfdHhfZGVpbml0KHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYpO1xuIGludCBhcV94ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtX2ZyYW1lcyxcbiBcdFx0c3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcywgdTMyIGZsYWdzKTtcbiBpbnQgYXFfcmluZ19yeF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3ZlYy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfdmVjLmNcbmluZGV4IDJmOTAzM2NlZWQ4Y2UzLi44ZTE1NDA1ZDQ5NDE5ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3ZlYy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV92ZWMuY1xuQEAgLTE0NiwyNSArMTQ2LDMyIEBAIGludCBhcV92ZWNfcmluZ19hbGxvYyhzdHJ1Y3QgYXFfdmVjX3MgKnNlbGYsIHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLFxuIFx0XHRhcV9uaWNfc2V0X3R4X3JpbmcoYXFfbmljLCBpZHhfcmluZywgcmluZyk7XG4gXG4gXHRcdHJpbmcgPSBcdTAwMjZzZWxmLVx1MDAzZXJpbmdbaV1bQVFfVkVDX1JYX0lEXTtcbitcdFx0LyogUmVnaXN0ZXJpbmcgdGhlIE1FTV9UWVBFX1BBR0VfUE9PTCBtZW1vcnkgbW9kZWwgYmVsb3cgbmVlZHNcbitcdFx0ICogdGhlIHBhZ2UgcG9vbCBjcmVhdGVkIGJ5IGFxX3JpbmdfcnhfYWxsb2MoKSwgc28gdGhlIHJpbmcgaXNcbitcdFx0ICogYWxsb2NhdGVkIGZpcnN0LiBJZiBhIHJlZ2lzdHJhdGlvbiBmYWlscywgdGhlIHJpbmcgaGFzIHRvIGJlXG4rXHRcdCAqIGZyZWVkIGV4cGxpY2l0bHk6IHJ4X3JpbmdzIGlzIG5vdCBpbmNyZW1lbnRlZCB5ZXQsIHNvIHRoZVxuK1x0XHQgKiB1bndpbmQgdGhyb3VnaCBhcV92ZWNfcmluZ19mcmVlKCkgd291bGQgbm90IGNvdmVyIGl0LlxuK1x0XHQgKi9cbitcdFx0ZXJyID0gYXFfcmluZ19yeF9hbGxvYyhyaW5nLCBhcV9uaWMsIGlkeF9yaW5nLCBhcV9uaWNfY2ZnKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGVycl9leGl0O1xuK1xuIFx0XHRpZiAoeGRwX3J4cV9pbmZvX3JlZyhcdTAwMjZyaW5nLVx1MDAzZXhkcF9yeHEsXG4gXHRcdFx0XHQgICAgIGFxX25pYy1cdTAwM2VuZGV2LCBpZHgsXG4gXHRcdFx0XHQgICAgIHNlbGYtXHUwMDNlbmFwaS5uYXBpX2lkKSBcdTAwM2MgMCkge1xuK1x0XHRcdGFxX3JpbmdfZnJlZShyaW5nKTtcbiBcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZXJyX2V4aXQ7XG4gXHRcdH1cbiBcdFx0aWYgKHhkcF9yeHFfaW5mb19yZWdfbWVtX21vZGVsKFx1MDAyNnJpbmctXHUwMDNleGRwX3J4cSxcbi1cdFx0XHRcdFx0ICAgICAgIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBOVUxMKSBcdTAwM2MgMCkge1xuK1x0XHRcdFx0XHQgICAgICAgTUVNX1RZUEVfUEFHRV9QT09MLFxuK1x0XHRcdFx0XHQgICAgICAgcmluZy1cdTAwM2VwZ19wb29sKSBcdTAwM2MgMCkge1xuIFx0XHRcdHhkcF9yeHFfaW5mb191bnJlZyhcdTAwMjZyaW5nLVx1MDAzZXhkcF9yeHEpO1xuK1x0XHRcdGFxX3JpbmdfZnJlZShyaW5nKTtcbiBcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZXJyX2V4aXQ7XG4gXHRcdH1cbiBcbi1cdFx0ZXJyID0gYXFfcmluZ19yeF9hbGxvYyhyaW5nLCBhcV9uaWMsIGlkeF9yaW5nLCBhcV9uaWNfY2ZnKTtcbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdHhkcF9yeHFfaW5mb191bnJlZyhcdTAwMjZyaW5nLVx1MDAzZXhkcF9yeHEpO1xuLVx0XHRcdGdvdG8gZXJyX2V4aXQ7XG4tXHRcdH1cbi1cbiBcdFx0KytzZWxmLVx1MDAzZXJ4X3JpbmdzO1xuIFx0fVxuIFxuQEAgLTI3NSw3ICsyODIsNyBAQCB2b2lkIGFxX3ZlY19kZWluaXQoc3RydWN0IGFxX3ZlY19zICpzZWxmKVxuIFxuIFx0Zm9yIChpID0gMFU7IHNlbGYtXHUwMDNldHhfcmluZ3MgXHUwMDNlIGk7ICsraSkge1xuIFx0XHRyaW5nID0gc2VsZi1cdTAwM2VyaW5nW2ldO1xuLVx0XHRhcV9yaW5nX3R4X2NsZWFuKFx1MDAyNnJpbmdbQVFfVkVDX1RYX0lEXSk7XG4rXHRcdGFxX3JpbmdfdHhfZGVpbml0KFx1MDAyNnJpbmdbQVFfVkVDX1RYX0lEXSk7XG4gXHRcdGFxX3JpbmdfcnhfZGVpbml0KFx1MDAyNnJpbmdbQVFfVkVDX1JYX0lEXSk7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzo0ODoyNy4yNTQ1MDE2ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDY4MjU1MjE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IEFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGFuIGFRdWFudGlhIERyaXZlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UndmUgZ290IGEgcGF0Y2ggdG91Y2hpbmcgdGhlIGFRdWFudGlhIEFRdGlvbiBFdGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYC4gVGhlIGtleSBjaGFuZ2VzIGludm9sdmUgYSBuZXcgbWVtb3J5IGFsbG9jYXRpb24gbW9kZWwgdXNpbmcgYFBBR0VfUE9PTGAgZm9yIFJYIHJpbmdzLCBtb2RpZmljYXRpb25zIHRvIGhhbmRsZSBYRFAgZnJhbWVzLCBhbmQgZGUtaW5pdGlhbGl6YXRpb24gb2YgVFggYnVmZmVycy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGlzIGV2ZW4gcmVhY2hhYmxlIGZvciBmdXp6aW5nLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBpcyB0aGlzIGRyaXZlciBhY2Nlc3NpYmxlIHdpdGhpbiBhIHR5cGljYWwgUUVNVSBzZXR1cD8gYVF1YW50aWEgaXMgYSAxMEdiRSBQQ0llIGNhcmQsIHJpZ2h0PyBMZXQncyBjaGVjayB0aGUgc291cmNlIG9yIGEgcXVpY2sgc2VhcmNoLi4uIE5vcGUsIGFRdWFudGlhIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0J3MgYSBodWdlIHJlZCBmbGFnLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBpZiBpdCdzIGNvbnNpZGVyZWQgYSBwaHlzaWNhbCBjYXJkLiBMb29raW5nIGF0IHRoZSBpbnN0cnVjdGlvbnMsIHRoZXkgc3BlY2lmaWNhbGx5IHNheSB0byBtYXJrIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIGFzIG5vdCB3b3J0aCBmdXp6aW5nIGlmIHRoZXkgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZS5cblxuRG9lcyBzeXprYWxsZXIgb2ZmZXIgYSB3YXkgYXJvdW5kIHRoaXM/IENvdWxkIGl0IGZ1enogUENJIGRldmljZXMgc29tZWhvdz8gV2FpdCwgeWVzLCBpdCBoYXMgUENJIGZ1enppbmcuIEJ1dCBjYW4gc3l6a2FsbGVyICplbXVsYXRlKiB0aGUgZGV2aWNlIERNQSByaW5nIGJ1ZmZlcnM/ICBObywgaXQgdXNlcyBhIHZpcnR1YWwgUENJIGhvc3QgYnJpZGdlLCBvciBqdXN0IGZ1enplcyB0aGUgY29uZmlnIHNwYWNlLiBJdCBzcGVjaWZpY2FsbHkgc2F5cyB0aGF0IHRoZXNlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSB3aGVuIHlvdSByZXF1aXJlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS4gQWxzbywgc3l6a2FsbGVyIHRlc3RzIHBhdGNoZXMgc3VibWl0dGVkIHRvIG1haWxpbmcgbGlzdHMsIHNvIHRoaXMgcGF0Y2ggaXMgYmVpbmcgdGVzdGVkLCBidXQgZG9lc24ndCBtZWFuIGl0IGlzIGZ1enplZC5cblxuT2theSwgbGV0J3MgdmVyaWZ5IGlmIGFRdWFudGlhIGlzIGEgcGh5c2ljYWwgUENJZSBjYXJkLiBDaGVja2luZyB0aGUgS2NvbmZpZyBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvS2NvbmZpZ2AgcmV2ZWFsczogXCJUaGlzIGVuYWJsZXMgdGhlIHN1cHBvcnQgZm9yIHRoZSBhUXVhbnRpYSBBUXRpb24odG0pIEV0aGVybmV0IGNhcmQuXCIgIEl0IGRlcGVuZHMgb24gUENJLiBDb25maXJtZWQ6IGl0J3MgYSBwaHlzaWNhbCBFdGhlcm5ldCBjYXJkLiBUaGVyZWZvcmUgaXQgZmFsbHMgdW5kZXIgdGhlIFwibm90IHdvcnRoIGZ1enppbmdcIiBjYXRlZ29yeS5cblxuSXMgdGhlcmUgYW55IGNoYW5jZSBvZiBmdXp6aW5nIHZpYSBhbm90aGVyIHJvdXRlLCBsaWtlIGEgdmlydHVhbCBkcml2ZXI/IE5vcGUsIGl0J3MgYSBzdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXIgZm9yIGEgcGh5c2ljYWwgUENJZSBjYXJkLiBEb3VibGUtY2hlY2tpbmcgYWdhaW4uLi4gbm8gUUVNVSBlbXVsYXRpb24uXG5cblJldmlzaXRpbmcgdGhlIHByb21wdCdzIGNyaXRlcmlhOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIiBhUXVhbnRpYSBmaXRzIHRoYXQgZGVzY3JpcHRpb24gcGVyZmVjdGx5LiBJdCBpcyBhIHBoeXNpY2FsIFBDSWUgRXRoZXJuZXQgY2FyZC4gSXQgaXNuJ3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCdzIGVsaW1pbmF0ZSB0aGUgcG9zc2liaWxpdHkgb2YgYSBVU0IgY29ubmVjdGlvbi4gVGhlIEtjb25maWcgc2F5cyBpdCBgZGVwZW5kcyBvbiBQQ0lgLiBPa2F5LCB0aGF0J3MgaXQuIEl0J3Mgc3RyaWN0bHkgd2l0aGluIHRoZSBhUXVhbnRpYSBkcml2ZXIuXG5cblNvLCBJJ20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IFdvcnRoRnV6emluZz1mYWxzZS4gVGhpcyBwYXRjaCBtb2RpZmllcyBhIGRyaXZlciBmb3IgYSBwaHlzaWNhbCBQQ0llIGNhcmQgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGVudmlyb25tZW50cywgc28gdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXG5cbkknbSByZWFkeSB0byBtb3ZlIG9uLiBMZXQncyBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY5OCwiT3V0cHV0VG9rZW5zIjo5MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzo0ODo0MS45MzcwNTYwNjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBhUXVhbnRpYSBBUXRpb24gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS8pLiBUaGlzIGlzIGEgZHJpdmVyIGZvciBhIHBoeXNpY2FsIFBDSWUgbmV0d29yayBjYXJkIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgYVF1YW50aWEgQVF0aW9uIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvKS4gVGhpcyBpcyBhIGRyaXZlciBmb3IgYSBwaHlzaWNhbCBQQ0llIG5ldHdvcmsgY2FyZCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowd222l[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 13:18:32 +0000 UTC FinishedAt: 2026-07-25 13:48:43 +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+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBhUXVhbnRpYSBBUXRpb24gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS8pLiBUaGlzIGlzIGEgZHJpdmVyIGZvciBhIHBoeXNpY2FsIFBDSWUgbmV0d29yayBjYXJkIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTFjZGJhMjg0ZWY4YjFhMGQ1OWZlMzkxNWQ5ZGFmYTc3ODQ4ZGUxNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDEzOjQ4OjI0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9LY29uZmlnXG5pbmRleCBjZWMyMDE4Yzg0YTliYy4uYzhmYjdiMzNlNWI3MWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9LY29uZmlnXG5AQCAtMjAsNiAmIzQzOzIwLDcgQEAgY29uZmlnIEFRVElPTlxuIFx0dHJpc3RhdGUgXCYjMzQ7YVF1YW50aWEgQVF0aW9uKHRtKSBTdXBwb3J0XCYjMzQ7XG4gXHRkZXBlbmRzIG9uIFBDSVxuIFx0ZGVwZW5kcyBvbiBNQUNTRUMgfHwgTUFDU0VDPW5cbiYjNDM7XHRzZWxlY3QgUEFHRV9QT09MXG4gXHRoZWxwXG4gXHQgIFRoaXMgZW5hYmxlcyB0aGUgc3VwcG9ydCBmb3IgdGhlIGFRdWFudGlhIEFRdGlvbih0bSkgRXRoZXJuZXQgY2FyZC5cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmNcbmluZGV4IDQyMGFmOTU4ZDQ4NjFhLi4wZjUxMjViZDIzMTU5NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jXG5AQCAtMTAwLDkgJiM0MzsxMDAsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFxX2V0aHRvb2xfcXVldWVfcnhfc3RhdF9uYW1lc1tdID0ge1xuIFx0XCYjMzQ7JXNRdWV1ZVslZF0gQWxsb2NGYWlsc1wmIzM0OyxcbiBcdFwmIzM0OyVzUXVldWVbJWRdIFNrYkFsbG9jRmFpbHNcJiMzNDssXG4gXHRcJiMzNDslc1F1ZXVlWyVkXSBQb2xsc1wmIzM0Oyxcbi1cdFwmIzM0OyVzUXVldWVbJWRdIFBhZ2VGbGlwc1wmIzM0Oyxcbi1cdFwmIzM0OyVzUXVldWVbJWRdIFBhZ2VSZXVzZXNcJiMzNDssXG4tXHRcJiMzNDslc1F1ZXVlWyVkXSBQYWdlRnJlZXNcJiMzNDssXG4gXHRcJiMzNDslc1F1ZXVlWyVkXSBYZHBBYm9ydFwmIzM0OyxcbiBcdFwmIzM0OyVzUXVldWVbJWRdIFhkcERyb3BcJiMzNDssXG4gXHRcJiMzNDslc1F1ZXVlWyVkXSBYZHBQYXNzXCYjMzQ7LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcHRwLmNcbmluZGV4IDU1OGFjOTIzN2Y3NTllLi4zYTQwZDk4NmNkNjc4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3B0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9wdHAuY1xuQEAgLTEzLDYgJiM0MzsxMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2NsYXNzaWZ5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsb2Nrc291cmNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L3hkcC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7YXFfbmljLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDthcV9wdHAuaFwmIzM0O1xuQEAgLTExOTIsMTIgJiM0MzsxMTkzLDIzIEBAIGludCBhcV9wdHBfcmluZ19hbGxvYyhzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYylcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2V4aXRfcHRwX3R4O1xuIFxuJiM0MztcdGVyciA9IHhkcF9yeHFfaW5mb19yZWcoXHUwMDI2YXFfcHRwLVx1MDAzZXB0cF9yeC54ZHBfcnhxLCBhcV9uaWMtXHUwMDNlbmRldixcbiYjNDM7XHRcdFx0ICAgICAgIHJ4X3JpbmdfaWR4LCBhcV9wdHAtXHUwMDNlbmFwaS5uYXBpX2lkKTtcbiYjNDM7XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfZXhpdF9wdHBfcng7XG4mIzQzO1xuJiM0MztcdGVyciA9IHhkcF9yeHFfaW5mb19yZWdfbWVtX21vZGVsKFx1MDAyNmFxX3B0cC1cdTAwM2VwdHBfcngueGRwX3J4cSxcbiYjNDM7XHRcdFx0XHRcdCBNRU1fVFlQRV9QQUdFX1BPT0wsXG4mIzQzO1x0XHRcdFx0XHQgYXFfcHRwLVx1MDAzZXB0cF9yeC5wZ19wb29sKTtcbiYjNDM7XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfZXhpdF94ZHBfcnhxO1xuJiM0MztcbiBcdGlmIChhcV9wdHAtXHUwMDNlYTFfcHRwKSB7XG4gXHRcdGVyciA9IGFxX3JpbmdfaHd0c19yeF9hbGxvYyhcdTAwMjZhcV9wdHAtXHUwMDNlaHd0c19yeCwgYXFfbmljLCBQVFBfSFdTVF9SSU5HX0lEWCxcbiBcdFx0XHRcdFx0ICAgIGFxX25pYy1cdTAwM2VhcV9uaWNfY2ZnLnJ4ZHMsXG4gXHRcdFx0XHRcdCAgICBhcV9uaWMtXHUwMDNlYXFfbmljX2NmZy5hcV9od19jYXBzLVx1MDAzZXJ4ZF9zaXplKTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGVycl9leGl0X3B0cF9yeDtcbiYjNDM7XHRcdFx0Z290byBlcnJfZXhpdF94ZHBfcnhxO1xuIFx0fVxuIFxuIFx0ZXJyID0gYXFfcHRwX3NrYl9yaW5nX2luaXQoXHUwMDI2YXFfcHRwLVx1MDAzZXNrYl9yaW5nLCBhcV9uaWMtXHUwMDNlYXFfbmljX2NmZy5yeGRzKTtcbkBAIC0xMjE3LDYgJiM0MzsxMjI5LDggQEAgaW50IGFxX3B0cF9yaW5nX2FsbG9jKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljKVxuIGVycl9leGl0X2h3dHNfcng6XG4gXHRpZiAoYXFfcHRwLVx1MDAzZWExX3B0cClcbiBcdFx0YXFfcmluZ19od3RzX3J4X2ZyZWUoXHUwMDI2YXFfcHRwLVx1MDAzZWh3dHNfcngpO1xuJiM0MztlcnJfZXhpdF94ZHBfcnhxOlxuJiM0MztcdHhkcF9yeHFfaW5mb191bnJlZyhcdTAwMjZhcV9wdHAtXHUwMDNlcHRwX3J4LnhkcF9yeHEpO1xuIGVycl9leGl0X3B0cF9yeDpcbiBcdGFxX3JpbmdfZnJlZShcdTAwMjZhcV9wdHAtXHUwMDNlcHRwX3J4KTtcbiBlcnJfZXhpdF9wdHBfdHg6XG5AQCAtMTIzMyw2ICYjNDM7MTI0Nyw4IEBAIHZvaWQgYXFfcHRwX3JpbmdfZnJlZShzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYylcbiBcdFx0cmV0dXJuO1xuIFxuIFx0YXFfcmluZ19mcmVlKFx1MDAyNmFxX3B0cC1cdTAwM2VwdHBfdHgpO1xuJiM0MztcdGlmICh4ZHBfcnhxX2luZm9faXNfcmVnKFx1MDAyNmFxX3B0cC1cdTAwM2VwdHBfcngueGRwX3J4cSkpXG4mIzQzO1x0XHR4ZHBfcnhxX2luZm9fdW5yZWcoXHUwMDI2YXFfcHRwLVx1MDAzZXB0cF9yeC54ZHBfcnhxKTtcbiBcdGFxX3JpbmdfZnJlZShcdTAwMjZhcV9wdHAtXHUwMDNlcHRwX3J4KTtcbiBcdGlmIChhcV9wdHAtXHUwMDNlYTFfcHRwKVxuIFx0XHRhcV9yaW5nX2h3dHNfcnhfZnJlZShcdTAwMjZhcV9wdHAtXHUwMDNlaHd0c19yeCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jXG5pbmRleCA4ZmYwN2RlMmJkNTI0MC4uOWRkODgxNzEwNTk0MjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuY1xuQEAgLTE0LDEyMCAmIzQzOzE0LDM3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7YXFfdmVjLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDthcV9tYWluLmhcJiMzNDtcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGRwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWx0ZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl90cmFjZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gXG4tc3RhdGljIHZvaWQgYXFfZ2V0X3J4cGFnZXNfeGRwKHN0cnVjdCBhcV9yaW5nX2J1ZmZfcyAqYnVmZixcbi1cdFx0XHQgICAgICAgc3RydWN0IHhkcF9idWZmICp4ZHApXG4te1xuLVx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2luZm87XG4tXHRpbnQgaTtcbi1cbi1cdGlmICh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkge1xuLVx0XHRzaW5mbyA9IHhkcF9nZXRfc2hhcmVkX2luZm9fZnJvbV9idWZmKHhkcCk7XG4tXG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNpbmZvLVx1MDAzZW5yX2ZyYWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdHNrYl9mcmFnX3QgKmZyYWcgPSBcdTAwMjZzaW5mby1cdTAwM2VmcmFnc1tpXTtcbi1cbi1cdFx0XHRwYWdlX3JlZl9pbmMoc2tiX2ZyYWdfcGFnZShmcmFnKSk7XG4tXHRcdH1cbi1cdH1cbi1cdHBhZ2VfcmVmX2luYyhidWZmLVx1MDAzZXJ4ZGF0YS5wYWdlKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGFxX2ZyZWVfcnhwYWdlKHN0cnVjdCBhcV9yeHBhZ2UgKnJ4cGFnZSwgc3RydWN0IGRldmljZSAqZGV2KVxuLXtcbi1cdHVuc2lnbmVkIGludCBsZW4gPSBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIHJ4cGFnZS1cdTAwM2VvcmRlcjtcbi1cbi1cdGRtYV91bm1hcF9wYWdlKGRldiwgcnhwYWdlLVx1MDAzZWRhZGRyLCBsZW4sIERNQV9GUk9NX0RFVklDRSk7XG4tXG4tXHQvKiBEcm9wIHRoZSByZWYgZm9yIGJlaW5nIGluIHRoZSByaW5nLiAqL1xuLVx0X19mcmVlX3BhZ2VzKHJ4cGFnZS1cdTAwM2VwYWdlLCByeHBhZ2UtXHUwMDNlb3JkZXIpO1xuLVx0cnhwYWdlLVx1MDAzZXBhZ2UgPSBOVUxMO1xuLX1cbi1cbi1zdGF0aWMgaW50IGFxX2FsbG9jX3J4cGFnZXMoc3RydWN0IGFxX3J4cGFnZSAqcnhwYWdlLCBzdHJ1Y3QgYXFfcmluZ19zICpyeF9yaW5nKVxuJiM0MztzdGF0aWMgaW50IGFxX2dldF9yeHBhZ2VzKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsIHN0cnVjdCBhcV9yaW5nX2J1ZmZfcyAqcnhidWYpXG4ge1xuLVx0c3RydWN0IGRldmljZSAqZGV2ID0gYXFfbmljX2dldF9kZXYocnhfcmluZy1cdTAwM2VhcV9uaWMpO1xuLVx0dW5zaWduZWQgaW50IG9yZGVyID0gcnhfcmluZy1cdTAwM2VwYWdlX29yZGVyO1xuJiM0MztcdHVuc2lnbmVkIGludCBzaXplID0gc2VsZi1cdTAwM2VwYWdlX29mZnNldCAmIzQzOyBzZWxmLVx1MDAzZWZyYW1lX21heCAmIzQzO1xuJiM0MztcdFx0XHQgICAgc2VsZi1cdTAwM2V0YWlsX3NpemU7XG4mIzQzO1x0dW5zaWduZWQgaW50IHBnX29mZjtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuLVx0aW50IHJldCA9IC1FTk9NRU07XG4tXHRkbWFfYWRkcl90IGRhZGRyO1xuLVxuLVx0cGFnZSA9IGRldl9hbGxvY19wYWdlcyhvcmRlcik7XG4tXHRpZiAodW5saWtlbHkoIXBhZ2UpKVxuLVx0XHRnb3RvIGVycl9leGl0O1xuLVxuLVx0ZGFkZHIgPSBkbWFfbWFwX3BhZ2UoZGV2LCBwYWdlLCAwLCBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyLFxuLVx0XHRcdCAgICAgRE1BX0ZST01fREVWSUNFKTtcbi1cbi1cdGlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRhZGRyKSkpXG4tXHRcdGdvdG8gZnJlZV9wYWdlO1xuLVxuLVx0cnhwYWdlLVx1MDAzZXBhZ2UgPSBwYWdlO1xuLVx0cnhwYWdlLVx1MDAzZWRhZGRyID0gZGFkZHI7XG4tXHRyeHBhZ2UtXHUwMDNlb3JkZXIgPSBvcmRlcjtcbi1cdHJ4cGFnZS1cdTAwM2VwZ19vZmYgPSByeF9yaW5nLVx1MDAzZXBhZ2Vfb2Zmc2V0O1xuLVxuLVx0cmV0dXJuIDA7XG4tXG4tZnJlZV9wYWdlOlxuLVx0X19mcmVlX3BhZ2VzKHBhZ2UsIG9yZGVyKTtcbiBcbi1lcnJfZXhpdDpcbi1cdHJldHVybiByZXQ7XG4tfVxuJiM0MztcdC8qIEJ1ZmZlcnMgd2hvc2UgcGFnZSB3YXMgbm90IHBhc3NlZCB1cCB0aGUgc3RhY2sgYXJlIHJlcG9zdGVkXG4mIzQzO1x0ICogd2l0aCB0aGUgZGF0YSB0aGV5IGFscmVhZHkgY2FycnkgZGlzY2FyZGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyeGJ1Zi1cdTAwM2VyeGRhdGEucGFnZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuLXN0YXRpYyBpbnQgYXFfZ2V0X3J4cGFnZXMoc3RydWN0IGFxX3JpbmdfcyAqc2VsZiwgc3RydWN0IGFxX3JpbmdfYnVmZl9zICpyeGJ1Zilcbi17XG4tXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBzZWxmLVx1MDAzZXBhZ2Vfb3JkZXI7XG4tXHR1MTYgcGFnZV9vZmZzZXQgPSBzZWxmLVx1MDAzZXBhZ2Vfb2Zmc2V0O1xuLVx0dTE2IGZyYW1lX21heCA9IHNlbGYtXHUwMDNlZnJhbWVfbWF4O1xuLVx0dTE2IHRhaWxfc2l6ZSA9IHNlbGYtXHUwMDNldGFpbF9zaXplO1xuLVx0aW50IHJldDtcbi1cbi1cdGlmIChyeGJ1Zi1cdTAwM2VyeGRhdGEucGFnZSkge1xuLVx0XHQvKiBPbmUgbWVhbnMgcmluZyBpcyB0aGUgb25seSB1c2VyIGFuZCBjYW4gcmV1c2UgKi9cbi1cdFx0aWYgKHBhZ2VfcmVmX2NvdW50KHJ4YnVmLVx1MDAzZXJ4ZGF0YS5wYWdlKSBcdTAwM2UgMSkge1xuLVx0XHRcdC8qIFRyeSByZXVzZSBidWZmZXIgKi9cbi1cdFx0XHRyeGJ1Zi1cdTAwM2VyeGRhdGEucGdfb2ZmICYjNDM7PSBmcmFtZV9tYXggJiM0MzsgcGFnZV9vZmZzZXQgJiM0Mztcbi1cdFx0XHRcdFx0XHR0YWlsX3NpemU7XG4tXHRcdFx0aWYgKHJ4YnVmLVx1MDAzZXJ4ZGF0YS5wZ19vZmYgJiM0MzsgZnJhbWVfbWF4ICYjNDM7IHRhaWxfc2l6ZSBcdTAwM2M9XG4tXHRcdFx0ICAgIChQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyKSkge1xuLVx0XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzZWxmLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbi1cdFx0XHRcdHNlbGYtXHUwMDNlc3RhdHMucngucGdfZmxpcHMmIzQzOyYjNDM7O1xuLVx0XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c2VsZi1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4tXG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdC8qIEJ1ZmZlciBleGhhdXN0ZWQuIFdlIGhhdmUgb3RoZXIgdXNlcnMgYW5kXG4tXHRcdFx0XHQgKiBzaG91bGQgcmVsZWFzZSB0aGlzIHBhZ2UgYW5kIHJlYWxsb2Ncbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0YXFfZnJlZV9yeHBhZ2UoXHUwMDI2cnhidWYtXHUwMDNlcnhkYXRhLFxuLVx0XHRcdFx0XHQgICAgICAgYXFfbmljX2dldF9kZXYoc2VsZi1cdTAwM2VhcV9uaWMpKTtcbi1cdFx0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c2VsZi1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4tXHRcdFx0XHRzZWxmLVx1MDAzZXN0YXRzLnJ4LnBnX2xvc3RzJiM0MzsmIzQzOztcbi1cdFx0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnNlbGYtXHUwMDNlc3RhdHMucnguc3luY3ApO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRyeGJ1Zi1cdTAwM2VyeGRhdGEucGdfb2ZmID0gcGFnZV9vZmZzZXQ7XG4tXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzZWxmLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbi1cdFx0XHRzZWxmLVx1MDAzZXN0YXRzLnJ4LnBnX3JldXNlcyYjNDM7JiM0Mzs7XG4tXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c2VsZi1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4tXHRcdH1cbiYjNDM7XHRwYWdlID0gcGFnZV9wb29sX2Rldl9hbGxvY19mcmFnKHNlbGYtXHUwMDNlcGdfcG9vbCwgXHUwMDI2cGdfb2ZmLCBzaXplKTtcbiYjNDM7XHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XG4mIzQzO1x0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnNlbGYtXHUwMDNlc3RhdHMucnguc3luY3ApO1xuJiM0MztcdFx0c2VsZi1cdTAwM2VzdGF0cy5yeC5hbGxvY19mYWlscyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzZWxmLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuLVx0aWYgKCFyeGJ1Zi1cdTAwM2VyeGRhdGEucGFnZSkge1xuLVx0XHRyZXQgPSBhcV9hbGxvY19yeHBhZ2VzKFx1MDAyNnJ4YnVmLVx1MDAzZXJ4ZGF0YSwgc2VsZik7XG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnNlbGYtXHUwMDNlc3RhdHMucnguc3luY3ApO1xuLVx0XHRcdHNlbGYtXHUwMDNlc3RhdHMucnguYWxsb2NfZmFpbHMmIzQzOyYjNDM7O1xuLVx0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnNlbGYtXHUwMDNlc3RhdHMucnguc3luY3ApO1xuLVx0XHR9XG4tXHRcdHJldHVybiByZXQ7XG4tXHR9XG4mIzQzO1x0cnhidWYtXHUwMDNlcnhkYXRhLnBhZ2UgPSBwYWdlO1xuJiM0MztcdHJ4YnVmLVx1MDAzZXJ4ZGF0YS5kYWRkciA9IHBhZ2VfcG9vbF9nZXRfZG1hX2FkZHIocGFnZSk7XG4mIzQzO1x0cnhidWYtXHUwMDNlcnhkYXRhLnBnX29mZiA9IHBnX29mZiAmIzQzOyBzZWxmLVx1MDAzZXBhZ2Vfb2Zmc2V0O1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTE3OSw2ICYjNDM7OTYsMTUgQEAgaW50IGFxX3JpbmdfcnhfYWxsb2Moc3RydWN0IGFxX3JpbmdfcyAqc2VsZixcbiBcdFx0ICAgICB1bnNpZ25lZCBpbnQgaWR4LFxuIFx0XHQgICAgIHN0cnVjdCBhcV9uaWNfY2ZnX3MgKmFxX25pY19jZmcpXG4ge1xuJiM0MztcdHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHBwX3BhcmFtcyA9IHtcbiYjNDM7XHRcdC5mbGFncyA9IFBQX0ZMQUdfRE1BX01BUCB8IFBQX0ZMQUdfRE1BX1NZTkNfREVWLFxuJiM0MztcdFx0LnBvb2xfc2l6ZSA9IGFxX25pY19jZmctXHUwMDNlcnhkcyxcbiYjNDM7XHRcdC5uaWQgPSBOVU1BX05PX05PREUsXG4mIzQzO1x0XHQuZGV2ID0gYXFfbmljX2dldF9kZXYoYXFfbmljKSxcbiYjNDM7XHRcdC5kbWFfZGlyID0gRE1BX0ZST01fREVWSUNFLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IHBhZ2VfcG9vbCAqcG9vbDtcbiYjNDM7XG4gXHRzZWxmLVx1MDAzZWFxX25pYyA9IGFxX25pYztcbiBcdHNlbGYtXHUwMDNlaWR4ID0gaWR4O1xuIFx0c2VsZi1cdTAwM2VzaXplID0gYXFfbmljX2NmZy1cdTAwM2VyeGRzO1xuQEAgLTIwMCw2ICYjNDM7MTI2LDE4IEBAIGludCBhcV9yaW5nX3J4X2FsbG9jKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsXG4gXHRcdHNlbGYtXHUwMDNldGFpbF9zaXplID0gMDtcbiBcdH1cbiBcbiYjNDM7XHRwcF9wYXJhbXMub3JkZXIgPSBzZWxmLVx1MDAzZXBhZ2Vfb3JkZXI7XG4mIzQzO1x0cHBfcGFyYW1zLm1heF9sZW4gPSBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIHNlbGYtXHUwMDNlcGFnZV9vcmRlcjtcbiYjNDM7XG4mIzQzO1x0cG9vbCA9IHBhZ2VfcG9vbF9jcmVhdGUoXHUwMDI2cHBfcGFyYW1zKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBvb2wpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocG9vbCk7XG4mIzQzO1xuJiM0MztcdHNlbGYtXHUwMDNlcGdfcG9vbCA9IHBvb2w7XG4mIzQzO1xuJiM0MztcdC8qIE9uIGZhaWx1cmUgYXFfcmluZ19hbGxvYygpIGNhbGxzIGFxX3JpbmdfZnJlZSgpLCB3aGljaCBhbHNvXG4mIzQzO1x0ICogZGVzdHJveXMgdGhlIHBhZ2UgcG9vbC5cbiYjNDM7XHQgKi9cbiBcdHJldHVybiBhcV9yaW5nX2FsbG9jKHNlbGYsIGFxX25pYyk7XG4gfVxuIFxuQEAgLTM0Niw3ICYjNDM7Mjg0LDExIEBAIGJvb2wgYXFfcmluZ190eF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKVxuIFx0XHRcdCYjNDM7JiM0MztzZWxmLVx1MDAzZXN0YXRzLnR4LnBhY2tldHM7XG4gXHRcdFx0c2VsZi1cdTAwM2VzdGF0cy50eC5ieXRlcyAmIzQzOz0geGRwX2dldF9mcmFtZV9sZW4oYnVmZi1cdTAwM2V4ZHBmKTtcbiBcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzZWxmLVx1MDAzZXN0YXRzLnR4LnN5bmNwKTtcbi1cdFx0XHR4ZHBfcmV0dXJuX2ZyYW1lX3J4X25hcGkoYnVmZi1cdTAwM2V4ZHBmKTtcbiYjNDM7XHRcdFx0LyogRnJhbWVzIHF1ZXVlZCB2aWEgbmRvX3hkcF94bWl0KCkgbWF5IGNvbWUgZnJvbSBhXG4mIzQzO1x0XHRcdCAqIHBhZ2UgcG9vbCBvd25lZCBieSBhbm90aGVyIE5BUEkgY29udGV4dDogbm8gZGlyZWN0XG4mIzQzO1x0XHRcdCAqIHJlY3ljbGluZy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHhkcF9yZXR1cm5fZnJhbWUoYnVmZi1cdTAwM2V4ZHBmKTtcbiBcdFx0fVxuIFxuIG91dDpcbkBAIC0zNjAsNiAmIzQzOzMwMiwzNSBAQCBib29sIGFxX3JpbmdfdHhfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqc2VsZilcbiBcdHJldHVybiAhIWJ1ZGdldDtcbiB9XG4gXG4mIzQzO3ZvaWQgYXFfcmluZ190eF9kZWluaXQoc3RydWN0IGFxX3JpbmdfcyAqc2VsZilcbiYjNDM7e1xuJiM0MztcdGlmICghc2VsZilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7IHNlbGYtXHUwMDNlc3dfaGVhZCAhPSBzZWxmLVx1MDAzZXN3X3RhaWw7XG4mIzQzO1x0XHRzZWxmLVx1MDAzZXN3X2hlYWQgPSBhcV9yaW5nX25leHRfZHgoc2VsZiwgc2VsZi1cdTAwM2Vzd19oZWFkKSkge1xuJiM0MztcdFx0c3RydWN0IGFxX3JpbmdfYnVmZl9zICpidWZmID0gXHUwMDI2c2VsZi1cdTAwM2VidWZmX3Jpbmdbc2VsZi1cdTAwM2Vzd19oZWFkXTtcbiYjNDM7XHRcdHN0cnVjdCBkZXZpY2UgKm5kZXYgPSBhcV9uaWNfZ2V0X2RldihzZWxmLVx1MDAzZWFxX25pYyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGJ1ZmYtXHUwMDNlaXNfbWFwcGVkKSB7XG4mIzQzO1x0XHRcdGlmIChidWZmLVx1MDAzZWlzX3NvcCkge1xuJiM0MztcdFx0XHRcdGRtYV91bm1hcF9zaW5nbGUobmRldiwgYnVmZi1cdTAwM2VwYSwgYnVmZi1cdTAwM2VsZW4sXG4mIzQzO1x0XHRcdFx0XHRcdCBETUFfVE9fREVWSUNFKTtcbiYjNDM7XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRkbWFfdW5tYXBfcGFnZShuZGV2LCBidWZmLVx1MDAzZXBhLCBidWZmLVx1MDAzZWxlbixcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBETUFfVE9fREVWSUNFKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChidWZmLVx1MDAzZWlzX2VvcCkge1xuJiM0MztcdFx0XHRpZiAoYnVmZi1cdTAwM2Vza2IpXG4mIzQzO1x0XHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoYnVmZi1cdTAwM2Vza2IpO1xuJiM0MztcdFx0XHRlbHNlIGlmIChidWZmLVx1MDAzZXhkcGYpXG4mIzQzO1x0XHRcdFx0eGRwX3JldHVybl9mcmFtZShidWZmLVx1MDAzZXhkcGYpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBhcV9yeF9jaGVja3N1bShzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLFxuIFx0XHRcdCAgIHN0cnVjdCBhcV9yaW5nX2J1ZmZfcyAqYnVmZixcbiBcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuQEAgLTQwOCwyMiAmIzQzOzM3OSwxNSBAQCBpbnQgYXFfeGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG51bV9mcmFtZXMsXG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbi1cdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdFx0c3RydWN0IGFxX3JpbmdfYnVmZl9zICpidWZmKVxuJiM0MztcdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmO1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbiBcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XG4gXHRpZiAodW5saWtlbHkoIXhkcGYpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdHNrYiA9IHhkcF9idWlsZF9za2JfZnJvbV9mcmFtZSh4ZHBmLCBkZXYpO1xuLVx0aWYgKCFza2IpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0YXFfZ2V0X3J4cGFnZXNfeGRwKGJ1ZmYsIHhkcCk7XG4tXHRyZXR1cm4gc2tiO1xuJiM0MztcdHJldHVybiB4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoeGRwZiwgZGV2KTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsXG5AQCAtNDQ0LDggJiM0Mzs0MDgsMTYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsXG4gXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeF9yaW5nLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbiBcbiBcdHByb2cgPSBSRUFEX09OQ0UocnhfcmluZy1cdTAwM2V4ZHBfcHJvZyk7XG4tXHRpZiAoIXByb2cpXG4tXHRcdHJldHVybiBhcV94ZHBfYnVpbGRfc2tiKHhkcCwgYXFfbmljLVx1MDAzZW5kZXYsIGJ1ZmYpO1xuJiM0MztcdGlmICghcHJvZykge1xuJiM0MztcdFx0c2tiID0gYXFfeGRwX2J1aWxkX3NrYih4ZHAsIGFxX25pYy1cdTAwM2VuZGV2KTtcbiYjNDM7XHRcdC8qIFRoZSByaW5nIGhhcyBhbHJlYWR5IGhhbmRlZCBpdHMgcGFnZSBwb29sIHJlZmVyZW5jZSB0byB0aGVcbiYjNDM7XHRcdCAqIHhkcF9idWZmLCBzbyBpZiB0aGUgc2tiIGNvdWxkIG5vdCBiZSBidWlsdCB0aGUgYnVmZmVyIG11c3RcbiYjNDM7XHRcdCAqIGJlIHJldHVybmVkIHRvIHRoZSBwb29sIGhlcmUgb3IgaXRzIGZyYWdtZW50cyB3b3VsZCBsZWFrLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIXNrYilcbiYjNDM7XHRcdFx0eGRwX3JldHVybl9idWZmKHhkcCk7XG4mIzQzO1x0XHRyZXR1cm4gc2tiO1xuJiM0MztcdH1cbiBcbiBcdHByZWZldGNodyh4ZHAtXHUwMDNlZGF0YV9oYXJkX3N0YXJ0KTsgLyogeGRwX2ZyYW1lIHdyaXRlICovXG4gXG5AQCAtNDU2LDcgJiM0Mzs0MjgsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFxX3hkcF9ydW5fcHJvZyhzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYyxcbiBcdGFjdCA9IGJwZl9wcm9nX3J1bl94ZHAocHJvZywgeGRwKTtcbiBcdHN3aXRjaCAoYWN0KSB7XG4gXHRjYXNlIFhEUF9QQVNTOlxuLVx0XHRza2IgPSBhcV94ZHBfYnVpbGRfc2tiKHhkcCwgYXFfbmljLVx1MDAzZW5kZXYsIGJ1ZmYpO1xuJiM0MztcdFx0c2tiID0gYXFfeGRwX2J1aWxkX3NrYih4ZHAsIGFxX25pYy1cdTAwM2VuZGV2KTtcbiBcdFx0aWYgKCFza2IpXG4gXHRcdFx0Z290byBvdXRfYWJvcnRlZDtcbiBcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyeF9yaW5nLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbkBAIC00NzQsNyAmIzQzOzQ0Niw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX3J1bl9wcm9nKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLFxuIFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4X3JpbmctXHUwMDNlc3RhdHMucnguc3luY3ApO1xuIFx0XHQmIzQzOyYjNDM7cnhfcmluZy1cdTAwM2VzdGF0cy5yeC54ZHBfdHg7XG4gXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4X3JpbmctXHUwMDNlc3RhdHMucnguc3luY3ApO1xuLVx0XHRhcV9nZXRfcnhwYWdlc194ZHAoYnVmZiwgeGRwKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFhEUF9SRURJUkVDVDpcbiBcdFx0aWYgKHhkcF9kb19yZWRpcmVjdChhcV9uaWMtXHUwMDNlbmRldiwgeGRwLCBwcm9nKSBcdTAwM2MgMClcbkBAIC00ODMsNyAmIzQzOzQ1NCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX3J1bl9wcm9nKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLFxuIFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4X3JpbmctXHUwMDNlc3RhdHMucnguc3luY3ApO1xuIFx0XHQmIzQzOyYjNDM7cnhfcmluZy1cdTAwM2VzdGF0cy5yeC54ZHBfcmVkaXJlY3Q7XG4gXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4X3JpbmctXHUwMDNlc3RhdHMucnguc3luY3ApO1xuLVx0XHRhcV9nZXRfcnhwYWdlc194ZHAoYnVmZiwgeGRwKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRmYWxsdGhyb3VnaDtcbkBAIC00OTQsMTEgJiM0Mzs0NjQsMTMgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsXG4gXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4X3JpbmctXHUwMDNlc3RhdHMucnguc3luY3ApO1xuIFx0XHR0cmFjZV94ZHBfZXhjZXB0aW9uKGFxX25pYy1cdTAwM2VuZGV2LCBwcm9nLCBhY3QpO1xuIFx0XHRicGZfd2Fybl9pbnZhbGlkX3hkcF9hY3Rpb24oYXFfbmljLVx1MDAzZW5kZXYsIHByb2csIGFjdCk7XG4mIzQzO1x0XHR4ZHBfcmV0dXJuX2J1ZmYoeGRwKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFhEUF9EUk9QOlxuIFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4X3JpbmctXHUwMDNlc3RhdHMucnguc3luY3ApO1xuIFx0XHQmIzQzOyYjNDM7cnhfcmluZy1cdTAwM2VzdGF0cy5yeC54ZHBfZHJvcDtcbiBcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cnhfcmluZy1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4mIzQzO1x0XHR4ZHBfcmV0dXJuX2J1ZmYoeGRwKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG5AQCAtNTE3LDggJiM0Mzs0ODksMTEgQEAgc3RhdGljIGJvb2wgYXFfYWRkX3J4X2ZyYWdtZW50KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdGRvIHtcbiBcdFx0c2tiX2ZyYWdfdCAqZnJhZztcbiBcbi1cdFx0aWYgKHVubGlrZWx5KHNpbmZvLVx1MDAzZW5yX2ZyYWdzIFx1MDAzZT0gTUFYX1NLQl9GUkFHUykpXG4mIzQzO1x0XHRpZiAodW5saWtlbHkoc2luZm8tXHUwMDNlbnJfZnJhZ3MgXHUwMDNlPSBNQVhfU0tCX0ZSQUdTKSkge1xuJiM0MztcdFx0XHQvKiBBdHRhY2hlZCBmcmFncyBtdXN0IHJlYWNoIHhkcF9yZXR1cm5fYnVmZigpICovXG4mIzQzO1x0XHRcdHhkcF9idWZmX3NldF9mcmFnc19mbGFnKHhkcCk7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGZyYWcgPSBcdTAwMjZzaW5mby1cdTAwM2VmcmFnc1tzaW5mby1cdTAwM2Vucl9mcmFncyYjNDM7JiM0MztdO1xuIFx0XHRidWZmXyA9IFx1MDAyNnJpbmctXHUwMDNlYnVmZl9yaW5nW2J1ZmZfLVx1MDAzZW5leHRdO1xuQEAgLTU0Miw2ICYjNDM7NTE3LDExIEBAIHN0YXRpYyBib29sIGFxX2FkZF9yeF9mcmFnbWVudChzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRcdGlmIChwYWdlX2lzX3BmbWVtYWxsb2MoYnVmZl8tXHUwMDNlcnhkYXRhLnBhZ2UpKVxuIFx0XHRcdHhkcF9idWZmX3NldF9mcmFnX3BmbWVtYWxsb2MoeGRwKTtcbiBcbiYjNDM7XHRcdC8qIFRoZSBmcmFnJiMzOTtzIHBhZ2UgcG9vbCByZWZlcmVuY2UgaXMgb3duZWQgYnkgdGhlIHhkcF9idWZmXG4mIzQzO1x0XHQgKiBmcm9tIG5vdyBvbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0YnVmZl8tXHUwMDNlcnhkYXRhLnBhZ2UgPSBOVUxMO1xuJiM0MztcbiBcdH0gd2hpbGUgKCFidWZmXy1cdTAwM2Vpc19lb3ApO1xuIFxuIFx0eGRwX2J1ZmZfc2V0X2ZyYWdzX2ZsYWcoeGRwKTtcbkBAIC02NDUsNiAmIzQzOzYyNSw3IEBAIHN0YXRpYyBpbnQgX19hcV9yaW5nX3J4X2NsZWFuKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZXJyX2V4aXQ7XG4gXHRcdH1cbiYjNDM7XHRcdHNrYl9tYXJrX2Zvcl9yZWN5Y2xlKHNrYik7XG4gXHRcdGlmIChpc19wdHBfcmluZylcbiBcdFx0XHRidWZmLVx1MDAzZWxlbiAtPVxuIFx0XHRcdFx0YXFfcHRwX2V4dHJhY3RfdHMoc2VsZi1cdTAwM2VhcV9uaWMsIHNrYl9od3RzdGFtcHMoc2tiKSxcbkBAIC02NjUsNyAmIzQzOzY0Niw3IEBAIHN0YXRpYyBpbnQgX19hcV9yaW5nX3J4X2NsZWFuKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0XHRcdFx0YnVmZi1cdTAwM2VyeGRhdGEucGdfb2ZmICYjNDM7IGhkcl9sZW4sXG4gXHRcdFx0XHRcdGJ1ZmYtXHUwMDNlbGVuIC0gaGRyX2xlbixcbiBcdFx0XHRcdFx0c2VsZi1cdTAwM2VmcmFtZV9tYXgpO1xuLVx0XHRcdHBhZ2VfcmVmX2luYyhidWZmLVx1MDAzZXJ4ZGF0YS5wYWdlKTtcbiYjNDM7XHRcdFx0YnVmZi1cdTAwM2VyeGRhdGEucGFnZSA9IE5VTEw7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKCFidWZmLVx1MDAzZWlzX2VvcCkge1xuQEAgLTY4NCw3ICYjNDM7NjY1LDcgQEAgc3RhdGljIGludCBfX2FxX3JpbmdfcnhfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqc2VsZiwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0XHRcdFx0XHRcdGJ1ZmZfLVx1MDAzZXJ4ZGF0YS5wZ19vZmYsXG4gXHRcdFx0XHRcdFx0YnVmZl8tXHUwMDNlbGVuLFxuIFx0XHRcdFx0XHRcdHNlbGYtXHUwMDNlZnJhbWVfbWF4KTtcbi1cdFx0XHRcdHBhZ2VfcmVmX2luYyhidWZmXy1cdTAwM2VyeGRhdGEucGFnZSk7XG4mIzQzO1x0XHRcdFx0YnVmZl8tXHUwMDNlcnhkYXRhLnBhZ2UgPSBOVUxMO1xuIFx0XHRcdFx0YnVmZl8tXHUwMDNlaXNfY2xlYW5lZCA9IDE7XG4gXG4gXHRcdFx0XHRidWZmLVx1MDAzZWlzX2lwX2NzbyBcdTAwMjY9IGJ1ZmZfLVx1MDAzZWlzX2lwX2NzbztcbkBAIC04MjIsNiAmIzQzOzgwMywxMSBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ194ZHBfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqcnhfcmluZyxcbiBcdFx0eGRwX2luaXRfYnVmZihcdTAwMjZ4ZHAsIGZyYW1lX3N6LCBcdTAwMjZyeF9yaW5nLVx1MDAzZXhkcF9yeHEpO1xuIFx0XHR4ZHBfcHJlcGFyZV9idWZmKFx1MDAyNnhkcCwgaGFyZF9zdGFydCwgcnhfcmluZy1cdTAwM2VwYWdlX29mZnNldCxcbiBcdFx0XHRcdCBidWZmLVx1MDAzZWxlbiwgZmFsc2UpO1xuJiM0MztcdFx0LyogVGhlIHhkcF9idWZmIG93bnMgdGhlIGJ1ZmZlciYjMzk7cyBwYWdlIHBvb2wgcmVmZXJlbmNlIGZyb21cbiYjNDM7XHRcdCAqIGhlcmUgb247IGl0IGNvbWVzIGJhY2sgdGhyb3VnaCB0aGUgTUVNX1RZUEVfUEFHRV9QT09MXG4mIzQzO1x0XHQgKiBtZW1vcnkgbW9kZWwgb24gZXZlcnkgWERQIHZlcmRpY3QuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGJ1ZmYtXHUwMDNlcnhkYXRhLnBhZ2UgPSBOVUxMO1xuIFx0XHRpZiAoIWJ1ZmYtXHUwMDNlaXNfZW9wKSB7XG4gXHRcdFx0aWYgKGFxX2FkZF9yeF9mcmFnbWVudChkZXYsIHJ4X3JpbmcsIGJ1ZmYsIFx1MDAyNnhkcCkpIHtcbiBcdFx0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cnhfcmluZy1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG5AQCAtODI5LDYgJiM0Mzs4MTUsNyBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ194ZHBfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqcnhfcmluZyxcbiBcdFx0XHRcdHJ4X3JpbmctXHUwMDNlc3RhdHMucnguYnl0ZXMgJiM0Mzs9IHhkcF9nZXRfYnVmZl9sZW4oXHUwMDI2eGRwKTtcbiBcdFx0XHRcdCYjNDM7JiM0MztyeF9yaW5nLVx1MDAzZXN0YXRzLnJ4LnhkcF9hYm9ydGVkO1xuIFx0XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cnhfcmluZy1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4mIzQzO1x0XHRcdFx0eGRwX3JldHVybl9idWZmKFx1MDAyNnhkcCk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXHRcdH1cbkBAIC05MjEsMTUgJiM0Mzs5MDgsMzEgQEAgaW50IGFxX3JpbmdfcnhfZmlsbChzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKVxuIFxuIHZvaWQgYXFfcmluZ19yeF9kZWluaXQoc3RydWN0IGFxX3JpbmdfcyAqc2VsZilcbiB7XG4tXHRpZiAoIXNlbGYpXG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1xuJiM0MztcdGlmICghc2VsZiB8fCAhc2VsZi1cdTAwM2VidWZmX3JpbmcpXG4gXHRcdHJldHVybjtcbiBcbi1cdGZvciAoOyBzZWxmLVx1MDAzZXN3X2hlYWQgIT0gc2VsZi1cdTAwM2Vzd190YWlsO1xuLVx0XHRzZWxmLVx1MDAzZXN3X2hlYWQgPSBhcV9yaW5nX25leHRfZHgoc2VsZiwgc2VsZi1cdTAwM2Vzd19oZWFkKSkge1xuLVx0XHRzdHJ1Y3QgYXFfcmluZ19idWZmX3MgKmJ1ZmYgPSBcdTAwMjZzZWxmLVx1MDAzZWJ1ZmZfcmluZ1tzZWxmLVx1MDAzZXN3X2hlYWRdO1xuJiM0MztcdC8qIFJlbGVhc2UgZXZlcnkgcGFnZSBzdGlsbCBvd25lZCBieSB0aGUgcmluZy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFdhbGtpbmcgW3N3X2hlYWQsIHN3X3RhaWwpIGlzIG5vdCBlbm91Z2g6IHJlZmlsbCBpcyBiYXRjaGVkXG4mIzQzO1x0ICogKGFxX3JpbmdfcnhfZmlsbCgpIHdhaXRzIGZvciBBUV9DRkdfUlhfUkVGSUxMX1RIUkVTIGZyZWUgc2xvdHMpLFxuJiM0MztcdCAqIHNvIHNsb3RzIHRoYXQgd2VyZSBjbGVhbmVkIGJ1dCBub3QgeWV0IHJlcG9zdGVkIGFjY3VtdWxhdGUgaW4gdGhlXG4mIzQzO1x0ICogW3N3X3RhaWwsIHN3X2hlYWQpIGdhcCwgYW5kIHRoZXkga2VlcCB0aGVpciBwYWdlIGZvciByZXVzZS4gV2Fsa1xuJiM0MztcdCAqIHRoZSB3aG9sZSByaW5nIGFuZCByZWxlYXNlIHdoYXRldmVyIGlzIGxlZnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2VsZi1cdTAwM2VzaXplOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGFxX3JpbmdfYnVmZl9zICpidWZmID0gXHUwMDI2c2VsZi1cdTAwM2VidWZmX3JpbmdbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFidWZmLVx1MDAzZXJ4ZGF0YS5wYWdlKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0YXFfZnJlZV9yeHBhZ2UoXHUwMDI2YnVmZi1cdTAwM2VyeGRhdGEsIGFxX25pY19nZXRfZGV2KHNlbGYtXHUwMDNlYXFfbmljKSk7XG4mIzQzO1x0XHRwYWdlX3Bvb2xfcHV0X2Z1bGxfcGFnZShzZWxmLVx1MDAzZXBnX3Bvb2wsIGJ1ZmYtXHUwMDNlcnhkYXRhLnBhZ2UsXG4mIzQzO1x0XHRcdFx0XHRmYWxzZSk7XG4mIzQzO1x0XHRidWZmLVx1MDAzZXJ4ZGF0YS5wYWdlID0gTlVMTDtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0c2VsZi1cdTAwM2Vzd19oZWFkID0gc2VsZi1cdTAwM2Vzd190YWlsO1xuIH1cbiBcbiB2b2lkIGFxX3JpbmdfZnJlZShzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKVxuQEAgLTk0MCw2ICYjNDM7OTQzLDExIEBAIHZvaWQgYXFfcmluZ19mcmVlKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYpXG4gXHRrZnJlZShzZWxmLVx1MDAzZWJ1ZmZfcmluZyk7XG4gXHRzZWxmLVx1MDAzZWJ1ZmZfcmluZyA9IE5VTEw7XG4gXG4mIzQzO1x0aWYgKHNlbGYtXHUwMDNlcGdfcG9vbCkge1xuJiM0MztcdFx0cGFnZV9wb29sX2Rlc3Ryb3koc2VsZi1cdTAwM2VwZ19wb29sKTtcbiYjNDM7XHRcdHNlbGYtXHUwMDNlcGdfcG9vbCA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChzZWxmLVx1MDAzZWR4X3JpbmcpIHtcbiBcdFx0ZG1hX2ZyZWVfY29oZXJlbnQoYXFfbmljX2dldF9kZXYoc2VsZi1cdTAwM2VhcV9uaWMpLFxuIFx0XHRcdFx0ICBzZWxmLVx1MDAzZXNpemUgKiBzZWxmLVx1MDAzZWR4X3NpemUsIHNlbGYtXHUwMDNlZHhfcmluZyxcbkBAIC05NzgsOSAmIzQzOzk4Niw2IEBAIHVuc2lnbmVkIGludCBhcV9yaW5nX2ZpbGxfc3RhdHNfZGF0YShzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLCB1NjQgKmRhdGEpXG4gXHRcdFx0ZGF0YVsmIzQzOyYjNDM7Y291bnRdID0gc2VsZi1cdTAwM2VzdGF0cy5yeC5hbGxvY19mYWlscztcbiBcdFx0XHRkYXRhWyYjNDM7JiM0Mztjb3VudF0gPSBzZWxmLVx1MDAzZXN0YXRzLnJ4LnNrYl9hbGxvY19mYWlscztcbiBcdFx0XHRkYXRhWyYjNDM7JiM0Mztjb3VudF0gPSBzZWxmLVx1MDAzZXN0YXRzLnJ4LnBvbGxzO1xuLVx0XHRcdGRhdGFbJiM0MzsmIzQzO2NvdW50XSA9IHNlbGYtXHUwMDNlc3RhdHMucngucGdfZmxpcHM7XG4tXHRcdFx0ZGF0YVsmIzQzOyYjNDM7Y291bnRdID0gc2VsZi1cdTAwM2VzdGF0cy5yeC5wZ19yZXVzZXM7XG4tXHRcdFx0ZGF0YVsmIzQzOyYjNDM7Y291bnRdID0gc2VsZi1cdTAwM2VzdGF0cy5yeC5wZ19sb3N0cztcbiBcdFx0XHRkYXRhWyYjNDM7JiM0Mztjb3VudF0gPSBzZWxmLVx1MDAzZXN0YXRzLnJ4LnhkcF9hYm9ydGVkO1xuIFx0XHRcdGRhdGFbJiM0MzsmIzQzO2NvdW50XSA9IHNlbGYtXHUwMDNlc3RhdHMucngueGRwX2Ryb3A7XG4gXHRcdFx0ZGF0YVsmIzQzOyYjNDM7Y291bnRdID0gc2VsZi1cdTAwM2VzdGF0cy5yeC54ZHBfcGFzcztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmhcbmluZGV4IGE3MGI4ODBhZGE2N2U5Li41OGJjYWRiM2UzY2NkMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5oXG5AQCAtMTcsMTIgJiM0MzsxNywxMiBAQFxuICNkZWZpbmUgQVFfWERQX1RBSUxST09NXHRcdFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSlcbiBcbiBzdHJ1Y3QgcGFnZTtcbiYjNDM7c3RydWN0IHBhZ2VfcG9vbDtcbiBzdHJ1Y3QgYXFfbmljX2NmZ19zO1xuIFxuIHN0cnVjdCBhcV9yeHBhZ2Uge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHRkbWFfYWRkcl90IGRhZGRyO1xuLVx0dW5zaWduZWQgaW50IG9yZGVyO1xuIFx0dW5zaWduZWQgaW50IHBnX29mZjtcbiB9O1xuIFxuQEAgLTEwNSw5ICYjNDM7MTA1LDYgQEAgc3RydWN0IGFxX3Jpbmdfc3RhdHNfcnhfcyB7XG4gXHR1NjQgYWxsb2NfZmFpbHM7XG4gXHR1NjQgc2tiX2FsbG9jX2ZhaWxzO1xuIFx0dTY0IHBvbGxzO1xuLVx0dTY0IHBnX2xvc3RzO1xuLVx0dTY0IHBnX2ZsaXBzO1xuLVx0dTY0IHBnX3JldXNlcztcbiBcdHU2NCB4ZHBfYWJvcnRlZDtcbiBcdHU2NCB4ZHBfZHJvcDtcbiBcdHU2NCB4ZHBfcGFzcztcbkBAIC0xNTEsNiAmIzQzOzE0OCw3IEBAIHN0cnVjdCBhcV9yaW5nX3Mge1xuIFx0dTE2IHRhaWxfc2l6ZTtcbiBcdHVuaW9uIGFxX3Jpbmdfc3RhdHNfcyBzdGF0cztcbiBcdGRtYV9hZGRyX3QgZHhfcmluZ19wYTtcbiYjNDM7XHRzdHJ1Y3QgcGFnZV9wb29sICpwZ19wb29sO1xuIFx0c3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZztcbiBcdGVudW0gYXRsX3JpbmdfdHlwZSByaW5nX3R5cGU7XG4gXHRzdHJ1Y3QgeGRwX3J4cV9pbmZvIHhkcF9yeHE7XG5AQCAtMjAyLDYgJiM0MzsyMDAsNyBAQCB2b2lkIGFxX3JpbmdfdXBkYXRlX3F1ZXVlX3N0YXRlKHN0cnVjdCBhcV9yaW5nX3MgKnJpbmcpO1xuIHZvaWQgYXFfcmluZ19xdWV1ZV93YWtlKHN0cnVjdCBhcV9yaW5nX3MgKnJpbmcpO1xuIHZvaWQgYXFfcmluZ19xdWV1ZV9zdG9wKHN0cnVjdCBhcV9yaW5nX3MgKnJpbmcpO1xuIGJvb2wgYXFfcmluZ190eF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKTtcbiYjNDM7dm9pZCBhcV9yaW5nX3R4X2RlaW5pdChzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKTtcbiBpbnQgYXFfeGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG51bV9mcmFtZXMsXG4gXHRcdHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMsIHUzMiBmbGFncyk7XG4gaW50IGFxX3JpbmdfcnhfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqc2VsZixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV92ZWMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3ZlYy5jXG5pbmRleCAyZjkwMzNjZWVkOGNlMy4uOGUxNTQwNWQ0OTQxOWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV92ZWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfdmVjLmNcbkBAIC0xNDYsMjUgJiM0MzsxNDYsMzIgQEAgaW50IGFxX3ZlY19yaW5nX2FsbG9jKHN0cnVjdCBhcV92ZWNfcyAqc2VsZiwgc3RydWN0IGFxX25pY19zICphcV9uaWMsXG4gXHRcdGFxX25pY19zZXRfdHhfcmluZyhhcV9uaWMsIGlkeF9yaW5nLCByaW5nKTtcbiBcbiBcdFx0cmluZyA9IFx1MDAyNnNlbGYtXHUwMDNlcmluZ1tpXVtBUV9WRUNfUlhfSURdO1xuJiM0MztcdFx0LyogUmVnaXN0ZXJpbmcgdGhlIE1FTV9UWVBFX1BBR0VfUE9PTCBtZW1vcnkgbW9kZWwgYmVsb3cgbmVlZHNcbiYjNDM7XHRcdCAqIHRoZSBwYWdlIHBvb2wgY3JlYXRlZCBieSBhcV9yaW5nX3J4X2FsbG9jKCksIHNvIHRoZSByaW5nIGlzXG4mIzQzO1x0XHQgKiBhbGxvY2F0ZWQgZmlyc3QuIElmIGEgcmVnaXN0cmF0aW9uIGZhaWxzLCB0aGUgcmluZyBoYXMgdG8gYmVcbiYjNDM7XHRcdCAqIGZyZWVkIGV4cGxpY2l0bHk6IHJ4X3JpbmdzIGlzIG5vdCBpbmNyZW1lbnRlZCB5ZXQsIHNvIHRoZVxuJiM0MztcdFx0ICogdW53aW5kIHRocm91Z2ggYXFfdmVjX3JpbmdfZnJlZSgpIHdvdWxkIG5vdCBjb3ZlciBpdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZXJyID0gYXFfcmluZ19yeF9hbGxvYyhyaW5nLCBhcV9uaWMsIGlkeF9yaW5nLCBhcV9uaWNfY2ZnKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gZXJyX2V4aXQ7XG4mIzQzO1xuIFx0XHRpZiAoeGRwX3J4cV9pbmZvX3JlZyhcdTAwMjZyaW5nLVx1MDAzZXhkcF9yeHEsXG4gXHRcdFx0XHQgICAgIGFxX25pYy1cdTAwM2VuZGV2LCBpZHgsXG4gXHRcdFx0XHQgICAgIHNlbGYtXHUwMDNlbmFwaS5uYXBpX2lkKSBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRhcV9yaW5nX2ZyZWUocmluZyk7XG4gXHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRnb3RvIGVycl9leGl0O1xuIFx0XHR9XG4gXHRcdGlmICh4ZHBfcnhxX2luZm9fcmVnX21lbV9tb2RlbChcdTAwMjZyaW5nLVx1MDAzZXhkcF9yeHEsXG4tXHRcdFx0XHRcdCAgICAgICBNRU1fVFlQRV9QQUdFX1NIQVJFRCwgTlVMTCkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBNRU1fVFlQRV9QQUdFX1BPT0wsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgcmluZy1cdTAwM2VwZ19wb29sKSBcdTAwM2MgMCkge1xuIFx0XHRcdHhkcF9yeHFfaW5mb191bnJlZyhcdTAwMjZyaW5nLVx1MDAzZXhkcF9yeHEpO1xuJiM0MztcdFx0XHRhcV9yaW5nX2ZyZWUocmluZyk7XG4gXHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRnb3RvIGVycl9leGl0O1xuIFx0XHR9XG4gXG4tXHRcdGVyciA9IGFxX3JpbmdfcnhfYWxsb2MocmluZywgYXFfbmljLCBpZHhfcmluZywgYXFfbmljX2NmZyk7XG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHR4ZHBfcnhxX2luZm9fdW5yZWcoXHUwMDI2cmluZy1cdTAwM2V4ZHBfcnhxKTtcbi1cdFx0XHRnb3RvIGVycl9leGl0O1xuLVx0XHR9XG4tXG4gXHRcdCYjNDM7JiM0MztzZWxmLVx1MDAzZXJ4X3JpbmdzO1xuIFx0fVxuIFxuQEAgLTI3NSw3ICYjNDM7MjgyLDcgQEAgdm9pZCBhcV92ZWNfZGVpbml0KHN0cnVjdCBhcV92ZWNfcyAqc2VsZilcbiBcbiBcdGZvciAoaSA9IDBVOyBzZWxmLVx1MDAzZXR4X3JpbmdzIFx1MDAzZSBpOyAmIzQzOyYjNDM7aSkge1xuIFx0XHRyaW5nID0gc2VsZi1cdTAwM2VyaW5nW2ldO1xuLVx0XHRhcV9yaW5nX3R4X2NsZWFuKFx1MDAyNnJpbmdbQVFfVkVDX1RYX0lEXSk7XG4mIzQzO1x0XHRhcV9yaW5nX3R4X2RlaW5pdChcdTAwMjZyaW5nW0FRX1ZFQ19UWF9JRF0pO1xuIFx0XHRhcV9yaW5nX3J4X2RlaW5pdChcdTAwMjZyaW5nW0FRX1ZFQ19SWF9JRF0pO1xuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgYVF1YW50aWEgQVF0aW9uIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvKS4gVGhpcyBpcyBhIGRyaXZlciBmb3IgYSBwaHlzaWNhbCBQQ0llIG5ldHdvcmsgY2FyZCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGExY2RiYTI4NGVmOGIxYTBkNTlmZTM5MTVkOWRhZmE3Nzg0OGRlMTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAyNSAxMzo0ODoyNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9LY29uZmlnCmluZGV4IGNlYzIwMThjODRhOWJjLi5jOGZiN2IzM2U1YjcxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9LY29uZmlnCkBAIC0yMCw2ICYjNDM7MjAsNyBAQCBjb25maWcgQVFUSU9OCiAJdHJpc3RhdGUgJiMzNDthUXVhbnRpYSBBUXRpb24odG0pIFN1cHBvcnQmIzM0OwogCWRlcGVuZHMgb24gUENJCiAJZGVwZW5kcyBvbiBNQUNTRUMgfHwgTUFDU0VDPW4KJiM0MzsJc2VsZWN0IFBBR0VfUE9PTAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgc3VwcG9ydCBmb3IgdGhlIGFRdWFudGlhIEFRdGlvbih0bSkgRXRoZXJuZXQgY2FyZC4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jCmluZGV4IDQyMGFmOTU4ZDQ4NjFhLi4wZjUxMjViZDIzMTU5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYwpAQCAtMTAwLDkgJiM0MzsxMDAsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFxX2V0aHRvb2xfcXVldWVfcnhfc3RhdF9uYW1lc1tdID0gewogCSYjMzQ7JXNRdWV1ZVslZF0gQWxsb2NGYWlscyYjMzQ7LAogCSYjMzQ7JXNRdWV1ZVslZF0gU2tiQWxsb2NGYWlscyYjMzQ7LAogCSYjMzQ7JXNRdWV1ZVslZF0gUG9sbHMmIzM0OywKLQkmIzM0OyVzUXVldWVbJWRdIFBhZ2VGbGlwcyYjMzQ7LAotCSYjMzQ7JXNRdWV1ZVslZF0gUGFnZVJldXNlcyYjMzQ7LAotCSYjMzQ7JXNRdWV1ZVslZF0gUGFnZUZyZWVzJiMzNDssCiAJJiMzNDslc1F1ZXVlWyVkXSBYZHBBYm9ydCYjMzQ7LAogCSYjMzQ7JXNRdWV1ZVslZF0gWGRwRHJvcCYjMzQ7LAogCSYjMzQ7JXNRdWV1ZVslZF0gWGRwUGFzcyYjMzQ7LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9wdHAuYwppbmRleCA1NThhYzkyMzdmNzU5ZS4uM2E0MGQ5ODZjZDY3ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3B0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3B0cC5jCkBAIC0xMyw2ICYjNDM7MTMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbGFzc2lmeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ludGVycnVwdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nsb2Nrc291cmNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC94ZHAuaCZndDsKIAogI2luY2x1ZGUgJiMzNDthcV9uaWMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2FxX3B0cC5oJiMzNDsKQEAgLTExOTIsMTIgJiM0MzsxMTkzLDIzIEBAIGludCBhcV9wdHBfcmluZ19hbGxvYyhzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYykKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9leGl0X3B0cF90eDsKIAomIzQzOwllcnIgPSB4ZHBfcnhxX2luZm9fcmVnKCZhbXA7YXFfcHRwLSZndDtwdHBfcngueGRwX3J4cSwgYXFfbmljLSZndDtuZGV2LAomIzQzOwkJCSAgICAgICByeF9yaW5nX2lkeCwgYXFfcHRwLSZndDtuYXBpLm5hcGlfaWQpOwomIzQzOwlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX2V4aXRfcHRwX3J4OwomIzQzOwomIzQzOwllcnIgPSB4ZHBfcnhxX2luZm9fcmVnX21lbV9tb2RlbCgmYW1wO2FxX3B0cC0mZ3Q7cHRwX3J4LnhkcF9yeHEsCiYjNDM7CQkJCQkgTUVNX1RZUEVfUEFHRV9QT09MLAomIzQzOwkJCQkJIGFxX3B0cC0mZ3Q7cHRwX3J4LnBnX3Bvb2wpOwomIzQzOwlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX2V4aXRfeGRwX3J4cTsKJiM0MzsKIAlpZiAoYXFfcHRwLSZndDthMV9wdHApIHsKIAkJZXJyID0gYXFfcmluZ19od3RzX3J4X2FsbG9jKCZhbXA7YXFfcHRwLSZndDtod3RzX3J4LCBhcV9uaWMsIFBUUF9IV1NUX1JJTkdfSURYLAogCQkJCQkgICAgYXFfbmljLSZndDthcV9uaWNfY2ZnLnJ4ZHMsCiAJCQkJCSAgICBhcV9uaWMtJmd0O2FxX25pY19jZmcuYXFfaHdfY2Fwcy0mZ3Q7cnhkX3NpemUpOwogCQlpZiAoZXJyKQotCQkJZ290byBlcnJfZXhpdF9wdHBfcng7CiYjNDM7CQkJZ290byBlcnJfZXhpdF94ZHBfcnhxOwogCX0KIAogCWVyciA9IGFxX3B0cF9za2JfcmluZ19pbml0KCZhbXA7YXFfcHRwLSZndDtza2JfcmluZywgYXFfbmljLSZndDthcV9uaWNfY2ZnLnJ4ZHMpOwpAQCAtMTIxNyw2ICYjNDM7MTIyOSw4IEBAIGludCBhcV9wdHBfcmluZ19hbGxvYyhzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYykKIGVycl9leGl0X2h3dHNfcng6CiAJaWYgKGFxX3B0cC0mZ3Q7YTFfcHRwKQogCQlhcV9yaW5nX2h3dHNfcnhfZnJlZSgmYW1wO2FxX3B0cC0mZ3Q7aHd0c19yeCk7CiYjNDM7ZXJyX2V4aXRfeGRwX3J4cToKJiM0MzsJeGRwX3J4cV9pbmZvX3VucmVnKCZhbXA7YXFfcHRwLSZndDtwdHBfcngueGRwX3J4cSk7CiBlcnJfZXhpdF9wdHBfcng6CiAJYXFfcmluZ19mcmVlKCZhbXA7YXFfcHRwLSZndDtwdHBfcngpOwogZXJyX2V4aXRfcHRwX3R4OgpAQCAtMTIzMyw2ICYjNDM7MTI0Nyw4IEBAIHZvaWQgYXFfcHRwX3JpbmdfZnJlZShzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYykKIAkJcmV0dXJuOwogCiAJYXFfcmluZ19mcmVlKCZhbXA7YXFfcHRwLSZndDtwdHBfdHgpOwomIzQzOwlpZiAoeGRwX3J4cV9pbmZvX2lzX3JlZygmYW1wO2FxX3B0cC0mZ3Q7cHRwX3J4LnhkcF9yeHEpKQomIzQzOwkJeGRwX3J4cV9pbmZvX3VucmVnKCZhbXA7YXFfcHRwLSZndDtwdHBfcngueGRwX3J4cSk7CiAJYXFfcmluZ19mcmVlKCZhbXA7YXFfcHRwLSZndDtwdHBfcngpOwogCWlmIChhcV9wdHAtJmd0O2ExX3B0cCkKIAkJYXFfcmluZ19od3RzX3J4X2ZyZWUoJmFtcDthcV9wdHAtJmd0O2h3dHNfcngpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jCmluZGV4IDhmZjA3ZGUyYmQ1MjQwLi45ZGQ4ODE3MTA1OTQyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuYwpAQCAtMTQsMTIwICYjNDM7MTQsMzcgQEAKICNpbmNsdWRlICYjMzQ7YXFfdmVjLmgmIzM0OwogI2luY2x1ZGUgJiMzNDthcV9tYWluLmgmIzM0OwogCiYjNDM7I2luY2x1ZGUgJmx0O25ldC9wYWdlX3Bvb2wvaGVscGVycy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC94ZHAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWx0ZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9icGZfdHJhY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGhlcmRldmljZS5oJmd0OwogCi1zdGF0aWMgdm9pZCBhcV9nZXRfcnhwYWdlc194ZHAoc3RydWN0IGFxX3JpbmdfYnVmZl9zICpidWZmLAotCQkJICAgICAgIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKQotewotCXN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNpbmZvOwotCWludCBpOwotCi0JaWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKSB7Ci0JCXNpbmZvID0geGRwX2dldF9zaGFyZWRfaW5mb19mcm9tX2J1ZmYoeGRwKTsKLQotCQlmb3IgKGkgPSAwOyBpICZsdDsgc2luZm8tJmd0O25yX2ZyYWdzOyBpJiM0MzsmIzQzOykgewotCQkJc2tiX2ZyYWdfdCAqZnJhZyA9ICZhbXA7c2luZm8tJmd0O2ZyYWdzW2ldOwotCi0JCQlwYWdlX3JlZl9pbmMoc2tiX2ZyYWdfcGFnZShmcmFnKSk7Ci0JCX0KLQl9Ci0JcGFnZV9yZWZfaW5jKGJ1ZmYtJmd0O3J4ZGF0YS5wYWdlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFxX2ZyZWVfcnhwYWdlKHN0cnVjdCBhcV9yeHBhZ2UgKnJ4cGFnZSwgc3RydWN0IGRldmljZSAqZGV2KQotewotCXVuc2lnbmVkIGludCBsZW4gPSBQQUdFX1NJWkUgJmx0OyZsdDsgcnhwYWdlLSZndDtvcmRlcjsKLQotCWRtYV91bm1hcF9wYWdlKGRldiwgcnhwYWdlLSZndDtkYWRkciwgbGVuLCBETUFfRlJPTV9ERVZJQ0UpOwotCi0JLyogRHJvcCB0aGUgcmVmIGZvciBiZWluZyBpbiB0aGUgcmluZy4gKi8KLQlfX2ZyZWVfcGFnZXMocnhwYWdlLSZndDtwYWdlLCByeHBhZ2UtJmd0O29yZGVyKTsKLQlyeHBhZ2UtJmd0O3BhZ2UgPSBOVUxMOwotfQotCi1zdGF0aWMgaW50IGFxX2FsbG9jX3J4cGFnZXMoc3RydWN0IGFxX3J4cGFnZSAqcnhwYWdlLCBzdHJ1Y3QgYXFfcmluZ19zICpyeF9yaW5nKQomIzQzO3N0YXRpYyBpbnQgYXFfZ2V0X3J4cGFnZXMoc3RydWN0IGFxX3JpbmdfcyAqc2VsZiwgc3RydWN0IGFxX3JpbmdfYnVmZl9zICpyeGJ1ZikKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhcV9uaWNfZ2V0X2RldihyeF9yaW5nLSZndDthcV9uaWMpOwotCXVuc2lnbmVkIGludCBvcmRlciA9IHJ4X3JpbmctJmd0O3BhZ2Vfb3JkZXI7CiYjNDM7CXVuc2lnbmVkIGludCBzaXplID0gc2VsZi0mZ3Q7cGFnZV9vZmZzZXQgJiM0Mzsgc2VsZi0mZ3Q7ZnJhbWVfbWF4ICYjNDM7CiYjNDM7CQkJICAgIHNlbGYtJmd0O3RhaWxfc2l6ZTsKJiM0MzsJdW5zaWduZWQgaW50IHBnX29mZjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlpbnQgcmV0ID0gLUVOT01FTTsKLQlkbWFfYWRkcl90IGRhZGRyOwotCi0JcGFnZSA9IGRldl9hbGxvY19wYWdlcyhvcmRlcik7Ci0JaWYgKHVubGlrZWx5KCFwYWdlKSkKLQkJZ290byBlcnJfZXhpdDsKLQotCWRhZGRyID0gZG1hX21hcF9wYWdlKGRldiwgcGFnZSwgMCwgUEFHRV9TSVpFICZsdDsmbHQ7IG9yZGVyLAotCQkJICAgICBETUFfRlJPTV9ERVZJQ0UpOwotCi0JaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgZGFkZHIpKSkKLQkJZ290byBmcmVlX3BhZ2U7Ci0KLQlyeHBhZ2UtJmd0O3BhZ2UgPSBwYWdlOwotCXJ4cGFnZS0mZ3Q7ZGFkZHIgPSBkYWRkcjsKLQlyeHBhZ2UtJmd0O29yZGVyID0gb3JkZXI7Ci0JcnhwYWdlLSZndDtwZ19vZmYgPSByeF9yaW5nLSZndDtwYWdlX29mZnNldDsKLQotCXJldHVybiAwOwotCi1mcmVlX3BhZ2U6Ci0JX19mcmVlX3BhZ2VzKHBhZ2UsIG9yZGVyKTsKIAotZXJyX2V4aXQ6Ci0JcmV0dXJuIHJldDsKLX0KJiM0MzsJLyogQnVmZmVycyB3aG9zZSBwYWdlIHdhcyBub3QgcGFzc2VkIHVwIHRoZSBzdGFjayBhcmUgcmVwb3N0ZWQKJiM0MzsJICogd2l0aCB0aGUgZGF0YSB0aGV5IGFscmVhZHkgY2FycnkgZGlzY2FyZGVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJ4YnVmLSZndDtyeGRhdGEucGFnZSkKJiM0MzsJCXJldHVybiAwOwogCi1zdGF0aWMgaW50IGFxX2dldF9yeHBhZ2VzKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsIHN0cnVjdCBhcV9yaW5nX2J1ZmZfcyAqcnhidWYpCi17Ci0JdW5zaWduZWQgaW50IG9yZGVyID0gc2VsZi0mZ3Q7cGFnZV9vcmRlcjsKLQl1MTYgcGFnZV9vZmZzZXQgPSBzZWxmLSZndDtwYWdlX29mZnNldDsKLQl1MTYgZnJhbWVfbWF4ID0gc2VsZi0mZ3Q7ZnJhbWVfbWF4OwotCXUxNiB0YWlsX3NpemUgPSBzZWxmLSZndDt0YWlsX3NpemU7Ci0JaW50IHJldDsKLQotCWlmIChyeGJ1Zi0mZ3Q7cnhkYXRhLnBhZ2UpIHsKLQkJLyogT25lIG1lYW5zIHJpbmcgaXMgdGhlIG9ubHkgdXNlciBhbmQgY2FuIHJldXNlICovCi0JCWlmIChwYWdlX3JlZl9jb3VudChyeGJ1Zi0mZ3Q7cnhkYXRhLnBhZ2UpICZndDsgMSkgewotCQkJLyogVHJ5IHJldXNlIGJ1ZmZlciAqLwotCQkJcnhidWYtJmd0O3J4ZGF0YS5wZ19vZmYgJiM0Mzs9IGZyYW1lX21heCAmIzQzOyBwYWdlX29mZnNldCAmIzQzOwotCQkJCQkJdGFpbF9zaXplOwotCQkJaWYgKHJ4YnVmLSZndDtyeGRhdGEucGdfb2ZmICYjNDM7IGZyYW1lX21heCAmIzQzOyB0YWlsX3NpemUgJmx0Oz0KLQkJCSAgICAoUEFHRV9TSVpFICZsdDsmbHQ7IG9yZGVyKSkgewotCQkJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtzZWxmLSZndDtzdGF0cy5yeC5zeW5jcCk7Ci0JCQkJc2VsZi0mZ3Q7c3RhdHMucngucGdfZmxpcHMmIzQzOyYjNDM7OwotCQkJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7c2VsZi0mZ3Q7c3RhdHMucnguc3luY3ApOwotCi0JCQl9IGVsc2UgewotCQkJCS8qIEJ1ZmZlciBleGhhdXN0ZWQuIFdlIGhhdmUgb3RoZXIgdXNlcnMgYW5kCi0JCQkJICogc2hvdWxkIHJlbGVhc2UgdGhpcyBwYWdlIGFuZCByZWFsbG9jCi0JCQkJICovCi0JCQkJYXFfZnJlZV9yeHBhZ2UoJmFtcDtyeGJ1Zi0mZ3Q7cnhkYXRhLAotCQkJCQkgICAgICAgYXFfbmljX2dldF9kZXYoc2VsZi0mZ3Q7YXFfbmljKSk7Ci0JCQkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3NlbGYtJmd0O3N0YXRzLnJ4LnN5bmNwKTsKLQkJCQlzZWxmLSZndDtzdGF0cy5yeC5wZ19sb3N0cyYjNDM7JiM0Mzs7Ci0JCQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtzZWxmLSZndDtzdGF0cy5yeC5zeW5jcCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlyeGJ1Zi0mZ3Q7cnhkYXRhLnBnX29mZiA9IHBhZ2Vfb2Zmc2V0OwotCQkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3NlbGYtJmd0O3N0YXRzLnJ4LnN5bmNwKTsKLQkJCXNlbGYtJmd0O3N0YXRzLnJ4LnBnX3JldXNlcyYjNDM7JiM0Mzs7Ci0JCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3NlbGYtJmd0O3N0YXRzLnJ4LnN5bmNwKTsKLQkJfQomIzQzOwlwYWdlID0gcGFnZV9wb29sX2Rldl9hbGxvY19mcmFnKHNlbGYtJmd0O3BnX3Bvb2wsICZhbXA7cGdfb2ZmLCBzaXplKTsKJiM0MzsJaWYgKHVubGlrZWx5KCFwYWdlKSkgewomIzQzOwkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3NlbGYtJmd0O3N0YXRzLnJ4LnN5bmNwKTsKJiM0MzsJCXNlbGYtJmd0O3N0YXRzLnJ4LmFsbG9jX2ZhaWxzJiM0MzsmIzQzOzsKJiM0MzsJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7c2VsZi0mZ3Q7c3RhdHMucnguc3luY3ApOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaWYgKCFyeGJ1Zi0mZ3Q7cnhkYXRhLnBhZ2UpIHsKLQkJcmV0ID0gYXFfYWxsb2NfcnhwYWdlcygmYW1wO3J4YnVmLSZndDtyeGRhdGEsIHNlbGYpOwotCQlpZiAocmV0KSB7Ci0JCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7c2VsZi0mZ3Q7c3RhdHMucnguc3luY3ApOwotCQkJc2VsZi0mZ3Q7c3RhdHMucnguYWxsb2NfZmFpbHMmIzQzOyYjNDM7OwotCQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtzZWxmLSZndDtzdGF0cy5yeC5zeW5jcCk7Ci0JCX0KLQkJcmV0dXJuIHJldDsKLQl9CiYjNDM7CXJ4YnVmLSZndDtyeGRhdGEucGFnZSA9IHBhZ2U7CiYjNDM7CXJ4YnVmLSZndDtyeGRhdGEuZGFkZHIgPSBwYWdlX3Bvb2xfZ2V0X2RtYV9hZGRyKHBhZ2UpOwomIzQzOwlyeGJ1Zi0mZ3Q7cnhkYXRhLnBnX29mZiA9IHBnX29mZiAmIzQzOyBzZWxmLSZndDtwYWdlX29mZnNldDsKIAogCXJldHVybiAwOwogfQpAQCAtMTc5LDYgJiM0Mzs5NiwxNSBAQCBpbnQgYXFfcmluZ19yeF9hbGxvYyhzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLAogCQkgICAgIHVuc2lnbmVkIGludCBpZHgsCiAJCSAgICAgc3RydWN0IGFxX25pY19jZmdfcyAqYXFfbmljX2NmZykKIHsKJiM0MzsJc3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMgcHBfcGFyYW1zID0gewomIzQzOwkJLmZsYWdzID0gUFBfRkxBR19ETUFfTUFQIHwgUFBfRkxBR19ETUFfU1lOQ19ERVYsCiYjNDM7CQkucG9vbF9zaXplID0gYXFfbmljX2NmZy0mZ3Q7cnhkcywKJiM0MzsJCS5uaWQgPSBOVU1BX05PX05PREUsCiYjNDM7CQkuZGV2ID0gYXFfbmljX2dldF9kZXYoYXFfbmljKSwKJiM0MzsJCS5kbWFfZGlyID0gRE1BX0ZST01fREVWSUNFLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgcGFnZV9wb29sICpwb29sOwomIzQzOwogCXNlbGYtJmd0O2FxX25pYyA9IGFxX25pYzsKIAlzZWxmLSZndDtpZHggPSBpZHg7CiAJc2VsZi0mZ3Q7c2l6ZSA9IGFxX25pY19jZmctJmd0O3J4ZHM7CkBAIC0yMDAsNiAmIzQzOzEyNiwxOCBAQCBpbnQgYXFfcmluZ19yeF9hbGxvYyhzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLAogCQlzZWxmLSZndDt0YWlsX3NpemUgPSAwOwogCX0KIAomIzQzOwlwcF9wYXJhbXMub3JkZXIgPSBzZWxmLSZndDtwYWdlX29yZGVyOwomIzQzOwlwcF9wYXJhbXMubWF4X2xlbiA9IFBBR0VfU0laRSAmbHQ7Jmx0OyBzZWxmLSZndDtwYWdlX29yZGVyOwomIzQzOwomIzQzOwlwb29sID0gcGFnZV9wb29sX2NyZWF0ZSgmYW1wO3BwX3BhcmFtcyk7CiYjNDM7CWlmIChJU19FUlIocG9vbCkpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihwb29sKTsKJiM0MzsKJiM0MzsJc2VsZi0mZ3Q7cGdfcG9vbCA9IHBvb2w7CiYjNDM7CiYjNDM7CS8qIE9uIGZhaWx1cmUgYXFfcmluZ19hbGxvYygpIGNhbGxzIGFxX3JpbmdfZnJlZSgpLCB3aGljaCBhbHNvCiYjNDM7CSAqIGRlc3Ryb3lzIHRoZSBwYWdlIHBvb2wuCiYjNDM7CSAqLwogCXJldHVybiBhcV9yaW5nX2FsbG9jKHNlbGYsIGFxX25pYyk7CiB9CiAKQEAgLTM0Niw3ICYjNDM7Mjg0LDExIEBAIGJvb2wgYXFfcmluZ190eF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKQogCQkJJiM0MzsmIzQzO3NlbGYtJmd0O3N0YXRzLnR4LnBhY2tldHM7CiAJCQlzZWxmLSZndDtzdGF0cy50eC5ieXRlcyAmIzQzOz0geGRwX2dldF9mcmFtZV9sZW4oYnVmZi0mZ3Q7eGRwZik7CiAJCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3NlbGYtJmd0O3N0YXRzLnR4LnN5bmNwKTsKLQkJCXhkcF9yZXR1cm5fZnJhbWVfcnhfbmFwaShidWZmLSZndDt4ZHBmKTsKJiM0MzsJCQkvKiBGcmFtZXMgcXVldWVkIHZpYSBuZG9feGRwX3htaXQoKSBtYXkgY29tZSBmcm9tIGEKJiM0MzsJCQkgKiBwYWdlIHBvb2wgb3duZWQgYnkgYW5vdGhlciBOQVBJIGNvbnRleHQ6IG5vIGRpcmVjdAomIzQzOwkJCSAqIHJlY3ljbGluZy4KJiM0MzsJCQkgKi8KJiM0MzsJCQl4ZHBfcmV0dXJuX2ZyYW1lKGJ1ZmYtJmd0O3hkcGYpOwogCQl9CiAKIG91dDoKQEAgLTM2MCw2ICYjNDM7MzAyLDM1IEBAIGJvb2wgYXFfcmluZ190eF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKQogCXJldHVybiAhIWJ1ZGdldDsKIH0KIAomIzQzO3ZvaWQgYXFfcmluZ190eF9kZWluaXQoc3RydWN0IGFxX3JpbmdfcyAqc2VsZikKJiM0Mzt7CiYjNDM7CWlmICghc2VsZikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yICg7IHNlbGYtJmd0O3N3X2hlYWQgIT0gc2VsZi0mZ3Q7c3dfdGFpbDsKJiM0MzsJCXNlbGYtJmd0O3N3X2hlYWQgPSBhcV9yaW5nX25leHRfZHgoc2VsZiwgc2VsZi0mZ3Q7c3dfaGVhZCkpIHsKJiM0MzsJCXN0cnVjdCBhcV9yaW5nX2J1ZmZfcyAqYnVmZiA9ICZhbXA7c2VsZi0mZ3Q7YnVmZl9yaW5nW3NlbGYtJmd0O3N3X2hlYWRdOwomIzQzOwkJc3RydWN0IGRldmljZSAqbmRldiA9IGFxX25pY19nZXRfZGV2KHNlbGYtJmd0O2FxX25pYyk7CiYjNDM7CiYjNDM7CQlpZiAoYnVmZi0mZ3Q7aXNfbWFwcGVkKSB7CiYjNDM7CQkJaWYgKGJ1ZmYtJmd0O2lzX3NvcCkgewomIzQzOwkJCQlkbWFfdW5tYXBfc2luZ2xlKG5kZXYsIGJ1ZmYtJmd0O3BhLCBidWZmLSZndDtsZW4sCiYjNDM7CQkJCQkJIERNQV9UT19ERVZJQ0UpOwomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCWRtYV91bm1hcF9wYWdlKG5kZXYsIGJ1ZmYtJmd0O3BhLCBidWZmLSZndDtsZW4sCiYjNDM7CQkJCQkgICAgICAgRE1BX1RPX0RFVklDRSk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKGJ1ZmYtJmd0O2lzX2VvcCkgewomIzQzOwkJCWlmIChidWZmLSZndDtza2IpCiYjNDM7CQkJCWRldl9rZnJlZV9za2JfYW55KGJ1ZmYtJmd0O3NrYik7CiYjNDM7CQkJZWxzZSBpZiAoYnVmZi0mZ3Q7eGRwZikKJiM0MzsJCQkJeGRwX3JldHVybl9mcmFtZShidWZmLSZndDt4ZHBmKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGFxX3J4X2NoZWNrc3VtKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsCiAJCQkgICBzdHJ1Y3QgYXFfcmluZ19idWZmX3MgKmJ1ZmYsCiAJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtNDA4LDIyICYjNDM7Mzc5LDE1IEBAIGludCBhcV94ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtX2ZyYW1lcywKIH0KIAogc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLAotCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQlzdHJ1Y3QgYXFfcmluZ19idWZmX3MgKmJ1ZmYpCiYjNDM7CQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB4ZHBfZnJhbWUgKnhkcGY7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCXhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7CiAJaWYgKHVubGlrZWx5KCF4ZHBmKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlza2IgPSB4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoeGRwZiwgZGV2KTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlhcV9nZXRfcnhwYWdlc194ZHAoYnVmZiwgeGRwKTsKLQlyZXR1cm4gc2tiOwomIzQzOwlyZXR1cm4geGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHhkcGYsIGRldik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX3J1bl9wcm9nKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLApAQCAtNDQ0LDggJiM0Mzs0MDgsMTYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsCiAJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtyeF9yaW5nLSZndDtzdGF0cy5yeC5zeW5jcCk7CiAKIAlwcm9nID0gUkVBRF9PTkNFKHJ4X3JpbmctJmd0O3hkcF9wcm9nKTsKLQlpZiAoIXByb2cpCi0JCXJldHVybiBhcV94ZHBfYnVpbGRfc2tiKHhkcCwgYXFfbmljLSZndDtuZGV2LCBidWZmKTsKJiM0MzsJaWYgKCFwcm9nKSB7CiYjNDM7CQlza2IgPSBhcV94ZHBfYnVpbGRfc2tiKHhkcCwgYXFfbmljLSZndDtuZGV2KTsKJiM0MzsJCS8qIFRoZSByaW5nIGhhcyBhbHJlYWR5IGhhbmRlZCBpdHMgcGFnZSBwb29sIHJlZmVyZW5jZSB0byB0aGUKJiM0MzsJCSAqIHhkcF9idWZmLCBzbyBpZiB0aGUgc2tiIGNvdWxkIG5vdCBiZSBidWlsdCB0aGUgYnVmZmVyIG11c3QKJiM0MzsJCSAqIGJlIHJldHVybmVkIHRvIHRoZSBwb29sIGhlcmUgb3IgaXRzIGZyYWdtZW50cyB3b3VsZCBsZWFrLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIXNrYikKJiM0MzsJCQl4ZHBfcmV0dXJuX2J1ZmYoeGRwKTsKJiM0MzsJCXJldHVybiBza2I7CiYjNDM7CX0KIAogCXByZWZldGNodyh4ZHAtJmd0O2RhdGFfaGFyZF9zdGFydCk7IC8qIHhkcF9mcmFtZSB3cml0ZSAqLwogCkBAIC00NTYsNyAmIzQzOzQyOCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX3J1bl9wcm9nKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLAogCWFjdCA9IGJwZl9wcm9nX3J1bl94ZHAocHJvZywgeGRwKTsKIAlzd2l0Y2ggKGFjdCkgewogCWNhc2UgWERQX1BBU1M6Ci0JCXNrYiA9IGFxX3hkcF9idWlsZF9za2IoeGRwLCBhcV9uaWMtJmd0O25kZXYsIGJ1ZmYpOwomIzQzOwkJc2tiID0gYXFfeGRwX2J1aWxkX3NrYih4ZHAsIGFxX25pYy0mZ3Q7bmRldik7CiAJCWlmICghc2tiKQogCQkJZ290byBvdXRfYWJvcnRlZDsKIAkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3J4X3JpbmctJmd0O3N0YXRzLnJ4LnN5bmNwKTsKQEAgLTQ3NCw3ICYjNDM7NDQ2LDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsCiAJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtyeF9yaW5nLSZndDtzdGF0cy5yeC5zeW5jcCk7CiAJCSYjNDM7JiM0MztyeF9yaW5nLSZndDtzdGF0cy5yeC54ZHBfdHg7CiAJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7cnhfcmluZy0mZ3Q7c3RhdHMucnguc3luY3ApOwotCQlhcV9nZXRfcnhwYWdlc194ZHAoYnVmZiwgeGRwKTsKIAkJYnJlYWs7CiAJY2FzZSBYRFBfUkVESVJFQ1Q6CiAJCWlmICh4ZHBfZG9fcmVkaXJlY3QoYXFfbmljLSZndDtuZGV2LCB4ZHAsIHByb2cpICZsdDsgMCkKQEAgLTQ4Myw3ICYjNDM7NDU0LDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsCiAJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtyeF9yaW5nLSZndDtzdGF0cy5yeC5zeW5jcCk7CiAJCSYjNDM7JiM0MztyeF9yaW5nLSZndDtzdGF0cy5yeC54ZHBfcmVkaXJlY3Q7CiAJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7cnhfcmluZy0mZ3Q7c3RhdHMucnguc3luY3ApOwotCQlhcV9nZXRfcnhwYWdlc194ZHAoYnVmZiwgeGRwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZmFsbHRocm91Z2g7CkBAIC00OTQsMTEgJiM0Mzs0NjQsMTMgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsCiAJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7cnhfcmluZy0mZ3Q7c3RhdHMucnguc3luY3ApOwogCQl0cmFjZV94ZHBfZXhjZXB0aW9uKGFxX25pYy0mZ3Q7bmRldiwgcHJvZywgYWN0KTsKIAkJYnBmX3dhcm5faW52YWxpZF94ZHBfYWN0aW9uKGFxX25pYy0mZ3Q7bmRldiwgcHJvZywgYWN0KTsKJiM0MzsJCXhkcF9yZXR1cm5fYnVmZih4ZHApOwogCQlicmVhazsKIAljYXNlIFhEUF9EUk9QOgogCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7cnhfcmluZy0mZ3Q7c3RhdHMucnguc3luY3ApOwogCQkmIzQzOyYjNDM7cnhfcmluZy0mZ3Q7c3RhdHMucngueGRwX2Ryb3A7CiAJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7cnhfcmluZy0mZ3Q7c3RhdHMucnguc3luY3ApOwomIzQzOwkJeGRwX3JldHVybl9idWZmKHhkcCk7CiAJCWJyZWFrOwogCX0KIApAQCAtNTE3LDggJiM0Mzs0ODksMTEgQEAgc3RhdGljIGJvb2wgYXFfYWRkX3J4X2ZyYWdtZW50KHN0cnVjdCBkZXZpY2UgKmRldiwKIAlkbyB7CiAJCXNrYl9mcmFnX3QgKmZyYWc7CiAKLQkJaWYgKHVubGlrZWx5KHNpbmZvLSZndDtucl9mcmFncyAmZ3Q7PSBNQVhfU0tCX0ZSQUdTKSkKJiM0MzsJCWlmICh1bmxpa2VseShzaW5mby0mZ3Q7bnJfZnJhZ3MgJmd0Oz0gTUFYX1NLQl9GUkFHUykpIHsKJiM0MzsJCQkvKiBBdHRhY2hlZCBmcmFncyBtdXN0IHJlYWNoIHhkcF9yZXR1cm5fYnVmZigpICovCiYjNDM7CQkJeGRwX2J1ZmZfc2V0X2ZyYWdzX2ZsYWcoeGRwKTsKIAkJCXJldHVybiB0cnVlOwomIzQzOwkJfQogCiAJCWZyYWcgPSAmYW1wO3NpbmZvLSZndDtmcmFnc1tzaW5mby0mZ3Q7bnJfZnJhZ3MmIzQzOyYjNDM7XTsKIAkJYnVmZl8gPSAmYW1wO3JpbmctJmd0O2J1ZmZfcmluZ1tidWZmXy0mZ3Q7bmV4dF07CkBAIC01NDIsNiAmIzQzOzUxNywxMSBAQCBzdGF0aWMgYm9vbCBhcV9hZGRfcnhfZnJhZ21lbnQoc3RydWN0IGRldmljZSAqZGV2LAogCQlpZiAocGFnZV9pc19wZm1lbWFsbG9jKGJ1ZmZfLSZndDtyeGRhdGEucGFnZSkpCiAJCQl4ZHBfYnVmZl9zZXRfZnJhZ19wZm1lbWFsbG9jKHhkcCk7CiAKJiM0MzsJCS8qIFRoZSBmcmFnJiMzOTtzIHBhZ2UgcG9vbCByZWZlcmVuY2UgaXMgb3duZWQgYnkgdGhlIHhkcF9idWZmCiYjNDM7CQkgKiBmcm9tIG5vdyBvbi4KJiM0MzsJCSAqLwomIzQzOwkJYnVmZl8tJmd0O3J4ZGF0YS5wYWdlID0gTlVMTDsKJiM0MzsKIAl9IHdoaWxlICghYnVmZl8tJmd0O2lzX2VvcCk7CiAKIAl4ZHBfYnVmZl9zZXRfZnJhZ3NfZmxhZyh4ZHApOwpAQCAtNjQ1LDYgJiM0Mzs2MjUsNyBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ19yeF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBlcnJfZXhpdDsKIAkJfQomIzQzOwkJc2tiX21hcmtfZm9yX3JlY3ljbGUoc2tiKTsKIAkJaWYgKGlzX3B0cF9yaW5nKQogCQkJYnVmZi0mZ3Q7bGVuIC09CiAJCQkJYXFfcHRwX2V4dHJhY3RfdHMoc2VsZi0mZ3Q7YXFfbmljLCBza2JfaHd0c3RhbXBzKHNrYiksCkBAIC02NjUsNyAmIzQzOzY0Niw3IEBAIHN0YXRpYyBpbnQgX19hcV9yaW5nX3J4X2NsZWFuKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAkJCQkJYnVmZi0mZ3Q7cnhkYXRhLnBnX29mZiAmIzQzOyBoZHJfbGVuLAogCQkJCQlidWZmLSZndDtsZW4gLSBoZHJfbGVuLAogCQkJCQlzZWxmLSZndDtmcmFtZV9tYXgpOwotCQkJcGFnZV9yZWZfaW5jKGJ1ZmYtJmd0O3J4ZGF0YS5wYWdlKTsKJiM0MzsJCQlidWZmLSZndDtyeGRhdGEucGFnZSA9IE5VTEw7CiAJCX0KIAogCQlpZiAoIWJ1ZmYtJmd0O2lzX2VvcCkgewpAQCAtNjg0LDcgJiM0Mzs2NjUsNyBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ19yeF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQkJCQlidWZmXy0mZ3Q7cnhkYXRhLnBnX29mZiwKIAkJCQkJCWJ1ZmZfLSZndDtsZW4sCiAJCQkJCQlzZWxmLSZndDtmcmFtZV9tYXgpOwotCQkJCXBhZ2VfcmVmX2luYyhidWZmXy0mZ3Q7cnhkYXRhLnBhZ2UpOwomIzQzOwkJCQlidWZmXy0mZ3Q7cnhkYXRhLnBhZ2UgPSBOVUxMOwogCQkJCWJ1ZmZfLSZndDtpc19jbGVhbmVkID0gMTsKIAogCQkJCWJ1ZmYtJmd0O2lzX2lwX2NzbyAmYW1wOz0gYnVmZl8tJmd0O2lzX2lwX2NzbzsKQEAgLTgyMiw2ICYjNDM7ODAzLDExIEBAIHN0YXRpYyBpbnQgX19hcV9yaW5nX3hkcF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpyeF9yaW5nLAogCQl4ZHBfaW5pdF9idWZmKCZhbXA7eGRwLCBmcmFtZV9zeiwgJmFtcDtyeF9yaW5nLSZndDt4ZHBfcnhxKTsKIAkJeGRwX3ByZXBhcmVfYnVmZigmYW1wO3hkcCwgaGFyZF9zdGFydCwgcnhfcmluZy0mZ3Q7cGFnZV9vZmZzZXQsCiAJCQkJIGJ1ZmYtJmd0O2xlbiwgZmFsc2UpOwomIzQzOwkJLyogVGhlIHhkcF9idWZmIG93bnMgdGhlIGJ1ZmZlciYjMzk7cyBwYWdlIHBvb2wgcmVmZXJlbmNlIGZyb20KJiM0MzsJCSAqIGhlcmUgb247IGl0IGNvbWVzIGJhY2sgdGhyb3VnaCB0aGUgTUVNX1RZUEVfUEFHRV9QT09MCiYjNDM7CQkgKiBtZW1vcnkgbW9kZWwgb24gZXZlcnkgWERQIHZlcmRpY3QuCiYjNDM7CQkgKi8KJiM0MzsJCWJ1ZmYtJmd0O3J4ZGF0YS5wYWdlID0gTlVMTDsKIAkJaWYgKCFidWZmLSZndDtpc19lb3ApIHsKIAkJCWlmIChhcV9hZGRfcnhfZnJhZ21lbnQoZGV2LCByeF9yaW5nLCBidWZmLCAmYW1wO3hkcCkpIHsKIAkJCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7cnhfcmluZy0mZ3Q7c3RhdHMucnguc3luY3ApOwpAQCAtODI5LDYgJiM0Mzs4MTUsNyBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ194ZHBfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqcnhfcmluZywKIAkJCQlyeF9yaW5nLSZndDtzdGF0cy5yeC5ieXRlcyAmIzQzOz0geGRwX2dldF9idWZmX2xlbigmYW1wO3hkcCk7CiAJCQkJJiM0MzsmIzQzO3J4X3JpbmctJmd0O3N0YXRzLnJ4LnhkcF9hYm9ydGVkOwogCQkJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7cnhfcmluZy0mZ3Q7c3RhdHMucnguc3luY3ApOwomIzQzOwkJCQl4ZHBfcmV0dXJuX2J1ZmYoJmFtcDt4ZHApOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQl9CkBAIC05MjEsMTUgJiM0Mzs5MDgsMzEgQEAgaW50IGFxX3JpbmdfcnhfZmlsbChzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKQogCiB2b2lkIGFxX3JpbmdfcnhfZGVpbml0KHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYpCiB7Ci0JaWYgKCFzZWxmKQomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKCFzZWxmIHx8ICFzZWxmLSZndDtidWZmX3JpbmcpCiAJCXJldHVybjsKIAotCWZvciAoOyBzZWxmLSZndDtzd19oZWFkICE9IHNlbGYtJmd0O3N3X3RhaWw7Ci0JCXNlbGYtJmd0O3N3X2hlYWQgPSBhcV9yaW5nX25leHRfZHgoc2VsZiwgc2VsZi0mZ3Q7c3dfaGVhZCkpIHsKLQkJc3RydWN0IGFxX3JpbmdfYnVmZl9zICpidWZmID0gJmFtcDtzZWxmLSZndDtidWZmX3Jpbmdbc2VsZi0mZ3Q7c3dfaGVhZF07CiYjNDM7CS8qIFJlbGVhc2UgZXZlcnkgcGFnZSBzdGlsbCBvd25lZCBieSB0aGUgcmluZy4KJiM0MzsJICoKJiM0MzsJICogV2Fsa2luZyBbc3dfaGVhZCwgc3dfdGFpbCkgaXMgbm90IGVub3VnaDogcmVmaWxsIGlzIGJhdGNoZWQKJiM0MzsJICogKGFxX3JpbmdfcnhfZmlsbCgpIHdhaXRzIGZvciBBUV9DRkdfUlhfUkVGSUxMX1RIUkVTIGZyZWUgc2xvdHMpLAomIzQzOwkgKiBzbyBzbG90cyB0aGF0IHdlcmUgY2xlYW5lZCBidXQgbm90IHlldCByZXBvc3RlZCBhY2N1bXVsYXRlIGluIHRoZQomIzQzOwkgKiBbc3dfdGFpbCwgc3dfaGVhZCkgZ2FwLCBhbmQgdGhleSBrZWVwIHRoZWlyIHBhZ2UgZm9yIHJldXNlLiBXYWxrCiYjNDM7CSAqIHRoZSB3aG9sZSByaW5nIGFuZCByZWxlYXNlIHdoYXRldmVyIGlzIGxlZnQuCiYjNDM7CSAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgc2VsZi0mZ3Q7c2l6ZTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBhcV9yaW5nX2J1ZmZfcyAqYnVmZiA9ICZhbXA7c2VsZi0mZ3Q7YnVmZl9yaW5nW2ldOwomIzQzOwomIzQzOwkJaWYgKCFidWZmLSZndDtyeGRhdGEucGFnZSkKJiM0MzsJCQljb250aW51ZTsKIAotCQlhcV9mcmVlX3J4cGFnZSgmYW1wO2J1ZmYtJmd0O3J4ZGF0YSwgYXFfbmljX2dldF9kZXYoc2VsZi0mZ3Q7YXFfbmljKSk7CiYjNDM7CQlwYWdlX3Bvb2xfcHV0X2Z1bGxfcGFnZShzZWxmLSZndDtwZ19wb29sLCBidWZmLSZndDtyeGRhdGEucGFnZSwKJiM0MzsJCQkJCWZhbHNlKTsKJiM0MzsJCWJ1ZmYtJmd0O3J4ZGF0YS5wYWdlID0gTlVMTDsKIAl9CiYjNDM7CiYjNDM7CXNlbGYtJmd0O3N3X2hlYWQgPSBzZWxmLSZndDtzd190YWlsOwogfQogCiB2b2lkIGFxX3JpbmdfZnJlZShzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKQpAQCAtOTQwLDYgJiM0Mzs5NDMsMTEgQEAgdm9pZCBhcV9yaW5nX2ZyZWUoc3RydWN0IGFxX3JpbmdfcyAqc2VsZikKIAlrZnJlZShzZWxmLSZndDtidWZmX3JpbmcpOwogCXNlbGYtJmd0O2J1ZmZfcmluZyA9IE5VTEw7CiAKJiM0MzsJaWYgKHNlbGYtJmd0O3BnX3Bvb2wpIHsKJiM0MzsJCXBhZ2VfcG9vbF9kZXN0cm95KHNlbGYtJmd0O3BnX3Bvb2wpOwomIzQzOwkJc2VsZi0mZ3Q7cGdfcG9vbCA9IE5VTEw7CiYjNDM7CX0KJiM0MzsKIAlpZiAoc2VsZi0mZ3Q7ZHhfcmluZykgewogCQlkbWFfZnJlZV9jb2hlcmVudChhcV9uaWNfZ2V0X2RldihzZWxmLSZndDthcV9uaWMpLAogCQkJCSAgc2VsZi0mZ3Q7c2l6ZSAqIHNlbGYtJmd0O2R4X3NpemUsIHNlbGYtJmd0O2R4X3JpbmcsCkBAIC05NzgsOSAmIzQzOzk4Niw2IEBAIHVuc2lnbmVkIGludCBhcV9yaW5nX2ZpbGxfc3RhdHNfZGF0YShzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLCB1NjQgKmRhdGEpCiAJCQlkYXRhWyYjNDM7JiM0Mztjb3VudF0gPSBzZWxmLSZndDtzdGF0cy5yeC5hbGxvY19mYWlsczsKIAkJCWRhdGFbJiM0MzsmIzQzO2NvdW50XSA9IHNlbGYtJmd0O3N0YXRzLnJ4LnNrYl9hbGxvY19mYWlsczsKIAkJCWRhdGFbJiM0MzsmIzQzO2NvdW50XSA9IHNlbGYtJmd0O3N0YXRzLnJ4LnBvbGxzOwotCQkJZGF0YVsmIzQzOyYjNDM7Y291bnRdID0gc2VsZi0mZ3Q7c3RhdHMucngucGdfZmxpcHM7Ci0JCQlkYXRhWyYjNDM7JiM0Mztjb3VudF0gPSBzZWxmLSZndDtzdGF0cy5yeC5wZ19yZXVzZXM7Ci0JCQlkYXRhWyYjNDM7JiM0Mztjb3VudF0gPSBzZWxmLSZndDtzdGF0cy5yeC5wZ19sb3N0czsKIAkJCWRhdGFbJiM0MzsmIzQzO2NvdW50XSA9IHNlbGYtJmd0O3N0YXRzLnJ4LnhkcF9hYm9ydGVkOwogCQkJZGF0YVsmIzQzOyYjNDM7Y291bnRdID0gc2VsZi0mZ3Q7c3RhdHMucngueGRwX2Ryb3A7CiAJCQlkYXRhWyYjNDM7JiM0Mztjb3VudF0gPSBzZWxmLSZndDtzdGF0cy5yeC54ZHBfcGFzczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuaAppbmRleCBhNzBiODgwYWRhNjdlOS4uNThiY2FkYjNlM2NjZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmgKQEAgLTE3LDEyICYjNDM7MTcsMTIgQEAKICNkZWZpbmUgQVFfWERQX1RBSUxST09NCQlTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpCiAKIHN0cnVjdCBwYWdlOwomIzQzO3N0cnVjdCBwYWdlX3Bvb2w7CiBzdHJ1Y3QgYXFfbmljX2NmZ19zOwogCiBzdHJ1Y3QgYXFfcnhwYWdlIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlkbWFfYWRkcl90IGRhZGRyOwotCXVuc2lnbmVkIGludCBvcmRlcjsKIAl1bnNpZ25lZCBpbnQgcGdfb2ZmOwogfTsKIApAQCAtMTA1LDkgJiM0MzsxMDUsNiBAQCBzdHJ1Y3QgYXFfcmluZ19zdGF0c19yeF9zIHsKIAl1NjQgYWxsb2NfZmFpbHM7CiAJdTY0IHNrYl9hbGxvY19mYWlsczsKIAl1NjQgcG9sbHM7Ci0JdTY0IHBnX2xvc3RzOwotCXU2NCBwZ19mbGlwczsKLQl1NjQgcGdfcmV1c2VzOwogCXU2NCB4ZHBfYWJvcnRlZDsKIAl1NjQgeGRwX2Ryb3A7CiAJdTY0IHhkcF9wYXNzOwpAQCAtMTUxLDYgJiM0MzsxNDgsNyBAQCBzdHJ1Y3QgYXFfcmluZ19zIHsKIAl1MTYgdGFpbF9zaXplOwogCXVuaW9uIGFxX3Jpbmdfc3RhdHNfcyBzdGF0czsKIAlkbWFfYWRkcl90IGR4X3JpbmdfcGE7CiYjNDM7CXN0cnVjdCBwYWdlX3Bvb2wgKnBnX3Bvb2w7CiAJc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZzsKIAllbnVtIGF0bF9yaW5nX3R5cGUgcmluZ190eXBlOwogCXN0cnVjdCB4ZHBfcnhxX2luZm8geGRwX3J4cTsKQEAgLTIwMiw2ICYjNDM7MjAwLDcgQEAgdm9pZCBhcV9yaW5nX3VwZGF0ZV9xdWV1ZV9zdGF0ZShzdHJ1Y3QgYXFfcmluZ19zICpyaW5nKTsKIHZvaWQgYXFfcmluZ19xdWV1ZV93YWtlKHN0cnVjdCBhcV9yaW5nX3MgKnJpbmcpOwogdm9pZCBhcV9yaW5nX3F1ZXVlX3N0b3Aoc3RydWN0IGFxX3JpbmdfcyAqcmluZyk7CiBib29sIGFxX3JpbmdfdHhfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqc2VsZik7CiYjNDM7dm9pZCBhcV9yaW5nX3R4X2RlaW5pdChzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKTsKIGludCBhcV94ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtX2ZyYW1lcywKIAkJc3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcywgdTMyIGZsYWdzKTsKIGludCBhcV9yaW5nX3J4X2NsZWFuKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV92ZWMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3ZlYy5jCmluZGV4IDJmOTAzM2NlZWQ4Y2UzLi44ZTE1NDA1ZDQ5NDE5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfdmVjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfdmVjLmMKQEAgLTE0NiwyNSAmIzQzOzE0NiwzMiBAQCBpbnQgYXFfdmVjX3JpbmdfYWxsb2Moc3RydWN0IGFxX3ZlY19zICpzZWxmLCBzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYywKIAkJYXFfbmljX3NldF90eF9yaW5nKGFxX25pYywgaWR4X3JpbmcsIHJpbmcpOwogCiAJCXJpbmcgPSAmYW1wO3NlbGYtJmd0O3JpbmdbaV1bQVFfVkVDX1JYX0lEXTsKJiM0MzsJCS8qIFJlZ2lzdGVyaW5nIHRoZSBNRU1fVFlQRV9QQUdFX1BPT0wgbWVtb3J5IG1vZGVsIGJlbG93IG5lZWRzCiYjNDM7CQkgKiB0aGUgcGFnZSBwb29sIGNyZWF0ZWQgYnkgYXFfcmluZ19yeF9hbGxvYygpLCBzbyB0aGUgcmluZyBpcwomIzQzOwkJICogYWxsb2NhdGVkIGZpcnN0LiBJZiBhIHJlZ2lzdHJhdGlvbiBmYWlscywgdGhlIHJpbmcgaGFzIHRvIGJlCiYjNDM7CQkgKiBmcmVlZCBleHBsaWNpdGx5OiByeF9yaW5ncyBpcyBub3QgaW5jcmVtZW50ZWQgeWV0LCBzbyB0aGUKJiM0MzsJCSAqIHVud2luZCB0aHJvdWdoIGFxX3ZlY19yaW5nX2ZyZWUoKSB3b3VsZCBub3QgY292ZXIgaXQuCiYjNDM7CQkgKi8KJiM0MzsJCWVyciA9IGFxX3JpbmdfcnhfYWxsb2MocmluZywgYXFfbmljLCBpZHhfcmluZywgYXFfbmljX2NmZyk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZXJyX2V4aXQ7CiYjNDM7CiAJCWlmICh4ZHBfcnhxX2luZm9fcmVnKCZhbXA7cmluZy0mZ3Q7eGRwX3J4cSwKIAkJCQkgICAgIGFxX25pYy0mZ3Q7bmRldiwgaWR4LAogCQkJCSAgICAgc2VsZi0mZ3Q7bmFwaS5uYXBpX2lkKSAmbHQ7IDApIHsKJiM0MzsJCQlhcV9yaW5nX2ZyZWUocmluZyk7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBlcnJfZXhpdDsKIAkJfQogCQlpZiAoeGRwX3J4cV9pbmZvX3JlZ19tZW1fbW9kZWwoJmFtcDtyaW5nLSZndDt4ZHBfcnhxLAotCQkJCQkgICAgICAgTUVNX1RZUEVfUEFHRV9TSEFSRUQsIE5VTEwpICZsdDsgMCkgewomIzQzOwkJCQkJICAgICAgIE1FTV9UWVBFX1BBR0VfUE9PTCwKJiM0MzsJCQkJCSAgICAgICByaW5nLSZndDtwZ19wb29sKSAmbHQ7IDApIHsKIAkJCXhkcF9yeHFfaW5mb191bnJlZygmYW1wO3JpbmctJmd0O3hkcF9yeHEpOwomIzQzOwkJCWFxX3JpbmdfZnJlZShyaW5nKTsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlnb3RvIGVycl9leGl0OwogCQl9CiAKLQkJZXJyID0gYXFfcmluZ19yeF9hbGxvYyhyaW5nLCBhcV9uaWMsIGlkeF9yaW5nLCBhcV9uaWNfY2ZnKTsKLQkJaWYgKGVycikgewotCQkJeGRwX3J4cV9pbmZvX3VucmVnKCZhbXA7cmluZy0mZ3Q7eGRwX3J4cSk7Ci0JCQlnb3RvIGVycl9leGl0OwotCQl9Ci0KIAkJJiM0MzsmIzQzO3NlbGYtJmd0O3J4X3JpbmdzOwogCX0KIApAQCAtMjc1LDcgJiM0MzsyODIsNyBAQCB2b2lkIGFxX3ZlY19kZWluaXQoc3RydWN0IGFxX3ZlY19zICpzZWxmKQogCiAJZm9yIChpID0gMFU7IHNlbGYtJmd0O3R4X3JpbmdzICZndDsgaTsgJiM0MzsmIzQzO2kpIHsKIAkJcmluZyA9IHNlbGYtJmd0O3JpbmdbaV07Ci0JCWFxX3JpbmdfdHhfY2xlYW4oJmFtcDtyaW5nW0FRX1ZFQ19UWF9JRF0pOwomIzQzOwkJYXFfcmluZ190eF9kZWluaXQoJmFtcDtyaW5nW0FRX1ZFQ19UWF9JRF0pOwogCQlhcV9yaW5nX3J4X2RlaW5pdCgmYW1wO3JpbmdbQVFfVkVDX1JYX0lEXSk7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjk4CgkJCQkJCQlvdXRwdXQ6IDkxCgkJCQkJCQl0aG91Z2h0czogMTMwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IEFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGFuIGFRdWFudGlhIERyaXZlciBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7dmUgZ290IGEgcGF0Y2ggdG91Y2hpbmcgdGhlIGFRdWFudGlhIEFRdGlvbiBFdGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYC4gVGhlIGtleSBjaGFuZ2VzIGludm9sdmUgYSBuZXcgbWVtb3J5IGFsbG9jYXRpb24gbW9kZWwgdXNpbmcgYFBBR0VfUE9PTGAgZm9yIFJYIHJpbmdzLCBtb2RpZmljYXRpb25zIHRvIGhhbmRsZSBYRFAgZnJhbWVzLCBhbmQgZGUtaW5pdGlhbGl6YXRpb24gb2YgVFggYnVmZmVycy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGlzIGV2ZW4gcmVhY2hhYmxlIGZvciBmdXp6aW5nLgoKTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyBkcml2ZXIgYWNjZXNzaWJsZSB3aXRoaW4gYSB0eXBpY2FsIFFFTVUgc2V0dXA/IGFRdWFudGlhIGlzIGEgMTBHYkUgUENJZSBjYXJkLCByaWdodD8gTGV0JiMzOTtzIGNoZWNrIHRoZSBzb3VyY2Ugb3IgYSBxdWljayBzZWFyY2guLi4gTm9wZSwgYVF1YW50aWEgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQmIzM5O3MgYSBodWdlIHJlZCBmbGFnLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBpZiBpdCYjMzk7cyBjb25zaWRlcmVkIGEgcGh5c2ljYWwgY2FyZC4gTG9va2luZyBhdCB0aGUgaW5zdHJ1Y3Rpb25zLCB0aGV5IHNwZWNpZmljYWxseSBzYXkgdG8gbWFyayB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyBhcyBub3Qgd29ydGggZnV6emluZyBpZiB0aGV5IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUuCgpEb2VzIHN5emthbGxlciBvZmZlciBhIHdheSBhcm91bmQgdGhpcz8gQ291bGQgaXQgZnV6eiBQQ0kgZGV2aWNlcyBzb21laG93PyBXYWl0LCB5ZXMsIGl0IGhhcyBQQ0kgZnV6emluZy4gQnV0IGNhbiBzeXprYWxsZXIgKmVtdWxhdGUqIHRoZSBkZXZpY2UgRE1BIHJpbmcgYnVmZmVycz8gIE5vLCBpdCB1c2VzIGEgdmlydHVhbCBQQ0kgaG9zdCBicmlkZ2UsIG9yIGp1c3QgZnV6emVzIHRoZSBjb25maWcgc3BhY2UuIEl0IHNwZWNpZmljYWxseSBzYXlzIHRoYXQgdGhlc2UgcGF0aHMgYXJlIHVucmVhY2hhYmxlIHdoZW4geW91IHJlcXVpcmUgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLiBBbHNvLCBzeXprYWxsZXIgdGVzdHMgcGF0Y2hlcyBzdWJtaXR0ZWQgdG8gbWFpbGluZyBsaXN0cywgc28gdGhpcyBwYXRjaCBpcyBiZWluZyB0ZXN0ZWQsIGJ1dCBkb2VzbiYjMzk7dCBtZWFuIGl0IGlzIGZ1enplZC4KCk9rYXksIGxldCYjMzk7cyB2ZXJpZnkgaWYgYVF1YW50aWEgaXMgYSBwaHlzaWNhbCBQQ0llIGNhcmQuIENoZWNraW5nIHRoZSBLY29uZmlnIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9LY29uZmlnYCByZXZlYWxzOiAmIzM0O1RoaXMgZW5hYmxlcyB0aGUgc3VwcG9ydCBmb3IgdGhlIGFRdWFudGlhIEFRdGlvbih0bSkgRXRoZXJuZXQgY2FyZC4mIzM0OyAgSXQgZGVwZW5kcyBvbiBQQ0kuIENvbmZpcm1lZDogaXQmIzM5O3MgYSBwaHlzaWNhbCBFdGhlcm5ldCBjYXJkLiBUaGVyZWZvcmUgaXQgZmFsbHMgdW5kZXIgdGhlICYjMzQ7bm90IHdvcnRoIGZ1enppbmcmIzM0OyBjYXRlZ29yeS4KCklzIHRoZXJlIGFueSBjaGFuY2Ugb2YgZnV6emluZyB2aWEgYW5vdGhlciByb3V0ZSwgbGlrZSBhIHZpcnR1YWwgZHJpdmVyPyBOb3BlLCBpdCYjMzk7cyBhIHN0YW5kYXJkIEV0aGVybmV0IGRyaXZlciBmb3IgYSBwaHlzaWNhbCBQQ0llIGNhcmQuIERvdWJsZS1jaGVja2luZyBhZ2Fpbi4uLiBubyBRRU1VIGVtdWxhdGlvbi4KClJldmlzaXRpbmcgdGhlIHByb21wdCYjMzk7cyBjcml0ZXJpYTogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsgYVF1YW50aWEgZml0cyB0aGF0IGRlc2NyaXB0aW9uIHBlcmZlY3RseS4gSXQgaXMgYSBwaHlzaWNhbCBQQ0llIEV0aGVybmV0IGNhcmQuIEl0IGlzbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCYjMzk7cyBlbGltaW5hdGUgdGhlIHBvc3NpYmlsaXR5IG9mIGEgVVNCIGNvbm5lY3Rpb24uIFRoZSBLY29uZmlnIHNheXMgaXQgYGRlcGVuZHMgb24gUENJYC4gT2theSwgdGhhdCYjMzk7cyBpdC4gSXQmIzM5O3Mgc3RyaWN0bHkgd2l0aGluIHRoZSBhUXVhbnRpYSBkcml2ZXIuCgpTbywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgV29ydGhGdXp6aW5nPWZhbHNlLiBUaGlzIHBhdGNoIG1vZGlmaWVzIGEgZHJpdmVyIGZvciBhIHBoeXNpY2FsIFBDSWUgY2FyZCBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLCBzbyB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4KCkkmIzM5O20gcmVhZHkgdG8gbW92ZSBvbi4gTGV0JiMzOTtzIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgYVF1YW50aWEgQVF0aW9uIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvKS4gVGhpcyBpcyBhIGRyaXZlciBmb3IgYSBwaHlzaWNhbCBQQ0llIG5ldHdvcmsgY2FyZCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIGFRdWFudGlhIEFRdGlvbiBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhLykuIFRoaXMgaXMgYSBkcml2ZXIgZm9yIGEgcGh5c2ljYWwgUENJZSBuZXR3b3JrIGNhcmQgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzo0ODoyNi41NjYwMTE5MjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM3MTA3OTExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIGFRdWFudGlhIEFRdGlvbiBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhLykuIFRoaXMgaXMgYSBkcml2ZXIgZm9yIGEgcGh5c2ljYWwgUENJZSBuZXR3b3JrIGNhcmQgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjQ4OjI2LjU2NjAyMDAwNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg3NTY3MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTFjZGJhMjg0ZWY4YjFhMGQ1OWZlMzkxNWQ5ZGFmYTc3ODQ4ZGUxNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAyNSAxMzo0ODoyNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvS2NvbmZpZ1xcbmluZGV4IGNlYzIwMThjODRhOWJjLi5jOGZiN2IzM2U1YjcxYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvS2NvbmZpZ1xcbkBAIC0yMCw2ICsyMCw3IEBAIGNvbmZpZyBBUVRJT05cXG4gXFx0dHJpc3RhdGUgXFxcImFRdWFudGlhIEFRdGlvbih0bSkgU3VwcG9ydFxcXCJcXG4gXFx0ZGVwZW5kcyBvbiBQQ0lcXG4gXFx0ZGVwZW5kcyBvbiBNQUNTRUMgfHwgTUFDU0VDPW5cXG4rXFx0c2VsZWN0IFBBR0VfUE9PTFxcbiBcXHRoZWxwXFxuIFxcdCAgVGhpcyBlbmFibGVzIHRoZSBzdXBwb3J0IGZvciB0aGUgYVF1YW50aWEgQVF0aW9uKHRtKSBFdGhlcm5ldCBjYXJkLlxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jXFxuaW5kZXggNDIwYWY5NThkNDg2MWEuLjBmNTEyNWJkMjMxNTk0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuY1xcbkBAIC0xMDAsOSArMTAwLDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhcV9ldGh0b29sX3F1ZXVlX3J4X3N0YXRfbmFtZXNbXSA9IHtcXG4gXFx0XFxcIiVzUXVldWVbJWRdIEFsbG9jRmFpbHNcXFwiLFxcbiBcXHRcXFwiJXNRdWV1ZVslZF0gU2tiQWxsb2NGYWlsc1xcXCIsXFxuIFxcdFxcXCIlc1F1ZXVlWyVkXSBQb2xsc1xcXCIsXFxuLVxcdFxcXCIlc1F1ZXVlWyVkXSBQYWdlRmxpcHNcXFwiLFxcbi1cXHRcXFwiJXNRdWV1ZVslZF0gUGFnZVJldXNlc1xcXCIsXFxuLVxcdFxcXCIlc1F1ZXVlWyVkXSBQYWdlRnJlZXNcXFwiLFxcbiBcXHRcXFwiJXNRdWV1ZVslZF0gWGRwQWJvcnRcXFwiLFxcbiBcXHRcXFwiJXNRdWV1ZVslZF0gWGRwRHJvcFxcXCIsXFxuIFxcdFxcXCIlc1F1ZXVlWyVkXSBYZHBQYXNzXFxcIixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9wdHAuY1xcbmluZGV4IDU1OGFjOTIzN2Y3NTllLi4zYTQwZDk4NmNkNjc4NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9wdHAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3B0cC5jXFxuQEAgLTEzLDYgKzEzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbGFzc2lmeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZXJydXB0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbG9ja3NvdXJjZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3hkcC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImFxX25pYy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiYXFfcHRwLmhcXFwiXFxuQEAgLTExOTIsMTIgKzExOTMsMjMgQEAgaW50IGFxX3B0cF9yaW5nX2FsbG9jKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljKVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl9leGl0X3B0cF90eDtcXG4gXFxuK1xcdGVyciA9IHhkcF9yeHFfaW5mb19yZWcoXFx1MDAyNmFxX3B0cC1cXHUwMDNlcHRwX3J4LnhkcF9yeHEsIGFxX25pYy1cXHUwMDNlbmRldixcXG4rXFx0XFx0XFx0ICAgICAgIHJ4X3JpbmdfaWR4LCBhcV9wdHAtXFx1MDAzZW5hcGkubmFwaV9pZCk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9leGl0X3B0cF9yeDtcXG4rXFxuK1xcdGVyciA9IHhkcF9yeHFfaW5mb19yZWdfbWVtX21vZGVsKFxcdTAwMjZhcV9wdHAtXFx1MDAzZXB0cF9yeC54ZHBfcnhxLFxcbitcXHRcXHRcXHRcXHRcXHQgTUVNX1RZUEVfUEFHRV9QT09MLFxcbitcXHRcXHRcXHRcXHRcXHQgYXFfcHRwLVxcdTAwM2VwdHBfcngucGdfcG9vbCk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9leGl0X3hkcF9yeHE7XFxuK1xcbiBcXHRpZiAoYXFfcHRwLVxcdTAwM2VhMV9wdHApIHtcXG4gXFx0XFx0ZXJyID0gYXFfcmluZ19od3RzX3J4X2FsbG9jKFxcdTAwMjZhcV9wdHAtXFx1MDAzZWh3dHNfcngsIGFxX25pYywgUFRQX0hXU1RfUklOR19JRFgsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBhcV9uaWMtXFx1MDAzZWFxX25pY19jZmcucnhkcyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIGFxX25pYy1cXHUwMDNlYXFfbmljX2NmZy5hcV9od19jYXBzLVxcdTAwM2VyeGRfc2l6ZSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGdvdG8gZXJyX2V4aXRfcHRwX3J4O1xcbitcXHRcXHRcXHRnb3RvIGVycl9leGl0X3hkcF9yeHE7XFxuIFxcdH1cXG4gXFxuIFxcdGVyciA9IGFxX3B0cF9za2JfcmluZ19pbml0KFxcdTAwMjZhcV9wdHAtXFx1MDAzZXNrYl9yaW5nLCBhcV9uaWMtXFx1MDAzZWFxX25pY19jZmcucnhkcyk7XFxuQEAgLTEyMTcsNiArMTIyOSw4IEBAIGludCBhcV9wdHBfcmluZ19hbGxvYyhzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYylcXG4gZXJyX2V4aXRfaHd0c19yeDpcXG4gXFx0aWYgKGFxX3B0cC1cXHUwMDNlYTFfcHRwKVxcbiBcXHRcXHRhcV9yaW5nX2h3dHNfcnhfZnJlZShcXHUwMDI2YXFfcHRwLVxcdTAwM2Vod3RzX3J4KTtcXG4rZXJyX2V4aXRfeGRwX3J4cTpcXG4rXFx0eGRwX3J4cV9pbmZvX3VucmVnKFxcdTAwMjZhcV9wdHAtXFx1MDAzZXB0cF9yeC54ZHBfcnhxKTtcXG4gZXJyX2V4aXRfcHRwX3J4OlxcbiBcXHRhcV9yaW5nX2ZyZWUoXFx1MDAyNmFxX3B0cC1cXHUwMDNlcHRwX3J4KTtcXG4gZXJyX2V4aXRfcHRwX3R4OlxcbkBAIC0xMjMzLDYgKzEyNDcsOCBAQCB2b2lkIGFxX3B0cF9yaW5nX2ZyZWUoc3RydWN0IGFxX25pY19zICphcV9uaWMpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGFxX3JpbmdfZnJlZShcXHUwMDI2YXFfcHRwLVxcdTAwM2VwdHBfdHgpO1xcbitcXHRpZiAoeGRwX3J4cV9pbmZvX2lzX3JlZyhcXHUwMDI2YXFfcHRwLVxcdTAwM2VwdHBfcngueGRwX3J4cSkpXFxuK1xcdFxcdHhkcF9yeHFfaW5mb191bnJlZyhcXHUwMDI2YXFfcHRwLVxcdTAwM2VwdHBfcngueGRwX3J4cSk7XFxuIFxcdGFxX3JpbmdfZnJlZShcXHUwMDI2YXFfcHRwLVxcdTAwM2VwdHBfcngpO1xcbiBcXHRpZiAoYXFfcHRwLVxcdTAwM2VhMV9wdHApXFxuIFxcdFxcdGFxX3JpbmdfaHd0c19yeF9mcmVlKFxcdTAwMjZhcV9wdHAtXFx1MDAzZWh3dHNfcngpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmNcXG5pbmRleCA4ZmYwN2RlMmJkNTI0MC4uOWRkODgxNzEwNTk0MjcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jXFxuQEAgLTE0LDEyMCArMTQsMzcgQEBcXG4gI2luY2x1ZGUgXFxcImFxX3ZlYy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiYXFfbWFpbi5oXFxcIlxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9wYWdlX3Bvb2wvaGVscGVycy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3hkcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsdGVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfdHJhY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFxcdTAwM2VcXG4gXFxuLXN0YXRpYyB2b2lkIGFxX2dldF9yeHBhZ2VzX3hkcChzdHJ1Y3QgYXFfcmluZ19idWZmX3MgKmJ1ZmYsXFxuLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4te1xcbi1cXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaW5mbztcXG4tXFx0aW50IGk7XFxuLVxcbi1cXHRpZiAoeGRwX2J1ZmZfaGFzX2ZyYWdzKHhkcCkpIHtcXG4tXFx0XFx0c2luZm8gPSB4ZHBfZ2V0X3NoYXJlZF9pbmZvX2Zyb21fYnVmZih4ZHApO1xcbi1cXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNpbmZvLVxcdTAwM2Vucl9mcmFnczsgaSsrKSB7XFxuLVxcdFxcdFxcdHNrYl9mcmFnX3QgKmZyYWcgPSBcXHUwMDI2c2luZm8tXFx1MDAzZWZyYWdzW2ldO1xcbi1cXG4tXFx0XFx0XFx0cGFnZV9yZWZfaW5jKHNrYl9mcmFnX3BhZ2UoZnJhZykpO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFx0cGFnZV9yZWZfaW5jKGJ1ZmYtXFx1MDAzZXJ4ZGF0YS5wYWdlKTtcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSB2b2lkIGFxX2ZyZWVfcnhwYWdlKHN0cnVjdCBhcV9yeHBhZ2UgKnJ4cGFnZSwgc3RydWN0IGRldmljZSAqZGV2KVxcbi17XFxuLVxcdHVuc2lnbmVkIGludCBsZW4gPSBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2MgcnhwYWdlLVxcdTAwM2VvcmRlcjtcXG4tXFxuLVxcdGRtYV91bm1hcF9wYWdlKGRldiwgcnhwYWdlLVxcdTAwM2VkYWRkciwgbGVuLCBETUFfRlJPTV9ERVZJQ0UpO1xcbi1cXG4tXFx0LyogRHJvcCB0aGUgcmVmIGZvciBiZWluZyBpbiB0aGUgcmluZy4gKi9cXG4tXFx0X19mcmVlX3BhZ2VzKHJ4cGFnZS1cXHUwMDNlcGFnZSwgcnhwYWdlLVxcdTAwM2VvcmRlcik7XFxuLVxcdHJ4cGFnZS1cXHUwMDNlcGFnZSA9IE5VTEw7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgYXFfYWxsb2NfcnhwYWdlcyhzdHJ1Y3QgYXFfcnhwYWdlICpyeHBhZ2UsIHN0cnVjdCBhcV9yaW5nX3MgKnJ4X3JpbmcpXFxuK3N0YXRpYyBpbnQgYXFfZ2V0X3J4cGFnZXMoc3RydWN0IGFxX3JpbmdfcyAqc2VsZiwgc3RydWN0IGFxX3JpbmdfYnVmZl9zICpyeGJ1ZilcXG4ge1xcbi1cXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhcV9uaWNfZ2V0X2RldihyeF9yaW5nLVxcdTAwM2VhcV9uaWMpO1xcbi1cXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSByeF9yaW5nLVxcdTAwM2VwYWdlX29yZGVyO1xcbitcXHR1bnNpZ25lZCBpbnQgc2l6ZSA9IHNlbGYtXFx1MDAzZXBhZ2Vfb2Zmc2V0ICsgc2VsZi1cXHUwMDNlZnJhbWVfbWF4ICtcXG4rXFx0XFx0XFx0ICAgIHNlbGYtXFx1MDAzZXRhaWxfc2l6ZTtcXG4rXFx0dW5zaWduZWQgaW50IHBnX29mZjtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuLVxcdGludCByZXQgPSAtRU5PTUVNO1xcbi1cXHRkbWFfYWRkcl90IGRhZGRyO1xcbi1cXG4tXFx0cGFnZSA9IGRldl9hbGxvY19wYWdlcyhvcmRlcik7XFxuLVxcdGlmICh1bmxpa2VseSghcGFnZSkpXFxuLVxcdFxcdGdvdG8gZXJyX2V4aXQ7XFxuLVxcbi1cXHRkYWRkciA9IGRtYV9tYXBfcGFnZShkZXYsIHBhZ2UsIDAsIFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlcixcXG4tXFx0XFx0XFx0ICAgICBETUFfRlJPTV9ERVZJQ0UpO1xcbi1cXG4tXFx0aWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgZGFkZHIpKSlcXG4tXFx0XFx0Z290byBmcmVlX3BhZ2U7XFxuLVxcbi1cXHRyeHBhZ2UtXFx1MDAzZXBhZ2UgPSBwYWdlO1xcbi1cXHRyeHBhZ2UtXFx1MDAzZWRhZGRyID0gZGFkZHI7XFxuLVxcdHJ4cGFnZS1cXHUwMDNlb3JkZXIgPSBvcmRlcjtcXG4tXFx0cnhwYWdlLVxcdTAwM2VwZ19vZmYgPSByeF9yaW5nLVxcdTAwM2VwYWdlX29mZnNldDtcXG4tXFxuLVxcdHJldHVybiAwO1xcbi1cXG4tZnJlZV9wYWdlOlxcbi1cXHRfX2ZyZWVfcGFnZXMocGFnZSwgb3JkZXIpO1xcbiBcXG4tZXJyX2V4aXQ6XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4rXFx0LyogQnVmZmVycyB3aG9zZSBwYWdlIHdhcyBub3QgcGFzc2VkIHVwIHRoZSBzdGFjayBhcmUgcmVwb3N0ZWRcXG4rXFx0ICogd2l0aCB0aGUgZGF0YSB0aGV5IGFscmVhZHkgY2FycnkgZGlzY2FyZGVkLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJ4YnVmLVxcdTAwM2VyeGRhdGEucGFnZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1zdGF0aWMgaW50IGFxX2dldF9yeHBhZ2VzKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsIHN0cnVjdCBhcV9yaW5nX2J1ZmZfcyAqcnhidWYpXFxuLXtcXG4tXFx0dW5zaWduZWQgaW50IG9yZGVyID0gc2VsZi1cXHUwMDNlcGFnZV9vcmRlcjtcXG4tXFx0dTE2IHBhZ2Vfb2Zmc2V0ID0gc2VsZi1cXHUwMDNlcGFnZV9vZmZzZXQ7XFxuLVxcdHUxNiBmcmFtZV9tYXggPSBzZWxmLVxcdTAwM2VmcmFtZV9tYXg7XFxuLVxcdHUxNiB0YWlsX3NpemUgPSBzZWxmLVxcdTAwM2V0YWlsX3NpemU7XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRpZiAocnhidWYtXFx1MDAzZXJ4ZGF0YS5wYWdlKSB7XFxuLVxcdFxcdC8qIE9uZSBtZWFucyByaW5nIGlzIHRoZSBvbmx5IHVzZXIgYW5kIGNhbiByZXVzZSAqL1xcbi1cXHRcXHRpZiAocGFnZV9yZWZfY291bnQocnhidWYtXFx1MDAzZXJ4ZGF0YS5wYWdlKSBcXHUwMDNlIDEpIHtcXG4tXFx0XFx0XFx0LyogVHJ5IHJldXNlIGJ1ZmZlciAqL1xcbi1cXHRcXHRcXHRyeGJ1Zi1cXHUwMDNlcnhkYXRhLnBnX29mZiArPSBmcmFtZV9tYXggKyBwYWdlX29mZnNldCArXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHRhaWxfc2l6ZTtcXG4tXFx0XFx0XFx0aWYgKHJ4YnVmLVxcdTAwM2VyeGRhdGEucGdfb2ZmICsgZnJhbWVfbWF4ICsgdGFpbF9zaXplIFxcdTAwM2M9XFxuLVxcdFxcdFxcdCAgICAoUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSkge1xcbi1cXHRcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZzZWxmLVxcdTAwM2VzdGF0cy5yeC5zeW5jcCk7XFxuLVxcdFxcdFxcdFxcdHNlbGYtXFx1MDAzZXN0YXRzLnJ4LnBnX2ZsaXBzKys7XFxuLVxcdFxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZzZWxmLVxcdTAwM2VzdGF0cy5yeC5zeW5jcCk7XFxuLVxcbi1cXHRcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRcXHQvKiBCdWZmZXIgZXhoYXVzdGVkLiBXZSBoYXZlIG90aGVyIHVzZXJzIGFuZFxcbi1cXHRcXHRcXHRcXHQgKiBzaG91bGQgcmVsZWFzZSB0aGlzIHBhZ2UgYW5kIHJlYWxsb2NcXG4tXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdGFxX2ZyZWVfcnhwYWdlKFxcdTAwMjZyeGJ1Zi1cXHUwMDNlcnhkYXRhLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgYXFfbmljX2dldF9kZXYoc2VsZi1cXHUwMDNlYXFfbmljKSk7XFxuLVxcdFxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnNlbGYtXFx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcXG4tXFx0XFx0XFx0XFx0c2VsZi1cXHUwMDNlc3RhdHMucngucGdfbG9zdHMrKztcXG4tXFx0XFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnNlbGYtXFx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRyeGJ1Zi1cXHUwMDNlcnhkYXRhLnBnX29mZiA9IHBhZ2Vfb2Zmc2V0O1xcbi1cXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZzZWxmLVxcdTAwM2VzdGF0cy5yeC5zeW5jcCk7XFxuLVxcdFxcdFxcdHNlbGYtXFx1MDAzZXN0YXRzLnJ4LnBnX3JldXNlcysrO1xcbi1cXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2c2VsZi1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbi1cXHRcXHR9XFxuK1xcdHBhZ2UgPSBwYWdlX3Bvb2xfZGV2X2FsbG9jX2ZyYWcoc2VsZi1cXHUwMDNlcGdfcG9vbCwgXFx1MDAyNnBnX29mZiwgc2l6ZSk7XFxuK1xcdGlmICh1bmxpa2VseSghcGFnZSkpIHtcXG4rXFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2c2VsZi1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbitcXHRcXHRzZWxmLVxcdTAwM2VzdGF0cy5yeC5hbGxvY19mYWlscysrO1xcbitcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2c2VsZi1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFyeGJ1Zi1cXHUwMDNlcnhkYXRhLnBhZ2UpIHtcXG4tXFx0XFx0cmV0ID0gYXFfYWxsb2NfcnhwYWdlcyhcXHUwMDI2cnhidWYtXFx1MDAzZXJ4ZGF0YSwgc2VsZik7XFxuLVxcdFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2c2VsZi1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbi1cXHRcXHRcXHRzZWxmLVxcdTAwM2VzdGF0cy5yeC5hbGxvY19mYWlscysrO1xcbi1cXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2c2VsZi1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcdH1cXG4rXFx0cnhidWYtXFx1MDAzZXJ4ZGF0YS5wYWdlID0gcGFnZTtcXG4rXFx0cnhidWYtXFx1MDAzZXJ4ZGF0YS5kYWRkciA9IHBhZ2VfcG9vbF9nZXRfZG1hX2FkZHIocGFnZSk7XFxuK1xcdHJ4YnVmLVxcdTAwM2VyeGRhdGEucGdfb2ZmID0gcGdfb2ZmICsgc2VsZi1cXHUwMDNlcGFnZV9vZmZzZXQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0xNzksNiArOTYsMTUgQEAgaW50IGFxX3JpbmdfcnhfYWxsb2Moc3RydWN0IGFxX3JpbmdfcyAqc2VsZixcXG4gXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgaWR4LFxcbiBcXHRcXHQgICAgIHN0cnVjdCBhcV9uaWNfY2ZnX3MgKmFxX25pY19jZmcpXFxuIHtcXG4rXFx0c3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMgcHBfcGFyYW1zID0ge1xcbitcXHRcXHQuZmxhZ3MgPSBQUF9GTEFHX0RNQV9NQVAgfCBQUF9GTEFHX0RNQV9TWU5DX0RFVixcXG4rXFx0XFx0LnBvb2xfc2l6ZSA9IGFxX25pY19jZmctXFx1MDAzZXJ4ZHMsXFxuK1xcdFxcdC5uaWQgPSBOVU1BX05PX05PREUsXFxuK1xcdFxcdC5kZXYgPSBhcV9uaWNfZ2V0X2RldihhcV9uaWMpLFxcbitcXHRcXHQuZG1hX2RpciA9IERNQV9GUk9NX0RFVklDRSxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IHBhZ2VfcG9vbCAqcG9vbDtcXG4rXFxuIFxcdHNlbGYtXFx1MDAzZWFxX25pYyA9IGFxX25pYztcXG4gXFx0c2VsZi1cXHUwMDNlaWR4ID0gaWR4O1xcbiBcXHRzZWxmLVxcdTAwM2VzaXplID0gYXFfbmljX2NmZy1cXHUwMDNlcnhkcztcXG5AQCAtMjAwLDYgKzEyNiwxOCBAQCBpbnQgYXFfcmluZ19yeF9hbGxvYyhzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLFxcbiBcXHRcXHRzZWxmLVxcdTAwM2V0YWlsX3NpemUgPSAwO1xcbiBcXHR9XFxuIFxcbitcXHRwcF9wYXJhbXMub3JkZXIgPSBzZWxmLVxcdTAwM2VwYWdlX29yZGVyO1xcbitcXHRwcF9wYXJhbXMubWF4X2xlbiA9IFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBzZWxmLVxcdTAwM2VwYWdlX29yZGVyO1xcbitcXG4rXFx0cG9vbCA9IHBhZ2VfcG9vbF9jcmVhdGUoXFx1MDAyNnBwX3BhcmFtcyk7XFxuK1xcdGlmIChJU19FUlIocG9vbCkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHBvb2wpO1xcbitcXG4rXFx0c2VsZi1cXHUwMDNlcGdfcG9vbCA9IHBvb2w7XFxuK1xcbitcXHQvKiBPbiBmYWlsdXJlIGFxX3JpbmdfYWxsb2MoKSBjYWxscyBhcV9yaW5nX2ZyZWUoKSwgd2hpY2ggYWxzb1xcbitcXHQgKiBkZXN0cm95cyB0aGUgcGFnZSBwb29sLlxcbitcXHQgKi9cXG4gXFx0cmV0dXJuIGFxX3JpbmdfYWxsb2Moc2VsZiwgYXFfbmljKTtcXG4gfVxcbiBcXG5AQCAtMzQ2LDcgKzI4NCwxMSBAQCBib29sIGFxX3JpbmdfdHhfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqc2VsZilcXG4gXFx0XFx0XFx0KytzZWxmLVxcdTAwM2VzdGF0cy50eC5wYWNrZXRzO1xcbiBcXHRcXHRcXHRzZWxmLVxcdTAwM2VzdGF0cy50eC5ieXRlcyArPSB4ZHBfZ2V0X2ZyYW1lX2xlbihidWZmLVxcdTAwM2V4ZHBmKTtcXG4gXFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnNlbGYtXFx1MDAzZXN0YXRzLnR4LnN5bmNwKTtcXG4tXFx0XFx0XFx0eGRwX3JldHVybl9mcmFtZV9yeF9uYXBpKGJ1ZmYtXFx1MDAzZXhkcGYpO1xcbitcXHRcXHRcXHQvKiBGcmFtZXMgcXVldWVkIHZpYSBuZG9feGRwX3htaXQoKSBtYXkgY29tZSBmcm9tIGFcXG4rXFx0XFx0XFx0ICogcGFnZSBwb29sIG93bmVkIGJ5IGFub3RoZXIgTkFQSSBjb250ZXh0OiBubyBkaXJlY3RcXG4rXFx0XFx0XFx0ICogcmVjeWNsaW5nLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0eGRwX3JldHVybl9mcmFtZShidWZmLVxcdTAwM2V4ZHBmKTtcXG4gXFx0XFx0fVxcbiBcXG4gb3V0OlxcbkBAIC0zNjAsNiArMzAyLDM1IEBAIGJvb2wgYXFfcmluZ190eF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKVxcbiBcXHRyZXR1cm4gISFidWRnZXQ7XFxuIH1cXG4gXFxuK3ZvaWQgYXFfcmluZ190eF9kZWluaXQoc3RydWN0IGFxX3JpbmdfcyAqc2VsZilcXG4re1xcbitcXHRpZiAoIXNlbGYpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoOyBzZWxmLVxcdTAwM2Vzd19oZWFkICE9IHNlbGYtXFx1MDAzZXN3X3RhaWw7XFxuK1xcdFxcdHNlbGYtXFx1MDAzZXN3X2hlYWQgPSBhcV9yaW5nX25leHRfZHgoc2VsZiwgc2VsZi1cXHUwMDNlc3dfaGVhZCkpIHtcXG4rXFx0XFx0c3RydWN0IGFxX3JpbmdfYnVmZl9zICpidWZmID0gXFx1MDAyNnNlbGYtXFx1MDAzZWJ1ZmZfcmluZ1tzZWxmLVxcdTAwM2Vzd19oZWFkXTtcXG4rXFx0XFx0c3RydWN0IGRldmljZSAqbmRldiA9IGFxX25pY19nZXRfZGV2KHNlbGYtXFx1MDAzZWFxX25pYyk7XFxuK1xcbitcXHRcXHRpZiAoYnVmZi1cXHUwMDNlaXNfbWFwcGVkKSB7XFxuK1xcdFxcdFxcdGlmIChidWZmLVxcdTAwM2Vpc19zb3ApIHtcXG4rXFx0XFx0XFx0XFx0ZG1hX3VubWFwX3NpbmdsZShuZGV2LCBidWZmLVxcdTAwM2VwYSwgYnVmZi1cXHUwMDNlbGVuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgRE1BX1RPX0RFVklDRSk7XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdGRtYV91bm1hcF9wYWdlKG5kZXYsIGJ1ZmYtXFx1MDAzZXBhLCBidWZmLVxcdTAwM2VsZW4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBETUFfVE9fREVWSUNFKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoYnVmZi1cXHUwMDNlaXNfZW9wKSB7XFxuK1xcdFxcdFxcdGlmIChidWZmLVxcdTAwM2Vza2IpXFxuK1xcdFxcdFxcdFxcdGRldl9rZnJlZV9za2JfYW55KGJ1ZmYtXFx1MDAzZXNrYik7XFxuK1xcdFxcdFxcdGVsc2UgaWYgKGJ1ZmYtXFx1MDAzZXhkcGYpXFxuK1xcdFxcdFxcdFxcdHhkcF9yZXR1cm5fZnJhbWUoYnVmZi1cXHUwMDNleGRwZik7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBhcV9yeF9jaGVja3N1bShzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgYXFfcmluZ19idWZmX3MgKmJ1ZmYsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpXFxuQEAgLTQwOCwyMiArMzc5LDE1IEBAIGludCBhcV94ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtX2ZyYW1lcyxcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYXFfcmluZ19idWZmX3MgKmJ1ZmYpXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZjtcXG4tXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFxuIFxcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XFxuIFxcdGlmICh1bmxpa2VseSgheGRwZikpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0c2tiID0geGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHhkcGYsIGRldik7XFxuLVxcdGlmICghc2tiKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFxuLVxcdGFxX2dldF9yeHBhZ2VzX3hkcChidWZmLCB4ZHApO1xcbi1cXHRyZXR1cm4gc2tiO1xcbitcXHRyZXR1cm4geGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHhkcGYsIGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX3J1bl9wcm9nKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLFxcbkBAIC00NDQsOCArNDA4LDE2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX3J1bl9wcm9nKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLFxcbiBcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cnhfcmluZy1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbiBcXG4gXFx0cHJvZyA9IFJFQURfT05DRShyeF9yaW5nLVxcdTAwM2V4ZHBfcHJvZyk7XFxuLVxcdGlmICghcHJvZylcXG4tXFx0XFx0cmV0dXJuIGFxX3hkcF9idWlsZF9za2IoeGRwLCBhcV9uaWMtXFx1MDAzZW5kZXYsIGJ1ZmYpO1xcbitcXHRpZiAoIXByb2cpIHtcXG4rXFx0XFx0c2tiID0gYXFfeGRwX2J1aWxkX3NrYih4ZHAsIGFxX25pYy1cXHUwMDNlbmRldik7XFxuK1xcdFxcdC8qIFRoZSByaW5nIGhhcyBhbHJlYWR5IGhhbmRlZCBpdHMgcGFnZSBwb29sIHJlZmVyZW5jZSB0byB0aGVcXG4rXFx0XFx0ICogeGRwX2J1ZmYsIHNvIGlmIHRoZSBza2IgY291bGQgbm90IGJlIGJ1aWx0IHRoZSBidWZmZXIgbXVzdFxcbitcXHRcXHQgKiBiZSByZXR1cm5lZCB0byB0aGUgcG9vbCBoZXJlIG9yIGl0cyBmcmFnbWVudHMgd291bGQgbGVhay5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghc2tiKVxcbitcXHRcXHRcXHR4ZHBfcmV0dXJuX2J1ZmYoeGRwKTtcXG4rXFx0XFx0cmV0dXJuIHNrYjtcXG4rXFx0fVxcbiBcXG4gXFx0cHJlZmV0Y2h3KHhkcC1cXHUwMDNlZGF0YV9oYXJkX3N0YXJ0KTsgLyogeGRwX2ZyYW1lIHdyaXRlICovXFxuIFxcbkBAIC00NTYsNyArNDI4LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsXFxuIFxcdGFjdCA9IGJwZl9wcm9nX3J1bl94ZHAocHJvZywgeGRwKTtcXG4gXFx0c3dpdGNoIChhY3QpIHtcXG4gXFx0Y2FzZSBYRFBfUEFTUzpcXG4tXFx0XFx0c2tiID0gYXFfeGRwX2J1aWxkX3NrYih4ZHAsIGFxX25pYy1cXHUwMDNlbmRldiwgYnVmZik7XFxuK1xcdFxcdHNrYiA9IGFxX3hkcF9idWlsZF9za2IoeGRwLCBhcV9uaWMtXFx1MDAzZW5kZXYpO1xcbiBcXHRcXHRpZiAoIXNrYilcXG4gXFx0XFx0XFx0Z290byBvdXRfYWJvcnRlZDtcXG4gXFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2cnhfcmluZy1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbkBAIC00NzQsNyArNDQ2LDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsXFxuIFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJ4X3JpbmctXFx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcXG4gXFx0XFx0KytyeF9yaW5nLVxcdTAwM2VzdGF0cy5yeC54ZHBfdHg7XFxuIFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZyeF9yaW5nLVxcdTAwM2VzdGF0cy5yeC5zeW5jcCk7XFxuLVxcdFxcdGFxX2dldF9yeHBhZ2VzX3hkcChidWZmLCB4ZHApO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBYRFBfUkVESVJFQ1Q6XFxuIFxcdFxcdGlmICh4ZHBfZG9fcmVkaXJlY3QoYXFfbmljLVxcdTAwM2VuZGV2LCB4ZHAsIHByb2cpIFxcdTAwM2MgMClcXG5AQCAtNDgzLDcgKzQ1NCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX3J1bl9wcm9nKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLFxcbiBcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZyeF9yaW5nLVxcdTAwM2VzdGF0cy5yeC5zeW5jcCk7XFxuIFxcdFxcdCsrcnhfcmluZy1cXHUwMDNlc3RhdHMucngueGRwX3JlZGlyZWN0O1xcbiBcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cnhfcmluZy1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbi1cXHRcXHRhcV9nZXRfcnhwYWdlc194ZHAoYnVmZiwgeGRwKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGZhbGx0aHJvdWdoO1xcbkBAIC00OTQsMTEgKzQ2NCwxMyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFxX3hkcF9ydW5fcHJvZyhzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYyxcXG4gXFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnJ4X3JpbmctXFx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcXG4gXFx0XFx0dHJhY2VfeGRwX2V4Y2VwdGlvbihhcV9uaWMtXFx1MDAzZW5kZXYsIHByb2csIGFjdCk7XFxuIFxcdFxcdGJwZl93YXJuX2ludmFsaWRfeGRwX2FjdGlvbihhcV9uaWMtXFx1MDAzZW5kZXYsIHByb2csIGFjdCk7XFxuK1xcdFxcdHhkcF9yZXR1cm5fYnVmZih4ZHApO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBYRFBfRFJPUDpcXG4gXFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2cnhfcmluZy1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbiBcXHRcXHQrK3J4X3JpbmctXFx1MDAzZXN0YXRzLnJ4LnhkcF9kcm9wO1xcbiBcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cnhfcmluZy1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbitcXHRcXHR4ZHBfcmV0dXJuX2J1ZmYoeGRwKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuQEAgLTUxNyw4ICs0ODksMTEgQEAgc3RhdGljIGJvb2wgYXFfYWRkX3J4X2ZyYWdtZW50KHN0cnVjdCBkZXZpY2UgKmRldixcXG4gXFx0ZG8ge1xcbiBcXHRcXHRza2JfZnJhZ190ICpmcmFnO1xcbiBcXG4tXFx0XFx0aWYgKHVubGlrZWx5KHNpbmZvLVxcdTAwM2Vucl9mcmFncyBcXHUwMDNlPSBNQVhfU0tCX0ZSQUdTKSlcXG4rXFx0XFx0aWYgKHVubGlrZWx5KHNpbmZvLVxcdTAwM2Vucl9mcmFncyBcXHUwMDNlPSBNQVhfU0tCX0ZSQUdTKSkge1xcbitcXHRcXHRcXHQvKiBBdHRhY2hlZCBmcmFncyBtdXN0IHJlYWNoIHhkcF9yZXR1cm5fYnVmZigpICovXFxuK1xcdFxcdFxcdHhkcF9idWZmX3NldF9mcmFnc19mbGFnKHhkcCk7XFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRmcmFnID0gXFx1MDAyNnNpbmZvLVxcdTAwM2VmcmFnc1tzaW5mby1cXHUwMDNlbnJfZnJhZ3MrK107XFxuIFxcdFxcdGJ1ZmZfID0gXFx1MDAyNnJpbmctXFx1MDAzZWJ1ZmZfcmluZ1tidWZmXy1cXHUwMDNlbmV4dF07XFxuQEAgLTU0Miw2ICs1MTcsMTEgQEAgc3RhdGljIGJvb2wgYXFfYWRkX3J4X2ZyYWdtZW50KHN0cnVjdCBkZXZpY2UgKmRldixcXG4gXFx0XFx0aWYgKHBhZ2VfaXNfcGZtZW1hbGxvYyhidWZmXy1cXHUwMDNlcnhkYXRhLnBhZ2UpKVxcbiBcXHRcXHRcXHR4ZHBfYnVmZl9zZXRfZnJhZ19wZm1lbWFsbG9jKHhkcCk7XFxuIFxcbitcXHRcXHQvKiBUaGUgZnJhZydzIHBhZ2UgcG9vbCByZWZlcmVuY2UgaXMgb3duZWQgYnkgdGhlIHhkcF9idWZmXFxuK1xcdFxcdCAqIGZyb20gbm93IG9uLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0YnVmZl8tXFx1MDAzZXJ4ZGF0YS5wYWdlID0gTlVMTDtcXG4rXFxuIFxcdH0gd2hpbGUgKCFidWZmXy1cXHUwMDNlaXNfZW9wKTtcXG4gXFxuIFxcdHhkcF9idWZmX3NldF9mcmFnc19mbGFnKHhkcCk7XFxuQEAgLTY0NSw2ICs2MjUsNyBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ19yeF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuIFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIFxcdFxcdFxcdGdvdG8gZXJyX2V4aXQ7XFxuIFxcdFxcdH1cXG4rXFx0XFx0c2tiX21hcmtfZm9yX3JlY3ljbGUoc2tiKTtcXG4gXFx0XFx0aWYgKGlzX3B0cF9yaW5nKVxcbiBcXHRcXHRcXHRidWZmLVxcdTAwM2VsZW4gLT1cXG4gXFx0XFx0XFx0XFx0YXFfcHRwX2V4dHJhY3RfdHMoc2VsZi1cXHUwMDNlYXFfbmljLCBza2JfaHd0c3RhbXBzKHNrYiksXFxuQEAgLTY2NSw3ICs2NDYsNyBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ19yeF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuIFxcdFxcdFxcdFxcdFxcdGJ1ZmYtXFx1MDAzZXJ4ZGF0YS5wZ19vZmYgKyBoZHJfbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHRidWZmLVxcdTAwM2VsZW4gLSBoZHJfbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHRzZWxmLVxcdTAwM2VmcmFtZV9tYXgpO1xcbi1cXHRcXHRcXHRwYWdlX3JlZl9pbmMoYnVmZi1cXHUwMDNlcnhkYXRhLnBhZ2UpO1xcbitcXHRcXHRcXHRidWZmLVxcdTAwM2VyeGRhdGEucGFnZSA9IE5VTEw7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmICghYnVmZi1cXHUwMDNlaXNfZW9wKSB7XFxuQEAgLTY4NCw3ICs2NjUsNyBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ19yeF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGJ1ZmZfLVxcdTAwM2VyeGRhdGEucGdfb2ZmLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRidWZmXy1cXHUwMDNlbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRzZWxmLVxcdTAwM2VmcmFtZV9tYXgpO1xcbi1cXHRcXHRcXHRcXHRwYWdlX3JlZl9pbmMoYnVmZl8tXFx1MDAzZXJ4ZGF0YS5wYWdlKTtcXG4rXFx0XFx0XFx0XFx0YnVmZl8tXFx1MDAzZXJ4ZGF0YS5wYWdlID0gTlVMTDtcXG4gXFx0XFx0XFx0XFx0YnVmZl8tXFx1MDAzZWlzX2NsZWFuZWQgPSAxO1xcbiBcXG4gXFx0XFx0XFx0XFx0YnVmZi1cXHUwMDNlaXNfaXBfY3NvIFxcdTAwMjY9IGJ1ZmZfLVxcdTAwM2Vpc19pcF9jc287XFxuQEAgLTgyMiw2ICs4MDMsMTEgQEAgc3RhdGljIGludCBfX2FxX3JpbmdfeGRwX2NsZWFuKHN0cnVjdCBhcV9yaW5nX3MgKnJ4X3JpbmcsXFxuIFxcdFxcdHhkcF9pbml0X2J1ZmYoXFx1MDAyNnhkcCwgZnJhbWVfc3osIFxcdTAwMjZyeF9yaW5nLVxcdTAwM2V4ZHBfcnhxKTtcXG4gXFx0XFx0eGRwX3ByZXBhcmVfYnVmZihcXHUwMDI2eGRwLCBoYXJkX3N0YXJ0LCByeF9yaW5nLVxcdTAwM2VwYWdlX29mZnNldCxcXG4gXFx0XFx0XFx0XFx0IGJ1ZmYtXFx1MDAzZWxlbiwgZmFsc2UpO1xcbitcXHRcXHQvKiBUaGUgeGRwX2J1ZmYgb3ducyB0aGUgYnVmZmVyJ3MgcGFnZSBwb29sIHJlZmVyZW5jZSBmcm9tXFxuK1xcdFxcdCAqIGhlcmUgb247IGl0IGNvbWVzIGJhY2sgdGhyb3VnaCB0aGUgTUVNX1RZUEVfUEFHRV9QT09MXFxuK1xcdFxcdCAqIG1lbW9yeSBtb2RlbCBvbiBldmVyeSBYRFAgdmVyZGljdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGJ1ZmYtXFx1MDAzZXJ4ZGF0YS5wYWdlID0gTlVMTDtcXG4gXFx0XFx0aWYgKCFidWZmLVxcdTAwM2Vpc19lb3ApIHtcXG4gXFx0XFx0XFx0aWYgKGFxX2FkZF9yeF9mcmFnbWVudChkZXYsIHJ4X3JpbmcsIGJ1ZmYsIFxcdTAwMjZ4ZHApKSB7XFxuIFxcdFxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJ4X3JpbmctXFx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcXG5AQCAtODI5LDYgKzgxNSw3IEBAIHN0YXRpYyBpbnQgX19hcV9yaW5nX3hkcF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpyeF9yaW5nLFxcbiBcXHRcXHRcXHRcXHRyeF9yaW5nLVxcdTAwM2VzdGF0cy5yeC5ieXRlcyArPSB4ZHBfZ2V0X2J1ZmZfbGVuKFxcdTAwMjZ4ZHApO1xcbiBcXHRcXHRcXHRcXHQrK3J4X3JpbmctXFx1MDAzZXN0YXRzLnJ4LnhkcF9hYm9ydGVkO1xcbiBcXHRcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cnhfcmluZy1cXHUwMDNlc3RhdHMucnguc3luY3ApO1xcbitcXHRcXHRcXHRcXHR4ZHBfcmV0dXJuX2J1ZmYoXFx1MDAyNnhkcCk7XFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG5AQCAtOTIxLDE1ICs5MDgsMzEgQEAgaW50IGFxX3JpbmdfcnhfZmlsbChzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKVxcbiBcXG4gdm9pZCBhcV9yaW5nX3J4X2RlaW5pdChzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKVxcbiB7XFxuLVxcdGlmICghc2VsZilcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcbitcXHRpZiAoIXNlbGYgfHwgIXNlbGYtXFx1MDAzZWJ1ZmZfcmluZylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0Zm9yICg7IHNlbGYtXFx1MDAzZXN3X2hlYWQgIT0gc2VsZi1cXHUwMDNlc3dfdGFpbDtcXG4tXFx0XFx0c2VsZi1cXHUwMDNlc3dfaGVhZCA9IGFxX3JpbmdfbmV4dF9keChzZWxmLCBzZWxmLVxcdTAwM2Vzd19oZWFkKSkge1xcbi1cXHRcXHRzdHJ1Y3QgYXFfcmluZ19idWZmX3MgKmJ1ZmYgPSBcXHUwMDI2c2VsZi1cXHUwMDNlYnVmZl9yaW5nW3NlbGYtXFx1MDAzZXN3X2hlYWRdO1xcbitcXHQvKiBSZWxlYXNlIGV2ZXJ5IHBhZ2Ugc3RpbGwgb3duZWQgYnkgdGhlIHJpbmcuXFxuK1xcdCAqXFxuK1xcdCAqIFdhbGtpbmcgW3N3X2hlYWQsIHN3X3RhaWwpIGlzIG5vdCBlbm91Z2g6IHJlZmlsbCBpcyBiYXRjaGVkXFxuK1xcdCAqIChhcV9yaW5nX3J4X2ZpbGwoKSB3YWl0cyBmb3IgQVFfQ0ZHX1JYX1JFRklMTF9USFJFUyBmcmVlIHNsb3RzKSxcXG4rXFx0ICogc28gc2xvdHMgdGhhdCB3ZXJlIGNsZWFuZWQgYnV0IG5vdCB5ZXQgcmVwb3N0ZWQgYWNjdW11bGF0ZSBpbiB0aGVcXG4rXFx0ICogW3N3X3RhaWwsIHN3X2hlYWQpIGdhcCwgYW5kIHRoZXkga2VlcCB0aGVpciBwYWdlIGZvciByZXVzZS4gV2Fsa1xcbitcXHQgKiB0aGUgd2hvbGUgcmluZyBhbmQgcmVsZWFzZSB3aGF0ZXZlciBpcyBsZWZ0LlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNlbGYtXFx1MDAzZXNpemU7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgYXFfcmluZ19idWZmX3MgKmJ1ZmYgPSBcXHUwMDI2c2VsZi1cXHUwMDNlYnVmZl9yaW5nW2ldO1xcbitcXG4rXFx0XFx0aWYgKCFidWZmLVxcdTAwM2VyeGRhdGEucGFnZSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRhcV9mcmVlX3J4cGFnZShcXHUwMDI2YnVmZi1cXHUwMDNlcnhkYXRhLCBhcV9uaWNfZ2V0X2RldihzZWxmLVxcdTAwM2VhcV9uaWMpKTtcXG4rXFx0XFx0cGFnZV9wb29sX3B1dF9mdWxsX3BhZ2Uoc2VsZi1cXHUwMDNlcGdfcG9vbCwgYnVmZi1cXHUwMDNlcnhkYXRhLnBhZ2UsXFxuK1xcdFxcdFxcdFxcdFxcdGZhbHNlKTtcXG4rXFx0XFx0YnVmZi1cXHUwMDNlcnhkYXRhLnBhZ2UgPSBOVUxMO1xcbiBcXHR9XFxuK1xcbitcXHRzZWxmLVxcdTAwM2Vzd19oZWFkID0gc2VsZi1cXHUwMDNlc3dfdGFpbDtcXG4gfVxcbiBcXG4gdm9pZCBhcV9yaW5nX2ZyZWUoc3RydWN0IGFxX3JpbmdfcyAqc2VsZilcXG5AQCAtOTQwLDYgKzk0MywxMSBAQCB2b2lkIGFxX3JpbmdfZnJlZShzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKVxcbiBcXHRrZnJlZShzZWxmLVxcdTAwM2VidWZmX3JpbmcpO1xcbiBcXHRzZWxmLVxcdTAwM2VidWZmX3JpbmcgPSBOVUxMO1xcbiBcXG4rXFx0aWYgKHNlbGYtXFx1MDAzZXBnX3Bvb2wpIHtcXG4rXFx0XFx0cGFnZV9wb29sX2Rlc3Ryb3koc2VsZi1cXHUwMDNlcGdfcG9vbCk7XFxuK1xcdFxcdHNlbGYtXFx1MDAzZXBnX3Bvb2wgPSBOVUxMO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoc2VsZi1cXHUwMDNlZHhfcmluZykge1xcbiBcXHRcXHRkbWFfZnJlZV9jb2hlcmVudChhcV9uaWNfZ2V0X2RldihzZWxmLVxcdTAwM2VhcV9uaWMpLFxcbiBcXHRcXHRcXHRcXHQgIHNlbGYtXFx1MDAzZXNpemUgKiBzZWxmLVxcdTAwM2VkeF9zaXplLCBzZWxmLVxcdTAwM2VkeF9yaW5nLFxcbkBAIC05NzgsOSArOTg2LDYgQEAgdW5zaWduZWQgaW50IGFxX3JpbmdfZmlsbF9zdGF0c19kYXRhKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsIHU2NCAqZGF0YSlcXG4gXFx0XFx0XFx0ZGF0YVsrK2NvdW50XSA9IHNlbGYtXFx1MDAzZXN0YXRzLnJ4LmFsbG9jX2ZhaWxzO1xcbiBcXHRcXHRcXHRkYXRhWysrY291bnRdID0gc2VsZi1cXHUwMDNlc3RhdHMucnguc2tiX2FsbG9jX2ZhaWxzO1xcbiBcXHRcXHRcXHRkYXRhWysrY291bnRdID0gc2VsZi1cXHUwMDNlc3RhdHMucngucG9sbHM7XFxuLVxcdFxcdFxcdGRhdGFbKytjb3VudF0gPSBzZWxmLVxcdTAwM2VzdGF0cy5yeC5wZ19mbGlwcztcXG4tXFx0XFx0XFx0ZGF0YVsrK2NvdW50XSA9IHNlbGYtXFx1MDAzZXN0YXRzLnJ4LnBnX3JldXNlcztcXG4tXFx0XFx0XFx0ZGF0YVsrK2NvdW50XSA9IHNlbGYtXFx1MDAzZXN0YXRzLnJ4LnBnX2xvc3RzO1xcbiBcXHRcXHRcXHRkYXRhWysrY291bnRdID0gc2VsZi1cXHUwMDNlc3RhdHMucngueGRwX2Fib3J0ZWQ7XFxuIFxcdFxcdFxcdGRhdGFbKytjb3VudF0gPSBzZWxmLVxcdTAwM2VzdGF0cy5yeC54ZHBfZHJvcDtcXG4gXFx0XFx0XFx0ZGF0YVsrK2NvdW50XSA9IHNlbGYtXFx1MDAzZXN0YXRzLnJ4LnhkcF9wYXNzO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmhcXG5pbmRleCBhNzBiODgwYWRhNjdlOS4uNThiY2FkYjNlM2NjZDMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5oXFxuQEAgLTE3LDEyICsxNywxMiBAQFxcbiAjZGVmaW5lIEFRX1hEUF9UQUlMUk9PTVxcdFxcdFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSlcXG4gXFxuIHN0cnVjdCBwYWdlO1xcbitzdHJ1Y3QgcGFnZV9wb29sO1xcbiBzdHJ1Y3QgYXFfbmljX2NmZ19zO1xcbiBcXG4gc3RydWN0IGFxX3J4cGFnZSB7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHRkbWFfYWRkcl90IGRhZGRyO1xcbi1cXHR1bnNpZ25lZCBpbnQgb3JkZXI7XFxuIFxcdHVuc2lnbmVkIGludCBwZ19vZmY7XFxuIH07XFxuIFxcbkBAIC0xMDUsOSArMTA1LDYgQEAgc3RydWN0IGFxX3Jpbmdfc3RhdHNfcnhfcyB7XFxuIFxcdHU2NCBhbGxvY19mYWlscztcXG4gXFx0dTY0IHNrYl9hbGxvY19mYWlscztcXG4gXFx0dTY0IHBvbGxzO1xcbi1cXHR1NjQgcGdfbG9zdHM7XFxuLVxcdHU2NCBwZ19mbGlwcztcXG4tXFx0dTY0IHBnX3JldXNlcztcXG4gXFx0dTY0IHhkcF9hYm9ydGVkO1xcbiBcXHR1NjQgeGRwX2Ryb3A7XFxuIFxcdHU2NCB4ZHBfcGFzcztcXG5AQCAtMTUxLDYgKzE0OCw3IEBAIHN0cnVjdCBhcV9yaW5nX3Mge1xcbiBcXHR1MTYgdGFpbF9zaXplO1xcbiBcXHR1bmlvbiBhcV9yaW5nX3N0YXRzX3Mgc3RhdHM7XFxuIFxcdGRtYV9hZGRyX3QgZHhfcmluZ19wYTtcXG4rXFx0c3RydWN0IHBhZ2VfcG9vbCAqcGdfcG9vbDtcXG4gXFx0c3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZztcXG4gXFx0ZW51bSBhdGxfcmluZ190eXBlIHJpbmdfdHlwZTtcXG4gXFx0c3RydWN0IHhkcF9yeHFfaW5mbyB4ZHBfcnhxO1xcbkBAIC0yMDIsNiArMjAwLDcgQEAgdm9pZCBhcV9yaW5nX3VwZGF0ZV9xdWV1ZV9zdGF0ZShzdHJ1Y3QgYXFfcmluZ19zICpyaW5nKTtcXG4gdm9pZCBhcV9yaW5nX3F1ZXVlX3dha2Uoc3RydWN0IGFxX3JpbmdfcyAqcmluZyk7XFxuIHZvaWQgYXFfcmluZ19xdWV1ZV9zdG9wKHN0cnVjdCBhcV9yaW5nX3MgKnJpbmcpO1xcbiBib29sIGFxX3JpbmdfdHhfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqc2VsZik7XFxuK3ZvaWQgYXFfcmluZ190eF9kZWluaXQoc3RydWN0IGFxX3JpbmdfcyAqc2VsZik7XFxuIGludCBhcV94ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtX2ZyYW1lcyxcXG4gXFx0XFx0c3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcywgdTMyIGZsYWdzKTtcXG4gaW50IGFxX3JpbmdfcnhfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqc2VsZixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfdmVjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV92ZWMuY1xcbmluZGV4IDJmOTAzM2NlZWQ4Y2UzLi44ZTE1NDA1ZDQ5NDE5ZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV92ZWMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3ZlYy5jXFxuQEAgLTE0NiwyNSArMTQ2LDMyIEBAIGludCBhcV92ZWNfcmluZ19hbGxvYyhzdHJ1Y3QgYXFfdmVjX3MgKnNlbGYsIHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLFxcbiBcXHRcXHRhcV9uaWNfc2V0X3R4X3JpbmcoYXFfbmljLCBpZHhfcmluZywgcmluZyk7XFxuIFxcbiBcXHRcXHRyaW5nID0gXFx1MDAyNnNlbGYtXFx1MDAzZXJpbmdbaV1bQVFfVkVDX1JYX0lEXTtcXG4rXFx0XFx0LyogUmVnaXN0ZXJpbmcgdGhlIE1FTV9UWVBFX1BBR0VfUE9PTCBtZW1vcnkgbW9kZWwgYmVsb3cgbmVlZHNcXG4rXFx0XFx0ICogdGhlIHBhZ2UgcG9vbCBjcmVhdGVkIGJ5IGFxX3JpbmdfcnhfYWxsb2MoKSwgc28gdGhlIHJpbmcgaXNcXG4rXFx0XFx0ICogYWxsb2NhdGVkIGZpcnN0LiBJZiBhIHJlZ2lzdHJhdGlvbiBmYWlscywgdGhlIHJpbmcgaGFzIHRvIGJlXFxuK1xcdFxcdCAqIGZyZWVkIGV4cGxpY2l0bHk6IHJ4X3JpbmdzIGlzIG5vdCBpbmNyZW1lbnRlZCB5ZXQsIHNvIHRoZVxcbitcXHRcXHQgKiB1bndpbmQgdGhyb3VnaCBhcV92ZWNfcmluZ19mcmVlKCkgd291bGQgbm90IGNvdmVyIGl0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZXJyID0gYXFfcmluZ19yeF9hbGxvYyhyaW5nLCBhcV9uaWMsIGlkeF9yaW5nLCBhcV9uaWNfY2ZnKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBlcnJfZXhpdDtcXG4rXFxuIFxcdFxcdGlmICh4ZHBfcnhxX2luZm9fcmVnKFxcdTAwMjZyaW5nLVxcdTAwM2V4ZHBfcnhxLFxcbiBcXHRcXHRcXHRcXHQgICAgIGFxX25pYy1cXHUwMDNlbmRldiwgaWR4LFxcbiBcXHRcXHRcXHRcXHQgICAgIHNlbGYtXFx1MDAzZW5hcGkubmFwaV9pZCkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGFxX3JpbmdfZnJlZShyaW5nKTtcXG4gXFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0XFx0XFx0Z290byBlcnJfZXhpdDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoeGRwX3J4cV9pbmZvX3JlZ19tZW1fbW9kZWwoXFx1MDAyNnJpbmctXFx1MDAzZXhkcF9yeHEsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBNRU1fVFlQRV9QQUdFX1NIQVJFRCwgTlVMTCkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBNRU1fVFlQRV9QQUdFX1BPT0wsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICByaW5nLVxcdTAwM2VwZ19wb29sKSBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0eGRwX3J4cV9pbmZvX3VucmVnKFxcdTAwMjZyaW5nLVxcdTAwM2V4ZHBfcnhxKTtcXG4rXFx0XFx0XFx0YXFfcmluZ19mcmVlKHJpbmcpO1xcbiBcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRcXHRnb3RvIGVycl9leGl0O1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRlcnIgPSBhcV9yaW5nX3J4X2FsbG9jKHJpbmcsIGFxX25pYywgaWR4X3JpbmcsIGFxX25pY19jZmcpO1xcbi1cXHRcXHRpZiAoZXJyKSB7XFxuLVxcdFxcdFxcdHhkcF9yeHFfaW5mb191bnJlZyhcXHUwMDI2cmluZy1cXHUwMDNleGRwX3J4cSk7XFxuLVxcdFxcdFxcdGdvdG8gZXJyX2V4aXQ7XFxuLVxcdFxcdH1cXG4tXFxuIFxcdFxcdCsrc2VsZi1cXHUwMDNlcnhfcmluZ3M7XFxuIFxcdH1cXG4gXFxuQEAgLTI3NSw3ICsyODIsNyBAQCB2b2lkIGFxX3ZlY19kZWluaXQoc3RydWN0IGFxX3ZlY19zICpzZWxmKVxcbiBcXG4gXFx0Zm9yIChpID0gMFU7IHNlbGYtXFx1MDAzZXR4X3JpbmdzIFxcdTAwM2UgaTsgKytpKSB7XFxuIFxcdFxcdHJpbmcgPSBzZWxmLVxcdTAwM2VyaW5nW2ldO1xcbi1cXHRcXHRhcV9yaW5nX3R4X2NsZWFuKFxcdTAwMjZyaW5nW0FRX1ZFQ19UWF9JRF0pO1xcbitcXHRcXHRhcV9yaW5nX3R4X2RlaW5pdChcXHUwMDI2cmluZ1tBUV9WRUNfVFhfSURdKTtcXG4gXFx0XFx0YXFfcmluZ19yeF9kZWluaXQoXFx1MDAyNnJpbmdbQVFfVkVDX1JYX0lEXSk7XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjQ4OjI3LjI1NDQ5OTM0OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0NjgyNTg0NTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgYVF1YW50aWEgQVF0aW9uIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvKS4gVGhpcyBpcyBhIGRyaXZlciBmb3IgYSBwaHlzaWNhbCBQQ0llIG5ldHdvcmsgY2FyZCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTFjZGJhMjg0ZWY4YjFhMGQ1OWZlMzkxNWQ5ZGFmYTc3ODQ4ZGUxNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDEzOjQ4OjI0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL0tjb25maWdcbmluZGV4IGNlYzIwMThjODRhOWJjLi5jOGZiN2IzM2U1YjcxYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL0tjb25maWdcbkBAIC0yMCw2ICsyMCw3IEBAIGNvbmZpZyBBUVRJT05cbiBcdHRyaXN0YXRlIFwiYVF1YW50aWEgQVF0aW9uKHRtKSBTdXBwb3J0XCJcbiBcdGRlcGVuZHMgb24gUENJXG4gXHRkZXBlbmRzIG9uIE1BQ1NFQyB8fCBNQUNTRUM9blxuK1x0c2VsZWN0IFBBR0VfUE9PTFxuIFx0aGVscFxuIFx0ICBUaGlzIGVuYWJsZXMgdGhlIHN1cHBvcnQgZm9yIHRoZSBhUXVhbnRpYSBBUXRpb24odG0pIEV0aGVybmV0IGNhcmQuXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jXG5pbmRleCA0MjBhZjk1OGQ0ODYxYS4uMGY1MTI1YmQyMzE1OTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuY1xuQEAgLTEwMCw5ICsxMDAsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFxX2V0aHRvb2xfcXVldWVfcnhfc3RhdF9uYW1lc1tdID0ge1xuIFx0XCIlc1F1ZXVlWyVkXSBBbGxvY0ZhaWxzXCIsXG4gXHRcIiVzUXVldWVbJWRdIFNrYkFsbG9jRmFpbHNcIixcbiBcdFwiJXNRdWV1ZVslZF0gUG9sbHNcIixcbi1cdFwiJXNRdWV1ZVslZF0gUGFnZUZsaXBzXCIsXG4tXHRcIiVzUXVldWVbJWRdIFBhZ2VSZXVzZXNcIixcbi1cdFwiJXNRdWV1ZVslZF0gUGFnZUZyZWVzXCIsXG4gXHRcIiVzUXVldWVbJWRdIFhkcEFib3J0XCIsXG4gXHRcIiVzUXVldWVbJWRdIFhkcERyb3BcIixcbiBcdFwiJXNRdWV1ZVslZF0gWGRwUGFzc1wiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcHRwLmNcbmluZGV4IDU1OGFjOTIzN2Y3NTllLi4zYTQwZDk4NmNkNjc4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9wdHAuY1xuQEAgLTEzLDYgKzEzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xhc3NpZnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xvY2tzb3VyY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC94ZHAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiYXFfbmljLmhcIlxuICNpbmNsdWRlIFwiYXFfcHRwLmhcIlxuQEAgLTExOTIsMTIgKzExOTMsMjMgQEAgaW50IGFxX3B0cF9yaW5nX2FsbG9jKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljKVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfZXhpdF9wdHBfdHg7XG4gXG4rXHRlcnIgPSB4ZHBfcnhxX2luZm9fcmVnKFx1MDAyNmFxX3B0cC1cdTAwM2VwdHBfcngueGRwX3J4cSwgYXFfbmljLVx1MDAzZW5kZXYsXG4rXHRcdFx0ICAgICAgIHJ4X3JpbmdfaWR4LCBhcV9wdHAtXHUwMDNlbmFwaS5uYXBpX2lkKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX2V4aXRfcHRwX3J4O1xuK1xuK1x0ZXJyID0geGRwX3J4cV9pbmZvX3JlZ19tZW1fbW9kZWwoXHUwMDI2YXFfcHRwLVx1MDAzZXB0cF9yeC54ZHBfcnhxLFxuK1x0XHRcdFx0XHQgTUVNX1RZUEVfUEFHRV9QT09MLFxuK1x0XHRcdFx0XHQgYXFfcHRwLVx1MDAzZXB0cF9yeC5wZ19wb29sKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX2V4aXRfeGRwX3J4cTtcbitcbiBcdGlmIChhcV9wdHAtXHUwMDNlYTFfcHRwKSB7XG4gXHRcdGVyciA9IGFxX3JpbmdfaHd0c19yeF9hbGxvYyhcdTAwMjZhcV9wdHAtXHUwMDNlaHd0c19yeCwgYXFfbmljLCBQVFBfSFdTVF9SSU5HX0lEWCxcbiBcdFx0XHRcdFx0ICAgIGFxX25pYy1cdTAwM2VhcV9uaWNfY2ZnLnJ4ZHMsXG4gXHRcdFx0XHRcdCAgICBhcV9uaWMtXHUwMDNlYXFfbmljX2NmZy5hcV9od19jYXBzLVx1MDAzZXJ4ZF9zaXplKTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGVycl9leGl0X3B0cF9yeDtcbitcdFx0XHRnb3RvIGVycl9leGl0X3hkcF9yeHE7XG4gXHR9XG4gXG4gXHRlcnIgPSBhcV9wdHBfc2tiX3JpbmdfaW5pdChcdTAwMjZhcV9wdHAtXHUwMDNlc2tiX3JpbmcsIGFxX25pYy1cdTAwM2VhcV9uaWNfY2ZnLnJ4ZHMpO1xuQEAgLTEyMTcsNiArMTIyOSw4IEBAIGludCBhcV9wdHBfcmluZ19hbGxvYyhzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYylcbiBlcnJfZXhpdF9od3RzX3J4OlxuIFx0aWYgKGFxX3B0cC1cdTAwM2VhMV9wdHApXG4gXHRcdGFxX3JpbmdfaHd0c19yeF9mcmVlKFx1MDAyNmFxX3B0cC1cdTAwM2Vod3RzX3J4KTtcbitlcnJfZXhpdF94ZHBfcnhxOlxuK1x0eGRwX3J4cV9pbmZvX3VucmVnKFx1MDAyNmFxX3B0cC1cdTAwM2VwdHBfcngueGRwX3J4cSk7XG4gZXJyX2V4aXRfcHRwX3J4OlxuIFx0YXFfcmluZ19mcmVlKFx1MDAyNmFxX3B0cC1cdTAwM2VwdHBfcngpO1xuIGVycl9leGl0X3B0cF90eDpcbkBAIC0xMjMzLDYgKzEyNDcsOCBAQCB2b2lkIGFxX3B0cF9yaW5nX2ZyZWUoc3RydWN0IGFxX25pY19zICphcV9uaWMpXG4gXHRcdHJldHVybjtcbiBcbiBcdGFxX3JpbmdfZnJlZShcdTAwMjZhcV9wdHAtXHUwMDNlcHRwX3R4KTtcbitcdGlmICh4ZHBfcnhxX2luZm9faXNfcmVnKFx1MDAyNmFxX3B0cC1cdTAwM2VwdHBfcngueGRwX3J4cSkpXG4rXHRcdHhkcF9yeHFfaW5mb191bnJlZyhcdTAwMjZhcV9wdHAtXHUwMDNlcHRwX3J4LnhkcF9yeHEpO1xuIFx0YXFfcmluZ19mcmVlKFx1MDAyNmFxX3B0cC1cdTAwM2VwdHBfcngpO1xuIFx0aWYgKGFxX3B0cC1cdTAwM2VhMV9wdHApXG4gXHRcdGFxX3JpbmdfaHd0c19yeF9mcmVlKFx1MDAyNmFxX3B0cC1cdTAwM2Vod3RzX3J4KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmNcbmluZGV4IDhmZjA3ZGUyYmQ1MjQwLi45ZGQ4ODE3MTA1OTQyNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jXG5AQCAtMTQsMTIwICsxNCwzNyBAQFxuICNpbmNsdWRlIFwiYXFfdmVjLmhcIlxuICNpbmNsdWRlIFwiYXFfbWFpbi5oXCJcbiBcbisjaW5jbHVkZSBcdTAwM2NuZXQvcGFnZV9wb29sL2hlbHBlcnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZHAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbHRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX3RyYWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiBcbi1zdGF0aWMgdm9pZCBhcV9nZXRfcnhwYWdlc194ZHAoc3RydWN0IGFxX3JpbmdfYnVmZl9zICpidWZmLFxuLVx0XHRcdCAgICAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi17XG4tXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaW5mbztcbi1cdGludCBpO1xuLVxuLVx0aWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKSB7XG4tXHRcdHNpbmZvID0geGRwX2dldF9zaGFyZWRfaW5mb19mcm9tX2J1ZmYoeGRwKTtcbi1cbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2luZm8tXHUwMDNlbnJfZnJhZ3M7IGkrKykge1xuLVx0XHRcdHNrYl9mcmFnX3QgKmZyYWcgPSBcdTAwMjZzaW5mby1cdTAwM2VmcmFnc1tpXTtcbi1cbi1cdFx0XHRwYWdlX3JlZl9pbmMoc2tiX2ZyYWdfcGFnZShmcmFnKSk7XG4tXHRcdH1cbi1cdH1cbi1cdHBhZ2VfcmVmX2luYyhidWZmLVx1MDAzZXJ4ZGF0YS5wYWdlKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGFxX2ZyZWVfcnhwYWdlKHN0cnVjdCBhcV9yeHBhZ2UgKnJ4cGFnZSwgc3RydWN0IGRldmljZSAqZGV2KVxuLXtcbi1cdHVuc2lnbmVkIGludCBsZW4gPSBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIHJ4cGFnZS1cdTAwM2VvcmRlcjtcbi1cbi1cdGRtYV91bm1hcF9wYWdlKGRldiwgcnhwYWdlLVx1MDAzZWRhZGRyLCBsZW4sIERNQV9GUk9NX0RFVklDRSk7XG4tXG4tXHQvKiBEcm9wIHRoZSByZWYgZm9yIGJlaW5nIGluIHRoZSByaW5nLiAqL1xuLVx0X19mcmVlX3BhZ2VzKHJ4cGFnZS1cdTAwM2VwYWdlLCByeHBhZ2UtXHUwMDNlb3JkZXIpO1xuLVx0cnhwYWdlLVx1MDAzZXBhZ2UgPSBOVUxMO1xuLX1cbi1cbi1zdGF0aWMgaW50IGFxX2FsbG9jX3J4cGFnZXMoc3RydWN0IGFxX3J4cGFnZSAqcnhwYWdlLCBzdHJ1Y3QgYXFfcmluZ19zICpyeF9yaW5nKVxuK3N0YXRpYyBpbnQgYXFfZ2V0X3J4cGFnZXMoc3RydWN0IGFxX3JpbmdfcyAqc2VsZiwgc3RydWN0IGFxX3JpbmdfYnVmZl9zICpyeGJ1ZilcbiB7XG4tXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhcV9uaWNfZ2V0X2RldihyeF9yaW5nLVx1MDAzZWFxX25pYyk7XG4tXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSByeF9yaW5nLVx1MDAzZXBhZ2Vfb3JkZXI7XG4rXHR1bnNpZ25lZCBpbnQgc2l6ZSA9IHNlbGYtXHUwMDNlcGFnZV9vZmZzZXQgKyBzZWxmLVx1MDAzZWZyYW1lX21heCArXG4rXHRcdFx0ICAgIHNlbGYtXHUwMDNldGFpbF9zaXplO1xuK1x0dW5zaWduZWQgaW50IHBnX29mZjtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuLVx0aW50IHJldCA9IC1FTk9NRU07XG4tXHRkbWFfYWRkcl90IGRhZGRyO1xuLVxuLVx0cGFnZSA9IGRldl9hbGxvY19wYWdlcyhvcmRlcik7XG4tXHRpZiAodW5saWtlbHkoIXBhZ2UpKVxuLVx0XHRnb3RvIGVycl9leGl0O1xuLVxuLVx0ZGFkZHIgPSBkbWFfbWFwX3BhZ2UoZGV2LCBwYWdlLCAwLCBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyLFxuLVx0XHRcdCAgICAgRE1BX0ZST01fREVWSUNFKTtcbi1cbi1cdGlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRhZGRyKSkpXG4tXHRcdGdvdG8gZnJlZV9wYWdlO1xuLVxuLVx0cnhwYWdlLVx1MDAzZXBhZ2UgPSBwYWdlO1xuLVx0cnhwYWdlLVx1MDAzZWRhZGRyID0gZGFkZHI7XG4tXHRyeHBhZ2UtXHUwMDNlb3JkZXIgPSBvcmRlcjtcbi1cdHJ4cGFnZS1cdTAwM2VwZ19vZmYgPSByeF9yaW5nLVx1MDAzZXBhZ2Vfb2Zmc2V0O1xuLVxuLVx0cmV0dXJuIDA7XG4tXG4tZnJlZV9wYWdlOlxuLVx0X19mcmVlX3BhZ2VzKHBhZ2UsIG9yZGVyKTtcbiBcbi1lcnJfZXhpdDpcbi1cdHJldHVybiByZXQ7XG4tfVxuK1x0LyogQnVmZmVycyB3aG9zZSBwYWdlIHdhcyBub3QgcGFzc2VkIHVwIHRoZSBzdGFjayBhcmUgcmVwb3N0ZWRcbitcdCAqIHdpdGggdGhlIGRhdGEgdGhleSBhbHJlYWR5IGNhcnJ5IGRpc2NhcmRlZC5cbitcdCAqL1xuK1x0aWYgKHJ4YnVmLVx1MDAzZXJ4ZGF0YS5wYWdlKVxuK1x0XHRyZXR1cm4gMDtcbiBcbi1zdGF0aWMgaW50IGFxX2dldF9yeHBhZ2VzKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYsIHN0cnVjdCBhcV9yaW5nX2J1ZmZfcyAqcnhidWYpXG4te1xuLVx0dW5zaWduZWQgaW50IG9yZGVyID0gc2VsZi1cdTAwM2VwYWdlX29yZGVyO1xuLVx0dTE2IHBhZ2Vfb2Zmc2V0ID0gc2VsZi1cdTAwM2VwYWdlX29mZnNldDtcbi1cdHUxNiBmcmFtZV9tYXggPSBzZWxmLVx1MDAzZWZyYW1lX21heDtcbi1cdHUxNiB0YWlsX3NpemUgPSBzZWxmLVx1MDAzZXRhaWxfc2l6ZTtcbi1cdGludCByZXQ7XG4tXG4tXHRpZiAocnhidWYtXHUwMDNlcnhkYXRhLnBhZ2UpIHtcbi1cdFx0LyogT25lIG1lYW5zIHJpbmcgaXMgdGhlIG9ubHkgdXNlciBhbmQgY2FuIHJldXNlICovXG4tXHRcdGlmIChwYWdlX3JlZl9jb3VudChyeGJ1Zi1cdTAwM2VyeGRhdGEucGFnZSkgXHUwMDNlIDEpIHtcbi1cdFx0XHQvKiBUcnkgcmV1c2UgYnVmZmVyICovXG4tXHRcdFx0cnhidWYtXHUwMDNlcnhkYXRhLnBnX29mZiArPSBmcmFtZV9tYXggKyBwYWdlX29mZnNldCArXG4tXHRcdFx0XHRcdFx0dGFpbF9zaXplO1xuLVx0XHRcdGlmIChyeGJ1Zi1cdTAwM2VyeGRhdGEucGdfb2ZmICsgZnJhbWVfbWF4ICsgdGFpbF9zaXplIFx1MDAzYz1cbi1cdFx0XHQgICAgKFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpKSB7XG4tXHRcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnNlbGYtXHUwMDNlc3RhdHMucnguc3luY3ApO1xuLVx0XHRcdFx0c2VsZi1cdTAwM2VzdGF0cy5yeC5wZ19mbGlwcysrO1xuLVx0XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c2VsZi1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4tXG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdC8qIEJ1ZmZlciBleGhhdXN0ZWQuIFdlIGhhdmUgb3RoZXIgdXNlcnMgYW5kXG4tXHRcdFx0XHQgKiBzaG91bGQgcmVsZWFzZSB0aGlzIHBhZ2UgYW5kIHJlYWxsb2Ncbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0YXFfZnJlZV9yeHBhZ2UoXHUwMDI2cnhidWYtXHUwMDNlcnhkYXRhLFxuLVx0XHRcdFx0XHQgICAgICAgYXFfbmljX2dldF9kZXYoc2VsZi1cdTAwM2VhcV9uaWMpKTtcbi1cdFx0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c2VsZi1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4tXHRcdFx0XHRzZWxmLVx1MDAzZXN0YXRzLnJ4LnBnX2xvc3RzKys7XG4tXHRcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzZWxmLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cnhidWYtXHUwMDNlcnhkYXRhLnBnX29mZiA9IHBhZ2Vfb2Zmc2V0O1xuLVx0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c2VsZi1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4tXHRcdFx0c2VsZi1cdTAwM2VzdGF0cy5yeC5wZ19yZXVzZXMrKztcbi1cdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzZWxmLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbi1cdFx0fVxuK1x0cGFnZSA9IHBhZ2VfcG9vbF9kZXZfYWxsb2NfZnJhZyhzZWxmLVx1MDAzZXBnX3Bvb2wsIFx1MDAyNnBnX29mZiwgc2l6ZSk7XG4rXHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XG4rXHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c2VsZi1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4rXHRcdHNlbGYtXHUwMDNlc3RhdHMucnguYWxsb2NfZmFpbHMrKztcbitcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c2VsZi1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuLVx0aWYgKCFyeGJ1Zi1cdTAwM2VyeGRhdGEucGFnZSkge1xuLVx0XHRyZXQgPSBhcV9hbGxvY19yeHBhZ2VzKFx1MDAyNnJ4YnVmLVx1MDAzZXJ4ZGF0YSwgc2VsZik7XG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnNlbGYtXHUwMDNlc3RhdHMucnguc3luY3ApO1xuLVx0XHRcdHNlbGYtXHUwMDNlc3RhdHMucnguYWxsb2NfZmFpbHMrKztcbi1cdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzZWxmLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbi1cdFx0fVxuLVx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuK1x0cnhidWYtXHUwMDNlcnhkYXRhLnBhZ2UgPSBwYWdlO1xuK1x0cnhidWYtXHUwMDNlcnhkYXRhLmRhZGRyID0gcGFnZV9wb29sX2dldF9kbWFfYWRkcihwYWdlKTtcbitcdHJ4YnVmLVx1MDAzZXJ4ZGF0YS5wZ19vZmYgPSBwZ19vZmYgKyBzZWxmLVx1MDAzZXBhZ2Vfb2Zmc2V0O1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTE3OSw2ICs5NiwxNSBAQCBpbnQgYXFfcmluZ19yeF9hbGxvYyhzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLFxuIFx0XHQgICAgIHVuc2lnbmVkIGludCBpZHgsXG4gXHRcdCAgICAgc3RydWN0IGFxX25pY19jZmdfcyAqYXFfbmljX2NmZylcbiB7XG4rXHRzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyBwcF9wYXJhbXMgPSB7XG4rXHRcdC5mbGFncyA9IFBQX0ZMQUdfRE1BX01BUCB8IFBQX0ZMQUdfRE1BX1NZTkNfREVWLFxuK1x0XHQucG9vbF9zaXplID0gYXFfbmljX2NmZy1cdTAwM2VyeGRzLFxuK1x0XHQubmlkID0gTlVNQV9OT19OT0RFLFxuK1x0XHQuZGV2ID0gYXFfbmljX2dldF9kZXYoYXFfbmljKSxcbitcdFx0LmRtYV9kaXIgPSBETUFfRlJPTV9ERVZJQ0UsXG4rXHR9O1xuK1x0c3RydWN0IHBhZ2VfcG9vbCAqcG9vbDtcbitcbiBcdHNlbGYtXHUwMDNlYXFfbmljID0gYXFfbmljO1xuIFx0c2VsZi1cdTAwM2VpZHggPSBpZHg7XG4gXHRzZWxmLVx1MDAzZXNpemUgPSBhcV9uaWNfY2ZnLVx1MDAzZXJ4ZHM7XG5AQCAtMjAwLDYgKzEyNiwxOCBAQCBpbnQgYXFfcmluZ19yeF9hbGxvYyhzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLFxuIFx0XHRzZWxmLVx1MDAzZXRhaWxfc2l6ZSA9IDA7XG4gXHR9XG4gXG4rXHRwcF9wYXJhbXMub3JkZXIgPSBzZWxmLVx1MDAzZXBhZ2Vfb3JkZXI7XG4rXHRwcF9wYXJhbXMubWF4X2xlbiA9IFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgc2VsZi1cdTAwM2VwYWdlX29yZGVyO1xuK1xuK1x0cG9vbCA9IHBhZ2VfcG9vbF9jcmVhdGUoXHUwMDI2cHBfcGFyYW1zKTtcbitcdGlmIChJU19FUlIocG9vbCkpXG4rXHRcdHJldHVybiBQVFJfRVJSKHBvb2wpO1xuK1xuK1x0c2VsZi1cdTAwM2VwZ19wb29sID0gcG9vbDtcbitcbitcdC8qIE9uIGZhaWx1cmUgYXFfcmluZ19hbGxvYygpIGNhbGxzIGFxX3JpbmdfZnJlZSgpLCB3aGljaCBhbHNvXG4rXHQgKiBkZXN0cm95cyB0aGUgcGFnZSBwb29sLlxuK1x0ICovXG4gXHRyZXR1cm4gYXFfcmluZ19hbGxvYyhzZWxmLCBhcV9uaWMpO1xuIH1cbiBcbkBAIC0zNDYsNyArMjg0LDExIEBAIGJvb2wgYXFfcmluZ190eF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKVxuIFx0XHRcdCsrc2VsZi1cdTAwM2VzdGF0cy50eC5wYWNrZXRzO1xuIFx0XHRcdHNlbGYtXHUwMDNlc3RhdHMudHguYnl0ZXMgKz0geGRwX2dldF9mcmFtZV9sZW4oYnVmZi1cdTAwM2V4ZHBmKTtcbiBcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzZWxmLVx1MDAzZXN0YXRzLnR4LnN5bmNwKTtcbi1cdFx0XHR4ZHBfcmV0dXJuX2ZyYW1lX3J4X25hcGkoYnVmZi1cdTAwM2V4ZHBmKTtcbitcdFx0XHQvKiBGcmFtZXMgcXVldWVkIHZpYSBuZG9feGRwX3htaXQoKSBtYXkgY29tZSBmcm9tIGFcbitcdFx0XHQgKiBwYWdlIHBvb2wgb3duZWQgYnkgYW5vdGhlciBOQVBJIGNvbnRleHQ6IG5vIGRpcmVjdFxuK1x0XHRcdCAqIHJlY3ljbGluZy5cbitcdFx0XHQgKi9cbitcdFx0XHR4ZHBfcmV0dXJuX2ZyYW1lKGJ1ZmYtXHUwMDNleGRwZik7XG4gXHRcdH1cbiBcbiBvdXQ6XG5AQCAtMzYwLDYgKzMwMiwzNSBAQCBib29sIGFxX3JpbmdfdHhfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqc2VsZilcbiBcdHJldHVybiAhIWJ1ZGdldDtcbiB9XG4gXG4rdm9pZCBhcV9yaW5nX3R4X2RlaW5pdChzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKVxuK3tcbitcdGlmICghc2VsZilcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yICg7IHNlbGYtXHUwMDNlc3dfaGVhZCAhPSBzZWxmLVx1MDAzZXN3X3RhaWw7XG4rXHRcdHNlbGYtXHUwMDNlc3dfaGVhZCA9IGFxX3JpbmdfbmV4dF9keChzZWxmLCBzZWxmLVx1MDAzZXN3X2hlYWQpKSB7XG4rXHRcdHN0cnVjdCBhcV9yaW5nX2J1ZmZfcyAqYnVmZiA9IFx1MDAyNnNlbGYtXHUwMDNlYnVmZl9yaW5nW3NlbGYtXHUwMDNlc3dfaGVhZF07XG4rXHRcdHN0cnVjdCBkZXZpY2UgKm5kZXYgPSBhcV9uaWNfZ2V0X2RldihzZWxmLVx1MDAzZWFxX25pYyk7XG4rXG4rXHRcdGlmIChidWZmLVx1MDAzZWlzX21hcHBlZCkge1xuK1x0XHRcdGlmIChidWZmLVx1MDAzZWlzX3NvcCkge1xuK1x0XHRcdFx0ZG1hX3VubWFwX3NpbmdsZShuZGV2LCBidWZmLVx1MDAzZXBhLCBidWZmLVx1MDAzZWxlbixcbitcdFx0XHRcdFx0XHQgRE1BX1RPX0RFVklDRSk7XG4rXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdGRtYV91bm1hcF9wYWdlKG5kZXYsIGJ1ZmYtXHUwMDNlcGEsIGJ1ZmYtXHUwMDNlbGVuLFxuK1x0XHRcdFx0XHQgICAgICAgRE1BX1RPX0RFVklDRSk7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXG4rXHRcdGlmIChidWZmLVx1MDAzZWlzX2VvcCkge1xuK1x0XHRcdGlmIChidWZmLVx1MDAzZXNrYilcbitcdFx0XHRcdGRldl9rZnJlZV9za2JfYW55KGJ1ZmYtXHUwMDNlc2tiKTtcbitcdFx0XHRlbHNlIGlmIChidWZmLVx1MDAzZXhkcGYpXG4rXHRcdFx0XHR4ZHBfcmV0dXJuX2ZyYW1lKGJ1ZmYtXHUwMDNleGRwZik7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgYXFfcnhfY2hlY2tzdW0oc3RydWN0IGFxX3JpbmdfcyAqc2VsZixcbiBcdFx0XHQgICBzdHJ1Y3QgYXFfcmluZ19idWZmX3MgKmJ1ZmYsXG4gXHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbkBAIC00MDgsMjIgKzM3OSwxNSBAQCBpbnQgYXFfeGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG51bV9mcmFtZXMsXG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbi1cdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdFx0c3RydWN0IGFxX3JpbmdfYnVmZl9zICpidWZmKVxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGY7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuIFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcbiBcdGlmICh1bmxpa2VseSgheGRwZikpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0c2tiID0geGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHhkcGYsIGRldik7XG4tXHRpZiAoIXNrYilcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRhcV9nZXRfcnhwYWdlc194ZHAoYnVmZiwgeGRwKTtcbi1cdHJldHVybiBza2I7XG4rXHRyZXR1cm4geGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHhkcGYsIGRldik7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX3J1bl9wcm9nKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLFxuQEAgLTQ0NCw4ICs0MDgsMTYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsXG4gXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeF9yaW5nLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbiBcbiBcdHByb2cgPSBSRUFEX09OQ0UocnhfcmluZy1cdTAwM2V4ZHBfcHJvZyk7XG4tXHRpZiAoIXByb2cpXG4tXHRcdHJldHVybiBhcV94ZHBfYnVpbGRfc2tiKHhkcCwgYXFfbmljLVx1MDAzZW5kZXYsIGJ1ZmYpO1xuK1x0aWYgKCFwcm9nKSB7XG4rXHRcdHNrYiA9IGFxX3hkcF9idWlsZF9za2IoeGRwLCBhcV9uaWMtXHUwMDNlbmRldik7XG4rXHRcdC8qIFRoZSByaW5nIGhhcyBhbHJlYWR5IGhhbmRlZCBpdHMgcGFnZSBwb29sIHJlZmVyZW5jZSB0byB0aGVcbitcdFx0ICogeGRwX2J1ZmYsIHNvIGlmIHRoZSBza2IgY291bGQgbm90IGJlIGJ1aWx0IHRoZSBidWZmZXIgbXVzdFxuK1x0XHQgKiBiZSByZXR1cm5lZCB0byB0aGUgcG9vbCBoZXJlIG9yIGl0cyBmcmFnbWVudHMgd291bGQgbGVhay5cbitcdFx0ICovXG4rXHRcdGlmICghc2tiKVxuK1x0XHRcdHhkcF9yZXR1cm5fYnVmZih4ZHApO1xuK1x0XHRyZXR1cm4gc2tiO1xuK1x0fVxuIFxuIFx0cHJlZmV0Y2h3KHhkcC1cdTAwM2VkYXRhX2hhcmRfc3RhcnQpOyAvKiB4ZHBfZnJhbWUgd3JpdGUgKi9cbiBcbkBAIC00NTYsNyArNDI4LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsXG4gXHRhY3QgPSBicGZfcHJvZ19ydW5feGRwKHByb2csIHhkcCk7XG4gXHRzd2l0Y2ggKGFjdCkge1xuIFx0Y2FzZSBYRFBfUEFTUzpcbi1cdFx0c2tiID0gYXFfeGRwX2J1aWxkX3NrYih4ZHAsIGFxX25pYy1cdTAwM2VuZGV2LCBidWZmKTtcbitcdFx0c2tiID0gYXFfeGRwX2J1aWxkX3NrYih4ZHAsIGFxX25pYy1cdTAwM2VuZGV2KTtcbiBcdFx0aWYgKCFza2IpXG4gXHRcdFx0Z290byBvdXRfYWJvcnRlZDtcbiBcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyeF9yaW5nLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbkBAIC00NzQsNyArNDQ2LDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsXG4gXHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cnhfcmluZy1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4gXHRcdCsrcnhfcmluZy1cdTAwM2VzdGF0cy5yeC54ZHBfdHg7XG4gXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4X3JpbmctXHUwMDNlc3RhdHMucnguc3luY3ApO1xuLVx0XHRhcV9nZXRfcnhwYWdlc194ZHAoYnVmZiwgeGRwKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFhEUF9SRURJUkVDVDpcbiBcdFx0aWYgKHhkcF9kb19yZWRpcmVjdChhcV9uaWMtXHUwMDNlbmRldiwgeGRwLCBwcm9nKSBcdTAwM2MgMClcbkBAIC00ODMsNyArNDU0LDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsXG4gXHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cnhfcmluZy1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4gXHRcdCsrcnhfcmluZy1cdTAwM2VzdGF0cy5yeC54ZHBfcmVkaXJlY3Q7XG4gXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4X3JpbmctXHUwMDNlc3RhdHMucnguc3luY3ApO1xuLVx0XHRhcV9nZXRfcnhwYWdlc194ZHAoYnVmZiwgeGRwKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRmYWxsdGhyb3VnaDtcbkBAIC00OTQsMTEgKzQ2NCwxMyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFxX3hkcF9ydW5fcHJvZyhzdHJ1Y3QgYXFfbmljX3MgKmFxX25pYyxcbiBcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cnhfcmluZy1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG4gXHRcdHRyYWNlX3hkcF9leGNlcHRpb24oYXFfbmljLVx1MDAzZW5kZXYsIHByb2csIGFjdCk7XG4gXHRcdGJwZl93YXJuX2ludmFsaWRfeGRwX2FjdGlvbihhcV9uaWMtXHUwMDNlbmRldiwgcHJvZywgYWN0KTtcbitcdFx0eGRwX3JldHVybl9idWZmKHhkcCk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBYRFBfRFJPUDpcbiBcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyeF9yaW5nLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbiBcdFx0KytyeF9yaW5nLVx1MDAzZXN0YXRzLnJ4LnhkcF9kcm9wO1xuIFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeF9yaW5nLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbitcdFx0eGRwX3JldHVybl9idWZmKHhkcCk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuQEAgLTUxNyw4ICs0ODksMTEgQEAgc3RhdGljIGJvb2wgYXFfYWRkX3J4X2ZyYWdtZW50KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdGRvIHtcbiBcdFx0c2tiX2ZyYWdfdCAqZnJhZztcbiBcbi1cdFx0aWYgKHVubGlrZWx5KHNpbmZvLVx1MDAzZW5yX2ZyYWdzIFx1MDAzZT0gTUFYX1NLQl9GUkFHUykpXG4rXHRcdGlmICh1bmxpa2VseShzaW5mby1cdTAwM2Vucl9mcmFncyBcdTAwM2U9IE1BWF9TS0JfRlJBR1MpKSB7XG4rXHRcdFx0LyogQXR0YWNoZWQgZnJhZ3MgbXVzdCByZWFjaCB4ZHBfcmV0dXJuX2J1ZmYoKSAqL1xuK1x0XHRcdHhkcF9idWZmX3NldF9mcmFnc19mbGFnKHhkcCk7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdH1cbiBcbiBcdFx0ZnJhZyA9IFx1MDAyNnNpbmZvLVx1MDAzZWZyYWdzW3NpbmZvLVx1MDAzZW5yX2ZyYWdzKytdO1xuIFx0XHRidWZmXyA9IFx1MDAyNnJpbmctXHUwMDNlYnVmZl9yaW5nW2J1ZmZfLVx1MDAzZW5leHRdO1xuQEAgLTU0Miw2ICs1MTcsMTEgQEAgc3RhdGljIGJvb2wgYXFfYWRkX3J4X2ZyYWdtZW50KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0aWYgKHBhZ2VfaXNfcGZtZW1hbGxvYyhidWZmXy1cdTAwM2VyeGRhdGEucGFnZSkpXG4gXHRcdFx0eGRwX2J1ZmZfc2V0X2ZyYWdfcGZtZW1hbGxvYyh4ZHApO1xuIFxuK1x0XHQvKiBUaGUgZnJhZydzIHBhZ2UgcG9vbCByZWZlcmVuY2UgaXMgb3duZWQgYnkgdGhlIHhkcF9idWZmXG4rXHRcdCAqIGZyb20gbm93IG9uLlxuK1x0XHQgKi9cbitcdFx0YnVmZl8tXHUwMDNlcnhkYXRhLnBhZ2UgPSBOVUxMO1xuK1xuIFx0fSB3aGlsZSAoIWJ1ZmZfLVx1MDAzZWlzX2VvcCk7XG4gXG4gXHR4ZHBfYnVmZl9zZXRfZnJhZ3NfZmxhZyh4ZHApO1xuQEAgLTY0NSw2ICs2MjUsNyBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ19yeF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRnb3RvIGVycl9leGl0O1xuIFx0XHR9XG4rXHRcdHNrYl9tYXJrX2Zvcl9yZWN5Y2xlKHNrYik7XG4gXHRcdGlmIChpc19wdHBfcmluZylcbiBcdFx0XHRidWZmLVx1MDAzZWxlbiAtPVxuIFx0XHRcdFx0YXFfcHRwX2V4dHJhY3RfdHMoc2VsZi1cdTAwM2VhcV9uaWMsIHNrYl9od3RzdGFtcHMoc2tiKSxcbkBAIC02NjUsNyArNjQ2LDcgQEAgc3RhdGljIGludCBfX2FxX3JpbmdfcnhfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqc2VsZiwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0XHRcdFx0XHRidWZmLVx1MDAzZXJ4ZGF0YS5wZ19vZmYgKyBoZHJfbGVuLFxuIFx0XHRcdFx0XHRidWZmLVx1MDAzZWxlbiAtIGhkcl9sZW4sXG4gXHRcdFx0XHRcdHNlbGYtXHUwMDNlZnJhbWVfbWF4KTtcbi1cdFx0XHRwYWdlX3JlZl9pbmMoYnVmZi1cdTAwM2VyeGRhdGEucGFnZSk7XG4rXHRcdFx0YnVmZi1cdTAwM2VyeGRhdGEucGFnZSA9IE5VTEw7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKCFidWZmLVx1MDAzZWlzX2VvcCkge1xuQEAgLTY4NCw3ICs2NjUsNyBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ19yeF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0XHRcdFx0YnVmZl8tXHUwMDNlcnhkYXRhLnBnX29mZixcbiBcdFx0XHRcdFx0XHRidWZmXy1cdTAwM2VsZW4sXG4gXHRcdFx0XHRcdFx0c2VsZi1cdTAwM2VmcmFtZV9tYXgpO1xuLVx0XHRcdFx0cGFnZV9yZWZfaW5jKGJ1ZmZfLVx1MDAzZXJ4ZGF0YS5wYWdlKTtcbitcdFx0XHRcdGJ1ZmZfLVx1MDAzZXJ4ZGF0YS5wYWdlID0gTlVMTDtcbiBcdFx0XHRcdGJ1ZmZfLVx1MDAzZWlzX2NsZWFuZWQgPSAxO1xuIFxuIFx0XHRcdFx0YnVmZi1cdTAwM2Vpc19pcF9jc28gXHUwMDI2PSBidWZmXy1cdTAwM2Vpc19pcF9jc287XG5AQCAtODIyLDYgKzgwMywxMSBAQCBzdGF0aWMgaW50IF9fYXFfcmluZ194ZHBfY2xlYW4oc3RydWN0IGFxX3JpbmdfcyAqcnhfcmluZyxcbiBcdFx0eGRwX2luaXRfYnVmZihcdTAwMjZ4ZHAsIGZyYW1lX3N6LCBcdTAwMjZyeF9yaW5nLVx1MDAzZXhkcF9yeHEpO1xuIFx0XHR4ZHBfcHJlcGFyZV9idWZmKFx1MDAyNnhkcCwgaGFyZF9zdGFydCwgcnhfcmluZy1cdTAwM2VwYWdlX29mZnNldCxcbiBcdFx0XHRcdCBidWZmLVx1MDAzZWxlbiwgZmFsc2UpO1xuK1x0XHQvKiBUaGUgeGRwX2J1ZmYgb3ducyB0aGUgYnVmZmVyJ3MgcGFnZSBwb29sIHJlZmVyZW5jZSBmcm9tXG4rXHRcdCAqIGhlcmUgb247IGl0IGNvbWVzIGJhY2sgdGhyb3VnaCB0aGUgTUVNX1RZUEVfUEFHRV9QT09MXG4rXHRcdCAqIG1lbW9yeSBtb2RlbCBvbiBldmVyeSBYRFAgdmVyZGljdC5cbitcdFx0ICovXG4rXHRcdGJ1ZmYtXHUwMDNlcnhkYXRhLnBhZ2UgPSBOVUxMO1xuIFx0XHRpZiAoIWJ1ZmYtXHUwMDNlaXNfZW9wKSB7XG4gXHRcdFx0aWYgKGFxX2FkZF9yeF9mcmFnbWVudChkZXYsIHJ4X3JpbmcsIGJ1ZmYsIFx1MDAyNnhkcCkpIHtcbiBcdFx0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cnhfcmluZy1cdTAwM2VzdGF0cy5yeC5zeW5jcCk7XG5AQCAtODI5LDYgKzgxNSw3IEBAIHN0YXRpYyBpbnQgX19hcV9yaW5nX3hkcF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpyeF9yaW5nLFxuIFx0XHRcdFx0cnhfcmluZy1cdTAwM2VzdGF0cy5yeC5ieXRlcyArPSB4ZHBfZ2V0X2J1ZmZfbGVuKFx1MDAyNnhkcCk7XG4gXHRcdFx0XHQrK3J4X3JpbmctXHUwMDNlc3RhdHMucngueGRwX2Fib3J0ZWQ7XG4gXHRcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeF9yaW5nLVx1MDAzZXN0YXRzLnJ4LnN5bmNwKTtcbitcdFx0XHRcdHhkcF9yZXR1cm5fYnVmZihcdTAwMjZ4ZHApO1xuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuIFx0XHR9XG5AQCAtOTIxLDE1ICs5MDgsMzEgQEAgaW50IGFxX3JpbmdfcnhfZmlsbChzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKVxuIFxuIHZvaWQgYXFfcmluZ19yeF9kZWluaXQoc3RydWN0IGFxX3JpbmdfcyAqc2VsZilcbiB7XG4tXHRpZiAoIXNlbGYpXG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdGlmICghc2VsZiB8fCAhc2VsZi1cdTAwM2VidWZmX3JpbmcpXG4gXHRcdHJldHVybjtcbiBcbi1cdGZvciAoOyBzZWxmLVx1MDAzZXN3X2hlYWQgIT0gc2VsZi1cdTAwM2Vzd190YWlsO1xuLVx0XHRzZWxmLVx1MDAzZXN3X2hlYWQgPSBhcV9yaW5nX25leHRfZHgoc2VsZiwgc2VsZi1cdTAwM2Vzd19oZWFkKSkge1xuLVx0XHRzdHJ1Y3QgYXFfcmluZ19idWZmX3MgKmJ1ZmYgPSBcdTAwMjZzZWxmLVx1MDAzZWJ1ZmZfcmluZ1tzZWxmLVx1MDAzZXN3X2hlYWRdO1xuK1x0LyogUmVsZWFzZSBldmVyeSBwYWdlIHN0aWxsIG93bmVkIGJ5IHRoZSByaW5nLlxuK1x0ICpcbitcdCAqIFdhbGtpbmcgW3N3X2hlYWQsIHN3X3RhaWwpIGlzIG5vdCBlbm91Z2g6IHJlZmlsbCBpcyBiYXRjaGVkXG4rXHQgKiAoYXFfcmluZ19yeF9maWxsKCkgd2FpdHMgZm9yIEFRX0NGR19SWF9SRUZJTExfVEhSRVMgZnJlZSBzbG90cyksXG4rXHQgKiBzbyBzbG90cyB0aGF0IHdlcmUgY2xlYW5lZCBidXQgbm90IHlldCByZXBvc3RlZCBhY2N1bXVsYXRlIGluIHRoZVxuK1x0ICogW3N3X3RhaWwsIHN3X2hlYWQpIGdhcCwgYW5kIHRoZXkga2VlcCB0aGVpciBwYWdlIGZvciByZXVzZS4gV2Fsa1xuK1x0ICogdGhlIHdob2xlIHJpbmcgYW5kIHJlbGVhc2Ugd2hhdGV2ZXIgaXMgbGVmdC5cbitcdCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2VsZi1cdTAwM2VzaXplOyBpKyspIHtcbitcdFx0c3RydWN0IGFxX3JpbmdfYnVmZl9zICpidWZmID0gXHUwMDI2c2VsZi1cdTAwM2VidWZmX3JpbmdbaV07XG4rXG4rXHRcdGlmICghYnVmZi1cdTAwM2VyeGRhdGEucGFnZSlcbitcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0YXFfZnJlZV9yeHBhZ2UoXHUwMDI2YnVmZi1cdTAwM2VyeGRhdGEsIGFxX25pY19nZXRfZGV2KHNlbGYtXHUwMDNlYXFfbmljKSk7XG4rXHRcdHBhZ2VfcG9vbF9wdXRfZnVsbF9wYWdlKHNlbGYtXHUwMDNlcGdfcG9vbCwgYnVmZi1cdTAwM2VyeGRhdGEucGFnZSxcbitcdFx0XHRcdFx0ZmFsc2UpO1xuK1x0XHRidWZmLVx1MDAzZXJ4ZGF0YS5wYWdlID0gTlVMTDtcbiBcdH1cbitcbitcdHNlbGYtXHUwMDNlc3dfaGVhZCA9IHNlbGYtXHUwMDNlc3dfdGFpbDtcbiB9XG4gXG4gdm9pZCBhcV9yaW5nX2ZyZWUoc3RydWN0IGFxX3JpbmdfcyAqc2VsZilcbkBAIC05NDAsNiArOTQzLDExIEBAIHZvaWQgYXFfcmluZ19mcmVlKHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYpXG4gXHRrZnJlZShzZWxmLVx1MDAzZWJ1ZmZfcmluZyk7XG4gXHRzZWxmLVx1MDAzZWJ1ZmZfcmluZyA9IE5VTEw7XG4gXG4rXHRpZiAoc2VsZi1cdTAwM2VwZ19wb29sKSB7XG4rXHRcdHBhZ2VfcG9vbF9kZXN0cm95KHNlbGYtXHUwMDNlcGdfcG9vbCk7XG4rXHRcdHNlbGYtXHUwMDNlcGdfcG9vbCA9IE5VTEw7XG4rXHR9XG4rXG4gXHRpZiAoc2VsZi1cdTAwM2VkeF9yaW5nKSB7XG4gXHRcdGRtYV9mcmVlX2NvaGVyZW50KGFxX25pY19nZXRfZGV2KHNlbGYtXHUwMDNlYXFfbmljKSxcbiBcdFx0XHRcdCAgc2VsZi1cdTAwM2VzaXplICogc2VsZi1cdTAwM2VkeF9zaXplLCBzZWxmLVx1MDAzZWR4X3JpbmcsXG5AQCAtOTc4LDkgKzk4Niw2IEBAIHVuc2lnbmVkIGludCBhcV9yaW5nX2ZpbGxfc3RhdHNfZGF0YShzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLCB1NjQgKmRhdGEpXG4gXHRcdFx0ZGF0YVsrK2NvdW50XSA9IHNlbGYtXHUwMDNlc3RhdHMucnguYWxsb2NfZmFpbHM7XG4gXHRcdFx0ZGF0YVsrK2NvdW50XSA9IHNlbGYtXHUwMDNlc3RhdHMucnguc2tiX2FsbG9jX2ZhaWxzO1xuIFx0XHRcdGRhdGFbKytjb3VudF0gPSBzZWxmLVx1MDAzZXN0YXRzLnJ4LnBvbGxzO1xuLVx0XHRcdGRhdGFbKytjb3VudF0gPSBzZWxmLVx1MDAzZXN0YXRzLnJ4LnBnX2ZsaXBzO1xuLVx0XHRcdGRhdGFbKytjb3VudF0gPSBzZWxmLVx1MDAzZXN0YXRzLnJ4LnBnX3JldXNlcztcbi1cdFx0XHRkYXRhWysrY291bnRdID0gc2VsZi1cdTAwM2VzdGF0cy5yeC5wZ19sb3N0cztcbiBcdFx0XHRkYXRhWysrY291bnRdID0gc2VsZi1cdTAwM2VzdGF0cy5yeC54ZHBfYWJvcnRlZDtcbiBcdFx0XHRkYXRhWysrY291bnRdID0gc2VsZi1cdTAwM2VzdGF0cy5yeC54ZHBfZHJvcDtcbiBcdFx0XHRkYXRhWysrY291bnRdID0gc2VsZi1cdTAwM2VzdGF0cy5yeC54ZHBfcGFzcztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmhcbmluZGV4IGE3MGI4ODBhZGE2N2U5Li41OGJjYWRiM2UzY2NkMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5oXG5AQCAtMTcsMTIgKzE3LDEyIEBAXG4gI2RlZmluZSBBUV9YRFBfVEFJTFJPT01cdFx0U0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKVxuIFxuIHN0cnVjdCBwYWdlO1xuK3N0cnVjdCBwYWdlX3Bvb2w7XG4gc3RydWN0IGFxX25pY19jZmdfcztcbiBcbiBzdHJ1Y3QgYXFfcnhwYWdlIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0ZG1hX2FkZHJfdCBkYWRkcjtcbi1cdHVuc2lnbmVkIGludCBvcmRlcjtcbiBcdHVuc2lnbmVkIGludCBwZ19vZmY7XG4gfTtcbiBcbkBAIC0xMDUsOSArMTA1LDYgQEAgc3RydWN0IGFxX3Jpbmdfc3RhdHNfcnhfcyB7XG4gXHR1NjQgYWxsb2NfZmFpbHM7XG4gXHR1NjQgc2tiX2FsbG9jX2ZhaWxzO1xuIFx0dTY0IHBvbGxzO1xuLVx0dTY0IHBnX2xvc3RzO1xuLVx0dTY0IHBnX2ZsaXBzO1xuLVx0dTY0IHBnX3JldXNlcztcbiBcdHU2NCB4ZHBfYWJvcnRlZDtcbiBcdHU2NCB4ZHBfZHJvcDtcbiBcdHU2NCB4ZHBfcGFzcztcbkBAIC0xNTEsNiArMTQ4LDcgQEAgc3RydWN0IGFxX3JpbmdfcyB7XG4gXHR1MTYgdGFpbF9zaXplO1xuIFx0dW5pb24gYXFfcmluZ19zdGF0c19zIHN0YXRzO1xuIFx0ZG1hX2FkZHJfdCBkeF9yaW5nX3BhO1xuK1x0c3RydWN0IHBhZ2VfcG9vbCAqcGdfcG9vbDtcbiBcdHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2c7XG4gXHRlbnVtIGF0bF9yaW5nX3R5cGUgcmluZ190eXBlO1xuIFx0c3RydWN0IHhkcF9yeHFfaW5mbyB4ZHBfcnhxO1xuQEAgLTIwMiw2ICsyMDAsNyBAQCB2b2lkIGFxX3JpbmdfdXBkYXRlX3F1ZXVlX3N0YXRlKHN0cnVjdCBhcV9yaW5nX3MgKnJpbmcpO1xuIHZvaWQgYXFfcmluZ19xdWV1ZV93YWtlKHN0cnVjdCBhcV9yaW5nX3MgKnJpbmcpO1xuIHZvaWQgYXFfcmluZ19xdWV1ZV9zdG9wKHN0cnVjdCBhcV9yaW5nX3MgKnJpbmcpO1xuIGJvb2wgYXFfcmluZ190eF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmKTtcbit2b2lkIGFxX3JpbmdfdHhfZGVpbml0KHN0cnVjdCBhcV9yaW5nX3MgKnNlbGYpO1xuIGludCBhcV94ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtX2ZyYW1lcyxcbiBcdFx0c3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcywgdTMyIGZsYWdzKTtcbiBpbnQgYXFfcmluZ19yeF9jbGVhbihzdHJ1Y3QgYXFfcmluZ19zICpzZWxmLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3ZlYy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfdmVjLmNcbmluZGV4IDJmOTAzM2NlZWQ4Y2UzLi44ZTE1NDA1ZDQ5NDE5ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3ZlYy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV92ZWMuY1xuQEAgLTE0NiwyNSArMTQ2LDMyIEBAIGludCBhcV92ZWNfcmluZ19hbGxvYyhzdHJ1Y3QgYXFfdmVjX3MgKnNlbGYsIHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLFxuIFx0XHRhcV9uaWNfc2V0X3R4X3JpbmcoYXFfbmljLCBpZHhfcmluZywgcmluZyk7XG4gXG4gXHRcdHJpbmcgPSBcdTAwMjZzZWxmLVx1MDAzZXJpbmdbaV1bQVFfVkVDX1JYX0lEXTtcbitcdFx0LyogUmVnaXN0ZXJpbmcgdGhlIE1FTV9UWVBFX1BBR0VfUE9PTCBtZW1vcnkgbW9kZWwgYmVsb3cgbmVlZHNcbitcdFx0ICogdGhlIHBhZ2UgcG9vbCBjcmVhdGVkIGJ5IGFxX3JpbmdfcnhfYWxsb2MoKSwgc28gdGhlIHJpbmcgaXNcbitcdFx0ICogYWxsb2NhdGVkIGZpcnN0LiBJZiBhIHJlZ2lzdHJhdGlvbiBmYWlscywgdGhlIHJpbmcgaGFzIHRvIGJlXG4rXHRcdCAqIGZyZWVkIGV4cGxpY2l0bHk6IHJ4X3JpbmdzIGlzIG5vdCBpbmNyZW1lbnRlZCB5ZXQsIHNvIHRoZVxuK1x0XHQgKiB1bndpbmQgdGhyb3VnaCBhcV92ZWNfcmluZ19mcmVlKCkgd291bGQgbm90IGNvdmVyIGl0LlxuK1x0XHQgKi9cbitcdFx0ZXJyID0gYXFfcmluZ19yeF9hbGxvYyhyaW5nLCBhcV9uaWMsIGlkeF9yaW5nLCBhcV9uaWNfY2ZnKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGVycl9leGl0O1xuK1xuIFx0XHRpZiAoeGRwX3J4cV9pbmZvX3JlZyhcdTAwMjZyaW5nLVx1MDAzZXhkcF9yeHEsXG4gXHRcdFx0XHQgICAgIGFxX25pYy1cdTAwM2VuZGV2LCBpZHgsXG4gXHRcdFx0XHQgICAgIHNlbGYtXHUwMDNlbmFwaS5uYXBpX2lkKSBcdTAwM2MgMCkge1xuK1x0XHRcdGFxX3JpbmdfZnJlZShyaW5nKTtcbiBcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZXJyX2V4aXQ7XG4gXHRcdH1cbiBcdFx0aWYgKHhkcF9yeHFfaW5mb19yZWdfbWVtX21vZGVsKFx1MDAyNnJpbmctXHUwMDNleGRwX3J4cSxcbi1cdFx0XHRcdFx0ICAgICAgIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBOVUxMKSBcdTAwM2MgMCkge1xuK1x0XHRcdFx0XHQgICAgICAgTUVNX1RZUEVfUEFHRV9QT09MLFxuK1x0XHRcdFx0XHQgICAgICAgcmluZy1cdTAwM2VwZ19wb29sKSBcdTAwM2MgMCkge1xuIFx0XHRcdHhkcF9yeHFfaW5mb191bnJlZyhcdTAwMjZyaW5nLVx1MDAzZXhkcF9yeHEpO1xuK1x0XHRcdGFxX3JpbmdfZnJlZShyaW5nKTtcbiBcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZXJyX2V4aXQ7XG4gXHRcdH1cbiBcbi1cdFx0ZXJyID0gYXFfcmluZ19yeF9hbGxvYyhyaW5nLCBhcV9uaWMsIGlkeF9yaW5nLCBhcV9uaWNfY2ZnKTtcbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdHhkcF9yeHFfaW5mb191bnJlZyhcdTAwMjZyaW5nLVx1MDAzZXhkcF9yeHEpO1xuLVx0XHRcdGdvdG8gZXJyX2V4aXQ7XG4tXHRcdH1cbi1cbiBcdFx0KytzZWxmLVx1MDAzZXJ4X3JpbmdzO1xuIFx0fVxuIFxuQEAgLTI3NSw3ICsyODIsNyBAQCB2b2lkIGFxX3ZlY19kZWluaXQoc3RydWN0IGFxX3ZlY19zICpzZWxmKVxuIFxuIFx0Zm9yIChpID0gMFU7IHNlbGYtXHUwMDNldHhfcmluZ3MgXHUwMDNlIGk7ICsraSkge1xuIFx0XHRyaW5nID0gc2VsZi1cdTAwM2VyaW5nW2ldO1xuLVx0XHRhcV9yaW5nX3R4X2NsZWFuKFx1MDAyNnJpbmdbQVFfVkVDX1RYX0lEXSk7XG4rXHRcdGFxX3JpbmdfdHhfZGVpbml0KFx1MDAyNnJpbmdbQVFfVkVDX1RYX0lEXSk7XG4gXHRcdGFxX3JpbmdfcnhfZGVpbml0KFx1MDAyNnJpbmdbQVFfVkVDX1JYX0lEXSk7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzo0ODoyNy4yNTQ1MDE2ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDY4MjU1MjE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IEFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGFuIGFRdWFudGlhIERyaXZlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UndmUgZ290IGEgcGF0Y2ggdG91Y2hpbmcgdGhlIGFRdWFudGlhIEFRdGlvbiBFdGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYC4gVGhlIGtleSBjaGFuZ2VzIGludm9sdmUgYSBuZXcgbWVtb3J5IGFsbG9jYXRpb24gbW9kZWwgdXNpbmcgYFBBR0VfUE9PTGAgZm9yIFJYIHJpbmdzLCBtb2RpZmljYXRpb25zIHRvIGhhbmRsZSBYRFAgZnJhbWVzLCBhbmQgZGUtaW5pdGlhbGl6YXRpb24gb2YgVFggYnVmZmVycy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGlzIGV2ZW4gcmVhY2hhYmxlIGZvciBmdXp6aW5nLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBpcyB0aGlzIGRyaXZlciBhY2Nlc3NpYmxlIHdpdGhpbiBhIHR5cGljYWwgUUVNVSBzZXR1cD8gYVF1YW50aWEgaXMgYSAxMEdiRSBQQ0llIGNhcmQsIHJpZ2h0PyBMZXQncyBjaGVjayB0aGUgc291cmNlIG9yIGEgcXVpY2sgc2VhcmNoLi4uIE5vcGUsIGFRdWFudGlhIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0J3MgYSBodWdlIHJlZCBmbGFnLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBpZiBpdCdzIGNvbnNpZGVyZWQgYSBwaHlzaWNhbCBjYXJkLiBMb29raW5nIGF0IHRoZSBpbnN0cnVjdGlvbnMsIHRoZXkgc3BlY2lmaWNhbGx5IHNheSB0byBtYXJrIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIGFzIG5vdCB3b3J0aCBmdXp6aW5nIGlmIHRoZXkgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZS5cblxuRG9lcyBzeXprYWxsZXIgb2ZmZXIgYSB3YXkgYXJvdW5kIHRoaXM/IENvdWxkIGl0IGZ1enogUENJIGRldmljZXMgc29tZWhvdz8gV2FpdCwgeWVzLCBpdCBoYXMgUENJIGZ1enppbmcuIEJ1dCBjYW4gc3l6a2FsbGVyICplbXVsYXRlKiB0aGUgZGV2aWNlIERNQSByaW5nIGJ1ZmZlcnM/ICBObywgaXQgdXNlcyBhIHZpcnR1YWwgUENJIGhvc3QgYnJpZGdlLCBvciBqdXN0IGZ1enplcyB0aGUgY29uZmlnIHNwYWNlLiBJdCBzcGVjaWZpY2FsbHkgc2F5cyB0aGF0IHRoZXNlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSB3aGVuIHlvdSByZXF1aXJlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS4gQWxzbywgc3l6a2FsbGVyIHRlc3RzIHBhdGNoZXMgc3VibWl0dGVkIHRvIG1haWxpbmcgbGlzdHMsIHNvIHRoaXMgcGF0Y2ggaXMgYmVpbmcgdGVzdGVkLCBidXQgZG9lc24ndCBtZWFuIGl0IGlzIGZ1enplZC5cblxuT2theSwgbGV0J3MgdmVyaWZ5IGlmIGFRdWFudGlhIGlzIGEgcGh5c2ljYWwgUENJZSBjYXJkLiBDaGVja2luZyB0aGUgS2NvbmZpZyBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvS2NvbmZpZ2AgcmV2ZWFsczogXCJUaGlzIGVuYWJsZXMgdGhlIHN1cHBvcnQgZm9yIHRoZSBhUXVhbnRpYSBBUXRpb24odG0pIEV0aGVybmV0IGNhcmQuXCIgIEl0IGRlcGVuZHMgb24gUENJLiBDb25maXJtZWQ6IGl0J3MgYSBwaHlzaWNhbCBFdGhlcm5ldCBjYXJkLiBUaGVyZWZvcmUgaXQgZmFsbHMgdW5kZXIgdGhlIFwibm90IHdvcnRoIGZ1enppbmdcIiBjYXRlZ29yeS5cblxuSXMgdGhlcmUgYW55IGNoYW5jZSBvZiBmdXp6aW5nIHZpYSBhbm90aGVyIHJvdXRlLCBsaWtlIGEgdmlydHVhbCBkcml2ZXI/IE5vcGUsIGl0J3MgYSBzdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXIgZm9yIGEgcGh5c2ljYWwgUENJZSBjYXJkLiBEb3VibGUtY2hlY2tpbmcgYWdhaW4uLi4gbm8gUUVNVSBlbXVsYXRpb24uXG5cblJldmlzaXRpbmcgdGhlIHByb21wdCdzIGNyaXRlcmlhOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIiBhUXVhbnRpYSBmaXRzIHRoYXQgZGVzY3JpcHRpb24gcGVyZmVjdGx5LiBJdCBpcyBhIHBoeXNpY2FsIFBDSWUgRXRoZXJuZXQgY2FyZC4gSXQgaXNuJ3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCdzIGVsaW1pbmF0ZSB0aGUgcG9zc2liaWxpdHkgb2YgYSBVU0IgY29ubmVjdGlvbi4gVGhlIEtjb25maWcgc2F5cyBpdCBgZGVwZW5kcyBvbiBQQ0lgLiBPa2F5LCB0aGF0J3MgaXQuIEl0J3Mgc3RyaWN0bHkgd2l0aGluIHRoZSBhUXVhbnRpYSBkcml2ZXIuXG5cblNvLCBJJ20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IFdvcnRoRnV6emluZz1mYWxzZS4gVGhpcyBwYXRjaCBtb2RpZmllcyBhIGRyaXZlciBmb3IgYSBwaHlzaWNhbCBQQ0llIGNhcmQgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGVudmlyb25tZW50cywgc28gdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXG5cbkknbSByZWFkeSB0byBtb3ZlIG9uLiBMZXQncyBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY5OCwiT3V0cHV0VG9rZW5zIjo5MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzo0ODo0MS45MzcwNTYwNjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBhUXVhbnRpYSBBUXRpb24gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS8pLiBUaGlzIGlzIGEgZHJpdmVyIGZvciBhIHBoeXNpY2FsIFBDSWUgbmV0d29yayBjYXJkIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgYVF1YW50aWEgQVF0aW9uIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvKS4gVGhpcyBpcyBhIGRyaXZlciBmb3IgYSBwaHlzaWNhbCBQQ0llIG5ldHdvcmsgY2FyZCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowd222l[1] Phase: Running StartedAt: 2026-07-25 13:48:53 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd222l[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-25 13:48:53 +0000 UTC FinishedAt: 2026-07-25 13:49:02 +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,}