Name: series-workflowfthjk Phase: Failed StartedAt: 2026-08-11 09:06:51 +0000 UTC FinishedAt: 2026-08-11 09:24:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfthjk[0] Phase: Succeeded StartedAt: 2026-08-11 09:06:51 +0000 UTC FinishedAt: 2026-08-11 09:24:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfthjk[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 09:06:51 +0000 UTC FinishedAt: 2026-08-11 09:24:20 +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+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgY2Fubm90IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQgaW4gdGhpcyBjb250ZXh0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQyZWJmNDNkZmE0MDAyYjQ3ZmEzZjdlYWNjMmQ1YzJkNDI4NzhjZDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwOToyMzo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbmluZGV4IGI4MWM0N2VhMDIzYmUuLjIyZjY0YzFlZGU5MWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuQEAgLTMzMSw4ICYjNDM7MzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpXG4mIzQzO1x0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHtcbiYjNDM7XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7cGNpZnVuYyAleCBtYXAgcGNpZnVuYyAleCBub3QgZXF1YWwsIGx2bD0ldSBzY2hxPSV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG5pbmRleCBjYTczYTk0ZGI3OTQzLi5kZmFiZGExMjAxYmRkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG5AQCAtNjE0LDYgJiM0Mzs2MTQsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XG4gXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7b3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsXG4mIzQzO1x0XHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXG4mIzQzO1x0XHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuJiM0MztcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuJiM0MztcdGludCBpLCBlcnI7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuJiM0MztcdGlmICghcmVxKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuJiM0MztcdHJlcS1cdTAwM2VudW1fcmVncyA9IGNudDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ1tpXSA9IHJlZ19hZGRyW2ldO1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4mIzQzO1x0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbiYjNDM7XHRpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzbXEgPSBwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcbiYjNDM7XG4mIzQzO1x0XHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuJiM0MztcdFx0Y250JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuJiM0MztcdFx0Y250JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY250IFx1MDAzYyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBmYWlsO1xuJiM0MztcdFx0Y250ID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjbnQpIHtcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuJiM0MztcdFx0XHRcdFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGZhaWw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7ZmFpbDpcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuJiM0MztcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuJiM0MztcdGludCBlcnIsIHNtcSwgbiA9IDA7XG4mIzQzO1x0dTY0IHJlZ19hZGRyWzJdO1xuJiM0MztcdHU2NCByZWdfdmFsWzJdO1xuJiM0MztcdHU2NCByYXRlO1xuJiM0MztcbiYjNDM7XHRpZiAoIW1heHJhdGUgXHUwMDI2XHUwMDI2ICFtaW5yYXRlKSB7XG4mIzQzO1x0XHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4mIzQzO1x0XHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFswXSA9IDA7XG4mIzQzO1x0XHRyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFsxXSA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuJiM0MztcdGlmICghcmVxKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuJiM0MztcbiYjNDM7XHQvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvXG4mIzQzO1x0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxuJiM0MztcdCAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnNcbiYjNDM7XHQgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGFcbiYjNDM7XHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcbiYjNDM7XHQgKiBoYXJkd2FyZSBjYXAuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxuJiM0MztcdCAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uXG4mIzQzO1x0ICogZXZlcnkgdXBkYXRlIHNvIG9taXR0ZWQgcmF0ZXMgYXJlIGFwcGxpZWQgZXhwbGljaXRseSByYXRoZXIgdGhhblxuJiM0MztcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuJiM0MztcdGlmIChtYXhyYXRlKSB7XG4mIzQzO1x0XHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0biYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdC8qIENJUiYjNDM7UElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xuJiM0MztcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbiYjNDM7XHRpZiAobWlucmF0ZSkge1xuJiM0MztcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4mIzQzO1x0fVxuJiM0MztcdG4mIzQzOyYjNDM7O1xuJiM0MztcdHJlcS1cdTAwM2VudW1fcmVncyA9IG47XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYylcbiB7XG4gXHR1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdO1xuQEAgLTY1MCw3ICYjNDM7Nzg2LDIwIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXG4gXHRcdFx0XHRcdFx0KHU2NClody1cdTAwM2VzbXFfbGlua190eXBlKTtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzJiM0MzsmIzQzOztcbiBcdFx0LyogTURRIGNvbmZpZyAqL1xuLVx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQpIHtcbiYjNDM7XHRcdFx0LyogVE9ETzogUHJvZ3JhbSBOSVhfQUZfVEw0WF9UT1BPTE9HWSBvbiBUTDRbMF0uIE1RUFJJT1xuJiM0MztcdFx0XHQgKiBwYXJlbnRzIGV2ZXJ5IE1EUSB1bmRlciB0aGUgc2FtZSBUTDQgd2l0aCBzY2hlZHVsZVxuJiM0MztcdFx0XHQgKiBwcmlvcml0eSAwLCBzbyBzaWJsaW5nIGFyYml0cmF0aW9uIGRlcGVuZHMgb24gdGhlIFRMNFxuJiM0MztcdFx0XHQgKiB0b3BvbG9neSByZWdpc3Rlci4gT25seSB0aGUgSFRCIHBhdGggcHJvZ3JhbXMgdGhpc1xuJiM0MztcdFx0XHQgKiB0b2RheSBhbmQgdGhlIEFGIGRvZXMgbm90IHJlc2V0IGl0IG9uIHNjaHEgcmVhbGxvYyxcbiYjNDM7XHRcdFx0ICogc28gYSBUTDQgcmV1c2VkIGFmdGVyIEhUQiB0ZWFyZG93biBjYW4gcmV0YWluIHN0YWxlXG4mIzQzO1x0XHRcdCAqIFJSX1BSSU8vUFJJT19BTkNIT1IgYW5kIHN0YXJ2ZSBzb21lIFRYIHF1ZXVlcy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0cmVxLVx1MDAzZXJlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTtcbiBcdFx0cmVxLVx1MDAzZXJlZ3ZhbFsxXSA9IHBhcmVudCBcdTAwM2NcdTAwM2MgMTY7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncyYjNDM7JiM0Mzs7XG5AQCAtNzc4LDYgJiM0Mzs5MjcsOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRcdHJlcS1cdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250O1xuIFx0fVxuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19yYXRlX2xpbWl0KVxuJiM0MztcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbiYjNDM7XG4gXHRyYyA9IG90eDJfc3luY19tYm94X21zZyhcdTAwMjZwZnZmLVx1MDAzZW1ib3gpO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuaW5kZXggZWVjZWU2MTJiN2IyYy4uY2YxY2QzOTFiZjUyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuQEAgLTUxNSw2ICYjNDM7NTE1LDEyIEBAIHN0cnVjdCBvdHgyX25pYyB7XG4gXHR1NjRcdFx0XHRmbGFncztcbiBcdHU2NFx0XHRcdCpjcV9vcF9hZGRyO1xuIFxuJiM0MztcdHUzMlx0XHRcdG1xcHJpb19mbGFncztcbiYjNDM7XHR1NjRcdFx0XHQqbXFwcmlvX21pbl9yYXRlO1xuJiM0MztcdHU2NFx0XHRcdCptcXByaW9fbWF4X3JhdGU7XG4mIzQzO1x0Ym9vbFx0XHRcdG1xcHJpb19yYXRlX2xpbWl0O1xuJiM0MztcdGJvb2xcdFx0XHRtcXByaW9fc2tpcF90ZWFyZG93bjtcbiYjNDM7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dcdFx0KnhkcF9wcm9nO1xuIFx0c3RydWN0IG90eDJfcXNldFx0cXNldDtcbiBcdHN0cnVjdCBvdHgyX2h3XHRcdGh3O1xuQEAgLTEyNDYsNiAmIzQzOzEyNTIsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcbiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLFxuJiM0MztcdFx0XHRcdCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpO1xuJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4mIzQzO2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4mIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIHZvaWQgb3R4Ml9xdWV1ZV92Zl93b3JrKHN0cnVjdCBtYm94ICptdywgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hfd3EsXG4gXHRcdFx0aW50IGZpcnN0LCBpbnQgbWRldnMsIHU2NCBpbnRyKTtcbiBpbnQgb3R4Ml9kZWxfbWNhbV9mbG93X2VudHJ5KHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MTYgZW50cnksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcbmluZGV4IGYxMTBkZmE0MjM2MDUuLjgzMmYwNWNmMTI5ZWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5AQCAtNDEzLDYgJiM0Mzs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxuIFx0dTggb2xkX3BmY19lbjtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQgXHUwMDI2XHUwMDI2IHBmYy1cdTAwM2VwZmNfZW4pIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIoZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtQRkM6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG9sZF9wZmNfZW4gPSBwZnZmLVx1MDAzZXBmY19lbjtcbiBcdHBmdmYtXHUwMDNlcGZjX2VuID0gcGZjLVx1MDAzZXBmY19lbjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbmluZGV4IGEwMzQwZjM0MjJiZjkuLmMxMzE3ZmJjZDg0ODQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuQEAgLTI4Nyw2ICYjNDM7Mjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIChjaGFubmVsLVx1MDAzZXR4X2NvdW50ICE9IHBmdmYtXHUwMDNlaHcudHhfcXVldWVzIHx8XG4mIzQzO1x0ICAgICBjaGFubmVsLVx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXHUwMDNlaHcucnhfcXVldWVzKSkge1xuJiM0MztcdFx0bmV0ZGV2X2luZm8oZGV2LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7Tm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGlmX3VwKVxuIFx0XHRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RvcChkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5pbmRleCBjOTk1ZjI5MDA4NTkwLi43MGM5NWU5YzViZjg2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuQEAgLTE5ODAsNiAmIzQzOzE5ODAsMTAgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfZnJlZV9tZW07XG4gXG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX2h3O1xuJiM0MztcbiBcdC8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqL1xuIFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcdTAwM2MgcGYtXHUwMDNlaHcuY2ludF9jbnQ7IHFpZHgmIzQzOyYjNDM7KSB7XG4gXHRcdGNxX3BvbGwgPSBcdTAwMjZxc2V0LVx1MDAzZW5hcGlbcWlkeF07XG5AQCAtMjE0MCw2ICYjNDM7MjE0NCw3IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGZyZWVfaXJxKHZlYywgcGYpO1xuIGVycl9kaXNhYmxlX25hcGk6XG4gXHRvdHgyX2Rpc2FibGVfbmFwaShwZik7XG4mIzQzO2Vycl9mcmVlX2h3OlxuIFx0b3R4Ml9mcmVlX2h3X3Jlc291cmNlcyhwZik7XG4gZXJyX2ZyZWVfbWVtOlxuIFx0b3R4Ml9mcmVlX3F1ZXVlX21lbShxc2V0KTtcbkBAIC0yODQ2LDYgJiM0MzsyODUxLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXHUwMDNlbmV0ZGV2KTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XG4gXG4mIzQzO1x0aWYgKHByb2cgXHUwMDI2XHUwMDI2IHBmLVx1MDAzZW1xcHJpb19yYXRlX2xpbWl0KSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7WERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZW10dSBcdTAwM2UgTUFYX1hEUF9NVFUpIHtcbiBcdFx0bmV0ZGV2X3dhcm4oZGV2LCBcJiMzNDtKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbmluZGV4IDAzOWZkNDdlYmY1MjIuLjViZDk1ZjA2MTY2MjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5AQCAtMTYsNiAmIzQzOzE2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNfYWN0L3RjX21pcnJlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y192bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2NuMTBrLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtvdHgyX2NvbW1vbi5oXCYjMzQ7XG5AQCAtMzEsNiAmIzQzOzMyLDggQEBcbiBcbiAjZGVmaW5lIE1DQVNUX0lOVkFMSURfR1JQXHRcdCgtMVUpXG4gI2RlZmluZSBSQVRFX01BTlRJU1NBX0JJVFNcdFx0OFxuJiM0MzsvKiBNYXggZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgxMzA4MTYgTWJwcykuICovXG4mIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFNcdCgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpXG4gXG4gc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxuIFx0XHRcdFx0ICAgICAgdTMyICpidXJzdF9leHAsIHUzMiAqYnVyc3RfbWFudGlzc2EpXG5AQCAtNjEsNiAmIzQzOzY0LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxuIFx0XHRcdCpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMIFx1MDAzY1x1MDAzYyAoKmJ1cnN0X2V4cCAtIDcpKTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxuJiM0MztcdFx0ICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LlxuJiM0MztcdFx0ICovXG4gXHRcdCpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7XG4gXHRcdCpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTtcbiBcdH1cbkBAIC0xNjAwLDE0ICYjNDM7MTYwNiw0NjIgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgbmljLCBuaWMsIGluZ3Jlc3MpO1xuIH1cbiBcbiYjNDM7LyogRnJlZSB0aGUgcGVyLXF1ZXVlIG1pbi9tYXggcmF0ZSBjYWNoZXMuICovXG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgcGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUpO1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKTtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSA9IE5VTEw7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUgPSBOVUxMO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvX2ZsYWdzID0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4mIzQzO1xuJiM0MztcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZSkge1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbHZsLCBpZHg7XG4mIzQzO1xuJiM0MztcdGZvciAobHZsID0gMDsgbHZsIFx1MDAzYyBOSVhfVFhTQ0hfTFZMX0NOVDsgbHZsJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yIChpZHggPSAwOyBpZHggXHUwMDNjIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtsdmxdOyBpZHgmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmIChwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W2x2bF1baWR4XSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsXG4mIzQzOyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uXG4mIzQzOyAqIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93biAodGMgcWRpc2MgZGVsKSBhbmQgZXJyb3IgY2xlYW51cCwgbm90IG9uXG4mIzQzOyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLlxuJiM0MzsgKi9cbiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChwZnZmKSlcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbiYjNDM7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW9fcmF0ZV9saW1pdCA9IGZhbHNlO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvX3NraXBfdGVhcmRvd24gPSBmYWxzZTtcbiYjNDM7XHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIDApO1xuJiM0MztcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0aW50IHR4cSwgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yICh0eHEgPSAwOyB0eHEgXHUwMDNjIHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7IHR4cSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuJiM0MztcdFx0XHRtaW5fcmF0ZSA9IHBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlW3R4cV07XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuJiM0MztcdFx0XHRtYXhfcmF0ZSA9IHBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlW3R4cV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgIW1heF9yYXRlKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIG1heF9yYXRlKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgdHhxLCBlcnIpO1xuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpb1xuJiM0MzsgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSlcbiYjNDM7ICogdGFrZSB0aGlzIHBhdGggdmlhIG5kb19zdG9wKCkvbmRvX29wZW4oKSBzbyBWRi1zcGVjaWZpYyBvcGVuIGxvZ2ljIChlLmcuXG4mIzQzOyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS4gIFRoZSBmdWxsIHN0b3Avb3BlbiBjeWNsZSBjbGVhcnNcbiYjNDM7ICogY2Fycmllciwgc3RvcHMgYWxsIFRYIHF1ZXVlcywgdGVhcnMgZG93biBJUlFzL05BUEkgYW5kIGRyb3BzIGluLWZsaWdodFxuJiM0MzsgKiB0cmFmZmljLiAgSWYgb3BlbiBmYWlscywgbmV0aWZfY2xvc2UoKSBjbGVhcnMgSUZGX1VQIGFuZCBsZWF2ZXMgdGhlXG4mIzQzOyAqIGludGVyZmFjZSBhZG1pbmlzdHJhdGl2ZWx5IGRvd24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRuZXRkZXZfaW5mbyhuZXRkZXYsXG4mIzQzO1x0XHQgICAgXCYjMzQ7bXFwcmlvOiByZXN0YXJ0aW5nIGludGVyZmFjZSB0byByZXByb2dyYW0gVFggc2NoZWR1bGVyOyBpbi1mbGlnaHQgdHJhZmZpYyB3aWxsIGJlIGRyb3BwZWRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvcHMtXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IGJlZm9yZSBuZG9fb3BlbigpIHNvIG90eDJfdHhzY2hfYWxsb2MoKSB3aWRlbnMgU01RIGFsbG9jYXRpb24uICovXG4mIzQzO1x0aWYgKHJhdGVfbGltaXQpXG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpb19yYXRlX2xpbWl0ID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0aW50IGRvd25fZXJyO1xuJiM0MztcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGVycik7XG4mIzQzO1x0XHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XG4mIzQzO1x0XHRpZiAoZG93bl9lcnIpXG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIGNsZWFyIHNoYXBlcnMgYWZ0ZXIgcmVzdGFydCBlcnJvcjogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgZG93bl9lcnIpO1xuJiM0MztcdFx0LyogQ2FsbGVyIGhvbGRzIG5ldGRldi9SVE5MIGxvY2s7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLiAqL1xuJiM0MztcdFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1NjQgb3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUodTY0IHJhdGUsIHUzMiBxY291bnQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXJhdGUgfHwgcWNvdW50IFx1MDAzYz0gMSlcbiYjNDM7XHRcdHJldHVybiByYXRlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZGl2X3U2NChyYXRlLCBxY291bnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTY0IHJhdGUsXG4mIzQzO1x0XHRcdFx0XHR1MzIgcWNvdW50LCBpbnQgdGMsIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXJhdGUgfHwgcWNvdW50IFx1MDAzYz0gMSB8fCByYXRlIFx1MDAzZT0gcWNvdW50KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0ICAgXCYjMzQ7bXFwcmlvOiAlcyByYXRlICVsbHUgZm9yIHRjICVkIHRvbyBzbWFsbCBmb3IgJXUgcXVldWVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgbmFtZSwgcmF0ZSwgdGMsIHFjb3VudCk7XG4mIzQzO1x0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4mIzQzO1x0aW50IHRjLCB0eHE7XG4mIzQzO1xuJiM0MztcdGlmIChxb3B0LVx1MDAzZW51bV90YyBcdTAwM2UgbnVtX3R4cSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O051bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgcW9wdC1cdTAwM2VudW1fdGMsIG51bV90eHEpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobnVtX3R4cSBcdTAwM2UgTUFYX1RYU0NIUV9QRVJfRlVOQykge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O051bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0eHEgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4mIzQzO1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAodHhxIFx1MDAzZT0gbnVtX3R4cSkge1xuJiM0MztcdFx0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgdHhxLCBudW1fdHhxKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpXG4mIzQzO3tcbiYjNDM7XHR1NjQgbWJwcztcbiYjNDM7XG4mIzQzO1x0aWYgKCFyYXRlX2J5dGVzX3BzKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIGRpdl91NjQoVTY0X01BWCwgOCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTtcbiYjNDM7XHRyZXR1cm4gbWJwcyBcdTAwM2M9IDIgfHwgaWxvZzIobWJwcyAvIDIpIFx1MDAzYz0gTUFYX1JBVEVfRVhQT05FTlQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRib29sIGhhZF9tcXByaW8gPSBwZnZmLVx1MDAzZW1xcHJpb19yYXRlX2xpbWl0O1xuJiM0MztcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuJiM0MztcdGludCBkb3duX2VyciwgZXJyO1xuJiM0MztcbiYjNDM7XHRxb3B0LVx1MDAzZWh3ID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogdGMgcWRpc2MgcmVwbGFjZSBncmFmdHMgdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlIG9sZFxuJiM0MztcdCAqIG9uZS4gVGhlIG5ldyBjb25maWd1cmF0aW9uIGhhcyBhbHJlYWR5IHJlcHJvZ3JhbW1lZCBoYXJkd2FyZSBhbmRcbiYjNDM7XHQgKiBzZXQgbXFwcmlvX3JhdGVfbGltaXQsIHNvIGlnbm9yZSB0ZWFyZG93biBmcm9tXG4mIzQzO1x0ICogdGhlIHJlcGxhY2VkIHFkaXNjLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duKSB7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duID0gZmFsc2U7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFNraXAgdGhlIG5ldGRldiByZXN0YXJ0IHdoZW4gbXFwcmlvIG9mZmxvYWQgd2FzIG5vdCBhY3RpdmUuICovXG4mIzQzO1x0aWYgKCFoYWRfbXFwcmlvKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlmX3VwKSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZG93bl9lcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRib29sIHJlcGxhY2luZyA9IHBmdmYtXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQ7XG4mIzQzO1x0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbiYjNDM7XHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXFvcHQtXHUwMDNlaHcpXG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpZl91cCkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O21xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChtcXByaW8tXHUwMDNlc2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O1Vuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4XFxuXCYjMzQ7LCBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9iaXQoUU9TX0NJUl9QSVJfU1VQUE9SVCwgXHUwMDI2cGZ2Zi1cdTAwM2Vody5jYXBfZmxhZykpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUiYjNDM7UElSIHN1cHBvcnRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGlzX290eDJfc2RwX3JlcChwZnZmLVx1MDAzZXBkZXYpKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG90eDJfcW9zX2h0Yl9hY3RpdmUocGZ2ZikpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZXBmY19lbikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZXhkcF9wcm9nKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobWluX3JhdGUgXHUwMDI2XHUwMDI2IG1heF9yYXRlIFx1MDAyNlx1MDAyNiBtaW5fcmF0ZSBcdTAwM2UgbWF4X3JhdGUpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSkge1xuJiM0MztcdFx0XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgbWluX3JhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgcWNvdW50LCB0YyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBcJiMzNDttaW5cJiMzNDspO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpIHtcbiYjNDM7XHRcdFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIG1heF9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgXCYjMzQ7bWF4XCYjMzQ7KTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1pbl9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0ICAgICAgIHFjb3VudCkpKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgZXhjZWVkcyBoYXJkd2FyZSBsaW1pdFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBtaW5fcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtYXhfcmF0ZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCAgICAgICBxY291bnQpKSkge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGV4Y2VlZHMgaGFyZHdhcmUgbGltaXRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgbWF4X3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihwZnZmLVx1MDAzZW5ldGRldiwgdHJ1ZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBxb3B0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiBvdHgyX21xcHJpb191cCgpIG1heSBoYXZlIHJlc3RvcmVkIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGR1cmluZ1xuJiM0MztcdCAqIHRoZSByZXN0YXJ0IGFib3ZlLiBDbGVhciBldmVyeSBNRFEgc2hhcGVyIGJlZm9yZSBhcHBseWluZyB0aGUgbmV3XG4mIzQzO1x0ICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGVcbiYjNDM7XHQgKiBsaW1pdHMgaW4gaGFyZHdhcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChwZnZmKSkge1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW9fZmxhZ3MgPSBtcXByaW8tXHUwMDNlZmxhZ3M7XG4mIzQzO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuJiM0MztcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuJiM0MztcbiYjNDM7XHRcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUVxuJiM0MztcdFx0ICogc2hhcGVyIHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZDsgc2VlXG4mIzQzO1x0XHQgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuJiM0MztcdFx0XHRtaW5fcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y10sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgcWNvdW50KTtcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuJiM0MztcdFx0XHRtYXhfcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y10sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgcWNvdW50KTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdG5ldGRldl9kYmcobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuJiM0MztcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4mIzQzO1xuJiM0MztcdFx0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcW9wdC1cdTAwM2VudW1fdGMpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBxb3B0LVx1MDAzZWNvdW50W2ldLCBxb3B0LVx1MDAzZW9mZnNldFtpXSk7XG4mIzQzO1xuJiM0MztcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4mIzQzO1xuJiM0MztcdGlmIChyZXBsYWNpbmcpXG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModm9pZCAqdHlwZV9kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XG4mIzQzO1xuJiM0MztcdGlmIChiYXNlLVx1MDAzZXR5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRjYXBzID0gYmFzZS1cdTAwM2VjYXBzO1xuJiM0MztcdGNhcHMtXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gaW50IG90eDJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4gXHRcdCAgdm9pZCAqdHlwZV9kYXRhKVxuIHtcbiBcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgVENfUVVFUllfQ0FQUzpcbiYjNDM7XHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfUURJU0NfSFRCOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpO1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxuJiM0MztcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbmluZGV4IDY5YzA5MTFlMjhlOTEuLmY3NjkzZjAyYTA3YzQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuQEAgLTExOCw2ICYjNDM7MTE4LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9jb25maWdfc2NoZWRfc2hhcGluZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4gXHQvKiBjb25maWd1cmUgUElSICovXG4gXHRtYXhyYXRlID0gKG5vZGUtXHUwMDNlcmF0ZSBcdTAwM2Ugbm9kZS1cdTAwM2VjZWlsKSA/IG5vZGUtXHUwMDNlcmF0ZSA6IG5vZGUtXHUwMDNlY2VpbDtcbiBcbiYjNDM7XHQvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW5cbiYjNDM7XHQgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLlxuJiM0MztcdCAqL1xuIFx0Y2ZnLVx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cbiBcdFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcbiBcdCgqbnVtX3JlZ3MpJiM0MzsmIzQzOztcbkBAIC0xNzI5LDExICYjNDM7MTczMiwyMyBAQCB2b2lkIG90eDJfcW9zX2NvbmZpZ190eHNjaHEoc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0b3R4Ml9xb3Nfcm9vdF9kZXN0cm95KHBmdmYpO1xuIH1cbiBcbiYjNDM7Ym9vbCBvdHgyX3Fvc19odGJfYWN0aXZlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBvdHgyX3N3X25vZGVfZmluZChwZnZmLCBPVFgyX1FPU19ST09UX0NMQVNTSUQpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBvdHgyX3NldHVwX3RjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKmh0YilcbiB7XG4gXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdGludCByZXM7XG4gXG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGh0Yi1cdTAwM2Vjb21tYW5kICE9IFRDX0hUQl9ERVNUUk9ZKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoaHRiLVx1MDAzZWV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtIVEIgb2ZmbG9hZCBjYW5ub3QgYmUgdXNlZCB3aXRoIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBhY3RpdmVcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRzd2l0Y2ggKGh0Yi1cdTAwM2Vjb21tYW5kKSB7XG4gXHRjYXNlIFRDX0hUQl9DUkVBVEU6XG4gXHRcdHJldHVybiBvdHgyX3Fvc19yb290X2FkZChwZnZmLCBodGItXHUwMDNlcGFyZW50X2NsYXNzaWQsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG5pbmRleCAyMjFiZDA0MzhmNjAzLi5jNzc3Y2M0MmVhYzljIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmhcbkBAIC0yMyw2ICYjNDM7MjMsNyBAQCBlbnVtIHFvc19zbXFfb3BlcmF0aW9ucyB7XG4gdTY0IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTY0IG1heHJhdGUsIHUzMiBidXJzdCk7XG4gXG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKTtcbiYjNDM7Ym9vbCBvdHgyX3Fvc19odGJfYWN0aXZlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4gaW50IG90eDJfcW9zX2dldF9xaWQoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcW9zX2ZyZWVfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpO1xuIGludCBvdHgyX3Fvc19lbmFibGVfc3Eoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkIGluIHRoaXMgY29udGV4dC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMmViZjQzZGZhNDAwMmI0N2ZhM2Y3ZWFjYzJkNWMyZDQyODc4Y2Q0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDk6MjM6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMKaW5kZXggYjgxYzQ3ZWEwMjNiZS4uMjJmNjRjMWVkZTkxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYwpAQCAtMzMxLDggJiM0MzszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsCiAJCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKLQlpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykKJiM0MzsJaWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHsKJiM0MzsJCWRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LSZndDtkZXYsCiYjNDM7CQkJCSAgICAmIzM0O3BjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxuJiMzNDssCiYjNDM7CQkJCSAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTsKIAkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMKaW5kZXggY2E3M2E5NGRiNzk0My4uZGZhYmRhMTIwMWJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMKQEAgLTYxNCw2ICYjNDM7NjE0LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB9CiBFWFBPUlRfU1lNQk9MKG90eDJfZ2V0X21hY19mcm9tX2FmKTsKIAomIzQzO3N0YXRpYyBpbnQKJiM0MztvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCwKJiM0MzsJCSAgICAgICB1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSwKJiM0MzsJCSAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKQomIzQzO3sKJiM0MzsJc3RydWN0IG1ib3ggKm1ib3ggPSAmYW1wO3BmdmYtJmd0O21ib3g7CiYjNDM7CXN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxOwomIzQzOwlpbnQgaSwgZXJyOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7CiYjNDM7CWlmICghcmVxKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7bHZsID0gTklYX1RYU0NIX0xWTF9NRFE7CiYjNDM7CXJlcS0mZ3Q7bnVtX3JlZ3MgPSBjbnQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXEtJmd0O3JlZ1tpXSA9IHJlZ19hZGRyW2ldOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbaV0gPSByZWdfdmFsW2ldOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107CiYjNDM7CXU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107CiYjNDM7CWludCBlcnIsIHNtcSwgaSwgY250ID0gMDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHBmdmYtJmd0O2h3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc21xID0gcGZ2Zi0mZ3Q7aHcudHhzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9TTVFdW2ldOwomIzQzOwomIzQzOwkJcmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFtjbnRdID0gMDsKJiM0MzsJCWNudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CQlyZWdfdmFsW2NudF0gPSAwOwomIzQzOwkJY250JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWlmIChjbnQgJmx0OyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsCiYjNDM7CQkJCQkgICAgIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBmYWlsOwomIzQzOwkJY250ID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY250KSB7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCwKJiM0MzsJCQkJCSAgICAgcmVnX2FkZHIsIHJlZ192YWwpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGZhaWw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7ZmFpbDoKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IG1ib3ggKm1ib3ggPSAmYW1wO3BmdmYtJmd0O21ib3g7CiYjNDM7CXN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxOwomIzQzOwlpbnQgZXJyLCBzbXEsIG4gPSAwOwomIzQzOwl1NjQgcmVnX2FkZHJbMl07CiYjNDM7CXU2NCByZWdfdmFsWzJdOwomIzQzOwl1NjQgcmF0ZTsKJiM0MzsKJiM0MzsJaWYgKCFtYXhyYXRlICZhbXA7JmFtcDsgIW1pbnJhdGUpIHsKJiM0MzsJCXNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTsKJiM0MzsJCXJlZ19hZGRyWzBdID0gTklYX0FGX01EUVhfUElSKHNtcSk7CiYjNDM7CQlyZWdfdmFsWzBdID0gMDsKJiM0MzsJCXJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CQlyZWdfdmFsWzFdID0gMDsKJiM0MzsJCXJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJfQomIzQzOwomIzQzOwlzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJcmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTsKJiM0MzsJaWYgKCFyZXEpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVxLSZndDtsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTsKJiM0MzsKJiM0MzsJLyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzbwomIzQzOwkgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYCiYjNDM7CSAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnMKJiM0MzsJICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhCiYjNDM7CSAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYQomIzQzOwkgKiBoYXJkd2FyZSBjYXAuCiYjNDM7CSAqCiYjNDM7CSAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksCiYjNDM7CSAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uCiYjNDM7CSAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4KJiM0MzsJICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS4KJiM0MzsJICovCiYjNDM7CXJlcS0mZ3Q7cmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7CiYjNDM7CWlmIChtYXhyYXRlKSB7CiYjNDM7CQlyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW25dID0gMDsKJiM0MzsJfQomIzQzOwluJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJLyogQ0lSJiM0MztQSVIgc3VwcG9ydCBpcyByZXF1aXJlZCBhbmQgY2hlY2tlZCBhdCBtcXByaW8gc2V0dXAuICovCiYjNDM7CXJlcS0mZ3Q7cmVnW25dID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CWlmIChtaW5yYXRlKSB7CiYjNDM7CQlyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWlucmF0ZSk7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW25dID0gMDsKJiM0MzsJfQomIzQzOwluJiM0MzsmIzQzOzsKJiM0MzsJcmVxLSZndDtudW1fcmVncyA9IG47CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKQogewogCXUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107CkBAIC02NTAsNyAmIzQzOzc4NiwyMCBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvcgogCQkJCQkJKHU2NClody0mZ3Q7c21xX2xpbmtfdHlwZSk7CiAJCXJlcS0mZ3Q7bnVtX3JlZ3MmIzQzOyYjNDM7OwogCQkvKiBNRFEgY29uZmlnICovCi0JCXBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX3JhdGVfbGltaXQpIHsKJiM0MzsJCQkvKiBUT0RPOiBQcm9ncmFtIE5JWF9BRl9UTDRYX1RPUE9MT0dZIG9uIFRMNFswXS4gTVFQUklPCiYjNDM7CQkJICogcGFyZW50cyBldmVyeSBNRFEgdW5kZXIgdGhlIHNhbWUgVEw0IHdpdGggc2NoZWR1bGUKJiM0MzsJCQkgKiBwcmlvcml0eSAwLCBzbyBzaWJsaW5nIGFyYml0cmF0aW9uIGRlcGVuZHMgb24gdGhlIFRMNAomIzQzOwkJCSAqIHRvcG9sb2d5IHJlZ2lzdGVyLiBPbmx5IHRoZSBIVEIgcGF0aCBwcm9ncmFtcyB0aGlzCiYjNDM7CQkJICogdG9kYXkgYW5kIHRoZSBBRiBkb2VzIG5vdCByZXNldCBpdCBvbiBzY2hxIHJlYWxsb2MsCiYjNDM7CQkJICogc28gYSBUTDQgcmV1c2VkIGFmdGVyIEhUQiB0ZWFyZG93biBjYW4gcmV0YWluIHN0YWxlCiYjNDM7CQkJICogUlJfUFJJTy9QUklPX0FOQ0hPUiBhbmQgc3RhcnZlIHNvbWUgVFggcXVldWVzLgomIzQzOwkJCSAqLwomIzQzOwkJCXBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107CiYjNDM7CQl9CiYjNDM7CiAJCXJlcS0mZ3Q7cmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpOwogCQlyZXEtJmd0O3JlZ3ZhbFsxXSA9IHBhcmVudCAmbHQ7Jmx0OyAxNjsKIAkJcmVxLSZndDtudW1fcmVncyYjNDM7JiM0Mzs7CkBAIC03NzgsNiAmIzQzOzkyNyw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKIAkJcmVxLSZndDtzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250OwogCX0KIAomIzQzOwlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX3JhdGVfbGltaXQpCiYjNDM7CQlyZXEtJmd0O3NjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi0mZ3Q7aHcubm9uX3Fvc19xdWV1ZXM7CiYjNDM7CiAJcmMgPSBvdHgyX3N5bmNfbWJveF9tc2coJmFtcDtwZnZmLSZndDttYm94KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgKaW5kZXggZWVjZWU2MTJiN2IyYy4uY2YxY2QzOTFiZjUyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgKQEAgLTUxNSw2ICYjNDM7NTE1LDEyIEBAIHN0cnVjdCBvdHgyX25pYyB7CiAJdTY0CQkJZmxhZ3M7CiAJdTY0CQkJKmNxX29wX2FkZHI7CiAKJiM0MzsJdTMyCQkJbXFwcmlvX2ZsYWdzOwomIzQzOwl1NjQJCQkqbXFwcmlvX21pbl9yYXRlOwomIzQzOwl1NjQJCQkqbXFwcmlvX21heF9yYXRlOwomIzQzOwlib29sCQkJbXFwcmlvX3JhdGVfbGltaXQ7CiYjNDM7CWJvb2wJCQltcXByaW9fc2tpcF90ZWFyZG93bjsKJiM0MzsKIAlzdHJ1Y3QgYnBmX3Byb2cJCSp4ZHBfcHJvZzsKIAlzdHJ1Y3Qgb3R4Ml9xc2V0CXFzZXQ7CiAJc3RydWN0IG90eDJfaHcJCWh3OwpAQCAtMTI0Niw2ICYjNDM7MTI1MiwxMSBAQCBkbWFfYWRkcl90IG90eDJfZG1hX21hcF9za2JfZnJhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiAJCQkJIHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTsKIHZvaWQgb3R4Ml9kbWFfdW5tYXBfc2tiX2ZyYWdzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNnX2xpc3QgKnNnKTsKIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7CiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLAomIzQzOwkJCQkgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7CiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTsKJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTsKIHZvaWQgb3R4Ml9xdWV1ZV92Zl93b3JrKHN0cnVjdCBtYm94ICptdywgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hfd3EsCiAJCQlpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpOwogaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMKaW5kZXggZjExMGRmYTQyMzYwNS4uODMyZjA1Y2YxMjllZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jCkBAIC00MTMsNiAmIzQzOzQxMywxMiBAQCBzdGF0aWMgaW50IG90eDJfZGNibmxfaWVlZV9zZXRwZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpCiAJdTggb2xkX3BmY19lbjsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChwZnZmLSZndDttcXByaW9fcmF0ZV9saW1pdCAmYW1wOyZhbXA7IHBmYy0mZ3Q7cGZjX2VuKSB7CiYjNDM7CQluZXRkZXZfZXJyKGRldiwKJiM0MzsJCQkgICAmIzM0O1BGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKIAlvbGRfcGZjX2VuID0gcGZ2Zi0mZ3Q7cGZjX2VuOwogCXBmdmYtJmd0O3BmY19lbiA9IHBmYy0mZ3Q7cGZjX2VuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMKaW5kZXggYTAzNDBmMzQyMmJmOS4uYzEzMTdmYmNkODQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYwpAQCAtMjg3LDYgJiM0MzsyODcsMTQgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpb19yYXRlX2xpbWl0ICZhbXA7JmFtcDsKJiM0MzsJICAgIChjaGFubmVsLSZndDt0eF9jb3VudCAhPSBwZnZmLSZndDtody50eF9xdWV1ZXMgfHwKJiM0MzsJICAgICBjaGFubmVsLSZndDtyeF9jb3VudCAhPSBwZnZmLSZndDtody5yeF9xdWV1ZXMpKSB7CiYjNDM7CQluZXRkZXZfaW5mbyhkZXYsCiYjNDM7CQkJICAgICYjMzQ7Tm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKIAlpZiAoaWZfdXApCiAJCWRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX3N0b3AoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMKaW5kZXggYzk5NWYyOTAwODU5MC4uNzBjOTVlOWM1YmY4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCkBAIC0xOTgwLDYgJiM0MzsxOTgwLDEwIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX21lbTsKIAomIzQzOwllcnIgPSBvdHgyX21xcHJpb191cChwZik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9mcmVlX2h3OwomIzQzOwogCS8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqLwogCWZvciAocWlkeCA9IDA7IHFpZHggJmx0OyBwZi0mZ3Q7aHcuY2ludF9jbnQ7IHFpZHgmIzQzOyYjNDM7KSB7CiAJCWNxX3BvbGwgPSAmYW1wO3FzZXQtJmd0O25hcGlbcWlkeF07CkBAIC0yMTQwLDYgJiM0MzsyMTQ0LDcgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWZyZWVfaXJxKHZlYywgcGYpOwogZXJyX2Rpc2FibGVfbmFwaToKIAlvdHgyX2Rpc2FibGVfbmFwaShwZik7CiYjNDM7ZXJyX2ZyZWVfaHc6CiAJb3R4Ml9mcmVlX2h3X3Jlc291cmNlcyhwZik7CiBlcnJfZnJlZV9tZW06CiAJb3R4Ml9mcmVlX3F1ZXVlX21lbShxc2V0KTsKQEAgLTI4NDYsNiAmIzQzOzI4NTEsMTIgQEAgc3RhdGljIGludCBvdHgyX3hkcF9zZXR1cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiAJYm9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtJmd0O25ldGRldik7CiAJc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZzsKIAomIzQzOwlpZiAocHJvZyAmYW1wOyZhbXA7IHBmLSZndDttcXByaW9fcmF0ZV9saW1pdCkgewomIzQzOwkJbmV0ZGV2X2VycihkZXYsCiYjNDM7CQkJICAgJiMzNDtYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJaWYgKHByb2cgJmFtcDsmYW1wOyBkZXYtJmd0O210dSAmZ3Q7IE1BWF9YRFBfTVRVKSB7CiAJCW5ldGRldl93YXJuKGRldiwgJiMzNDtKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMKaW5kZXggMDM5ZmQ0N2ViZjUyMi4uNWJkOTVmMDYxNjYyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jCkBAIC0xNiw2ICYjNDM7MTYsNyBAQAogI2luY2x1ZGUgJmx0O25ldC90Y19hY3QvdGNfbWlycmVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjX2FjdC90Y192bGFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwdjYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3BrdF9zY2hlZC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2NuMTBrLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtvdHgyX2NvbW1vbi5oJiMzNDsKQEAgLTMxLDYgJiM0MzszMiw4IEBACiAKICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlAJCSgtMVUpCiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUUwkJOAomIzQzOy8qIE1heCBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDEzMDgxNiBNYnBzKS4gKi8KJiM0MzsjZGVmaW5lIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTCSgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpCiAKIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCwKIAkJCQkgICAgICB1MzIgKmJ1cnN0X2V4cCwgdTMyICpidXJzdF9tYW50aXNzYSkKQEAgLTYxLDYgJiM0Mzs2NCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCwKIAkJCSpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMICZsdDsmbHQ7ICgqYnVyc3RfZXhwIC0gNykpOwogCQl9CiAJfSBlbHNlIHsKJiM0MzsJCS8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvbgomIzQzOwkJICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LgomIzQzOwkJICovCiAJCSpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7CiAJCSpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTsKIAl9CkBAIC0xNjAwLDE0ICYjNDM7MTYwNiw0NjIgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJCSAgbmljLCBuaWMsIGluZ3Jlc3MpOwogfQogCiYjNDM7LyogRnJlZSB0aGUgcGVyLXF1ZXVlIG1pbi9tYXggcmF0ZSBjYWNoZXMuICovCiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlkZXZtX2tmcmVlKHBmdmYtJmd0O2RldiwgcGZ2Zi0mZ3Q7bXFwcmlvX21pbl9yYXRlKTsKJiM0MzsJZGV2bV9rZnJlZShwZnZmLSZndDtkZXYsIHBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSk7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19taW5fcmF0ZSA9IE5VTEw7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSA9IE5VTEw7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19mbGFncyA9IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsKJiM0MzsJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvX21pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtJmd0O2RldiwgbnVtX3R4cSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKCpwZnZmLSZndDttcXByaW9fbWluX3JhdGUpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvX21heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtJmd0O2RldiwgbnVtX3R4cSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKCpwZnZmLSZndDttcXByaW9fbWF4X3JhdGUpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSkgewomIzQzOwkJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJaW50IGx2bCwgaWR4OwomIzQzOwomIzQzOwlmb3IgKGx2bCA9IDA7IGx2bCAmbHQ7IE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGlkeCA9IDA7IGlkeCAmbHQ7IHBmdmYtJmd0O2h3LnR4c2NocV9jbnRbbHZsXTsgaWR4JiM0MzsmIzQzOykgewomIzQzOwkJCWlmIChwZnZmLSZndDtody50eHNjaHFfbGlzdFtsdmxdW2lkeF0pCiYjNDM7CQkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsCiYjNDM7ICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb24KJiM0MzsgKiBleHBsaWNpdCBtcXByaW8gdGVhcmRvd24gKHRjIHFkaXNjIGRlbCkgYW5kIGVycm9yIGNsZWFudXAsIG5vdCBvbgomIzQzOyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLgomIzQzOyAqLwomIzQzO2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLSZndDtuZXRkZXY7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlpZiAoIXBmdmYtJmd0O21xcHJpb19yYXRlX2xpbWl0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQocGZ2ZikpCiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7CiYjNDM7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19yYXRlX2xpbWl0ID0gZmFsc2U7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19za2lwX3RlYXJkb3duID0gZmFsc2U7CiYjNDM7CW5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7CiYjNDM7CW90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi0mZ3Q7bmV0ZGV2OwomIzQzOwlpbnQgdHhxLCBlcnI7CiYjNDM7CiYjNDM7CWlmICghcGZ2Zi0mZ3Q7bXFwcmlvX3JhdGVfbGltaXQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlmb3IgKHR4cSA9IDA7IHR4cSAmbHQ7IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOyB0eHEmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCW1pbl9yYXRlID0gcGZ2Zi0mZ3Q7bXFwcmlvX21pbl9yYXRlW3R4cV07CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKQomIzQzOwkJCW1heF9yYXRlID0gcGZ2Zi0mZ3Q7bXFwcmlvX21heF9yYXRlW3R4cV07CiYjNDM7CiYjNDM7CQlpZiAoIW1pbl9yYXRlICZhbXA7JmFtcDsgIW1heF9yYXRlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLAomIzQzOwkJCQkJCSAgIG1heF9yYXRlKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlciBmb3IgdHhxICVkOiAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIHR4cSwgZXJyKTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW8KJiM0MzsgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSkKJiM0MzsgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy4KJiM0MzsgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzCiYjNDM7ICogY2Fycmllciwgc3RvcHMgYWxsIFRYIHF1ZXVlcywgdGVhcnMgZG93biBJUlFzL05BUEkgYW5kIGRyb3BzIGluLWZsaWdodAomIzQzOyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCBuZXRpZl9jbG9zZSgpIGNsZWFycyBJRkZfVVAgYW5kIGxlYXZlcyB0aGUKJiM0MzsgKiBpbnRlcmZhY2UgYWRtaW5pc3RyYXRpdmVseSBkb3duLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtJmd0O25ldGRldl9vcHM7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CW5ldGRldl9pbmZvKG5ldGRldiwKJiM0MzsJCSAgICAmIzM0O21xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IG9wcy0mZ3Q7bmRvX3N0b3AobmV0ZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CS8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqLwomIzQzOwlpZiAocmF0ZV9saW1pdCkKJiM0MzsJCXBmdmYtJmd0O21xcHJpb19yYXRlX2xpbWl0ID0gdHJ1ZTsKJiM0MzsKJiM0MzsJZXJyID0gb3BzLSZndDtuZG9fb3BlbihuZXRkZXYpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlpbnQgZG93bl9lcnI7CiYjNDM7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O0ZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxuJiMzNDssCiYjNDM7CQkJICAgZXJyKTsKJiM0MzsJCWRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTsKJiM0MzsJCWlmIChkb3duX2VycikKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGZhaWxlZCB0byBjbGVhciBzaGFwZXJzIGFmdGVyIHJlc3RhcnQgZXJyb3I6ICVkXG4mIzM0OywKJiM0MzsJCQkJICAgZG93bl9lcnIpOwomIzQzOwkJLyogQ2FsbGVyIGhvbGRzIG5ldGRldi9SVE5MIGxvY2s7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLiAqLwomIzQzOwkJbmV0aWZfY2xvc2UobmV0ZGV2KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTY0IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKHU2NCByYXRlLCB1MzIgcWNvdW50KQomIzQzO3sKJiM0MzsJaWYgKCFyYXRlIHx8IHFjb3VudCAmbHQ7PSAxKQomIzQzOwkJcmV0dXJuIHJhdGU7CiYjNDM7CiYjNDM7CXJldHVybiBkaXZfdTY0KHJhdGUsIHFjb3VudCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1NjQgcmF0ZSwKJiM0MzsJCQkJCXUzMiBxY291bnQsIGludCB0YywgY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CWlmICghcmF0ZSB8fCBxY291bnQgJmx0Oz0gMSB8fCByYXRlICZndDs9IHFjb3VudCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCSAgICYjMzQ7bXFwcmlvOiAlcyByYXRlICVsbHUgZm9yIHRjICVkIHRvbyBzbWFsbCBmb3IgJXUgcXVldWVzXG4mIzM0OywKJiM0MzsJCSAgIG5hbWUsIHJhdGUsIHRjLCBxY291bnQpOwomIzQzOwlyZXR1cm4gLUVJTlZBTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsJaW50IHRjLCB0eHE7CiYjNDM7CiYjNDM7CWlmIChxb3B0LSZndDtudW1fdGMgJmd0OyBudW1fdHhxKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcbiYjMzQ7LAomIzQzOwkJCSAgIHFvcHQtJmd0O251bV90YywgbnVtX3R4cSk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobnVtX3R4cSAmZ3Q7IE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcbiYjMzQ7LAomIzQzOwkJCSAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiBxY291bnQgPSBxb3B0LSZndDtjb3VudFt0Y107CiYjNDM7CiYjNDM7CQlmb3IgKHR4cSA9IHFvcHQtJmd0O29mZnNldFt0Y107CiYjNDM7CQkgICAgIHR4cSAmbHQ7IHFvcHQtJmd0O29mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKHR4cSAmZ3Q7PSBudW1fdHhxKSB7CiYjNDM7CQkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkJICAgJiMzNDttcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcbiYjMzQ7LAomIzQzOwkJCQkJICAgdHhxLCBudW1fdHhxKTsKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19yYXRlX3ZhbGlkKHU2NCByYXRlX2J5dGVzX3BzKQomIzQzO3sKJiM0MzsJdTY0IG1icHM7CiYjNDM7CiYjNDM7CWlmICghcmF0ZV9ieXRlc19wcykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmZ3Q7IE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmZ3Q7IGRpdl91NjQoVTY0X01BWCwgOCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTsKJiM0MzsJcmV0dXJuIG1icHMgJmx0Oz0gMiB8fCBpbG9nMihtYnBzIC8gMikgJmx0Oz0gTUFYX1JBVEVfRVhQT05FTlQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKQomIzQzO3sKJiM0MzsJYm9vbCBoYWRfbXFwcmlvID0gcGZ2Zi0mZ3Q7bXFwcmlvX3JhdGVfbGltaXQ7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi0mZ3Q7bmV0ZGV2OwomIzQzOwlib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpOwomIzQzOwlpbnQgZG93bl9lcnIsIGVycjsKJiM0MzsKJiM0MzsJcW9wdC0mZ3Q7aHcgPSAwOwomIzQzOwomIzQzOwkvKiB0YyBxZGlzYyByZXBsYWNlIGdyYWZ0cyB0aGUgbmV3IG1xcHJpbyBiZWZvcmUgZGVzdHJveWluZyB0aGUgb2xkCiYjNDM7CSAqIG9uZS4gVGhlIG5ldyBjb25maWd1cmF0aW9uIGhhcyBhbHJlYWR5IHJlcHJvZ3JhbW1lZCBoYXJkd2FyZSBhbmQKJiM0MzsJICogc2V0IG1xcHJpb19yYXRlX2xpbWl0LCBzbyBpZ25vcmUgdGVhcmRvd24gZnJvbQomIzQzOwkgKiB0aGUgcmVwbGFjZWQgcWRpc2MuCiYjNDM7CSAqLwomIzQzOwlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX3NraXBfdGVhcmRvd24pIHsKJiM0MzsJCXBmdmYtJmd0O21xcHJpb19za2lwX3RlYXJkb3duID0gZmFsc2U7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqLwomIzQzOwlpZiAoIWhhZF9tcXByaW8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpOwomIzQzOwomIzQzOwlpZiAoaWZfdXApIHsKJiM0MzsJCWVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBkb3duX2VycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQlzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gJmFtcDttcXByaW8tJmd0O3FvcHQ7CiYjNDM7CWJvb2wgcmVwbGFjaW5nID0gcGZ2Zi0mZ3Q7bXFwcmlvX3JhdGVfbGltaXQ7CiYjNDM7CWJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7CiYjNDM7CWludCB0YywgdHhxLCBlcnIsIGk7CiYjNDM7CiYjNDM7CWlmICghcW9wdC0mZ3Q7aHcpCiYjNDM7CQlyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTsKJiM0MzsKJiM0MzsJaWYgKCFpZl91cCkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7bXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobXFwcmlvLSZndDtzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxuJiMzNDssIG1xcHJpby0mZ3Q7c2hhcGVyKTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXRlc3RfYml0KFFPU19DSVJfUElSX1NVUFBPUlQsICZhbXA7cGZ2Zi0mZ3Q7aHcuY2FwX2ZsYWcpKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpc19vdHgyX3NkcF9yZXAocGZ2Zi0mZ3Q7cGRldikpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG90eDJfcW9zX2h0Yl9hY3RpdmUocGZ2ZikpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGZ2Zi0mZ3Q7cGZjX2VuKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBmdmYtJmd0O3hkcF9wcm9nKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBxb3B0LSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwOwomIzQzOwkJdTMyIHFjb3VudCA9IHFvcHQtJmd0O2NvdW50W3RjXTsKJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCW1pbl9yYXRlID0gbXFwcmlvLSZndDttaW5fcmF0ZVt0Y107CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkKJiM0MzsJCQltYXhfcmF0ZSA9IG1xcHJpby0mZ3Q7bWF4X3JhdGVbdGNdOwomIzQzOwomIzQzOwkJaWYgKG1pbl9yYXRlICZhbXA7JmFtcDsgbWF4X3JhdGUgJmFtcDsmYW1wOyBtaW5fcmF0ZSAmZ3Q7IG1heF9yYXRlKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXG4mIzM0OywKJiM0MzsJCQkJICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkgewomIzQzOwkJCWVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBtaW5fcmF0ZSwKJiM0MzsJCQkJCQkJICAgcWNvdW50LCB0YywKJiM0MzsJCQkJCQkJICAgJiMzNDttaW4mIzM0Oyk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKSB7CiYjNDM7CQkJZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIG1heF9yYXRlLAomIzQzOwkJCQkJCQkgICBxY291bnQsIHRjLAomIzQzOwkJCQkJCQkgICAmIzM0O21heCYjMzQ7KTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUgJmFtcDsmYW1wOwomIzQzOwkJICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1pbl9yYXRlLAomIzQzOwkJCQkJCQkJICAgICAgIHFjb3VudCkpKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBleGNlZWRzIGhhcmR3YXJlIGxpbWl0XG4mIzM0OywKJiM0MzsJCQkJICAgbWluX3JhdGUsIHRjKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtYXhfcmF0ZSwKJiM0MzsJCQkJCQkJCSAgICAgICBxY291bnQpKSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgZXhjZWVkcyBoYXJkd2FyZSBsaW1pdFxuJiMzNDssCiYjNDM7CQkJCSAgIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi0mZ3Q7bmV0ZGV2LCB0cnVlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKG5ldGRldiwgcW9wdCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIG90eDJfbXFwcmlvX3VwKCkgbWF5IGhhdmUgcmVzdG9yZWQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZHVyaW5nCiYjNDM7CSAqIHRoZSByZXN0YXJ0IGFib3ZlLiBDbGVhciBldmVyeSBNRFEgc2hhcGVyIGJlZm9yZSBhcHBseWluZyB0aGUgbmV3CiYjNDM7CSAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlCiYjNDM7CSAqIGxpbWl0cyBpbiBoYXJkd2FyZS4KJiM0MzsJICovCiYjNDM7CWlmIChvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQocGZ2ZikpIHsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19mbGFncyA9IG1xcHJpby0mZ3Q7ZmxhZ3M7CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHFvcHQtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CQl1MzIgcWNvdW50ID0gcW9wdC0mZ3Q7Y291bnRbdGNdOwomIzQzOwomIzQzOwkJLyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRCiYjNDM7CQkgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWUKJiM0MzsJCSAqIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUpCiYjNDM7CQkJbWluX3JhdGUgPSBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtcXByaW8tJmd0O21pbl9yYXRlW3RjXSwKJiM0MzsJCQkJCQkJICAgICAgcWNvdW50KTsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKQomIzQzOwkJCW1heF9yYXRlID0gb3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobXFwcmlvLSZndDttYXhfcmF0ZVt0Y10sCiYjNDM7CQkJCQkJCSAgICAgIHFjb3VudCk7CiYjNDM7CiYjNDM7CQlmb3IgKHR4cSA9IHFvcHQtJmd0O29mZnNldFt0Y107CiYjNDM7CQkgICAgIHR4cSAmbHQ7IHFvcHQtJmd0O29mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7CiYjNDM7CQkJbmV0ZGV2X2RiZyhuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XG4mIzM0OywKJiM0MzsJCQkJICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTsKJiM0MzsKJiM0MzsJCQlwZnZmLSZndDttcXByaW9fbWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlOwomIzQzOwkJCXBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7CiYjNDM7CiYjNDM7CQkJZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsCiYjNDM7CQkJCQkJCSAgIG1pbl9yYXRlLCBtYXhfcmF0ZSk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJZ290byBjbGVhbnVwOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CW5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcW9wdC0mZ3Q7bnVtX3RjKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHFvcHQtJmd0O251bV90YzsgaSYjNDM7JiM0MzspCiYjNDM7CQluZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcW9wdC0mZ3Q7Y291bnRbaV0sIHFvcHQtJmd0O29mZnNldFtpXSk7CiYjNDM7CiYjNDM7CXFvcHQtJmd0O2h3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTOwomIzQzOwomIzQzOwlpZiAocmVwbGFjaW5nKQomIzQzOwkJcGZ2Zi0mZ3Q7bXFwcmlvX3NraXBfdGVhcmRvd24gPSB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwlvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhOwomIzQzOwlzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7CiYjNDM7CiYjNDM7CWlmIChiYXNlLSZndDt0eXBlICE9IFRDX1NFVFVQX1FESVNDX01RUFJJTykKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJY2FwcyA9IGJhc2UtJmd0O2NhcHM7CiYjNDM7CWNhcHMtJmd0O3ZhbGlkYXRlX3F1ZXVlX2NvdW50cyA9IHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLAogCQkgIHZvaWQgKnR5cGVfZGF0YSkKIHsKIAlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBUQ19RVUVSWV9DQVBTOgomIzQzOwkJcmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpOwogCWNhc2UgVENfU0VUVVBfQkxPQ0s6CiAJCXJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTsKIAljYXNlIFRDX1NFVFVQX1FESVNDX0hUQjoKIAkJcmV0dXJuIG90eDJfc2V0dXBfdGNfaHRiKG5ldGRldiwgdHlwZV9kYXRhKTsKJiM0MzsJY2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86CiYjNDM7CQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMKaW5kZXggNjljMDkxMWUyOGU5MS4uZjc2OTNmMDJhMDdjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYwpAQCAtMTE4LDYgJiM0MzsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAkvKiBjb25maWd1cmUgUElSICovCiAJbWF4cmF0ZSA9IChub2RlLSZndDtyYXRlICZndDsgbm9kZS0mZ3Q7Y2VpbCkgPyBub2RlLSZndDtyYXRlIDogbm9kZS0mZ3Q7Y2VpbDsKIAomIzQzOwkvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW4KJiM0MzsJICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS4KJiM0MzsJICovCiAJY2ZnLSZndDtyZWd2YWxbKm51bV9yZWdzXSA9CiAJCW90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7CiAJKCpudW1fcmVncykmIzQzOyYjNDM7OwpAQCAtMTcyOSwxMSAmIzQzOzE3MzIsMjMgQEAgdm9pZCBvdHgyX3Fvc19jb25maWdfdHhzY2hxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKIAlvdHgyX3Fvc19yb290X2Rlc3Ryb3kocGZ2Zik7CiB9CiAKJiM0Mztib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJcmV0dXJuIG90eDJfc3dfbm9kZV9maW5kKHBmdmYsIE9UWDJfUU9TX1JPT1RfQ0xBU1NJRCk7CiYjNDM7fQomIzQzOwogaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKQogewogCXN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5kZXYpOwogCWludCByZXM7CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpb19yYXRlX2xpbWl0ICZhbXA7JmFtcDsKJiM0MzsJICAgIGh0Yi0mZ3Q7Y29tbWFuZCAhPSBUQ19IVEJfREVTVFJPWSkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi0mZ3Q7ZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O0hUQiBvZmZsb2FkIGNhbm5vdCBiZSB1c2VkIHdpdGggbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGFjdGl2ZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCXN3aXRjaCAoaHRiLSZndDtjb21tYW5kKSB7CiAJY2FzZSBUQ19IVEJfQ1JFQVRFOgogCQlyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLSZndDtwYXJlbnRfY2xhc3NpZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaAppbmRleCAyMjFiZDA0MzhmNjAzLi5jNzc3Y2M0MmVhYzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oCkBAIC0yMyw2ICYjNDM7MjMsNyBAQCBlbnVtIHFvc19zbXFfb3BlcmF0aW9ucyB7CiB1NjQgb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1NjQgbWF4cmF0ZSwgdTMyIGJ1cnN0KTsKIAogaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKTsKJiM0Mztib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKTsKIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7CiB2b2lkIG90eDJfcW9zX2ZyZWVfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpOwogaW50IG90eDJfcW9zX2VuYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NzMKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQ6IE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSBoYXZlIGEgcGF0Y2ggaGVyZSB0aGF0IGFkZHMgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIHN1cHBvcnQgdG8gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY2AsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY2AsIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY2AsIHdoaWNoIHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzcGVjaWZpYyBwaWVjZSBvZiBoYXJkd2FyZTogdGhlIE9jdGVvblRYMi4KCk15IGZpcnN0IHRob3VnaHQgaXMsIGlzIHRoaXMgZHJpdmVyIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VPyBUaGUgT2N0ZW9uVFgyIGlzIGEgaGFyZHdhcmUgTklDLCBhIFBDSWUgZGV2aWNlLCBzbyB0aGF0IHJhaXNlcyBhIHJlZCBmbGFnIHJpZ2h0IGF3YXkuIElzIHRoaXMgb25lIG9mIHRob3NlIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIHRoYXQgcmVxdWlyZXMgYSAqcGh5c2ljYWwqIFBDSWUgY2FyZCwgc29tZXRoaW5nIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHRoZSBjYXNlLCBhcyBPY3Rlb25UWDIgaXMgYSBwaHlzaWNhbCBoYXJkd2FyZSBOSUMuCgpUaGUgaW5zdHJ1Y3Rpb25zIEkgaGF2ZSBleHBsaWNpdGx5IGNhbGwgb3V0IHNpdHVhdGlvbnMgbGlrZSB0aGlzLCBzcGVjaWZpY2FsbHkgbWVudGlvbmluZyAmIzM0O3ZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7CgpBbHJpZ2h0LCB0aW1lIHRvIGNvbmZpcm0uIEkgbmVlZCB0byBtYWtlIHN1cmUgT2N0ZW9uVFgyIGlzbiYjMzk7dCBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZW11bGF0ZWQuIExldCYjMzk7cyBzZWUuLi4gaXQmIzM5O3MgYW4gRXRoZXJuZXQgZHJpdmVyIGZvciBNYXJ2ZWxsIE9jdGVvblRYMiBTb0NzLCBidXQgZG9lcyB0aGF0IG1lYW4gaXQmIzM5O3MgZW11bGF0YWJsZT8gSSBkb3VidCBpdDsgdGhlc2UgYXJlIHVzdWFsbHkgdGlnaHRseSBjb3VwbGVkIHRvIHRoZSBoYXJkd2FyZS4gSSBuZWVkIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnYCB0byBnZXQgbW9yZSBkZXRhaWxzIG9uIGl0cyBjaGFyYWN0ZXJpc3RpY3MuCgpHaXZlbiB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50LCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhpcyBwYXRjaCBpcyBnb2luZyB0byBiZSBjbGFzc2lmaWVkIGFzICpXb3J0aEZ1enppbmc9ZmFsc2UqLCBiYXNlZCBvbiB0aGUgcmVxdWlyZW1lbnQgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPQ1RFT05UWDJfQUYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9Nj1jb25maWcgT0NURU9OVFgyX01CT1hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjk6Y29uZmlnIE9DVEVPTlRYMl9BRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0xMC1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgT2N0ZW9uVFgyIFJWVSBBZG1pbiBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ3OAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgS2NvbmZpZyBSZXZpZXcqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiAmIzM0O0xldCYjMzk7cyByZWFkIHRoZSBLY29uZmlnLiYjMzQ7IFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAsIGlzbiYjMzk7dCBpdD8gQmVmb3JlIGFueSBtb2RpZmljYXRpb25zLCBiZWZvcmUgYW55IGRlc2lnbiBkZWNpc2lvbnMsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uIHNwYWNlLiBJJiMzOTttIG5vdCBqdXN0ICpsb29raW5nKiBhdCBpdCwgSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIGl0LiBJJiMzOTttIGFscmVhZHkgc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgZGVwZW5kZW5jaWVzLCBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IG9wdGlvbnMsIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSDigJMgd2hhdOKAmXMgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGlzIGNvbmZpZ3VyYXRpb24/IFdoYXQgYXJlYXMgZG9lcyBpdCBjb3Zlcj8gSSYjMzk7bSBzY2FubmluZyBmb3IgZmFtaWxpYXIgbW9kdWxlcyBvciBmZWF0dXJlcywgYW5kIHF1aWNrbHkgaWRlbnRpZnlpbmcgdGhvc2UgYXJlYXMgdGhhdCBJJiMzOTttIGxlc3MgY29tZm9ydGFibGUgd2l0aCBhbmQgbmVlZCB0byByZXZpc2l0IG1vcmUgY2xvc2VseS4gTXkgYnJhaW4gaXMgYWxyZWFkeSBjYWxjdWxhdGluZyB0aGUgY29tcGxleGl0eSBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gYXMgYSB3aG9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBNYXJ2ZWxsIFJWVSBOZXR3b3JrIGRyaXZlcnMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgT0NURU9OVFgyX01CT1hcbiAgIDc6XHRcdHRyaXN0YXRlXG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIE9DVEVPTlRYMl9BRlxuICAxMDpcdFx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgUlZVIEFkbWluIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuICAxMTpcdFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXG4gIDEyOlx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiAgMTM6XHRcdGRlcGVuZHMgb24gKDY0QklUIFx1MDAyNlx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XG4gIDE0Olx0XHRkZXBlbmRzIG9uIFBDSVxuICAxNTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAxNjpcdFx0aGVscFxuICAxNzpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJiMzOTtzIE9jdGVvblRYMiBSZXNvdXJjZSBWaXJ0dWFsaXphdGlvblxuICAxODpcdFx0ICBVbml0JiMzOTtzIGFkbWluIGZ1bmN0aW9uIG1hbmFnZXIgd2hpY2ggbWFuYWdlcyBhbGwgUlZVIEhXIHJlc291cmNlc1xuICAxOTpcdFx0ICBhbmQgcHJvdmlkZXMgYSBtZWRpdW0gdG8gb3RoZXIgUEYvVkZzIHRvIGNvbmZpZ3VyZSBIVy4gU2hvdWxkIGJlXG4gIDIwOlx0XHQgIGVuYWJsZWQgZm9yIG90aGVyIFJWVSBkZXZpY2UgZHJpdmVycyB0byB3b3JrLlxuICAyMTpcdFxuICAyMjpcdGNvbmZpZyBORENfRElTX0RZTkFNSUNfQ0FDSElOR1xuICAyMzpcdFx0Ym9vbCBcJiMzNDtEaXNhYmxlIGNhY2hpbmcgb2YgZHluYW1pYyBlbnRyaWVzIGluIE5EQ1wmIzM0O1xuICAyNDpcdFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfQUZcbiAgMjU6XHRcdGRlZmF1bHQgblxuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBUaGlzIGNvbmZpZyBvcHRpb24gZGlzYWJsZXMgY2FjaGluZyBvZiBkeW5hbWljIGVudHJpZXMgc3VjaCBhcyBOSVggU1FFc1xuICAyODpcdFx0ICAsIE5QQSBzdGFjayBwYWdlcyBldGMgaW4gTkRDLiBBbHNvIGxvY2tzIGRvd24gTklYIFNRL0NRL1JRL1JTUyBhbmRcbiAgMjk6XHRcdCAgTlBBIEF1cmEvUG9vbCBjb250ZXh0cy5cbiAgMzA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE0NgoJCQkJCQkJb3V0cHV0OiA4NAoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBOb3QgV29ydGggRnV6emluZyoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTt2ZSBnb3QgYSBoYXJkd2FyZSBkcml2ZXIgaGVyZSDigJMgc3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVSBkcml2ZXIuIFRoYXQgYXV0b21hdGljYWxseSBtYWtlcyBtZSB0aGluayB2ZW5kb3Itc3BlY2lmaWMsIHdoaWNoIGlzIGEga2V5IGZsYWcgZm9yIHRoaXMgdHlwZSBvZiBhc3Nlc3NtZW50LiBJIHNlZSBpdCBkZXBlbmRzIG9uIFBDSSBhbmQgZWl0aGVyIEFSTTY0IG9yIGEgYENPTVBJTEVfVEVTVGAgZmxhZyDigJMgYm90aCBvZiB3aGljaCBwb2ludCB0byBhIGZhaXJseSBzcGVjaWFsaXplZCBlbnZpcm9ubWVudC4KClRoZW4gSSBoaXQgdGhlIG5haWwgb24gdGhlIGhlYWQ6IGl0ICpyZXF1aXJlcyogYWN0dWFsIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUuIE5vIFFFTVUgZW11bGF0aW9uIGhlcmUsIHdoaWNoIGlzIGEgaHVnZSByZWQgZmxhZy4gTG9va2luZyBhdCB0aGUgZXhjbHVzaW9uIHJ1bGVzLCB0aGlzIGluc3RhbnRseSByaW5ncyBhIGJlbGwuIEl0JiMzOTtzIGFsbW9zdCB2ZXJiYXRpbSB0aGUgdHlwZSBvZiBkcml2ZXIgb3V0bGluZWQgaW4gdGhhdCBleGNsdXNpb246ICYjMzQ7Q29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4mIzM0OwoKR2l2ZW4gdGhpcywgdGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZyB3aXRoaW4gdGhlIGNvbnN0cmFpbnRzIG9mIG91ciBjdXJyZW50IHNldHVwLiBQaHlzaWNhbCBoYXJkd2FyZSBkZXBlbmRlbmN5IGFuZCB0aGUgbGltaXRhdGlvbnMgb2YgUUVNVSBpbW1lZGlhdGVseSBwdXQgdGhpcyBpbnRvIHRoZSAmIzM0O05vdCBXb3J0aCBGdXp6aW5nJiMzNDsgY2F0ZWdvcnkuIFRoZXJlZm9yZSwgSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkIGluIHRoaXMgY29udGV4dC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkIGluIHRoaXMgY29udGV4dC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIzOjUyLjQwNTAyMzc2N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzczOTExNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgY2Fubm90IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQgaW4gdGhpcyBjb250ZXh0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjM6NTIuNDA1MDI5NDk3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTY3NTUyMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkMmViZjQzZGZhNDAwMmI0N2ZhM2Y3ZWFjYzJkNWMyZDQyODc4Y2Q0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDA5OjIzOjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xcbmluZGV4IGI4MWM0N2VhMDIzYmUuLjIyZjY0YzFlZGU5MWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXFxuQEAgLTMzMSw4ICszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcXG4rXFx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHtcXG4rXFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChydnUtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXFxuaW5kZXggY2E3M2E5NGRiNzk0My4uZGZhYmRhMTIwMWJkZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXFxuQEAgLTYxNCw2ICs2MTQsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKG90eDJfZ2V0X21hY19mcm9tX2FmKTtcXG4gXFxuK3N0YXRpYyBpbnRcXG4rb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsXFxuK1xcdFxcdCAgICAgICB1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSxcXG4rXFx0XFx0ICAgICAgIHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR10pXFxuK3tcXG4rXFx0c3RydWN0IG1ib3ggKm1ib3ggPSBcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveDtcXG4rXFx0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XFxuK1xcdGludCBpLCBlcnI7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcXG4rXFx0aWYgKCFyZXEpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdHJlcS1cXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XFxuK1xcdHJlcS1cXHUwMDNlbnVtX3JlZ3MgPSBjbnQ7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY250OyBpKyspIHtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWdbaV0gPSByZWdfYWRkcltpXTtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbaV0gPSByZWdfdmFsW2ldO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcXG4rXFx0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcXG4rXFx0aW50IGVyciwgc21xLCBpLCBjbnQgPSAwO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpKyspIHtcXG4rXFx0XFx0c21xID0gcGZ2Zi1cXHUwMDNlaHcudHhzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9TTVFdW2ldO1xcbitcXG4rXFx0XFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsW2NudF0gPSAwO1xcbitcXHRcXHRjbnQrKztcXG4rXFxuK1xcdFxcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFtjbnRdID0gMDtcXG4rXFx0XFx0Y250Kys7XFxuK1xcbitcXHRcXHRpZiAoY250IFxcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZmFpbDtcXG4rXFx0XFx0Y250ID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGNudCkge1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZmFpbDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK2ZhaWw6XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0XFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcXG4re1xcbitcXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94O1xcbitcXHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcXG4rXFx0aW50IGVyciwgc21xLCBuID0gMDtcXG4rXFx0dTY0IHJlZ19hZGRyWzJdO1xcbitcXHR1NjQgcmVnX3ZhbFsyXTtcXG4rXFx0dTY0IHJhdGU7XFxuK1xcbitcXHRpZiAoIW1heHJhdGUgXFx1MDAyNlxcdTAwMjYgIW1pbnJhdGUpIHtcXG4rXFx0XFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xcbitcXHRcXHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsWzBdID0gMDtcXG4rXFx0XFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFsxXSA9IDA7XFxuK1xcdFxcdHJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTtcXG4rXFx0fVxcbitcXG4rXFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XFxuK1xcdGlmICghcmVxKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXEtXFx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xcbitcXG4rXFx0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xcbitcXHQgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYXFxuK1xcdCAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnNcXG4rXFx0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXFxuK1xcdCAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYVxcbitcXHQgKiBoYXJkd2FyZSBjYXAuXFxuK1xcdCAqXFxuK1xcdCAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksXFxuK1xcdCAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uXFxuK1xcdCAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW5cXG4rXFx0ICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdHJlcS1cXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7XFxuK1xcdGlmIChtYXhyYXRlKSB7XFxuK1xcdFxcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gMDtcXG4rXFx0fVxcbitcXHRuKys7XFxuK1xcbitcXHQvKiBDSVIrUElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xcbitcXHRyZXEtXFx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xcbitcXHRpZiAobWlucmF0ZSkge1xcbitcXHRcXHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWlucmF0ZSk7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IDA7XFxuK1xcdH1cXG4rXFx0bisrO1xcbitcXHRyZXEtXFx1MDAzZW51bV9yZWdzID0gbjtcXG4rXFxuK1xcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKVxcbiB7XFxuIFxcdHUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107XFxuQEAgLTY1MCw3ICs3ODYsMjAgQEAgaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JcXG4gXFx0XFx0XFx0XFx0XFx0XFx0KHU2NClody1cXHUwMDNlc21xX2xpbmtfdHlwZSk7XFxuIFxcdFxcdHJlcS1cXHUwMDNlbnVtX3JlZ3MrKztcXG4gXFx0XFx0LyogTURRIGNvbmZpZyAqL1xcbi1cXHRcXHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQpIHtcXG4rXFx0XFx0XFx0LyogVE9ETzogUHJvZ3JhbSBOSVhfQUZfVEw0WF9UT1BPTE9HWSBvbiBUTDRbMF0uIE1RUFJJT1xcbitcXHRcXHRcXHQgKiBwYXJlbnRzIGV2ZXJ5IE1EUSB1bmRlciB0aGUgc2FtZSBUTDQgd2l0aCBzY2hlZHVsZVxcbitcXHRcXHRcXHQgKiBwcmlvcml0eSAwLCBzbyBzaWJsaW5nIGFyYml0cmF0aW9uIGRlcGVuZHMgb24gdGhlIFRMNFxcbitcXHRcXHRcXHQgKiB0b3BvbG9neSByZWdpc3Rlci4gT25seSB0aGUgSFRCIHBhdGggcHJvZ3JhbXMgdGhpc1xcbitcXHRcXHRcXHQgKiB0b2RheSBhbmQgdGhlIEFGIGRvZXMgbm90IHJlc2V0IGl0IG9uIHNjaHEgcmVhbGxvYyxcXG4rXFx0XFx0XFx0ICogc28gYSBUTDQgcmV1c2VkIGFmdGVyIEhUQiB0ZWFyZG93biBjYW4gcmV0YWluIHN0YWxlXFxuK1xcdFxcdFxcdCAqIFJSX1BSSU8vUFJJT19BTkNIT1IgYW5kIHN0YXJ2ZSBzb21lIFRYIHF1ZXVlcy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHJlcS1cXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xcbiBcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFsxXSA9IHBhcmVudCBcXHUwMDNjXFx1MDAzYyAxNjtcXG4gXFx0XFx0cmVxLVxcdTAwM2VudW1fcmVncysrO1xcbkBAIC03NzgsNiArOTI3LDkgQEAgaW50IG90eDJfdHhzY2hfYWxsb2Moc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXHRcXHRyZXEtXFx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW9fcmF0ZV9saW1pdClcXG4rXFx0XFx0cmVxLVxcdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXG4gXFx0cmMgPSBvdHgyX3N5bmNfbWJveF9tc2coXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3gpO1xcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHJldHVybiByYztcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxcbmluZGV4IGVlY2VlNjEyYjdiMmMuLmNmMWNkMzkxYmY1MmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxcbkBAIC01MTUsNiArNTE1LDEyIEBAIHN0cnVjdCBvdHgyX25pYyB7XFxuIFxcdHU2NFxcdFxcdFxcdGZsYWdzO1xcbiBcXHR1NjRcXHRcXHRcXHQqY3Ffb3BfYWRkcjtcXG4gXFxuK1xcdHUzMlxcdFxcdFxcdG1xcHJpb19mbGFncztcXG4rXFx0dTY0XFx0XFx0XFx0Km1xcHJpb19taW5fcmF0ZTtcXG4rXFx0dTY0XFx0XFx0XFx0Km1xcHJpb19tYXhfcmF0ZTtcXG4rXFx0Ym9vbFxcdFxcdFxcdG1xcHJpb19yYXRlX2xpbWl0O1xcbitcXHRib29sXFx0XFx0XFx0bXFwcmlvX3NraXBfdGVhcmRvd247XFxuK1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2dcXHRcXHQqeGRwX3Byb2c7XFxuIFxcdHN0cnVjdCBvdHgyX3FzZXRcXHRxc2V0O1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9od1xcdFxcdGh3O1xcbkBAIC0xMjQ2LDYgKzEyNTIsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlZywgaW50ICpsZW4pO1xcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XFxuIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7XFxuK2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHR4cSxcXG4rXFx0XFx0XFx0XFx0IHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSk7XFxuK2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4raW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuIHZvaWQgb3R4Ml9xdWV1ZV92Zl93b3JrKHN0cnVjdCBtYm94ICptdywgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hfd3EsXFxuIFxcdFxcdFxcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XFxuIGludCBvdHgyX2RlbF9tY2FtX2Zsb3dfZW50cnkoc3RydWN0IG90eDJfbmljICpuaWMsIHUxNiBlbnRyeSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcXG5pbmRleCBmMTEwZGZhNDIzNjA1Li44MzJmMDVjZjEyOWVlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXFxuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxcbiBcXHR1OCBvbGRfcGZjX2VuO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpb19yYXRlX2xpbWl0IFxcdTAwMjZcXHUwMDI2IHBmYy1cXHUwMDNlcGZjX2VuKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIoZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiUEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuIFxcdG9sZF9wZmNfZW4gPSBwZnZmLVxcdTAwM2VwZmNfZW47XFxuIFxcdHBmdmYtXFx1MDAzZXBmY19lbiA9IHBmYy1cXHUwMDNlcGZjX2VuO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXFxuaW5kZXggYTAzNDBmMzQyMmJmOS4uYzEzMTdmYmNkODQ4NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcXG5AQCAtMjg3LDYgKzI4NywxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChjaGFubmVsLVxcdTAwM2V0eF9jb3VudCAhPSBwZnZmLVxcdTAwM2Vody50eF9xdWV1ZXMgfHxcXG4rXFx0ICAgICBjaGFubmVsLVxcdTAwM2VyeF9jb3VudCAhPSBwZnZmLVxcdTAwM2Vody5yeF9xdWV1ZXMpKSB7XFxuK1xcdFxcdG5ldGRldl9pbmZvKGRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJOb3QgcGVybWl0dGVkIHRvIGNoYW5nZSBjaGFubmVsIGNvdW50IHdoaWxlIE1RIHByaW8gaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChpZl91cClcXG4gXFx0XFx0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc3RvcChkZXYpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG5pbmRleCBjOTk1ZjI5MDA4NTkwLi43MGM5NWU5YzViZjg2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXFxuQEAgLTE5ODAsNiArMTk4MCwxMCBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2ZyZWVfbWVtO1xcbiBcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX2h3O1xcbitcXG4gXFx0LyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovXFxuIFxcdGZvciAocWlkeCA9IDA7IHFpZHggXFx1MDAzYyBwZi1cXHUwMDNlaHcuY2ludF9jbnQ7IHFpZHgrKykge1xcbiBcXHRcXHRjcV9wb2xsID0gXFx1MDAyNnFzZXQtXFx1MDAzZW5hcGlbcWlkeF07XFxuQEAgLTIxNDAsNiArMjE0NCw3IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0ZnJlZV9pcnEodmVjLCBwZik7XFxuIGVycl9kaXNhYmxlX25hcGk6XFxuIFxcdG90eDJfZGlzYWJsZV9uYXBpKHBmKTtcXG4rZXJyX2ZyZWVfaHc6XFxuIFxcdG90eDJfZnJlZV9od19yZXNvdXJjZXMocGYpO1xcbiBlcnJfZnJlZV9tZW06XFxuIFxcdG90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7XFxuQEAgLTI4NDYsNiArMjg1MSwxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4gXFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXFx1MDAzZW5ldGRldik7XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XFxuIFxcbitcXHRpZiAocHJvZyBcXHUwMDI2XFx1MDAyNiBwZi1cXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHByb2cgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VtdHUgXFx1MDAzZSBNQVhfWERQX01UVSkge1xcbiBcXHRcXHRuZXRkZXZfd2FybihkZXYsIFxcXCJKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXFxuaW5kZXggMDM5ZmQ0N2ViZjUyMi4uNWJkOTVmMDYxNjYyOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xcbkBAIC0xNiw2ICsxNiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNfYWN0L3RjX21pcnJlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjX2FjdC90Y192bGFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9zY2hlZC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImNuMTBrLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJvdHgyX2NvbW1vbi5oXFxcIlxcbkBAIC0zMSw2ICszMiw4IEBAXFxuIFxcbiAjZGVmaW5lIE1DQVNUX0lOVkFMSURfR1JQXFx0XFx0KC0xVSlcXG4gI2RlZmluZSBSQVRFX01BTlRJU1NBX0JJVFNcXHRcXHQ4XFxuKy8qIE1heCBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDEzMDgxNiBNYnBzKS4gKi9cXG4rI2RlZmluZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QU1xcdCgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpXFxuIFxcbiBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKVxcbkBAIC02MSw2ICs2NCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcXG4gXFx0XFx0XFx0KmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgXFx1MDAzY1xcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uXFxuK1xcdFxcdCAqIENOMTBLKSwgbm90IGEgbWluaW1hbCBidXJzdC5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdCpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7XFxuIFxcdFxcdCpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTtcXG4gXFx0fVxcbkBAIC0xNjAwLDE0ICsxNjA2LDQ2MiBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0ICBuaWMsIG5pYywgaW5ncmVzcyk7XFxuIH1cXG4gXFxuKy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqL1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRkZXZtX2tmcmVlKHBmdmYtXFx1MDAzZWRldiwgcGZ2Zi1cXHUwMDNlbXFwcmlvX21pbl9yYXRlKTtcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsIHBmdmYtXFx1MDAzZW1xcHJpb19tYXhfcmF0ZSk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpb19taW5fcmF0ZSA9IE5VTEw7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpb19tYXhfcmF0ZSA9IE5VTEw7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpb19mbGFncyA9IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHUxNiBudW1fdHhxID0gcGZ2Zi1cXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XFxuK1xcbitcXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xcbitcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX21pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXFx1MDAzZWRldiwgbnVtX3R4cSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2YoKnBmdmYtXFx1MDAzZW1xcHJpb19taW5fcmF0ZSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgR0ZQX0tFUk5FTCk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpb19tYXhfcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVxcdTAwM2VkZXYsIG51bV90eHEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW9fbWF4X3JhdGUpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXBmdmYtXFx1MDAzZW1xcHJpb19taW5fcmF0ZSB8fCAhcGZ2Zi1cXHUwMDNlbXFwcmlvX21heF9yYXRlKSB7XFxuK1xcdFxcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgb3R4Ml90eHNjaHFfaXNfYWxsb2NhdGVkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRpbnQgbHZsLCBpZHg7XFxuK1xcbitcXHRmb3IgKGx2bCA9IDA7IGx2bCBcXHUwMDNjIE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwrKykge1xcbitcXHRcXHRmb3IgKGlkeCA9IDA7IGlkeCBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXTsgaWR4KyspIHtcXG4rXFx0XFx0XFx0aWYgKHBmdmYtXFx1MDAzZWh3LnR4c2NocV9saXN0W2x2bF1baWR4XSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbisvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycyxcXG4rICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb25cXG4rICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb25cXG4rICogcm91dGluZSBuZXRkZXYgc3RvcC9vcGVuIGN5Y2xlcyB3aGVyZSB0aGUgb2ZmbG9hZCBzdGF5cyBhY3RpdmUuXFxuKyAqL1xcbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRpZiAoIXBmdmYtXFx1MDAzZW1xcHJpb19yYXRlX2xpbWl0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQocGZ2ZikpXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpb19yYXRlX2xpbWl0ID0gZmFsc2U7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duID0gZmFsc2U7XFxuK1xcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7XFxuK1xcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGludCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghcGZ2Zi1cXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpb19tYXhfcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3IgKHR4cSA9IDA7IHR4cSBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xcbitcXHRcXHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XFxuK1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvX2ZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gcGZ2Zi1cXHUwMDNlbXFwcmlvX21pbl9yYXRlW3R4cV07XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW9fZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBwZnZmLVxcdTAwM2VtcXByaW9fbWF4X3JhdGVbdHhxXTtcXG4rXFxuK1xcdFxcdGlmICghbWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgIW1heF9yYXRlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbWF4X3JhdGUpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHR4cSwgZXJyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvXFxuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxcbisgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cXG4rICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFyc1xcbisgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XFxuKyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCBuZXRpZl9jbG9zZSgpIGNsZWFycyBJRkZfVVAgYW5kIGxlYXZlcyB0aGVcXG4rICogaW50ZXJmYWNlIGFkbWluaXN0cmF0aXZlbHkgZG93bi5cXG4rICovXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KVxcbit7XFxuK1xcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0bmV0ZGV2X2luZm8obmV0ZGV2LFxcbitcXHRcXHQgICAgXFxcIm1xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGVyciA9IG9wcy1cXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqL1xcbitcXHRpZiAocmF0ZV9saW1pdClcXG4rXFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQgPSB0cnVlO1xcbitcXG4rXFx0ZXJyID0gb3BzLVxcdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGludCBkb3duX2VycjtcXG4rXFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiRmFpbGVkIHRvIHJlc3RhcnQgZGV2aWNlIGFmdGVyIG1xcHJpbyBjaGFuZ2U6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBlcnIpO1xcbitcXHRcXHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XFxuK1xcdFxcdGlmIChkb3duX2VycilcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGZhaWxlZCB0byBjbGVhciBzaGFwZXJzIGFmdGVyIHJlc3RhcnQgZXJyb3I6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBkb3duX2Vycik7XFxuK1xcdFxcdC8qIENhbGxlciBob2xkcyBuZXRkZXYvUlROTCBsb2NrOyBkZXZfY2xvc2UoKSB3b3VsZCBkZWFkbG9jay4gKi9cXG4rXFx0XFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIHU2NCBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZSh1NjQgcmF0ZSwgdTMyIHFjb3VudClcXG4re1xcbitcXHRpZiAoIXJhdGUgfHwgcWNvdW50IFxcdTAwM2M9IDEpXFxuK1xcdFxcdHJldHVybiByYXRlO1xcbitcXG4rXFx0cmV0dXJuIGRpdl91NjQocmF0ZSwgcWNvdW50KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU2NCByYXRlLFxcbitcXHRcXHRcXHRcXHRcXHR1MzIgcWNvdW50LCBpbnQgdGMsIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0aWYgKCFyYXRlIHx8IHFjb3VudCBcXHUwMDNjPSAxIHx8IHJhdGUgXFx1MDAzZT0gcWNvdW50KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHQgICBcXFwibXFwcmlvOiAlcyByYXRlICVsbHUgZm9yIHRjICVkIHRvbyBzbWFsbCBmb3IgJXUgcXVldWVzXFxcXG5cXFwiLFxcbitcXHRcXHQgICBuYW1lLCByYXRlLCB0YywgcWNvdW50KTtcXG4rXFx0cmV0dXJuIC1FSU5WQUw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdClcXG4re1xcbitcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHR1MTYgbnVtX3R4cSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXHRpbnQgdGMsIHR4cTtcXG4rXFxuK1xcdGlmIChxb3B0LVxcdTAwM2VudW1fdGMgXFx1MDAzZSBudW1fdHhxKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiTnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBxb3B0LVxcdTAwM2VudW1fdGMsIG51bV90eHEpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG51bV90eHEgXFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiTnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHUzMiBxY291bnQgPSBxb3B0LVxcdTAwM2Vjb3VudFt0Y107XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHFvcHQtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2MgcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcXG4rXFx0XFx0XFx0aWYgKHR4cSBcXHUwMDNlPSBudW1fdHhxKSB7XFxuK1xcdFxcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICB0eHEsIG51bV90eHEpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19yYXRlX3ZhbGlkKHU2NCByYXRlX2J5dGVzX3BzKVxcbit7XFxuK1xcdHU2NCBtYnBzO1xcbitcXG4rXFx0aWYgKCFyYXRlX2J5dGVzX3BzKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGlmIChyYXRlX2J5dGVzX3BzIFxcdTAwM2UgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChyYXRlX2J5dGVzX3BzIFxcdTAwM2UgZGl2X3U2NChVNjRfTUFYLCA4KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0bWJwcyA9IG90eDJfY29udmVydF9yYXRlKHJhdGVfYnl0ZXNfcHMpO1xcbitcXHRyZXR1cm4gbWJwcyBcXHUwMDNjPSAyIHx8IGlsb2cyKG1icHMgLyAyKSBcXHUwMDNjPSBNQVhfUkFURV9FWFBPTkVOVDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0Ym9vbCBoYWRfbXFwcmlvID0gcGZ2Zi1cXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQ7XFxuK1xcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFxcdTAwMjZtcXByaW8tXFx1MDAzZXFvcHQ7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XFxuK1xcdGludCBkb3duX2VyciwgZXJyO1xcbitcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSAwO1xcbitcXG4rXFx0LyogdGMgcWRpc2MgcmVwbGFjZSBncmFmdHMgdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlIG9sZFxcbitcXHQgKiBvbmUuIFRoZSBuZXcgY29uZmlndXJhdGlvbiBoYXMgYWxyZWFkeSByZXByb2dyYW1tZWQgaGFyZHdhcmUgYW5kXFxuK1xcdCAqIHNldCBtcXByaW9fcmF0ZV9saW1pdCwgc28gaWdub3JlIHRlYXJkb3duIGZyb21cXG4rXFx0ICogdGhlIHJlcGxhY2VkIHFkaXNjLlxcbitcXHQgKi9cXG4rXFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duKSB7XFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duID0gZmFsc2U7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqL1xcbitcXHRpZiAoIWhhZF9tcXByaW8pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xcbitcXG4rXFx0aWYgKGlmX3VwKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZG93bl9lcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4re1xcbitcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRib29sIHJlcGxhY2luZyA9IHBmdmYtXFx1MDAzZW1xcHJpb19yYXRlX2xpbWl0O1xcbitcXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbitcXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xcbitcXG4rXFx0aWYgKCFxb3B0LVxcdTAwM2VodylcXG4rXFx0XFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XFxuK1xcbitcXHRpZiAoIWlmX3VwKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChtcXByaW8tXFx1MDAzZXNoYXBlciAhPSBUQ19NUVBSSU9fU0hBUEVSX0JXX1JBVEUpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcXFxuXFxcIiwgbXFwcmlvLVxcdTAwM2VzaGFwZXIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghdGVzdF9iaXQoUU9TX0NJUl9QSVJfU1VQUE9SVCwgXFx1MDAyNnBmdmYtXFx1MDAzZWh3LmNhcF9mbGFnKSkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXFx1MDAzZXBkZXYpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgSFRCIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZXBmY19lbikge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGZ2Zi1cXHUwMDNleGRwX3Byb2cpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xcbitcXHRcXHR1MzIgcWNvdW50ID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcXG4rXFx0XFx0XFx0bWluX3JhdGUgPSBtcXByaW8tXFx1MDAzZW1pbl9yYXRlW3RjXTtcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXTtcXG4rXFxuK1xcdFxcdGlmIChtaW5fcmF0ZSBcXHUwMDI2XFx1MDAyNiBtYXhfcmF0ZSBcXHUwMDI2XFx1MDAyNiBtaW5fcmF0ZSBcXHUwMDNlIG1heF9yYXRlKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpIHtcXG4rXFx0XFx0XFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIG1pbl9yYXRlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBxY291bnQsIHRjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwibWluXFxcIik7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpIHtcXG4rXFx0XFx0XFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIG1heF9yYXRlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBxY291bnQsIHRjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwibWF4XFxcIik7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1pbl9yYXRlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgcWNvdW50KSkpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGV4Y2VlZHMgaGFyZHdhcmUgbGltaXRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIG1pbl9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtYXhfcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHFjb3VudCkpKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBleGNlZWRzIGhhcmR3YXJlIGxpbWl0XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtYXhfcmF0ZSwgdGMpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihwZnZmLVxcdTAwM2VuZXRkZXYsIHRydWUpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2Zik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBxb3B0KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0Lyogb3R4Ml9tcXByaW9fdXAoKSBtYXkgaGF2ZSByZXN0b3JlZCB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbiBkdXJpbmdcXG4rXFx0ICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXdcXG4rXFx0ICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGVcXG4rXFx0ICogbGltaXRzIGluIGhhcmR3YXJlLlxcbitcXHQgKi9cXG4rXFx0aWYgKG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChwZnZmKSkge1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX2ZsYWdzID0gbXFwcmlvLVxcdTAwM2VmbGFncztcXG4rXFxuK1xcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIHFvcHQtXFx1MDAzZW51bV90YzsgdGMrKykge1xcbitcXHRcXHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XFxuK1xcdFxcdHUzMiBxY291bnQgPSBxb3B0LVxcdTAwM2Vjb3VudFt0Y107XFxuK1xcbitcXHRcXHQvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBwYXNzZWQgYXMgemVybyBhbmQgYm90aCBNRFFcXG4rXFx0XFx0ICogc2hhcGVyIHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZDsgc2VlXFxuK1xcdFxcdCAqIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gb3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobXFwcmlvLVxcdTAwM2VtaW5fcmF0ZVt0Y10sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHFjb3VudCk7XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXFxuK1xcdFxcdFxcdG1heF9yYXRlID0gb3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobXFwcmlvLVxcdTAwM2VtYXhfcmF0ZVt0Y10sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHFjb3VudCk7XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHFvcHQtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2MgcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHRjLCB0eHEsIG1pbl9yYXRlLCBtYXhfcmF0ZSk7XFxuK1xcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fbWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fbWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xcbitcXG4rXFx0XFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSk7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHFvcHQtXFx1MDAzZW51bV90Yyk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IGkrKylcXG4rXFx0XFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHFvcHQtXFx1MDAzZWNvdW50W2ldLCBxb3B0LVxcdTAwM2VvZmZzZXRbaV0pO1xcbitcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XFxuK1xcbitcXHRpZiAocmVwbGFjaW5nKVxcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93biA9IHRydWU7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2NsZWFudXA6XFxuK1xcdG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XFxuK1xcbitcXHRpZiAoYmFzZS1cXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGNhcHMgPSBiYXNlLVxcdTAwM2VjYXBzO1xcbitcXHRjYXBzLVxcdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxcbiBcXHRcXHQgIHZvaWQgKnR5cGVfZGF0YSlcXG4ge1xcbiBcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19RVUVSWV9DQVBTOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XFxuIFxcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4gXFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuaW5kZXggNjljMDkxMWUyOGU5MS4uZjc2OTNmMDJhMDdjNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcXG5AQCAtMTE4LDYgKzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbiBcXHQvKiBjb25maWd1cmUgUElSICovXFxuIFxcdG1heHJhdGUgPSAobm9kZS1cXHUwMDNlcmF0ZSBcXHUwMDNlIG5vZGUtXFx1MDAzZWNlaWwpID8gbm9kZS1cXHUwMDNlcmF0ZSA6IG5vZGUtXFx1MDAzZWNlaWw7XFxuIFxcbitcXHQvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW5cXG4rXFx0ICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS5cXG4rXFx0ICovXFxuIFxcdGNmZy1cXHUwMDNlcmVndmFsWypudW1fcmVnc10gPVxcbiBcXHRcXHRvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgbWF4cmF0ZSwgNjU1MzYpO1xcbiBcXHQoKm51bV9yZWdzKSsrO1xcbkBAIC0xNzI5LDExICsxNzMyLDIzIEBAIHZvaWQgb3R4Ml9xb3NfY29uZmlnX3R4c2NocShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuIFxcdG90eDJfcW9zX3Jvb3RfZGVzdHJveShwZnZmKTtcXG4gfVxcbiBcXG4rYm9vbCBvdHgyX3Fvc19odGJfYWN0aXZlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRyZXR1cm4gb3R4Ml9zd19ub2RlX2ZpbmQocGZ2ZiwgT1RYMl9RT1NfUk9PVF9DTEFTU0lEKTtcXG4rfVxcbitcXG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKVxcbiB7XFxuIFxcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbiBcXHRpbnQgcmVzO1xcbiBcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpb19yYXRlX2xpbWl0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBodGItXFx1MDAzZWNvbW1hbmQgIT0gVENfSFRCX0RFU1RST1kpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi1cXHUwMDNlZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwiSFRCIG9mZmxvYWQgY2Fubm90IGJlIHVzZWQgd2l0aCBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgYWN0aXZlXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0c3dpdGNoIChodGItXFx1MDAzZWNvbW1hbmQpIHtcXG4gXFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxcbiBcXHRcXHRyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLVxcdTAwM2VwYXJlbnRfY2xhc3NpZCxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXFxuaW5kZXggMjIxYmQwNDM4ZjYwMy4uYzc3N2NjNDJlYWM5YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmhcXG5AQCAtMjMsNiArMjMsNyBAQCBlbnVtIHFvc19zbXFfb3BlcmF0aW9ucyB7XFxuIHU2NCBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwoc3RydWN0IG90eDJfbmljICpuaWMsIHU2NCBtYXhyYXRlLCB1MzIgYnVyc3QpO1xcbiBcXG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKTtcXG4rYm9vbCBvdHgyX3Fvc19odGJfYWN0aXZlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuIHZvaWQgb3R4Ml9xb3NfZnJlZV9xaWQoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeCk7XFxuIGludCBvdHgyX3Fvc19lbmFibGVfc3Eoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIzOjUzLjAwMjM2MzIzMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1Nzc2NTQyNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gVGhlcmVmb3JlLCB0aGUgY29kZSBjYW5ub3QgYmUgbWVhbmluZ2Z1bGx5IGZ1enplZCBpbiB0aGlzIGNvbnRleHQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMmViZjQzZGZhNDAwMmI0N2ZhM2Y3ZWFjYzJkNWMyZDQyODc4Y2Q0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDk6MjM6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbmluZGV4IGI4MWM0N2VhMDIzYmUuLjIyZjY0YzFlZGU5MWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuQEAgLTMzMSw4ICszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcbitcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7XG4rXHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICBcInBjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcblwiLFxuK1x0XHRcdFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuaW5kZXggY2E3M2E5NGRiNzk0My4uZGZhYmRhMTIwMWJkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuQEAgLTYxNCw2ICs2MTQsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XG4gXG4rc3RhdGljIGludFxuK290eDJfbml4X3RtcV9yZWdfd3JpdGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgY250LFxuK1x0XHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXG4rXHRcdCAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKVxuK3tcbitcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuK1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4rXHRpbnQgaSwgZXJyO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcbitcdGlmICghcmVxKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdHJlcS1cdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcbitcdHJlcS1cdTAwM2VudW1fcmVncyA9IGNudDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4rXHRcdHJlcS1cdTAwM2VyZWdbaV0gPSByZWdfYWRkcltpXTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XG4rXHR9XG4rXG4rXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xuK1x0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbitcdGludCBlcnIsIHNtcSwgaSwgY250ID0gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV07IGkrKykge1xuK1x0XHRzbXEgPSBwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcbitcbitcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuK1x0XHRjbnQrKztcbitcbitcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuK1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuK1x0XHRjbnQrKztcbitcbitcdFx0aWYgKGNudCBcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4rXHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZmFpbDtcbitcdFx0Y250ID0gMDtcbitcdH1cbitcbitcdGlmIChjbnQpIHtcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4rXHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZmFpbDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK2ZhaWw6XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKVxuK3tcbitcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuK1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4rXHRpbnQgZXJyLCBzbXEsIG4gPSAwO1xuK1x0dTY0IHJlZ19hZGRyWzJdO1xuK1x0dTY0IHJlZ192YWxbMl07XG4rXHR1NjQgcmF0ZTtcbitcbitcdGlmICghbWF4cmF0ZSBcdTAwMjZcdTAwMjYgIW1pbnJhdGUpIHtcbitcdFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuK1x0XHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0XHRyZWdfdmFsWzBdID0gMDtcbitcdFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdFx0cmVnX3ZhbFsxXSA9IDA7XG4rXHRcdHJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdH1cbitcbitcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4rXHRpZiAoIXJlcSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4rXG4rXHQvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvXG4rXHQgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYXG4rXHQgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzXG4rXHQgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGFcbitcdCAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYVxuK1x0ICogaGFyZHdhcmUgY2FwLlxuK1x0ICpcbitcdCAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksXG4rXHQgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvblxuK1x0ICogZXZlcnkgdXBkYXRlIHNvIG9taXR0ZWQgcmF0ZXMgYXJlIGFwcGxpZWQgZXhwbGljaXRseSByYXRoZXIgdGhhblxuK1x0ICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS5cbitcdCAqL1xuK1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0aWYgKG1heHJhdGUpIHtcbitcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpO1xuK1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4rXHR9XG4rXHRuKys7XG4rXG4rXHQvKiBDSVIrUElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xuK1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuK1x0aWYgKG1pbnJhdGUpIHtcbitcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xuK1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4rXHR9XG4rXHRuKys7XG4rXHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBuO1xuK1xuK1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2Zvcl9wZmMpXG4ge1xuIFx0dTE2ICgqc2NocV9saXN0KVtNQVhfVFhTQ0hRX1BFUl9GVU5DXTtcbkBAIC02NTAsNyArNzg2LDIwIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXG4gXHRcdFx0XHRcdFx0KHU2NClody1cdTAwM2VzbXFfbGlua190eXBlKTtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzKys7XG4gXHRcdC8qIE1EUSBjb25maWcgKi9cbi1cdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQpIHtcbitcdFx0XHQvKiBUT0RPOiBQcm9ncmFtIE5JWF9BRl9UTDRYX1RPUE9MT0dZIG9uIFRMNFswXS4gTVFQUklPXG4rXHRcdFx0ICogcGFyZW50cyBldmVyeSBNRFEgdW5kZXIgdGhlIHNhbWUgVEw0IHdpdGggc2NoZWR1bGVcbitcdFx0XHQgKiBwcmlvcml0eSAwLCBzbyBzaWJsaW5nIGFyYml0cmF0aW9uIGRlcGVuZHMgb24gdGhlIFRMNFxuK1x0XHRcdCAqIHRvcG9sb2d5IHJlZ2lzdGVyLiBPbmx5IHRoZSBIVEIgcGF0aCBwcm9ncmFtcyB0aGlzXG4rXHRcdFx0ICogdG9kYXkgYW5kIHRoZSBBRiBkb2VzIG5vdCByZXNldCBpdCBvbiBzY2hxIHJlYWxsb2MsXG4rXHRcdFx0ICogc28gYSBUTDQgcmV1c2VkIGFmdGVyIEhUQiB0ZWFyZG93biBjYW4gcmV0YWluIHN0YWxlXG4rXHRcdFx0ICogUlJfUFJJTy9QUklPX0FOQ0hPUiBhbmQgc3RhcnZlIHNvbWUgVFggcXVldWVzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcbitcdFx0fVxuK1xuIFx0XHRyZXEtXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xuIFx0XHRyZXEtXHUwMDNlcmVndmFsWzFdID0gcGFyZW50IFx1MDAzY1x1MDAzYyAxNjtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzKys7XG5AQCAtNzc4LDYgKzkyNyw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XG4gXHR9XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fcmF0ZV9saW1pdClcbitcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcbiBcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFx1MDAyNnBmdmYtXHUwMDNlbWJveCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5pbmRleCBlZWNlZTYxMmI3YjJjLi5jZjFjZDM5MWJmNTJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5AQCAtNTE1LDYgKzUxNSwxMiBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xuIFx0dTY0XHRcdFx0ZmxhZ3M7XG4gXHR1NjRcdFx0XHQqY3Ffb3BfYWRkcjtcbiBcbitcdHUzMlx0XHRcdG1xcHJpb19mbGFncztcbitcdHU2NFx0XHRcdCptcXByaW9fbWluX3JhdGU7XG4rXHR1NjRcdFx0XHQqbXFwcmlvX21heF9yYXRlO1xuK1x0Ym9vbFx0XHRcdG1xcHJpb19yYXRlX2xpbWl0O1xuK1x0Ym9vbFx0XHRcdG1xcHJpb19za2lwX3RlYXJkb3duO1xuK1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgKzEyNTIsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXG4rXHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li44MzJmMDVjZjEyOWVlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxuIFx0dTggb2xkX3BmY19lbjtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fcmF0ZV9saW1pdCBcdTAwMjZcdTAwMjYgcGZjLVx1MDAzZXBmY19lbikge1xuK1x0XHRuZXRkZXZfZXJyKGRldixcbitcdFx0XHQgICBcIlBGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRvbGRfcGZjX2VuID0gcGZ2Zi1cdTAwM2VwZmNfZW47XG4gXHRwZnZmLVx1MDAzZXBmY19lbiA9IHBmYy1cdTAwM2VwZmNfZW47XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5pbmRleCBhMDM0MGYzNDIyYmY5Li5jMTMxN2ZiY2Q4NDg0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbkBAIC0yODcsNiArMjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fcmF0ZV9saW1pdCBcdTAwMjZcdTAwMjZcbitcdCAgICAoY2hhbm5lbC1cdTAwM2V0eF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxuK1x0ICAgICBjaGFubmVsLVx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXHUwMDNlaHcucnhfcXVldWVzKSkge1xuK1x0XHRuZXRkZXZfaW5mbyhkZXYsXG4rXHRcdFx0ICAgIFwiTm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4gXHRpZiAoaWZfdXApXG4gXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKGRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IGM5OTVmMjkwMDg1OTAuLjcwYzk1ZTljNWJmODYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5AQCAtMTk4MCw2ICsxOTgwLDEwIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZyZWVfbWVtO1xuIFxuK1x0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZnJlZV9odztcbitcbiBcdC8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqL1xuIFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcdTAwM2MgcGYtXHUwMDNlaHcuY2ludF9jbnQ7IHFpZHgrKykge1xuIFx0XHRjcV9wb2xsID0gXHUwMDI2cXNldC1cdTAwM2VuYXBpW3FpZHhdO1xuQEAgLTIxNDAsNiArMjE0NCw3IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGZyZWVfaXJxKHZlYywgcGYpO1xuIGVycl9kaXNhYmxlX25hcGk6XG4gXHRvdHgyX2Rpc2FibGVfbmFwaShwZik7XG4rZXJyX2ZyZWVfaHc6XG4gXHRvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHBmKTtcbiBlcnJfZnJlZV9tZW06XG4gXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xuQEAgLTI4NDYsNiArMjg1MSwxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLVx1MDAzZW5ldGRldik7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xuIFxuK1x0aWYgKHByb2cgXHUwMDI2XHUwMDI2IHBmLVx1MDAzZW1xcHJpb19yYXRlX2xpbWl0KSB7XG4rXHRcdG5ldGRldl9lcnIoZGV2LFxuK1x0XHRcdCAgIFwiWERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbiBcdGlmIChwcm9nIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlbXR1IFx1MDAzZSBNQVhfWERQX01UVSkge1xuIFx0XHRuZXRkZXZfd2FybihkZXYsIFwiSnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbmluZGV4IDAzOWZkNDdlYmY1MjIuLjViZDk1ZjA2MTY2MjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5AQCAtMTYsNiArMTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfbWlycmVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNfYWN0L3RjX3ZsYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcHY2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImNuMTBrLmhcIlxuICNpbmNsdWRlIFwib3R4Ml9jb21tb24uaFwiXG5AQCAtMzEsNiArMzIsOCBAQFxuIFxuICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlBcdFx0KC0xVSlcbiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUU1x0XHQ4XG4rLyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqL1xuKyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFNcdCgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpXG4gXG4gc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxuIFx0XHRcdFx0ICAgICAgdTMyICpidXJzdF9leHAsIHUzMiAqYnVyc3RfbWFudGlzc2EpXG5AQCAtNjEsNiArNjQsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXG4gXHRcdFx0KmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgXHUwMDNjXHUwMDNjICgqYnVyc3RfZXhwIC0gNykpO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuK1x0XHQvKiBidXJzdCAwOiBsYXJnZXN0IGVuY29kYWJsZSBidXJzdCAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb25cbitcdFx0ICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LlxuK1x0XHQgKi9cbiBcdFx0KmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDtcbiBcdFx0KmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhO1xuIFx0fVxuQEAgLTE2MDAsMTQgKzE2MDYsNDYyIEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgIG5pYywgbmljLCBpbmdyZXNzKTtcbiB9XG4gXG4rLyogRnJlZSB0aGUgcGVyLXF1ZXVlIG1pbi9tYXggcmF0ZSBjYWNoZXMuICovXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgcGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUpO1xuK1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUpO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgPSBOVUxMO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUgPSBOVUxMO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fZmxhZ3MgPSAwO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4rXG4rXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuK1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4rXHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSksXG4rXHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbitcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKSxcbitcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKSB7XG4rXHRcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0aW50IGx2bCwgaWR4O1xuK1xuK1x0Zm9yIChsdmwgPSAwOyBsdmwgXHUwMDNjIE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwrKykge1xuK1x0XHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgcGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W2x2bF07IGlkeCsrKSB7XG4rXHRcdFx0aWYgKHBmdmYtXHUwMDNlaHcudHhzY2hxX2xpc3RbbHZsXVtpZHhdKVxuK1x0XHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rLyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsXG4rICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb25cbisgKiBleHBsaWNpdCBtcXByaW8gdGVhcmRvd24gKHRjIHFkaXNjIGRlbCkgYW5kIGVycm9yIGNsZWFudXAsIG5vdCBvblxuKyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLlxuKyAqL1xuK2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW9fcmF0ZV9saW1pdClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAob3R4Ml90eHNjaHFfaXNfYWxsb2NhdGVkKHBmdmYpKVxuK1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4rXG4rXHRwZnZmLVx1MDAzZW1xcHJpb19yYXRlX2xpbWl0ID0gZmFsc2U7XG4rXHRwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duID0gZmFsc2U7XG4rXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIDApO1xuK1x0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuK1x0aW50IHR4cSwgZXJyO1xuK1xuK1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpb19yYXRlX2xpbWl0KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZvciAodHhxID0gMDsgdHhxIFx1MDAzYyBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXG4rXHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19mbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4rXHRcdFx0bWluX3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZVt0eHFdO1xuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGVbdHhxXTtcbitcbitcdFx0aWYgKCFtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgIW1heF9yYXRlKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsXG4rXHRcdFx0XHRcdFx0ICAgbWF4X3JhdGUpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXFxuXCIsXG4rXHRcdFx0XHQgICB0eHEsIGVycik7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpb1xuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxuKyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLlxuKyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS4gIFRoZSBmdWxsIHN0b3Avb3BlbiBjeWNsZSBjbGVhcnNcbisgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XG4rICogdHJhZmZpYy4gIElmIG9wZW4gZmFpbHMsIG5ldGlmX2Nsb3NlKCkgY2xlYXJzIElGRl9VUCBhbmQgbGVhdmVzIHRoZVxuKyAqIGludGVyZmFjZSBhZG1pbmlzdHJhdGl2ZWx5IGRvd24uXG4rICovXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXG4re1xuK1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHM7XG4rXHRpbnQgZXJyO1xuK1xuK1x0bmV0ZGV2X2luZm8obmV0ZGV2LFxuK1x0XHQgICAgXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcblwiKTtcbitcbitcdGVyciA9IG9wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqL1xuK1x0aWYgKHJhdGVfbGltaXQpXG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQgPSB0cnVlO1xuK1xuK1x0ZXJyID0gb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGludCBkb3duX2VycjtcbitcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXG5cIixcbitcdFx0XHQgICBlcnIpO1xuK1x0XHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XG4rXHRcdGlmIChkb3duX2VycilcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgc2hhcGVycyBhZnRlciByZXN0YXJ0IGVycm9yOiAlZFxcblwiLFxuK1x0XHRcdFx0ICAgZG93bl9lcnIpO1xuK1x0XHQvKiBDYWxsZXIgaG9sZHMgbmV0ZGV2L1JUTkwgbG9jazsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suICovXG4rXHRcdG5ldGlmX2Nsb3NlKG5ldGRldik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgdTY0IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKHU2NCByYXRlLCB1MzIgcWNvdW50KVxuK3tcbitcdGlmICghcmF0ZSB8fCBxY291bnQgXHUwMDNjPSAxKVxuK1x0XHRyZXR1cm4gcmF0ZTtcbitcbitcdHJldHVybiBkaXZfdTY0KHJhdGUsIHFjb3VudCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1NjQgcmF0ZSxcbitcdFx0XHRcdFx0dTMyIHFjb3VudCwgaW50IHRjLCBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdGlmICghcmF0ZSB8fCBxY291bnQgXHUwMDNjPSAxIHx8IHJhdGUgXHUwMDNlPSBxY291bnQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdCAgIFwibXFwcmlvOiAlcyByYXRlICVsbHUgZm9yIHRjICVkIHRvbyBzbWFsbCBmb3IgJXUgcXVldWVzXFxuXCIsXG4rXHRcdCAgIG5hbWUsIHJhdGUsIHRjLCBxY291bnQpO1xuK1x0cmV0dXJuIC1FSU5WQUw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpXG4re1xuK1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcdGludCB0YywgdHhxO1xuK1xuK1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBudW1fdHhxKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcblwiLFxuK1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAobnVtX3R4cSBcdTAwM2UgTUFYX1RYU0NIUV9QRVJfRlVOQykge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIk51bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XFxuXCIsXG4rXHRcdFx0ICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdGZvciAodHhxID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICsgcWNvdW50OyB0eHErKykge1xuK1x0XHRcdGlmICh0eHEgXHUwMDNlPSBudW1fdHhxKSB7XG4rXHRcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdFx0ICAgXCJtcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXG5cIixcbitcdFx0XHRcdFx0ICAgdHhxLCBudW1fdHhxKTtcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpXG4re1xuK1x0dTY0IG1icHM7XG4rXG4rXHRpZiAoIXJhdGVfYnl0ZXNfcHMpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2UgZGl2X3U2NChVNjRfTUFYLCA4KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0bWJwcyA9IG90eDJfY29udmVydF9yYXRlKHJhdGVfYnl0ZXNfcHMpO1xuK1x0cmV0dXJuIG1icHMgXHUwMDNjPSAyIHx8IGlsb2cyKG1icHMgLyAyKSBcdTAwM2M9IE1BWF9SQVRFX0VYUE9ORU5UO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbitcdFx0XHRcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4re1xuK1x0Ym9vbCBoYWRfbXFwcmlvID0gcGZ2Zi1cdTAwM2VtcXByaW9fcmF0ZV9saW1pdDtcbitcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuK1x0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbitcdGludCBkb3duX2VyciwgZXJyO1xuK1xuK1x0cW9wdC1cdTAwM2VodyA9IDA7XG4rXG4rXHQvKiB0YyBxZGlzYyByZXBsYWNlIGdyYWZ0cyB0aGUgbmV3IG1xcHJpbyBiZWZvcmUgZGVzdHJveWluZyB0aGUgb2xkXG4rXHQgKiBvbmUuIFRoZSBuZXcgY29uZmlndXJhdGlvbiBoYXMgYWxyZWFkeSByZXByb2dyYW1tZWQgaGFyZHdhcmUgYW5kXG4rXHQgKiBzZXQgbXFwcmlvX3JhdGVfbGltaXQsIHNvIGlnbm9yZSB0ZWFyZG93biBmcm9tXG4rXHQgKiB0aGUgcmVwbGFjZWQgcWRpc2MuXG4rXHQgKi9cbitcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duKSB7XG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvX3NraXBfdGVhcmRvd24gPSBmYWxzZTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqL1xuK1x0aWYgKCFoYWRfbXFwcmlvKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbitcbitcdGlmIChpZl91cCkge1xuK1x0XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGRvd25fZXJyO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdGJvb2wgcmVwbGFjaW5nID0gcGZ2Zi1cdTAwM2VtcXByaW9fcmF0ZV9saW1pdDtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xuK1xuK1x0aWYgKCFxb3B0LVx1MDAzZWh3KVxuK1x0XHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbitcbitcdGlmICghaWZfdXApIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChtcXByaW8tXHUwMDNlc2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcblwiLCBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXHUwMDNlcGRldikpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChwZnZmLVx1MDAzZXBmY19lbikge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAocGZ2Zi1cdTAwM2V4ZHBfcHJvZykge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdG1pbl9yYXRlID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4rXHRcdFx0bWF4X3JhdGUgPSBtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdO1xuK1xuK1x0XHRpZiAobWluX3JhdGUgXHUwMDI2XHUwMDI2IG1heF9yYXRlIFx1MDAyNlx1MDAyNiBtaW5fcmF0ZSBcdTAwM2UgbWF4X3JhdGUpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxuXCIsXG4rXHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSkge1xuK1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBtaW5fcmF0ZSxcbitcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsXG4rXHRcdFx0XHRcdFx0XHQgICBcIm1pblwiKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSkge1xuK1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBtYXhfcmF0ZSxcbitcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsXG4rXHRcdFx0XHRcdFx0XHQgICBcIm1heFwiKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1pbl9yYXRlLFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgICAgcWNvdW50KSkpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBleGNlZWRzIGhhcmR3YXJlIGxpbWl0XFxuXCIsXG4rXHRcdFx0XHQgICBtaW5fcmF0ZSwgdGMpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQob3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobWF4X3JhdGUsXG4rXHRcdFx0XHRcdFx0XHRcdCAgICAgICBxY291bnQpKSkge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGV4Y2VlZHMgaGFyZHdhcmUgbGltaXRcXG5cIixcbitcdFx0XHRcdCAgIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtXHUwMDNlbmV0ZGV2LCB0cnVlKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBxb3B0KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIG90eDJfbXFwcmlvX3VwKCkgbWF5IGhhdmUgcmVzdG9yZWQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZHVyaW5nXG4rXHQgKiB0aGUgcmVzdGFydCBhYm92ZS4gQ2xlYXIgZXZlcnkgTURRIHNoYXBlciBiZWZvcmUgYXBwbHlpbmcgdGhlIG5ld1xuK1x0ICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGVcbitcdCAqIGxpbWl0cyBpbiBoYXJkd2FyZS5cbitcdCAqL1xuK1x0aWYgKG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChwZnZmKSkge1xuK1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fZmxhZ3MgPSBtcXByaW8tXHUwMDNlZmxhZ3M7XG4rXG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YysrKSB7XG4rXHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbitcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuK1xuK1x0XHQvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBwYXNzZWQgYXMgemVybyBhbmQgYm90aCBNRFFcbitcdFx0ICogc2hhcGVyIHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZDsgc2VlXG4rXHRcdCAqIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKS5cbitcdFx0ICovXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdG1pbl9yYXRlID0gb3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXSxcbitcdFx0XHRcdFx0XHRcdCAgICAgIHFjb3VudCk7XG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gb3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXSxcbitcdFx0XHRcdFx0XHRcdCAgICAgIHFjb3VudCk7XG4rXG4rXHRcdGZvciAodHhxID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICsgcWNvdW50OyB0eHErKykge1xuK1x0XHRcdG5ldGRldl9kYmcobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcXG5cIixcbitcdFx0XHRcdCAgIHRjLCB0eHEsIG1pbl9yYXRlLCBtYXhfcmF0ZSk7XG4rXG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcbitcbitcdFx0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSxcbitcdFx0XHRcdFx0XHRcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdGdvdG8gY2xlYW51cDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBxb3B0LVx1MDAzZW51bV90Yyk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgaSsrKVxuK1x0XHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcW9wdC1cdTAwM2Vjb3VudFtpXSwgcW9wdC1cdTAwM2VvZmZzZXRbaV0pO1xuK1xuK1x0cW9wdC1cdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcbitcbitcdGlmIChyZXBsYWNpbmcpXG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvX3NraXBfdGVhcmRvd24gPSB0cnVlO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rY2xlYW51cDpcbitcdG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpXG4re1xuK1x0c3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTtcbitcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcztcbitcbitcdGlmIChiYXNlLVx1MDAzZXR5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRjYXBzID0gYmFzZS1cdTAwM2VjYXBzO1xuK1x0Y2Fwcy1cdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuIFx0XHQgIHZvaWQgKnR5cGVfZGF0YSlcbiB7XG4gXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgVENfUVVFUllfQ0FQUzpcbitcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XG4rXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcbitcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbmluZGV4IDY5YzA5MTFlMjhlOTEuLmY3NjkzZjAyYTA3YzQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuQEAgLTExOCw2ICsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdC8qIGNvbmZpZ3VyZSBQSVIgKi9cbiBcdG1heHJhdGUgPSAobm9kZS1cdTAwM2VyYXRlIFx1MDAzZSBub2RlLVx1MDAzZWNlaWwpID8gbm9kZS1cdTAwM2VyYXRlIDogbm9kZS1cdTAwM2VjZWlsO1xuIFxuK1x0LyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuXG4rXHQgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLlxuK1x0ICovXG4gXHRjZmctXHUwMDNlcmVndmFsWypudW1fcmVnc10gPVxuIFx0XHRvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgbWF4cmF0ZSwgNjU1MzYpO1xuIFx0KCpudW1fcmVncykrKztcbkBAIC0xNzI5LDExICsxNzMyLDIzIEBAIHZvaWQgb3R4Ml9xb3NfY29uZmlnX3R4c2NocShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRvdHgyX3Fvc19yb290X2Rlc3Ryb3kocGZ2Zik7XG4gfVxuIFxuK2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0cmV0dXJuIG90eDJfc3dfbm9kZV9maW5kKHBmdmYsIE9UWDJfUU9TX1JPT1RfQ0xBU1NJRCk7XG4rfVxuK1xuIGludCBvdHgyX3NldHVwX3RjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKmh0YilcbiB7XG4gXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdGludCByZXM7XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fcmF0ZV9saW1pdCBcdTAwMjZcdTAwMjZcbitcdCAgICBodGItXHUwMDNlY29tbWFuZCAhPSBUQ19IVEJfREVTVFJPWSkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoaHRiLVx1MDAzZWV4dGFjayxcbitcdFx0XHRcdCAgIFwiSFRCIG9mZmxvYWQgY2Fubm90IGJlIHVzZWQgd2l0aCBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgYWN0aXZlXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRzd2l0Y2ggKGh0Yi1cdTAwM2Vjb21tYW5kKSB7XG4gXHRjYXNlIFRDX0hUQl9DUkVBVEU6XG4gXHRcdHJldHVybiBvdHgyX3Fvc19yb290X2FkZChwZnZmLCBodGItXHUwMDNlcGFyZW50X2NsYXNzaWQsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG5pbmRleCAyMjFiZDA0MzhmNjAzLi5jNzc3Y2M0MmVhYzljIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmhcbkBAIC0yMyw2ICsyMyw3IEBAIGVudW0gcW9zX3NtcV9vcGVyYXRpb25zIHtcbiB1NjQgb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1NjQgbWF4cmF0ZSwgdTMyIGJ1cnN0KTtcbiBcbiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpO1xuK2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4gdm9pZCBvdHgyX3Fvc19mcmVlX3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcbiBpbnQgb3R4Ml9xb3NfZW5hYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjM6NTMuMDAyMzY0MzUyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk2MjE0MzUxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogTWFydmVsbCBPY3Rlb25UWDIgTklDIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkgaGF2ZSBhIHBhdGNoIGhlcmUgdGhhdCBhZGRzIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBzdXBwb3J0IHRvIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNgLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNgLCBhbmQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNgLCB3aGljaCB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBzcGVjaWZpYyBwaWVjZSBvZiBoYXJkd2FyZTogdGhlIE9jdGVvblRYMi5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyBkcml2ZXIgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVU/IFRoZSBPY3Rlb25UWDIgaXMgYSBoYXJkd2FyZSBOSUMsIGEgUENJZSBkZXZpY2UsIHNvIHRoYXQgcmFpc2VzIGEgcmVkIGZsYWcgcmlnaHQgYXdheS4gSXMgdGhpcyBvbmUgb2YgdGhvc2UgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgdGhhdCByZXF1aXJlcyBhICpwaHlzaWNhbCogUENJZSBjYXJkLCBzb21ldGhpbmcgbm90IGVtdWxhdGVkIGJ5IHN0YW5kYXJkIFFFTVU/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgdGhlIGNhc2UsIGFzIE9jdGVvblRYMiBpcyBhIHBoeXNpY2FsIGhhcmR3YXJlIE5JQy5cblxuVGhlIGluc3RydWN0aW9ucyBJIGhhdmUgZXhwbGljaXRseSBjYWxsIG91dCBzaXR1YXRpb25zIGxpa2UgdGhpcywgc3BlY2lmaWNhbGx5IG1lbnRpb25pbmcgXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNvbmZpcm0uIEkgbmVlZCB0byBtYWtlIHN1cmUgT2N0ZW9uVFgyIGlzbid0IHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlbXVsYXRlZC4gTGV0J3Mgc2VlLi4uIGl0J3MgYW4gRXRoZXJuZXQgZHJpdmVyIGZvciBNYXJ2ZWxsIE9jdGVvblRYMiBTb0NzLCBidXQgZG9lcyB0aGF0IG1lYW4gaXQncyBlbXVsYXRhYmxlPyBJIGRvdWJ0IGl0OyB0aGVzZSBhcmUgdXN1YWxseSB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIGhhcmR3YXJlLiBJIG5lZWQgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWdgIHRvIGdldCBtb3JlIGRldGFpbHMgb24gaXRzIGNoYXJhY3RlcmlzdGljcy5cblxuR2l2ZW4gdGhlIGluaXRpYWwgYXNzZXNzbWVudCwgSSdtIHByZXR0eSBjb25maWRlbnQgdGhpcyBwYXRjaCBpcyBnb2luZyB0byBiZSBjbGFzc2lmaWVkIGFzICpXb3J0aEZ1enppbmc9ZmFsc2UqLCBiYXNlZCBvbiB0aGUgcmVxdWlyZW1lbnQgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ3MywiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIzOjU5Ljk2NDUxMDY2M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg3NTUyNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9DVEVPTlRYMl9BRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9Nj1jb25maWcgT0NURU9OVFgyX01CT1hcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjk6Y29uZmlnIE9DVEVPTlRYMl9BRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTAtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIFJWVSBBZG1pbiBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjI0OjAwLjIxMzI2OTg0NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjAyNzI0OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEtjb25maWcgUmV2aWV3KipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBcIkxldCdzIHJlYWQgdGhlIEtjb25maWcuXCIgVGhhdCdzIHRoZSBmaXJzdCBzdGVwLCBpc24ndCBpdD8gQmVmb3JlIGFueSBtb2RpZmljYXRpb25zLCBiZWZvcmUgYW55IGRlc2lnbiBkZWNpc2lvbnMsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uIHNwYWNlLiBJJ20gbm90IGp1c3QgKmxvb2tpbmcqIGF0IGl0LCBJJ20gbWVudGFsbHkgcGFyc2luZyBpdC4gSSdtIGFscmVhZHkgc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgZGVwZW5kZW5jaWVzLCBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IG9wdGlvbnMsIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLiBJJ20gbG9va2luZyBmb3IgdGhlIG92ZXJhbGwgc3RydWN0dXJlIOKAkyB3aGF04oCZcyB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgY29uZmlndXJhdGlvbj8gV2hhdCBhcmVhcyBkb2VzIGl0IGNvdmVyPyBJJ20gc2Nhbm5pbmcgZm9yIGZhbWlsaWFyIG1vZHVsZXMgb3IgZmVhdHVyZXMsIGFuZCBxdWlja2x5IGlkZW50aWZ5aW5nIHRob3NlIGFyZWFzIHRoYXQgSSdtIGxlc3MgY29tZm9ydGFibGUgd2l0aCBhbmQgbmVlZCB0byByZXZpc2l0IG1vcmUgY2xvc2VseS4gTXkgYnJhaW4gaXMgYWxyZWFkeSBjYWxjdWxhdGluZyB0aGUgY29tcGxleGl0eSBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gYXMgYSB3aG9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NzgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjI0OjAzLjQzMzU0NTAzNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFydmVsbCBSVlUgTmV0d29yayBkcml2ZXJzIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE9DVEVPTlRYMl9NQk9YXFxuICAgNzpcXHRcXHR0cmlzdGF0ZVxcbiAgIDg6XFx0XFxuICAgOTpcXHRjb25maWcgT0NURU9OVFgyX0FGXFxuICAxMDpcXHRcXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgUlZVIEFkbWluIEZ1bmN0aW9uIGRyaXZlclxcXCJcXG4gIDExOlxcdFxcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxcbiAgMTI6XFx0XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uICg2NEJJVCBcXHUwMDI2XFx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgMTU6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgMTY6XFx0XFx0aGVscFxcbiAgMTc6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJ3MgT2N0ZW9uVFgyIFJlc291cmNlIFZpcnR1YWxpemF0aW9uXFxuICAxODpcXHRcXHQgIFVuaXQncyBhZG1pbiBmdW5jdGlvbiBtYW5hZ2VyIHdoaWNoIG1hbmFnZXMgYWxsIFJWVSBIVyByZXNvdXJjZXNcXG4gIDE5OlxcdFxcdCAgYW5kIHByb3ZpZGVzIGEgbWVkaXVtIHRvIG90aGVyIFBGL1ZGcyB0byBjb25maWd1cmUgSFcuIFNob3VsZCBiZVxcbiAgMjA6XFx0XFx0ICBlbmFibGVkIGZvciBvdGhlciBSVlUgZGV2aWNlIGRyaXZlcnMgdG8gd29yay5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y29uZmlnIE5EQ19ESVNfRFlOQU1JQ19DQUNISU5HXFxuICAyMzpcXHRcXHRib29sIFxcXCJEaXNhYmxlIGNhY2hpbmcgb2YgZHluYW1pYyBlbnRyaWVzIGluIE5EQ1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gT0NURU9OVFgyX0FGXFxuICAyNTpcXHRcXHRkZWZhdWx0IG5cXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgVGhpcyBjb25maWcgb3B0aW9uIGRpc2FibGVzIGNhY2hpbmcgb2YgZHluYW1pYyBlbnRyaWVzIHN1Y2ggYXMgTklYIFNRRXNcXG4gIDI4OlxcdFxcdCAgLCBOUEEgc3RhY2sgcGFnZXMgZXRjIGluIE5EQy4gQWxzbyBsb2NrcyBkb3duIE5JWCBTUS9DUS9SUS9SU1MgYW5kXFxuICAyOTpcXHRcXHQgIE5QQSBBdXJhL1Bvb2wgY29udGV4dHMuXFxuICAzMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjQ6MDMuNDMzNjM4NTU1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM0NTIwODUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBOb3QgV29ydGggRnV6emluZyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEkndmUgZ290IGEgaGFyZHdhcmUgZHJpdmVyIGhlcmUg4oCTIHNwZWNpZmljYWxseSwgaXQncyBhIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVSBkcml2ZXIuIFRoYXQgYXV0b21hdGljYWxseSBtYWtlcyBtZSB0aGluayB2ZW5kb3Itc3BlY2lmaWMsIHdoaWNoIGlzIGEga2V5IGZsYWcgZm9yIHRoaXMgdHlwZSBvZiBhc3Nlc3NtZW50LiBJIHNlZSBpdCBkZXBlbmRzIG9uIFBDSSBhbmQgZWl0aGVyIEFSTTY0IG9yIGEgYENPTVBJTEVfVEVTVGAgZmxhZyDigJMgYm90aCBvZiB3aGljaCBwb2ludCB0byBhIGZhaXJseSBzcGVjaWFsaXplZCBlbnZpcm9ubWVudC5cblxuVGhlbiBJIGhpdCB0aGUgbmFpbCBvbiB0aGUgaGVhZDogaXQgKnJlcXVpcmVzKiBhY3R1YWwgcGh5c2ljYWwgUENJZSBoYXJkd2FyZS4gTm8gUUVNVSBlbXVsYXRpb24gaGVyZSwgd2hpY2ggaXMgYSBodWdlIHJlZCBmbGFnLiBMb29raW5nIGF0IHRoZSBleGNsdXNpb24gcnVsZXMsIHRoaXMgaW5zdGFudGx5IHJpbmdzIGEgYmVsbC4gSXQncyBhbG1vc3QgdmVyYmF0aW0gdGhlIHR5cGUgb2YgZHJpdmVyIG91dGxpbmVkIGluIHRoYXQgZXhjbHVzaW9uOiBcIkNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCJcblxuR2l2ZW4gdGhpcywgdGhlcmUncyBubyB3YXkgdGhpcyBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHdpdGhpbiB0aGUgY29uc3RyYWludHMgb2Ygb3VyIGN1cnJlbnQgc2V0dXAuIFBoeXNpY2FsIGhhcmR3YXJlIGRlcGVuZGVuY3kgYW5kIHRoZSBsaW1pdGF0aW9ucyBvZiBRRU1VIGltbWVkaWF0ZWx5IHB1dCB0aGlzIGludG8gdGhlIFwiTm90IFdvcnRoIEZ1enppbmdcIiBjYXRlZ29yeS4gVGhlcmVmb3JlLCBJIHdpbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE0NiwiT3V0cHV0VG9rZW5zIjo4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjI0OjA4Ljc3ODg1MTU3MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgY2Fubm90IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQgaW4gdGhpcyBjb250ZXh0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgY2Fubm90IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQgaW4gdGhpcyBjb250ZXh0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjQ6MDguNzc4OTA5NDIzWiIsIlNlcSI6OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowfthjk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 09:06:51 +0000 UTC FinishedAt: 2026-08-11 09:24:10 +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+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgY2Fubm90IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQgaW4gdGhpcyBjb250ZXh0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQyZWJmNDNkZmE0MDAyYjQ3ZmEzZjdlYWNjMmQ1YzJkNDI4NzhjZDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwOToyMzo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbmluZGV4IGI4MWM0N2VhMDIzYmUuLjIyZjY0YzFlZGU5MWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuQEAgLTMzMSw4ICYjNDM7MzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpXG4mIzQzO1x0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHtcbiYjNDM7XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7cGNpZnVuYyAleCBtYXAgcGNpZnVuYyAleCBub3QgZXF1YWwsIGx2bD0ldSBzY2hxPSV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG5pbmRleCBjYTczYTk0ZGI3OTQzLi5kZmFiZGExMjAxYmRkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG5AQCAtNjE0LDYgJiM0Mzs2MTQsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XG4gXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7b3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsXG4mIzQzO1x0XHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXG4mIzQzO1x0XHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuJiM0MztcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuJiM0MztcdGludCBpLCBlcnI7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuJiM0MztcdGlmICghcmVxKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuJiM0MztcdHJlcS1cdTAwM2VudW1fcmVncyA9IGNudDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ1tpXSA9IHJlZ19hZGRyW2ldO1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4mIzQzO1x0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbiYjNDM7XHRpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzbXEgPSBwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcbiYjNDM7XG4mIzQzO1x0XHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuJiM0MztcdFx0Y250JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuJiM0MztcdFx0Y250JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY250IFx1MDAzYyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBmYWlsO1xuJiM0MztcdFx0Y250ID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjbnQpIHtcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuJiM0MztcdFx0XHRcdFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGZhaWw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7ZmFpbDpcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuJiM0MztcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuJiM0MztcdGludCBlcnIsIHNtcSwgbiA9IDA7XG4mIzQzO1x0dTY0IHJlZ19hZGRyWzJdO1xuJiM0MztcdHU2NCByZWdfdmFsWzJdO1xuJiM0MztcdHU2NCByYXRlO1xuJiM0MztcbiYjNDM7XHRpZiAoIW1heHJhdGUgXHUwMDI2XHUwMDI2ICFtaW5yYXRlKSB7XG4mIzQzO1x0XHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4mIzQzO1x0XHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFswXSA9IDA7XG4mIzQzO1x0XHRyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFsxXSA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuJiM0MztcdGlmICghcmVxKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuJiM0MztcbiYjNDM7XHQvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvXG4mIzQzO1x0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxuJiM0MztcdCAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnNcbiYjNDM7XHQgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGFcbiYjNDM7XHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcbiYjNDM7XHQgKiBoYXJkd2FyZSBjYXAuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxuJiM0MztcdCAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uXG4mIzQzO1x0ICogZXZlcnkgdXBkYXRlIHNvIG9taXR0ZWQgcmF0ZXMgYXJlIGFwcGxpZWQgZXhwbGljaXRseSByYXRoZXIgdGhhblxuJiM0MztcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuJiM0MztcdGlmIChtYXhyYXRlKSB7XG4mIzQzO1x0XHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0biYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdC8qIENJUiYjNDM7UElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xuJiM0MztcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbiYjNDM7XHRpZiAobWlucmF0ZSkge1xuJiM0MztcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4mIzQzO1x0fVxuJiM0MztcdG4mIzQzOyYjNDM7O1xuJiM0MztcdHJlcS1cdTAwM2VudW1fcmVncyA9IG47XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYylcbiB7XG4gXHR1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdO1xuQEAgLTY1MCw3ICYjNDM7Nzg2LDIwIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXG4gXHRcdFx0XHRcdFx0KHU2NClody1cdTAwM2VzbXFfbGlua190eXBlKTtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzJiM0MzsmIzQzOztcbiBcdFx0LyogTURRIGNvbmZpZyAqL1xuLVx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQpIHtcbiYjNDM7XHRcdFx0LyogVE9ETzogUHJvZ3JhbSBOSVhfQUZfVEw0WF9UT1BPTE9HWSBvbiBUTDRbMF0uIE1RUFJJT1xuJiM0MztcdFx0XHQgKiBwYXJlbnRzIGV2ZXJ5IE1EUSB1bmRlciB0aGUgc2FtZSBUTDQgd2l0aCBzY2hlZHVsZVxuJiM0MztcdFx0XHQgKiBwcmlvcml0eSAwLCBzbyBzaWJsaW5nIGFyYml0cmF0aW9uIGRlcGVuZHMgb24gdGhlIFRMNFxuJiM0MztcdFx0XHQgKiB0b3BvbG9neSByZWdpc3Rlci4gT25seSB0aGUgSFRCIHBhdGggcHJvZ3JhbXMgdGhpc1xuJiM0MztcdFx0XHQgKiB0b2RheSBhbmQgdGhlIEFGIGRvZXMgbm90IHJlc2V0IGl0IG9uIHNjaHEgcmVhbGxvYyxcbiYjNDM7XHRcdFx0ICogc28gYSBUTDQgcmV1c2VkIGFmdGVyIEhUQiB0ZWFyZG93biBjYW4gcmV0YWluIHN0YWxlXG4mIzQzO1x0XHRcdCAqIFJSX1BSSU8vUFJJT19BTkNIT1IgYW5kIHN0YXJ2ZSBzb21lIFRYIHF1ZXVlcy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0cmVxLVx1MDAzZXJlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTtcbiBcdFx0cmVxLVx1MDAzZXJlZ3ZhbFsxXSA9IHBhcmVudCBcdTAwM2NcdTAwM2MgMTY7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncyYjNDM7JiM0Mzs7XG5AQCAtNzc4LDYgJiM0Mzs5MjcsOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRcdHJlcS1cdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250O1xuIFx0fVxuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19yYXRlX2xpbWl0KVxuJiM0MztcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbiYjNDM7XG4gXHRyYyA9IG90eDJfc3luY19tYm94X21zZyhcdTAwMjZwZnZmLVx1MDAzZW1ib3gpO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuaW5kZXggZWVjZWU2MTJiN2IyYy4uY2YxY2QzOTFiZjUyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuQEAgLTUxNSw2ICYjNDM7NTE1LDEyIEBAIHN0cnVjdCBvdHgyX25pYyB7XG4gXHR1NjRcdFx0XHRmbGFncztcbiBcdHU2NFx0XHRcdCpjcV9vcF9hZGRyO1xuIFxuJiM0MztcdHUzMlx0XHRcdG1xcHJpb19mbGFncztcbiYjNDM7XHR1NjRcdFx0XHQqbXFwcmlvX21pbl9yYXRlO1xuJiM0MztcdHU2NFx0XHRcdCptcXByaW9fbWF4X3JhdGU7XG4mIzQzO1x0Ym9vbFx0XHRcdG1xcHJpb19yYXRlX2xpbWl0O1xuJiM0MztcdGJvb2xcdFx0XHRtcXByaW9fc2tpcF90ZWFyZG93bjtcbiYjNDM7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dcdFx0KnhkcF9wcm9nO1xuIFx0c3RydWN0IG90eDJfcXNldFx0cXNldDtcbiBcdHN0cnVjdCBvdHgyX2h3XHRcdGh3O1xuQEAgLTEyNDYsNiAmIzQzOzEyNTIsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcbiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLFxuJiM0MztcdFx0XHRcdCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpO1xuJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4mIzQzO2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4mIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIHZvaWQgb3R4Ml9xdWV1ZV92Zl93b3JrKHN0cnVjdCBtYm94ICptdywgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hfd3EsXG4gXHRcdFx0aW50IGZpcnN0LCBpbnQgbWRldnMsIHU2NCBpbnRyKTtcbiBpbnQgb3R4Ml9kZWxfbWNhbV9mbG93X2VudHJ5KHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MTYgZW50cnksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcbmluZGV4IGYxMTBkZmE0MjM2MDUuLjgzMmYwNWNmMTI5ZWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5AQCAtNDEzLDYgJiM0Mzs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxuIFx0dTggb2xkX3BmY19lbjtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQgXHUwMDI2XHUwMDI2IHBmYy1cdTAwM2VwZmNfZW4pIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIoZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtQRkM6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG9sZF9wZmNfZW4gPSBwZnZmLVx1MDAzZXBmY19lbjtcbiBcdHBmdmYtXHUwMDNlcGZjX2VuID0gcGZjLVx1MDAzZXBmY19lbjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbmluZGV4IGEwMzQwZjM0MjJiZjkuLmMxMzE3ZmJjZDg0ODQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuQEAgLTI4Nyw2ICYjNDM7Mjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIChjaGFubmVsLVx1MDAzZXR4X2NvdW50ICE9IHBmdmYtXHUwMDNlaHcudHhfcXVldWVzIHx8XG4mIzQzO1x0ICAgICBjaGFubmVsLVx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXHUwMDNlaHcucnhfcXVldWVzKSkge1xuJiM0MztcdFx0bmV0ZGV2X2luZm8oZGV2LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7Tm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGlmX3VwKVxuIFx0XHRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RvcChkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5pbmRleCBjOTk1ZjI5MDA4NTkwLi43MGM5NWU5YzViZjg2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuQEAgLTE5ODAsNiAmIzQzOzE5ODAsMTAgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfZnJlZV9tZW07XG4gXG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX2h3O1xuJiM0MztcbiBcdC8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqL1xuIFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcdTAwM2MgcGYtXHUwMDNlaHcuY2ludF9jbnQ7IHFpZHgmIzQzOyYjNDM7KSB7XG4gXHRcdGNxX3BvbGwgPSBcdTAwMjZxc2V0LVx1MDAzZW5hcGlbcWlkeF07XG5AQCAtMjE0MCw2ICYjNDM7MjE0NCw3IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGZyZWVfaXJxKHZlYywgcGYpO1xuIGVycl9kaXNhYmxlX25hcGk6XG4gXHRvdHgyX2Rpc2FibGVfbmFwaShwZik7XG4mIzQzO2Vycl9mcmVlX2h3OlxuIFx0b3R4Ml9mcmVlX2h3X3Jlc291cmNlcyhwZik7XG4gZXJyX2ZyZWVfbWVtOlxuIFx0b3R4Ml9mcmVlX3F1ZXVlX21lbShxc2V0KTtcbkBAIC0yODQ2LDYgJiM0MzsyODUxLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXHUwMDNlbmV0ZGV2KTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XG4gXG4mIzQzO1x0aWYgKHByb2cgXHUwMDI2XHUwMDI2IHBmLVx1MDAzZW1xcHJpb19yYXRlX2xpbWl0KSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7WERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZW10dSBcdTAwM2UgTUFYX1hEUF9NVFUpIHtcbiBcdFx0bmV0ZGV2X3dhcm4oZGV2LCBcJiMzNDtKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbmluZGV4IDAzOWZkNDdlYmY1MjIuLjViZDk1ZjA2MTY2MjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5AQCAtMTYsNiAmIzQzOzE2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNfYWN0L3RjX21pcnJlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y192bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2NuMTBrLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtvdHgyX2NvbW1vbi5oXCYjMzQ7XG5AQCAtMzEsNiAmIzQzOzMyLDggQEBcbiBcbiAjZGVmaW5lIE1DQVNUX0lOVkFMSURfR1JQXHRcdCgtMVUpXG4gI2RlZmluZSBSQVRFX01BTlRJU1NBX0JJVFNcdFx0OFxuJiM0MzsvKiBNYXggZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgxMzA4MTYgTWJwcykuICovXG4mIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFNcdCgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpXG4gXG4gc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxuIFx0XHRcdFx0ICAgICAgdTMyICpidXJzdF9leHAsIHUzMiAqYnVyc3RfbWFudGlzc2EpXG5AQCAtNjEsNiAmIzQzOzY0LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxuIFx0XHRcdCpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMIFx1MDAzY1x1MDAzYyAoKmJ1cnN0X2V4cCAtIDcpKTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxuJiM0MztcdFx0ICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LlxuJiM0MztcdFx0ICovXG4gXHRcdCpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7XG4gXHRcdCpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTtcbiBcdH1cbkBAIC0xNjAwLDE0ICYjNDM7MTYwNiw0NjIgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgbmljLCBuaWMsIGluZ3Jlc3MpO1xuIH1cbiBcbiYjNDM7LyogRnJlZSB0aGUgcGVyLXF1ZXVlIG1pbi9tYXggcmF0ZSBjYWNoZXMuICovXG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgcGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUpO1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKTtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSA9IE5VTEw7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUgPSBOVUxMO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvX2ZsYWdzID0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4mIzQzO1xuJiM0MztcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZSkge1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbHZsLCBpZHg7XG4mIzQzO1xuJiM0MztcdGZvciAobHZsID0gMDsgbHZsIFx1MDAzYyBOSVhfVFhTQ0hfTFZMX0NOVDsgbHZsJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yIChpZHggPSAwOyBpZHggXHUwMDNjIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtsdmxdOyBpZHgmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmIChwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W2x2bF1baWR4XSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsXG4mIzQzOyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uXG4mIzQzOyAqIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93biAodGMgcWRpc2MgZGVsKSBhbmQgZXJyb3IgY2xlYW51cCwgbm90IG9uXG4mIzQzOyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLlxuJiM0MzsgKi9cbiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChwZnZmKSlcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbiYjNDM7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW9fcmF0ZV9saW1pdCA9IGZhbHNlO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvX3NraXBfdGVhcmRvd24gPSBmYWxzZTtcbiYjNDM7XHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIDApO1xuJiM0MztcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0aW50IHR4cSwgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yICh0eHEgPSAwOyB0eHEgXHUwMDNjIHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7IHR4cSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuJiM0MztcdFx0XHRtaW5fcmF0ZSA9IHBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlW3R4cV07XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuJiM0MztcdFx0XHRtYXhfcmF0ZSA9IHBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlW3R4cV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgIW1heF9yYXRlKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIG1heF9yYXRlKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgdHhxLCBlcnIpO1xuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpb1xuJiM0MzsgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSlcbiYjNDM7ICogdGFrZSB0aGlzIHBhdGggdmlhIG5kb19zdG9wKCkvbmRvX29wZW4oKSBzbyBWRi1zcGVjaWZpYyBvcGVuIGxvZ2ljIChlLmcuXG4mIzQzOyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS4gIFRoZSBmdWxsIHN0b3Avb3BlbiBjeWNsZSBjbGVhcnNcbiYjNDM7ICogY2Fycmllciwgc3RvcHMgYWxsIFRYIHF1ZXVlcywgdGVhcnMgZG93biBJUlFzL05BUEkgYW5kIGRyb3BzIGluLWZsaWdodFxuJiM0MzsgKiB0cmFmZmljLiAgSWYgb3BlbiBmYWlscywgbmV0aWZfY2xvc2UoKSBjbGVhcnMgSUZGX1VQIGFuZCBsZWF2ZXMgdGhlXG4mIzQzOyAqIGludGVyZmFjZSBhZG1pbmlzdHJhdGl2ZWx5IGRvd24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRuZXRkZXZfaW5mbyhuZXRkZXYsXG4mIzQzO1x0XHQgICAgXCYjMzQ7bXFwcmlvOiByZXN0YXJ0aW5nIGludGVyZmFjZSB0byByZXByb2dyYW0gVFggc2NoZWR1bGVyOyBpbi1mbGlnaHQgdHJhZmZpYyB3aWxsIGJlIGRyb3BwZWRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvcHMtXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IGJlZm9yZSBuZG9fb3BlbigpIHNvIG90eDJfdHhzY2hfYWxsb2MoKSB3aWRlbnMgU01RIGFsbG9jYXRpb24uICovXG4mIzQzO1x0aWYgKHJhdGVfbGltaXQpXG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpb19yYXRlX2xpbWl0ID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0aW50IGRvd25fZXJyO1xuJiM0MztcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGVycik7XG4mIzQzO1x0XHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XG4mIzQzO1x0XHRpZiAoZG93bl9lcnIpXG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIGNsZWFyIHNoYXBlcnMgYWZ0ZXIgcmVzdGFydCBlcnJvcjogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgZG93bl9lcnIpO1xuJiM0MztcdFx0LyogQ2FsbGVyIGhvbGRzIG5ldGRldi9SVE5MIGxvY2s7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLiAqL1xuJiM0MztcdFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1NjQgb3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUodTY0IHJhdGUsIHUzMiBxY291bnQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXJhdGUgfHwgcWNvdW50IFx1MDAzYz0gMSlcbiYjNDM7XHRcdHJldHVybiByYXRlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZGl2X3U2NChyYXRlLCBxY291bnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTY0IHJhdGUsXG4mIzQzO1x0XHRcdFx0XHR1MzIgcWNvdW50LCBpbnQgdGMsIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXJhdGUgfHwgcWNvdW50IFx1MDAzYz0gMSB8fCByYXRlIFx1MDAzZT0gcWNvdW50KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0ICAgXCYjMzQ7bXFwcmlvOiAlcyByYXRlICVsbHUgZm9yIHRjICVkIHRvbyBzbWFsbCBmb3IgJXUgcXVldWVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgbmFtZSwgcmF0ZSwgdGMsIHFjb3VudCk7XG4mIzQzO1x0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4mIzQzO1x0aW50IHRjLCB0eHE7XG4mIzQzO1xuJiM0MztcdGlmIChxb3B0LVx1MDAzZW51bV90YyBcdTAwM2UgbnVtX3R4cSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O051bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgcW9wdC1cdTAwM2VudW1fdGMsIG51bV90eHEpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobnVtX3R4cSBcdTAwM2UgTUFYX1RYU0NIUV9QRVJfRlVOQykge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O051bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0eHEgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4mIzQzO1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAodHhxIFx1MDAzZT0gbnVtX3R4cSkge1xuJiM0MztcdFx0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgdHhxLCBudW1fdHhxKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpXG4mIzQzO3tcbiYjNDM7XHR1NjQgbWJwcztcbiYjNDM7XG4mIzQzO1x0aWYgKCFyYXRlX2J5dGVzX3BzKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIGRpdl91NjQoVTY0X01BWCwgOCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTtcbiYjNDM7XHRyZXR1cm4gbWJwcyBcdTAwM2M9IDIgfHwgaWxvZzIobWJwcyAvIDIpIFx1MDAzYz0gTUFYX1JBVEVfRVhQT05FTlQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRib29sIGhhZF9tcXByaW8gPSBwZnZmLVx1MDAzZW1xcHJpb19yYXRlX2xpbWl0O1xuJiM0MztcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuJiM0MztcdGludCBkb3duX2VyciwgZXJyO1xuJiM0MztcbiYjNDM7XHRxb3B0LVx1MDAzZWh3ID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogdGMgcWRpc2MgcmVwbGFjZSBncmFmdHMgdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlIG9sZFxuJiM0MztcdCAqIG9uZS4gVGhlIG5ldyBjb25maWd1cmF0aW9uIGhhcyBhbHJlYWR5IHJlcHJvZ3JhbW1lZCBoYXJkd2FyZSBhbmRcbiYjNDM7XHQgKiBzZXQgbXFwcmlvX3JhdGVfbGltaXQsIHNvIGlnbm9yZSB0ZWFyZG93biBmcm9tXG4mIzQzO1x0ICogdGhlIHJlcGxhY2VkIHFkaXNjLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duKSB7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duID0gZmFsc2U7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFNraXAgdGhlIG5ldGRldiByZXN0YXJ0IHdoZW4gbXFwcmlvIG9mZmxvYWQgd2FzIG5vdCBhY3RpdmUuICovXG4mIzQzO1x0aWYgKCFoYWRfbXFwcmlvKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlmX3VwKSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZG93bl9lcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRib29sIHJlcGxhY2luZyA9IHBmdmYtXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQ7XG4mIzQzO1x0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbiYjNDM7XHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXFvcHQtXHUwMDNlaHcpXG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpZl91cCkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O21xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChtcXByaW8tXHUwMDNlc2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O1Vuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4XFxuXCYjMzQ7LCBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9iaXQoUU9TX0NJUl9QSVJfU1VQUE9SVCwgXHUwMDI2cGZ2Zi1cdTAwM2Vody5jYXBfZmxhZykpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUiYjNDM7UElSIHN1cHBvcnRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGlzX290eDJfc2RwX3JlcChwZnZmLVx1MDAzZXBkZXYpKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG90eDJfcW9zX2h0Yl9hY3RpdmUocGZ2ZikpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZXBmY19lbikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZXhkcF9wcm9nKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobWluX3JhdGUgXHUwMDI2XHUwMDI2IG1heF9yYXRlIFx1MDAyNlx1MDAyNiBtaW5fcmF0ZSBcdTAwM2UgbWF4X3JhdGUpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSkge1xuJiM0MztcdFx0XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgbWluX3JhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgcWNvdW50LCB0YyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBcJiMzNDttaW5cJiMzNDspO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpIHtcbiYjNDM7XHRcdFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIG1heF9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgXCYjMzQ7bWF4XCYjMzQ7KTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1pbl9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0ICAgICAgIHFjb3VudCkpKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgZXhjZWVkcyBoYXJkd2FyZSBsaW1pdFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBtaW5fcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtYXhfcmF0ZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCAgICAgICBxY291bnQpKSkge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGV4Y2VlZHMgaGFyZHdhcmUgbGltaXRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgbWF4X3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihwZnZmLVx1MDAzZW5ldGRldiwgdHJ1ZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBxb3B0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiBvdHgyX21xcHJpb191cCgpIG1heSBoYXZlIHJlc3RvcmVkIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGR1cmluZ1xuJiM0MztcdCAqIHRoZSByZXN0YXJ0IGFib3ZlLiBDbGVhciBldmVyeSBNRFEgc2hhcGVyIGJlZm9yZSBhcHBseWluZyB0aGUgbmV3XG4mIzQzO1x0ICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGVcbiYjNDM7XHQgKiBsaW1pdHMgaW4gaGFyZHdhcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChwZnZmKSkge1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW9fZmxhZ3MgPSBtcXByaW8tXHUwMDNlZmxhZ3M7XG4mIzQzO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuJiM0MztcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuJiM0MztcbiYjNDM7XHRcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUVxuJiM0MztcdFx0ICogc2hhcGVyIHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZDsgc2VlXG4mIzQzO1x0XHQgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuJiM0MztcdFx0XHRtaW5fcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y10sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgcWNvdW50KTtcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuJiM0MztcdFx0XHRtYXhfcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y10sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgcWNvdW50KTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdG5ldGRldl9kYmcobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuJiM0MztcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4mIzQzO1xuJiM0MztcdFx0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcW9wdC1cdTAwM2VudW1fdGMpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBxb3B0LVx1MDAzZWNvdW50W2ldLCBxb3B0LVx1MDAzZW9mZnNldFtpXSk7XG4mIzQzO1xuJiM0MztcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4mIzQzO1xuJiM0MztcdGlmIChyZXBsYWNpbmcpXG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModm9pZCAqdHlwZV9kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XG4mIzQzO1xuJiM0MztcdGlmIChiYXNlLVx1MDAzZXR5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRjYXBzID0gYmFzZS1cdTAwM2VjYXBzO1xuJiM0MztcdGNhcHMtXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gaW50IG90eDJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4gXHRcdCAgdm9pZCAqdHlwZV9kYXRhKVxuIHtcbiBcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgVENfUVVFUllfQ0FQUzpcbiYjNDM7XHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfUURJU0NfSFRCOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpO1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxuJiM0MztcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbmluZGV4IDY5YzA5MTFlMjhlOTEuLmY3NjkzZjAyYTA3YzQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuQEAgLTExOCw2ICYjNDM7MTE4LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9jb25maWdfc2NoZWRfc2hhcGluZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4gXHQvKiBjb25maWd1cmUgUElSICovXG4gXHRtYXhyYXRlID0gKG5vZGUtXHUwMDNlcmF0ZSBcdTAwM2Ugbm9kZS1cdTAwM2VjZWlsKSA/IG5vZGUtXHUwMDNlcmF0ZSA6IG5vZGUtXHUwMDNlY2VpbDtcbiBcbiYjNDM7XHQvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW5cbiYjNDM7XHQgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLlxuJiM0MztcdCAqL1xuIFx0Y2ZnLVx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cbiBcdFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcbiBcdCgqbnVtX3JlZ3MpJiM0MzsmIzQzOztcbkBAIC0xNzI5LDExICYjNDM7MTczMiwyMyBAQCB2b2lkIG90eDJfcW9zX2NvbmZpZ190eHNjaHEoc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0b3R4Ml9xb3Nfcm9vdF9kZXN0cm95KHBmdmYpO1xuIH1cbiBcbiYjNDM7Ym9vbCBvdHgyX3Fvc19odGJfYWN0aXZlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBvdHgyX3N3X25vZGVfZmluZChwZnZmLCBPVFgyX1FPU19ST09UX0NMQVNTSUQpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBvdHgyX3NldHVwX3RjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKmh0YilcbiB7XG4gXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdGludCByZXM7XG4gXG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGh0Yi1cdTAwM2Vjb21tYW5kICE9IFRDX0hUQl9ERVNUUk9ZKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoaHRiLVx1MDAzZWV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtIVEIgb2ZmbG9hZCBjYW5ub3QgYmUgdXNlZCB3aXRoIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBhY3RpdmVcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRzd2l0Y2ggKGh0Yi1cdTAwM2Vjb21tYW5kKSB7XG4gXHRjYXNlIFRDX0hUQl9DUkVBVEU6XG4gXHRcdHJldHVybiBvdHgyX3Fvc19yb290X2FkZChwZnZmLCBodGItXHUwMDNlcGFyZW50X2NsYXNzaWQsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG5pbmRleCAyMjFiZDA0MzhmNjAzLi5jNzc3Y2M0MmVhYzljIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmhcbkBAIC0yMyw2ICYjNDM7MjMsNyBAQCBlbnVtIHFvc19zbXFfb3BlcmF0aW9ucyB7XG4gdTY0IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTY0IG1heHJhdGUsIHUzMiBidXJzdCk7XG4gXG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKTtcbiYjNDM7Ym9vbCBvdHgyX3Fvc19odGJfYWN0aXZlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4gaW50IG90eDJfcW9zX2dldF9xaWQoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcW9zX2ZyZWVfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpO1xuIGludCBvdHgyX3Fvc19lbmFibGVfc3Eoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkIGluIHRoaXMgY29udGV4dC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMmViZjQzZGZhNDAwMmI0N2ZhM2Y3ZWFjYzJkNWMyZDQyODc4Y2Q0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDk6MjM6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMKaW5kZXggYjgxYzQ3ZWEwMjNiZS4uMjJmNjRjMWVkZTkxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYwpAQCAtMzMxLDggJiM0MzszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsCiAJCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKLQlpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykKJiM0MzsJaWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHsKJiM0MzsJCWRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LSZndDtkZXYsCiYjNDM7CQkJCSAgICAmIzM0O3BjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxuJiMzNDssCiYjNDM7CQkJCSAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTsKIAkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMKaW5kZXggY2E3M2E5NGRiNzk0My4uZGZhYmRhMTIwMWJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMKQEAgLTYxNCw2ICYjNDM7NjE0LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB9CiBFWFBPUlRfU1lNQk9MKG90eDJfZ2V0X21hY19mcm9tX2FmKTsKIAomIzQzO3N0YXRpYyBpbnQKJiM0MztvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCwKJiM0MzsJCSAgICAgICB1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSwKJiM0MzsJCSAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKQomIzQzO3sKJiM0MzsJc3RydWN0IG1ib3ggKm1ib3ggPSAmYW1wO3BmdmYtJmd0O21ib3g7CiYjNDM7CXN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxOwomIzQzOwlpbnQgaSwgZXJyOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7CiYjNDM7CWlmICghcmVxKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7bHZsID0gTklYX1RYU0NIX0xWTF9NRFE7CiYjNDM7CXJlcS0mZ3Q7bnVtX3JlZ3MgPSBjbnQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXEtJmd0O3JlZ1tpXSA9IHJlZ19hZGRyW2ldOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbaV0gPSByZWdfdmFsW2ldOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107CiYjNDM7CXU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107CiYjNDM7CWludCBlcnIsIHNtcSwgaSwgY250ID0gMDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHBmdmYtJmd0O2h3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc21xID0gcGZ2Zi0mZ3Q7aHcudHhzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9TTVFdW2ldOwomIzQzOwomIzQzOwkJcmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFtjbnRdID0gMDsKJiM0MzsJCWNudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CQlyZWdfdmFsW2NudF0gPSAwOwomIzQzOwkJY250JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWlmIChjbnQgJmx0OyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsCiYjNDM7CQkJCQkgICAgIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBmYWlsOwomIzQzOwkJY250ID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY250KSB7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCwKJiM0MzsJCQkJCSAgICAgcmVnX2FkZHIsIHJlZ192YWwpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGZhaWw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7ZmFpbDoKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IG1ib3ggKm1ib3ggPSAmYW1wO3BmdmYtJmd0O21ib3g7CiYjNDM7CXN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxOwomIzQzOwlpbnQgZXJyLCBzbXEsIG4gPSAwOwomIzQzOwl1NjQgcmVnX2FkZHJbMl07CiYjNDM7CXU2NCByZWdfdmFsWzJdOwomIzQzOwl1NjQgcmF0ZTsKJiM0MzsKJiM0MzsJaWYgKCFtYXhyYXRlICZhbXA7JmFtcDsgIW1pbnJhdGUpIHsKJiM0MzsJCXNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTsKJiM0MzsJCXJlZ19hZGRyWzBdID0gTklYX0FGX01EUVhfUElSKHNtcSk7CiYjNDM7CQlyZWdfdmFsWzBdID0gMDsKJiM0MzsJCXJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CQlyZWdfdmFsWzFdID0gMDsKJiM0MzsJCXJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJfQomIzQzOwomIzQzOwlzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJcmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTsKJiM0MzsJaWYgKCFyZXEpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVxLSZndDtsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTsKJiM0MzsKJiM0MzsJLyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzbwomIzQzOwkgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYCiYjNDM7CSAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnMKJiM0MzsJICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhCiYjNDM7CSAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYQomIzQzOwkgKiBoYXJkd2FyZSBjYXAuCiYjNDM7CSAqCiYjNDM7CSAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksCiYjNDM7CSAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uCiYjNDM7CSAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4KJiM0MzsJICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS4KJiM0MzsJICovCiYjNDM7CXJlcS0mZ3Q7cmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7CiYjNDM7CWlmIChtYXhyYXRlKSB7CiYjNDM7CQlyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW25dID0gMDsKJiM0MzsJfQomIzQzOwluJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJLyogQ0lSJiM0MztQSVIgc3VwcG9ydCBpcyByZXF1aXJlZCBhbmQgY2hlY2tlZCBhdCBtcXByaW8gc2V0dXAuICovCiYjNDM7CXJlcS0mZ3Q7cmVnW25dID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CWlmIChtaW5yYXRlKSB7CiYjNDM7CQlyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWlucmF0ZSk7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW25dID0gMDsKJiM0MzsJfQomIzQzOwluJiM0MzsmIzQzOzsKJiM0MzsJcmVxLSZndDtudW1fcmVncyA9IG47CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKQogewogCXUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107CkBAIC02NTAsNyAmIzQzOzc4NiwyMCBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvcgogCQkJCQkJKHU2NClody0mZ3Q7c21xX2xpbmtfdHlwZSk7CiAJCXJlcS0mZ3Q7bnVtX3JlZ3MmIzQzOyYjNDM7OwogCQkvKiBNRFEgY29uZmlnICovCi0JCXBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX3JhdGVfbGltaXQpIHsKJiM0MzsJCQkvKiBUT0RPOiBQcm9ncmFtIE5JWF9BRl9UTDRYX1RPUE9MT0dZIG9uIFRMNFswXS4gTVFQUklPCiYjNDM7CQkJICogcGFyZW50cyBldmVyeSBNRFEgdW5kZXIgdGhlIHNhbWUgVEw0IHdpdGggc2NoZWR1bGUKJiM0MzsJCQkgKiBwcmlvcml0eSAwLCBzbyBzaWJsaW5nIGFyYml0cmF0aW9uIGRlcGVuZHMgb24gdGhlIFRMNAomIzQzOwkJCSAqIHRvcG9sb2d5IHJlZ2lzdGVyLiBPbmx5IHRoZSBIVEIgcGF0aCBwcm9ncmFtcyB0aGlzCiYjNDM7CQkJICogdG9kYXkgYW5kIHRoZSBBRiBkb2VzIG5vdCByZXNldCBpdCBvbiBzY2hxIHJlYWxsb2MsCiYjNDM7CQkJICogc28gYSBUTDQgcmV1c2VkIGFmdGVyIEhUQiB0ZWFyZG93biBjYW4gcmV0YWluIHN0YWxlCiYjNDM7CQkJICogUlJfUFJJTy9QUklPX0FOQ0hPUiBhbmQgc3RhcnZlIHNvbWUgVFggcXVldWVzLgomIzQzOwkJCSAqLwomIzQzOwkJCXBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107CiYjNDM7CQl9CiYjNDM7CiAJCXJlcS0mZ3Q7cmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpOwogCQlyZXEtJmd0O3JlZ3ZhbFsxXSA9IHBhcmVudCAmbHQ7Jmx0OyAxNjsKIAkJcmVxLSZndDtudW1fcmVncyYjNDM7JiM0Mzs7CkBAIC03NzgsNiAmIzQzOzkyNyw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKIAkJcmVxLSZndDtzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250OwogCX0KIAomIzQzOwlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX3JhdGVfbGltaXQpCiYjNDM7CQlyZXEtJmd0O3NjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi0mZ3Q7aHcubm9uX3Fvc19xdWV1ZXM7CiYjNDM7CiAJcmMgPSBvdHgyX3N5bmNfbWJveF9tc2coJmFtcDtwZnZmLSZndDttYm94KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgKaW5kZXggZWVjZWU2MTJiN2IyYy4uY2YxY2QzOTFiZjUyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgKQEAgLTUxNSw2ICYjNDM7NTE1LDEyIEBAIHN0cnVjdCBvdHgyX25pYyB7CiAJdTY0CQkJZmxhZ3M7CiAJdTY0CQkJKmNxX29wX2FkZHI7CiAKJiM0MzsJdTMyCQkJbXFwcmlvX2ZsYWdzOwomIzQzOwl1NjQJCQkqbXFwcmlvX21pbl9yYXRlOwomIzQzOwl1NjQJCQkqbXFwcmlvX21heF9yYXRlOwomIzQzOwlib29sCQkJbXFwcmlvX3JhdGVfbGltaXQ7CiYjNDM7CWJvb2wJCQltcXByaW9fc2tpcF90ZWFyZG93bjsKJiM0MzsKIAlzdHJ1Y3QgYnBmX3Byb2cJCSp4ZHBfcHJvZzsKIAlzdHJ1Y3Qgb3R4Ml9xc2V0CXFzZXQ7CiAJc3RydWN0IG90eDJfaHcJCWh3OwpAQCAtMTI0Niw2ICYjNDM7MTI1MiwxMSBAQCBkbWFfYWRkcl90IG90eDJfZG1hX21hcF9za2JfZnJhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiAJCQkJIHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTsKIHZvaWQgb3R4Ml9kbWFfdW5tYXBfc2tiX2ZyYWdzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNnX2xpc3QgKnNnKTsKIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7CiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLAomIzQzOwkJCQkgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7CiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTsKJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTsKIHZvaWQgb3R4Ml9xdWV1ZV92Zl93b3JrKHN0cnVjdCBtYm94ICptdywgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hfd3EsCiAJCQlpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpOwogaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMKaW5kZXggZjExMGRmYTQyMzYwNS4uODMyZjA1Y2YxMjllZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jCkBAIC00MTMsNiAmIzQzOzQxMywxMiBAQCBzdGF0aWMgaW50IG90eDJfZGNibmxfaWVlZV9zZXRwZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpCiAJdTggb2xkX3BmY19lbjsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChwZnZmLSZndDttcXByaW9fcmF0ZV9saW1pdCAmYW1wOyZhbXA7IHBmYy0mZ3Q7cGZjX2VuKSB7CiYjNDM7CQluZXRkZXZfZXJyKGRldiwKJiM0MzsJCQkgICAmIzM0O1BGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKIAlvbGRfcGZjX2VuID0gcGZ2Zi0mZ3Q7cGZjX2VuOwogCXBmdmYtJmd0O3BmY19lbiA9IHBmYy0mZ3Q7cGZjX2VuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMKaW5kZXggYTAzNDBmMzQyMmJmOS4uYzEzMTdmYmNkODQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYwpAQCAtMjg3LDYgJiM0MzsyODcsMTQgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpb19yYXRlX2xpbWl0ICZhbXA7JmFtcDsKJiM0MzsJICAgIChjaGFubmVsLSZndDt0eF9jb3VudCAhPSBwZnZmLSZndDtody50eF9xdWV1ZXMgfHwKJiM0MzsJICAgICBjaGFubmVsLSZndDtyeF9jb3VudCAhPSBwZnZmLSZndDtody5yeF9xdWV1ZXMpKSB7CiYjNDM7CQluZXRkZXZfaW5mbyhkZXYsCiYjNDM7CQkJICAgICYjMzQ7Tm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKIAlpZiAoaWZfdXApCiAJCWRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX3N0b3AoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMKaW5kZXggYzk5NWYyOTAwODU5MC4uNzBjOTVlOWM1YmY4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCkBAIC0xOTgwLDYgJiM0MzsxOTgwLDEwIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX21lbTsKIAomIzQzOwllcnIgPSBvdHgyX21xcHJpb191cChwZik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9mcmVlX2h3OwomIzQzOwogCS8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqLwogCWZvciAocWlkeCA9IDA7IHFpZHggJmx0OyBwZi0mZ3Q7aHcuY2ludF9jbnQ7IHFpZHgmIzQzOyYjNDM7KSB7CiAJCWNxX3BvbGwgPSAmYW1wO3FzZXQtJmd0O25hcGlbcWlkeF07CkBAIC0yMTQwLDYgJiM0MzsyMTQ0LDcgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWZyZWVfaXJxKHZlYywgcGYpOwogZXJyX2Rpc2FibGVfbmFwaToKIAlvdHgyX2Rpc2FibGVfbmFwaShwZik7CiYjNDM7ZXJyX2ZyZWVfaHc6CiAJb3R4Ml9mcmVlX2h3X3Jlc291cmNlcyhwZik7CiBlcnJfZnJlZV9tZW06CiAJb3R4Ml9mcmVlX3F1ZXVlX21lbShxc2V0KTsKQEAgLTI4NDYsNiAmIzQzOzI4NTEsMTIgQEAgc3RhdGljIGludCBvdHgyX3hkcF9zZXR1cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiAJYm9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtJmd0O25ldGRldik7CiAJc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZzsKIAomIzQzOwlpZiAocHJvZyAmYW1wOyZhbXA7IHBmLSZndDttcXByaW9fcmF0ZV9saW1pdCkgewomIzQzOwkJbmV0ZGV2X2VycihkZXYsCiYjNDM7CQkJICAgJiMzNDtYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJaWYgKHByb2cgJmFtcDsmYW1wOyBkZXYtJmd0O210dSAmZ3Q7IE1BWF9YRFBfTVRVKSB7CiAJCW5ldGRldl93YXJuKGRldiwgJiMzNDtKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMKaW5kZXggMDM5ZmQ0N2ViZjUyMi4uNWJkOTVmMDYxNjYyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jCkBAIC0xNiw2ICYjNDM7MTYsNyBAQAogI2luY2x1ZGUgJmx0O25ldC90Y19hY3QvdGNfbWlycmVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjX2FjdC90Y192bGFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwdjYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3BrdF9zY2hlZC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2NuMTBrLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtvdHgyX2NvbW1vbi5oJiMzNDsKQEAgLTMxLDYgJiM0MzszMiw4IEBACiAKICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlAJCSgtMVUpCiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUUwkJOAomIzQzOy8qIE1heCBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDEzMDgxNiBNYnBzKS4gKi8KJiM0MzsjZGVmaW5lIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTCSgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpCiAKIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCwKIAkJCQkgICAgICB1MzIgKmJ1cnN0X2V4cCwgdTMyICpidXJzdF9tYW50aXNzYSkKQEAgLTYxLDYgJiM0Mzs2NCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCwKIAkJCSpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMICZsdDsmbHQ7ICgqYnVyc3RfZXhwIC0gNykpOwogCQl9CiAJfSBlbHNlIHsKJiM0MzsJCS8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvbgomIzQzOwkJICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LgomIzQzOwkJICovCiAJCSpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7CiAJCSpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTsKIAl9CkBAIC0xNjAwLDE0ICYjNDM7MTYwNiw0NjIgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJCSAgbmljLCBuaWMsIGluZ3Jlc3MpOwogfQogCiYjNDM7LyogRnJlZSB0aGUgcGVyLXF1ZXVlIG1pbi9tYXggcmF0ZSBjYWNoZXMuICovCiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlkZXZtX2tmcmVlKHBmdmYtJmd0O2RldiwgcGZ2Zi0mZ3Q7bXFwcmlvX21pbl9yYXRlKTsKJiM0MzsJZGV2bV9rZnJlZShwZnZmLSZndDtkZXYsIHBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSk7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19taW5fcmF0ZSA9IE5VTEw7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSA9IE5VTEw7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19mbGFncyA9IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsKJiM0MzsJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvX21pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtJmd0O2RldiwgbnVtX3R4cSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKCpwZnZmLSZndDttcXByaW9fbWluX3JhdGUpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvX21heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtJmd0O2RldiwgbnVtX3R4cSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKCpwZnZmLSZndDttcXByaW9fbWF4X3JhdGUpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSkgewomIzQzOwkJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJaW50IGx2bCwgaWR4OwomIzQzOwomIzQzOwlmb3IgKGx2bCA9IDA7IGx2bCAmbHQ7IE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGlkeCA9IDA7IGlkeCAmbHQ7IHBmdmYtJmd0O2h3LnR4c2NocV9jbnRbbHZsXTsgaWR4JiM0MzsmIzQzOykgewomIzQzOwkJCWlmIChwZnZmLSZndDtody50eHNjaHFfbGlzdFtsdmxdW2lkeF0pCiYjNDM7CQkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsCiYjNDM7ICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb24KJiM0MzsgKiBleHBsaWNpdCBtcXByaW8gdGVhcmRvd24gKHRjIHFkaXNjIGRlbCkgYW5kIGVycm9yIGNsZWFudXAsIG5vdCBvbgomIzQzOyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLgomIzQzOyAqLwomIzQzO2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLSZndDtuZXRkZXY7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlpZiAoIXBmdmYtJmd0O21xcHJpb19yYXRlX2xpbWl0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQocGZ2ZikpCiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7CiYjNDM7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19yYXRlX2xpbWl0ID0gZmFsc2U7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19za2lwX3RlYXJkb3duID0gZmFsc2U7CiYjNDM7CW5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7CiYjNDM7CW90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi0mZ3Q7bmV0ZGV2OwomIzQzOwlpbnQgdHhxLCBlcnI7CiYjNDM7CiYjNDM7CWlmICghcGZ2Zi0mZ3Q7bXFwcmlvX3JhdGVfbGltaXQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlmb3IgKHR4cSA9IDA7IHR4cSAmbHQ7IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOyB0eHEmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCW1pbl9yYXRlID0gcGZ2Zi0mZ3Q7bXFwcmlvX21pbl9yYXRlW3R4cV07CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKQomIzQzOwkJCW1heF9yYXRlID0gcGZ2Zi0mZ3Q7bXFwcmlvX21heF9yYXRlW3R4cV07CiYjNDM7CiYjNDM7CQlpZiAoIW1pbl9yYXRlICZhbXA7JmFtcDsgIW1heF9yYXRlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLAomIzQzOwkJCQkJCSAgIG1heF9yYXRlKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlciBmb3IgdHhxICVkOiAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIHR4cSwgZXJyKTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW8KJiM0MzsgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSkKJiM0MzsgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy4KJiM0MzsgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzCiYjNDM7ICogY2Fycmllciwgc3RvcHMgYWxsIFRYIHF1ZXVlcywgdGVhcnMgZG93biBJUlFzL05BUEkgYW5kIGRyb3BzIGluLWZsaWdodAomIzQzOyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCBuZXRpZl9jbG9zZSgpIGNsZWFycyBJRkZfVVAgYW5kIGxlYXZlcyB0aGUKJiM0MzsgKiBpbnRlcmZhY2UgYWRtaW5pc3RyYXRpdmVseSBkb3duLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtJmd0O25ldGRldl9vcHM7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CW5ldGRldl9pbmZvKG5ldGRldiwKJiM0MzsJCSAgICAmIzM0O21xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IG9wcy0mZ3Q7bmRvX3N0b3AobmV0ZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CS8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqLwomIzQzOwlpZiAocmF0ZV9saW1pdCkKJiM0MzsJCXBmdmYtJmd0O21xcHJpb19yYXRlX2xpbWl0ID0gdHJ1ZTsKJiM0MzsKJiM0MzsJZXJyID0gb3BzLSZndDtuZG9fb3BlbihuZXRkZXYpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlpbnQgZG93bl9lcnI7CiYjNDM7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O0ZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxuJiMzNDssCiYjNDM7CQkJICAgZXJyKTsKJiM0MzsJCWRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTsKJiM0MzsJCWlmIChkb3duX2VycikKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGZhaWxlZCB0byBjbGVhciBzaGFwZXJzIGFmdGVyIHJlc3RhcnQgZXJyb3I6ICVkXG4mIzM0OywKJiM0MzsJCQkJICAgZG93bl9lcnIpOwomIzQzOwkJLyogQ2FsbGVyIGhvbGRzIG5ldGRldi9SVE5MIGxvY2s7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLiAqLwomIzQzOwkJbmV0aWZfY2xvc2UobmV0ZGV2KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTY0IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKHU2NCByYXRlLCB1MzIgcWNvdW50KQomIzQzO3sKJiM0MzsJaWYgKCFyYXRlIHx8IHFjb3VudCAmbHQ7PSAxKQomIzQzOwkJcmV0dXJuIHJhdGU7CiYjNDM7CiYjNDM7CXJldHVybiBkaXZfdTY0KHJhdGUsIHFjb3VudCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1NjQgcmF0ZSwKJiM0MzsJCQkJCXUzMiBxY291bnQsIGludCB0YywgY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CWlmICghcmF0ZSB8fCBxY291bnQgJmx0Oz0gMSB8fCByYXRlICZndDs9IHFjb3VudCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCSAgICYjMzQ7bXFwcmlvOiAlcyByYXRlICVsbHUgZm9yIHRjICVkIHRvbyBzbWFsbCBmb3IgJXUgcXVldWVzXG4mIzM0OywKJiM0MzsJCSAgIG5hbWUsIHJhdGUsIHRjLCBxY291bnQpOwomIzQzOwlyZXR1cm4gLUVJTlZBTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsJaW50IHRjLCB0eHE7CiYjNDM7CiYjNDM7CWlmIChxb3B0LSZndDtudW1fdGMgJmd0OyBudW1fdHhxKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcbiYjMzQ7LAomIzQzOwkJCSAgIHFvcHQtJmd0O251bV90YywgbnVtX3R4cSk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobnVtX3R4cSAmZ3Q7IE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcbiYjMzQ7LAomIzQzOwkJCSAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiBxY291bnQgPSBxb3B0LSZndDtjb3VudFt0Y107CiYjNDM7CiYjNDM7CQlmb3IgKHR4cSA9IHFvcHQtJmd0O29mZnNldFt0Y107CiYjNDM7CQkgICAgIHR4cSAmbHQ7IHFvcHQtJmd0O29mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKHR4cSAmZ3Q7PSBudW1fdHhxKSB7CiYjNDM7CQkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkJICAgJiMzNDttcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcbiYjMzQ7LAomIzQzOwkJCQkJICAgdHhxLCBudW1fdHhxKTsKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19yYXRlX3ZhbGlkKHU2NCByYXRlX2J5dGVzX3BzKQomIzQzO3sKJiM0MzsJdTY0IG1icHM7CiYjNDM7CiYjNDM7CWlmICghcmF0ZV9ieXRlc19wcykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmZ3Q7IE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmZ3Q7IGRpdl91NjQoVTY0X01BWCwgOCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTsKJiM0MzsJcmV0dXJuIG1icHMgJmx0Oz0gMiB8fCBpbG9nMihtYnBzIC8gMikgJmx0Oz0gTUFYX1JBVEVfRVhQT05FTlQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKQomIzQzO3sKJiM0MzsJYm9vbCBoYWRfbXFwcmlvID0gcGZ2Zi0mZ3Q7bXFwcmlvX3JhdGVfbGltaXQ7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi0mZ3Q7bmV0ZGV2OwomIzQzOwlib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpOwomIzQzOwlpbnQgZG93bl9lcnIsIGVycjsKJiM0MzsKJiM0MzsJcW9wdC0mZ3Q7aHcgPSAwOwomIzQzOwomIzQzOwkvKiB0YyBxZGlzYyByZXBsYWNlIGdyYWZ0cyB0aGUgbmV3IG1xcHJpbyBiZWZvcmUgZGVzdHJveWluZyB0aGUgb2xkCiYjNDM7CSAqIG9uZS4gVGhlIG5ldyBjb25maWd1cmF0aW9uIGhhcyBhbHJlYWR5IHJlcHJvZ3JhbW1lZCBoYXJkd2FyZSBhbmQKJiM0MzsJICogc2V0IG1xcHJpb19yYXRlX2xpbWl0LCBzbyBpZ25vcmUgdGVhcmRvd24gZnJvbQomIzQzOwkgKiB0aGUgcmVwbGFjZWQgcWRpc2MuCiYjNDM7CSAqLwomIzQzOwlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX3NraXBfdGVhcmRvd24pIHsKJiM0MzsJCXBmdmYtJmd0O21xcHJpb19za2lwX3RlYXJkb3duID0gZmFsc2U7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqLwomIzQzOwlpZiAoIWhhZF9tcXByaW8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpOwomIzQzOwomIzQzOwlpZiAoaWZfdXApIHsKJiM0MzsJCWVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBkb3duX2VycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQlzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gJmFtcDttcXByaW8tJmd0O3FvcHQ7CiYjNDM7CWJvb2wgcmVwbGFjaW5nID0gcGZ2Zi0mZ3Q7bXFwcmlvX3JhdGVfbGltaXQ7CiYjNDM7CWJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7CiYjNDM7CWludCB0YywgdHhxLCBlcnIsIGk7CiYjNDM7CiYjNDM7CWlmICghcW9wdC0mZ3Q7aHcpCiYjNDM7CQlyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTsKJiM0MzsKJiM0MzsJaWYgKCFpZl91cCkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7bXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobXFwcmlvLSZndDtzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxuJiMzNDssIG1xcHJpby0mZ3Q7c2hhcGVyKTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXRlc3RfYml0KFFPU19DSVJfUElSX1NVUFBPUlQsICZhbXA7cGZ2Zi0mZ3Q7aHcuY2FwX2ZsYWcpKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpc19vdHgyX3NkcF9yZXAocGZ2Zi0mZ3Q7cGRldikpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG90eDJfcW9zX2h0Yl9hY3RpdmUocGZ2ZikpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGZ2Zi0mZ3Q7cGZjX2VuKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBmdmYtJmd0O3hkcF9wcm9nKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBxb3B0LSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwOwomIzQzOwkJdTMyIHFjb3VudCA9IHFvcHQtJmd0O2NvdW50W3RjXTsKJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCW1pbl9yYXRlID0gbXFwcmlvLSZndDttaW5fcmF0ZVt0Y107CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkKJiM0MzsJCQltYXhfcmF0ZSA9IG1xcHJpby0mZ3Q7bWF4X3JhdGVbdGNdOwomIzQzOwomIzQzOwkJaWYgKG1pbl9yYXRlICZhbXA7JmFtcDsgbWF4X3JhdGUgJmFtcDsmYW1wOyBtaW5fcmF0ZSAmZ3Q7IG1heF9yYXRlKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXG4mIzM0OywKJiM0MzsJCQkJICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkgewomIzQzOwkJCWVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBtaW5fcmF0ZSwKJiM0MzsJCQkJCQkJICAgcWNvdW50LCB0YywKJiM0MzsJCQkJCQkJICAgJiMzNDttaW4mIzM0Oyk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKSB7CiYjNDM7CQkJZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIG1heF9yYXRlLAomIzQzOwkJCQkJCQkgICBxY291bnQsIHRjLAomIzQzOwkJCQkJCQkgICAmIzM0O21heCYjMzQ7KTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUgJmFtcDsmYW1wOwomIzQzOwkJICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1pbl9yYXRlLAomIzQzOwkJCQkJCQkJICAgICAgIHFjb3VudCkpKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBleGNlZWRzIGhhcmR3YXJlIGxpbWl0XG4mIzM0OywKJiM0MzsJCQkJICAgbWluX3JhdGUsIHRjKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtYXhfcmF0ZSwKJiM0MzsJCQkJCQkJCSAgICAgICBxY291bnQpKSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgZXhjZWVkcyBoYXJkd2FyZSBsaW1pdFxuJiMzNDssCiYjNDM7CQkJCSAgIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi0mZ3Q7bmV0ZGV2LCB0cnVlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKG5ldGRldiwgcW9wdCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIG90eDJfbXFwcmlvX3VwKCkgbWF5IGhhdmUgcmVzdG9yZWQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZHVyaW5nCiYjNDM7CSAqIHRoZSByZXN0YXJ0IGFib3ZlLiBDbGVhciBldmVyeSBNRFEgc2hhcGVyIGJlZm9yZSBhcHBseWluZyB0aGUgbmV3CiYjNDM7CSAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlCiYjNDM7CSAqIGxpbWl0cyBpbiBoYXJkd2FyZS4KJiM0MzsJICovCiYjNDM7CWlmIChvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQocGZ2ZikpIHsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19mbGFncyA9IG1xcHJpby0mZ3Q7ZmxhZ3M7CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHFvcHQtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CQl1MzIgcWNvdW50ID0gcW9wdC0mZ3Q7Y291bnRbdGNdOwomIzQzOwomIzQzOwkJLyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRCiYjNDM7CQkgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWUKJiM0MzsJCSAqIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUpCiYjNDM7CQkJbWluX3JhdGUgPSBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtcXByaW8tJmd0O21pbl9yYXRlW3RjXSwKJiM0MzsJCQkJCQkJICAgICAgcWNvdW50KTsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKQomIzQzOwkJCW1heF9yYXRlID0gb3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobXFwcmlvLSZndDttYXhfcmF0ZVt0Y10sCiYjNDM7CQkJCQkJCSAgICAgIHFjb3VudCk7CiYjNDM7CiYjNDM7CQlmb3IgKHR4cSA9IHFvcHQtJmd0O29mZnNldFt0Y107CiYjNDM7CQkgICAgIHR4cSAmbHQ7IHFvcHQtJmd0O29mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7CiYjNDM7CQkJbmV0ZGV2X2RiZyhuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XG4mIzM0OywKJiM0MzsJCQkJICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTsKJiM0MzsKJiM0MzsJCQlwZnZmLSZndDttcXByaW9fbWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlOwomIzQzOwkJCXBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7CiYjNDM7CiYjNDM7CQkJZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsCiYjNDM7CQkJCQkJCSAgIG1pbl9yYXRlLCBtYXhfcmF0ZSk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJZ290byBjbGVhbnVwOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CW5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcW9wdC0mZ3Q7bnVtX3RjKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHFvcHQtJmd0O251bV90YzsgaSYjNDM7JiM0MzspCiYjNDM7CQluZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcW9wdC0mZ3Q7Y291bnRbaV0sIHFvcHQtJmd0O29mZnNldFtpXSk7CiYjNDM7CiYjNDM7CXFvcHQtJmd0O2h3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTOwomIzQzOwomIzQzOwlpZiAocmVwbGFjaW5nKQomIzQzOwkJcGZ2Zi0mZ3Q7bXFwcmlvX3NraXBfdGVhcmRvd24gPSB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwlvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhOwomIzQzOwlzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7CiYjNDM7CiYjNDM7CWlmIChiYXNlLSZndDt0eXBlICE9IFRDX1NFVFVQX1FESVNDX01RUFJJTykKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJY2FwcyA9IGJhc2UtJmd0O2NhcHM7CiYjNDM7CWNhcHMtJmd0O3ZhbGlkYXRlX3F1ZXVlX2NvdW50cyA9IHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLAogCQkgIHZvaWQgKnR5cGVfZGF0YSkKIHsKIAlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBUQ19RVUVSWV9DQVBTOgomIzQzOwkJcmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpOwogCWNhc2UgVENfU0VUVVBfQkxPQ0s6CiAJCXJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTsKIAljYXNlIFRDX1NFVFVQX1FESVNDX0hUQjoKIAkJcmV0dXJuIG90eDJfc2V0dXBfdGNfaHRiKG5ldGRldiwgdHlwZV9kYXRhKTsKJiM0MzsJY2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86CiYjNDM7CQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMKaW5kZXggNjljMDkxMWUyOGU5MS4uZjc2OTNmMDJhMDdjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYwpAQCAtMTE4LDYgJiM0MzsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAkvKiBjb25maWd1cmUgUElSICovCiAJbWF4cmF0ZSA9IChub2RlLSZndDtyYXRlICZndDsgbm9kZS0mZ3Q7Y2VpbCkgPyBub2RlLSZndDtyYXRlIDogbm9kZS0mZ3Q7Y2VpbDsKIAomIzQzOwkvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW4KJiM0MzsJICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS4KJiM0MzsJICovCiAJY2ZnLSZndDtyZWd2YWxbKm51bV9yZWdzXSA9CiAJCW90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7CiAJKCpudW1fcmVncykmIzQzOyYjNDM7OwpAQCAtMTcyOSwxMSAmIzQzOzE3MzIsMjMgQEAgdm9pZCBvdHgyX3Fvc19jb25maWdfdHhzY2hxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKIAlvdHgyX3Fvc19yb290X2Rlc3Ryb3kocGZ2Zik7CiB9CiAKJiM0Mztib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJcmV0dXJuIG90eDJfc3dfbm9kZV9maW5kKHBmdmYsIE9UWDJfUU9TX1JPT1RfQ0xBU1NJRCk7CiYjNDM7fQomIzQzOwogaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKQogewogCXN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5kZXYpOwogCWludCByZXM7CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpb19yYXRlX2xpbWl0ICZhbXA7JmFtcDsKJiM0MzsJICAgIGh0Yi0mZ3Q7Y29tbWFuZCAhPSBUQ19IVEJfREVTVFJPWSkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi0mZ3Q7ZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O0hUQiBvZmZsb2FkIGNhbm5vdCBiZSB1c2VkIHdpdGggbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGFjdGl2ZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCXN3aXRjaCAoaHRiLSZndDtjb21tYW5kKSB7CiAJY2FzZSBUQ19IVEJfQ1JFQVRFOgogCQlyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLSZndDtwYXJlbnRfY2xhc3NpZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaAppbmRleCAyMjFiZDA0MzhmNjAzLi5jNzc3Y2M0MmVhYzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oCkBAIC0yMyw2ICYjNDM7MjMsNyBAQCBlbnVtIHFvc19zbXFfb3BlcmF0aW9ucyB7CiB1NjQgb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1NjQgbWF4cmF0ZSwgdTMyIGJ1cnN0KTsKIAogaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKTsKJiM0Mztib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKTsKIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7CiB2b2lkIG90eDJfcW9zX2ZyZWVfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpOwogaW50IG90eDJfcW9zX2VuYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NzMKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQ6IE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSBoYXZlIGEgcGF0Y2ggaGVyZSB0aGF0IGFkZHMgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIHN1cHBvcnQgdG8gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY2AsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY2AsIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY2AsIHdoaWNoIHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzcGVjaWZpYyBwaWVjZSBvZiBoYXJkd2FyZTogdGhlIE9jdGVvblRYMi4KCk15IGZpcnN0IHRob3VnaHQgaXMsIGlzIHRoaXMgZHJpdmVyIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VPyBUaGUgT2N0ZW9uVFgyIGlzIGEgaGFyZHdhcmUgTklDLCBhIFBDSWUgZGV2aWNlLCBzbyB0aGF0IHJhaXNlcyBhIHJlZCBmbGFnIHJpZ2h0IGF3YXkuIElzIHRoaXMgb25lIG9mIHRob3NlIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIHRoYXQgcmVxdWlyZXMgYSAqcGh5c2ljYWwqIFBDSWUgY2FyZCwgc29tZXRoaW5nIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHRoZSBjYXNlLCBhcyBPY3Rlb25UWDIgaXMgYSBwaHlzaWNhbCBoYXJkd2FyZSBOSUMuCgpUaGUgaW5zdHJ1Y3Rpb25zIEkgaGF2ZSBleHBsaWNpdGx5IGNhbGwgb3V0IHNpdHVhdGlvbnMgbGlrZSB0aGlzLCBzcGVjaWZpY2FsbHkgbWVudGlvbmluZyAmIzM0O3ZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7CgpBbHJpZ2h0LCB0aW1lIHRvIGNvbmZpcm0uIEkgbmVlZCB0byBtYWtlIHN1cmUgT2N0ZW9uVFgyIGlzbiYjMzk7dCBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZW11bGF0ZWQuIExldCYjMzk7cyBzZWUuLi4gaXQmIzM5O3MgYW4gRXRoZXJuZXQgZHJpdmVyIGZvciBNYXJ2ZWxsIE9jdGVvblRYMiBTb0NzLCBidXQgZG9lcyB0aGF0IG1lYW4gaXQmIzM5O3MgZW11bGF0YWJsZT8gSSBkb3VidCBpdDsgdGhlc2UgYXJlIHVzdWFsbHkgdGlnaHRseSBjb3VwbGVkIHRvIHRoZSBoYXJkd2FyZS4gSSBuZWVkIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnYCB0byBnZXQgbW9yZSBkZXRhaWxzIG9uIGl0cyBjaGFyYWN0ZXJpc3RpY3MuCgpHaXZlbiB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50LCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhpcyBwYXRjaCBpcyBnb2luZyB0byBiZSBjbGFzc2lmaWVkIGFzICpXb3J0aEZ1enppbmc9ZmFsc2UqLCBiYXNlZCBvbiB0aGUgcmVxdWlyZW1lbnQgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPQ1RFT05UWDJfQUYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9Nj1jb25maWcgT0NURU9OVFgyX01CT1hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjk6Y29uZmlnIE9DVEVPTlRYMl9BRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0xMC1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgT2N0ZW9uVFgyIFJWVSBBZG1pbiBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ3OAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgS2NvbmZpZyBSZXZpZXcqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiAmIzM0O0xldCYjMzk7cyByZWFkIHRoZSBLY29uZmlnLiYjMzQ7IFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAsIGlzbiYjMzk7dCBpdD8gQmVmb3JlIGFueSBtb2RpZmljYXRpb25zLCBiZWZvcmUgYW55IGRlc2lnbiBkZWNpc2lvbnMsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uIHNwYWNlLiBJJiMzOTttIG5vdCBqdXN0ICpsb29raW5nKiBhdCBpdCwgSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIGl0LiBJJiMzOTttIGFscmVhZHkgc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgZGVwZW5kZW5jaWVzLCBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IG9wdGlvbnMsIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSDigJMgd2hhdOKAmXMgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGlzIGNvbmZpZ3VyYXRpb24/IFdoYXQgYXJlYXMgZG9lcyBpdCBjb3Zlcj8gSSYjMzk7bSBzY2FubmluZyBmb3IgZmFtaWxpYXIgbW9kdWxlcyBvciBmZWF0dXJlcywgYW5kIHF1aWNrbHkgaWRlbnRpZnlpbmcgdGhvc2UgYXJlYXMgdGhhdCBJJiMzOTttIGxlc3MgY29tZm9ydGFibGUgd2l0aCBhbmQgbmVlZCB0byByZXZpc2l0IG1vcmUgY2xvc2VseS4gTXkgYnJhaW4gaXMgYWxyZWFkeSBjYWxjdWxhdGluZyB0aGUgY29tcGxleGl0eSBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gYXMgYSB3aG9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBNYXJ2ZWxsIFJWVSBOZXR3b3JrIGRyaXZlcnMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgT0NURU9OVFgyX01CT1hcbiAgIDc6XHRcdHRyaXN0YXRlXG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIE9DVEVPTlRYMl9BRlxuICAxMDpcdFx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgUlZVIEFkbWluIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuICAxMTpcdFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXG4gIDEyOlx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiAgMTM6XHRcdGRlcGVuZHMgb24gKDY0QklUIFx1MDAyNlx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XG4gIDE0Olx0XHRkZXBlbmRzIG9uIFBDSVxuICAxNTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAxNjpcdFx0aGVscFxuICAxNzpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJiMzOTtzIE9jdGVvblRYMiBSZXNvdXJjZSBWaXJ0dWFsaXphdGlvblxuICAxODpcdFx0ICBVbml0JiMzOTtzIGFkbWluIGZ1bmN0aW9uIG1hbmFnZXIgd2hpY2ggbWFuYWdlcyBhbGwgUlZVIEhXIHJlc291cmNlc1xuICAxOTpcdFx0ICBhbmQgcHJvdmlkZXMgYSBtZWRpdW0gdG8gb3RoZXIgUEYvVkZzIHRvIGNvbmZpZ3VyZSBIVy4gU2hvdWxkIGJlXG4gIDIwOlx0XHQgIGVuYWJsZWQgZm9yIG90aGVyIFJWVSBkZXZpY2UgZHJpdmVycyB0byB3b3JrLlxuICAyMTpcdFxuICAyMjpcdGNvbmZpZyBORENfRElTX0RZTkFNSUNfQ0FDSElOR1xuICAyMzpcdFx0Ym9vbCBcJiMzNDtEaXNhYmxlIGNhY2hpbmcgb2YgZHluYW1pYyBlbnRyaWVzIGluIE5EQ1wmIzM0O1xuICAyNDpcdFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfQUZcbiAgMjU6XHRcdGRlZmF1bHQgblxuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBUaGlzIGNvbmZpZyBvcHRpb24gZGlzYWJsZXMgY2FjaGluZyBvZiBkeW5hbWljIGVudHJpZXMgc3VjaCBhcyBOSVggU1FFc1xuICAyODpcdFx0ICAsIE5QQSBzdGFjayBwYWdlcyBldGMgaW4gTkRDLiBBbHNvIGxvY2tzIGRvd24gTklYIFNRL0NRL1JRL1JTUyBhbmRcbiAgMjk6XHRcdCAgTlBBIEF1cmEvUG9vbCBjb250ZXh0cy5cbiAgMzA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE0NgoJCQkJCQkJb3V0cHV0OiA4NAoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBOb3QgV29ydGggRnV6emluZyoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTt2ZSBnb3QgYSBoYXJkd2FyZSBkcml2ZXIgaGVyZSDigJMgc3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVSBkcml2ZXIuIFRoYXQgYXV0b21hdGljYWxseSBtYWtlcyBtZSB0aGluayB2ZW5kb3Itc3BlY2lmaWMsIHdoaWNoIGlzIGEga2V5IGZsYWcgZm9yIHRoaXMgdHlwZSBvZiBhc3Nlc3NtZW50LiBJIHNlZSBpdCBkZXBlbmRzIG9uIFBDSSBhbmQgZWl0aGVyIEFSTTY0IG9yIGEgYENPTVBJTEVfVEVTVGAgZmxhZyDigJMgYm90aCBvZiB3aGljaCBwb2ludCB0byBhIGZhaXJseSBzcGVjaWFsaXplZCBlbnZpcm9ubWVudC4KClRoZW4gSSBoaXQgdGhlIG5haWwgb24gdGhlIGhlYWQ6IGl0ICpyZXF1aXJlcyogYWN0dWFsIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUuIE5vIFFFTVUgZW11bGF0aW9uIGhlcmUsIHdoaWNoIGlzIGEgaHVnZSByZWQgZmxhZy4gTG9va2luZyBhdCB0aGUgZXhjbHVzaW9uIHJ1bGVzLCB0aGlzIGluc3RhbnRseSByaW5ncyBhIGJlbGwuIEl0JiMzOTtzIGFsbW9zdCB2ZXJiYXRpbSB0aGUgdHlwZSBvZiBkcml2ZXIgb3V0bGluZWQgaW4gdGhhdCBleGNsdXNpb246ICYjMzQ7Q29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4mIzM0OwoKR2l2ZW4gdGhpcywgdGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZyB3aXRoaW4gdGhlIGNvbnN0cmFpbnRzIG9mIG91ciBjdXJyZW50IHNldHVwLiBQaHlzaWNhbCBoYXJkd2FyZSBkZXBlbmRlbmN5IGFuZCB0aGUgbGltaXRhdGlvbnMgb2YgUUVNVSBpbW1lZGlhdGVseSBwdXQgdGhpcyBpbnRvIHRoZSAmIzM0O05vdCBXb3J0aCBGdXp6aW5nJiMzNDsgY2F0ZWdvcnkuIFRoZXJlZm9yZSwgSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkIGluIHRoaXMgY29udGV4dC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkIGluIHRoaXMgY29udGV4dC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIzOjUyLjQwNTAyMzc2N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzczOTExNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgY2Fubm90IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQgaW4gdGhpcyBjb250ZXh0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjM6NTIuNDA1MDI5NDk3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTY3NTUyMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkMmViZjQzZGZhNDAwMmI0N2ZhM2Y3ZWFjYzJkNWMyZDQyODc4Y2Q0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDA5OjIzOjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xcbmluZGV4IGI4MWM0N2VhMDIzYmUuLjIyZjY0YzFlZGU5MWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXFxuQEAgLTMzMSw4ICszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcXG4rXFx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHtcXG4rXFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChydnUtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXFxuaW5kZXggY2E3M2E5NGRiNzk0My4uZGZhYmRhMTIwMWJkZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXFxuQEAgLTYxNCw2ICs2MTQsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKG90eDJfZ2V0X21hY19mcm9tX2FmKTtcXG4gXFxuK3N0YXRpYyBpbnRcXG4rb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsXFxuK1xcdFxcdCAgICAgICB1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSxcXG4rXFx0XFx0ICAgICAgIHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR10pXFxuK3tcXG4rXFx0c3RydWN0IG1ib3ggKm1ib3ggPSBcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveDtcXG4rXFx0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XFxuK1xcdGludCBpLCBlcnI7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcXG4rXFx0aWYgKCFyZXEpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdHJlcS1cXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XFxuK1xcdHJlcS1cXHUwMDNlbnVtX3JlZ3MgPSBjbnQ7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY250OyBpKyspIHtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWdbaV0gPSByZWdfYWRkcltpXTtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbaV0gPSByZWdfdmFsW2ldO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcXG4rXFx0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcXG4rXFx0aW50IGVyciwgc21xLCBpLCBjbnQgPSAwO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpKyspIHtcXG4rXFx0XFx0c21xID0gcGZ2Zi1cXHUwMDNlaHcudHhzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9TTVFdW2ldO1xcbitcXG4rXFx0XFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsW2NudF0gPSAwO1xcbitcXHRcXHRjbnQrKztcXG4rXFxuK1xcdFxcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFtjbnRdID0gMDtcXG4rXFx0XFx0Y250Kys7XFxuK1xcbitcXHRcXHRpZiAoY250IFxcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZmFpbDtcXG4rXFx0XFx0Y250ID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGNudCkge1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZmFpbDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK2ZhaWw6XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0XFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcXG4re1xcbitcXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94O1xcbitcXHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcXG4rXFx0aW50IGVyciwgc21xLCBuID0gMDtcXG4rXFx0dTY0IHJlZ19hZGRyWzJdO1xcbitcXHR1NjQgcmVnX3ZhbFsyXTtcXG4rXFx0dTY0IHJhdGU7XFxuK1xcbitcXHRpZiAoIW1heHJhdGUgXFx1MDAyNlxcdTAwMjYgIW1pbnJhdGUpIHtcXG4rXFx0XFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xcbitcXHRcXHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsWzBdID0gMDtcXG4rXFx0XFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFsxXSA9IDA7XFxuK1xcdFxcdHJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTtcXG4rXFx0fVxcbitcXG4rXFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XFxuK1xcdGlmICghcmVxKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXEtXFx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xcbitcXG4rXFx0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xcbitcXHQgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYXFxuK1xcdCAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnNcXG4rXFx0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXFxuK1xcdCAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYVxcbitcXHQgKiBoYXJkd2FyZSBjYXAuXFxuK1xcdCAqXFxuK1xcdCAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksXFxuK1xcdCAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uXFxuK1xcdCAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW5cXG4rXFx0ICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdHJlcS1cXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7XFxuK1xcdGlmIChtYXhyYXRlKSB7XFxuK1xcdFxcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gMDtcXG4rXFx0fVxcbitcXHRuKys7XFxuK1xcbitcXHQvKiBDSVIrUElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xcbitcXHRyZXEtXFx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xcbitcXHRpZiAobWlucmF0ZSkge1xcbitcXHRcXHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWlucmF0ZSk7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IDA7XFxuK1xcdH1cXG4rXFx0bisrO1xcbitcXHRyZXEtXFx1MDAzZW51bV9yZWdzID0gbjtcXG4rXFxuK1xcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKVxcbiB7XFxuIFxcdHUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107XFxuQEAgLTY1MCw3ICs3ODYsMjAgQEAgaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JcXG4gXFx0XFx0XFx0XFx0XFx0XFx0KHU2NClody1cXHUwMDNlc21xX2xpbmtfdHlwZSk7XFxuIFxcdFxcdHJlcS1cXHUwMDNlbnVtX3JlZ3MrKztcXG4gXFx0XFx0LyogTURRIGNvbmZpZyAqL1xcbi1cXHRcXHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQpIHtcXG4rXFx0XFx0XFx0LyogVE9ETzogUHJvZ3JhbSBOSVhfQUZfVEw0WF9UT1BPTE9HWSBvbiBUTDRbMF0uIE1RUFJJT1xcbitcXHRcXHRcXHQgKiBwYXJlbnRzIGV2ZXJ5IE1EUSB1bmRlciB0aGUgc2FtZSBUTDQgd2l0aCBzY2hlZHVsZVxcbitcXHRcXHRcXHQgKiBwcmlvcml0eSAwLCBzbyBzaWJsaW5nIGFyYml0cmF0aW9uIGRlcGVuZHMgb24gdGhlIFRMNFxcbitcXHRcXHRcXHQgKiB0b3BvbG9neSByZWdpc3Rlci4gT25seSB0aGUgSFRCIHBhdGggcHJvZ3JhbXMgdGhpc1xcbitcXHRcXHRcXHQgKiB0b2RheSBhbmQgdGhlIEFGIGRvZXMgbm90IHJlc2V0IGl0IG9uIHNjaHEgcmVhbGxvYyxcXG4rXFx0XFx0XFx0ICogc28gYSBUTDQgcmV1c2VkIGFmdGVyIEhUQiB0ZWFyZG93biBjYW4gcmV0YWluIHN0YWxlXFxuK1xcdFxcdFxcdCAqIFJSX1BSSU8vUFJJT19BTkNIT1IgYW5kIHN0YXJ2ZSBzb21lIFRYIHF1ZXVlcy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHJlcS1cXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xcbiBcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFsxXSA9IHBhcmVudCBcXHUwMDNjXFx1MDAzYyAxNjtcXG4gXFx0XFx0cmVxLVxcdTAwM2VudW1fcmVncysrO1xcbkBAIC03NzgsNiArOTI3LDkgQEAgaW50IG90eDJfdHhzY2hfYWxsb2Moc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXHRcXHRyZXEtXFx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW9fcmF0ZV9saW1pdClcXG4rXFx0XFx0cmVxLVxcdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXG4gXFx0cmMgPSBvdHgyX3N5bmNfbWJveF9tc2coXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3gpO1xcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHJldHVybiByYztcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxcbmluZGV4IGVlY2VlNjEyYjdiMmMuLmNmMWNkMzkxYmY1MmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxcbkBAIC01MTUsNiArNTE1LDEyIEBAIHN0cnVjdCBvdHgyX25pYyB7XFxuIFxcdHU2NFxcdFxcdFxcdGZsYWdzO1xcbiBcXHR1NjRcXHRcXHRcXHQqY3Ffb3BfYWRkcjtcXG4gXFxuK1xcdHUzMlxcdFxcdFxcdG1xcHJpb19mbGFncztcXG4rXFx0dTY0XFx0XFx0XFx0Km1xcHJpb19taW5fcmF0ZTtcXG4rXFx0dTY0XFx0XFx0XFx0Km1xcHJpb19tYXhfcmF0ZTtcXG4rXFx0Ym9vbFxcdFxcdFxcdG1xcHJpb19yYXRlX2xpbWl0O1xcbitcXHRib29sXFx0XFx0XFx0bXFwcmlvX3NraXBfdGVhcmRvd247XFxuK1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2dcXHRcXHQqeGRwX3Byb2c7XFxuIFxcdHN0cnVjdCBvdHgyX3FzZXRcXHRxc2V0O1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9od1xcdFxcdGh3O1xcbkBAIC0xMjQ2LDYgKzEyNTIsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlZywgaW50ICpsZW4pO1xcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XFxuIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7XFxuK2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHR4cSxcXG4rXFx0XFx0XFx0XFx0IHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSk7XFxuK2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4raW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuIHZvaWQgb3R4Ml9xdWV1ZV92Zl93b3JrKHN0cnVjdCBtYm94ICptdywgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hfd3EsXFxuIFxcdFxcdFxcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XFxuIGludCBvdHgyX2RlbF9tY2FtX2Zsb3dfZW50cnkoc3RydWN0IG90eDJfbmljICpuaWMsIHUxNiBlbnRyeSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcXG5pbmRleCBmMTEwZGZhNDIzNjA1Li44MzJmMDVjZjEyOWVlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXFxuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxcbiBcXHR1OCBvbGRfcGZjX2VuO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpb19yYXRlX2xpbWl0IFxcdTAwMjZcXHUwMDI2IHBmYy1cXHUwMDNlcGZjX2VuKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIoZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiUEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuIFxcdG9sZF9wZmNfZW4gPSBwZnZmLVxcdTAwM2VwZmNfZW47XFxuIFxcdHBmdmYtXFx1MDAzZXBmY19lbiA9IHBmYy1cXHUwMDNlcGZjX2VuO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXFxuaW5kZXggYTAzNDBmMzQyMmJmOS4uYzEzMTdmYmNkODQ4NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcXG5AQCAtMjg3LDYgKzI4NywxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChjaGFubmVsLVxcdTAwM2V0eF9jb3VudCAhPSBwZnZmLVxcdTAwM2Vody50eF9xdWV1ZXMgfHxcXG4rXFx0ICAgICBjaGFubmVsLVxcdTAwM2VyeF9jb3VudCAhPSBwZnZmLVxcdTAwM2Vody5yeF9xdWV1ZXMpKSB7XFxuK1xcdFxcdG5ldGRldl9pbmZvKGRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJOb3QgcGVybWl0dGVkIHRvIGNoYW5nZSBjaGFubmVsIGNvdW50IHdoaWxlIE1RIHByaW8gaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChpZl91cClcXG4gXFx0XFx0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc3RvcChkZXYpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG5pbmRleCBjOTk1ZjI5MDA4NTkwLi43MGM5NWU5YzViZjg2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXFxuQEAgLTE5ODAsNiArMTk4MCwxMCBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2ZyZWVfbWVtO1xcbiBcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX2h3O1xcbitcXG4gXFx0LyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovXFxuIFxcdGZvciAocWlkeCA9IDA7IHFpZHggXFx1MDAzYyBwZi1cXHUwMDNlaHcuY2ludF9jbnQ7IHFpZHgrKykge1xcbiBcXHRcXHRjcV9wb2xsID0gXFx1MDAyNnFzZXQtXFx1MDAzZW5hcGlbcWlkeF07XFxuQEAgLTIxNDAsNiArMjE0NCw3IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0ZnJlZV9pcnEodmVjLCBwZik7XFxuIGVycl9kaXNhYmxlX25hcGk6XFxuIFxcdG90eDJfZGlzYWJsZV9uYXBpKHBmKTtcXG4rZXJyX2ZyZWVfaHc6XFxuIFxcdG90eDJfZnJlZV9od19yZXNvdXJjZXMocGYpO1xcbiBlcnJfZnJlZV9tZW06XFxuIFxcdG90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7XFxuQEAgLTI4NDYsNiArMjg1MSwxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4gXFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXFx1MDAzZW5ldGRldik7XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XFxuIFxcbitcXHRpZiAocHJvZyBcXHUwMDI2XFx1MDAyNiBwZi1cXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHByb2cgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VtdHUgXFx1MDAzZSBNQVhfWERQX01UVSkge1xcbiBcXHRcXHRuZXRkZXZfd2FybihkZXYsIFxcXCJKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXFxuaW5kZXggMDM5ZmQ0N2ViZjUyMi4uNWJkOTVmMDYxNjYyOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xcbkBAIC0xNiw2ICsxNiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNfYWN0L3RjX21pcnJlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjX2FjdC90Y192bGFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9zY2hlZC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImNuMTBrLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJvdHgyX2NvbW1vbi5oXFxcIlxcbkBAIC0zMSw2ICszMiw4IEBAXFxuIFxcbiAjZGVmaW5lIE1DQVNUX0lOVkFMSURfR1JQXFx0XFx0KC0xVSlcXG4gI2RlZmluZSBSQVRFX01BTlRJU1NBX0JJVFNcXHRcXHQ4XFxuKy8qIE1heCBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDEzMDgxNiBNYnBzKS4gKi9cXG4rI2RlZmluZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QU1xcdCgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpXFxuIFxcbiBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKVxcbkBAIC02MSw2ICs2NCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcXG4gXFx0XFx0XFx0KmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgXFx1MDAzY1xcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uXFxuK1xcdFxcdCAqIENOMTBLKSwgbm90IGEgbWluaW1hbCBidXJzdC5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdCpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7XFxuIFxcdFxcdCpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTtcXG4gXFx0fVxcbkBAIC0xNjAwLDE0ICsxNjA2LDQ2MiBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0ICBuaWMsIG5pYywgaW5ncmVzcyk7XFxuIH1cXG4gXFxuKy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqL1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRkZXZtX2tmcmVlKHBmdmYtXFx1MDAzZWRldiwgcGZ2Zi1cXHUwMDNlbXFwcmlvX21pbl9yYXRlKTtcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsIHBmdmYtXFx1MDAzZW1xcHJpb19tYXhfcmF0ZSk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpb19taW5fcmF0ZSA9IE5VTEw7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpb19tYXhfcmF0ZSA9IE5VTEw7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpb19mbGFncyA9IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHUxNiBudW1fdHhxID0gcGZ2Zi1cXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XFxuK1xcbitcXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xcbitcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX21pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXFx1MDAzZWRldiwgbnVtX3R4cSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2YoKnBmdmYtXFx1MDAzZW1xcHJpb19taW5fcmF0ZSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgR0ZQX0tFUk5FTCk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpb19tYXhfcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVxcdTAwM2VkZXYsIG51bV90eHEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW9fbWF4X3JhdGUpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXBmdmYtXFx1MDAzZW1xcHJpb19taW5fcmF0ZSB8fCAhcGZ2Zi1cXHUwMDNlbXFwcmlvX21heF9yYXRlKSB7XFxuK1xcdFxcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgb3R4Ml90eHNjaHFfaXNfYWxsb2NhdGVkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRpbnQgbHZsLCBpZHg7XFxuK1xcbitcXHRmb3IgKGx2bCA9IDA7IGx2bCBcXHUwMDNjIE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwrKykge1xcbitcXHRcXHRmb3IgKGlkeCA9IDA7IGlkeCBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXTsgaWR4KyspIHtcXG4rXFx0XFx0XFx0aWYgKHBmdmYtXFx1MDAzZWh3LnR4c2NocV9saXN0W2x2bF1baWR4XSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbisvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycyxcXG4rICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb25cXG4rICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb25cXG4rICogcm91dGluZSBuZXRkZXYgc3RvcC9vcGVuIGN5Y2xlcyB3aGVyZSB0aGUgb2ZmbG9hZCBzdGF5cyBhY3RpdmUuXFxuKyAqL1xcbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRpZiAoIXBmdmYtXFx1MDAzZW1xcHJpb19yYXRlX2xpbWl0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQocGZ2ZikpXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpb19yYXRlX2xpbWl0ID0gZmFsc2U7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duID0gZmFsc2U7XFxuK1xcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7XFxuK1xcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGludCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghcGZ2Zi1cXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpb19tYXhfcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3IgKHR4cSA9IDA7IHR4cSBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xcbitcXHRcXHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XFxuK1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvX2ZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gcGZ2Zi1cXHUwMDNlbXFwcmlvX21pbl9yYXRlW3R4cV07XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW9fZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBwZnZmLVxcdTAwM2VtcXByaW9fbWF4X3JhdGVbdHhxXTtcXG4rXFxuK1xcdFxcdGlmICghbWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgIW1heF9yYXRlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbWF4X3JhdGUpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHR4cSwgZXJyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvXFxuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxcbisgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cXG4rICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFyc1xcbisgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XFxuKyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCBuZXRpZl9jbG9zZSgpIGNsZWFycyBJRkZfVVAgYW5kIGxlYXZlcyB0aGVcXG4rICogaW50ZXJmYWNlIGFkbWluaXN0cmF0aXZlbHkgZG93bi5cXG4rICovXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KVxcbit7XFxuK1xcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0bmV0ZGV2X2luZm8obmV0ZGV2LFxcbitcXHRcXHQgICAgXFxcIm1xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGVyciA9IG9wcy1cXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqL1xcbitcXHRpZiAocmF0ZV9saW1pdClcXG4rXFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQgPSB0cnVlO1xcbitcXG4rXFx0ZXJyID0gb3BzLVxcdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGludCBkb3duX2VycjtcXG4rXFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiRmFpbGVkIHRvIHJlc3RhcnQgZGV2aWNlIGFmdGVyIG1xcHJpbyBjaGFuZ2U6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBlcnIpO1xcbitcXHRcXHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XFxuK1xcdFxcdGlmIChkb3duX2VycilcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGZhaWxlZCB0byBjbGVhciBzaGFwZXJzIGFmdGVyIHJlc3RhcnQgZXJyb3I6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBkb3duX2Vycik7XFxuK1xcdFxcdC8qIENhbGxlciBob2xkcyBuZXRkZXYvUlROTCBsb2NrOyBkZXZfY2xvc2UoKSB3b3VsZCBkZWFkbG9jay4gKi9cXG4rXFx0XFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIHU2NCBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZSh1NjQgcmF0ZSwgdTMyIHFjb3VudClcXG4re1xcbitcXHRpZiAoIXJhdGUgfHwgcWNvdW50IFxcdTAwM2M9IDEpXFxuK1xcdFxcdHJldHVybiByYXRlO1xcbitcXG4rXFx0cmV0dXJuIGRpdl91NjQocmF0ZSwgcWNvdW50KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU2NCByYXRlLFxcbitcXHRcXHRcXHRcXHRcXHR1MzIgcWNvdW50LCBpbnQgdGMsIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0aWYgKCFyYXRlIHx8IHFjb3VudCBcXHUwMDNjPSAxIHx8IHJhdGUgXFx1MDAzZT0gcWNvdW50KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHQgICBcXFwibXFwcmlvOiAlcyByYXRlICVsbHUgZm9yIHRjICVkIHRvbyBzbWFsbCBmb3IgJXUgcXVldWVzXFxcXG5cXFwiLFxcbitcXHRcXHQgICBuYW1lLCByYXRlLCB0YywgcWNvdW50KTtcXG4rXFx0cmV0dXJuIC1FSU5WQUw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdClcXG4re1xcbitcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHR1MTYgbnVtX3R4cSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXHRpbnQgdGMsIHR4cTtcXG4rXFxuK1xcdGlmIChxb3B0LVxcdTAwM2VudW1fdGMgXFx1MDAzZSBudW1fdHhxKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiTnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBxb3B0LVxcdTAwM2VudW1fdGMsIG51bV90eHEpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG51bV90eHEgXFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiTnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHUzMiBxY291bnQgPSBxb3B0LVxcdTAwM2Vjb3VudFt0Y107XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHFvcHQtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2MgcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcXG4rXFx0XFx0XFx0aWYgKHR4cSBcXHUwMDNlPSBudW1fdHhxKSB7XFxuK1xcdFxcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICB0eHEsIG51bV90eHEpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19yYXRlX3ZhbGlkKHU2NCByYXRlX2J5dGVzX3BzKVxcbit7XFxuK1xcdHU2NCBtYnBzO1xcbitcXG4rXFx0aWYgKCFyYXRlX2J5dGVzX3BzKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGlmIChyYXRlX2J5dGVzX3BzIFxcdTAwM2UgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChyYXRlX2J5dGVzX3BzIFxcdTAwM2UgZGl2X3U2NChVNjRfTUFYLCA4KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0bWJwcyA9IG90eDJfY29udmVydF9yYXRlKHJhdGVfYnl0ZXNfcHMpO1xcbitcXHRyZXR1cm4gbWJwcyBcXHUwMDNjPSAyIHx8IGlsb2cyKG1icHMgLyAyKSBcXHUwMDNjPSBNQVhfUkFURV9FWFBPTkVOVDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0Ym9vbCBoYWRfbXFwcmlvID0gcGZ2Zi1cXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQ7XFxuK1xcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFxcdTAwMjZtcXByaW8tXFx1MDAzZXFvcHQ7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XFxuK1xcdGludCBkb3duX2VyciwgZXJyO1xcbitcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSAwO1xcbitcXG4rXFx0LyogdGMgcWRpc2MgcmVwbGFjZSBncmFmdHMgdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlIG9sZFxcbitcXHQgKiBvbmUuIFRoZSBuZXcgY29uZmlndXJhdGlvbiBoYXMgYWxyZWFkeSByZXByb2dyYW1tZWQgaGFyZHdhcmUgYW5kXFxuK1xcdCAqIHNldCBtcXByaW9fcmF0ZV9saW1pdCwgc28gaWdub3JlIHRlYXJkb3duIGZyb21cXG4rXFx0ICogdGhlIHJlcGxhY2VkIHFkaXNjLlxcbitcXHQgKi9cXG4rXFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duKSB7XFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duID0gZmFsc2U7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqL1xcbitcXHRpZiAoIWhhZF9tcXByaW8pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xcbitcXG4rXFx0aWYgKGlmX3VwKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZG93bl9lcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4re1xcbitcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRib29sIHJlcGxhY2luZyA9IHBmdmYtXFx1MDAzZW1xcHJpb19yYXRlX2xpbWl0O1xcbitcXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbitcXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xcbitcXG4rXFx0aWYgKCFxb3B0LVxcdTAwM2VodylcXG4rXFx0XFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XFxuK1xcbitcXHRpZiAoIWlmX3VwKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChtcXByaW8tXFx1MDAzZXNoYXBlciAhPSBUQ19NUVBSSU9fU0hBUEVSX0JXX1JBVEUpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcXFxuXFxcIiwgbXFwcmlvLVxcdTAwM2VzaGFwZXIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghdGVzdF9iaXQoUU9TX0NJUl9QSVJfU1VQUE9SVCwgXFx1MDAyNnBmdmYtXFx1MDAzZWh3LmNhcF9mbGFnKSkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXFx1MDAzZXBkZXYpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgSFRCIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZXBmY19lbikge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGZ2Zi1cXHUwMDNleGRwX3Byb2cpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xcbitcXHRcXHR1MzIgcWNvdW50ID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcXG4rXFx0XFx0XFx0bWluX3JhdGUgPSBtcXByaW8tXFx1MDAzZW1pbl9yYXRlW3RjXTtcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXTtcXG4rXFxuK1xcdFxcdGlmIChtaW5fcmF0ZSBcXHUwMDI2XFx1MDAyNiBtYXhfcmF0ZSBcXHUwMDI2XFx1MDAyNiBtaW5fcmF0ZSBcXHUwMDNlIG1heF9yYXRlKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpIHtcXG4rXFx0XFx0XFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIG1pbl9yYXRlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBxY291bnQsIHRjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwibWluXFxcIik7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpIHtcXG4rXFx0XFx0XFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIG1heF9yYXRlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBxY291bnQsIHRjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwibWF4XFxcIik7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1pbl9yYXRlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgcWNvdW50KSkpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGV4Y2VlZHMgaGFyZHdhcmUgbGltaXRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIG1pbl9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtYXhfcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHFjb3VudCkpKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBleGNlZWRzIGhhcmR3YXJlIGxpbWl0XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtYXhfcmF0ZSwgdGMpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihwZnZmLVxcdTAwM2VuZXRkZXYsIHRydWUpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2Zik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBxb3B0KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0Lyogb3R4Ml9tcXByaW9fdXAoKSBtYXkgaGF2ZSByZXN0b3JlZCB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbiBkdXJpbmdcXG4rXFx0ICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXdcXG4rXFx0ICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGVcXG4rXFx0ICogbGltaXRzIGluIGhhcmR3YXJlLlxcbitcXHQgKi9cXG4rXFx0aWYgKG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChwZnZmKSkge1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX2ZsYWdzID0gbXFwcmlvLVxcdTAwM2VmbGFncztcXG4rXFxuK1xcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIHFvcHQtXFx1MDAzZW51bV90YzsgdGMrKykge1xcbitcXHRcXHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XFxuK1xcdFxcdHUzMiBxY291bnQgPSBxb3B0LVxcdTAwM2Vjb3VudFt0Y107XFxuK1xcbitcXHRcXHQvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBwYXNzZWQgYXMgemVybyBhbmQgYm90aCBNRFFcXG4rXFx0XFx0ICogc2hhcGVyIHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZDsgc2VlXFxuK1xcdFxcdCAqIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gb3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobXFwcmlvLVxcdTAwM2VtaW5fcmF0ZVt0Y10sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHFjb3VudCk7XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXFxuK1xcdFxcdFxcdG1heF9yYXRlID0gb3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobXFwcmlvLVxcdTAwM2VtYXhfcmF0ZVt0Y10sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHFjb3VudCk7XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHFvcHQtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2MgcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHRjLCB0eHEsIG1pbl9yYXRlLCBtYXhfcmF0ZSk7XFxuK1xcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fbWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fbWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xcbitcXG4rXFx0XFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSk7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHFvcHQtXFx1MDAzZW51bV90Yyk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IGkrKylcXG4rXFx0XFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHFvcHQtXFx1MDAzZWNvdW50W2ldLCBxb3B0LVxcdTAwM2VvZmZzZXRbaV0pO1xcbitcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XFxuK1xcbitcXHRpZiAocmVwbGFjaW5nKVxcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93biA9IHRydWU7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2NsZWFudXA6XFxuK1xcdG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XFxuK1xcbitcXHRpZiAoYmFzZS1cXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGNhcHMgPSBiYXNlLVxcdTAwM2VjYXBzO1xcbitcXHRjYXBzLVxcdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxcbiBcXHRcXHQgIHZvaWQgKnR5cGVfZGF0YSlcXG4ge1xcbiBcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19RVUVSWV9DQVBTOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XFxuIFxcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4gXFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuaW5kZXggNjljMDkxMWUyOGU5MS4uZjc2OTNmMDJhMDdjNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcXG5AQCAtMTE4LDYgKzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbiBcXHQvKiBjb25maWd1cmUgUElSICovXFxuIFxcdG1heHJhdGUgPSAobm9kZS1cXHUwMDNlcmF0ZSBcXHUwMDNlIG5vZGUtXFx1MDAzZWNlaWwpID8gbm9kZS1cXHUwMDNlcmF0ZSA6IG5vZGUtXFx1MDAzZWNlaWw7XFxuIFxcbitcXHQvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW5cXG4rXFx0ICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS5cXG4rXFx0ICovXFxuIFxcdGNmZy1cXHUwMDNlcmVndmFsWypudW1fcmVnc10gPVxcbiBcXHRcXHRvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgbWF4cmF0ZSwgNjU1MzYpO1xcbiBcXHQoKm51bV9yZWdzKSsrO1xcbkBAIC0xNzI5LDExICsxNzMyLDIzIEBAIHZvaWQgb3R4Ml9xb3NfY29uZmlnX3R4c2NocShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuIFxcdG90eDJfcW9zX3Jvb3RfZGVzdHJveShwZnZmKTtcXG4gfVxcbiBcXG4rYm9vbCBvdHgyX3Fvc19odGJfYWN0aXZlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRyZXR1cm4gb3R4Ml9zd19ub2RlX2ZpbmQocGZ2ZiwgT1RYMl9RT1NfUk9PVF9DTEFTU0lEKTtcXG4rfVxcbitcXG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKVxcbiB7XFxuIFxcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbiBcXHRpbnQgcmVzO1xcbiBcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpb19yYXRlX2xpbWl0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBodGItXFx1MDAzZWNvbW1hbmQgIT0gVENfSFRCX0RFU1RST1kpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi1cXHUwMDNlZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwiSFRCIG9mZmxvYWQgY2Fubm90IGJlIHVzZWQgd2l0aCBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgYWN0aXZlXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0c3dpdGNoIChodGItXFx1MDAzZWNvbW1hbmQpIHtcXG4gXFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxcbiBcXHRcXHRyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLVxcdTAwM2VwYXJlbnRfY2xhc3NpZCxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXFxuaW5kZXggMjIxYmQwNDM4ZjYwMy4uYzc3N2NjNDJlYWM5YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmhcXG5AQCAtMjMsNiArMjMsNyBAQCBlbnVtIHFvc19zbXFfb3BlcmF0aW9ucyB7XFxuIHU2NCBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwoc3RydWN0IG90eDJfbmljICpuaWMsIHU2NCBtYXhyYXRlLCB1MzIgYnVyc3QpO1xcbiBcXG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKTtcXG4rYm9vbCBvdHgyX3Fvc19odGJfYWN0aXZlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuIHZvaWQgb3R4Ml9xb3NfZnJlZV9xaWQoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeCk7XFxuIGludCBvdHgyX3Fvc19lbmFibGVfc3Eoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIzOjUzLjAwMjM2MzIzMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1Nzc2NTQyNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gVGhlcmVmb3JlLCB0aGUgY29kZSBjYW5ub3QgYmUgbWVhbmluZ2Z1bGx5IGZ1enplZCBpbiB0aGlzIGNvbnRleHQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMmViZjQzZGZhNDAwMmI0N2ZhM2Y3ZWFjYzJkNWMyZDQyODc4Y2Q0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDk6MjM6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbmluZGV4IGI4MWM0N2VhMDIzYmUuLjIyZjY0YzFlZGU5MWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuQEAgLTMzMSw4ICszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcbitcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7XG4rXHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICBcInBjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcblwiLFxuK1x0XHRcdFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuaW5kZXggY2E3M2E5NGRiNzk0My4uZGZhYmRhMTIwMWJkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuQEAgLTYxNCw2ICs2MTQsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XG4gXG4rc3RhdGljIGludFxuK290eDJfbml4X3RtcV9yZWdfd3JpdGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgY250LFxuK1x0XHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXG4rXHRcdCAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKVxuK3tcbitcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuK1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4rXHRpbnQgaSwgZXJyO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcbitcdGlmICghcmVxKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdHJlcS1cdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcbitcdHJlcS1cdTAwM2VudW1fcmVncyA9IGNudDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4rXHRcdHJlcS1cdTAwM2VyZWdbaV0gPSByZWdfYWRkcltpXTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XG4rXHR9XG4rXG4rXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xuK1x0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbitcdGludCBlcnIsIHNtcSwgaSwgY250ID0gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV07IGkrKykge1xuK1x0XHRzbXEgPSBwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcbitcbitcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuK1x0XHRjbnQrKztcbitcbitcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuK1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuK1x0XHRjbnQrKztcbitcbitcdFx0aWYgKGNudCBcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4rXHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZmFpbDtcbitcdFx0Y250ID0gMDtcbitcdH1cbitcbitcdGlmIChjbnQpIHtcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4rXHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZmFpbDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK2ZhaWw6XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKVxuK3tcbitcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuK1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4rXHRpbnQgZXJyLCBzbXEsIG4gPSAwO1xuK1x0dTY0IHJlZ19hZGRyWzJdO1xuK1x0dTY0IHJlZ192YWxbMl07XG4rXHR1NjQgcmF0ZTtcbitcbitcdGlmICghbWF4cmF0ZSBcdTAwMjZcdTAwMjYgIW1pbnJhdGUpIHtcbitcdFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuK1x0XHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0XHRyZWdfdmFsWzBdID0gMDtcbitcdFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdFx0cmVnX3ZhbFsxXSA9IDA7XG4rXHRcdHJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdH1cbitcbitcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4rXHRpZiAoIXJlcSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4rXG4rXHQvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvXG4rXHQgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYXG4rXHQgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzXG4rXHQgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGFcbitcdCAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYVxuK1x0ICogaGFyZHdhcmUgY2FwLlxuK1x0ICpcbitcdCAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksXG4rXHQgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvblxuK1x0ICogZXZlcnkgdXBkYXRlIHNvIG9taXR0ZWQgcmF0ZXMgYXJlIGFwcGxpZWQgZXhwbGljaXRseSByYXRoZXIgdGhhblxuK1x0ICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS5cbitcdCAqL1xuK1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0aWYgKG1heHJhdGUpIHtcbitcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpO1xuK1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4rXHR9XG4rXHRuKys7XG4rXG4rXHQvKiBDSVIrUElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xuK1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuK1x0aWYgKG1pbnJhdGUpIHtcbitcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xuK1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4rXHR9XG4rXHRuKys7XG4rXHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBuO1xuK1xuK1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2Zvcl9wZmMpXG4ge1xuIFx0dTE2ICgqc2NocV9saXN0KVtNQVhfVFhTQ0hRX1BFUl9GVU5DXTtcbkBAIC02NTAsNyArNzg2LDIwIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXG4gXHRcdFx0XHRcdFx0KHU2NClody1cdTAwM2VzbXFfbGlua190eXBlKTtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzKys7XG4gXHRcdC8qIE1EUSBjb25maWcgKi9cbi1cdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQpIHtcbitcdFx0XHQvKiBUT0RPOiBQcm9ncmFtIE5JWF9BRl9UTDRYX1RPUE9MT0dZIG9uIFRMNFswXS4gTVFQUklPXG4rXHRcdFx0ICogcGFyZW50cyBldmVyeSBNRFEgdW5kZXIgdGhlIHNhbWUgVEw0IHdpdGggc2NoZWR1bGVcbitcdFx0XHQgKiBwcmlvcml0eSAwLCBzbyBzaWJsaW5nIGFyYml0cmF0aW9uIGRlcGVuZHMgb24gdGhlIFRMNFxuK1x0XHRcdCAqIHRvcG9sb2d5IHJlZ2lzdGVyLiBPbmx5IHRoZSBIVEIgcGF0aCBwcm9ncmFtcyB0aGlzXG4rXHRcdFx0ICogdG9kYXkgYW5kIHRoZSBBRiBkb2VzIG5vdCByZXNldCBpdCBvbiBzY2hxIHJlYWxsb2MsXG4rXHRcdFx0ICogc28gYSBUTDQgcmV1c2VkIGFmdGVyIEhUQiB0ZWFyZG93biBjYW4gcmV0YWluIHN0YWxlXG4rXHRcdFx0ICogUlJfUFJJTy9QUklPX0FOQ0hPUiBhbmQgc3RhcnZlIHNvbWUgVFggcXVldWVzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcbitcdFx0fVxuK1xuIFx0XHRyZXEtXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xuIFx0XHRyZXEtXHUwMDNlcmVndmFsWzFdID0gcGFyZW50IFx1MDAzY1x1MDAzYyAxNjtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzKys7XG5AQCAtNzc4LDYgKzkyNyw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XG4gXHR9XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fcmF0ZV9saW1pdClcbitcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcbiBcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFx1MDAyNnBmdmYtXHUwMDNlbWJveCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5pbmRleCBlZWNlZTYxMmI3YjJjLi5jZjFjZDM5MWJmNTJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5AQCAtNTE1LDYgKzUxNSwxMiBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xuIFx0dTY0XHRcdFx0ZmxhZ3M7XG4gXHR1NjRcdFx0XHQqY3Ffb3BfYWRkcjtcbiBcbitcdHUzMlx0XHRcdG1xcHJpb19mbGFncztcbitcdHU2NFx0XHRcdCptcXByaW9fbWluX3JhdGU7XG4rXHR1NjRcdFx0XHQqbXFwcmlvX21heF9yYXRlO1xuK1x0Ym9vbFx0XHRcdG1xcHJpb19yYXRlX2xpbWl0O1xuK1x0Ym9vbFx0XHRcdG1xcHJpb19za2lwX3RlYXJkb3duO1xuK1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgKzEyNTIsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXG4rXHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li44MzJmMDVjZjEyOWVlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxuIFx0dTggb2xkX3BmY19lbjtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fcmF0ZV9saW1pdCBcdTAwMjZcdTAwMjYgcGZjLVx1MDAzZXBmY19lbikge1xuK1x0XHRuZXRkZXZfZXJyKGRldixcbitcdFx0XHQgICBcIlBGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRvbGRfcGZjX2VuID0gcGZ2Zi1cdTAwM2VwZmNfZW47XG4gXHRwZnZmLVx1MDAzZXBmY19lbiA9IHBmYy1cdTAwM2VwZmNfZW47XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5pbmRleCBhMDM0MGYzNDIyYmY5Li5jMTMxN2ZiY2Q4NDg0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbkBAIC0yODcsNiArMjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fcmF0ZV9saW1pdCBcdTAwMjZcdTAwMjZcbitcdCAgICAoY2hhbm5lbC1cdTAwM2V0eF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxuK1x0ICAgICBjaGFubmVsLVx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXHUwMDNlaHcucnhfcXVldWVzKSkge1xuK1x0XHRuZXRkZXZfaW5mbyhkZXYsXG4rXHRcdFx0ICAgIFwiTm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4gXHRpZiAoaWZfdXApXG4gXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKGRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IGM5OTVmMjkwMDg1OTAuLjcwYzk1ZTljNWJmODYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5AQCAtMTk4MCw2ICsxOTgwLDEwIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZyZWVfbWVtO1xuIFxuK1x0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZnJlZV9odztcbitcbiBcdC8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqL1xuIFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcdTAwM2MgcGYtXHUwMDNlaHcuY2ludF9jbnQ7IHFpZHgrKykge1xuIFx0XHRjcV9wb2xsID0gXHUwMDI2cXNldC1cdTAwM2VuYXBpW3FpZHhdO1xuQEAgLTIxNDAsNiArMjE0NCw3IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGZyZWVfaXJxKHZlYywgcGYpO1xuIGVycl9kaXNhYmxlX25hcGk6XG4gXHRvdHgyX2Rpc2FibGVfbmFwaShwZik7XG4rZXJyX2ZyZWVfaHc6XG4gXHRvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHBmKTtcbiBlcnJfZnJlZV9tZW06XG4gXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xuQEAgLTI4NDYsNiArMjg1MSwxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLVx1MDAzZW5ldGRldik7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xuIFxuK1x0aWYgKHByb2cgXHUwMDI2XHUwMDI2IHBmLVx1MDAzZW1xcHJpb19yYXRlX2xpbWl0KSB7XG4rXHRcdG5ldGRldl9lcnIoZGV2LFxuK1x0XHRcdCAgIFwiWERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbiBcdGlmIChwcm9nIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlbXR1IFx1MDAzZSBNQVhfWERQX01UVSkge1xuIFx0XHRuZXRkZXZfd2FybihkZXYsIFwiSnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbmluZGV4IDAzOWZkNDdlYmY1MjIuLjViZDk1ZjA2MTY2MjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5AQCAtMTYsNiArMTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfbWlycmVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNfYWN0L3RjX3ZsYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcHY2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImNuMTBrLmhcIlxuICNpbmNsdWRlIFwib3R4Ml9jb21tb24uaFwiXG5AQCAtMzEsNiArMzIsOCBAQFxuIFxuICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlBcdFx0KC0xVSlcbiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUU1x0XHQ4XG4rLyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqL1xuKyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFNcdCgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpXG4gXG4gc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxuIFx0XHRcdFx0ICAgICAgdTMyICpidXJzdF9leHAsIHUzMiAqYnVyc3RfbWFudGlzc2EpXG5AQCAtNjEsNiArNjQsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXG4gXHRcdFx0KmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgXHUwMDNjXHUwMDNjICgqYnVyc3RfZXhwIC0gNykpO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuK1x0XHQvKiBidXJzdCAwOiBsYXJnZXN0IGVuY29kYWJsZSBidXJzdCAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb25cbitcdFx0ICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LlxuK1x0XHQgKi9cbiBcdFx0KmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDtcbiBcdFx0KmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhO1xuIFx0fVxuQEAgLTE2MDAsMTQgKzE2MDYsNDYyIEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgIG5pYywgbmljLCBpbmdyZXNzKTtcbiB9XG4gXG4rLyogRnJlZSB0aGUgcGVyLXF1ZXVlIG1pbi9tYXggcmF0ZSBjYWNoZXMuICovXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgcGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUpO1xuK1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUpO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgPSBOVUxMO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUgPSBOVUxMO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fZmxhZ3MgPSAwO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4rXG4rXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuK1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4rXHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSksXG4rXHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbitcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKSxcbitcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKSB7XG4rXHRcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0aW50IGx2bCwgaWR4O1xuK1xuK1x0Zm9yIChsdmwgPSAwOyBsdmwgXHUwMDNjIE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwrKykge1xuK1x0XHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgcGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W2x2bF07IGlkeCsrKSB7XG4rXHRcdFx0aWYgKHBmdmYtXHUwMDNlaHcudHhzY2hxX2xpc3RbbHZsXVtpZHhdKVxuK1x0XHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rLyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsXG4rICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb25cbisgKiBleHBsaWNpdCBtcXByaW8gdGVhcmRvd24gKHRjIHFkaXNjIGRlbCkgYW5kIGVycm9yIGNsZWFudXAsIG5vdCBvblxuKyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLlxuKyAqL1xuK2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW9fcmF0ZV9saW1pdClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAob3R4Ml90eHNjaHFfaXNfYWxsb2NhdGVkKHBmdmYpKVxuK1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4rXG4rXHRwZnZmLVx1MDAzZW1xcHJpb19yYXRlX2xpbWl0ID0gZmFsc2U7XG4rXHRwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duID0gZmFsc2U7XG4rXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIDApO1xuK1x0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuK1x0aW50IHR4cSwgZXJyO1xuK1xuK1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpb19yYXRlX2xpbWl0KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZvciAodHhxID0gMDsgdHhxIFx1MDAzYyBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXG4rXHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19mbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4rXHRcdFx0bWluX3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZVt0eHFdO1xuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGVbdHhxXTtcbitcbitcdFx0aWYgKCFtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgIW1heF9yYXRlKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsXG4rXHRcdFx0XHRcdFx0ICAgbWF4X3JhdGUpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXFxuXCIsXG4rXHRcdFx0XHQgICB0eHEsIGVycik7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpb1xuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxuKyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLlxuKyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS4gIFRoZSBmdWxsIHN0b3Avb3BlbiBjeWNsZSBjbGVhcnNcbisgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XG4rICogdHJhZmZpYy4gIElmIG9wZW4gZmFpbHMsIG5ldGlmX2Nsb3NlKCkgY2xlYXJzIElGRl9VUCBhbmQgbGVhdmVzIHRoZVxuKyAqIGludGVyZmFjZSBhZG1pbmlzdHJhdGl2ZWx5IGRvd24uXG4rICovXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXG4re1xuK1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHM7XG4rXHRpbnQgZXJyO1xuK1xuK1x0bmV0ZGV2X2luZm8obmV0ZGV2LFxuK1x0XHQgICAgXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcblwiKTtcbitcbitcdGVyciA9IG9wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqL1xuK1x0aWYgKHJhdGVfbGltaXQpXG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvX3JhdGVfbGltaXQgPSB0cnVlO1xuK1xuK1x0ZXJyID0gb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGludCBkb3duX2VycjtcbitcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXG5cIixcbitcdFx0XHQgICBlcnIpO1xuK1x0XHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XG4rXHRcdGlmIChkb3duX2VycilcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgc2hhcGVycyBhZnRlciByZXN0YXJ0IGVycm9yOiAlZFxcblwiLFxuK1x0XHRcdFx0ICAgZG93bl9lcnIpO1xuK1x0XHQvKiBDYWxsZXIgaG9sZHMgbmV0ZGV2L1JUTkwgbG9jazsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suICovXG4rXHRcdG5ldGlmX2Nsb3NlKG5ldGRldik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgdTY0IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKHU2NCByYXRlLCB1MzIgcWNvdW50KVxuK3tcbitcdGlmICghcmF0ZSB8fCBxY291bnQgXHUwMDNjPSAxKVxuK1x0XHRyZXR1cm4gcmF0ZTtcbitcbitcdHJldHVybiBkaXZfdTY0KHJhdGUsIHFjb3VudCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1NjQgcmF0ZSxcbitcdFx0XHRcdFx0dTMyIHFjb3VudCwgaW50IHRjLCBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdGlmICghcmF0ZSB8fCBxY291bnQgXHUwMDNjPSAxIHx8IHJhdGUgXHUwMDNlPSBxY291bnQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdCAgIFwibXFwcmlvOiAlcyByYXRlICVsbHUgZm9yIHRjICVkIHRvbyBzbWFsbCBmb3IgJXUgcXVldWVzXFxuXCIsXG4rXHRcdCAgIG5hbWUsIHJhdGUsIHRjLCBxY291bnQpO1xuK1x0cmV0dXJuIC1FSU5WQUw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpXG4re1xuK1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcdGludCB0YywgdHhxO1xuK1xuK1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBudW1fdHhxKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcblwiLFxuK1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAobnVtX3R4cSBcdTAwM2UgTUFYX1RYU0NIUV9QRVJfRlVOQykge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIk51bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XFxuXCIsXG4rXHRcdFx0ICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdGZvciAodHhxID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICsgcWNvdW50OyB0eHErKykge1xuK1x0XHRcdGlmICh0eHEgXHUwMDNlPSBudW1fdHhxKSB7XG4rXHRcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdFx0ICAgXCJtcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXG5cIixcbitcdFx0XHRcdFx0ICAgdHhxLCBudW1fdHhxKTtcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpXG4re1xuK1x0dTY0IG1icHM7XG4rXG4rXHRpZiAoIXJhdGVfYnl0ZXNfcHMpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2UgZGl2X3U2NChVNjRfTUFYLCA4KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0bWJwcyA9IG90eDJfY29udmVydF9yYXRlKHJhdGVfYnl0ZXNfcHMpO1xuK1x0cmV0dXJuIG1icHMgXHUwMDNjPSAyIHx8IGlsb2cyKG1icHMgLyAyKSBcdTAwM2M9IE1BWF9SQVRFX0VYUE9ORU5UO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbitcdFx0XHRcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4re1xuK1x0Ym9vbCBoYWRfbXFwcmlvID0gcGZ2Zi1cdTAwM2VtcXByaW9fcmF0ZV9saW1pdDtcbitcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuK1x0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbitcdGludCBkb3duX2VyciwgZXJyO1xuK1xuK1x0cW9wdC1cdTAwM2VodyA9IDA7XG4rXG4rXHQvKiB0YyBxZGlzYyByZXBsYWNlIGdyYWZ0cyB0aGUgbmV3IG1xcHJpbyBiZWZvcmUgZGVzdHJveWluZyB0aGUgb2xkXG4rXHQgKiBvbmUuIFRoZSBuZXcgY29uZmlndXJhdGlvbiBoYXMgYWxyZWFkeSByZXByb2dyYW1tZWQgaGFyZHdhcmUgYW5kXG4rXHQgKiBzZXQgbXFwcmlvX3JhdGVfbGltaXQsIHNvIGlnbm9yZSB0ZWFyZG93biBmcm9tXG4rXHQgKiB0aGUgcmVwbGFjZWQgcWRpc2MuXG4rXHQgKi9cbitcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duKSB7XG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvX3NraXBfdGVhcmRvd24gPSBmYWxzZTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqL1xuK1x0aWYgKCFoYWRfbXFwcmlvKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbitcbitcdGlmIChpZl91cCkge1xuK1x0XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGRvd25fZXJyO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdGJvb2wgcmVwbGFjaW5nID0gcGZ2Zi1cdTAwM2VtcXByaW9fcmF0ZV9saW1pdDtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xuK1xuK1x0aWYgKCFxb3B0LVx1MDAzZWh3KVxuK1x0XHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbitcbitcdGlmICghaWZfdXApIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChtcXByaW8tXHUwMDNlc2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcblwiLCBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXHUwMDNlcGRldikpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChwZnZmLVx1MDAzZXBmY19lbikge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAocGZ2Zi1cdTAwM2V4ZHBfcHJvZykge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdG1pbl9yYXRlID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4rXHRcdFx0bWF4X3JhdGUgPSBtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdO1xuK1xuK1x0XHRpZiAobWluX3JhdGUgXHUwMDI2XHUwMDI2IG1heF9yYXRlIFx1MDAyNlx1MDAyNiBtaW5fcmF0ZSBcdTAwM2UgbWF4X3JhdGUpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxuXCIsXG4rXHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSkge1xuK1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBtaW5fcmF0ZSxcbitcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsXG4rXHRcdFx0XHRcdFx0XHQgICBcIm1pblwiKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSkge1xuK1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBtYXhfcmF0ZSxcbitcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsXG4rXHRcdFx0XHRcdFx0XHQgICBcIm1heFwiKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1pbl9yYXRlLFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgICAgcWNvdW50KSkpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBleGNlZWRzIGhhcmR3YXJlIGxpbWl0XFxuXCIsXG4rXHRcdFx0XHQgICBtaW5fcmF0ZSwgdGMpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQob3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobWF4X3JhdGUsXG4rXHRcdFx0XHRcdFx0XHRcdCAgICAgICBxY291bnQpKSkge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGV4Y2VlZHMgaGFyZHdhcmUgbGltaXRcXG5cIixcbitcdFx0XHRcdCAgIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtXHUwMDNlbmV0ZGV2LCB0cnVlKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBxb3B0KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIG90eDJfbXFwcmlvX3VwKCkgbWF5IGhhdmUgcmVzdG9yZWQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZHVyaW5nXG4rXHQgKiB0aGUgcmVzdGFydCBhYm92ZS4gQ2xlYXIgZXZlcnkgTURRIHNoYXBlciBiZWZvcmUgYXBwbHlpbmcgdGhlIG5ld1xuK1x0ICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGVcbitcdCAqIGxpbWl0cyBpbiBoYXJkd2FyZS5cbitcdCAqL1xuK1x0aWYgKG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChwZnZmKSkge1xuK1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fZmxhZ3MgPSBtcXByaW8tXHUwMDNlZmxhZ3M7XG4rXG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YysrKSB7XG4rXHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbitcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuK1xuK1x0XHQvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBwYXNzZWQgYXMgemVybyBhbmQgYm90aCBNRFFcbitcdFx0ICogc2hhcGVyIHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZDsgc2VlXG4rXHRcdCAqIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKS5cbitcdFx0ICovXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdG1pbl9yYXRlID0gb3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXSxcbitcdFx0XHRcdFx0XHRcdCAgICAgIHFjb3VudCk7XG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gb3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXSxcbitcdFx0XHRcdFx0XHRcdCAgICAgIHFjb3VudCk7XG4rXG4rXHRcdGZvciAodHhxID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICsgcWNvdW50OyB0eHErKykge1xuK1x0XHRcdG5ldGRldl9kYmcobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcXG5cIixcbitcdFx0XHRcdCAgIHRjLCB0eHEsIG1pbl9yYXRlLCBtYXhfcmF0ZSk7XG4rXG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcbitcbitcdFx0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSxcbitcdFx0XHRcdFx0XHRcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdGdvdG8gY2xlYW51cDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBxb3B0LVx1MDAzZW51bV90Yyk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgaSsrKVxuK1x0XHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcW9wdC1cdTAwM2Vjb3VudFtpXSwgcW9wdC1cdTAwM2VvZmZzZXRbaV0pO1xuK1xuK1x0cW9wdC1cdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcbitcbitcdGlmIChyZXBsYWNpbmcpXG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvX3NraXBfdGVhcmRvd24gPSB0cnVlO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rY2xlYW51cDpcbitcdG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpXG4re1xuK1x0c3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTtcbitcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcztcbitcbitcdGlmIChiYXNlLVx1MDAzZXR5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRjYXBzID0gYmFzZS1cdTAwM2VjYXBzO1xuK1x0Y2Fwcy1cdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuIFx0XHQgIHZvaWQgKnR5cGVfZGF0YSlcbiB7XG4gXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgVENfUVVFUllfQ0FQUzpcbitcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XG4rXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcbitcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbmluZGV4IDY5YzA5MTFlMjhlOTEuLmY3NjkzZjAyYTA3YzQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuQEAgLTExOCw2ICsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdC8qIGNvbmZpZ3VyZSBQSVIgKi9cbiBcdG1heHJhdGUgPSAobm9kZS1cdTAwM2VyYXRlIFx1MDAzZSBub2RlLVx1MDAzZWNlaWwpID8gbm9kZS1cdTAwM2VyYXRlIDogbm9kZS1cdTAwM2VjZWlsO1xuIFxuK1x0LyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuXG4rXHQgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLlxuK1x0ICovXG4gXHRjZmctXHUwMDNlcmVndmFsWypudW1fcmVnc10gPVxuIFx0XHRvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgbWF4cmF0ZSwgNjU1MzYpO1xuIFx0KCpudW1fcmVncykrKztcbkBAIC0xNzI5LDExICsxNzMyLDIzIEBAIHZvaWQgb3R4Ml9xb3NfY29uZmlnX3R4c2NocShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRvdHgyX3Fvc19yb290X2Rlc3Ryb3kocGZ2Zik7XG4gfVxuIFxuK2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0cmV0dXJuIG90eDJfc3dfbm9kZV9maW5kKHBmdmYsIE9UWDJfUU9TX1JPT1RfQ0xBU1NJRCk7XG4rfVxuK1xuIGludCBvdHgyX3NldHVwX3RjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKmh0YilcbiB7XG4gXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdGludCByZXM7XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fcmF0ZV9saW1pdCBcdTAwMjZcdTAwMjZcbitcdCAgICBodGItXHUwMDNlY29tbWFuZCAhPSBUQ19IVEJfREVTVFJPWSkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoaHRiLVx1MDAzZWV4dGFjayxcbitcdFx0XHRcdCAgIFwiSFRCIG9mZmxvYWQgY2Fubm90IGJlIHVzZWQgd2l0aCBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgYWN0aXZlXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRzd2l0Y2ggKGh0Yi1cdTAwM2Vjb21tYW5kKSB7XG4gXHRjYXNlIFRDX0hUQl9DUkVBVEU6XG4gXHRcdHJldHVybiBvdHgyX3Fvc19yb290X2FkZChwZnZmLCBodGItXHUwMDNlcGFyZW50X2NsYXNzaWQsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG5pbmRleCAyMjFiZDA0MzhmNjAzLi5jNzc3Y2M0MmVhYzljIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmhcbkBAIC0yMyw2ICsyMyw3IEBAIGVudW0gcW9zX3NtcV9vcGVyYXRpb25zIHtcbiB1NjQgb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1NjQgbWF4cmF0ZSwgdTMyIGJ1cnN0KTtcbiBcbiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpO1xuK2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4gdm9pZCBvdHgyX3Fvc19mcmVlX3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcbiBpbnQgb3R4Ml9xb3NfZW5hYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjM6NTMuMDAyMzY0MzUyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk2MjE0MzUxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogTWFydmVsbCBPY3Rlb25UWDIgTklDIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkgaGF2ZSBhIHBhdGNoIGhlcmUgdGhhdCBhZGRzIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBzdXBwb3J0IHRvIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNgLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNgLCBhbmQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNgLCB3aGljaCB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBzcGVjaWZpYyBwaWVjZSBvZiBoYXJkd2FyZTogdGhlIE9jdGVvblRYMi5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyBkcml2ZXIgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVU/IFRoZSBPY3Rlb25UWDIgaXMgYSBoYXJkd2FyZSBOSUMsIGEgUENJZSBkZXZpY2UsIHNvIHRoYXQgcmFpc2VzIGEgcmVkIGZsYWcgcmlnaHQgYXdheS4gSXMgdGhpcyBvbmUgb2YgdGhvc2UgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgdGhhdCByZXF1aXJlcyBhICpwaHlzaWNhbCogUENJZSBjYXJkLCBzb21ldGhpbmcgbm90IGVtdWxhdGVkIGJ5IHN0YW5kYXJkIFFFTVU/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgdGhlIGNhc2UsIGFzIE9jdGVvblRYMiBpcyBhIHBoeXNpY2FsIGhhcmR3YXJlIE5JQy5cblxuVGhlIGluc3RydWN0aW9ucyBJIGhhdmUgZXhwbGljaXRseSBjYWxsIG91dCBzaXR1YXRpb25zIGxpa2UgdGhpcywgc3BlY2lmaWNhbGx5IG1lbnRpb25pbmcgXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNvbmZpcm0uIEkgbmVlZCB0byBtYWtlIHN1cmUgT2N0ZW9uVFgyIGlzbid0IHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlbXVsYXRlZC4gTGV0J3Mgc2VlLi4uIGl0J3MgYW4gRXRoZXJuZXQgZHJpdmVyIGZvciBNYXJ2ZWxsIE9jdGVvblRYMiBTb0NzLCBidXQgZG9lcyB0aGF0IG1lYW4gaXQncyBlbXVsYXRhYmxlPyBJIGRvdWJ0IGl0OyB0aGVzZSBhcmUgdXN1YWxseSB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIGhhcmR3YXJlLiBJIG5lZWQgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWdgIHRvIGdldCBtb3JlIGRldGFpbHMgb24gaXRzIGNoYXJhY3RlcmlzdGljcy5cblxuR2l2ZW4gdGhlIGluaXRpYWwgYXNzZXNzbWVudCwgSSdtIHByZXR0eSBjb25maWRlbnQgdGhpcyBwYXRjaCBpcyBnb2luZyB0byBiZSBjbGFzc2lmaWVkIGFzICpXb3J0aEZ1enppbmc9ZmFsc2UqLCBiYXNlZCBvbiB0aGUgcmVxdWlyZW1lbnQgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ3MywiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIzOjU5Ljk2NDUxMDY2M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg3NTUyNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9DVEVPTlRYMl9BRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9Nj1jb25maWcgT0NURU9OVFgyX01CT1hcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjk6Y29uZmlnIE9DVEVPTlRYMl9BRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTAtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIFJWVSBBZG1pbiBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjI0OjAwLjIxMzI2OTg0NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjAyNzI0OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEtjb25maWcgUmV2aWV3KipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBcIkxldCdzIHJlYWQgdGhlIEtjb25maWcuXCIgVGhhdCdzIHRoZSBmaXJzdCBzdGVwLCBpc24ndCBpdD8gQmVmb3JlIGFueSBtb2RpZmljYXRpb25zLCBiZWZvcmUgYW55IGRlc2lnbiBkZWNpc2lvbnMsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uIHNwYWNlLiBJJ20gbm90IGp1c3QgKmxvb2tpbmcqIGF0IGl0LCBJJ20gbWVudGFsbHkgcGFyc2luZyBpdC4gSSdtIGFscmVhZHkgc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgZGVwZW5kZW5jaWVzLCBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IG9wdGlvbnMsIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLiBJJ20gbG9va2luZyBmb3IgdGhlIG92ZXJhbGwgc3RydWN0dXJlIOKAkyB3aGF04oCZcyB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgY29uZmlndXJhdGlvbj8gV2hhdCBhcmVhcyBkb2VzIGl0IGNvdmVyPyBJJ20gc2Nhbm5pbmcgZm9yIGZhbWlsaWFyIG1vZHVsZXMgb3IgZmVhdHVyZXMsIGFuZCBxdWlja2x5IGlkZW50aWZ5aW5nIHRob3NlIGFyZWFzIHRoYXQgSSdtIGxlc3MgY29tZm9ydGFibGUgd2l0aCBhbmQgbmVlZCB0byByZXZpc2l0IG1vcmUgY2xvc2VseS4gTXkgYnJhaW4gaXMgYWxyZWFkeSBjYWxjdWxhdGluZyB0aGUgY29tcGxleGl0eSBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gYXMgYSB3aG9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NzgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjI0OjAzLjQzMzU0NTAzNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFydmVsbCBSVlUgTmV0d29yayBkcml2ZXJzIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE9DVEVPTlRYMl9NQk9YXFxuICAgNzpcXHRcXHR0cmlzdGF0ZVxcbiAgIDg6XFx0XFxuICAgOTpcXHRjb25maWcgT0NURU9OVFgyX0FGXFxuICAxMDpcXHRcXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgUlZVIEFkbWluIEZ1bmN0aW9uIGRyaXZlclxcXCJcXG4gIDExOlxcdFxcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxcbiAgMTI6XFx0XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uICg2NEJJVCBcXHUwMDI2XFx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgMTU6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgMTY6XFx0XFx0aGVscFxcbiAgMTc6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJ3MgT2N0ZW9uVFgyIFJlc291cmNlIFZpcnR1YWxpemF0aW9uXFxuICAxODpcXHRcXHQgIFVuaXQncyBhZG1pbiBmdW5jdGlvbiBtYW5hZ2VyIHdoaWNoIG1hbmFnZXMgYWxsIFJWVSBIVyByZXNvdXJjZXNcXG4gIDE5OlxcdFxcdCAgYW5kIHByb3ZpZGVzIGEgbWVkaXVtIHRvIG90aGVyIFBGL1ZGcyB0byBjb25maWd1cmUgSFcuIFNob3VsZCBiZVxcbiAgMjA6XFx0XFx0ICBlbmFibGVkIGZvciBvdGhlciBSVlUgZGV2aWNlIGRyaXZlcnMgdG8gd29yay5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y29uZmlnIE5EQ19ESVNfRFlOQU1JQ19DQUNISU5HXFxuICAyMzpcXHRcXHRib29sIFxcXCJEaXNhYmxlIGNhY2hpbmcgb2YgZHluYW1pYyBlbnRyaWVzIGluIE5EQ1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gT0NURU9OVFgyX0FGXFxuICAyNTpcXHRcXHRkZWZhdWx0IG5cXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgVGhpcyBjb25maWcgb3B0aW9uIGRpc2FibGVzIGNhY2hpbmcgb2YgZHluYW1pYyBlbnRyaWVzIHN1Y2ggYXMgTklYIFNRRXNcXG4gIDI4OlxcdFxcdCAgLCBOUEEgc3RhY2sgcGFnZXMgZXRjIGluIE5EQy4gQWxzbyBsb2NrcyBkb3duIE5JWCBTUS9DUS9SUS9SU1MgYW5kXFxuICAyOTpcXHRcXHQgIE5QQSBBdXJhL1Bvb2wgY29udGV4dHMuXFxuICAzMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjQ6MDMuNDMzNjM4NTU1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM0NTIwODUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBOb3QgV29ydGggRnV6emluZyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEkndmUgZ290IGEgaGFyZHdhcmUgZHJpdmVyIGhlcmUg4oCTIHNwZWNpZmljYWxseSwgaXQncyBhIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVSBkcml2ZXIuIFRoYXQgYXV0b21hdGljYWxseSBtYWtlcyBtZSB0aGluayB2ZW5kb3Itc3BlY2lmaWMsIHdoaWNoIGlzIGEga2V5IGZsYWcgZm9yIHRoaXMgdHlwZSBvZiBhc3Nlc3NtZW50LiBJIHNlZSBpdCBkZXBlbmRzIG9uIFBDSSBhbmQgZWl0aGVyIEFSTTY0IG9yIGEgYENPTVBJTEVfVEVTVGAgZmxhZyDigJMgYm90aCBvZiB3aGljaCBwb2ludCB0byBhIGZhaXJseSBzcGVjaWFsaXplZCBlbnZpcm9ubWVudC5cblxuVGhlbiBJIGhpdCB0aGUgbmFpbCBvbiB0aGUgaGVhZDogaXQgKnJlcXVpcmVzKiBhY3R1YWwgcGh5c2ljYWwgUENJZSBoYXJkd2FyZS4gTm8gUUVNVSBlbXVsYXRpb24gaGVyZSwgd2hpY2ggaXMgYSBodWdlIHJlZCBmbGFnLiBMb29raW5nIGF0IHRoZSBleGNsdXNpb24gcnVsZXMsIHRoaXMgaW5zdGFudGx5IHJpbmdzIGEgYmVsbC4gSXQncyBhbG1vc3QgdmVyYmF0aW0gdGhlIHR5cGUgb2YgZHJpdmVyIG91dGxpbmVkIGluIHRoYXQgZXhjbHVzaW9uOiBcIkNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCJcblxuR2l2ZW4gdGhpcywgdGhlcmUncyBubyB3YXkgdGhpcyBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHdpdGhpbiB0aGUgY29uc3RyYWludHMgb2Ygb3VyIGN1cnJlbnQgc2V0dXAuIFBoeXNpY2FsIGhhcmR3YXJlIGRlcGVuZGVuY3kgYW5kIHRoZSBsaW1pdGF0aW9ucyBvZiBRRU1VIGltbWVkaWF0ZWx5IHB1dCB0aGlzIGludG8gdGhlIFwiTm90IFdvcnRoIEZ1enppbmdcIiBjYXRlZ29yeS4gVGhlcmVmb3JlLCBJIHdpbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE0NiwiT3V0cHV0VG9rZW5zIjo4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjI0OjA4Ljc3ODg1MTU3MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgY2Fubm90IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQgaW4gdGhpcyBjb250ZXh0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgY2Fubm90IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQgaW4gdGhpcyBjb250ZXh0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjQ6MDguNzc4OTA5NDIzWiIsIlNlcSI6OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowfthjk[1] Phase: Running StartedAt: 2026-08-11 09:24:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfthjk[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-11 09:24:20 +0000 UTC FinishedAt: 2026-08-11 09:24:25 +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,}