Name: series-workflow2zzx5 Phase: Failed StartedAt: 2026-09-05 13:00:14 +0000 UTC FinishedAt: 2026-09-05 13:20:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2zzx5[0] Phase: Succeeded StartedAt: 2026-09-05 13:00:14 +0000 UTC FinishedAt: 2026-09-05 13:20:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2zzx5[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 13:00:14 +0000 UTC FinishedAt: 2026-09-05 13:20:11 +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+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29kZSBleGNsdXNpdmVseSB3aXRoaW4gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBhbmQgUlZVIGRyaXZlcnMgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyksIGFkZGluZyBtcXByaW8gVEMgaGFyZHdhcmUgb2ZmbG9hZCBzdXBwb3J0LiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZS9Tb0MgaGFyZHdhcmUgKE1hcnZlbGwgT2N0ZW9uVFgyIC8gUlZVKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlMThlOTQ3NDFiMTQ2NThmNWUxNThmNTRjZDQ3ZWU3MDUzNzY4NDg0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxMzoxOTozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbmluZGV4IDE1M2ViNTdiYWQwNjcuLmM5YTQzMjZkNzI1ZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuQEAgLTMzMSw4ICYjNDM7MzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpXG4mIzQzO1x0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHtcbiYjNDM7XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7cGNpZnVuYyAleCBtYXAgcGNpZnVuYyAleCBub3QgZXF1YWwsIGx2bD0ldSBzY2hxPSV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG5pbmRleCAxNzU5OTIxODhjMThhLi5hNTE5ZTBhOTdhMmI3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG5AQCAtNjE1LDYgJiM0Mzs2MTUsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XG4gXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7b3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsXG4mIzQzO1x0XHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXG4mIzQzO1x0XHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuJiM0MztcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuJiM0MztcdGludCBpLCBlcnI7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuJiM0MztcdGlmICghcmVxKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuJiM0MztcdHJlcS1cdTAwM2VudW1fcmVncyA9IGNudDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ1tpXSA9IHJlZ19hZGRyW2ldO1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4mIzQzO1x0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbiYjNDM7XHRpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzbXEgPSBwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcbiYjNDM7XG4mIzQzO1x0XHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuJiM0MztcdFx0Y250JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuJiM0MztcdFx0Y250JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY250IFx1MDAzYyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBmYWlsO1xuJiM0MztcdFx0Y250ID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjbnQpIHtcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuJiM0MztcdFx0XHRcdFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGZhaWw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7ZmFpbDpcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuJiM0MztcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuJiM0MztcdGludCBlcnIsIHNtcSwgbiA9IDA7XG4mIzQzO1x0dTY0IHJlZ19hZGRyWzJdO1xuJiM0MztcdHU2NCByZWdfdmFsWzJdO1xuJiM0MztcdHU2NCByYXRlO1xuJiM0MztcbiYjNDM7XHRpZiAoIW1heHJhdGUgXHUwMDI2XHUwMDI2ICFtaW5yYXRlKSB7XG4mIzQzO1x0XHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4mIzQzO1x0XHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFswXSA9IDA7XG4mIzQzO1x0XHRyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFsxXSA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuJiM0MztcdGlmICghcmVxKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuJiM0MztcbiYjNDM7XHQvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvXG4mIzQzO1x0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxuJiM0MztcdCAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnNcbiYjNDM7XHQgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGFcbiYjNDM7XHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcbiYjNDM7XHQgKiBoYXJkd2FyZSBjYXAuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxuJiM0MztcdCAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uXG4mIzQzO1x0ICogZXZlcnkgdXBkYXRlIHNvIG9taXR0ZWQgcmF0ZXMgYXJlIGFwcGxpZWQgZXhwbGljaXRseSByYXRoZXIgdGhhblxuJiM0MztcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuJiM0MztcdGlmIChtYXhyYXRlKSB7XG4mIzQzO1x0XHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0biYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdC8qIENJUiYjNDM7UElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xuJiM0MztcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbiYjNDM7XHRpZiAobWlucmF0ZSkge1xuJiM0MztcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4mIzQzO1x0fVxuJiM0MztcdG4mIzQzOyYjNDM7O1xuJiM0MztcdHJlcS1cdTAwM2VudW1fcmVncyA9IG47XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYylcbiB7XG4gXHR1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdO1xuQEAgLTY1MSw3ICYjNDM7Nzg3LDExIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXG4gXHRcdFx0XHRcdFx0KHU2NClody1cdTAwM2VzbXFfbGlua190eXBlKTtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzJiM0MzsmIzQzOztcbiBcdFx0LyogTURRIGNvbmZpZyAqL1xuLVx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4mIzQzO1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4mIzQzO1xuIFx0XHRyZXEtXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xuIFx0XHRyZXEtXHUwMDNlcmVndmFsWzFdID0gcGFyZW50IFx1MDAzY1x1MDAzYyAxNjtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzJiM0MzsmIzQzOztcbkBAIC03NzksNiAmIzQzOzkxOSw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4mIzQzO1x0XHRyZXEtXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcbiBcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFx1MDAyNnBmdmYtXHUwMDNlbWJveCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbkBAIC04NDQsNiAmIzQzOzk4Nyw3IEBAIHZvaWQgb3R4Ml90eHNjaHFfc3RvcChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXG4gXHQvKiBDbGVhciB0aGUgdHhzY2hxIGxpc3QgKi9cbiBcdGZvciAobHZsID0gMDsgbHZsIFx1MDAzYyBOSVhfVFhTQ0hfTFZMX0NOVDsgbHZsJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W2x2bF0gPSAwO1xuIFx0XHRmb3IgKHNjaHEgPSAwOyBzY2hxIFx1MDAzYyBNQVhfVFhTQ0hRX1BFUl9GVU5DOyBzY2hxJiM0MzsmIzQzOylcbiBcdFx0XHRwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W2x2bF1bc2NocV0gPSAwO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbmluZGV4IGVlY2VlNjEyYjdiMmMuLmVkZTdmMTExM2I3MTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbkBAIC0xNyw2ICYjNDM7MTcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL3NpbGljb25zLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zb2MvbWFydmVsbC9vY3Rlb250eDIvYXNtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbWFjc2VjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9wa3Rfc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZTY0LmhcdTAwM2VcbkBAIC00ODMsNiAmIzQzOzQ4NCwyMyBAQCBzdHJ1Y3QgcGZfaXJxX2RhdGEge1xuIFx0aW50IG1kZXZzO1xuIH07XG4gXG4mIzQzO3N0cnVjdCBtcV9vZmZsb2FkX3NuYXAge1xuJiM0MztcdHU2NCBtaW5fcmF0ZVtUQ19RT1BUX01BWF9RVUVVRV07XG4mIzQzO1x0dTY0IG1heF9yYXRlW1RDX1FPUFRfTUFYX1FVRVVFXTtcbiYjNDM7XHRfX3U4IG51bV90YztcbiYjNDM7XHRfX3UxNiBjb3VudFtUQ19RT1BUX01BWF9RVUVVRV07XG4mIzQzO1x0X191MTYgb2Zmc2V0W1RDX1FPUFRfTUFYX1FVRVVFXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBvdHgyX21xcHJpbyB7XG4mIzQzO1x0dTMyXHRmbGFncztcbiYjNDM7XHR1NjRcdCptaW5fcmF0ZTtcbiYjNDM7XHR1NjRcdCptYXhfcmF0ZTtcbiYjNDM7XHRib29sXHRyYXRlX2xpbWl0O1xuJiM0MztcdGJvb2xcdHJlcGxhY2Vfc2V0dXBfZG9uZTtcbiYjNDM7XHRib29sXHRyZXBsYWNlX2dyYWZ0X2RvbmU7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBvdHgyX25pYyB7XG4gXHR2b2lkIF9faW9tZW1cdFx0KnJlZ19iYXNlO1xuIFx0c3RydWN0IG5ldF9kZXZpY2VcdCpuZXRkZXY7XG5AQCAtNTE1LDYgJiM0Mzs1MzMsMTAgQEAgc3RydWN0IG90eDJfbmljIHtcbiBcdHU2NFx0XHRcdGZsYWdzO1xuIFx0dTY0XHRcdFx0KmNxX29wX2FkZHI7XG4gXG4mIzQzO1x0c3RydWN0IG90eDJfbXFwcmlvXHRtcXByaW87XG4mIzQzO1x0c3RydWN0IG1xX29mZmxvYWRfc25hcFx0KmN1cl9tcV9zbmFwO1xuJiM0MztcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXBcdCpvbGRfbXFfc25hcDtcbiYjNDM7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dcdFx0KnhkcF9wcm9nO1xuIFx0c3RydWN0IG90eDJfcXNldFx0cXNldDtcbiBcdHN0cnVjdCBvdHgyX2h3XHRcdGh3O1xuQEAgLTEyNDYsNiAmIzQzOzEyNjgsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcbiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLFxuJiM0MztcdFx0XHRcdCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpO1xuJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4mIzQzO2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4mIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIHZvaWQgb3R4Ml9xdWV1ZV92Zl93b3JrKHN0cnVjdCBtYm94ICptdywgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hfd3EsXG4gXHRcdFx0aW50IGZpcnN0LCBpbnQgbWRldnMsIHU2NCBpbnRyKTtcbiBpbnQgb3R4Ml9kZWxfbWNhbV9mbG93X2VudHJ5KHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MTYgZW50cnksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcbmluZGV4IGYxMTBkZmE0MjM2MDUuLjRhNzBhYmMyMzBiZWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5AQCAtNDEzLDYgJiM0Mzs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxuIFx0dTggb2xkX3BmY19lbjtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgXHUwMDI2XHUwMDI2IHBmYy1cdTAwM2VwZmNfZW4pIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIoZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtQRkM6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG9sZF9wZmNfZW4gPSBwZnZmLVx1MDAzZXBmY19lbjtcbiBcdHBmdmYtXHUwMDNlcGZjX2VuID0gcGZjLVx1MDAzZXBmY19lbjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbmluZGV4IDliZWUxYjkxZWVhYTYuLmVjMjYwMWM2YzI1NWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuQEAgLTI4Nyw2ICYjNDM7Mjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIChjaGFubmVsLVx1MDAzZXR4X2NvdW50ICE9IHBmdmYtXHUwMDNlaHcudHhfcXVldWVzIHx8XG4mIzQzO1x0ICAgICBjaGFubmVsLVx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXHUwMDNlaHcucnhfcXVldWVzKSkge1xuJiM0MztcdFx0bmV0ZGV2X2luZm8oZGV2LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7Tm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGlmX3VwKVxuIFx0XHRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RvcChkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5pbmRleCBjOTk1ZjI5MDA4NTkwLi43OWE4MmU0NDU0NTQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuQEAgLTE5ODAsNiAmIzQzOzE5ODAsMTIgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfZnJlZV9tZW07XG4gXG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRuZXRkZXZfZXJyKHBmLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXJzIGR1cmluZyBvcGVuOiAlZDsgY29udGludWluZyB3aXRob3V0IGJhbmR3aWR0aCBsaW1pdHNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGVycik7XG4mIzQzO1xuIFx0LyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovXG4gXHRmb3IgKHFpZHggPSAwOyBxaWR4IFx1MDAzYyBwZi1cdTAwM2Vody5jaW50X2NudDsgcWlkeCYjNDM7JiM0MzspIHtcbiBcdFx0Y3FfcG9sbCA9IFx1MDAyNnFzZXQtXHUwMDNlbmFwaVtxaWR4XTtcbkBAIC0yODQ2LDYgJiM0MzsyODUyLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXHUwMDNlbmV0ZGV2KTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XG4gXG4mIzQzO1x0aWYgKHByb2cgXHUwMDI2XHUwMDI2IHBmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7WERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZW10dSBcdTAwM2UgTUFYX1hEUF9NVFUpIHtcbiBcdFx0bmV0ZGV2X3dhcm4oZGV2LCBcJiMzNDtKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbmluZGV4IDAzOWZkNDdlYmY1MjIuLmFiZDY2YjM2NjAwOWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5AQCAtMTYsNiAmIzQzOzE2LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNfYWN0L3RjX21pcnJlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y192bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvc2NoX2dlbmVyaWMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2NuMTBrLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtvdHgyX2NvbW1vbi5oXCYjMzQ7XG5AQCAtMzEsNiAmIzQzOzMzLDEwIEBAXG4gXG4gI2RlZmluZSBNQ0FTVF9JTlZBTElEX0dSUFx0XHQoLTFVKVxuICNkZWZpbmUgUkFURV9NQU5USVNTQV9CSVRTXHRcdDhcbiYjNDM7LyogTWluIHBlci1xdWV1ZSBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDIgTWJwcykuICovXG4mIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFNcdDI1MDAwMFVMTFxuJiM0MzsvKiBNYXggZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgxMzA4MTYgTWJwcykuICovXG4mIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFNcdCgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpXG4gXG4gc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxuIFx0XHRcdFx0ICAgICAgdTMyICpidXJzdF9leHAsIHUzMiAqYnVyc3RfbWFudGlzc2EpXG5AQCAtNjEsNiAmIzQzOzY3LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxuIFx0XHRcdCpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMIFx1MDAzY1x1MDAzYyAoKmJ1cnN0X2V4cCAtIDcpKTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxuJiM0MztcdFx0ICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LlxuJiM0MztcdFx0ICovXG4gXHRcdCpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7XG4gXHRcdCpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTtcbiBcdH1cbkBAIC0xNjAwLDE0ICYjNDM7MTYwOSw3MTQgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgbmljLCBuaWMsIGluZ3Jlc3MpO1xuIH1cbiBcbiYjNDM7LyogRnJlZSB0aGUgcGVyLXF1ZXVlIG1pbi9tYXggcmF0ZSBjYWNoZXMuICovXG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpO1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKTtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IE5VTEw7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBOVUxMO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgcmVwbGFjaW5nKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcbiYjNDM7XHRpZiAocmVwbGFjaW5nIFx1MDAyNlx1MDAyNiBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSBcdTAwMjZcdTAwMjYgcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpIHtcbiYjNDM7XHRcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSwgMCxcbiYjNDM7XHRcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSkpO1xuJiM0MztcdFx0bWVtc2V0KHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlLCAwLFxuJiM0MztcdFx0ICAgICAgIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZnJlZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqc25hcClcbiYjNDM7e1xuJiM0MztcdGlmICghKnNuYXApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsICpzbmFwKTtcbiYjNDM7XHQqc25hcCA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc25hcF9jb3B5KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKmRzdCxcbiYjNDM7XHRcdFx0XHQgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuJiM0MztcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXA7XG4mIzQzO1x0aW50IHRjO1xuJiM0MztcbiYjNDM7XHRpZiAoISpkc3QpIHtcbiYjNDM7XHRcdHNuYXAgPSBkZXZtX2t6YWxsb2MocGZ2Zi1cdTAwM2VkZXYsIHNpemVvZigqc25hcCksIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKCFzbmFwKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdCpkc3QgPSBzbmFwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzbmFwID0gKmRzdDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNuYXAtXHUwMDNlbnVtX3RjID0gcW9wdC1cdTAwM2VudW1fdGM7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBUQ19RT1BUX01BWF9RVUVVRTsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzbmFwLVx1MDAzZWNvdW50W3RjXSA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuJiM0MztcdFx0c25hcC1cdTAwM2VvZmZzZXRbdGNdID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuJiM0MztcdFx0c25hcC1cdTAwM2VtaW5fcmF0ZVt0Y10gPSAwO1xuJiM0MztcdFx0c25hcC1cdTAwM2VtYXhfcmF0ZVt0Y10gPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0c25hcC1cdTAwM2VtaW5fcmF0ZVt0Y10gPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdHNuYXAtXHUwMDNlbWF4X3JhdGVbdGNdID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3N0YWdlX2N1cihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gb3R4Ml9tcXByaW9fc25hcF9jb3B5KHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlY3VyX21xX3NuYXAsIG1xcHJpbyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdG90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCBcdTAwMjZwZnZmLVx1MDAzZW9sZF9tcV9zbmFwKTtcbiYjNDM7XHRwZnZmLVx1MDAzZW9sZF9tcV9zbmFwID0gcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcDtcbiYjNDM7XHRwZnZmLVx1MDAzZWN1cl9tcV9zbmFwID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgPSBmYWxzZTtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfTURRXSAhPSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXAgPSBwZnZmLVx1MDAzZW9sZF9tcV9zbmFwO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4mIzQzO1x0aW50IHRjLCB0eHEsIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzbmFwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIGZhbHNlKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlLCAwLCBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSkpO1xuJiM0MztcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpKTtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2Mgc25hcC1cdTAwM2VudW1fdGM7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IG1pbl9yYXRlID0gc25hcC1cdTAwM2VtaW5fcmF0ZVt0Y107XG4mIzQzO1x0XHR1NjQgbWF4X3JhdGUgPSBzbmFwLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobWluX3JhdGUpXG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIHw9IFRDX01RUFJJT19GX01JTl9SQVRFO1xuJiM0MztcdFx0aWYgKG1heF9yYXRlKVxuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NQVhfUkFURTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHNuYXAtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBzbmFwLVx1MDAzZW9mZnNldFt0Y10gJiM0Mzsgc25hcC1cdTAwM2Vjb3VudFt0Y107IHR4cSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHNuYXAtXHUwMDNlbnVtX3RjKTtcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHNuYXAtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspXG4mIzQzO1x0XHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgdGMsIHNuYXAtXHUwMDNlY291bnRbdGNdLFxuJiM0MztcdFx0XHRcdCAgICBzbmFwLVx1MDAzZW9mZnNldFt0Y10pO1xuJiM0MztcbiYjNDM7XHRpZiAob3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChwZnZmKSkge1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KCkgY2xlYXJzIHJhdGVfbGltaXQgd2hlbiBuZG9fb3BlbigpIGZhaWxzLlxuJiM0MztcdCAqIElmIG9wZW4gZmFpbGVkLCBUWCBzY2hlZHVsZXJzIHdlcmUgZnJlZWQ7IGRlZmVyIHNoYXBlciByZXN0b3JlIHRvIHRoZVxuJiM0MztcdCAqIG5leHQgc3VjY2Vzc2Z1bCBuZG9fb3BlbigpIHZpYSBvdHgyX21xcHJpb191cCgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXSkge1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGZ2Zik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlY3VyX21xX3NuYXApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdG90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCBcdTAwMjZwZnZmLVx1MDAzZWN1cl9tcV9zbmFwKTtcbiYjNDM7XHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3N3KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IGZhbHNlO1xuJiM0MztcdG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7XG4mIzQzO1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTtcbiYjNDM7XHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycyxcbiYjNDM7ICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb25cbiYjNDM7ICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb25cbiYjNDM7ICogcm91dGluZSBuZXRkZXYgc3RvcC9vcGVuIGN5Y2xlcyB3aGVyZSB0aGUgb2ZmbG9hZCBzdGF5cyBhY3RpdmUuXG4mIzQzOyAqL1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKHBmdmYtXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChwZnZmKSlcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbiYjNDM7XG4mIzQzO1x0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XG4mIzQzO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIocGZ2Zi1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIGNsZWFyIGhhcmR3YXJlIHNoYXBlcnM6ICVkOyBzb21lIFRYIHF1ZXVlcyBtYXkgcmV0YWluIGJhbmR3aWR0aCBsaW1pdHNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGVycik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdGludCB0eHEsIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGZvciAodHhxID0gMDsgdHhxIFx1MDAzYyBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbiYjNDM7XHRcdFx0bWF4X3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdO1xuJiM0MztcbiYjNDM7XHRcdGlmICghbWluX3JhdGUgXHUwMDI2XHUwMDI2ICFtYXhfcmF0ZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHQgICBtYXhfcmF0ZSk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHR4cSwgZXJyKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW9cbiYjNDM7ICogYmFuZHdpZHRoIG9mZmxvYWQuICBCb3RoIG1xcHJpbyBhZGQgYW5kIGRlbGV0ZSAod2hlbiBvZmZsb2FkIHdhcyBhY3RpdmUpXG4mIzQzOyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLlxuJiM0MzsgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzXG4mIzQzOyAqIGNhcnJpZXIsIHN0b3BzIGFsbCBUWCBxdWV1ZXMsIHRlYXJzIGRvd24gSVJRcy9OQVBJIGFuZCBkcm9wcyBpbi1mbGlnaHRcbiYjNDM7ICogdHJhZmZpYy4gIElmIG9wZW4gZmFpbHMsIHRoZSBpbnRlcmZhY2UgaXMgbGVmdCBhZG1pbmlzdHJhdGl2ZWx5IGRvd25cbiYjNDM7ICogd2l0aG91dCBjYWxsaW5nIG5kb19zdG9wKCkgYWdhaW4gb24gcmVzb3VyY2VzIGFscmVhZHkgdG9ybiBkb3duIGJ5XG4mIzQzOyAqIHRoZSBvcGVuIGVycm9yIHBhdGguXG4mIzQzOyAqXG4mIzQzOyAqIERvIG5vdCBjYWxsIGRldl9kZWFjdGl2YXRlKCkvZGV2X2FjdGl2YXRlKCkgaGVyZTogdGhpcyBydW5zIGZyb21cbiYjNDM7ICogbmRvX3NldHVwX3RjKCkgd2hpbGUgcWRpc2NfZ3JhZnQoKSBtYXkgYWxyZWFkeSBob2xkIHRoZSBkZXZpY2VcbiYjNDM7ICogZGVhY3RpdmF0ZWQgYW5kIG11c3QgcGVyZm9ybSB0aGUgZmluYWwgZGV2X2FjdGl2YXRlKCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHQvKiBUT0RPOiBFeHBsb3JlIGxpdmUgVFggc2NoZWR1bGVyIHJlcHJvZ3JhbW1pbmcgdG8gYXZvaWQgYSBmdWxsXG4mIzQzO1x0ICogbmRvX3N0b3AoKS9uZG9fb3BlbigpIGJvdW5jZSBvbiBldmVyeSBtcXByaW8gY2hhbmdlLlxuJiM0MztcdCAqL1xuJiM0MztcdG5ldGRldl9pbmZvKG5ldGRldixcbiYjNDM7XHRcdCAgICBcJiMzNDttcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IG9wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHQvKiBTZXQgYmVmb3JlIG5kb19vcGVuKCkgc28gb3R4Ml90eHNjaF9hbGxvYygpIHdpZGVucyBTTVEgYWxsb2NhdGlvbi5cbiYjNDM7XHQgKiBPbiB0ZWFyZG93biwgZHJvcCBtcXByaW8gc29mdHdhcmUgc3RhdGUgc28gbmRvX29wZW4oKSBkb2VzIG5vdFxuJiM0MztcdCAqIHJlLWFwcGx5IGJhbmR3aWR0aCBsaW1pdHMgdmlhIG90eDJfbXFwcmlvX3VwKCkgYWZ0ZXIgdGhlIGtlcm5lbFxuJiM0MztcdCAqIHJlbW92ZWQgdGhlIHFkaXNjLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyYXRlX2xpbWl0KVxuJiM0MztcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XG4mIzQzO1xuJiM0MztcdGVyciA9IG9wcy1cdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGVycik7XG4mIzQzO1x0XHQvKiBuZG9fb3BlbigpIGFscmVhZHkgZnJlZWQgdGhlIFRYIHNjaGVkdWxlcnMgb24gZmFpbHVyZSB3aGlsZVxuJiM0MztcdFx0ICogbmV0aWZfcnVubmluZygpIG1heSBzdGlsbCBiZSB0cnVlOyBkcm9wIG1xcHJpbyBzb2Z0d2FyZSBzdGF0ZVxuJiM0MztcdFx0ICogb25seSBpbnN0ZWFkIG9mIHNlbmRpbmcgc2hhcGVyIGNsZWFycyB0byBmcmVlZCBxdWV1ZXMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuJiM0MztcdFx0LyogbmRvX29wZW4oKSByb2xscyBiYWNrIG9uIGZhaWx1cmU7IG1hcmsgdGhlIGludGVyZmFjZSBkb3duIHNvXG4mIzQzO1x0XHQgKiBuZXRpZl9jbG9zZSgpIGRvZXMgbm90IGludm9rZSBuZG9fc3RvcCgpIG9uIGZyZWVkIE5BUEkvcXVldWVcbiYjNDM7XHRcdCAqIHN0YXRlLiBDYWxsZXIgaG9sZHMgUlROTDsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjtcbiYjNDM7XHRcdC8qIHZpc2libGUgdG8gb3R4Ml9zdG9wKCkgb24gb3RoZXIgY3B1cyAqL1xuJiM0MztcdFx0c21wX3dtYigpO1xuJiM0MztcdFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0dTY0IHJhdGUsIHUzMiBxY291bnQsIGludCB0YyxcbiYjNDM7XHRcdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXJhdGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHFjb3VudCBcdTAwM2M9IDEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogVE9ETzogbXFwcmlvIG1pbl9yYXRlL21heF9yYXRlIGFyZSBwZXIgdHJhZmZpYyBjbGFzcywgYnV0IGJhbmR3aWR0aFxuJiM0MztcdCAqIG9mZmxvYWQgc2hhcGVzIG9uIHBlci1xdWV1ZSBNRFEgbm9kZXMgcGFyZW50ZWQgdW5kZXIgYSBzaW5nbGUgVEw0LlxuJiM0MztcdCAqIFdpdGhvdXQgcGVyLVRDIFRMNCBzaGFwZXJzIHRoZSBkcml2ZXIgY2Fubm90IGhvbm9yIFRDLWxldmVsIGxpbWl0c1xuJiM0MztcdCAqIGZvciBhIHRyYWZmaWMgY2xhc3MgdGhhdCBzcGFucyBtdWx0aXBsZSBxdWV1ZXMgd2l0aG91dCBlaXRoZXJcbiYjNDM7XHQgKiBkaXZpZGluZyB0aGUgcmF0ZSBhY3Jvc3MgcXVldWVzICh1QVBJIG1pc21hdGNoKSBvciBleGNlZWRpbmcgdGhlIFRDXG4mIzQzO1x0ICogY2FwIHdoZW4gZXZlcnkgbWVtYmVyIHF1ZXVlIGlzIGFjdGl2ZS4gUmVqZWN0IHVudGlsIHBlci1UQyBUTDRcbiYjNDM7XHQgKiBzaGFwaW5nIGNhbiBiZSBpbXBsZW1lbnRlZCB3aXRob3V0IGFsbG9jYXRpbmcgYWRkaXRpb25hbCBUTDQgbm9kZXNcbiYjNDM7XHQgKiBiZXlvbmQgdGhlIGV4aXN0aW5nIGhpZXJhcmNoeS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdCAgIFwmIzM0O21xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xcblwmIzM0OyxcbiYjNDM7XHRcdCAgIG5hbWUsIHRjLCBxY291bnQpO1xuJiM0MztcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgbmFtZSwgdGMsIHFjb3VudCk7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcdGludCB0YywgdHhxO1xuJiM0MztcbiYjNDM7XHRpZiAocW9wdC1cdTAwM2VudW1fdGMgXHUwMDNlIG51bV90eHEpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG51bV90eHEgXHUwMDNlIE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmICh0eHEgXHUwMDNlPSBudW1fdHhxKSB7XG4mIzQzO1x0XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICB0eHEsIG51bV90eHEpO1xuJiM0MztcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgdHhxLCBudW1fdHhxKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpXG4mIzQzO3tcbiYjNDM7XHR1NjQgbWJwcztcbiYjNDM7XG4mIzQzO1x0aWYgKCFyYXRlX2J5dGVzX3BzKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzYyBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QUylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2UgZGl2X3U2NChVNjRfTUFYLCA4KSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0bWJwcyA9IG90eDJfY29udmVydF9yYXRlKHJhdGVfYnl0ZXNfcHMpO1xuJiM0MztcdHJldHVybiBpbG9nMihtYnBzIC8gMikgXHUwMDNjPSBNQVhfUkFURV9FWFBPTkVOVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuJiM0MztcdGJvb2wgaGFkX21xcHJpbyA9IHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0cW9wdC1cdTAwM2VodyA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIHRjIHFkaXNjIHJlcGxhY2UgcnVucyBzZXR1cCBvbiB0aGUgbmV3IG1xcHJpbyBiZWZvcmUgZGVzdHJveWluZyB0aGVcbiYjNDM7XHQgKiBvbGQgb25lLiByZXBsYWNlX3NldHVwX2RvbmUgYW5kIFRDX1JPT1RfR1JBRlQgZGlzdGluZ3Vpc2ggc3RhbGVcbiYjNDM7XHQgKiBvbGQtaW5zdGFuY2UgdGVhcmRvd24gZnJvbSBncmFmdCBmYWlsdXJlIGFmdGVyIHNldHVwLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlY3VyX21xX3NuYXApIHtcbiYjNDM7XHRcdGVyciA9IDA7XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lKVxuJiM0MztcdFx0XHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQocGZ2Zik7XG4mIzQzO1x0XHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFNraXAgdGhlIG5ldGRldiByZXN0YXJ0IHdoZW4gbXFwcmlvIG9mZmxvYWQgd2FzIG5vdCBhY3RpdmUuICovXG4mIzQzO1x0aWYgKCFoYWRfbXFwcmlvKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChpZl91cCkge1xuJiM0MztcdFx0aW50IGRvd25fZXJyLCBlcnI7XG4mIzQzO1xuJiM0MztcdFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0cmV0dXJuIGRvd25fZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogbmRvX3N0b3AoKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXIgVEwgbm9kZXM7IGRyb3Agc29mdHdhcmVcbiYjNDM7XHQgKiBzdGF0ZSBvbmx5LlxuJiM0MztcdCAqL1xuJiM0MztcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0c3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby1cdTAwM2VleHRhY2s7XG4mIzQzO1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRib29sIHJlcGxhY2luZyA9IHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XG4mIzQzO1x0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbiYjNDM7XHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXFvcHQtXHUwMDNlaHcpXG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpZl91cCkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O21xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O21xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChtcXByaW8tXHUwMDNlc2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O1Vuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4XFxuXCYjMzQ7LCBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLCBcJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbXFwcmlvLVx1MDAzZXNoYXBlcik7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYml0KFFPU19DSVJfUElSX1NVUFBPUlQsIFx1MDAyNnBmdmYtXHUwMDNlaHcuY2FwX2ZsYWcpKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVImIzQzO1BJUiBzdXBwb3J0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVImIzQzO1BJUiBzdXBwb3J0XCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChpc19vdHgyX3NkcF9yZXAocGZ2Zi1cdTAwM2VwZGV2KSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlcGZjX2VuKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2V4ZHBfcHJvZykge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuJiM0MztcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuJiM0MztcdFx0XHRtaW5fcmF0ZSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbiYjNDM7XHRcdFx0bWF4X3JhdGUgPSBtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgbWF4X3JhdGUgXHUwMDI2XHUwMDI2IG1pbl9yYXRlIFx1MDAzZSBtYXhfcmF0ZSkge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFwmIzM0O21pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpIHtcbiYjNDM7XHRcdFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWluX3JhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgcWNvdW50LCB0YywgXCYjMzQ7bWluXCYjMzQ7KTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKSB7XG4mIzQzO1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1heF9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsIFwmIzM0O21heFwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtaW5fcmF0ZSkpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBtaW5fcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcJiMzNDttcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG1pbl9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1heF9yYXRlKSkge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIG1heF9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFwmIzM0O21xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgbWF4X3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKG5ldGRldiwgZXh0YWNrLCBxb3B0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHBmdmYsIG1xcHJpbyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtXHUwMDNlbmV0ZGV2LCB0cnVlKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmLCByZXBsYWNpbmcpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIG90eDJfbXFwcmlvX3VwKCkgbWF5IGhhdmUgcmVzdG9yZWQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZHVyaW5nXG4mIzQzO1x0ICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXdcbiYjNDM7XHQgKiBtYXBwaW5nIHNvIHF1ZXVlcyBkcm9wcGVkIGZyb20gdGhlIFRDIGxheW91dCBkbyBub3Qga2VlcCBzdGFsZVxuJiM0MztcdCAqIGxpbWl0cyBpbiBoYXJkd2FyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAob3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChwZnZmKSkge1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgPSBtcXByaW8tXHUwMDNlZmxhZ3M7XG4mIzQzO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuJiM0MztcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuJiM0MztcbiYjNDM7XHRcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUVxuJiM0MztcdFx0ICogc2hhcGVyIHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZDsgc2VlXG4mIzQzO1x0XHQgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuIE11bHRpLXF1ZXVlIFRDcyB3aXRoIHJhdGVzXG4mIzQzO1x0XHQgKiBhcmUgcmVqZWN0ZWQgYWJvdmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuJiM0MztcdFx0XHRtaW5fcmF0ZSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbiYjNDM7XHRcdFx0bWF4X3JhdGUgPSBtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdO1xuJiM0MztcbiYjNDM7XHRcdGZvciAodHhxID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuJiM0MztcdFx0ICAgICB0eHEgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSAmIzQzOyBxY291bnQ7IHR4cSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHRjLCB0eHEsIG1pbl9yYXRlLCBtYXhfcmF0ZSk7XG4mIzQzO1xuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7XG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBwZnZmLVx1MDAzZWN1cl9tcV9zbmFwLVx1MDAzZW51bV90Yyk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcC1cdTAwM2VudW1fdGM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHBmdmYtXHUwMDNlY3VyX21xX3NuYXAtXHUwMDNlY291bnRbaV0sXG4mIzQzO1x0XHRcdFx0ICAgIHFvcHQtXHUwMDNlb2Zmc2V0W2ldKTtcbiYjNDM7XG4mIzQzO1x0cW9wdC1cdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcGxhY2luZykge1xuJiM0MztcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gdHJ1ZTtcbiYjNDM7XHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IGZhbHNlO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7Y2xlYW51cDpcbiYjNDM7XHRxb3B0LVx1MDAzZWh3ID0gMDtcbiYjNDM7XHRpZiAocmVwbGFjaW5nKSB7XG4mIzQzO1x0XHRpbnQgcmVzdG9yZV9lcnIgPSBvdHgyX21xcHJpb19yZXN0b3JlX29sZChwZnZmKTtcbiYjNDM7XG4mIzQzO1x0XHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuJiM0MztcdFx0aWYgKHJlc3RvcmVfZXJyKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogcmVwbGFjZSBmYWlsZWQgYW5kIHByaW9yIGNvbmZpZ3VyYXRpb24gcm9sbGJhY2sgZmFpbGVkOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICByZXN0b3JlX2Vycik7XG4mIzQzO1x0XHRcdGlmIChleHRhY2spXG4mIzQzO1x0XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBcJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkIGFuZCBwcmlvciBjb25maWd1cmF0aW9uIHJvbGxiYWNrIGZhaWxlZDogJWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICByZXN0b3JlX2Vycik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0aWYgKGV4dGFjaylcbiYjNDM7XHRcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkXCYjMzQ7KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybiBlcnIgPyBlcnIgOiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XHRvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19yb290KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IHRjX3Jvb3RfcW9wdF9vZmZsb2FkICpyb290KVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChyb290LVx1MDAzZWNvbW1hbmQpIHtcbiYjNDM7XHRjYXNlIFRDX1JPT1RfR1JBRlQ6XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lKVxuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSB0cnVlO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UgPSB0eXBlX2RhdGE7XG4mIzQzO1x0c3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzO1xuJiM0MztcbiYjNDM7XHRpZiAoYmFzZS1cdTAwM2V0eXBlICE9IFRDX1NFVFVQX1FESVNDX01RUFJJTylcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0Y2FwcyA9IGJhc2UtXHUwMDNlY2FwcztcbiYjNDM7XHRjYXBzLVx1MDAzZXZhbGlkYXRlX3F1ZXVlX2NvdW50cyA9IHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuIFx0XHQgIHZvaWQgKnR5cGVfZGF0YSlcbiB7XG4gXHRzd2l0Y2ggKHR5cGUpIHtcbiYjNDM7XHRjYXNlIFRDX1FVRVJZX0NBUFM6XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX1FESVNDX0hUQjpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfaHRiKG5ldGRldiwgdHlwZV9kYXRhKTtcbiYjNDM7XHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcbiYjNDM7XHRcdHJldHVybiBvdHgyX3NldHVwX3RjX21xcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9ST09UX1FESVNDOlxuJiM0MztcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcm9vdChuZXRkZXZfcHJpdihuZXRkZXYpLCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuQEAgLTE2MzIsNiAmIzQzOzIzNDEsNyBAQCBFWFBPUlRfU1lNQk9MKG90eDJfaW5pdF90Yyk7XG4gdm9pZCBvdHgyX3NodXRkb3duX3RjKHN0cnVjdCBvdHgyX25pYyAqbmljKVxuIHtcbiBcdG90eDJfZGVzdHJveV90Y19mbG93X2xpc3QobmljKTtcbiYjNDM7XHRvdHgyX21xcHJpb19zbmFwX2Rlc3Ryb3kobmljKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChvdHgyX3NodXRkb3duX3RjKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbmluZGV4IDY5YzA5MTFlMjhlOTEuLmQ5YWYxODJlNTcyMWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuQEAgLTExOCw2ICYjNDM7MTE4LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9jb25maWdfc2NoZWRfc2hhcGluZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4gXHQvKiBjb25maWd1cmUgUElSICovXG4gXHRtYXhyYXRlID0gKG5vZGUtXHUwMDNlcmF0ZSBcdTAwM2Ugbm9kZS1cdTAwM2VjZWlsKSA/IG5vZGUtXHUwMDNlcmF0ZSA6IG5vZGUtXHUwMDNlY2VpbDtcbiBcbiYjNDM7XHQvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW5cbiYjNDM7XHQgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLlxuJiM0MztcdCAqL1xuIFx0Y2ZnLVx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cbiBcdFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcbiBcdCgqbnVtX3JlZ3MpJiM0MzsmIzQzOztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb2RlIGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGFuZCBSVlUgZHJpdmVycyAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIG1xcHJpbyBUQyBoYXJkd2FyZSBvZmZsb2FkIHN1cHBvcnQuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llL1NvQyBoYXJkd2FyZSAoTWFydmVsbCBPY3Rlb25UWDIgLyBSVlUpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGUxOGU5NDc0MWIxNDY1OGY1ZTE1OGY1NGNkNDdlZTcwNTM3Njg0ODQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDEzOjE5OjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jCmluZGV4IDE1M2ViNTdiYWQwNjcuLmM5YTQzMjZkNzI1ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMKQEAgLTMzMSw4ICYjNDM7MzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLAogCQkJcmV0dXJuIHRydWU7CiAJfQogCi0JaWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpCiYjNDM7CWlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7CiYjNDM7CQlkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS0mZ3Q7ZGV2LAomIzQzOwkJCQkgICAgJiMzNDtwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcbiYjMzQ7LAomIzQzOwkJCQkgICAgcGNpZnVuYywgbWFwX2Z1bmMsIGx2bCwgc2NocSk7CiAJCXJldHVybiBmYWxzZTsKJiM0MzsJfQogCiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCmluZGV4IDE3NTk5MjE4OGMxOGEuLmE1MTllMGE5N2EyYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCkBAIC02MTUsNiAmIzQzOzYxNSwxNDIgQEAgdm9pZCBvdHgyX2dldF9tYWNfZnJvbV9hZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogfQogRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7b3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsCiYjNDM7CQkgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sCiYjNDM7CQkgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYm94ICptYm94ID0gJmFtcDtwZnZmLSZndDttYm94OwomIzQzOwlzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTsKJiM0MzsJaW50IGksIGVycjsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwlyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpOwomIzQzOwlpZiAoIXJlcSkgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXEtJmd0O2x2bCA9IE5JWF9UWFNDSF9MVkxfTURROwomIzQzOwlyZXEtJmd0O251bV9yZWdzID0gY250OwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVxLSZndDtyZWdbaV0gPSByZWdfYWRkcltpXTsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW2ldID0gcmVnX3ZhbFtpXTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddOwomIzQzOwl1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddOwomIzQzOwlpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZnZmLSZndDtody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNtcSA9IHBmdmYtJmd0O2h3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTsKJiM0MzsKJiM0MzsJCXJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTsKJiM0MzsJCXJlZ192YWxbY250XSA9IDA7CiYjNDM7CQljbnQmIzQzOyYjNDM7OwomIzQzOwomIzQzOwkJcmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFtjbnRdID0gMDsKJiM0MzsJCWNudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAoY250ICZsdDsgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LAomIzQzOwkJCQkJICAgICByZWdfYWRkciwgcmVnX3ZhbCk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZmFpbDsKJiM0MzsJCWNudCA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGNudCkgewomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsCiYjNDM7CQkJCQkgICAgIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBmYWlsOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO2ZhaWw6CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJIGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYm94ICptYm94ID0gJmFtcDtwZnZmLSZndDttYm94OwomIzQzOwlzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTsKJiM0MzsJaW50IGVyciwgc21xLCBuID0gMDsKJiM0MzsJdTY0IHJlZ19hZGRyWzJdOwomIzQzOwl1NjQgcmVnX3ZhbFsyXTsKJiM0MzsJdTY0IHJhdGU7CiYjNDM7CiYjNDM7CWlmICghbWF4cmF0ZSAmYW1wOyZhbXA7ICFtaW5yYXRlKSB7CiYjNDM7CQlzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7CiYjNDM7CQlyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFswXSA9IDA7CiYjNDM7CQlyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFsxXSA9IDA7CiYjNDM7CQlyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7CiYjNDM7CWlmICghcmVxKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7bHZsID0gTklYX1RYU0NIX0xWTF9NRFE7CiYjNDM7CiYjNDM7CS8qIE1RUFJJTyBleHBvc2VzIG9ubHkgbWluL21heCByYXRlLCBub3QgYnVyc3QuICBQYXNzIGJ1cnN0IDAgc28KJiM0MzsJICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWAomIzQzOwkgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzCiYjNDM7CSAqIGZyb20gdGhlIDY1NTM2IGJ5dGUgZGVmYXVsdCB1c2VkIGluIHRoZSBIVEIgcGF0aCwgd2hpY2ggaXMgYQomIzQzOwkgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGEKJiM0MzsJICogaGFyZHdhcmUgY2FwLgomIzQzOwkgKgomIzQzOwkgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLAomIzQzOwkgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvbgomIzQzOwkgKiBldmVyeSB1cGRhdGUgc28gb21pdHRlZCByYXRlcyBhcmUgYXBwbGllZCBleHBsaWNpdGx5IHJhdGhlciB0aGFuCiYjNDM7CSAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuCiYjNDM7CSAqLwomIzQzOwlyZXEtJmd0O3JlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwlpZiAobWF4cmF0ZSkgewomIzQzOwkJcmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IDA7CiYjNDM7CX0KJiM0MzsJbiYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CS8qIENJUiYjNDM7UElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqLwomIzQzOwlyZXEtJmd0O3JlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwlpZiAobWlucmF0ZSkgewomIzQzOwkJcmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IDA7CiYjNDM7CX0KJiM0MzsJbiYjNDM7JiM0Mzs7CiYjNDM7CXJlcS0mZ3Q7bnVtX3JlZ3MgPSBuOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYykKIHsKIAl1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdOwpAQCAtNjUxLDcgJiM0Mzs3ODcsMTEgQEAgaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3IKIAkJCQkJCSh1NjQpaHctJmd0O3NtcV9saW5rX3R5cGUpOwogCQlyZXEtJmd0O251bV9yZWdzJiM0MzsmIzQzOzsKIAkJLyogTURRIGNvbmZpZyAqLwotCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJCXBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07CiYjNDM7CQllbHNlCiYjNDM7CQkJcGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTsKJiM0MzsKIAkJcmVxLSZndDtyZWdbMV0gPSBOSVhfQUZfTURRWF9QQVJFTlQoc2NocSk7CiAJCXJlcS0mZ3Q7cmVndmFsWzFdID0gcGFyZW50ICZsdDsmbHQ7IDE2OwogCQlyZXEtJmd0O251bV9yZWdzJiM0MzsmIzQzOzsKQEAgLTc3OSw2ICYjNDM7OTE5LDkgQEAgaW50IG90eDJfdHhzY2hfYWxsb2Moc3RydWN0IG90eDJfbmljICpwZnZmKQogCQlyZXEtJmd0O3NjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7CiAJfQogCiYjNDM7CWlmIChwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCkKJiM0MzsJCXJlcS0mZ3Q7c2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsKIAlyYyA9IG90eDJfc3luY19tYm94X21zZygmYW1wO3BmdmYtJmd0O21ib3gpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwpAQCAtODQ0LDYgJiM0Mzs5ODcsNyBAQCB2b2lkIG90eDJfdHhzY2hxX3N0b3Aoc3RydWN0IG90eDJfbmljICpwZnZmKQogCiAJLyogQ2xlYXIgdGhlIHR4c2NocSBsaXN0ICovCiAJZm9yIChsdmwgPSAwOyBsdmwgJmx0OyBOSVhfVFhTQ0hfTFZMX0NOVDsgbHZsJiM0MzsmIzQzOykgewomIzQzOwkJcGZ2Zi0mZ3Q7aHcudHhzY2hxX2NudFtsdmxdID0gMDsKIAkJZm9yIChzY2hxID0gMDsgc2NocSAmbHQ7IE1BWF9UWFNDSFFfUEVSX0ZVTkM7IHNjaHEmIzQzOyYjNDM7KQogCQkJcGZ2Zi0mZ3Q7aHcudHhzY2hxX2xpc3RbbHZsXVtzY2hxXSA9IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaAppbmRleCBlZWNlZTYxMmI3YjJjLi5lZGU3ZjExMTNiNzE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaApAQCAtMTcsNiAmIzQzOzE3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zb2MvbWFydmVsbC9zaWxpY29ucy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbWFjc2VjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VhcGkvbGludXgvcGt0X3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3BrdF9jbHMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZGV2bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWU2NC5oJmd0OwpAQCAtNDgzLDYgJiM0Mzs0ODQsMjMgQEAgc3RydWN0IHBmX2lycV9kYXRhIHsKIAlpbnQgbWRldnM7CiB9OwogCiYjNDM7c3RydWN0IG1xX29mZmxvYWRfc25hcCB7CiYjNDM7CXU2NCBtaW5fcmF0ZVtUQ19RT1BUX01BWF9RVUVVRV07CiYjNDM7CXU2NCBtYXhfcmF0ZVtUQ19RT1BUX01BWF9RVUVVRV07CiYjNDM7CV9fdTggbnVtX3RjOwomIzQzOwlfX3UxNiBjb3VudFtUQ19RT1BUX01BWF9RVUVVRV07CiYjNDM7CV9fdTE2IG9mZnNldFtUQ19RT1BUX01BWF9RVUVVRV07CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3Qgb3R4Ml9tcXByaW8gewomIzQzOwl1MzIJZmxhZ3M7CiYjNDM7CXU2NAkqbWluX3JhdGU7CiYjNDM7CXU2NAkqbWF4X3JhdGU7CiYjNDM7CWJvb2wJcmF0ZV9saW1pdDsKJiM0MzsJYm9vbAlyZXBsYWNlX3NldHVwX2RvbmU7CiYjNDM7CWJvb2wJcmVwbGFjZV9ncmFmdF9kb25lOwomIzQzO307CiYjNDM7CiBzdHJ1Y3Qgb3R4Ml9uaWMgewogCXZvaWQgX19pb21lbQkJKnJlZ19iYXNlOwogCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXRkZXY7CkBAIC01MTUsNiAmIzQzOzUzMywxMCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMgewogCXU2NAkJCWZsYWdzOwogCXU2NAkJCSpjcV9vcF9hZGRyOwogCiYjNDM7CXN0cnVjdCBvdHgyX21xcHJpbwltcXByaW87CiYjNDM7CXN0cnVjdCBtcV9vZmZsb2FkX3NuYXAJKmN1cl9tcV9zbmFwOwomIzQzOwlzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwCSpvbGRfbXFfc25hcDsKJiM0MzsKIAlzdHJ1Y3QgYnBmX3Byb2cJCSp4ZHBfcHJvZzsKIAlzdHJ1Y3Qgb3R4Ml9xc2V0CXFzZXQ7CiAJc3RydWN0IG90eDJfaHcJCWh3OwpAQCAtMTI0Niw2ICYjNDM7MTI2OCwxMSBAQCBkbWFfYWRkcl90IG90eDJfZG1hX21hcF9za2JfZnJhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiAJCQkJIHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTsKIHZvaWQgb3R4Ml9kbWFfdW5tYXBfc2tiX2ZyYWdzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNnX2xpc3QgKnNnKTsKIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7CiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLAomIzQzOwkJCQkgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7CiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTsKJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTsKIHZvaWQgb3R4Ml9xdWV1ZV92Zl93b3JrKHN0cnVjdCBtYm94ICptdywgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hfd3EsCiAJCQlpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpOwogaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMKaW5kZXggZjExMGRmYTQyMzYwNS4uNGE3MGFiYzIzMGJlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jCkBAIC00MTMsNiAmIzQzOzQxMywxMiBAQCBzdGF0aWMgaW50IG90eDJfZGNibmxfaWVlZV9zZXRwZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpCiAJdTggb2xkX3BmY19lbjsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCAmYW1wOyZhbXA7IHBmYy0mZ3Q7cGZjX2VuKSB7CiYjNDM7CQluZXRkZXZfZXJyKGRldiwKJiM0MzsJCQkgICAmIzM0O1BGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKIAlvbGRfcGZjX2VuID0gcGZ2Zi0mZ3Q7cGZjX2VuOwogCXBmdmYtJmd0O3BmY19lbiA9IHBmYy0mZ3Q7cGZjX2VuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMKaW5kZXggOWJlZTFiOTFlZWFhNi4uZWMyNjAxYzZjMjU1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYwpAQCAtMjg3LDYgJiM0MzsyODcsMTQgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ICZhbXA7JmFtcDsKJiM0MzsJICAgIChjaGFubmVsLSZndDt0eF9jb3VudCAhPSBwZnZmLSZndDtody50eF9xdWV1ZXMgfHwKJiM0MzsJICAgICBjaGFubmVsLSZndDtyeF9jb3VudCAhPSBwZnZmLSZndDtody5yeF9xdWV1ZXMpKSB7CiYjNDM7CQluZXRkZXZfaW5mbyhkZXYsCiYjNDM7CQkJICAgICYjMzQ7Tm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKIAlpZiAoaWZfdXApCiAJCWRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX3N0b3AoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMKaW5kZXggYzk5NWYyOTAwODU5MC4uNzlhODJlNDQ1NDU0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCkBAIC0xOTgwLDYgJiM0MzsxOTgwLDEyIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX21lbTsKIAomIzQzOwllcnIgPSBvdHgyX21xcHJpb191cChwZik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQluZXRkZXZfZXJyKHBmLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlcnMgZHVyaW5nIG9wZW46ICVkOyBjb250aW51aW5nIHdpdGhvdXQgYmFuZHdpZHRoIGxpbWl0c1xuJiMzNDssCiYjNDM7CQkJICAgZXJyKTsKJiM0MzsKIAkvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi8KIAlmb3IgKHFpZHggPSAwOyBxaWR4ICZsdDsgcGYtJmd0O2h3LmNpbnRfY250OyBxaWR4JiM0MzsmIzQzOykgewogCQljcV9wb2xsID0gJmFtcDtxc2V0LSZndDtuYXBpW3FpZHhdOwpAQCAtMjg0Niw2ICYjNDM7Mjg1MiwxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIAlib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhwZi0mZ3Q7bmV0ZGV2KTsKIAlzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nOwogCiYjNDM7CWlmIChwcm9nICZhbXA7JmFtcDsgcGYtJmd0O21xcHJpby5yYXRlX2xpbWl0KSB7CiYjNDM7CQluZXRkZXZfZXJyKGRldiwKJiM0MzsJCQkgICAmIzM0O1hEUDogY2Fubm90IGF0dGFjaCB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKIAlpZiAocHJvZyAmYW1wOyZhbXA7IGRldi0mZ3Q7bXR1ICZndDsgTUFYX1hEUF9NVFUpIHsKIAkJbmV0ZGV2X3dhcm4oZGV2LCAmIzM0O0p1bWJvIGZyYW1lcyBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIFhEUFxuJiMzNDspOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYwppbmRleCAwMzlmZDQ3ZWJmNTIyLi5hYmQ2NmIzNjYwMDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMKQEAgLTE2LDYgJiM0MzsxNiw4IEBACiAjaW5jbHVkZSAmbHQ7bmV0L3RjX2FjdC90Y19taXJyZWQuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdGNfYWN0L3RjX3ZsYW4uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXB2Ni5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvcGt0X3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9zY2hfZ2VuZXJpYy5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2NuMTBrLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtvdHgyX2NvbW1vbi5oJiMzNDsKQEAgLTMxLDYgJiM0MzszMywxMCBAQAogCiAjZGVmaW5lIE1DQVNUX0lOVkFMSURfR1JQCQkoLTFVKQogI2RlZmluZSBSQVRFX01BTlRJU1NBX0JJVFMJCTgKJiM0MzsvKiBNaW4gcGVyLXF1ZXVlIGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMiBNYnBzKS4gKi8KJiM0MzsjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTCTI1MDAwMFVMTAomIzQzOy8qIE1heCBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDEzMDgxNiBNYnBzKS4gKi8KJiM0MzsjZGVmaW5lIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTCSgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpCiAKIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCwKIAkJCQkgICAgICB1MzIgKmJ1cnN0X2V4cCwgdTMyICpidXJzdF9tYW50aXNzYSkKQEAgLTYxLDYgJiM0Mzs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCwKIAkJCSpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMICZsdDsmbHQ7ICgqYnVyc3RfZXhwIC0gNykpOwogCQl9CiAJfSBlbHNlIHsKJiM0MzsJCS8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvbgomIzQzOwkJICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LgomIzQzOwkJICovCiAJCSpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7CiAJCSpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTsKIAl9CkBAIC0xNjAwLDE0ICYjNDM7MTYwOSw3MTQgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJCSAgbmljLCBuaWMsIGluZ3Jlc3MpOwogfQogCiYjNDM7LyogRnJlZSB0aGUgcGVyLXF1ZXVlIG1pbi9tYXggcmF0ZSBjYWNoZXMuICovCiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlkZXZtX2tmcmVlKHBmdmYtJmd0O2RldiwgcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlKTsKJiM0MzsJZGV2bV9rZnJlZShwZnZmLSZndDtkZXYsIHBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSk7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSA9IE5VTEw7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSA9IE5VTEw7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5mbGFncyA9IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIHJlcGxhY2luZykKJiM0Mzt7CiYjNDM7CXUxNiBudW1fdHhxID0gcGZ2Zi0mZ3Q7aHcubm9uX3Fvc19xdWV1ZXM7CiYjNDM7CiYjNDM7CWlmIChyZXBsYWNpbmcgJmFtcDsmYW1wOyBwZnZmLSZndDttcXByaW8ubWluX3JhdGUgJmFtcDsmYW1wOyBwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpIHsKJiM0MzsJCW1lbXNldChwZnZmLSZndDttcXByaW8ubWluX3JhdGUsIDAsCiYjNDM7CQkgICAgICAgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlKSk7CiYjNDM7CQltZW1zZXQocGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlLCAwLAomIzQzOwkJICAgICAgIG51bV90eHEgKiBzaXplb2YoKnBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSkpOwomIzQzOwkJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzID0gMDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CW90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7CiYjNDM7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLSZndDtkZXYsIG51bV90eHEsCiYjNDM7CQkJCQkgICAgIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlKSwKJiM0MzsJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLSZndDtkZXYsIG51bV90eHEsCiYjNDM7CQkJCQkgICAgIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKSwKJiM0MzsJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpIHsKJiM0MzsJCW90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9mcmVlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJICBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqc25hcCkKJiM0Mzt7CiYjNDM7CWlmICghKnNuYXApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWRldm1fa2ZyZWUocGZ2Zi0mZ3Q7ZGV2LCAqc25hcCk7CiYjNDM7CSpzbmFwID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19zbmFwX2NvcHkoc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKmRzdCwKJiM0MzsJCQkJIGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSAmYW1wO21xcHJpby0mZ3Q7cW9wdDsKJiM0MzsJc3RydWN0IG1xX29mZmxvYWRfc25hcCAqc25hcDsKJiM0MzsJaW50IHRjOwomIzQzOwomIzQzOwlpZiAoISpkc3QpIHsKJiM0MzsJCXNuYXAgPSBkZXZtX2t6YWxsb2MocGZ2Zi0mZ3Q7ZGV2LCBzaXplb2YoKnNuYXApLCBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghc25hcCkKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCSpkc3QgPSBzbmFwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJc25hcCA9ICpkc3Q7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc25hcC0mZ3Q7bnVtX3RjID0gcW9wdC0mZ3Q7bnVtX3RjOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBUQ19RT1BUX01BWF9RVUVVRTsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQlzbmFwLSZndDtjb3VudFt0Y10gPSBxb3B0LSZndDtjb3VudFt0Y107CiYjNDM7CQlzbmFwLSZndDtvZmZzZXRbdGNdID0gcW9wdC0mZ3Q7b2Zmc2V0W3RjXTsKJiM0MzsJCXNuYXAtJmd0O21pbl9yYXRlW3RjXSA9IDA7CiYjNDM7CQlzbmFwLSZndDttYXhfcmF0ZVt0Y10gPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHFvcHQtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQlzbmFwLSZndDttaW5fcmF0ZVt0Y10gPSBtcXByaW8tJmd0O21pbl9yYXRlW3RjXTsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKQomIzQzOwkJCXNuYXAtJmd0O21heF9yYXRlW3RjXSA9IG1xcHJpby0mZ3Q7bWF4X3JhdGVbdGNdOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3N0YWdlX2N1cihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIG90eDJfbXFwcmlvX3NuYXBfY29weShwZnZmLCAmYW1wO3BmdmYtJmd0O2N1cl9tcV9zbmFwLCBtcXByaW8pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2NvbW1pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgJmFtcDtwZnZmLSZndDtvbGRfbXFfc25hcCk7CiYjNDM7CXBmdmYtJmd0O29sZF9tcV9zbmFwID0gcGZ2Zi0mZ3Q7Y3VyX21xX3NuYXA7CiYjNDM7CXBmdmYtJmd0O2N1cl9tcV9zbmFwID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlwZnZmLSZndDttcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gZmFsc2U7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcGZ2Zi0mZ3Q7aHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX01EUV0gIT0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0b3JlX29sZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwID0gcGZ2Zi0mZ3Q7b2xkX21xX3NuYXA7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLSZndDtuZXRkZXY7CiYjNDM7CXUxNiBudW1fdHhxID0gcGZ2Zi0mZ3Q7aHcubm9uX3Fvc19xdWV1ZXM7CiYjNDM7CWludCB0YywgdHhxLCBlcnI7CiYjNDM7CiYjNDM7CWlmICghc25hcCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmLCBmYWxzZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwltZW1zZXQocGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlLCAwLCBudW1fdHhxICogc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWluX3JhdGUpKTsKJiM0MzsJbWVtc2V0KHBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKSk7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5mbGFncyA9IDA7CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHNuYXAtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSBzbmFwLSZndDttaW5fcmF0ZVt0Y107CiYjNDM7CQl1NjQgbWF4X3JhdGUgPSBzbmFwLSZndDttYXhfcmF0ZVt0Y107CiYjNDM7CiYjNDM7CQlpZiAobWluX3JhdGUpCiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzIHw9IFRDX01RUFJJT19GX01JTl9SQVRFOwomIzQzOwkJaWYgKG1heF9yYXRlKQomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NQVhfUkFURTsKJiM0MzsKJiM0MzsJCWZvciAodHhxID0gc25hcC0mZ3Q7b2Zmc2V0W3RjXTsKJiM0MzsJCSAgICAgdHhxICZsdDsgc25hcC0mZ3Q7b2Zmc2V0W3RjXSAmIzQzOyBzbmFwLSZndDtjb3VudFt0Y107IHR4cSYjNDM7JiM0MzspIHsKJiM0MzsJCQlwZnZmLSZndDttcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlOwomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBzbmFwLSZndDtudW1fdGMpOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBzbmFwLSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykKJiM0MzsJCW5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCB0Yywgc25hcC0mZ3Q7Y291bnRbdGNdLAomIzQzOwkJCQkgICAgc25hcC0mZ3Q7b2Zmc2V0W3RjXSk7CiYjNDM7CiYjNDM7CWlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoKSBjbGVhcnMgcmF0ZV9saW1pdCB3aGVuIG5kb19vcGVuKCkgZmFpbHMuCiYjNDM7CSAqIElmIG9wZW4gZmFpbGVkLCBUWCBzY2hlZHVsZXJzIHdlcmUgZnJlZWQ7IGRlZmVyIHNoYXBlciByZXN0b3JlIHRvIHRoZQomIzQzOwkgKiBuZXh0IHN1Y2Nlc3NmdWwgbmRvX29wZW4oKSB2aWEgb3R4Ml9tcXByaW9fdXAoKS4KJiM0MzsJICovCiYjNDM7CXBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKHBmdmYtJmd0O2h3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdKSB7CiYjNDM7CQllcnIgPSBvdHgyX21xcHJpb191cChwZnZmKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgJmFtcDtwZnZmLSZndDtjdXJfbXFfc25hcCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2Rlc3Ryb3koc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJb3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsICZhbXA7cGZ2Zi0mZ3Q7Y3VyX21xX3NuYXApOwomIzQzOwlvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgJmFtcDtwZnZmLSZndDtvbGRfbXFfc25hcCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3N3KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLSZndDtuZXRkZXY7CiYjNDM7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ID0gZmFsc2U7CiYjNDM7CW90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7CiYjNDM7CW5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7CiYjNDM7CW90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRlYXIgZG93biBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQ6IGNsZWFyIHBlci1xdWV1ZSBzaGFwZXJzLAomIzQzOyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uCiYjNDM7ICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb24KJiM0MzsgKiByb3V0aW5lIG5ldGRldiBzdG9wL29wZW4gY3ljbGVzIHdoZXJlIHRoZSBvZmZsb2FkIHN0YXlzIGFjdGl2ZS4KJiM0MzsgKi8KJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhwZnZmLSZndDtuZXRkZXYpICZhbXA7JmFtcDsKJiM0MzsJICAgIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpCiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7CiYjNDM7CiYjNDM7CW90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpOwomIzQzOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQluZXRkZXZfZXJyKHBmdmYtJmd0O25ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogZmFpbGVkIHRvIGNsZWFyIGhhcmR3YXJlIHNoYXBlcnM6ICVkOyBzb21lIFRYIHF1ZXVlcyBtYXkgcmV0YWluIGJhbmR3aWR0aCBsaW1pdHNcbiYjMzQ7LAomIzQzOwkJCSAgIGVycik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLSZndDtuZXRkZXY7CiYjNDM7CWludCB0eHEsIGVycjsKJiM0MzsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoIXBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSB8fCAhcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWZvciAodHhxID0gMDsgdHhxICZsdDsgcGZ2Zi0mZ3Q7aHcubm9uX3Fvc19xdWV1ZXM7IHR4cSYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDsKJiM0MzsKJiM0MzsJCWlmIChwZnZmLSZndDttcXByaW8uZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUpCiYjNDM7CQkJbWluX3JhdGUgPSBwZnZmLSZndDttcXByaW8ubWluX3JhdGVbdHhxXTsKJiM0MzsJCWlmIChwZnZmLSZndDttcXByaW8uZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJbWF4X3JhdGUgPSBwZnZmLSZndDttcXByaW8ubWF4X3JhdGVbdHhxXTsKJiM0MzsKJiM0MzsJCWlmICghbWluX3JhdGUgJmFtcDsmYW1wOyAhbWF4X3JhdGUpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsCiYjNDM7CQkJCQkJICAgbWF4X3JhdGUpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXG4mIzM0OywKJiM0MzsJCQkJICAgdHhxLCBlcnIpOwomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpbwomIzQzOyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKQomIzQzOyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLgomIzQzOyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS4gIFRoZSBmdWxsIHN0b3Avb3BlbiBjeWNsZSBjbGVhcnMKJiM0MzsgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0CiYjNDM7ICogdHJhZmZpYy4gIElmIG9wZW4gZmFpbHMsIHRoZSBpbnRlcmZhY2UgaXMgbGVmdCBhZG1pbmlzdHJhdGl2ZWx5IGRvd24KJiM0MzsgKiB3aXRob3V0IGNhbGxpbmcgbmRvX3N0b3AoKSBhZ2FpbiBvbiByZXNvdXJjZXMgYWxyZWFkeSB0b3JuIGRvd24gYnkKJiM0MzsgKiB0aGUgb3BlbiBlcnJvciBwYXRoLgomIzQzOyAqCiYjNDM7ICogRG8gbm90IGNhbGwgZGV2X2RlYWN0aXZhdGUoKS9kZXZfYWN0aXZhdGUoKSBoZXJlOiB0aGlzIHJ1bnMgZnJvbQomIzQzOyAqIG5kb19zZXR1cF90YygpIHdoaWxlIHFkaXNjX2dyYWZ0KCkgbWF5IGFscmVhZHkgaG9sZCB0aGUgZGV2aWNlCiYjNDM7ICogZGVhY3RpdmF0ZWQgYW5kIG11c3QgcGVyZm9ybSB0aGUgZmluYWwgZGV2X2FjdGl2YXRlKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IG5ldGRldi0mZ3Q7bmV0ZGV2X29wczsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJLyogVE9ETzogRXhwbG9yZSBsaXZlIFRYIHNjaGVkdWxlciByZXByb2dyYW1taW5nIHRvIGF2b2lkIGEgZnVsbAomIzQzOwkgKiBuZG9fc3RvcCgpL25kb19vcGVuKCkgYm91bmNlIG9uIGV2ZXJ5IG1xcHJpbyBjaGFuZ2UuCiYjNDM7CSAqLwomIzQzOwluZXRkZXZfaW5mbyhuZXRkZXYsCiYjNDM7CQkgICAgJiMzNDttcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxuJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBvcHMtJmd0O25kb19zdG9wKG5ldGRldik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwkvKiBTZXQgYmVmb3JlIG5kb19vcGVuKCkgc28gb3R4Ml90eHNjaF9hbGxvYygpIHdpZGVucyBTTVEgYWxsb2NhdGlvbi4KJiM0MzsJICogT24gdGVhcmRvd24sIGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlIHNvIG5kb19vcGVuKCkgZG9lcyBub3QKJiM0MzsJICogcmUtYXBwbHkgYmFuZHdpZHRoIGxpbWl0cyB2aWEgb3R4Ml9tcXByaW9fdXAoKSBhZnRlciB0aGUga2VybmVsCiYjNDM7CSAqIHJlbW92ZWQgdGhlIHFkaXNjLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJhdGVfbGltaXQpCiYjNDM7CQlwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7CiYjNDM7CWVsc2UKJiM0MzsJCW90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpOwomIzQzOwomIzQzOwllcnIgPSBvcHMtJmd0O25kb19vcGVuKG5ldGRldik7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7RmFpbGVkIHRvIHJlc3RhcnQgZGV2aWNlIGFmdGVyIG1xcHJpbyBjaGFuZ2U6ICVkXG4mIzM0OywKJiM0MzsJCQkgICBlcnIpOwomIzQzOwkJLyogbmRvX29wZW4oKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXJzIG9uIGZhaWx1cmUgd2hpbGUKJiM0MzsJCSAqIG5ldGlmX3J1bm5pbmcoKSBtYXkgc3RpbGwgYmUgdHJ1ZTsgZHJvcCBtcXByaW8gc29mdHdhcmUgc3RhdGUKJiM0MzsJCSAqIG9ubHkgaW5zdGVhZCBvZiBzZW5kaW5nIHNoYXBlciBjbGVhcnMgdG8gZnJlZWQgcXVldWVzLgomIzQzOwkJICovCiYjNDM7CQlvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTsKJiM0MzsJCS8qIG5kb19vcGVuKCkgcm9sbHMgYmFjayBvbiBmYWlsdXJlOyBtYXJrIHRoZSBpbnRlcmZhY2UgZG93biBzbwomIzQzOwkJICogbmV0aWZfY2xvc2UoKSBkb2VzIG5vdCBpbnZva2UgbmRvX3N0b3AoKSBvbiBmcmVlZCBOQVBJL3F1ZXVlCiYjNDM7CQkgKiBzdGF0ZS4gQ2FsbGVyIGhvbGRzIFJUTkw7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLgomIzQzOwkJICovCiYjNDM7CQlwZnZmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOOwomIzQzOwkJLyogdmlzaWJsZSB0byBvdHgyX3N0b3AoKSBvbiBvdGhlciBjcHVzICovCiYjNDM7CQlzbXBfd21iKCk7CiYjNDM7CQluZXRpZl9jbG9zZShuZXRkZXYpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQkJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLAomIzQzOwkJCQkJdTY0IHJhdGUsIHUzMiBxY291bnQsIGludCB0YywKJiM0MzsJCQkJCWNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlpZiAoIXJhdGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHFjb3VudCAmbHQ7PSAxKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFRPRE86IG1xcHJpbyBtaW5fcmF0ZS9tYXhfcmF0ZSBhcmUgcGVyIHRyYWZmaWMgY2xhc3MsIGJ1dCBiYW5kd2lkdGgKJiM0MzsJICogb2ZmbG9hZCBzaGFwZXMgb24gcGVyLXF1ZXVlIE1EUSBub2RlcyBwYXJlbnRlZCB1bmRlciBhIHNpbmdsZSBUTDQuCiYjNDM7CSAqIFdpdGhvdXQgcGVyLVRDIFRMNCBzaGFwZXJzIHRoZSBkcml2ZXIgY2Fubm90IGhvbm9yIFRDLWxldmVsIGxpbWl0cwomIzQzOwkgKiBmb3IgYSB0cmFmZmljIGNsYXNzIHRoYXQgc3BhbnMgbXVsdGlwbGUgcXVldWVzIHdpdGhvdXQgZWl0aGVyCiYjNDM7CSAqIGRpdmlkaW5nIHRoZSByYXRlIGFjcm9zcyBxdWV1ZXMgKHVBUEkgbWlzbWF0Y2gpIG9yIGV4Y2VlZGluZyB0aGUgVEMKJiM0MzsJICogY2FwIHdoZW4gZXZlcnkgbWVtYmVyIHF1ZXVlIGlzIGFjdGl2ZS4gUmVqZWN0IHVudGlsIHBlci1UQyBUTDQKJiM0MzsJICogc2hhcGluZyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aG91dCBhbGxvY2F0aW5nIGFkZGl0aW9uYWwgVEw0IG5vZGVzCiYjNDM7CSAqIGJleW9uZCB0aGUgZXhpc3RpbmcgaGllcmFyY2h5LgomIzQzOwkgKi8KJiM0MzsJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkgICAmIzM0O21xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xuJiMzNDssCiYjNDM7CQkgICBuYW1lLCB0YywgcWNvdW50KTsKJiM0MzsJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7bXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzJiMzNDssCiYjNDM7CQkJICAgICAgIG5hbWUsIHRjLCBxY291bnQpOwomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywKJiM0MzsJCQkJICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwl1MTYgbnVtX3R4cSA9IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOwomIzQzOwlpbnQgdGMsIHR4cTsKJiM0MzsKJiM0MzsJaWYgKHFvcHQtJmd0O251bV90YyAmZ3Q7IG51bV90eHEpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O051bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxuJiMzNDssCiYjNDM7CQkJICAgcW9wdC0mZ3Q7bnVtX3RjLCBudW1fdHhxKTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXUmIzM0OywKJiM0MzsJCQkJICAgICAgIHFvcHQtJmd0O251bV90YywgbnVtX3R4cSk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobnVtX3R4cSAmZ3Q7IE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcbiYjMzQ7LAomIzQzOwkJCSAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICAgICAmIzM0O051bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1JiMzNDssCiYjNDM7CQkJCSAgICAgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHFvcHQtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgcWNvdW50ID0gcW9wdC0mZ3Q7Y291bnRbdGNdOwomIzQzOwomIzQzOwkJZm9yICh0eHEgPSBxb3B0LSZndDtvZmZzZXRbdGNdOwomIzQzOwkJICAgICB0eHEgJmx0OyBxb3B0LSZndDtvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJCWlmICh0eHEgJmd0Oz0gbnVtX3R4cSkgewomIzQzOwkJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJCSAgICYjMzQ7bXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XG4mIzM0OywKJiM0MzsJCQkJCSAgIHR4cSwgbnVtX3R4cSk7CiYjNDM7CQkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkJCSAgICAgICAmIzM0O21xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldSYjMzQ7LAomIzQzOwkJCQkJCSAgICAgICB0eHEsIG51bV90eHEpOwomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpCiYjNDM7ewomIzQzOwl1NjQgbWJwczsKJiM0MzsKJiM0MzsJaWYgKCFyYXRlX2J5dGVzX3BzKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWlmIChyYXRlX2J5dGVzX3BzICZsdDsgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChyYXRlX2J5dGVzX3BzICZndDsgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChyYXRlX2J5dGVzX3BzICZndDsgZGl2X3U2NChVNjRfTUFYLCA4KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJbWJwcyA9IG90eDJfY29udmVydF9yYXRlKHJhdGVfYnl0ZXNfcHMpOwomIzQzOwlyZXR1cm4gaWxvZzIobWJwcyAvIDIpICZsdDs9IE1BWF9SQVRFX0VYUE9ORU5UOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwlib29sIGhhZF9tcXByaW8gPSBwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJYm9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJcW9wdC0mZ3Q7aHcgPSAwOwomIzQzOwomIzQzOwkvKiB0YyBxZGlzYyByZXBsYWNlIHJ1bnMgc2V0dXAgb24gdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlCiYjNDM7CSAqIG9sZCBvbmUuIHJlcGxhY2Vfc2V0dXBfZG9uZSBhbmQgVENfUk9PVF9HUkFGVCBkaXN0aW5ndWlzaCBzdGFsZQomIzQzOwkgKiBvbGQtaW5zdGFuY2UgdGVhcmRvd24gZnJvbSBncmFmdCBmYWlsdXJlIGFmdGVyIHNldHVwLgomIzQzOwkgKi8KJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgJmFtcDsmYW1wOyBwZnZmLSZndDtjdXJfbXFfc25hcCkgewomIzQzOwkJZXJyID0gMDsKJiM0MzsJCWlmIChwZnZmLSZndDttcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lKQomIzQzOwkJCW90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHBmdmYpOwomIzQzOwkJZWxzZQomIzQzOwkJCWVyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpOwomIzQzOwkJb3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi8KJiM0MzsJaWYgKCFoYWRfbXFwcmlvKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChpZl91cCkgewomIzQzOwkJaW50IGRvd25fZXJyLCBlcnI7CiYjNDM7CiYjNDM7CQlkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7CiYjNDM7CQllcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJCXJldHVybiBkb3duX2VycjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBuZG9fc3RvcCgpIGFscmVhZHkgZnJlZWQgdGhlIFRYIHNjaGVkdWxlciBUTCBub2RlczsgZHJvcCBzb2Z0d2FyZQomIzQzOwkgKiBzdGF0ZSBvbmx5LgomIzQzOwkgKi8KJiM0MzsJb3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCXN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBtcXByaW8tJmd0O2V4dGFjazsKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gJmFtcDttcXByaW8tJmd0O3FvcHQ7CiYjNDM7CWJvb2wgcmVwbGFjaW5nID0gcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQ7CiYjNDM7CWJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7CiYjNDM7CWludCB0YywgdHhxLCBlcnIsIGk7CiYjNDM7CiYjNDM7CWlmICghcW9wdC0mZ3Q7aHcpCiYjNDM7CQlyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTsKJiM0MzsKJiM0MzsJaWYgKCFpZl91cCkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7bXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7bXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVAmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG1xcHJpby0mZ3Q7c2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcbiYjMzQ7LCBtcXByaW8tJmd0O3NoYXBlcik7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeCYjMzQ7LAomIzQzOwkJCQkgICAgICAgbXFwcmlvLSZndDtzaGFwZXIpOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghdGVzdF9iaXQoUU9TX0NJUl9QSVJfU1VQUE9SVCwgJmFtcDtwZnZmLSZndDtody5jYXBfZmxhZykpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVImIzQzO1BJUiBzdXBwb3J0XG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtJmd0O3BkZXYpKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxuJiMzNDspOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGZ2Zi0mZ3Q7cGZjX2VuKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwZnZmLSZndDt4ZHBfcHJvZykgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmUmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDsKJiM0MzsJCXUzMiBxY291bnQgPSBxb3B0LSZndDtjb3VudFt0Y107CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IG1xcHJpby0mZ3Q7bWluX3JhdGVbdGNdOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJbWF4X3JhdGUgPSBtcXByaW8tJmd0O21heF9yYXRlW3RjXTsKJiM0MzsKJiM0MzsJCWlmIChtaW5fcmF0ZSAmYW1wOyZhbXA7IG1heF9yYXRlICZhbXA7JmFtcDsgbWluX3JhdGUgJmd0OyBtYXhfcmF0ZSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpOwomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgICAgICYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkJiMzNDssCiYjNDM7CQkJCQkgICAgICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkgewomIzQzOwkJCWVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1pbl9yYXRlLAomIzQzOwkJCQkJCQkgICBxY291bnQsIHRjLCAmIzM0O21pbiYjMzQ7KTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpIHsKJiM0MzsJCQllcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSwKJiM0MzsJCQkJCQkJICAgcWNvdW50LCB0YywgJiMzNDttYXgmIzM0Oyk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtaW5fcmF0ZSkpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXG4mIzM0OywKJiM0MzsJCQkJICAgbWluX3JhdGUsIHRjKTsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICAgICAmIzM0O21xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHMmIzM0OywKJiM0MzsJCQkJCSAgICAgICBtaW5fcmF0ZSwgdGMpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUgJmFtcDsmYW1wOwomIzQzOwkJICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1heF9yYXRlKSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcbiYjMzQ7LAomIzQzOwkJCQkgICBtYXhfcmF0ZSwgdGMpOwomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgICAgICYjMzQ7bXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0cyYjMzQ7LAomIzQzOwkJCQkJICAgICAgIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhuZXRkZXYsIGV4dGFjaywgcW9wdCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX21xcHJpb19zdGFnZV9jdXIocGZ2ZiwgbXFwcmlvKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtJmd0O25ldGRldiwgdHJ1ZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIHJlcGxhY2luZyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIG90eDJfbXFwcmlvX3VwKCkgbWF5IGhhdmUgcmVzdG9yZWQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZHVyaW5nCiYjNDM7CSAqIHRoZSByZXN0YXJ0IGFib3ZlLiBDbGVhciBldmVyeSBNRFEgc2hhcGVyIGJlZm9yZSBhcHBseWluZyB0aGUgbmV3CiYjNDM7CSAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlCiYjNDM7CSAqIGxpbWl0cyBpbiBoYXJkd2FyZS4KJiM0MzsJICovCiYjNDM7CWlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwlwZnZmLSZndDttcXByaW8uZmxhZ3MgPSBtcXByaW8tJmd0O2ZsYWdzOwomIzQzOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBxb3B0LSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwOwomIzQzOwkJdTMyIHFjb3VudCA9IHFvcHQtJmd0O2NvdW50W3RjXTsKJiM0MzsKJiM0MzsJCS8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUQomIzQzOwkJICogc2hhcGVyIHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZDsgc2VlCiYjNDM7CQkgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuIE11bHRpLXF1ZXVlIFRDcyB3aXRoIHJhdGVzCiYjNDM7CQkgKiBhcmUgcmVqZWN0ZWQgYWJvdmUuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCW1pbl9yYXRlID0gbXFwcmlvLSZndDttaW5fcmF0ZVt0Y107CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkKJiM0MzsJCQltYXhfcmF0ZSA9IG1xcHJpby0mZ3Q7bWF4X3JhdGVbdGNdOwomIzQzOwomIzQzOwkJZm9yICh0eHEgPSBxb3B0LSZndDtvZmZzZXRbdGNdOwomIzQzOwkJICAgICB0eHEgJmx0OyBxb3B0LSZndDtvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJCW5ldGRldl9kYmcobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxuJiMzNDssCiYjNDM7CQkJCSAgIHRjLCB0eHEsIG1pbl9yYXRlLCBtYXhfcmF0ZSk7CiYjNDM7CiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTsKJiM0MzsJCQlwZnZmLSZndDttcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlOwomIzQzOwomIzQzOwkJCWVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLAomIzQzOwkJCQkJCQkgICBtaW5fcmF0ZSwgbWF4X3JhdGUpOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCWdvdG8gY2xlYW51cDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwluZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHBmdmYtJmd0O2N1cl9tcV9zbmFwLSZndDtudW1fdGMpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGZ2Zi0mZ3Q7Y3VyX21xX3NuYXAtJmd0O251bV90YzsgaSYjNDM7JiM0MzspCiYjNDM7CQluZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcGZ2Zi0mZ3Q7Y3VyX21xX3NuYXAtJmd0O2NvdW50W2ldLAomIzQzOwkJCQkgICAgcW9wdC0mZ3Q7b2Zmc2V0W2ldKTsKJiM0MzsKJiM0MzsJcW9wdC0mZ3Q7aHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7CiYjNDM7CiYjNDM7CWlmIChyZXBsYWNpbmcpIHsKJiM0MzsJCXBmdmYtJmd0O21xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgPSB0cnVlOwomIzQzOwkJcGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IGZhbHNlOwomIzQzOwl9IGVsc2UgewomIzQzOwkJb3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJcW9wdC0mZ3Q7aHcgPSAwOwomIzQzOwlpZiAocmVwbGFjaW5nKSB7CiYjNDM7CQlpbnQgcmVzdG9yZV9lcnIgPSBvdHgyX21xcHJpb19yZXN0b3JlX29sZChwZnZmKTsKJiM0MzsKJiM0MzsJCW90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7CiYjNDM7CQlpZiAocmVzdG9yZV9lcnIpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkIGFuZCBwcmlvciBjb25maWd1cmF0aW9uIHJvbGxiYWNrIGZhaWxlZDogJWRcbiYjMzQ7LAomIzQzOwkJCQkgICByZXN0b3JlX2Vycik7CiYjNDM7CQkJaWYgKGV4dGFjaykKJiM0MzsJCQkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCQkJICAgICAgICYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkJiMzNDssCiYjNDM7CQkJCQkJICAgICAgIHJlc3RvcmVfZXJyKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFxuJiMzNDspOwomIzQzOwkJCWlmIChleHRhY2spCiYjNDM7CQkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCQkJICAgJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkJiMzNDspOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIGVyciA/IGVyciA6IC1FSU87CiYjNDM7CX0KJiM0MzsJb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCSAgICAgIHN0cnVjdCB0Y19yb290X3FvcHRfb2ZmbG9hZCAqcm9vdCkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAocm9vdC0mZ3Q7Y29tbWFuZCkgewomIzQzOwljYXNlIFRDX1JPT1RfR1JBRlQ6CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSkKJiM0MzsJCQlwZnZmLSZndDttcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gdHJ1ZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UgPSB0eXBlX2RhdGE7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwczsKJiM0MzsKJiM0MzsJaWYgKGJhc2UtJmd0O3R5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwljYXBzID0gYmFzZS0mZ3Q7Y2FwczsKJiM0MzsJY2Fwcy0mZ3Q7dmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogaW50IG90eDJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsCiAJCSAgdm9pZCAqdHlwZV9kYXRhKQogewogCXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIFRDX1FVRVJZX0NBUFM6CiYjNDM7CQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7CiAJY2FzZSBUQ19TRVRVUF9CTE9DSzoKIAkJcmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpOwogCWNhc2UgVENfU0VUVVBfUURJU0NfSFRCOgogCQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpOwomIzQzOwljYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzoKJiM0MzsJCXJldHVybiBvdHgyX3NldHVwX3RjX21xcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7CiYjNDM7CWNhc2UgVENfU0VUVVBfUk9PVF9RRElTQzoKJiM0MzsJCXJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQpAQCAtMTYzMiw2ICYjNDM7MjM0MSw3IEBAIEVYUE9SVF9TWU1CT0wob3R4Ml9pbml0X3RjKTsKIHZvaWQgb3R4Ml9zaHV0ZG93bl90YyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYykKIHsKIAlvdHgyX2Rlc3Ryb3lfdGNfZmxvd19saXN0KG5pYyk7CiYjNDM7CW90eDJfbXFwcmlvX3NuYXBfZGVzdHJveShuaWMpOwogfQogRVhQT1JUX1NZTUJPTChvdHgyX3NodXRkb3duX3RjKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jCmluZGV4IDY5YzA5MTFlMjhlOTEuLmQ5YWYxODJlNTcyMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMKQEAgLTExOCw2ICYjNDM7MTE4LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9jb25maWdfc2NoZWRfc2hhcGluZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiAJLyogY29uZmlndXJlIFBJUiAqLwogCW1heHJhdGUgPSAobm9kZS0mZ3Q7cmF0ZSAmZ3Q7IG5vZGUtJmd0O2NlaWwpID8gbm9kZS0mZ3Q7cmF0ZSA6IG5vZGUtJmd0O2NlaWw7CiAKJiM0MzsJLyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuCiYjNDM7CSAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuCiYjNDM7CSAqLwogCWNmZy0mZ3Q7cmVndmFsWypudW1fcmVnc10gPQogCQlvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgbWF4cmF0ZSwgNjU1MzYpOwogCSgqbnVtX3JlZ3MpJiM0MzsmIzQzOzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1ODQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgT2N0ZW9uVFgyIE5JQyBEcml2ZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIHNjb3BlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBzZWUgd2hpY2ggZmlsZXMgYXJlIGJlaW5nIG1vZGlmaWVkLiBPa2F5LCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzdWJzdGFudGlhbCB1cGRhdGU6CgpgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jYApgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNgCmBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaGAKYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNgCmBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNgCmBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jYApgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY2AKYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY2AKClJpZ2h0LCB0aGUgYG9jdGVvbnR4MmAgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlci4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGZvciBtZSBpczogaXMgdGhpcyBoYXJkd2FyZS1kZXBlbmRlbnQsIG9yIGNhbiBJIHJlcHJvZHVjZSB0aGlzIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQ/IElzIHRoaXMgdGllZCB0byB0aGUgQ045SywgQ04xMEsgcGh5c2ljYWwgQVNJQywgb3IgUENJZSBoYXJkd2FyZT8gT3IgY2FuIEkgdGVzdCB0aGlzIGluIFFFTVUgb3IgZXZlbiBzeXprYWxsZXI/IEkmIzM5O2xsIG5lZWQgdG8gZG8gc29tZSBkaWdnaW5nLCBwcm9iYWJseSB1c2luZyBgZ3JlcGAgb3IgY2hlY2tpbmcgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgYG9jdGVvbnR4MmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9DVEVPTlRYMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjY6Y29uZmlnIE9DVEVPTlRYMl9NQk9YXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTctXHR0cmlzdGF0ZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy04LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo5OmNvbmZpZyBPQ1RFT05UWDJfQUZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTAtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBSVlUgQWRtaW4gRnVuY3Rpb24gZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0yMj1jb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMTpjb25maWcgT0NURU9OVFgyX1BGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjQ1OmNvbmZpZyBPQ1RFT05UWDJfVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc3MgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgT2N0ZW9uIFRYMiBFdGhlcm5ldCBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIE9jdGVvbiBUWDIgZXRoZXJuZXQgZHJpdmVyLiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggaXMgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBsb29rIGF0IHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgZHJpdmVyJiMzOTtzIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZ2AuIFRoaXMgZmlsZSAqc2hvdWxkKiBsYXkgb3V0IGFsbCB0aGUgZGVwZW5kZW5jaWVzLCBmZWF0dXJlcywgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgd2F5IHRvIHVuZGVyc3RhbmQgaG93IGEga2VybmVsIGRyaXZlciBpcyBjb25zdHJ1Y3RlZCwgd2hhdCBpdCByZWxpZXMgb24sIGFuZCB3aGF0IGZlYXR1cmVzIEkgY2FuIGVuYWJsZSBvciBkaXNhYmxlLiBCeSBhbmFseXppbmcgdGhlIGBLY29uZmlnYCwgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgZnVuZGFtZW50YWwgbmF0dXJlIG9mIHRoZSBkZXZpY2UgYW5kIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBoYXJkd2FyZSBvciBzb2Z0d2FyZSBmZWF0dXJlcyBhcmUgaW52b2x2ZWQuIFRoaXMgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRvIGNvbmZpZ3VyZSBvciBtb2RpZnkgdGhpcyBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTWFydmVsbCBSVlUgTmV0d29yayBkcml2ZXJzIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE9DVEVPTlRYMl9NQk9YXG4gICA3Olx0XHR0cmlzdGF0ZVxuICAgODpcdFxuICAgOTpcdGNvbmZpZyBPQ1RFT05UWDJfQUZcbiAgMTA6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgT2N0ZW9uVFgyIFJWVSBBZG1pbiBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbiAgMTE6XHRcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxuICAxMjpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gIDEzOlx0XHRkZXBlbmRzIG9uICg2NEJJVCBcdTAwMjZcdTAwMjYgQ09NUElMRV9URVNUKSB8fCBBUk02NFxuICAxNDpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgMTU6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgMTY6XHRcdGhlbHBcbiAgMTc6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCYjMzk7cyBPY3Rlb25UWDIgUmVzb3VyY2UgVmlydHVhbGl6YXRpb25cbiAgMTg6XHRcdCAgVW5pdCYjMzk7cyBhZG1pbiBmdW5jdGlvbiBtYW5hZ2VyIHdoaWNoIG1hbmFnZXMgYWxsIFJWVSBIVyByZXNvdXJjZXNcbiAgMTk6XHRcdCAgYW5kIHByb3ZpZGVzIGEgbWVkaXVtIHRvIG90aGVyIFBGL1ZGcyB0byBjb25maWd1cmUgSFcuIFNob3VsZCBiZVxuICAyMDpcdFx0ICBlbmFibGVkIGZvciBvdGhlciBSVlUgZGV2aWNlIGRyaXZlcnMgdG8gd29yay5cbiAgMjE6XHRcbiAgMjI6XHRjb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcbiAgMjM6XHRcdGJvb2wgXCYjMzQ7RGlzYWJsZSBjYWNoaW5nIG9mIGR5bmFtaWMgZW50cmllcyBpbiBORENcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gT0NURU9OVFgyX0FGXG4gIDI1Olx0XHRkZWZhdWx0IG5cbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdCAgVGhpcyBjb25maWcgb3B0aW9uIGRpc2FibGVzIGNhY2hpbmcgb2YgZHluYW1pYyBlbnRyaWVzIHN1Y2ggYXMgTklYIFNRRXNcbiAgMjg6XHRcdCAgLCBOUEEgc3RhY2sgcGFnZXMgZXRjIGluIE5EQy4gQWxzbyBsb2NrcyBkb3duIE5JWCBTUS9DUS9SUS9SU1MgYW5kXG4gIDI5Olx0XHQgIE5QQSBBdXJhL1Bvb2wgY29udGV4dHMuXG4gIDMwOlx0XG4gIDMxOlx0Y29uZmlnIE9DVEVPTlRYMl9QRlxuICAzMjpcdFx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuICAzMzpcdFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXG4gIDM0Olx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiAgMzU6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAgMzY6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FFUyBpZiBNQUNTRUNcbiAgMzc6XHRcdGRlcGVuZHMgb24gKDY0QklUIFx1MDAyNlx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XG4gIDM4Olx0XHRzZWxlY3QgRElNTElCXG4gIDM5Olx0XHRkZXBlbmRzIG9uIFBDSVxuICA0MDpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICA0MTpcdFx0ZGVwZW5kcyBvbiBNQUNTRUMgfHwgIU1BQ1NFQ1xuICA0MjpcdFx0aGVscFxuICA0MzpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJiMzOTtzIE9jdGVvblRYMiBOSUMgcGh5c2ljYWwgZnVuY3Rpb24uXG4gIDQ0Olx0XG4gIDQ1Olx0Y29uZmlnIE9DVEVPTlRYMl9WRlxuICA0NjpcdFx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyXCYjMzQ7XG4gIDQ3Olx0XHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxuICA0ODpcdFx0aGVscFxuICA0OTpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJiMzOTtzIE9jdGVvblRYMiBOSUMgdmlydHVhbCBmdW5jdGlvbi5cbiAgNTA6XHRcbiAgNTE6XHRjb25maWcgUlZVX0VTV0lUQ0hcbiAgNTI6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgUlZVIEUtU3dpdGNoIHN1cHBvcnRcJiMzNDtcbiAgNTM6XHRcdGRlcGVuZHMgb24gT0NURU9OVFgyX1BGXG4gIDU0Olx0XHRkZWZhdWx0IG1cbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCYjMzk7cyBSVlUgRS1Td2l0Y2ggdGhhdFxuICA1NzpcdFx0ICBwcm92aWRlcyBpbnRlcm5hbCBTUklPViBwYWNrZXQgc3RlZXJpbmcgYW5kIHN3aXRjaGluZy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg1NAoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIERyaXZlciBSZWdpc3RyYXRpb24gZm9yIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQ3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaG93IHRoaXMgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBkcml2ZXIgcmVnaXN0ZXJzIGl0c2VsZiB3aXRoIHRoZSBQQ0kgc3lzdGVtLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbiBhbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgdGhlIENOOUsgb3IgQ04xMEsgY2hpcHMuIE15IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIHN0YW5kYXJkIFBDSSBkcml2ZXIgcmVnaXN0cmF0aW9uIHJvdXRpbmVzLiBTbywgSSYjMzk7bGwgc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIHJlbGV2YW50IGRpcmVjdG9yeSwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2AsIGZvciB0aGUgdGVsbC10YWxlIHNpZ25zOiBgbW9kdWxlX3BjaV9kcml2ZXJgIHdoaWNoIGlzIHRoZSBtYWNybyBhbmQgYHBjaV9yZWdpc3Rlcl9kcml2ZXJgLCB0aGUgZnVuY3Rpb24gaXRzZWxmLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludCBJJiMzOTttIGxvb2tpbmcgZm9yIGFuZCBwcm92aWRlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGFuYWx5emluZyB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyJiMzOTtzIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaV9yZWdpc3Rlcl9kcml2ZXJ8bW9kdWxlX3BjaV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9Mzc2MT1zdGF0aWMgaW50IF9faW5pdCBydnVfaW5pdF9tb2R1bGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzY2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6Mzc2NzpcdGVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2Y2d4X2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzY4LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzcwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6Mzc3MTpcdGVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2cHRwX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzcyLVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzc0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6Mzc3NTpcdGVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2bWNzX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzc2LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6Mzc3OTpcdGVyciA9ICBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNnJ2dV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc4MC1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0zNTkzPXN0YXRpYyBpbnQgX19pbml0IG90eDJfcnZ1cGZfaW5pdF9tb2R1bGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM1OTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjM1OTc6XHRyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZvdHgyX3BmX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM1OTgtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM9ODc1PXN0YXRpYyBpbnQgX19pbml0IG90eDJ2Zl9pbml0X21vZHVsZSh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtODc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYzo4Nzk6XHRyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZvdHgydmZfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtODgwLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmM9ODY5PXN0YXRpYyBpbnQgX19pbml0IHJ2dV9yZXBfaW5pdF9tb2R1bGUodm9pZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYy04NzAte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jOjg3MTpcdHJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNnJ2dV9yZXBfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYy04NzItfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTMwCgkJCQkJCQlvdXRwdXQ6IDEyOAoJCQkJCQkJdGhvdWdodHM6IDcyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBEcml2ZXJzKioKCk9rYXksIGxldCYjMzk7cyBnbyB0aHJvdWdoIHRoaXMgc3lzdGVtYXRpY2FsbHkuIFRoZSB0YXNrIGlzIHRvIGRldGVybWluZSBpZiB3ZSBzaG91bGQgYm90aGVyIGZ1enppbmcgdGhlIG1vZGlmaWVkIGNvZGUuIFRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBzYXkgd2UgY2FuIHNraXAgaXQgaWYgdGhlIGNoYW5nZXMgZmFsbCAqZXhjbHVzaXZlbHkqIGludG8gYSBjYXRlZ29yeSBsaWtlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gVGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgYWxsIHJlbGF0ZWQgdG8gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgaW50ZXJmYWNlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFsbCB0dWNrZWQgYXdheSBuZWF0bHkgdW5kZXIgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2AuCgpOb3csIHRoZSBPY3Rlb25UWDIsIHRoYXQmIzM5O3MgYSBNYXJ2ZWxsIFNtYXJ0TklDIG9yIFNvQyBuZXR3b3JrIHByb2Nlc3NvciAtIENOOUssIENOMTBLLCB0aGUgUlZVIGFyY2hpdGVjdHVyZS4gRnJvbSBteSB1bmRlcnN0YW5kaW5nLCB0aGlzICpkb2VzKiByZXF1aXJlIHBoeXNpY2FsIEFTSUMgb3IgUENJZSBjYXJkcyB0byBmdW5jdGlvbiwgb3IgYXQgbGVhc3QgZGVkaWNhdGVkIEFSTTY0IE9jdGVvblRYMiBoYXJkd2FyZS4gSXQmIzM5O3Mgbm90IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgcnVucyBpbiBhIHN0b2NrIFFFTVUgc2V0dXAsIHdoaWNoIGlzIHdoYXQgc3l6a2FsbGVyIHVzZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgaXNuJiMzOTt0IHNvbWUgY2xldmVyIHZpcnR1YWwgYnVzIG9yIHNvZnR3YXJlIGVtdWxhdGlvbiwgYnV0IGl0IGxvb2tzIGxpa2UgdGhlIGRlcGVuZGVuY2llcyBjaGVjayBmb3IgYDY0QklUYCwgYENPTVBJTEVfVEVTVGAsIGBBUk02NGAsIG9yIGBQQ0lgLCB3aGljaCBpbXBsaWVzIHRoYXQgdGhpcyByZXF1aXJlcyBQQ0kgZnVuY3Rpb25hbGl0eSBhbmQgaXMgbm90IGZ1bGx5IGFic3RyYWN0ZWQuCgpDaGVja2luZyB0aGUgZmlsZXMgYWdhaW46IGBydnVfbml4LmNgLCBgb3R4Ml9jb21tb24uY2AsIGBvdHgyX2NvbW1vbi5oYCwgYG90eDJfZGNibmwuY2AsIGBvdHgyX2V0aHRvb2wuY2AsIGBvdHgyX3BmLmNgLCBgb3R4Ml90Yy5jYCwgYW5kIGBxb3MuY2AuIFRoZXkgYXJlIGFsbCAqc3RyaWN0bHkqIHdpdGhpbiB0aGUgYG1hcnZlbGwvb2N0ZW9udHgyL2AgZGlyZWN0b3J5LCBzbyB0aGF0JiMzOTtzIHRoZSBkcml2ZXIuIFRoZSBkcml2ZXIgaW50ZXJmYWNlcyBkaXJlY3RseSB3aXRoIHRoZSBoYXJkd2FyZSwgbm90IGFuIGVtdWxhdGVkIGludGVyZmFjZS4gSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IGluIHNheWluZyBpdCBjb250cm9scyBwaHlzaWNhbCBPY3Rlb25UWDIvUlZVIE5JQ3MgYW5kIGRlcGVuZHMgb24gcGh5c2ljYWwgUENJZSBoYXJkd2FyZS4gSXQmIzM5O3Mgbm90IGdvaW5nIHRvIHJ1biBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAgb3IgdGhlIEdvb2dsZSBDbG91ZCBFbmdpbmUgZW52aXJvbm1lbnQgdGhhdCBTeXprYWxsZXIgdXNlcy4KClRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayBhbGwgdGhlIHJlcXVpcmVtZW50czogYFdvcnRoRnV6emluZzogZmFsc2VgLCBgRm9jdXNTeW1ib2xzOiBbXWAsIGBFbmFibGVDb25maWdzOiBbXWAsIGFuZCB0aGUgcmVhc29uaW5nIG5lZWRzIHRvIGJlIGNvbmNpc2UuCgpUaGUgcmVhc29uaW5nIGlzOiAmIzM0O1RoZSBtb2RpZmllZCBjb2RlIGlzIGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGFuZCBSVlUgZHJpdmVycyAoYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2ApLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZS9Tb0MgaGFyZHdhcmUgKE1hcnZlbGwgT2N0ZW9uVFgyL0NOOUsvQ04xMEspIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIFFFTVUvR0NFIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OwoKQWxyaWdodCwgdGhhdCBjb3ZlcnMgaXQuIExldCYjMzk7cyBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb2RlIGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGFuZCBSVlUgZHJpdmVycyAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIG1xcHJpbyBUQyBoYXJkd2FyZSBvZmZsb2FkIHN1cHBvcnQuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llL1NvQyBoYXJkd2FyZSAoTWFydmVsbCBPY3Rlb25UWDIgLyBSVlUpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29kZSBleGNsdXNpdmVseSB3aXRoaW4gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBhbmQgUlZVIGRyaXZlcnMgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyksIGFkZGluZyBtcXByaW8gVEMgaGFyZHdhcmUgb2ZmbG9hZCBzdXBwb3J0LiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZS9Tb0MgaGFyZHdhcmUgKE1hcnZlbGwgT2N0ZW9uVFgyIC8gUlZVKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzoxOTozMS4zODkxNTY3OTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTEzODM1NTkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvZGUgZXhjbHVzaXZlbHkgd2l0aGluIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgYW5kIFJWVSBkcml2ZXJzIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgbXFwcmlvIFRDIGhhcmR3YXJlIG9mZmxvYWQgc3VwcG9ydC4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUvU29DIGhhcmR3YXJlIChNYXJ2ZWxsIE9jdGVvblRYMiAvIFJWVSkgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzoxOTozMS4zODkxNjQ4ODRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODU3NjM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUxOGU5NDc0MWIxNDY1OGY1ZTE1OGY1NGNkNDdlZTcwNTM3Njg0ODRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAxMzoxOTozMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcXG5pbmRleCAxNTNlYjU3YmFkMDY3Li5jOWE0MzI2ZDcyNWQ4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xcbkBAIC0zMzEsOCArMzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLFxcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpXFxuK1xcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7XFxuK1xcdFxcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwicGNpZnVuYyAleCBtYXAgcGNpZnVuYyAleCBub3QgZXF1YWwsIGx2bD0ldSBzY2hxPSV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgcGNpZnVuYywgbWFwX2Z1bmMsIGx2bCwgc2NocSk7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xcbmluZGV4IDE3NTk5MjE4OGMxOGEuLmE1MTllMGE5N2EyYjcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xcbkBAIC02MTUsNiArNjE1LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XFxuIFxcbitzdGF0aWMgaW50XFxuK290eDJfbml4X3RtcV9yZWdfd3JpdGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgY250LFxcbitcXHRcXHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXFxuK1xcdFxcdCAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKVxcbit7XFxuK1xcdHN0cnVjdCBtYm94ICptYm94ID0gXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3g7XFxuK1xcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xcbitcXHRpbnQgaSwgZXJyO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XFxuK1xcdGlmICghcmVxKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXEtXFx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xcbitcXHRyZXEtXFx1MDAzZW51bV9yZWdzID0gY250O1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW2ldID0gcmVnX3ZhbFtpXTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4raW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0dTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107XFxuK1xcdHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107XFxuK1xcdGludCBlcnIsIHNtcSwgaSwgY250ID0gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZnZmLVxcdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXTsgaSsrKSB7XFxuK1xcdFxcdHNtcSA9IHBmdmYtXFx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcXG4rXFxuK1xcdFxcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFtjbnRdID0gMDtcXG4rXFx0XFx0Y250Kys7XFxuK1xcbitcXHRcXHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbY250XSA9IDA7XFxuK1xcdFxcdGNudCsrO1xcbitcXG4rXFx0XFx0aWYgKGNudCBcXHUwMDNjIE1BWF9SRUdTX1BFUl9NQk9YX01TRyAtIDEpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdFxcdGNudCA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChjbnQpIHtcXG4rXFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbitmYWlsOlxcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCBpbnQgdHhxLCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpXFxuK3tcXG4rXFx0c3RydWN0IG1ib3ggKm1ib3ggPSBcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveDtcXG4rXFx0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XFxuK1xcdGludCBlcnIsIHNtcSwgbiA9IDA7XFxuK1xcdHU2NCByZWdfYWRkclsyXTtcXG4rXFx0dTY0IHJlZ192YWxbMl07XFxuK1xcdHU2NCByYXRlO1xcbitcXG4rXFx0aWYgKCFtYXhyYXRlIFxcdTAwMjZcXHUwMDI2ICFtaW5yYXRlKSB7XFxuK1xcdFxcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcXG4rXFx0XFx0cmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFswXSA9IDA7XFxuK1xcdFxcdHJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbMV0gPSAwO1xcbitcXHRcXHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdH1cXG4rXFxuK1xcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xcbitcXHRpZiAoIXJlcSkge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmVxLVxcdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcXG4rXFxuK1xcdC8qIE1RUFJJTyBleHBvc2VzIG9ubHkgbWluL21heCByYXRlLCBub3QgYnVyc3QuICBQYXNzIGJ1cnN0IDAgc29cXG4rXFx0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxcbitcXHQgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzXFxuK1xcdCAqIGZyb20gdGhlIDY1NTM2IGJ5dGUgZGVmYXVsdCB1c2VkIGluIHRoZSBIVEIgcGF0aCwgd2hpY2ggaXMgYVxcbitcXHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcXG4rXFx0ICogaGFyZHdhcmUgY2FwLlxcbitcXHQgKlxcbitcXHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxcbitcXHQgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvblxcbitcXHQgKiBldmVyeSB1cGRhdGUgc28gb21pdHRlZCByYXRlcyBhcmUgYXBwbGllZCBleHBsaWNpdGx5IHJhdGhlciB0aGFuXFxuK1xcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXFxuK1xcdCAqL1xcbitcXHRyZXEtXFx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xcbitcXHRpZiAobWF4cmF0ZSkge1xcbitcXHRcXHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IDA7XFxuK1xcdH1cXG4rXFx0bisrO1xcbitcXG4rXFx0LyogQ0lSK1BJUiBzdXBwb3J0IGlzIHJlcXVpcmVkIGFuZCBjaGVja2VkIGF0IG1xcHJpbyBzZXR1cC4gKi9cXG4rXFx0cmVxLVxcdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0aWYgKG1pbnJhdGUpIHtcXG4rXFx0XFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSAwO1xcbitcXHR9XFxuK1xcdG4rKztcXG4rXFx0cmVxLVxcdTAwM2VudW1fcmVncyA9IG47XFxuK1xcbitcXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYylcXG4ge1xcbiBcXHR1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdO1xcbkBAIC02NTEsNyArNzg3LDExIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCh1NjQpaHctXFx1MDAzZXNtcV9saW5rX3R5cGUpO1xcbiBcXHRcXHRyZXEtXFx1MDAzZW51bV9yZWdzKys7XFxuIFxcdFxcdC8qIE1EUSBjb25maWcgKi9cXG4tXFx0XFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcXG4rXFx0XFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxcbitcXHRcXHRcXHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdWzBdO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XFxuK1xcbiBcXHRcXHRyZXEtXFx1MDAzZXJlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTtcXG4gXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbMV0gPSBwYXJlbnQgXFx1MDAzY1xcdTAwM2MgMTY7XFxuIFxcdFxcdHJlcS1cXHUwMDNlbnVtX3JlZ3MrKztcXG5AQCAtNzc5LDYgKzkxOSw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4gXFx0XFx0cmVxLVxcdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250O1xcbiBcXHR9XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXFxuK1xcdFxcdHJlcS1cXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFxuIFxcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94KTtcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuQEAgLTg0NCw2ICs5ODcsNyBAQCB2b2lkIG90eDJfdHhzY2hxX3N0b3Aoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXG4gXFx0LyogQ2xlYXIgdGhlIHR4c2NocSBsaXN0ICovXFxuIFxcdGZvciAobHZsID0gMDsgbHZsIFxcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCsrKSB7XFxuK1xcdFxcdHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXSA9IDA7XFxuIFxcdFxcdGZvciAoc2NocSA9IDA7IHNjaHEgXFx1MDAzYyBNQVhfVFhTQ0hRX1BFUl9GVU5DOyBzY2hxKyspXFxuIFxcdFxcdFxcdHBmdmYtXFx1MDAzZWh3LnR4c2NocV9saXN0W2x2bF1bc2NocV0gPSAwO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG5pbmRleCBlZWNlZTYxMmI3YjJjLi5lZGU3ZjExMTNiNzE0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG5AQCAtMTcsNiArMTcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc29jL21hcnZlbGwvc2lsaWNvbnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9tYWNzZWMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvcGt0X3NjaGVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RldmxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWU2NC5oXFx1MDAzZVxcbkBAIC00ODMsNiArNDg0LDIzIEBAIHN0cnVjdCBwZl9pcnFfZGF0YSB7XFxuIFxcdGludCBtZGV2cztcXG4gfTtcXG4gXFxuK3N0cnVjdCBtcV9vZmZsb2FkX3NuYXAge1xcbitcXHR1NjQgbWluX3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xcbitcXHR1NjQgbWF4X3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xcbitcXHRfX3U4IG51bV90YztcXG4rXFx0X191MTYgY291bnRbVENfUU9QVF9NQVhfUVVFVUVdO1xcbitcXHRfX3UxNiBvZmZzZXRbVENfUU9QVF9NQVhfUVVFVUVdO1xcbit9O1xcbitcXG4rc3RydWN0IG90eDJfbXFwcmlvIHtcXG4rXFx0dTMyXFx0ZmxhZ3M7XFxuK1xcdHU2NFxcdCptaW5fcmF0ZTtcXG4rXFx0dTY0XFx0Km1heF9yYXRlO1xcbitcXHRib29sXFx0cmF0ZV9saW1pdDtcXG4rXFx0Ym9vbFxcdHJlcGxhY2Vfc2V0dXBfZG9uZTtcXG4rXFx0Ym9vbFxcdHJlcGxhY2VfZ3JhZnRfZG9uZTtcXG4rfTtcXG4rXFxuIHN0cnVjdCBvdHgyX25pYyB7XFxuIFxcdHZvaWQgX19pb21lbVxcdFxcdCpyZWdfYmFzZTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2VcXHQqbmV0ZGV2O1xcbkBAIC01MTUsNiArNTMzLDEwIEBAIHN0cnVjdCBvdHgyX25pYyB7XFxuIFxcdHU2NFxcdFxcdFxcdGZsYWdzO1xcbiBcXHR1NjRcXHRcXHRcXHQqY3Ffb3BfYWRkcjtcXG4gXFxuK1xcdHN0cnVjdCBvdHgyX21xcHJpb1xcdG1xcHJpbztcXG4rXFx0c3RydWN0IG1xX29mZmxvYWRfc25hcFxcdCpjdXJfbXFfc25hcDtcXG4rXFx0c3RydWN0IG1xX29mZmxvYWRfc25hcFxcdCpvbGRfbXFfc25hcDtcXG4rXFxuIFxcdHN0cnVjdCBicGZfcHJvZ1xcdFxcdCp4ZHBfcHJvZztcXG4gXFx0c3RydWN0IG90eDJfcXNldFxcdHFzZXQ7XFxuIFxcdHN0cnVjdCBvdHgyX2h3XFx0XFx0aHc7XFxuQEAgLTEyNDYsNiArMTI2OCwxMSBAQCBkbWFfYWRkcl90IG90eDJfZG1hX21hcF9za2JfZnJhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VnLCBpbnQgKmxlbik7XFxuIHZvaWQgb3R4Ml9kbWFfdW5tYXBfc2tiX2ZyYWdzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNnX2xpc3QgKnNnKTtcXG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcXG4raW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLFxcbitcXHRcXHRcXHRcXHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcXG4raW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4gdm9pZCBvdHgyX3F1ZXVlX3ZmX3dvcmsoc3RydWN0IG1ib3ggKm13LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWJveF93cSxcXG4gXFx0XFx0XFx0aW50IGZpcnN0LCBpbnQgbWRldnMsIHU2NCBpbnRyKTtcXG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xcbmluZGV4IGYxMTBkZmE0MjM2MDUuLjRhNzBhYmMyMzBiZWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcXG5AQCAtNDEzLDYgKzQxMywxMiBAQCBzdGF0aWMgaW50IG90eDJfZGNibmxfaWVlZV9zZXRwZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpXFxuIFxcdHU4IG9sZF9wZmNfZW47XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgXFx1MDAyNlxcdTAwMjYgcGZjLVxcdTAwM2VwZmNfZW4pIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJQRkM6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0b2xkX3BmY19lbiA9IHBmdmYtXFx1MDAzZXBmY19lbjtcXG4gXFx0cGZ2Zi1cXHUwMDNlcGZjX2VuID0gcGZjLVxcdTAwM2VwZmNfZW47XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcXG5pbmRleCA5YmVlMWI5MWVlYWE2Li5lYzI2MDFjNmMyNTVhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xcbkBAIC0yODcsNiArMjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGNoYW5uZWwtXFx1MDAzZXR4X2NvdW50ICE9IHBmdmYtXFx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxcbitcXHQgICAgIGNoYW5uZWwtXFx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXFx1MDAzZWh3LnJ4X3F1ZXVlcykpIHtcXG4rXFx0XFx0bmV0ZGV2X2luZm8oZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcIk5vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIGNoYW5uZWwgY291bnQgd2hpbGUgTVEgcHJpbyBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGlmX3VwKVxcbiBcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zdG9wKGRldik7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbmluZGV4IGM5OTVmMjkwMDg1OTAuLjc5YTgyZTQ0NTQ1NDYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG5AQCAtMTk4MCw2ICsxOTgwLDEyIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZnJlZV9tZW07XFxuIFxcbitcXHRlcnIgPSBvdHgyX21xcHJpb191cChwZik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdG5ldGRldl9lcnIocGYtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVycyBkdXJpbmcgb3BlbjogJWQ7IGNvbnRpbnVpbmcgd2l0aG91dCBiYW5kd2lkdGggbGltaXRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBlcnIpO1xcbitcXG4gXFx0LyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovXFxuIFxcdGZvciAocWlkeCA9IDA7IHFpZHggXFx1MDAzYyBwZi1cXHUwMDNlaHcuY2ludF9jbnQ7IHFpZHgrKykge1xcbiBcXHRcXHRjcV9wb2xsID0gXFx1MDAyNnFzZXQtXFx1MDAzZW5hcGlbcWlkeF07XFxuQEAgLTI4NDYsNiArMjg1MiwxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4gXFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXFx1MDAzZW5ldGRldik7XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XFxuIFxcbitcXHRpZiAocHJvZyBcXHUwMDI2XFx1MDAyNiBwZi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHByb2cgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VtdHUgXFx1MDAzZSBNQVhfWERQX01UVSkge1xcbiBcXHRcXHRuZXRkZXZfd2FybihkZXYsIFxcXCJKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXFxuaW5kZXggMDM5ZmQ0N2ViZjUyMi4uYWJkNjZiMzY2MDA5YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xcbkBAIC0xNiw2ICsxNiw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNfYWN0L3RjX21pcnJlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjX2FjdC90Y192bGFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9zY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3NjaF9nZW5lcmljLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiY24xMGsuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm90eDJfY29tbW9uLmhcXFwiXFxuQEAgLTMxLDYgKzMzLDEwIEBAXFxuIFxcbiAjZGVmaW5lIE1DQVNUX0lOVkFMSURfR1JQXFx0XFx0KC0xVSlcXG4gI2RlZmluZSBSQVRFX01BTlRJU1NBX0JJVFNcXHRcXHQ4XFxuKy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqL1xcbisjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTXFx0MjUwMDAwVUxMXFxuKy8qIE1heCBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDEzMDgxNiBNYnBzKS4gKi9cXG4rI2RlZmluZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QU1xcdCgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpXFxuIFxcbiBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKVxcbkBAIC02MSw2ICs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcXG4gXFx0XFx0XFx0KmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgXFx1MDAzY1xcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uXFxuK1xcdFxcdCAqIENOMTBLKSwgbm90IGEgbWluaW1hbCBidXJzdC5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdCpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7XFxuIFxcdFxcdCpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTtcXG4gXFx0fVxcbkBAIC0xNjAwLDE0ICsxNjA5LDcxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0ICBuaWMsIG5pYywgaW5ncmVzcyk7XFxuIH1cXG4gXFxuKy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqL1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRkZXZtX2tmcmVlKHBmdmYtXFx1MDAzZWRldiwgcGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlKTtcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsIHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IE5VTEw7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IE5VTEw7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyA9IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIHJlcGxhY2luZylcXG4re1xcbitcXHR1MTYgbnVtX3R4cSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXG4rXFx0aWYgKHJlcGxhY2luZyBcXHUwMDI2XFx1MDAyNiBwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XFxuK1xcdFxcdG1lbXNldChwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUsIDAsXFxuK1xcdFxcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcXG4rXFx0XFx0bWVtc2V0KHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCxcXG4rXFx0XFx0ICAgICAgIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSkpO1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVxcdTAwM2VkZXYsIG51bV90eHEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cXHUwMDNlZGV2LCBudW1fdHhxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xcbitcXHRcXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZnJlZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKnNuYXApXFxuK3tcXG4rXFx0aWYgKCEqc25hcClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsICpzbmFwKTtcXG4rXFx0KnNuYXAgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3NuYXBfY29weShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqZHN0LFxcbitcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwO1xcbitcXHRpbnQgdGM7XFxuK1xcbitcXHRpZiAoISpkc3QpIHtcXG4rXFx0XFx0c25hcCA9IGRldm1fa3phbGxvYyhwZnZmLVxcdTAwM2VkZXYsIHNpemVvZigqc25hcCksIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIXNuYXApXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHQqZHN0ID0gc25hcDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c25hcCA9ICpkc3Q7XFxuK1xcdH1cXG4rXFxuK1xcdHNuYXAtXFx1MDAzZW51bV90YyA9IHFvcHQtXFx1MDAzZW51bV90YztcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgVENfUU9QVF9NQVhfUVVFVUU7IHRjKyspIHtcXG4rXFx0XFx0c25hcC1cXHUwMDNlY291bnRbdGNdID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXHRcXHRzbmFwLVxcdTAwM2VvZmZzZXRbdGNdID0gcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXTtcXG4rXFx0XFx0c25hcC1cXHUwMDNlbWluX3JhdGVbdGNdID0gMDtcXG4rXFx0XFx0c25hcC1cXHUwMDNlbWF4X3JhdGVbdGNdID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdHNuYXAtXFx1MDAzZW1pbl9yYXRlW3RjXSA9IG1xcHJpby1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxcbitcXHRcXHRcXHRzbmFwLVxcdTAwM2VtYXhfcmF0ZVt0Y10gPSBtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0cmV0dXJuIG90eDJfbXFwcmlvX3NuYXBfY29weShwZnZmLCBcXHUwMDI2cGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXAsIG1xcHJpbyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXFx1MDAyNnBmdmYtXFx1MDAzZW9sZF9tcV9zbmFwKTtcXG4rXFx0cGZ2Zi1cXHUwMDNlb2xkX21xX3NuYXAgPSBwZnZmLVxcdTAwM2VjdXJfbXFfc25hcDtcXG4rXFx0cGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXAgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gZmFsc2U7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0cmV0dXJuIHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9NRFFdICE9IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXAgPSBwZnZmLVxcdTAwM2VvbGRfbXFfc25hcDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFx0dTE2IG51bV90eHEgPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFx0aW50IHRjLCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghc25hcClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmLCBmYWxzZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRtZW1zZXQocGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlLCAwLCBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcXG4rXFx0bWVtc2V0KHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyA9IDA7XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBzbmFwLVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gc25hcC1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHR1NjQgbWF4X3JhdGUgPSBzbmFwLVxcdTAwM2VtYXhfcmF0ZVt0Y107XFxuK1xcbitcXHRcXHRpZiAobWluX3JhdGUpXFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NSU5fUkFURTtcXG4rXFx0XFx0aWYgKG1heF9yYXRlKVxcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUFYX1JBVEU7XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHNuYXAtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2Mgc25hcC1cXHUwMDNlb2Zmc2V0W3RjXSArIHNuYXAtXFx1MDAzZWNvdW50W3RjXTsgdHhxKyspIHtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHNuYXAtXFx1MDAzZW51bV90Yyk7XFxuK1xcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIHNuYXAtXFx1MDAzZW51bV90YzsgdGMrKylcXG4rXFx0XFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIHRjLCBzbmFwLVxcdTAwM2Vjb3VudFt0Y10sXFxuK1xcdFxcdFxcdFxcdCAgICBzbmFwLVxcdTAwM2VvZmZzZXRbdGNdKTtcXG4rXFxuK1xcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0Lyogb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoKSBjbGVhcnMgcmF0ZV9saW1pdCB3aGVuIG5kb19vcGVuKCkgZmFpbHMuXFxuK1xcdCAqIElmIG9wZW4gZmFpbGVkLCBUWCBzY2hlZHVsZXJzIHdlcmUgZnJlZWQ7IGRlZmVyIHNoYXBlciByZXN0b3JlIHRvIHRoZVxcbitcXHQgKiBuZXh0IHN1Y2Nlc3NmdWwgbmRvX29wZW4oKSB2aWEgb3R4Ml9tcXByaW9fdXAoKS5cXG4rXFx0ICovXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcXG4rXFxuK1xcdGlmIChwZnZmLVxcdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXSkge1xcbitcXHRcXHRlcnIgPSBvdHgyX21xcHJpb191cChwZnZmKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFxcdTAwMjZwZnZmLVxcdTAwM2VjdXJfbXFfc25hcCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXFx1MDAyNnBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwKTtcXG4rXFx0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFxcdTAwMjZwZnZmLVxcdTAwM2VvbGRfbXFfc25hcCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3N3KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cXHUwMDNlbmV0ZGV2O1xcbitcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgPSBmYWxzZTtcXG4rXFx0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcXG4rXFx0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTtcXG4rXFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rfVxcbitcXG4rLyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsXFxuKyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uXFxuKyAqIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93biAodGMgcWRpc2MgZGVsKSBhbmQgZXJyb3IgY2xlYW51cCwgbm90IG9uXFxuKyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLlxcbisgKi9cXG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhwZnZmLVxcdTAwM2VuZXRkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKVxcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XFxuK1xcbitcXHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcXG4rXFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihwZnZmLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGZhaWxlZCB0byBjbGVhciBoYXJkd2FyZSBzaGFwZXJzOiAlZDsgc29tZSBUWCBxdWV1ZXMgbWF5IHJldGFpbiBiYW5kd2lkdGggbGltaXRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBlcnIpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGludCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghcGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3IgKHR4cSA9IDA7IHR4cSBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xcbitcXHRcXHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XFxuK1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLmZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gcGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV07XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXTtcXG4rXFxuK1xcdFxcdGlmICghbWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgIW1heF9yYXRlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbWF4X3JhdGUpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHR4cSwgZXJyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvXFxuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxcbisgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cXG4rICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFyc1xcbisgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XFxuKyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duXFxuKyAqIHdpdGhvdXQgY2FsbGluZyBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieVxcbisgKiB0aGUgb3BlbiBlcnJvciBwYXRoLlxcbisgKlxcbisgKiBEbyBub3QgY2FsbCBkZXZfZGVhY3RpdmF0ZSgpL2Rldl9hY3RpdmF0ZSgpIGhlcmU6IHRoaXMgcnVucyBmcm9tXFxuKyAqIG5kb19zZXR1cF90YygpIHdoaWxlIHFkaXNjX2dyYWZ0KCkgbWF5IGFscmVhZHkgaG9sZCB0aGUgZGV2aWNlXFxuKyAqIGRlYWN0aXZhdGVkIGFuZCBtdXN0IHBlcmZvcm0gdGhlIGZpbmFsIGRldl9hY3RpdmF0ZSgpLlxcbisgKi9cXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXFxuK3tcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHQvKiBUT0RPOiBFeHBsb3JlIGxpdmUgVFggc2NoZWR1bGVyIHJlcHJvZ3JhbW1pbmcgdG8gYXZvaWQgYSBmdWxsXFxuK1xcdCAqIG5kb19zdG9wKCkvbmRvX29wZW4oKSBib3VuY2Ugb24gZXZlcnkgbXFwcmlvIGNoYW5nZS5cXG4rXFx0ICovXFxuK1xcdG5ldGRldl9pbmZvKG5ldGRldixcXG4rXFx0XFx0ICAgIFxcXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19zdG9wKG5ldGRldik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHQvKiBTZXQgYmVmb3JlIG5kb19vcGVuKCkgc28gb3R4Ml90eHNjaF9hbGxvYygpIHdpZGVucyBTTVEgYWxsb2NhdGlvbi5cXG4rXFx0ICogT24gdGVhcmRvd24sIGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlIHNvIG5kb19vcGVuKCkgZG9lcyBub3RcXG4rXFx0ICogcmUtYXBwbHkgYmFuZHdpZHRoIGxpbWl0cyB2aWEgb3R4Ml9tcXByaW9fdXAoKSBhZnRlciB0aGUga2VybmVsXFxuK1xcdCAqIHJlbW92ZWQgdGhlIHFkaXNjLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJhdGVfbGltaXQpXFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcXG4rXFxuK1xcdGVyciA9IG9wcy1cXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgZXJyKTtcXG4rXFx0XFx0LyogbmRvX29wZW4oKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXJzIG9uIGZhaWx1cmUgd2hpbGVcXG4rXFx0XFx0ICogbmV0aWZfcnVubmluZygpIG1heSBzdGlsbCBiZSB0cnVlOyBkcm9wIG1xcHJpbyBzb2Z0d2FyZSBzdGF0ZVxcbitcXHRcXHQgKiBvbmx5IGluc3RlYWQgb2Ygc2VuZGluZyBzaGFwZXIgY2xlYXJzIHRvIGZyZWVkIHF1ZXVlcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xcbitcXHRcXHQvKiBuZG9fb3BlbigpIHJvbGxzIGJhY2sgb24gZmFpbHVyZTsgbWFyayB0aGUgaW50ZXJmYWNlIGRvd24gc29cXG4rXFx0XFx0ICogbmV0aWZfY2xvc2UoKSBkb2VzIG5vdCBpbnZva2UgbmRvX3N0b3AoKSBvbiBmcmVlZCBOQVBJL3F1ZXVlXFxuK1xcdFxcdCAqIHN0YXRlLiBDYWxsZXIgaG9sZHMgUlROTDsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRwZnZmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xcbitcXHRcXHQvKiB2aXNpYmxlIHRvIG90eDJfc3RvcCgpIG9uIG90aGVyIGNwdXMgKi9cXG4rXFx0XFx0c21wX3dtYigpO1xcbitcXHRcXHRuZXRpZl9jbG9zZShuZXRkZXYpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHR1NjQgcmF0ZSwgdTMyIHFjb3VudCwgaW50IHRjLFxcbitcXHRcXHRcXHRcXHRcXHRjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGlmICghcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAocWNvdW50IFxcdTAwM2M9IDEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogVE9ETzogbXFwcmlvIG1pbl9yYXRlL21heF9yYXRlIGFyZSBwZXIgdHJhZmZpYyBjbGFzcywgYnV0IGJhbmR3aWR0aFxcbitcXHQgKiBvZmZsb2FkIHNoYXBlcyBvbiBwZXItcXVldWUgTURRIG5vZGVzIHBhcmVudGVkIHVuZGVyIGEgc2luZ2xlIFRMNC5cXG4rXFx0ICogV2l0aG91dCBwZXItVEMgVEw0IHNoYXBlcnMgdGhlIGRyaXZlciBjYW5ub3QgaG9ub3IgVEMtbGV2ZWwgbGltaXRzXFxuK1xcdCAqIGZvciBhIHRyYWZmaWMgY2xhc3MgdGhhdCBzcGFucyBtdWx0aXBsZSBxdWV1ZXMgd2l0aG91dCBlaXRoZXJcXG4rXFx0ICogZGl2aWRpbmcgdGhlIHJhdGUgYWNyb3NzIHF1ZXVlcyAodUFQSSBtaXNtYXRjaCkgb3IgZXhjZWVkaW5nIHRoZSBUQ1xcbitcXHQgKiBjYXAgd2hlbiBldmVyeSBtZW1iZXIgcXVldWUgaXMgYWN0aXZlLiBSZWplY3QgdW50aWwgcGVyLVRDIFRMNFxcbitcXHQgKiBzaGFwaW5nIGNhbiBiZSBpbXBsZW1lbnRlZCB3aXRob3V0IGFsbG9jYXRpbmcgYWRkaXRpb25hbCBUTDQgbm9kZXNcXG4rXFx0ICogYmV5b25kIHRoZSBleGlzdGluZyBoaWVyYXJjaHkuXFxuK1xcdCAqL1xcbitcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0ICAgXFxcIm1xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgbmFtZSwgdGMsIHFjb3VudCk7XFxuK1xcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBuYW1lLCB0YywgcWNvdW50KTtcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KVxcbit7XFxuK1xcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHUxNiBudW1fdHhxID0gcGZ2Zi1cXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XFxuK1xcdGludCB0YywgdHhxO1xcbitcXG4rXFx0aWYgKHFvcHQtXFx1MDAzZW51bV90YyBcXHUwMDNlIG51bV90eHEpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIHFvcHQtXFx1MDAzZW51bV90YywgbnVtX3R4cSk7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBxb3B0LVxcdTAwM2VudW1fdGMsIG51bV90eHEpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG51bV90eHEgXFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiTnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIHFvcHQtXFx1MDAzZW51bV90YzsgdGMrKykge1xcbitcXHRcXHR1MzIgcWNvdW50ID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXG4rXFx0XFx0Zm9yICh0eHEgPSBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdO1xcbitcXHRcXHQgICAgIHR4cSBcXHUwMDNjIHFvcHQtXFx1MDAzZW9mZnNldFt0Y10gKyBxY291bnQ7IHR4cSsrKSB7XFxuK1xcdFxcdFxcdGlmICh0eHEgXFx1MDAzZT0gbnVtX3R4cSkge1xcbitcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdHhxLCBudW1fdHhxKTtcXG4rXFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwibXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHR4cSwgbnVtX3R4cSk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpXFxuK3tcXG4rXFx0dTY0IG1icHM7XFxuK1xcbitcXHRpZiAoIXJhdGVfYnl0ZXNfcHMpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0aWYgKHJhdGVfYnl0ZXNfcHMgXFx1MDAzYyBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QUylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHJhdGVfYnl0ZXNfcHMgXFx1MDAzZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHJhdGVfYnl0ZXNfcHMgXFx1MDAzZSBkaXZfdTY0KFU2NF9NQVgsIDgpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRtYnBzID0gb3R4Ml9jb252ZXJ0X3JhdGUocmF0ZV9ieXRlc19wcyk7XFxuK1xcdHJldHVybiBpbG9nMihtYnBzIC8gMikgXFx1MDAzYz0gTUFYX1JBVEVfRVhQT05FTlQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxcbit7XFxuK1xcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFxcdTAwMjZtcXByaW8tXFx1MDAzZXFvcHQ7XFxuK1xcdGJvb2wgaGFkX21xcHJpbyA9IHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cXHUwMDNlbmV0ZGV2O1xcbitcXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSAwO1xcbitcXG4rXFx0LyogdGMgcWRpc2MgcmVwbGFjZSBydW5zIHNldHVwIG9uIHRoZSBuZXcgbXFwcmlvIGJlZm9yZSBkZXN0cm95aW5nIHRoZVxcbitcXHQgKiBvbGQgb25lLiByZXBsYWNlX3NldHVwX2RvbmUgYW5kIFRDX1JPT1RfR1JBRlQgZGlzdGluZ3Vpc2ggc3RhbGVcXG4rXFx0ICogb2xkLWluc3RhbmNlIHRlYXJkb3duIGZyb20gZ3JhZnQgZmFpbHVyZSBhZnRlciBzZXR1cC5cXG4rXFx0ICovXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lIFxcdTAwMjZcXHUwMDI2IHBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwKSB7XFxuK1xcdFxcdGVyciA9IDA7XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lKVxcbitcXHRcXHRcXHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0b3JlX29sZChwZnZmKTtcXG4rXFx0XFx0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cXG4rXFx0aWYgKCFoYWRfbXFwcmlvKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChpZl91cCkge1xcbitcXHRcXHRpbnQgZG93bl9lcnIsIGVycjtcXG4rXFxuK1xcdFxcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcXG4rXFx0XFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdHJldHVybiBkb3duX2VycjtcXG4rXFx0fVxcbitcXG4rXFx0LyogbmRvX3N0b3AoKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXIgVEwgbm9kZXM7IGRyb3Agc29mdHdhcmVcXG4rXFx0ICogc3RhdGUgb25seS5cXG4rXFx0ICovXFxuK1xcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby1cXHUwMDNlZXh0YWNrO1xcbitcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRib29sIHJlcGxhY2luZyA9IHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xcbitcXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbitcXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xcbitcXG4rXFx0aWYgKCFxb3B0LVxcdTAwM2VodylcXG4rXFx0XFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XFxuK1xcbitcXHRpZiAoIWlmX3VwKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobXFwcmlvLVxcdTAwM2VzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcXFxcblxcXCIsIG1xcHJpby1cXHUwMDNlc2hhcGVyKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssIFxcXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBtcXByaW8tXFx1MDAzZXNoYXBlcik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcXHUwMDI2cGZ2Zi1cXHUwMDNlaHcuY2FwX2ZsYWcpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVIrUElSIHN1cHBvcnRcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVIrUElSIHN1cHBvcnRcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXFx1MDAzZXBkZXYpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGZ2Zi1cXHUwMDNlcGZjX2VuKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGZ2Zi1cXHUwMDNleGRwX3Byb2cpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xcbitcXHRcXHR1MzIgcWNvdW50ID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcXG4rXFx0XFx0XFx0bWluX3JhdGUgPSBtcXByaW8tXFx1MDAzZW1pbl9yYXRlW3RjXTtcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXTtcXG4rXFxuK1xcdFxcdGlmIChtaW5fcmF0ZSBcXHUwMDI2XFx1MDAyNiBtYXhfcmF0ZSBcXHUwMDI2XFx1MDAyNiBtaW5fcmF0ZSBcXHUwMDNlIG1heF9yYXRlKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSkge1xcbitcXHRcXHRcXHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgcWNvdW50LCB0YywgXFxcIm1pblxcXCIpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKSB7XFxuK1xcdFxcdFxcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1heF9yYXRlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBxY291bnQsIHRjLCBcXFwibWF4XFxcIik7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1pbl9yYXRlKSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIG1pbl9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbWluX3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1heF9yYXRlKSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIG1heF9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhuZXRkZXYsIGV4dGFjaywgcW9wdCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19zdGFnZV9jdXIocGZ2ZiwgbXFwcmlvKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtXFx1MDAzZW5ldGRldiwgdHJ1ZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIHJlcGxhY2luZyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIG90eDJfbXFwcmlvX3VwKCkgbWF5IGhhdmUgcmVzdG9yZWQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZHVyaW5nXFxuK1xcdCAqIHRoZSByZXN0YXJ0IGFib3ZlLiBDbGVhciBldmVyeSBNRFEgc2hhcGVyIGJlZm9yZSBhcHBseWluZyB0aGUgbmV3XFxuK1xcdCAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlXFxuK1xcdCAqIGxpbWl0cyBpbiBoYXJkd2FyZS5cXG4rXFx0ICovXFxuK1xcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgPSBtcXByaW8tXFx1MDAzZWZsYWdzO1xcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcXG4rXFx0XFx0dTMyIHFjb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W3RjXTtcXG4rXFxuK1xcdFxcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUVxcbitcXHRcXHQgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWVcXG4rXFx0XFx0ICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLiBNdWx0aS1xdWV1ZSBUQ3Mgd2l0aCByYXRlc1xcbitcXHRcXHQgKiBhcmUgcmVqZWN0ZWQgYWJvdmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxcbitcXHRcXHRcXHRtaW5fcmF0ZSA9IG1xcHJpby1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxcbitcXHRcXHRcXHRtYXhfcmF0ZSA9IG1xcHJpby1cXHUwMDNlbWF4X3JhdGVbdGNdO1xcbitcXG4rXFx0XFx0Zm9yICh0eHEgPSBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdO1xcbitcXHRcXHQgICAgIHR4cSBcXHUwMDNjIHFvcHQtXFx1MDAzZW9mZnNldFt0Y10gKyBxY291bnQ7IHR4cSsrKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xcbitcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcXG4rXFxuK1xcdFxcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBwZnZmLVxcdTAwM2VjdXJfbXFfc25hcC1cXHUwMDNlbnVtX3RjKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwLVxcdTAwM2VudW1fdGM7IGkrKylcXG4rXFx0XFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwLVxcdTAwM2Vjb3VudFtpXSxcXG4rXFx0XFx0XFx0XFx0ICAgIHFvcHQtXFx1MDAzZW9mZnNldFtpXSk7XFxuK1xcbitcXHRxb3B0LVxcdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcXG4rXFxuK1xcdGlmIChyZXBsYWNpbmcpIHtcXG4rXFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IHRydWU7XFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0b3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rY2xlYW51cDpcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSAwO1xcbitcXHRpZiAocmVwbGFjaW5nKSB7XFxuK1xcdFxcdGludCByZXN0b3JlX2VyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xcbitcXG4rXFx0XFx0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcXG4rXFx0XFx0aWYgKHJlc3RvcmVfZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICByZXN0b3JlX2Vycik7XFxuK1xcdFxcdFxcdGlmIChleHRhY2spXFxuK1xcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQgYW5kIHByaW9yIGNvbmZpZ3VyYXRpb24gcm9sbGJhY2sgZmFpbGVkOiAlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICByZXN0b3JlX2Vycik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGlmIChleHRhY2spXFxuK1xcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkXFxcIik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XFxuK1xcdH1cXG4rXFx0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNfcm9vdF9xb3B0X29mZmxvYWQgKnJvb3QpXFxuK3tcXG4rXFx0c3dpdGNoIChyb290LVxcdTAwM2Vjb21tYW5kKSB7XFxuK1xcdGNhc2UgVENfUk9PVF9HUkFGVDpcXG4rXFx0XFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUpXFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSB0cnVlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XFxuK1xcbitcXHRpZiAoYmFzZS1cXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGNhcHMgPSBiYXNlLVxcdTAwM2VjYXBzO1xcbitcXHRjYXBzLVxcdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxcbiBcXHRcXHQgIHZvaWQgKnR5cGVfZGF0YSlcXG4ge1xcbiBcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19RVUVSWV9DQVBTOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XFxuIFxcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4gXFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xcbitcXHRjYXNlIFRDX1NFVFVQX1JPT1RfUURJU0M6XFxuK1xcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuQEAgLTE2MzIsNiArMjM0MSw3IEBAIEVYUE9SVF9TWU1CT0wob3R4Ml9pbml0X3RjKTtcXG4gdm9pZCBvdHgyX3NodXRkb3duX3RjKHN0cnVjdCBvdHgyX25pYyAqbmljKVxcbiB7XFxuIFxcdG90eDJfZGVzdHJveV90Y19mbG93X2xpc3QobmljKTtcXG4rXFx0b3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KG5pYyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChvdHgyX3NodXRkb3duX3RjKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xcbmluZGV4IDY5YzA5MTFlMjhlOTEuLmQ5YWYxODJlNTcyMWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuQEAgLTExOCw2ICsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4gXFx0LyogY29uZmlndXJlIFBJUiAqL1xcbiBcXHRtYXhyYXRlID0gKG5vZGUtXFx1MDAzZXJhdGUgXFx1MDAzZSBub2RlLVxcdTAwM2VjZWlsKSA/IG5vZGUtXFx1MDAzZXJhdGUgOiBub2RlLVxcdTAwM2VjZWlsO1xcbiBcXG4rXFx0LyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuXFxuK1xcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXFxuK1xcdCAqL1xcbiBcXHRjZmctXFx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cXG4gXFx0XFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcXG4gXFx0KCpudW1fcmVncykrKztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6MTk6MzEuODE4NDk5MjQyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDcwOTAwMTQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29kZSBleGNsdXNpdmVseSB3aXRoaW4gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBhbmQgUlZVIGRyaXZlcnMgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyksIGFkZGluZyBtcXByaW8gVEMgaGFyZHdhcmUgb2ZmbG9hZCBzdXBwb3J0LiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZS9Tb0MgaGFyZHdhcmUgKE1hcnZlbGwgT2N0ZW9uVFgyIC8gUlZVKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTE4ZTk0NzQxYjE0NjU4ZjVlMTU4ZjU0Y2Q0N2VlNzA1Mzc2ODQ4NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTM6MTk6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbmluZGV4IDE1M2ViNTdiYWQwNjcuLmM5YTQzMjZkNzI1ZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuQEAgLTMzMSw4ICszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcbitcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7XG4rXHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICBcInBjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcblwiLFxuK1x0XHRcdFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuaW5kZXggMTc1OTkyMTg4YzE4YS4uYTUxOWUwYTk3YTJiNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuQEAgLTYxNSw2ICs2MTUsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XG4gXG4rc3RhdGljIGludFxuK290eDJfbml4X3RtcV9yZWdfd3JpdGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgY250LFxuK1x0XHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXG4rXHRcdCAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKVxuK3tcbitcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuK1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4rXHRpbnQgaSwgZXJyO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcbitcdGlmICghcmVxKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdHJlcS1cdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcbitcdHJlcS1cdTAwM2VudW1fcmVncyA9IGNudDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4rXHRcdHJlcS1cdTAwM2VyZWdbaV0gPSByZWdfYWRkcltpXTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XG4rXHR9XG4rXG4rXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xuK1x0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbitcdGludCBlcnIsIHNtcSwgaSwgY250ID0gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV07IGkrKykge1xuK1x0XHRzbXEgPSBwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcbitcbitcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuK1x0XHRjbnQrKztcbitcbitcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuK1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuK1x0XHRjbnQrKztcbitcbitcdFx0aWYgKGNudCBcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4rXHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZmFpbDtcbitcdFx0Y250ID0gMDtcbitcdH1cbitcbitcdGlmIChjbnQpIHtcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4rXHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZmFpbDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK2ZhaWw6XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKVxuK3tcbitcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuK1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4rXHRpbnQgZXJyLCBzbXEsIG4gPSAwO1xuK1x0dTY0IHJlZ19hZGRyWzJdO1xuK1x0dTY0IHJlZ192YWxbMl07XG4rXHR1NjQgcmF0ZTtcbitcbitcdGlmICghbWF4cmF0ZSBcdTAwMjZcdTAwMjYgIW1pbnJhdGUpIHtcbitcdFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuK1x0XHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0XHRyZWdfdmFsWzBdID0gMDtcbitcdFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdFx0cmVnX3ZhbFsxXSA9IDA7XG4rXHRcdHJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdH1cbitcbitcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4rXHRpZiAoIXJlcSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4rXG4rXHQvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvXG4rXHQgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYXG4rXHQgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzXG4rXHQgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGFcbitcdCAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYVxuK1x0ICogaGFyZHdhcmUgY2FwLlxuK1x0ICpcbitcdCAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksXG4rXHQgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvblxuK1x0ICogZXZlcnkgdXBkYXRlIHNvIG9taXR0ZWQgcmF0ZXMgYXJlIGFwcGxpZWQgZXhwbGljaXRseSByYXRoZXIgdGhhblxuK1x0ICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS5cbitcdCAqL1xuK1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0aWYgKG1heHJhdGUpIHtcbitcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpO1xuK1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4rXHR9XG4rXHRuKys7XG4rXG4rXHQvKiBDSVIrUElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xuK1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuK1x0aWYgKG1pbnJhdGUpIHtcbitcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xuK1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4rXHR9XG4rXHRuKys7XG4rXHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBuO1xuK1xuK1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2Zvcl9wZmMpXG4ge1xuIFx0dTE2ICgqc2NocV9saXN0KVtNQVhfVFhTQ0hRX1BFUl9GVU5DXTtcbkBAIC02NTEsNyArNzg3LDExIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXG4gXHRcdFx0XHRcdFx0KHU2NClody1cdTAwM2VzbXFfbGlua190eXBlKTtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzKys7XG4gXHRcdC8qIE1EUSBjb25maWcgKi9cbi1cdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4rXHRcdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVswXTtcbitcdFx0ZWxzZVxuK1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4rXG4gXHRcdHJlcS1cdTAwM2VyZWdbMV0gPSBOSVhfQUZfTURRWF9QQVJFTlQoc2NocSk7XG4gXHRcdHJlcS1cdTAwM2VyZWd2YWxbMV0gPSBwYXJlbnQgXHUwMDNjXHUwMDNjIDE2O1xuIFx0XHRyZXEtXHUwMDNlbnVtX3JlZ3MrKztcbkBAIC03NzksNiArOTE5LDkgQEAgaW50IG90eDJfdHhzY2hfYWxsb2Moc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0XHRyZXEtXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1RMNF0gPSBjaGFuX2NudDtcbiBcdH1cbiBcbitcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuK1x0XHRyZXEtXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuK1xuIFx0cmMgPSBvdHgyX3N5bmNfbWJveF9tc2coXHUwMDI2cGZ2Zi1cdTAwM2VtYm94KTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuQEAgLTg0NCw2ICs5ODcsNyBAQCB2b2lkIG90eDJfdHhzY2hxX3N0b3Aoc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFxuIFx0LyogQ2xlYXIgdGhlIHR4c2NocSBsaXN0ICovXG4gXHRmb3IgKGx2bCA9IDA7IGx2bCBcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCsrKSB7XG4rXHRcdHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtsdmxdID0gMDtcbiBcdFx0Zm9yIChzY2hxID0gMDsgc2NocSBcdTAwM2MgTUFYX1RYU0NIUV9QRVJfRlVOQzsgc2NocSsrKVxuIFx0XHRcdHBmdmYtXHUwMDNlaHcudHhzY2hxX2xpc3RbbHZsXVtzY2hxXSA9IDA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuaW5kZXggZWVjZWU2MTJiN2IyYy4uZWRlN2YxMTEzYjcxNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuQEAgLTE3LDYgKzE3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zb2MvbWFydmVsbC9zaWxpY29ucy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29jL21hcnZlbGwvb2N0ZW9udHgyL2FzbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hY3NlYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9wa3Rfc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZTY0LmhcdTAwM2VcbkBAIC00ODMsNiArNDg0LDIzIEBAIHN0cnVjdCBwZl9pcnFfZGF0YSB7XG4gXHRpbnQgbWRldnM7XG4gfTtcbiBcbitzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwIHtcbitcdHU2NCBtaW5fcmF0ZVtUQ19RT1BUX01BWF9RVUVVRV07XG4rXHR1NjQgbWF4X3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xuK1x0X191OCBudW1fdGM7XG4rXHRfX3UxNiBjb3VudFtUQ19RT1BUX01BWF9RVUVVRV07XG4rXHRfX3UxNiBvZmZzZXRbVENfUU9QVF9NQVhfUVVFVUVdO1xuK307XG4rXG4rc3RydWN0IG90eDJfbXFwcmlvIHtcbitcdHUzMlx0ZmxhZ3M7XG4rXHR1NjRcdCptaW5fcmF0ZTtcbitcdHU2NFx0Km1heF9yYXRlO1xuK1x0Ym9vbFx0cmF0ZV9saW1pdDtcbitcdGJvb2xcdHJlcGxhY2Vfc2V0dXBfZG9uZTtcbitcdGJvb2xcdHJlcGxhY2VfZ3JhZnRfZG9uZTtcbit9O1xuK1xuIHN0cnVjdCBvdHgyX25pYyB7XG4gXHR2b2lkIF9faW9tZW1cdFx0KnJlZ19iYXNlO1xuIFx0c3RydWN0IG5ldF9kZXZpY2VcdCpuZXRkZXY7XG5AQCAtNTE1LDYgKzUzMywxMCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xuIFx0dTY0XHRcdFx0ZmxhZ3M7XG4gXHR1NjRcdFx0XHQqY3Ffb3BfYWRkcjtcbiBcbitcdHN0cnVjdCBvdHgyX21xcHJpb1x0bXFwcmlvO1xuK1x0c3RydWN0IG1xX29mZmxvYWRfc25hcFx0KmN1cl9tcV9zbmFwO1xuK1x0c3RydWN0IG1xX29mZmxvYWRfc25hcFx0Km9sZF9tcV9zbmFwO1xuK1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgKzEyNjgsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXG4rXHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li40YTcwYWJjMjMwYmVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxuIFx0dTggb2xkX3BmY19lbjtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjYgcGZjLVx1MDAzZXBmY19lbikge1xuK1x0XHRuZXRkZXZfZXJyKGRldixcbitcdFx0XHQgICBcIlBGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRvbGRfcGZjX2VuID0gcGZ2Zi1cdTAwM2VwZmNfZW47XG4gXHRwZnZmLVx1MDAzZXBmY19lbiA9IHBmYy1cdTAwM2VwZmNfZW47XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5pbmRleCA5YmVlMWI5MWVlYWE2Li5lYzI2MDFjNmMyNTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbkBAIC0yODcsNiArMjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjZcbitcdCAgICAoY2hhbm5lbC1cdTAwM2V0eF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxuK1x0ICAgICBjaGFubmVsLVx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXHUwMDNlaHcucnhfcXVldWVzKSkge1xuK1x0XHRuZXRkZXZfaW5mbyhkZXYsXG4rXHRcdFx0ICAgIFwiTm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4gXHRpZiAoaWZfdXApXG4gXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKGRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IGM5OTVmMjkwMDg1OTAuLjc5YTgyZTQ0NTQ1NDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5AQCAtMTk4MCw2ICsxOTgwLDEyIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZyZWVfbWVtO1xuIFxuK1x0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpO1xuK1x0aWYgKGVycilcbitcdFx0bmV0ZGV2X2VycihwZi1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICAgXCJtcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlcnMgZHVyaW5nIG9wZW46ICVkOyBjb250aW51aW5nIHdpdGhvdXQgYmFuZHdpZHRoIGxpbWl0c1xcblwiLFxuK1x0XHRcdCAgIGVycik7XG4rXG4gXHQvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi9cbiBcdGZvciAocWlkeCA9IDA7IHFpZHggXHUwMDNjIHBmLVx1MDAzZWh3LmNpbnRfY250OyBxaWR4KyspIHtcbiBcdFx0Y3FfcG9sbCA9IFx1MDAyNnFzZXQtXHUwMDNlbmFwaVtxaWR4XTtcbkBAIC0yODQ2LDYgKzI4NTIsMTIgQEAgc3RhdGljIGludCBvdHgyX3hkcF9zZXR1cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhwZi1cdTAwM2VuZXRkZXYpO1xuIFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcbiBcbitcdGlmIChwcm9nIFx1MDAyNlx1MDAyNiBwZi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCkge1xuK1x0XHRuZXRkZXZfZXJyKGRldixcbitcdFx0XHQgICBcIlhEUDogY2Fubm90IGF0dGFjaCB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZW10dSBcdTAwM2UgTUFYX1hEUF9NVFUpIHtcbiBcdFx0bmV0ZGV2X3dhcm4oZGV2LCBcIkp1bWJvIGZyYW1lcyBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIFhEUFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5pbmRleCAwMzlmZDQ3ZWJmNTIyLi5hYmQ2NmIzNjYwMDlhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuQEAgLTE2LDYgKzE2LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNfYWN0L3RjX21pcnJlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y192bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9zY2hlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L3NjaF9nZW5lcmljLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImNuMTBrLmhcIlxuICNpbmNsdWRlIFwib3R4Ml9jb21tb24uaFwiXG5AQCAtMzEsNiArMzMsMTAgQEBcbiBcbiAjZGVmaW5lIE1DQVNUX0lOVkFMSURfR1JQXHRcdCgtMVUpXG4gI2RlZmluZSBSQVRFX01BTlRJU1NBX0JJVFNcdFx0OFxuKy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqL1xuKyNkZWZpbmUgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFNcdDI1MDAwMFVMTFxuKy8qIE1heCBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDEzMDgxNiBNYnBzKS4gKi9cbisjZGVmaW5lIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTXHQoKE1BWF9CVVJTVF9TSVpFICogMTAwMDAwMFVMTCkgLyA4VUxMKVxuIFxuIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHRcdCAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKVxuQEAgLTYxLDYgKzY3LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxuIFx0XHRcdCpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMIFx1MDAzY1x1MDAzYyAoKmJ1cnN0X2V4cCAtIDcpKTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbitcdFx0LyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uXG4rXHRcdCAqIENOMTBLKSwgbm90IGEgbWluaW1hbCBidXJzdC5cbitcdFx0ICovXG4gXHRcdCpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7XG4gXHRcdCpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTtcbiBcdH1cbkBAIC0xNjAwLDE0ICsxNjA5LDcxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0ICBuaWMsIG5pYywgaW5ncmVzcyk7XG4gfVxuIFxuKy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqL1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKTtcbitcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKTtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlID0gTlVMTDtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlID0gTlVMTDtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gMDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgcmVwbGFjaW5nKVxuK3tcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcbitcdGlmIChyZXBsYWNpbmcgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIFx1MDAyNlx1MDAyNiBwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xuK1x0XHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUsIDAsXG4rXHRcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSkpO1xuK1x0XHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUsIDAsXG4rXHRcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkpO1xuK1x0XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbitcbitcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuK1x0XHRcdFx0XHQgICAgIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpLFxuK1x0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4rXHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSksXG4rXHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xuK1x0XHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2ZyZWUoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqc25hcClcbit7XG4rXHRpZiAoISpzbmFwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCAqc25hcCk7XG4rXHQqc25hcCA9IE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc25hcF9jb3B5KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbitcdFx0XHRcdCBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqZHN0LFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4re1xuK1x0Y29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXHUwMDI2bXFwcmlvLVx1MDAzZXFvcHQ7XG4rXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwO1xuK1x0aW50IHRjO1xuK1xuK1x0aWYgKCEqZHN0KSB7XG4rXHRcdHNuYXAgPSBkZXZtX2t6YWxsb2MocGZ2Zi1cdTAwM2VkZXYsIHNpemVvZigqc25hcCksIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIXNuYXApXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdCpkc3QgPSBzbmFwO1xuK1x0fSBlbHNlIHtcbitcdFx0c25hcCA9ICpkc3Q7XG4rXHR9XG4rXG4rXHRzbmFwLVx1MDAzZW51bV90YyA9IHFvcHQtXHUwMDNlbnVtX3RjO1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBUQ19RT1BUX01BWF9RVUVVRTsgdGMrKykge1xuK1x0XHRzbmFwLVx1MDAzZWNvdW50W3RjXSA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuK1x0XHRzbmFwLVx1MDAzZW9mZnNldFt0Y10gPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4rXHRcdHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdID0gMDtcbitcdFx0c25hcC1cdTAwM2VtYXhfcmF0ZVt0Y10gPSAwO1xuK1x0fVxuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRzbmFwLVx1MDAzZW1pbl9yYXRlW3RjXSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdHNuYXAtXHUwMDNlbWF4X3JhdGVbdGNdID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3N0YWdlX2N1cihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbit7XG4rXHRyZXR1cm4gb3R4Ml9tcXByaW9fc25hcF9jb3B5KHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlY3VyX21xX3NuYXAsIG1xcHJpbyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCk7XG4rXHRwZnZmLVx1MDAzZW9sZF9tcV9zbmFwID0gcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcDtcbitcdHBmdmYtXHUwMDNlY3VyX21xX3NuYXAgPSBOVUxMO1xuK31cbitcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgPSBmYWxzZTtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IGZhbHNlO1xuK31cbitcbitzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRyZXR1cm4gcGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfTURRXSAhPSAwO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwID0gcGZ2Zi1cdTAwM2VvbGRfbXFfc25hcDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcdGludCB0YywgdHhxLCBlcnI7XG4rXG4rXHRpZiAoIXNuYXApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2ZiwgZmFsc2UpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcbitcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpKTtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gMDtcbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2Mgc25hcC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gc25hcC1cdTAwM2VtaW5fcmF0ZVt0Y107XG4rXHRcdHU2NCBtYXhfcmF0ZSA9IHNuYXAtXHUwMDNlbWF4X3JhdGVbdGNdO1xuK1xuK1x0XHRpZiAobWluX3JhdGUpXG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUlOX1JBVEU7XG4rXHRcdGlmIChtYXhfcmF0ZSlcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NQVhfUkFURTtcbitcbitcdFx0Zm9yICh0eHEgPSBzbmFwLVx1MDAzZW9mZnNldFt0Y107XG4rXHRcdCAgICAgdHhxIFx1MDAzYyBzbmFwLVx1MDAzZW9mZnNldFt0Y10gKyBzbmFwLVx1MDAzZWNvdW50W3RjXTsgdHhxKyspIHtcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7XG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHNuYXAtXHUwMDNlbnVtX3RjKTtcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2Mgc25hcC1cdTAwM2VudW1fdGM7IHRjKyspXG4rXHRcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCB0Yywgc25hcC1cdTAwM2Vjb3VudFt0Y10sXG4rXHRcdFx0XHQgICAgc25hcC1cdTAwM2VvZmZzZXRbdGNdKTtcbitcbitcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XG4rXHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0Lyogb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoKSBjbGVhcnMgcmF0ZV9saW1pdCB3aGVuIG5kb19vcGVuKCkgZmFpbHMuXG4rXHQgKiBJZiBvcGVuIGZhaWxlZCwgVFggc2NoZWR1bGVycyB3ZXJlIGZyZWVkOyBkZWZlciBzaGFwZXIgcmVzdG9yZSB0byB0aGVcbitcdCAqIG5leHQgc3VjY2Vzc2Z1bCBuZG9fb3BlbigpIHZpYSBvdHgyX21xcHJpb191cCgpLlxuK1x0ICovXG4rXHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcbitcbitcdGlmIChwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdKSB7XG4rXHRcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmdmYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCk7XG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3N3KHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4rXG4rXHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gZmFsc2U7XG4rXHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuK1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTtcbitcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rfVxuK1xuKy8qIFRlYXIgZG93biBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQ6IGNsZWFyIHBlci1xdWV1ZSBzaGFwZXJzLFxuKyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uXG4rICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb25cbisgKiByb3V0aW5lIG5ldGRldiBzdG9wL29wZW4gY3ljbGVzIHdoZXJlIHRoZSBvZmZsb2FkIHN0YXlzIGFjdGl2ZS5cbisgKi9cbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcocGZ2Zi1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpXG4rXHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbitcbitcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuK1xuK1x0aWYgKGVycikge1xuK1x0XHRuZXRkZXZfZXJyKHBmdmYtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgIFwibXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgaGFyZHdhcmUgc2hhcGVyczogJWQ7IHNvbWUgVFggcXVldWVzIG1heSByZXRhaW4gYmFuZHdpZHRoIGxpbWl0c1xcblwiLFxuK1x0XHRcdCAgIGVycik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGludCB0eHEsIGVycjtcbitcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRmb3IgKHR4cSA9IDA7IHR4cSBcdTAwM2MgcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlczsgdHhxKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuK1xuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdG1pbl9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXTtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbitcdFx0XHRtYXhfcmF0ZSA9IHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV07XG4rXG4rXHRcdGlmICghbWluX3JhdGUgXHUwMDI2XHUwMDI2ICFtYXhfcmF0ZSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLFxuK1x0XHRcdFx0XHRcdCAgIG1heF9yYXRlKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlciBmb3IgdHhxICVkOiAlZFxcblwiLFxuK1x0XHRcdFx0ICAgdHhxLCBlcnIpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW9cbisgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSlcbisgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cbisgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzXG4rICogY2Fycmllciwgc3RvcHMgYWxsIFRYIHF1ZXVlcywgdGVhcnMgZG93biBJUlFzL05BUEkgYW5kIGRyb3BzIGluLWZsaWdodFxuKyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duXG4rICogd2l0aG91dCBjYWxsaW5nIG5kb19zdG9wKCkgYWdhaW4gb24gcmVzb3VyY2VzIGFscmVhZHkgdG9ybiBkb3duIGJ5XG4rICogdGhlIG9wZW4gZXJyb3IgcGF0aC5cbisgKlxuKyAqIERvIG5vdCBjYWxsIGRldl9kZWFjdGl2YXRlKCkvZGV2X2FjdGl2YXRlKCkgaGVyZTogdGhpcyBydW5zIGZyb21cbisgKiBuZG9fc2V0dXBfdGMoKSB3aGlsZSBxZGlzY19ncmFmdCgpIG1heSBhbHJlYWR5IGhvbGQgdGhlIGRldmljZVxuKyAqIGRlYWN0aXZhdGVkIGFuZCBtdXN0IHBlcmZvcm0gdGhlIGZpbmFsIGRldl9hY3RpdmF0ZSgpLlxuKyAqL1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KVxuK3tcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzO1xuK1x0aW50IGVycjtcbitcbitcdC8qIFRPRE86IEV4cGxvcmUgbGl2ZSBUWCBzY2hlZHVsZXIgcmVwcm9ncmFtbWluZyB0byBhdm9pZCBhIGZ1bGxcbitcdCAqIG5kb19zdG9wKCkvbmRvX29wZW4oKSBib3VuY2Ugb24gZXZlcnkgbXFwcmlvIGNoYW5nZS5cbitcdCAqL1xuK1x0bmV0ZGV2X2luZm8obmV0ZGV2LFxuK1x0XHQgICAgXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcblwiKTtcbitcbitcdGVyciA9IG9wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLlxuK1x0ICogT24gdGVhcmRvd24sIGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlIHNvIG5kb19vcGVuKCkgZG9lcyBub3RcbitcdCAqIHJlLWFwcGx5IGJhbmR3aWR0aCBsaW1pdHMgdmlhIG90eDJfbXFwcmlvX3VwKCkgYWZ0ZXIgdGhlIGtlcm5lbFxuK1x0ICogcmVtb3ZlZCB0aGUgcWRpc2MuXG4rXHQgKi9cbitcdGlmIChyYXRlX2xpbWl0KVxuK1x0XHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcbitcdGVsc2VcbitcdFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XG4rXG4rXHRlcnIgPSBvcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbitcdGlmIChlcnIpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXG5cIixcbitcdFx0XHQgICBlcnIpO1xuK1x0XHQvKiBuZG9fb3BlbigpIGFscmVhZHkgZnJlZWQgdGhlIFRYIHNjaGVkdWxlcnMgb24gZmFpbHVyZSB3aGlsZVxuK1x0XHQgKiBuZXRpZl9ydW5uaW5nKCkgbWF5IHN0aWxsIGJlIHRydWU7IGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlXG4rXHRcdCAqIG9ubHkgaW5zdGVhZCBvZiBzZW5kaW5nIHNoYXBlciBjbGVhcnMgdG8gZnJlZWQgcXVldWVzLlxuK1x0XHQgKi9cbitcdFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XG4rXHRcdC8qIG5kb19vcGVuKCkgcm9sbHMgYmFjayBvbiBmYWlsdXJlOyBtYXJrIHRoZSBpbnRlcmZhY2UgZG93biBzb1xuK1x0XHQgKiBuZXRpZl9jbG9zZSgpIGRvZXMgbm90IGludm9rZSBuZG9fc3RvcCgpIG9uIGZyZWVkIE5BUEkvcXVldWVcbitcdFx0ICogc3RhdGUuIENhbGxlciBob2xkcyBSVE5MOyBkZXZfY2xvc2UoKSB3b3VsZCBkZWFkbG9jay5cbitcdFx0ICovXG4rXHRcdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjtcbitcdFx0LyogdmlzaWJsZSB0byBvdHgyX3N0b3AoKSBvbiBvdGhlciBjcHVzICovXG4rXHRcdHNtcF93bWIoKTtcbitcdFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcbitcdH1cbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4rXHRcdFx0XHRcdHU2NCByYXRlLCB1MzIgcWNvdW50LCBpbnQgdGMsXG4rXHRcdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0aWYgKCFyYXRlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChxY291bnQgXHUwMDNjPSAxKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFRPRE86IG1xcHJpbyBtaW5fcmF0ZS9tYXhfcmF0ZSBhcmUgcGVyIHRyYWZmaWMgY2xhc3MsIGJ1dCBiYW5kd2lkdGhcbitcdCAqIG9mZmxvYWQgc2hhcGVzIG9uIHBlci1xdWV1ZSBNRFEgbm9kZXMgcGFyZW50ZWQgdW5kZXIgYSBzaW5nbGUgVEw0LlxuK1x0ICogV2l0aG91dCBwZXItVEMgVEw0IHNoYXBlcnMgdGhlIGRyaXZlciBjYW5ub3QgaG9ub3IgVEMtbGV2ZWwgbGltaXRzXG4rXHQgKiBmb3IgYSB0cmFmZmljIGNsYXNzIHRoYXQgc3BhbnMgbXVsdGlwbGUgcXVldWVzIHdpdGhvdXQgZWl0aGVyXG4rXHQgKiBkaXZpZGluZyB0aGUgcmF0ZSBhY3Jvc3MgcXVldWVzICh1QVBJIG1pc21hdGNoKSBvciBleGNlZWRpbmcgdGhlIFRDXG4rXHQgKiBjYXAgd2hlbiBldmVyeSBtZW1iZXIgcXVldWUgaXMgYWN0aXZlLiBSZWplY3QgdW50aWwgcGVyLVRDIFRMNFxuK1x0ICogc2hhcGluZyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aG91dCBhbGxvY2F0aW5nIGFkZGl0aW9uYWwgVEw0IG5vZGVzXG4rXHQgKiBiZXlvbmQgdGhlIGV4aXN0aW5nIGhpZXJhcmNoeS5cbitcdCAqL1xuK1x0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdCAgIFwibXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXFxuXCIsXG4rXHRcdCAgIG5hbWUsIHRjLCBxY291bnQpO1xuK1x0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwibXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXCIsXG4rXHRcdFx0ICAgICAgIG5hbWUsIHRjLCBxY291bnQpO1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpXG4re1xuK1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcdGludCB0YywgdHhxO1xuK1xuK1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBudW1fdHhxKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcblwiLFxuK1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcIixcbitcdFx0XHRcdCAgICAgICBxb3B0LVx1MDAzZW51bV90YywgbnVtX3R4cSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKG51bV90eHEgXHUwMDNlIE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcblwiLFxuK1x0XHRcdCAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuK1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIk51bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XCIsXG4rXHRcdFx0XHQgICAgICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdGZvciAodHhxID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICsgcWNvdW50OyB0eHErKykge1xuK1x0XHRcdGlmICh0eHEgXHUwMDNlPSBudW1fdHhxKSB7XG4rXHRcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdFx0ICAgXCJtcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXG5cIixcbitcdFx0XHRcdFx0ICAgdHhxLCBudW1fdHhxKTtcbitcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVwiLFxuK1x0XHRcdFx0XHRcdCAgICAgICB0eHEsIG51bV90eHEpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fcmF0ZV92YWxpZCh1NjQgcmF0ZV9ieXRlc19wcylcbit7XG4rXHR1NjQgbWJwcztcbitcbitcdGlmICghcmF0ZV9ieXRlc19wcylcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2MgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIGRpdl91NjQoVTY0X01BWCwgOCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTtcbitcdHJldHVybiBpbG9nMihtYnBzIC8gMikgXHUwMDNjPSBNQVhfUkFURV9FWFBPTkVOVDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuK1x0Ym9vbCBoYWRfbXFwcmlvID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgZXJyO1xuK1xuK1x0cW9wdC1cdTAwM2VodyA9IDA7XG4rXG4rXHQvKiB0YyBxZGlzYyByZXBsYWNlIHJ1bnMgc2V0dXAgb24gdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlXG4rXHQgKiBvbGQgb25lLiByZXBsYWNlX3NldHVwX2RvbmUgYW5kIFRDX1JPT1RfR1JBRlQgZGlzdGluZ3Vpc2ggc3RhbGVcbitcdCAqIG9sZC1pbnN0YW5jZSB0ZWFyZG93biBmcm9tIGdyYWZ0IGZhaWx1cmUgYWZ0ZXIgc2V0dXAuXG4rXHQgKi9cbitcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlY3VyX21xX3NuYXApIHtcbitcdFx0ZXJyID0gMDtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSlcbitcdFx0XHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xuK1x0XHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cbitcdGlmICghaGFkX21xcHJpbylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoaWZfdXApIHtcbitcdFx0aW50IGRvd25fZXJyLCBlcnI7XG4rXG4rXHRcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbitcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0cmV0dXJuIGRvd25fZXJyO1xuK1x0fVxuK1xuK1x0LyogbmRvX3N0b3AoKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXIgVEwgbm9kZXM7IGRyb3Agc29mdHdhcmVcbitcdCAqIHN0YXRlIG9ubHkuXG4rXHQgKi9cbitcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4re1xuK1x0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gbXFwcmlvLVx1MDAzZWV4dGFjaztcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdGJvb2wgcmVwbGFjaW5nID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xuK1xuK1x0aWYgKCFxb3B0LVx1MDAzZWh3KVxuK1x0XHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbitcbitcdGlmICghaWZfdXApIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChtcXByaW8tXHUwMDNlc2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcblwiLCBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssIFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcIixcbitcdFx0XHRcdCAgICAgICBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKGlzX290eDJfc2RwX3JlcChwZnZmLVx1MDAzZXBkZXYpKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKHBmdmYtXHUwMDNlcGZjX2VuKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAocGZ2Zi1cdTAwM2V4ZHBfcHJvZykge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdG1pbl9yYXRlID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4rXHRcdFx0bWF4X3JhdGUgPSBtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdO1xuK1xuK1x0XHRpZiAobWluX3JhdGUgXHUwMDI2XHUwMDI2IG1heF9yYXRlIFx1MDAyNlx1MDAyNiBtaW5fcmF0ZSBcdTAwM2UgbWF4X3JhdGUpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxuXCIsXG4rXHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcbitcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgICAgIFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXCIsXG4rXHRcdFx0XHRcdCAgICAgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSkge1xuK1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1pbl9yYXRlLFxuK1x0XHRcdFx0XHRcdFx0ICAgcWNvdW50LCB0YywgXCJtaW5cIik7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpIHtcbitcdFx0XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSxcbitcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsIFwibWF4XCIpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWluX3JhdGUpKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cIixcbitcdFx0XHRcdCAgIG1pbl9yYXRlLCB0Yyk7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcIixcbitcdFx0XHRcdFx0ICAgICAgIG1pbl9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtYXhfcmF0ZSkpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xcblwiLFxuK1x0XHRcdFx0ICAgbWF4X3JhdGUsIHRjKTtcbitcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgICAgIFwibXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1wiLFxuK1x0XHRcdFx0XHQgICAgICAgbWF4X3JhdGUsIHRjKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhuZXRkZXYsIGV4dGFjaywgcW9wdCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHBmdmYsIG1xcHJpbyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi1cdTAwM2VuZXRkZXYsIHRydWUpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2ZiwgcmVwbGFjaW5nKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIG90eDJfbXFwcmlvX3VwKCkgbWF5IGhhdmUgcmVzdG9yZWQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZHVyaW5nXG4rXHQgKiB0aGUgcmVzdGFydCBhYm92ZS4gQ2xlYXIgZXZlcnkgTURRIHNoYXBlciBiZWZvcmUgYXBwbHlpbmcgdGhlIG5ld1xuK1x0ICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGVcbitcdCAqIGxpbWl0cyBpbiBoYXJkd2FyZS5cbitcdCAqL1xuK1x0aWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHtcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gbXFwcmlvLVx1MDAzZWZsYWdzO1xuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbitcbitcdFx0LyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRXG4rXHRcdCAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZVxuK1x0XHQgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuIE11bHRpLXF1ZXVlIFRDcyB3aXRoIHJhdGVzXG4rXHRcdCAqIGFyZSByZWplY3RlZCBhYm92ZS5cbitcdFx0ICovXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdG1pbl9yYXRlID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4rXHRcdFx0bWF4X3JhdGUgPSBtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdO1xuK1xuK1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbitcdFx0ICAgICB0eHEgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcbitcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XFxuXCIsXG4rXHRcdFx0XHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuK1xuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4rXG4rXHRcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXG4rXHRcdFx0XHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHRcdH1cbitcdH1cbitcbitcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcC1cdTAwM2VudW1fdGMpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcC1cdTAwM2VudW1fdGM7IGkrKylcbitcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHBmdmYtXHUwMDNlY3VyX21xX3NuYXAtXHUwMDNlY291bnRbaV0sXG4rXHRcdFx0XHQgICAgcW9wdC1cdTAwM2VvZmZzZXRbaV0pO1xuK1xuK1x0cW9wdC1cdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcbitcbitcdGlmIChyZXBsYWNpbmcpIHtcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gdHJ1ZTtcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gZmFsc2U7XG4rXHR9IGVsc2Uge1xuK1x0XHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK1xuK2NsZWFudXA6XG4rXHRxb3B0LVx1MDAzZWh3ID0gMDtcbitcdGlmIChyZXBsYWNpbmcpIHtcbitcdFx0aW50IHJlc3RvcmVfZXJyID0gb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQocGZ2Zik7XG4rXG4rXHRcdG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7XG4rXHRcdGlmIChyZXN0b3JlX2Vycikge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkIGFuZCBwcmlvciBjb25maWd1cmF0aW9uIHJvbGxiYWNrIGZhaWxlZDogJWRcXG5cIixcbitcdFx0XHRcdCAgIHJlc3RvcmVfZXJyKTtcbitcdFx0XHRpZiAoZXh0YWNrKVxuK1x0XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdFx0ICAgICAgIFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkXCIsXG4rXHRcdFx0XHRcdFx0ICAgICAgIHJlc3RvcmVfZXJyKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFxcblwiKTtcbitcdFx0XHRpZiAoZXh0YWNrKVxuK1x0XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0XHQgICBcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IHByaW9yIGNvbmZpZ3VyYXRpb24gcmVzdG9yZWRcIik7XG4rXHRcdH1cbitcdFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XG4rXHR9XG4rXHRvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdCAgICAgIHN0cnVjdCB0Y19yb290X3FvcHRfb2ZmbG9hZCAqcm9vdClcbit7XG4rXHRzd2l0Y2ggKHJvb3QtXHUwMDNlY29tbWFuZCkge1xuK1x0Y2FzZSBUQ19ST09UX0dSQUZUOlxuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lKVxuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IHRydWU7XG4rXHRcdHJldHVybiAwO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpXG4re1xuK1x0c3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTtcbitcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcztcbitcbitcdGlmIChiYXNlLVx1MDAzZXR5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRjYXBzID0gYmFzZS1cdTAwM2VjYXBzO1xuK1x0Y2Fwcy1cdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuIFx0XHQgIHZvaWQgKnR5cGVfZGF0YSlcbiB7XG4gXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgVENfUVVFUllfQ0FQUzpcbitcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XG4rXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcbitcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcbitcdGNhc2UgVENfU0VUVVBfUk9PVF9RRElTQzpcbitcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcm9vdChuZXRkZXZfcHJpdihuZXRkZXYpLCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuQEAgLTE2MzIsNiArMjM0MSw3IEBAIEVYUE9SVF9TWU1CT0wob3R4Ml9pbml0X3RjKTtcbiB2b2lkIG90eDJfc2h1dGRvd25fdGMoc3RydWN0IG90eDJfbmljICpuaWMpXG4ge1xuIFx0b3R4Ml9kZXN0cm95X3RjX2Zsb3dfbGlzdChuaWMpO1xuK1x0b3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KG5pYyk7XG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9zaHV0ZG93bl90Yyk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5pbmRleCA2OWMwOTExZTI4ZTkxLi5kOWFmMTgyZTU3MjFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbkBAIC0xMTgsNiArMTE4LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9jb25maWdfc2NoZWRfc2hhcGluZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4gXHQvKiBjb25maWd1cmUgUElSICovXG4gXHRtYXhyYXRlID0gKG5vZGUtXHUwMDNlcmF0ZSBcdTAwM2Ugbm9kZS1cdTAwM2VjZWlsKSA/IG5vZGUtXHUwMDNlcmF0ZSA6IG5vZGUtXHUwMDNlY2VpbDtcbiBcbitcdC8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhblxuK1x0ICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS5cbitcdCAqL1xuIFx0Y2ZnLVx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cbiBcdFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcbiBcdCgqbnVtX3JlZ3MpKys7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzoxOTozMS44MTg1MDE5NTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTAyMjg0ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIE9jdGVvblRYMiBOSUMgRHJpdmVyKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyBpdHMgc2NvcGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHNlZSB3aGljaCBmaWxlcyBhcmUgYmVpbmcgbW9kaWZpZWQuIE9rYXksIGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGEgc3Vic3RhbnRpYWwgdXBkYXRlOlxuXG5gZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jYFxuYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jYFxuYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oYFxuYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNgXG5gZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jYFxuYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNgXG5gZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY2BcbmBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNgXG5cblJpZ2h0LCB0aGUgYG9jdGVvbnR4MmAgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlci4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGZvciBtZSBpczogaXMgdGhpcyBoYXJkd2FyZS1kZXBlbmRlbnQsIG9yIGNhbiBJIHJlcHJvZHVjZSB0aGlzIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQ/IElzIHRoaXMgdGllZCB0byB0aGUgQ045SywgQ04xMEsgcGh5c2ljYWwgQVNJQywgb3IgUENJZSBoYXJkd2FyZT8gT3IgY2FuIEkgdGVzdCB0aGlzIGluIFFFTVUgb3IgZXZlbiBzeXprYWxsZXI/IEknbGwgbmVlZCB0byBkbyBzb21lIGRpZ2dpbmcsIHByb2JhYmx5IHVzaW5nIGBncmVwYCBvciBjaGVja2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBgb2N0ZW9udHgyYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1ODQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzoxOTozNS4zMjA3OTA0OTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxMTA1MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9DVEVPTlRYMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6Njpjb25maWcgT0NURU9OVFgyX01CT1hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTctXFx0dHJpc3RhdGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo5OmNvbmZpZyBPQ1RFT05UWDJfQUZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEwLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE9jdGVvblRYMiBSVlUgQWRtaW4gRnVuY3Rpb24gZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0yMj1jb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMTpjb25maWcgT0NURU9OVFgyX1BGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMi1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgTklDIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo0NTpjb25maWcgT0NURU9OVFgyX1ZGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgTklDIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzoxOTozNS4zNjk5MDc2MzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTYxMzIxNjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgT2N0ZW9uIFRYMiBFdGhlcm5ldCBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgT2N0ZW9uIFRYMiBldGhlcm5ldCBkcml2ZXIuIFRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCBpcyB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGxvb2sgYXQgdGhlIGBLY29uZmlnYCBmaWxlIGluIHRoZSBkcml2ZXIncyBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWdgLiBUaGlzIGZpbGUgKnNob3VsZCogbGF5IG91dCBhbGwgdGhlIGRlcGVuZGVuY2llcywgZmVhdHVyZXMsIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGlzIHNwZWNpZmljIGRyaXZlci4gSXQncyB0aGUgc3RhbmRhcmQgd2F5IHRvIHVuZGVyc3RhbmQgaG93IGEga2VybmVsIGRyaXZlciBpcyBjb25zdHJ1Y3RlZCwgd2hhdCBpdCByZWxpZXMgb24sIGFuZCB3aGF0IGZlYXR1cmVzIEkgY2FuIGVuYWJsZSBvciBkaXNhYmxlLiBCeSBhbmFseXppbmcgdGhlIGBLY29uZmlnYCwgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgZnVuZGFtZW50YWwgbmF0dXJlIG9mIHRoZSBkZXZpY2UgYW5kIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBoYXJkd2FyZSBvciBzb2Z0d2FyZSBmZWF0dXJlcyBhcmUgaW52b2x2ZWQuIFRoaXMgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRvIGNvbmZpZ3VyZSBvciBtb2RpZnkgdGhpcyBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzcyLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6MTk6MzcuNTMxMjMyMjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Nzc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1hcnZlbGwgUlZVIE5ldHdvcmsgZHJpdmVycyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBPQ1RFT05UWDJfTUJPWFxcbiAgIDc6XFx0XFx0dHJpc3RhdGVcXG4gICA4OlxcdFxcbiAgIDk6XFx0Y29uZmlnIE9DVEVPTlRYMl9BRlxcbiAgMTA6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIFJWVSBBZG1pbiBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuICAxMTpcXHRcXHRzZWxlY3QgT0NURU9OVFgyX01CT1hcXG4gIDEyOlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiAoNjRCSVQgXFx1MDAyNlxcdTAwMjYgQ09NUElMRV9URVNUKSB8fCBBUk02NFxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDE1OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCdzIE9jdGVvblRYMiBSZXNvdXJjZSBWaXJ0dWFsaXphdGlvblxcbiAgMTg6XFx0XFx0ICBVbml0J3MgYWRtaW4gZnVuY3Rpb24gbWFuYWdlciB3aGljaCBtYW5hZ2VzIGFsbCBSVlUgSFcgcmVzb3VyY2VzXFxuICAxOTpcXHRcXHQgIGFuZCBwcm92aWRlcyBhIG1lZGl1bSB0byBvdGhlciBQRi9WRnMgdG8gY29uZmlndXJlIEhXLiBTaG91bGQgYmVcXG4gIDIwOlxcdFxcdCAgZW5hYmxlZCBmb3Igb3RoZXIgUlZVIGRldmljZSBkcml2ZXJzIHRvIHdvcmsuXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBORENfRElTX0RZTkFNSUNfQ0FDSElOR1xcbiAgMjM6XFx0XFx0Ym9vbCBcXFwiRGlzYWJsZSBjYWNoaW5nIG9mIGR5bmFtaWMgZW50cmllcyBpbiBORENcXFwiXFxuICAyNDpcXHRcXHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9BRlxcbiAgMjU6XFx0XFx0ZGVmYXVsdCBuXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIFRoaXMgY29uZmlnIG9wdGlvbiBkaXNhYmxlcyBjYWNoaW5nIG9mIGR5bmFtaWMgZW50cmllcyBzdWNoIGFzIE5JWCBTUUVzXFxuICAyODpcXHRcXHQgICwgTlBBIHN0YWNrIHBhZ2VzIGV0YyBpbiBOREMuIEFsc28gbG9ja3MgZG93biBOSVggU1EvQ1EvUlEvUlNTIGFuZFxcbiAgMjk6XFx0XFx0ICBOUEEgQXVyYS9Qb29sIGNvbnRleHRzLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRjb25maWcgT0NURU9OVFgyX1BGXFxuICAzMjpcXHRcXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgTklDIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlclxcXCJcXG4gIDMzOlxcdFxcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuICAzNTpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAzNjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVMgaWYgTUFDU0VDXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uICg2NEJJVCBcXHUwMDI2XFx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XFxuICAzODpcXHRcXHRzZWxlY3QgRElNTElCXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgNDA6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgNDE6XFx0XFx0ZGVwZW5kcyBvbiBNQUNTRUMgfHwgIU1BQ1NFQ1xcbiAgNDI6XFx0XFx0aGVscFxcbiAgNDM6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJ3MgT2N0ZW9uVFgyIE5JQyBwaHlzaWNhbCBmdW5jdGlvbi5cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0Y29uZmlnIE9DVEVPTlRYMl9WRlxcbiAgNDY6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlclxcXCJcXG4gIDQ3OlxcdFxcdGRlcGVuZHMgb24gT0NURU9OVFgyX1BGXFxuICA0ODpcXHRcXHRoZWxwXFxuICA0OTpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1hcnZlbGwncyBPY3Rlb25UWDIgTklDIHZpcnR1YWwgZnVuY3Rpb24uXFxuICA1MDpcXHRcXG4gIDUxOlxcdGNvbmZpZyBSVlVfRVNXSVRDSFxcbiAgNTI6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgUlZVIEUtU3dpdGNoIHN1cHBvcnRcXFwiXFxuICA1MzpcXHRcXHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxcbiAgNTQ6XFx0XFx0ZGVmYXVsdCBtXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1hcnZlbGwncyBSVlUgRS1Td2l0Y2ggdGhhdFxcbiAgNTc6XFx0XFx0ICBwcm92aWRlcyBpbnRlcm5hbCBTUklPViBwYWNrZXQgc3RlZXJpbmcgYW5kIHN3aXRjaGluZy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6MTk6MzcuNTMxMzAxODZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTQ5ODI4ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIERyaXZlciBSZWdpc3RyYXRpb24gZm9yIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQ3MqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGhvdyB0aGlzIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyIHJlZ2lzdGVycyBpdHNlbGYgd2l0aCB0aGUgUENJIHN5c3RlbS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiBhbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgdGhlIENOOUsgb3IgQ04xMEsgY2hpcHMuIE15IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIHN0YW5kYXJkIFBDSSBkcml2ZXIgcmVnaXN0cmF0aW9uIHJvdXRpbmVzLiBTbywgSSdsbCBzdGFydCBieSBncmVwcGluZyB0aGUgcmVsZXZhbnQgZGlyZWN0b3J5LCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYCwgZm9yIHRoZSB0ZWxsLXRhbGUgc2lnbnM6IGBtb2R1bGVfcGNpX2RyaXZlcmAgd2hpY2ggaXMgdGhlIG1hY3JvIGFuZCBgcGNpX3JlZ2lzdGVyX2RyaXZlcmAsIHRoZSBmdW5jdGlvbiBpdHNlbGYuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50IEknbSBsb29raW5nIGZvciBhbmQgcHJvdmlkZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBhbmFseXppbmcgdGhlIHJlc3Qgb2YgdGhlIGRyaXZlcidzIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg1NCwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6MTk6NDAuNjgxMTMzMzAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDAyMzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9yZWdpc3Rlcl9kcml2ZXJ8bW9kdWxlX3BjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTM3NjE9c3RhdGljIGludCBfX2luaXQgcnZ1X2luaXRfbW9kdWxlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzY2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM3Njc6XFx0ZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2Y2d4X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc2OC1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM3NzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6Mzc3MTpcXHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZwdHBfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzcyLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc3NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNzc1OlxcdGVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNm1jc19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM3NzYtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzc4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM3Nzk6XFx0ZXJyID0gIHBjaV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNnJ2dV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM3ODAtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTM1OTM9c3RhdGljIGludCBfX2luaXQgb3R4Ml9ydnVwZl9pbml0X21vZHVsZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNTk2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MzU5NzpcXHRyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2b3R4Ml9wZl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzU5OC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jPTg3NT1zdGF0aWMgaW50IF9faW5pdCBvdHgydmZfaW5pdF9tb2R1bGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtODc4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6ODc5OlxcdHJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZvdHgydmZfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jLTg4MC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmM9ODY5PXN0YXRpYyBpbnQgX19pbml0IHJ2dV9yZXBfaW5pdF9tb2R1bGUodm9pZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMtODcwLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmM6ODcxOlxcdHJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZydnVfcmVwX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jLTg3Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjE5OjQwLjczMjU0MTE2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3OTQ5MjkzMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgRHJpdmVycyoqXG5cbk9rYXksIGxldCdzIGdvIHRocm91Z2ggdGhpcyBzeXN0ZW1hdGljYWxseS4gVGhlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBib3RoZXIgZnV6emluZyB0aGUgbW9kaWZpZWQgY29kZS4gVGhlIG5lZ2F0aXZlIGNyaXRlcmlhIHNheSB3ZSBjYW4gc2tpcCBpdCBpZiB0aGUgY2hhbmdlcyBmYWxsICpleGNsdXNpdmVseSogaW50byBhIGNhdGVnb3J5IGxpa2Ugc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBBbHJpZ2h0LCBsZXQncyBzZWUuIFRoZSBjb2RlIGluIHF1ZXN0aW9uIGlzIGFsbCByZWxhdGVkIHRvIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGludGVyZmFjZS4gU3BlY2lmaWNhbGx5LCBpdCdzIGFsbCB0dWNrZWQgYXdheSBuZWF0bHkgdW5kZXIgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2AuXG5cbk5vdywgdGhlIE9jdGVvblRYMiwgdGhhdCdzIGEgTWFydmVsbCBTbWFydE5JQyBvciBTb0MgbmV0d29yayBwcm9jZXNzb3IgLSBDTjlLLCBDTjEwSywgdGhlIFJWVSBhcmNoaXRlY3R1cmUuIEZyb20gbXkgdW5kZXJzdGFuZGluZywgdGhpcyAqZG9lcyogcmVxdWlyZSBwaHlzaWNhbCBBU0lDIG9yIFBDSWUgY2FyZHMgdG8gZnVuY3Rpb24sIG9yIGF0IGxlYXN0IGRlZGljYXRlZCBBUk02NCBPY3Rlb25UWDIgaGFyZHdhcmUuIEl0J3Mgbm90IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgcnVucyBpbiBhIHN0b2NrIFFFTVUgc2V0dXAsIHdoaWNoIGlzIHdoYXQgc3l6a2FsbGVyIHVzZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgaXNuJ3Qgc29tZSBjbGV2ZXIgdmlydHVhbCBidXMgb3Igc29mdHdhcmUgZW11bGF0aW9uLCBidXQgaXQgbG9va3MgbGlrZSB0aGUgZGVwZW5kZW5jaWVzIGNoZWNrIGZvciBgNjRCSVRgLCBgQ09NUElMRV9URVNUYCwgYEFSTTY0YCwgb3IgYFBDSWAsIHdoaWNoIGltcGxpZXMgdGhhdCB0aGlzIHJlcXVpcmVzIFBDSSBmdW5jdGlvbmFsaXR5IGFuZCBpcyBub3QgZnVsbHkgYWJzdHJhY3RlZC5cblxuQ2hlY2tpbmcgdGhlIGZpbGVzIGFnYWluOiBgcnZ1X25peC5jYCwgYG90eDJfY29tbW9uLmNgLCBgb3R4Ml9jb21tb24uaGAsIGBvdHgyX2RjYm5sLmNgLCBgb3R4Ml9ldGh0b29sLmNgLCBgb3R4Ml9wZi5jYCwgYG90eDJfdGMuY2AsIGFuZCBgcW9zLmNgLiBUaGV5IGFyZSBhbGwgKnN0cmljdGx5KiB3aXRoaW4gdGhlIGBtYXJ2ZWxsL29jdGVvbnR4Mi9gIGRpcmVjdG9yeSwgc28gdGhhdCdzIHRoZSBkcml2ZXIuIFRoZSBkcml2ZXIgaW50ZXJmYWNlcyBkaXJlY3RseSB3aXRoIHRoZSBoYXJkd2FyZSwgbm90IGFuIGVtdWxhdGVkIGludGVyZmFjZS4gSSdtIHByZXR0eSBjb25maWRlbnQgaW4gc2F5aW5nIGl0IGNvbnRyb2xzIHBoeXNpY2FsIE9jdGVvblRYMi9SVlUgTklDcyBhbmQgZGVwZW5kcyBvbiBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLiBJdCdzIG5vdCBnb2luZyB0byBydW4gaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwIG9yIHRoZSBHb29nbGUgQ2xvdWQgRW5naW5lIGVudmlyb25tZW50IHRoYXQgU3l6a2FsbGVyIHVzZXMuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQncyBkb3VibGUtY2hlY2sgYWxsIHRoZSByZXF1aXJlbWVudHM6IGBXb3J0aEZ1enppbmc6IGZhbHNlYCwgYEZvY3VzU3ltYm9sczogW11gLCBgRW5hYmxlQ29uZmlnczogW11gLCBhbmQgdGhlIHJlYXNvbmluZyBuZWVkcyB0byBiZSBjb25jaXNlLlxuXG5UaGUgcmVhc29uaW5nIGlzOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGFuZCBSVlUgZHJpdmVycyAoYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2ApLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZS9Tb0MgaGFyZHdhcmUgKE1hcnZlbGwgT2N0ZW9uVFgyL0NOOUsvQ04xMEspIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIFFFTVUvR0NFIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIlxuXG5BbHJpZ2h0LCB0aGF0IGNvdmVycyBpdC4gTGV0J3MgaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTMwLCJPdXRwdXRUb2tlbnMiOjEyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzoxOTo0Ni41Mjc0NzM3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29kZSBleGNsdXNpdmVseSB3aXRoaW4gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBhbmQgUlZVIGRyaXZlcnMgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyksIGFkZGluZyBtcXByaW8gVEMgaGFyZHdhcmUgb2ZmbG9hZCBzdXBwb3J0LiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZS9Tb0MgaGFyZHdhcmUgKE1hcnZlbGwgT2N0ZW9uVFgyIC8gUlZVKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvZGUgZXhjbHVzaXZlbHkgd2l0aGluIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgYW5kIFJWVSBkcml2ZXJzIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgbXFwcmlvIFRDIGhhcmR3YXJlIG9mZmxvYWQgc3VwcG9ydC4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUvU29DIGhhcmR3YXJlIChNYXJ2ZWxsIE9jdGVvblRYMiAvIFJWVSkgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzoxOTo0Ni41Mjc1MDI0NTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow2zzx5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 13:00:14 +0000 UTC FinishedAt: 2026-09-05 13:19:47 +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+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29kZSBleGNsdXNpdmVseSB3aXRoaW4gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBhbmQgUlZVIGRyaXZlcnMgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyksIGFkZGluZyBtcXByaW8gVEMgaGFyZHdhcmUgb2ZmbG9hZCBzdXBwb3J0LiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZS9Tb0MgaGFyZHdhcmUgKE1hcnZlbGwgT2N0ZW9uVFgyIC8gUlZVKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlMThlOTQ3NDFiMTQ2NThmNWUxNThmNTRjZDQ3ZWU3MDUzNzY4NDg0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxMzoxOTozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbmluZGV4IDE1M2ViNTdiYWQwNjcuLmM5YTQzMjZkNzI1ZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuQEAgLTMzMSw4ICYjNDM7MzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpXG4mIzQzO1x0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHtcbiYjNDM7XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7cGNpZnVuYyAleCBtYXAgcGNpZnVuYyAleCBub3QgZXF1YWwsIGx2bD0ldSBzY2hxPSV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG5pbmRleCAxNzU5OTIxODhjMThhLi5hNTE5ZTBhOTdhMmI3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG5AQCAtNjE1LDYgJiM0Mzs2MTUsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XG4gXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7b3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsXG4mIzQzO1x0XHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXG4mIzQzO1x0XHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuJiM0MztcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuJiM0MztcdGludCBpLCBlcnI7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuJiM0MztcdGlmICghcmVxKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuJiM0MztcdHJlcS1cdTAwM2VudW1fcmVncyA9IGNudDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ1tpXSA9IHJlZ19hZGRyW2ldO1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4mIzQzO1x0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbiYjNDM7XHRpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzbXEgPSBwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcbiYjNDM7XG4mIzQzO1x0XHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuJiM0MztcdFx0Y250JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuJiM0MztcdFx0Y250JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY250IFx1MDAzYyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBmYWlsO1xuJiM0MztcdFx0Y250ID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjbnQpIHtcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuJiM0MztcdFx0XHRcdFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGZhaWw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7ZmFpbDpcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuJiM0MztcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuJiM0MztcdGludCBlcnIsIHNtcSwgbiA9IDA7XG4mIzQzO1x0dTY0IHJlZ19hZGRyWzJdO1xuJiM0MztcdHU2NCByZWdfdmFsWzJdO1xuJiM0MztcdHU2NCByYXRlO1xuJiM0MztcbiYjNDM7XHRpZiAoIW1heHJhdGUgXHUwMDI2XHUwMDI2ICFtaW5yYXRlKSB7XG4mIzQzO1x0XHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4mIzQzO1x0XHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFswXSA9IDA7XG4mIzQzO1x0XHRyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFsxXSA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuJiM0MztcdGlmICghcmVxKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuJiM0MztcbiYjNDM7XHQvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvXG4mIzQzO1x0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxuJiM0MztcdCAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnNcbiYjNDM7XHQgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGFcbiYjNDM7XHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcbiYjNDM7XHQgKiBoYXJkd2FyZSBjYXAuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxuJiM0MztcdCAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uXG4mIzQzO1x0ICogZXZlcnkgdXBkYXRlIHNvIG9taXR0ZWQgcmF0ZXMgYXJlIGFwcGxpZWQgZXhwbGljaXRseSByYXRoZXIgdGhhblxuJiM0MztcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuJiM0MztcdGlmIChtYXhyYXRlKSB7XG4mIzQzO1x0XHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0biYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdC8qIENJUiYjNDM7UElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xuJiM0MztcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbiYjNDM7XHRpZiAobWlucmF0ZSkge1xuJiM0MztcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4mIzQzO1x0fVxuJiM0MztcdG4mIzQzOyYjNDM7O1xuJiM0MztcdHJlcS1cdTAwM2VudW1fcmVncyA9IG47XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYylcbiB7XG4gXHR1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdO1xuQEAgLTY1MSw3ICYjNDM7Nzg3LDExIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXG4gXHRcdFx0XHRcdFx0KHU2NClody1cdTAwM2VzbXFfbGlua190eXBlKTtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzJiM0MzsmIzQzOztcbiBcdFx0LyogTURRIGNvbmZpZyAqL1xuLVx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4mIzQzO1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4mIzQzO1xuIFx0XHRyZXEtXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xuIFx0XHRyZXEtXHUwMDNlcmVndmFsWzFdID0gcGFyZW50IFx1MDAzY1x1MDAzYyAxNjtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzJiM0MzsmIzQzOztcbkBAIC03NzksNiAmIzQzOzkxOSw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4mIzQzO1x0XHRyZXEtXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcbiBcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFx1MDAyNnBmdmYtXHUwMDNlbWJveCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbkBAIC04NDQsNiAmIzQzOzk4Nyw3IEBAIHZvaWQgb3R4Ml90eHNjaHFfc3RvcChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXG4gXHQvKiBDbGVhciB0aGUgdHhzY2hxIGxpc3QgKi9cbiBcdGZvciAobHZsID0gMDsgbHZsIFx1MDAzYyBOSVhfVFhTQ0hfTFZMX0NOVDsgbHZsJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W2x2bF0gPSAwO1xuIFx0XHRmb3IgKHNjaHEgPSAwOyBzY2hxIFx1MDAzYyBNQVhfVFhTQ0hRX1BFUl9GVU5DOyBzY2hxJiM0MzsmIzQzOylcbiBcdFx0XHRwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W2x2bF1bc2NocV0gPSAwO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbmluZGV4IGVlY2VlNjEyYjdiMmMuLmVkZTdmMTExM2I3MTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbkBAIC0xNyw2ICYjNDM7MTcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL3NpbGljb25zLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zb2MvbWFydmVsbC9vY3Rlb250eDIvYXNtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbWFjc2VjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9wa3Rfc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZTY0LmhcdTAwM2VcbkBAIC00ODMsNiAmIzQzOzQ4NCwyMyBAQCBzdHJ1Y3QgcGZfaXJxX2RhdGEge1xuIFx0aW50IG1kZXZzO1xuIH07XG4gXG4mIzQzO3N0cnVjdCBtcV9vZmZsb2FkX3NuYXAge1xuJiM0MztcdHU2NCBtaW5fcmF0ZVtUQ19RT1BUX01BWF9RVUVVRV07XG4mIzQzO1x0dTY0IG1heF9yYXRlW1RDX1FPUFRfTUFYX1FVRVVFXTtcbiYjNDM7XHRfX3U4IG51bV90YztcbiYjNDM7XHRfX3UxNiBjb3VudFtUQ19RT1BUX01BWF9RVUVVRV07XG4mIzQzO1x0X191MTYgb2Zmc2V0W1RDX1FPUFRfTUFYX1FVRVVFXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBvdHgyX21xcHJpbyB7XG4mIzQzO1x0dTMyXHRmbGFncztcbiYjNDM7XHR1NjRcdCptaW5fcmF0ZTtcbiYjNDM7XHR1NjRcdCptYXhfcmF0ZTtcbiYjNDM7XHRib29sXHRyYXRlX2xpbWl0O1xuJiM0MztcdGJvb2xcdHJlcGxhY2Vfc2V0dXBfZG9uZTtcbiYjNDM7XHRib29sXHRyZXBsYWNlX2dyYWZ0X2RvbmU7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBvdHgyX25pYyB7XG4gXHR2b2lkIF9faW9tZW1cdFx0KnJlZ19iYXNlO1xuIFx0c3RydWN0IG5ldF9kZXZpY2VcdCpuZXRkZXY7XG5AQCAtNTE1LDYgJiM0Mzs1MzMsMTAgQEAgc3RydWN0IG90eDJfbmljIHtcbiBcdHU2NFx0XHRcdGZsYWdzO1xuIFx0dTY0XHRcdFx0KmNxX29wX2FkZHI7XG4gXG4mIzQzO1x0c3RydWN0IG90eDJfbXFwcmlvXHRtcXByaW87XG4mIzQzO1x0c3RydWN0IG1xX29mZmxvYWRfc25hcFx0KmN1cl9tcV9zbmFwO1xuJiM0MztcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXBcdCpvbGRfbXFfc25hcDtcbiYjNDM7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dcdFx0KnhkcF9wcm9nO1xuIFx0c3RydWN0IG90eDJfcXNldFx0cXNldDtcbiBcdHN0cnVjdCBvdHgyX2h3XHRcdGh3O1xuQEAgLTEyNDYsNiAmIzQzOzEyNjgsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcbiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLFxuJiM0MztcdFx0XHRcdCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpO1xuJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4mIzQzO2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4mIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIHZvaWQgb3R4Ml9xdWV1ZV92Zl93b3JrKHN0cnVjdCBtYm94ICptdywgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hfd3EsXG4gXHRcdFx0aW50IGZpcnN0LCBpbnQgbWRldnMsIHU2NCBpbnRyKTtcbiBpbnQgb3R4Ml9kZWxfbWNhbV9mbG93X2VudHJ5KHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MTYgZW50cnksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcbmluZGV4IGYxMTBkZmE0MjM2MDUuLjRhNzBhYmMyMzBiZWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5AQCAtNDEzLDYgJiM0Mzs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxuIFx0dTggb2xkX3BmY19lbjtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgXHUwMDI2XHUwMDI2IHBmYy1cdTAwM2VwZmNfZW4pIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIoZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtQRkM6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG9sZF9wZmNfZW4gPSBwZnZmLVx1MDAzZXBmY19lbjtcbiBcdHBmdmYtXHUwMDNlcGZjX2VuID0gcGZjLVx1MDAzZXBmY19lbjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbmluZGV4IDliZWUxYjkxZWVhYTYuLmVjMjYwMWM2YzI1NWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuQEAgLTI4Nyw2ICYjNDM7Mjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIChjaGFubmVsLVx1MDAzZXR4X2NvdW50ICE9IHBmdmYtXHUwMDNlaHcudHhfcXVldWVzIHx8XG4mIzQzO1x0ICAgICBjaGFubmVsLVx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXHUwMDNlaHcucnhfcXVldWVzKSkge1xuJiM0MztcdFx0bmV0ZGV2X2luZm8oZGV2LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7Tm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGlmX3VwKVxuIFx0XHRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RvcChkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5pbmRleCBjOTk1ZjI5MDA4NTkwLi43OWE4MmU0NDU0NTQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuQEAgLTE5ODAsNiAmIzQzOzE5ODAsMTIgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfZnJlZV9tZW07XG4gXG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRuZXRkZXZfZXJyKHBmLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXJzIGR1cmluZyBvcGVuOiAlZDsgY29udGludWluZyB3aXRob3V0IGJhbmR3aWR0aCBsaW1pdHNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGVycik7XG4mIzQzO1xuIFx0LyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovXG4gXHRmb3IgKHFpZHggPSAwOyBxaWR4IFx1MDAzYyBwZi1cdTAwM2Vody5jaW50X2NudDsgcWlkeCYjNDM7JiM0MzspIHtcbiBcdFx0Y3FfcG9sbCA9IFx1MDAyNnFzZXQtXHUwMDNlbmFwaVtxaWR4XTtcbkBAIC0yODQ2LDYgJiM0MzsyODUyLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXHUwMDNlbmV0ZGV2KTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XG4gXG4mIzQzO1x0aWYgKHByb2cgXHUwMDI2XHUwMDI2IHBmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7WERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZW10dSBcdTAwM2UgTUFYX1hEUF9NVFUpIHtcbiBcdFx0bmV0ZGV2X3dhcm4oZGV2LCBcJiMzNDtKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbmluZGV4IDAzOWZkNDdlYmY1MjIuLmFiZDY2YjM2NjAwOWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5AQCAtMTYsNiAmIzQzOzE2LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNfYWN0L3RjX21pcnJlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y192bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvc2NoX2dlbmVyaWMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2NuMTBrLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtvdHgyX2NvbW1vbi5oXCYjMzQ7XG5AQCAtMzEsNiAmIzQzOzMzLDEwIEBAXG4gXG4gI2RlZmluZSBNQ0FTVF9JTlZBTElEX0dSUFx0XHQoLTFVKVxuICNkZWZpbmUgUkFURV9NQU5USVNTQV9CSVRTXHRcdDhcbiYjNDM7LyogTWluIHBlci1xdWV1ZSBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDIgTWJwcykuICovXG4mIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFNcdDI1MDAwMFVMTFxuJiM0MzsvKiBNYXggZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgxMzA4MTYgTWJwcykuICovXG4mIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFNcdCgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpXG4gXG4gc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxuIFx0XHRcdFx0ICAgICAgdTMyICpidXJzdF9leHAsIHUzMiAqYnVyc3RfbWFudGlzc2EpXG5AQCAtNjEsNiAmIzQzOzY3LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxuIFx0XHRcdCpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMIFx1MDAzY1x1MDAzYyAoKmJ1cnN0X2V4cCAtIDcpKTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxuJiM0MztcdFx0ICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LlxuJiM0MztcdFx0ICovXG4gXHRcdCpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7XG4gXHRcdCpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTtcbiBcdH1cbkBAIC0xNjAwLDE0ICYjNDM7MTYwOSw3MTQgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgbmljLCBuaWMsIGluZ3Jlc3MpO1xuIH1cbiBcbiYjNDM7LyogRnJlZSB0aGUgcGVyLXF1ZXVlIG1pbi9tYXggcmF0ZSBjYWNoZXMuICovXG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpO1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKTtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IE5VTEw7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBOVUxMO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgcmVwbGFjaW5nKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcbiYjNDM7XHRpZiAocmVwbGFjaW5nIFx1MDAyNlx1MDAyNiBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSBcdTAwMjZcdTAwMjYgcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpIHtcbiYjNDM7XHRcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSwgMCxcbiYjNDM7XHRcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSkpO1xuJiM0MztcdFx0bWVtc2V0KHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlLCAwLFxuJiM0MztcdFx0ICAgICAgIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZnJlZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqc25hcClcbiYjNDM7e1xuJiM0MztcdGlmICghKnNuYXApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsICpzbmFwKTtcbiYjNDM7XHQqc25hcCA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc25hcF9jb3B5KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKmRzdCxcbiYjNDM7XHRcdFx0XHQgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuJiM0MztcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXA7XG4mIzQzO1x0aW50IHRjO1xuJiM0MztcbiYjNDM7XHRpZiAoISpkc3QpIHtcbiYjNDM7XHRcdHNuYXAgPSBkZXZtX2t6YWxsb2MocGZ2Zi1cdTAwM2VkZXYsIHNpemVvZigqc25hcCksIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKCFzbmFwKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdCpkc3QgPSBzbmFwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzbmFwID0gKmRzdDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNuYXAtXHUwMDNlbnVtX3RjID0gcW9wdC1cdTAwM2VudW1fdGM7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBUQ19RT1BUX01BWF9RVUVVRTsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzbmFwLVx1MDAzZWNvdW50W3RjXSA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuJiM0MztcdFx0c25hcC1cdTAwM2VvZmZzZXRbdGNdID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuJiM0MztcdFx0c25hcC1cdTAwM2VtaW5fcmF0ZVt0Y10gPSAwO1xuJiM0MztcdFx0c25hcC1cdTAwM2VtYXhfcmF0ZVt0Y10gPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0c25hcC1cdTAwM2VtaW5fcmF0ZVt0Y10gPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdHNuYXAtXHUwMDNlbWF4X3JhdGVbdGNdID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3N0YWdlX2N1cihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gb3R4Ml9tcXByaW9fc25hcF9jb3B5KHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlY3VyX21xX3NuYXAsIG1xcHJpbyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdG90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCBcdTAwMjZwZnZmLVx1MDAzZW9sZF9tcV9zbmFwKTtcbiYjNDM7XHRwZnZmLVx1MDAzZW9sZF9tcV9zbmFwID0gcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcDtcbiYjNDM7XHRwZnZmLVx1MDAzZWN1cl9tcV9zbmFwID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgPSBmYWxzZTtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfTURRXSAhPSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXAgPSBwZnZmLVx1MDAzZW9sZF9tcV9zbmFwO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4mIzQzO1x0aW50IHRjLCB0eHEsIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzbmFwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIGZhbHNlKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlLCAwLCBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSkpO1xuJiM0MztcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpKTtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2Mgc25hcC1cdTAwM2VudW1fdGM7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IG1pbl9yYXRlID0gc25hcC1cdTAwM2VtaW5fcmF0ZVt0Y107XG4mIzQzO1x0XHR1NjQgbWF4X3JhdGUgPSBzbmFwLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobWluX3JhdGUpXG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIHw9IFRDX01RUFJJT19GX01JTl9SQVRFO1xuJiM0MztcdFx0aWYgKG1heF9yYXRlKVxuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NQVhfUkFURTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHNuYXAtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBzbmFwLVx1MDAzZW9mZnNldFt0Y10gJiM0Mzsgc25hcC1cdTAwM2Vjb3VudFt0Y107IHR4cSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHNuYXAtXHUwMDNlbnVtX3RjKTtcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHNuYXAtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspXG4mIzQzO1x0XHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgdGMsIHNuYXAtXHUwMDNlY291bnRbdGNdLFxuJiM0MztcdFx0XHRcdCAgICBzbmFwLVx1MDAzZW9mZnNldFt0Y10pO1xuJiM0MztcbiYjNDM7XHRpZiAob3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChwZnZmKSkge1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KCkgY2xlYXJzIHJhdGVfbGltaXQgd2hlbiBuZG9fb3BlbigpIGZhaWxzLlxuJiM0MztcdCAqIElmIG9wZW4gZmFpbGVkLCBUWCBzY2hlZHVsZXJzIHdlcmUgZnJlZWQ7IGRlZmVyIHNoYXBlciByZXN0b3JlIHRvIHRoZVxuJiM0MztcdCAqIG5leHQgc3VjY2Vzc2Z1bCBuZG9fb3BlbigpIHZpYSBvdHgyX21xcHJpb191cCgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXSkge1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGZ2Zik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlY3VyX21xX3NuYXApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdG90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCBcdTAwMjZwZnZmLVx1MDAzZWN1cl9tcV9zbmFwKTtcbiYjNDM7XHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3N3KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IGZhbHNlO1xuJiM0MztcdG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7XG4mIzQzO1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTtcbiYjNDM7XHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycyxcbiYjNDM7ICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb25cbiYjNDM7ICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb25cbiYjNDM7ICogcm91dGluZSBuZXRkZXYgc3RvcC9vcGVuIGN5Y2xlcyB3aGVyZSB0aGUgb2ZmbG9hZCBzdGF5cyBhY3RpdmUuXG4mIzQzOyAqL1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKHBmdmYtXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChwZnZmKSlcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbiYjNDM7XG4mIzQzO1x0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XG4mIzQzO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIocGZ2Zi1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIGNsZWFyIGhhcmR3YXJlIHNoYXBlcnM6ICVkOyBzb21lIFRYIHF1ZXVlcyBtYXkgcmV0YWluIGJhbmR3aWR0aCBsaW1pdHNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGVycik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdGludCB0eHEsIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGZvciAodHhxID0gMDsgdHhxIFx1MDAzYyBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbiYjNDM7XHRcdFx0bWF4X3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdO1xuJiM0MztcbiYjNDM7XHRcdGlmICghbWluX3JhdGUgXHUwMDI2XHUwMDI2ICFtYXhfcmF0ZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHQgICBtYXhfcmF0ZSk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHR4cSwgZXJyKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW9cbiYjNDM7ICogYmFuZHdpZHRoIG9mZmxvYWQuICBCb3RoIG1xcHJpbyBhZGQgYW5kIGRlbGV0ZSAod2hlbiBvZmZsb2FkIHdhcyBhY3RpdmUpXG4mIzQzOyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLlxuJiM0MzsgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzXG4mIzQzOyAqIGNhcnJpZXIsIHN0b3BzIGFsbCBUWCBxdWV1ZXMsIHRlYXJzIGRvd24gSVJRcy9OQVBJIGFuZCBkcm9wcyBpbi1mbGlnaHRcbiYjNDM7ICogdHJhZmZpYy4gIElmIG9wZW4gZmFpbHMsIHRoZSBpbnRlcmZhY2UgaXMgbGVmdCBhZG1pbmlzdHJhdGl2ZWx5IGRvd25cbiYjNDM7ICogd2l0aG91dCBjYWxsaW5nIG5kb19zdG9wKCkgYWdhaW4gb24gcmVzb3VyY2VzIGFscmVhZHkgdG9ybiBkb3duIGJ5XG4mIzQzOyAqIHRoZSBvcGVuIGVycm9yIHBhdGguXG4mIzQzOyAqXG4mIzQzOyAqIERvIG5vdCBjYWxsIGRldl9kZWFjdGl2YXRlKCkvZGV2X2FjdGl2YXRlKCkgaGVyZTogdGhpcyBydW5zIGZyb21cbiYjNDM7ICogbmRvX3NldHVwX3RjKCkgd2hpbGUgcWRpc2NfZ3JhZnQoKSBtYXkgYWxyZWFkeSBob2xkIHRoZSBkZXZpY2VcbiYjNDM7ICogZGVhY3RpdmF0ZWQgYW5kIG11c3QgcGVyZm9ybSB0aGUgZmluYWwgZGV2X2FjdGl2YXRlKCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHQvKiBUT0RPOiBFeHBsb3JlIGxpdmUgVFggc2NoZWR1bGVyIHJlcHJvZ3JhbW1pbmcgdG8gYXZvaWQgYSBmdWxsXG4mIzQzO1x0ICogbmRvX3N0b3AoKS9uZG9fb3BlbigpIGJvdW5jZSBvbiBldmVyeSBtcXByaW8gY2hhbmdlLlxuJiM0MztcdCAqL1xuJiM0MztcdG5ldGRldl9pbmZvKG5ldGRldixcbiYjNDM7XHRcdCAgICBcJiMzNDttcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IG9wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHQvKiBTZXQgYmVmb3JlIG5kb19vcGVuKCkgc28gb3R4Ml90eHNjaF9hbGxvYygpIHdpZGVucyBTTVEgYWxsb2NhdGlvbi5cbiYjNDM7XHQgKiBPbiB0ZWFyZG93biwgZHJvcCBtcXByaW8gc29mdHdhcmUgc3RhdGUgc28gbmRvX29wZW4oKSBkb2VzIG5vdFxuJiM0MztcdCAqIHJlLWFwcGx5IGJhbmR3aWR0aCBsaW1pdHMgdmlhIG90eDJfbXFwcmlvX3VwKCkgYWZ0ZXIgdGhlIGtlcm5lbFxuJiM0MztcdCAqIHJlbW92ZWQgdGhlIHFkaXNjLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyYXRlX2xpbWl0KVxuJiM0MztcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XG4mIzQzO1xuJiM0MztcdGVyciA9IG9wcy1cdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGVycik7XG4mIzQzO1x0XHQvKiBuZG9fb3BlbigpIGFscmVhZHkgZnJlZWQgdGhlIFRYIHNjaGVkdWxlcnMgb24gZmFpbHVyZSB3aGlsZVxuJiM0MztcdFx0ICogbmV0aWZfcnVubmluZygpIG1heSBzdGlsbCBiZSB0cnVlOyBkcm9wIG1xcHJpbyBzb2Z0d2FyZSBzdGF0ZVxuJiM0MztcdFx0ICogb25seSBpbnN0ZWFkIG9mIHNlbmRpbmcgc2hhcGVyIGNsZWFycyB0byBmcmVlZCBxdWV1ZXMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuJiM0MztcdFx0LyogbmRvX29wZW4oKSByb2xscyBiYWNrIG9uIGZhaWx1cmU7IG1hcmsgdGhlIGludGVyZmFjZSBkb3duIHNvXG4mIzQzO1x0XHQgKiBuZXRpZl9jbG9zZSgpIGRvZXMgbm90IGludm9rZSBuZG9fc3RvcCgpIG9uIGZyZWVkIE5BUEkvcXVldWVcbiYjNDM7XHRcdCAqIHN0YXRlLiBDYWxsZXIgaG9sZHMgUlROTDsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjtcbiYjNDM7XHRcdC8qIHZpc2libGUgdG8gb3R4Ml9zdG9wKCkgb24gb3RoZXIgY3B1cyAqL1xuJiM0MztcdFx0c21wX3dtYigpO1xuJiM0MztcdFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0dTY0IHJhdGUsIHUzMiBxY291bnQsIGludCB0YyxcbiYjNDM7XHRcdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXJhdGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHFjb3VudCBcdTAwM2M9IDEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogVE9ETzogbXFwcmlvIG1pbl9yYXRlL21heF9yYXRlIGFyZSBwZXIgdHJhZmZpYyBjbGFzcywgYnV0IGJhbmR3aWR0aFxuJiM0MztcdCAqIG9mZmxvYWQgc2hhcGVzIG9uIHBlci1xdWV1ZSBNRFEgbm9kZXMgcGFyZW50ZWQgdW5kZXIgYSBzaW5nbGUgVEw0LlxuJiM0MztcdCAqIFdpdGhvdXQgcGVyLVRDIFRMNCBzaGFwZXJzIHRoZSBkcml2ZXIgY2Fubm90IGhvbm9yIFRDLWxldmVsIGxpbWl0c1xuJiM0MztcdCAqIGZvciBhIHRyYWZmaWMgY2xhc3MgdGhhdCBzcGFucyBtdWx0aXBsZSBxdWV1ZXMgd2l0aG91dCBlaXRoZXJcbiYjNDM7XHQgKiBkaXZpZGluZyB0aGUgcmF0ZSBhY3Jvc3MgcXVldWVzICh1QVBJIG1pc21hdGNoKSBvciBleGNlZWRpbmcgdGhlIFRDXG4mIzQzO1x0ICogY2FwIHdoZW4gZXZlcnkgbWVtYmVyIHF1ZXVlIGlzIGFjdGl2ZS4gUmVqZWN0IHVudGlsIHBlci1UQyBUTDRcbiYjNDM7XHQgKiBzaGFwaW5nIGNhbiBiZSBpbXBsZW1lbnRlZCB3aXRob3V0IGFsbG9jYXRpbmcgYWRkaXRpb25hbCBUTDQgbm9kZXNcbiYjNDM7XHQgKiBiZXlvbmQgdGhlIGV4aXN0aW5nIGhpZXJhcmNoeS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdCAgIFwmIzM0O21xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xcblwmIzM0OyxcbiYjNDM7XHRcdCAgIG5hbWUsIHRjLCBxY291bnQpO1xuJiM0MztcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgbmFtZSwgdGMsIHFjb3VudCk7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcdGludCB0YywgdHhxO1xuJiM0MztcbiYjNDM7XHRpZiAocW9wdC1cdTAwM2VudW1fdGMgXHUwMDNlIG51bV90eHEpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG51bV90eHEgXHUwMDNlIE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmICh0eHEgXHUwMDNlPSBudW1fdHhxKSB7XG4mIzQzO1x0XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICB0eHEsIG51bV90eHEpO1xuJiM0MztcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgdHhxLCBudW1fdHhxKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpXG4mIzQzO3tcbiYjNDM7XHR1NjQgbWJwcztcbiYjNDM7XG4mIzQzO1x0aWYgKCFyYXRlX2J5dGVzX3BzKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzYyBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QUylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2UgZGl2X3U2NChVNjRfTUFYLCA4KSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0bWJwcyA9IG90eDJfY29udmVydF9yYXRlKHJhdGVfYnl0ZXNfcHMpO1xuJiM0MztcdHJldHVybiBpbG9nMihtYnBzIC8gMikgXHUwMDNjPSBNQVhfUkFURV9FWFBPTkVOVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuJiM0MztcdGJvb2wgaGFkX21xcHJpbyA9IHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0cW9wdC1cdTAwM2VodyA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIHRjIHFkaXNjIHJlcGxhY2UgcnVucyBzZXR1cCBvbiB0aGUgbmV3IG1xcHJpbyBiZWZvcmUgZGVzdHJveWluZyB0aGVcbiYjNDM7XHQgKiBvbGQgb25lLiByZXBsYWNlX3NldHVwX2RvbmUgYW5kIFRDX1JPT1RfR1JBRlQgZGlzdGluZ3Vpc2ggc3RhbGVcbiYjNDM7XHQgKiBvbGQtaW5zdGFuY2UgdGVhcmRvd24gZnJvbSBncmFmdCBmYWlsdXJlIGFmdGVyIHNldHVwLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlY3VyX21xX3NuYXApIHtcbiYjNDM7XHRcdGVyciA9IDA7XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lKVxuJiM0MztcdFx0XHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQocGZ2Zik7XG4mIzQzO1x0XHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFNraXAgdGhlIG5ldGRldiByZXN0YXJ0IHdoZW4gbXFwcmlvIG9mZmxvYWQgd2FzIG5vdCBhY3RpdmUuICovXG4mIzQzO1x0aWYgKCFoYWRfbXFwcmlvKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChpZl91cCkge1xuJiM0MztcdFx0aW50IGRvd25fZXJyLCBlcnI7XG4mIzQzO1xuJiM0MztcdFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0cmV0dXJuIGRvd25fZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogbmRvX3N0b3AoKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXIgVEwgbm9kZXM7IGRyb3Agc29mdHdhcmVcbiYjNDM7XHQgKiBzdGF0ZSBvbmx5LlxuJiM0MztcdCAqL1xuJiM0MztcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0c3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby1cdTAwM2VleHRhY2s7XG4mIzQzO1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRib29sIHJlcGxhY2luZyA9IHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XG4mIzQzO1x0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbiYjNDM7XHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXFvcHQtXHUwMDNlaHcpXG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpZl91cCkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O21xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O21xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChtcXByaW8tXHUwMDNlc2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O1Vuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4XFxuXCYjMzQ7LCBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLCBcJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbXFwcmlvLVx1MDAzZXNoYXBlcik7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYml0KFFPU19DSVJfUElSX1NVUFBPUlQsIFx1MDAyNnBmdmYtXHUwMDNlaHcuY2FwX2ZsYWcpKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVImIzQzO1BJUiBzdXBwb3J0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVImIzQzO1BJUiBzdXBwb3J0XCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChpc19vdHgyX3NkcF9yZXAocGZ2Zi1cdTAwM2VwZGV2KSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlcGZjX2VuKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2V4ZHBfcHJvZykge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuJiM0MztcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuJiM0MztcdFx0XHRtaW5fcmF0ZSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbiYjNDM7XHRcdFx0bWF4X3JhdGUgPSBtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgbWF4X3JhdGUgXHUwMDI2XHUwMDI2IG1pbl9yYXRlIFx1MDAzZSBtYXhfcmF0ZSkge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFwmIzM0O21pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpIHtcbiYjNDM7XHRcdFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWluX3JhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgcWNvdW50LCB0YywgXCYjMzQ7bWluXCYjMzQ7KTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKSB7XG4mIzQzO1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1heF9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsIFwmIzM0O21heFwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtaW5fcmF0ZSkpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBtaW5fcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcJiMzNDttcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG1pbl9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1heF9yYXRlKSkge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIG1heF9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFwmIzM0O21xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgbWF4X3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKG5ldGRldiwgZXh0YWNrLCBxb3B0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHBmdmYsIG1xcHJpbyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtXHUwMDNlbmV0ZGV2LCB0cnVlKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmLCByZXBsYWNpbmcpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIG90eDJfbXFwcmlvX3VwKCkgbWF5IGhhdmUgcmVzdG9yZWQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZHVyaW5nXG4mIzQzO1x0ICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXdcbiYjNDM7XHQgKiBtYXBwaW5nIHNvIHF1ZXVlcyBkcm9wcGVkIGZyb20gdGhlIFRDIGxheW91dCBkbyBub3Qga2VlcCBzdGFsZVxuJiM0MztcdCAqIGxpbWl0cyBpbiBoYXJkd2FyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAob3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChwZnZmKSkge1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgPSBtcXByaW8tXHUwMDNlZmxhZ3M7XG4mIzQzO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuJiM0MztcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuJiM0MztcbiYjNDM7XHRcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUVxuJiM0MztcdFx0ICogc2hhcGVyIHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZDsgc2VlXG4mIzQzO1x0XHQgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuIE11bHRpLXF1ZXVlIFRDcyB3aXRoIHJhdGVzXG4mIzQzO1x0XHQgKiBhcmUgcmVqZWN0ZWQgYWJvdmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuJiM0MztcdFx0XHRtaW5fcmF0ZSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbiYjNDM7XHRcdFx0bWF4X3JhdGUgPSBtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdO1xuJiM0MztcbiYjNDM7XHRcdGZvciAodHhxID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuJiM0MztcdFx0ICAgICB0eHEgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSAmIzQzOyBxY291bnQ7IHR4cSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHRjLCB0eHEsIG1pbl9yYXRlLCBtYXhfcmF0ZSk7XG4mIzQzO1xuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7XG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBwZnZmLVx1MDAzZWN1cl9tcV9zbmFwLVx1MDAzZW51bV90Yyk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcC1cdTAwM2VudW1fdGM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHBmdmYtXHUwMDNlY3VyX21xX3NuYXAtXHUwMDNlY291bnRbaV0sXG4mIzQzO1x0XHRcdFx0ICAgIHFvcHQtXHUwMDNlb2Zmc2V0W2ldKTtcbiYjNDM7XG4mIzQzO1x0cW9wdC1cdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcGxhY2luZykge1xuJiM0MztcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gdHJ1ZTtcbiYjNDM7XHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IGZhbHNlO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7Y2xlYW51cDpcbiYjNDM7XHRxb3B0LVx1MDAzZWh3ID0gMDtcbiYjNDM7XHRpZiAocmVwbGFjaW5nKSB7XG4mIzQzO1x0XHRpbnQgcmVzdG9yZV9lcnIgPSBvdHgyX21xcHJpb19yZXN0b3JlX29sZChwZnZmKTtcbiYjNDM7XG4mIzQzO1x0XHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuJiM0MztcdFx0aWYgKHJlc3RvcmVfZXJyKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogcmVwbGFjZSBmYWlsZWQgYW5kIHByaW9yIGNvbmZpZ3VyYXRpb24gcm9sbGJhY2sgZmFpbGVkOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICByZXN0b3JlX2Vycik7XG4mIzQzO1x0XHRcdGlmIChleHRhY2spXG4mIzQzO1x0XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBcJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkIGFuZCBwcmlvciBjb25maWd1cmF0aW9uIHJvbGxiYWNrIGZhaWxlZDogJWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICByZXN0b3JlX2Vycik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0aWYgKGV4dGFjaylcbiYjNDM7XHRcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkXCYjMzQ7KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybiBlcnIgPyBlcnIgOiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XHRvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19yb290KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IHRjX3Jvb3RfcW9wdF9vZmZsb2FkICpyb290KVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChyb290LVx1MDAzZWNvbW1hbmQpIHtcbiYjNDM7XHRjYXNlIFRDX1JPT1RfR1JBRlQ6XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lKVxuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSB0cnVlO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UgPSB0eXBlX2RhdGE7XG4mIzQzO1x0c3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzO1xuJiM0MztcbiYjNDM7XHRpZiAoYmFzZS1cdTAwM2V0eXBlICE9IFRDX1NFVFVQX1FESVNDX01RUFJJTylcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0Y2FwcyA9IGJhc2UtXHUwMDNlY2FwcztcbiYjNDM7XHRjYXBzLVx1MDAzZXZhbGlkYXRlX3F1ZXVlX2NvdW50cyA9IHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuIFx0XHQgIHZvaWQgKnR5cGVfZGF0YSlcbiB7XG4gXHRzd2l0Y2ggKHR5cGUpIHtcbiYjNDM7XHRjYXNlIFRDX1FVRVJZX0NBUFM6XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX1FESVNDX0hUQjpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfaHRiKG5ldGRldiwgdHlwZV9kYXRhKTtcbiYjNDM7XHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcbiYjNDM7XHRcdHJldHVybiBvdHgyX3NldHVwX3RjX21xcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9ST09UX1FESVNDOlxuJiM0MztcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcm9vdChuZXRkZXZfcHJpdihuZXRkZXYpLCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuQEAgLTE2MzIsNiAmIzQzOzIzNDEsNyBAQCBFWFBPUlRfU1lNQk9MKG90eDJfaW5pdF90Yyk7XG4gdm9pZCBvdHgyX3NodXRkb3duX3RjKHN0cnVjdCBvdHgyX25pYyAqbmljKVxuIHtcbiBcdG90eDJfZGVzdHJveV90Y19mbG93X2xpc3QobmljKTtcbiYjNDM7XHRvdHgyX21xcHJpb19zbmFwX2Rlc3Ryb3kobmljKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChvdHgyX3NodXRkb3duX3RjKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbmluZGV4IDY5YzA5MTFlMjhlOTEuLmQ5YWYxODJlNTcyMWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuQEAgLTExOCw2ICYjNDM7MTE4LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9jb25maWdfc2NoZWRfc2hhcGluZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4gXHQvKiBjb25maWd1cmUgUElSICovXG4gXHRtYXhyYXRlID0gKG5vZGUtXHUwMDNlcmF0ZSBcdTAwM2Ugbm9kZS1cdTAwM2VjZWlsKSA/IG5vZGUtXHUwMDNlcmF0ZSA6IG5vZGUtXHUwMDNlY2VpbDtcbiBcbiYjNDM7XHQvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW5cbiYjNDM7XHQgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLlxuJiM0MztcdCAqL1xuIFx0Y2ZnLVx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cbiBcdFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcbiBcdCgqbnVtX3JlZ3MpJiM0MzsmIzQzOztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb2RlIGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGFuZCBSVlUgZHJpdmVycyAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIG1xcHJpbyBUQyBoYXJkd2FyZSBvZmZsb2FkIHN1cHBvcnQuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llL1NvQyBoYXJkd2FyZSAoTWFydmVsbCBPY3Rlb25UWDIgLyBSVlUpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGUxOGU5NDc0MWIxNDY1OGY1ZTE1OGY1NGNkNDdlZTcwNTM3Njg0ODQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDEzOjE5OjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jCmluZGV4IDE1M2ViNTdiYWQwNjcuLmM5YTQzMjZkNzI1ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMKQEAgLTMzMSw4ICYjNDM7MzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLAogCQkJcmV0dXJuIHRydWU7CiAJfQogCi0JaWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpCiYjNDM7CWlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7CiYjNDM7CQlkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS0mZ3Q7ZGV2LAomIzQzOwkJCQkgICAgJiMzNDtwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcbiYjMzQ7LAomIzQzOwkJCQkgICAgcGNpZnVuYywgbWFwX2Z1bmMsIGx2bCwgc2NocSk7CiAJCXJldHVybiBmYWxzZTsKJiM0MzsJfQogCiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCmluZGV4IDE3NTk5MjE4OGMxOGEuLmE1MTllMGE5N2EyYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCkBAIC02MTUsNiAmIzQzOzYxNSwxNDIgQEAgdm9pZCBvdHgyX2dldF9tYWNfZnJvbV9hZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogfQogRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7b3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsCiYjNDM7CQkgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sCiYjNDM7CQkgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYm94ICptYm94ID0gJmFtcDtwZnZmLSZndDttYm94OwomIzQzOwlzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTsKJiM0MzsJaW50IGksIGVycjsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwlyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpOwomIzQzOwlpZiAoIXJlcSkgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXEtJmd0O2x2bCA9IE5JWF9UWFNDSF9MVkxfTURROwomIzQzOwlyZXEtJmd0O251bV9yZWdzID0gY250OwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVxLSZndDtyZWdbaV0gPSByZWdfYWRkcltpXTsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW2ldID0gcmVnX3ZhbFtpXTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddOwomIzQzOwl1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddOwomIzQzOwlpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZnZmLSZndDtody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNtcSA9IHBmdmYtJmd0O2h3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTsKJiM0MzsKJiM0MzsJCXJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTsKJiM0MzsJCXJlZ192YWxbY250XSA9IDA7CiYjNDM7CQljbnQmIzQzOyYjNDM7OwomIzQzOwomIzQzOwkJcmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFtjbnRdID0gMDsKJiM0MzsJCWNudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAoY250ICZsdDsgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LAomIzQzOwkJCQkJICAgICByZWdfYWRkciwgcmVnX3ZhbCk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZmFpbDsKJiM0MzsJCWNudCA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGNudCkgewomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsCiYjNDM7CQkJCQkgICAgIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBmYWlsOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO2ZhaWw6CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJIGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYm94ICptYm94ID0gJmFtcDtwZnZmLSZndDttYm94OwomIzQzOwlzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTsKJiM0MzsJaW50IGVyciwgc21xLCBuID0gMDsKJiM0MzsJdTY0IHJlZ19hZGRyWzJdOwomIzQzOwl1NjQgcmVnX3ZhbFsyXTsKJiM0MzsJdTY0IHJhdGU7CiYjNDM7CiYjNDM7CWlmICghbWF4cmF0ZSAmYW1wOyZhbXA7ICFtaW5yYXRlKSB7CiYjNDM7CQlzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7CiYjNDM7CQlyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFswXSA9IDA7CiYjNDM7CQlyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFsxXSA9IDA7CiYjNDM7CQlyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7CiYjNDM7CWlmICghcmVxKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7bHZsID0gTklYX1RYU0NIX0xWTF9NRFE7CiYjNDM7CiYjNDM7CS8qIE1RUFJJTyBleHBvc2VzIG9ubHkgbWluL21heCByYXRlLCBub3QgYnVyc3QuICBQYXNzIGJ1cnN0IDAgc28KJiM0MzsJICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWAomIzQzOwkgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzCiYjNDM7CSAqIGZyb20gdGhlIDY1NTM2IGJ5dGUgZGVmYXVsdCB1c2VkIGluIHRoZSBIVEIgcGF0aCwgd2hpY2ggaXMgYQomIzQzOwkgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGEKJiM0MzsJICogaGFyZHdhcmUgY2FwLgomIzQzOwkgKgomIzQzOwkgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLAomIzQzOwkgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvbgomIzQzOwkgKiBldmVyeSB1cGRhdGUgc28gb21pdHRlZCByYXRlcyBhcmUgYXBwbGllZCBleHBsaWNpdGx5IHJhdGhlciB0aGFuCiYjNDM7CSAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuCiYjNDM7CSAqLwomIzQzOwlyZXEtJmd0O3JlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwlpZiAobWF4cmF0ZSkgewomIzQzOwkJcmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IDA7CiYjNDM7CX0KJiM0MzsJbiYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CS8qIENJUiYjNDM7UElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqLwomIzQzOwlyZXEtJmd0O3JlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwlpZiAobWlucmF0ZSkgewomIzQzOwkJcmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IDA7CiYjNDM7CX0KJiM0MzsJbiYjNDM7JiM0Mzs7CiYjNDM7CXJlcS0mZ3Q7bnVtX3JlZ3MgPSBuOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYykKIHsKIAl1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdOwpAQCAtNjUxLDcgJiM0Mzs3ODcsMTEgQEAgaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3IKIAkJCQkJCSh1NjQpaHctJmd0O3NtcV9saW5rX3R5cGUpOwogCQlyZXEtJmd0O251bV9yZWdzJiM0MzsmIzQzOzsKIAkJLyogTURRIGNvbmZpZyAqLwotCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJCXBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07CiYjNDM7CQllbHNlCiYjNDM7CQkJcGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTsKJiM0MzsKIAkJcmVxLSZndDtyZWdbMV0gPSBOSVhfQUZfTURRWF9QQVJFTlQoc2NocSk7CiAJCXJlcS0mZ3Q7cmVndmFsWzFdID0gcGFyZW50ICZsdDsmbHQ7IDE2OwogCQlyZXEtJmd0O251bV9yZWdzJiM0MzsmIzQzOzsKQEAgLTc3OSw2ICYjNDM7OTE5LDkgQEAgaW50IG90eDJfdHhzY2hfYWxsb2Moc3RydWN0IG90eDJfbmljICpwZnZmKQogCQlyZXEtJmd0O3NjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7CiAJfQogCiYjNDM7CWlmIChwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCkKJiM0MzsJCXJlcS0mZ3Q7c2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsKIAlyYyA9IG90eDJfc3luY19tYm94X21zZygmYW1wO3BmdmYtJmd0O21ib3gpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwpAQCAtODQ0LDYgJiM0Mzs5ODcsNyBAQCB2b2lkIG90eDJfdHhzY2hxX3N0b3Aoc3RydWN0IG90eDJfbmljICpwZnZmKQogCiAJLyogQ2xlYXIgdGhlIHR4c2NocSBsaXN0ICovCiAJZm9yIChsdmwgPSAwOyBsdmwgJmx0OyBOSVhfVFhTQ0hfTFZMX0NOVDsgbHZsJiM0MzsmIzQzOykgewomIzQzOwkJcGZ2Zi0mZ3Q7aHcudHhzY2hxX2NudFtsdmxdID0gMDsKIAkJZm9yIChzY2hxID0gMDsgc2NocSAmbHQ7IE1BWF9UWFNDSFFfUEVSX0ZVTkM7IHNjaHEmIzQzOyYjNDM7KQogCQkJcGZ2Zi0mZ3Q7aHcudHhzY2hxX2xpc3RbbHZsXVtzY2hxXSA9IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaAppbmRleCBlZWNlZTYxMmI3YjJjLi5lZGU3ZjExMTNiNzE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaApAQCAtMTcsNiAmIzQzOzE3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zb2MvbWFydmVsbC9zaWxpY29ucy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbWFjc2VjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VhcGkvbGludXgvcGt0X3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3BrdF9jbHMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZGV2bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWU2NC5oJmd0OwpAQCAtNDgzLDYgJiM0Mzs0ODQsMjMgQEAgc3RydWN0IHBmX2lycV9kYXRhIHsKIAlpbnQgbWRldnM7CiB9OwogCiYjNDM7c3RydWN0IG1xX29mZmxvYWRfc25hcCB7CiYjNDM7CXU2NCBtaW5fcmF0ZVtUQ19RT1BUX01BWF9RVUVVRV07CiYjNDM7CXU2NCBtYXhfcmF0ZVtUQ19RT1BUX01BWF9RVUVVRV07CiYjNDM7CV9fdTggbnVtX3RjOwomIzQzOwlfX3UxNiBjb3VudFtUQ19RT1BUX01BWF9RVUVVRV07CiYjNDM7CV9fdTE2IG9mZnNldFtUQ19RT1BUX01BWF9RVUVVRV07CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3Qgb3R4Ml9tcXByaW8gewomIzQzOwl1MzIJZmxhZ3M7CiYjNDM7CXU2NAkqbWluX3JhdGU7CiYjNDM7CXU2NAkqbWF4X3JhdGU7CiYjNDM7CWJvb2wJcmF0ZV9saW1pdDsKJiM0MzsJYm9vbAlyZXBsYWNlX3NldHVwX2RvbmU7CiYjNDM7CWJvb2wJcmVwbGFjZV9ncmFmdF9kb25lOwomIzQzO307CiYjNDM7CiBzdHJ1Y3Qgb3R4Ml9uaWMgewogCXZvaWQgX19pb21lbQkJKnJlZ19iYXNlOwogCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXRkZXY7CkBAIC01MTUsNiAmIzQzOzUzMywxMCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMgewogCXU2NAkJCWZsYWdzOwogCXU2NAkJCSpjcV9vcF9hZGRyOwogCiYjNDM7CXN0cnVjdCBvdHgyX21xcHJpbwltcXByaW87CiYjNDM7CXN0cnVjdCBtcV9vZmZsb2FkX3NuYXAJKmN1cl9tcV9zbmFwOwomIzQzOwlzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwCSpvbGRfbXFfc25hcDsKJiM0MzsKIAlzdHJ1Y3QgYnBmX3Byb2cJCSp4ZHBfcHJvZzsKIAlzdHJ1Y3Qgb3R4Ml9xc2V0CXFzZXQ7CiAJc3RydWN0IG90eDJfaHcJCWh3OwpAQCAtMTI0Niw2ICYjNDM7MTI2OCwxMSBAQCBkbWFfYWRkcl90IG90eDJfZG1hX21hcF9za2JfZnJhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiAJCQkJIHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTsKIHZvaWQgb3R4Ml9kbWFfdW5tYXBfc2tiX2ZyYWdzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNnX2xpc3QgKnNnKTsKIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7CiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLAomIzQzOwkJCQkgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7CiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTsKJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTsKIHZvaWQgb3R4Ml9xdWV1ZV92Zl93b3JrKHN0cnVjdCBtYm94ICptdywgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hfd3EsCiAJCQlpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpOwogaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMKaW5kZXggZjExMGRmYTQyMzYwNS4uNGE3MGFiYzIzMGJlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jCkBAIC00MTMsNiAmIzQzOzQxMywxMiBAQCBzdGF0aWMgaW50IG90eDJfZGNibmxfaWVlZV9zZXRwZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpCiAJdTggb2xkX3BmY19lbjsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCAmYW1wOyZhbXA7IHBmYy0mZ3Q7cGZjX2VuKSB7CiYjNDM7CQluZXRkZXZfZXJyKGRldiwKJiM0MzsJCQkgICAmIzM0O1BGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKIAlvbGRfcGZjX2VuID0gcGZ2Zi0mZ3Q7cGZjX2VuOwogCXBmdmYtJmd0O3BmY19lbiA9IHBmYy0mZ3Q7cGZjX2VuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMKaW5kZXggOWJlZTFiOTFlZWFhNi4uZWMyNjAxYzZjMjU1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYwpAQCAtMjg3LDYgJiM0MzsyODcsMTQgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ICZhbXA7JmFtcDsKJiM0MzsJICAgIChjaGFubmVsLSZndDt0eF9jb3VudCAhPSBwZnZmLSZndDtody50eF9xdWV1ZXMgfHwKJiM0MzsJICAgICBjaGFubmVsLSZndDtyeF9jb3VudCAhPSBwZnZmLSZndDtody5yeF9xdWV1ZXMpKSB7CiYjNDM7CQluZXRkZXZfaW5mbyhkZXYsCiYjNDM7CQkJICAgICYjMzQ7Tm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKIAlpZiAoaWZfdXApCiAJCWRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX3N0b3AoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMKaW5kZXggYzk5NWYyOTAwODU5MC4uNzlhODJlNDQ1NDU0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCkBAIC0xOTgwLDYgJiM0MzsxOTgwLDEyIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX21lbTsKIAomIzQzOwllcnIgPSBvdHgyX21xcHJpb191cChwZik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQluZXRkZXZfZXJyKHBmLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlcnMgZHVyaW5nIG9wZW46ICVkOyBjb250aW51aW5nIHdpdGhvdXQgYmFuZHdpZHRoIGxpbWl0c1xuJiMzNDssCiYjNDM7CQkJICAgZXJyKTsKJiM0MzsKIAkvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi8KIAlmb3IgKHFpZHggPSAwOyBxaWR4ICZsdDsgcGYtJmd0O2h3LmNpbnRfY250OyBxaWR4JiM0MzsmIzQzOykgewogCQljcV9wb2xsID0gJmFtcDtxc2V0LSZndDtuYXBpW3FpZHhdOwpAQCAtMjg0Niw2ICYjNDM7Mjg1MiwxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIAlib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhwZi0mZ3Q7bmV0ZGV2KTsKIAlzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nOwogCiYjNDM7CWlmIChwcm9nICZhbXA7JmFtcDsgcGYtJmd0O21xcHJpby5yYXRlX2xpbWl0KSB7CiYjNDM7CQluZXRkZXZfZXJyKGRldiwKJiM0MzsJCQkgICAmIzM0O1hEUDogY2Fubm90IGF0dGFjaCB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKIAlpZiAocHJvZyAmYW1wOyZhbXA7IGRldi0mZ3Q7bXR1ICZndDsgTUFYX1hEUF9NVFUpIHsKIAkJbmV0ZGV2X3dhcm4oZGV2LCAmIzM0O0p1bWJvIGZyYW1lcyBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIFhEUFxuJiMzNDspOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYwppbmRleCAwMzlmZDQ3ZWJmNTIyLi5hYmQ2NmIzNjYwMDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMKQEAgLTE2LDYgJiM0MzsxNiw4IEBACiAjaW5jbHVkZSAmbHQ7bmV0L3RjX2FjdC90Y19taXJyZWQuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdGNfYWN0L3RjX3ZsYW4uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXB2Ni5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvcGt0X3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9zY2hfZ2VuZXJpYy5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2NuMTBrLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtvdHgyX2NvbW1vbi5oJiMzNDsKQEAgLTMxLDYgJiM0MzszMywxMCBAQAogCiAjZGVmaW5lIE1DQVNUX0lOVkFMSURfR1JQCQkoLTFVKQogI2RlZmluZSBSQVRFX01BTlRJU1NBX0JJVFMJCTgKJiM0MzsvKiBNaW4gcGVyLXF1ZXVlIGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMiBNYnBzKS4gKi8KJiM0MzsjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTCTI1MDAwMFVMTAomIzQzOy8qIE1heCBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDEzMDgxNiBNYnBzKS4gKi8KJiM0MzsjZGVmaW5lIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTCSgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpCiAKIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCwKIAkJCQkgICAgICB1MzIgKmJ1cnN0X2V4cCwgdTMyICpidXJzdF9tYW50aXNzYSkKQEAgLTYxLDYgJiM0Mzs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCwKIAkJCSpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMICZsdDsmbHQ7ICgqYnVyc3RfZXhwIC0gNykpOwogCQl9CiAJfSBlbHNlIHsKJiM0MzsJCS8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvbgomIzQzOwkJICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LgomIzQzOwkJICovCiAJCSpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7CiAJCSpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTsKIAl9CkBAIC0xNjAwLDE0ICYjNDM7MTYwOSw3MTQgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJCSAgbmljLCBuaWMsIGluZ3Jlc3MpOwogfQogCiYjNDM7LyogRnJlZSB0aGUgcGVyLXF1ZXVlIG1pbi9tYXggcmF0ZSBjYWNoZXMuICovCiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlkZXZtX2tmcmVlKHBmdmYtJmd0O2RldiwgcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlKTsKJiM0MzsJZGV2bV9rZnJlZShwZnZmLSZndDtkZXYsIHBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSk7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSA9IE5VTEw7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSA9IE5VTEw7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5mbGFncyA9IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIHJlcGxhY2luZykKJiM0Mzt7CiYjNDM7CXUxNiBudW1fdHhxID0gcGZ2Zi0mZ3Q7aHcubm9uX3Fvc19xdWV1ZXM7CiYjNDM7CiYjNDM7CWlmIChyZXBsYWNpbmcgJmFtcDsmYW1wOyBwZnZmLSZndDttcXByaW8ubWluX3JhdGUgJmFtcDsmYW1wOyBwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpIHsKJiM0MzsJCW1lbXNldChwZnZmLSZndDttcXByaW8ubWluX3JhdGUsIDAsCiYjNDM7CQkgICAgICAgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlKSk7CiYjNDM7CQltZW1zZXQocGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlLCAwLAomIzQzOwkJICAgICAgIG51bV90eHEgKiBzaXplb2YoKnBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSkpOwomIzQzOwkJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzID0gMDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CW90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7CiYjNDM7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLSZndDtkZXYsIG51bV90eHEsCiYjNDM7CQkJCQkgICAgIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlKSwKJiM0MzsJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLSZndDtkZXYsIG51bV90eHEsCiYjNDM7CQkJCQkgICAgIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKSwKJiM0MzsJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpIHsKJiM0MzsJCW90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9mcmVlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJICBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqc25hcCkKJiM0Mzt7CiYjNDM7CWlmICghKnNuYXApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWRldm1fa2ZyZWUocGZ2Zi0mZ3Q7ZGV2LCAqc25hcCk7CiYjNDM7CSpzbmFwID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19zbmFwX2NvcHkoc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKmRzdCwKJiM0MzsJCQkJIGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSAmYW1wO21xcHJpby0mZ3Q7cW9wdDsKJiM0MzsJc3RydWN0IG1xX29mZmxvYWRfc25hcCAqc25hcDsKJiM0MzsJaW50IHRjOwomIzQzOwomIzQzOwlpZiAoISpkc3QpIHsKJiM0MzsJCXNuYXAgPSBkZXZtX2t6YWxsb2MocGZ2Zi0mZ3Q7ZGV2LCBzaXplb2YoKnNuYXApLCBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghc25hcCkKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCSpkc3QgPSBzbmFwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJc25hcCA9ICpkc3Q7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc25hcC0mZ3Q7bnVtX3RjID0gcW9wdC0mZ3Q7bnVtX3RjOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBUQ19RT1BUX01BWF9RVUVVRTsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQlzbmFwLSZndDtjb3VudFt0Y10gPSBxb3B0LSZndDtjb3VudFt0Y107CiYjNDM7CQlzbmFwLSZndDtvZmZzZXRbdGNdID0gcW9wdC0mZ3Q7b2Zmc2V0W3RjXTsKJiM0MzsJCXNuYXAtJmd0O21pbl9yYXRlW3RjXSA9IDA7CiYjNDM7CQlzbmFwLSZndDttYXhfcmF0ZVt0Y10gPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHFvcHQtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQlzbmFwLSZndDttaW5fcmF0ZVt0Y10gPSBtcXByaW8tJmd0O21pbl9yYXRlW3RjXTsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKQomIzQzOwkJCXNuYXAtJmd0O21heF9yYXRlW3RjXSA9IG1xcHJpby0mZ3Q7bWF4X3JhdGVbdGNdOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3N0YWdlX2N1cihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIG90eDJfbXFwcmlvX3NuYXBfY29weShwZnZmLCAmYW1wO3BmdmYtJmd0O2N1cl9tcV9zbmFwLCBtcXByaW8pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2NvbW1pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgJmFtcDtwZnZmLSZndDtvbGRfbXFfc25hcCk7CiYjNDM7CXBmdmYtJmd0O29sZF9tcV9zbmFwID0gcGZ2Zi0mZ3Q7Y3VyX21xX3NuYXA7CiYjNDM7CXBmdmYtJmd0O2N1cl9tcV9zbmFwID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlwZnZmLSZndDttcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gZmFsc2U7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcGZ2Zi0mZ3Q7aHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX01EUV0gIT0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0b3JlX29sZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwID0gcGZ2Zi0mZ3Q7b2xkX21xX3NuYXA7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLSZndDtuZXRkZXY7CiYjNDM7CXUxNiBudW1fdHhxID0gcGZ2Zi0mZ3Q7aHcubm9uX3Fvc19xdWV1ZXM7CiYjNDM7CWludCB0YywgdHhxLCBlcnI7CiYjNDM7CiYjNDM7CWlmICghc25hcCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmLCBmYWxzZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwltZW1zZXQocGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlLCAwLCBudW1fdHhxICogc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWluX3JhdGUpKTsKJiM0MzsJbWVtc2V0KHBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKSk7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5mbGFncyA9IDA7CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHNuYXAtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSBzbmFwLSZndDttaW5fcmF0ZVt0Y107CiYjNDM7CQl1NjQgbWF4X3JhdGUgPSBzbmFwLSZndDttYXhfcmF0ZVt0Y107CiYjNDM7CiYjNDM7CQlpZiAobWluX3JhdGUpCiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzIHw9IFRDX01RUFJJT19GX01JTl9SQVRFOwomIzQzOwkJaWYgKG1heF9yYXRlKQomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NQVhfUkFURTsKJiM0MzsKJiM0MzsJCWZvciAodHhxID0gc25hcC0mZ3Q7b2Zmc2V0W3RjXTsKJiM0MzsJCSAgICAgdHhxICZsdDsgc25hcC0mZ3Q7b2Zmc2V0W3RjXSAmIzQzOyBzbmFwLSZndDtjb3VudFt0Y107IHR4cSYjNDM7JiM0MzspIHsKJiM0MzsJCQlwZnZmLSZndDttcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlOwomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBzbmFwLSZndDtudW1fdGMpOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBzbmFwLSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykKJiM0MzsJCW5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCB0Yywgc25hcC0mZ3Q7Y291bnRbdGNdLAomIzQzOwkJCQkgICAgc25hcC0mZ3Q7b2Zmc2V0W3RjXSk7CiYjNDM7CiYjNDM7CWlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoKSBjbGVhcnMgcmF0ZV9saW1pdCB3aGVuIG5kb19vcGVuKCkgZmFpbHMuCiYjNDM7CSAqIElmIG9wZW4gZmFpbGVkLCBUWCBzY2hlZHVsZXJzIHdlcmUgZnJlZWQ7IGRlZmVyIHNoYXBlciByZXN0b3JlIHRvIHRoZQomIzQzOwkgKiBuZXh0IHN1Y2Nlc3NmdWwgbmRvX29wZW4oKSB2aWEgb3R4Ml9tcXByaW9fdXAoKS4KJiM0MzsJICovCiYjNDM7CXBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKHBmdmYtJmd0O2h3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdKSB7CiYjNDM7CQllcnIgPSBvdHgyX21xcHJpb191cChwZnZmKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgJmFtcDtwZnZmLSZndDtjdXJfbXFfc25hcCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2Rlc3Ryb3koc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJb3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsICZhbXA7cGZ2Zi0mZ3Q7Y3VyX21xX3NuYXApOwomIzQzOwlvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgJmFtcDtwZnZmLSZndDtvbGRfbXFfc25hcCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3N3KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLSZndDtuZXRkZXY7CiYjNDM7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ID0gZmFsc2U7CiYjNDM7CW90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7CiYjNDM7CW5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7CiYjNDM7CW90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRlYXIgZG93biBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQ6IGNsZWFyIHBlci1xdWV1ZSBzaGFwZXJzLAomIzQzOyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uCiYjNDM7ICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb24KJiM0MzsgKiByb3V0aW5lIG5ldGRldiBzdG9wL29wZW4gY3ljbGVzIHdoZXJlIHRoZSBvZmZsb2FkIHN0YXlzIGFjdGl2ZS4KJiM0MzsgKi8KJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhwZnZmLSZndDtuZXRkZXYpICZhbXA7JmFtcDsKJiM0MzsJICAgIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpCiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7CiYjNDM7CiYjNDM7CW90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpOwomIzQzOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQluZXRkZXZfZXJyKHBmdmYtJmd0O25ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogZmFpbGVkIHRvIGNsZWFyIGhhcmR3YXJlIHNoYXBlcnM6ICVkOyBzb21lIFRYIHF1ZXVlcyBtYXkgcmV0YWluIGJhbmR3aWR0aCBsaW1pdHNcbiYjMzQ7LAomIzQzOwkJCSAgIGVycik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLSZndDtuZXRkZXY7CiYjNDM7CWludCB0eHEsIGVycjsKJiM0MzsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoIXBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSB8fCAhcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWZvciAodHhxID0gMDsgdHhxICZsdDsgcGZ2Zi0mZ3Q7aHcubm9uX3Fvc19xdWV1ZXM7IHR4cSYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDsKJiM0MzsKJiM0MzsJCWlmIChwZnZmLSZndDttcXByaW8uZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUpCiYjNDM7CQkJbWluX3JhdGUgPSBwZnZmLSZndDttcXByaW8ubWluX3JhdGVbdHhxXTsKJiM0MzsJCWlmIChwZnZmLSZndDttcXByaW8uZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJbWF4X3JhdGUgPSBwZnZmLSZndDttcXByaW8ubWF4X3JhdGVbdHhxXTsKJiM0MzsKJiM0MzsJCWlmICghbWluX3JhdGUgJmFtcDsmYW1wOyAhbWF4X3JhdGUpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsCiYjNDM7CQkJCQkJICAgbWF4X3JhdGUpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXG4mIzM0OywKJiM0MzsJCQkJICAgdHhxLCBlcnIpOwomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpbwomIzQzOyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKQomIzQzOyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLgomIzQzOyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS4gIFRoZSBmdWxsIHN0b3Avb3BlbiBjeWNsZSBjbGVhcnMKJiM0MzsgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0CiYjNDM7ICogdHJhZmZpYy4gIElmIG9wZW4gZmFpbHMsIHRoZSBpbnRlcmZhY2UgaXMgbGVmdCBhZG1pbmlzdHJhdGl2ZWx5IGRvd24KJiM0MzsgKiB3aXRob3V0IGNhbGxpbmcgbmRvX3N0b3AoKSBhZ2FpbiBvbiByZXNvdXJjZXMgYWxyZWFkeSB0b3JuIGRvd24gYnkKJiM0MzsgKiB0aGUgb3BlbiBlcnJvciBwYXRoLgomIzQzOyAqCiYjNDM7ICogRG8gbm90IGNhbGwgZGV2X2RlYWN0aXZhdGUoKS9kZXZfYWN0aXZhdGUoKSBoZXJlOiB0aGlzIHJ1bnMgZnJvbQomIzQzOyAqIG5kb19zZXR1cF90YygpIHdoaWxlIHFkaXNjX2dyYWZ0KCkgbWF5IGFscmVhZHkgaG9sZCB0aGUgZGV2aWNlCiYjNDM7ICogZGVhY3RpdmF0ZWQgYW5kIG11c3QgcGVyZm9ybSB0aGUgZmluYWwgZGV2X2FjdGl2YXRlKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IG5ldGRldi0mZ3Q7bmV0ZGV2X29wczsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJLyogVE9ETzogRXhwbG9yZSBsaXZlIFRYIHNjaGVkdWxlciByZXByb2dyYW1taW5nIHRvIGF2b2lkIGEgZnVsbAomIzQzOwkgKiBuZG9fc3RvcCgpL25kb19vcGVuKCkgYm91bmNlIG9uIGV2ZXJ5IG1xcHJpbyBjaGFuZ2UuCiYjNDM7CSAqLwomIzQzOwluZXRkZXZfaW5mbyhuZXRkZXYsCiYjNDM7CQkgICAgJiMzNDttcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxuJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBvcHMtJmd0O25kb19zdG9wKG5ldGRldik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwkvKiBTZXQgYmVmb3JlIG5kb19vcGVuKCkgc28gb3R4Ml90eHNjaF9hbGxvYygpIHdpZGVucyBTTVEgYWxsb2NhdGlvbi4KJiM0MzsJICogT24gdGVhcmRvd24sIGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlIHNvIG5kb19vcGVuKCkgZG9lcyBub3QKJiM0MzsJICogcmUtYXBwbHkgYmFuZHdpZHRoIGxpbWl0cyB2aWEgb3R4Ml9tcXByaW9fdXAoKSBhZnRlciB0aGUga2VybmVsCiYjNDM7CSAqIHJlbW92ZWQgdGhlIHFkaXNjLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJhdGVfbGltaXQpCiYjNDM7CQlwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7CiYjNDM7CWVsc2UKJiM0MzsJCW90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpOwomIzQzOwomIzQzOwllcnIgPSBvcHMtJmd0O25kb19vcGVuKG5ldGRldik7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7RmFpbGVkIHRvIHJlc3RhcnQgZGV2aWNlIGFmdGVyIG1xcHJpbyBjaGFuZ2U6ICVkXG4mIzM0OywKJiM0MzsJCQkgICBlcnIpOwomIzQzOwkJLyogbmRvX29wZW4oKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXJzIG9uIGZhaWx1cmUgd2hpbGUKJiM0MzsJCSAqIG5ldGlmX3J1bm5pbmcoKSBtYXkgc3RpbGwgYmUgdHJ1ZTsgZHJvcCBtcXByaW8gc29mdHdhcmUgc3RhdGUKJiM0MzsJCSAqIG9ubHkgaW5zdGVhZCBvZiBzZW5kaW5nIHNoYXBlciBjbGVhcnMgdG8gZnJlZWQgcXVldWVzLgomIzQzOwkJICovCiYjNDM7CQlvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTsKJiM0MzsJCS8qIG5kb19vcGVuKCkgcm9sbHMgYmFjayBvbiBmYWlsdXJlOyBtYXJrIHRoZSBpbnRlcmZhY2UgZG93biBzbwomIzQzOwkJICogbmV0aWZfY2xvc2UoKSBkb2VzIG5vdCBpbnZva2UgbmRvX3N0b3AoKSBvbiBmcmVlZCBOQVBJL3F1ZXVlCiYjNDM7CQkgKiBzdGF0ZS4gQ2FsbGVyIGhvbGRzIFJUTkw7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLgomIzQzOwkJICovCiYjNDM7CQlwZnZmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOOwomIzQzOwkJLyogdmlzaWJsZSB0byBvdHgyX3N0b3AoKSBvbiBvdGhlciBjcHVzICovCiYjNDM7CQlzbXBfd21iKCk7CiYjNDM7CQluZXRpZl9jbG9zZShuZXRkZXYpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQkJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLAomIzQzOwkJCQkJdTY0IHJhdGUsIHUzMiBxY291bnQsIGludCB0YywKJiM0MzsJCQkJCWNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlpZiAoIXJhdGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHFjb3VudCAmbHQ7PSAxKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFRPRE86IG1xcHJpbyBtaW5fcmF0ZS9tYXhfcmF0ZSBhcmUgcGVyIHRyYWZmaWMgY2xhc3MsIGJ1dCBiYW5kd2lkdGgKJiM0MzsJICogb2ZmbG9hZCBzaGFwZXMgb24gcGVyLXF1ZXVlIE1EUSBub2RlcyBwYXJlbnRlZCB1bmRlciBhIHNpbmdsZSBUTDQuCiYjNDM7CSAqIFdpdGhvdXQgcGVyLVRDIFRMNCBzaGFwZXJzIHRoZSBkcml2ZXIgY2Fubm90IGhvbm9yIFRDLWxldmVsIGxpbWl0cwomIzQzOwkgKiBmb3IgYSB0cmFmZmljIGNsYXNzIHRoYXQgc3BhbnMgbXVsdGlwbGUgcXVldWVzIHdpdGhvdXQgZWl0aGVyCiYjNDM7CSAqIGRpdmlkaW5nIHRoZSByYXRlIGFjcm9zcyBxdWV1ZXMgKHVBUEkgbWlzbWF0Y2gpIG9yIGV4Y2VlZGluZyB0aGUgVEMKJiM0MzsJICogY2FwIHdoZW4gZXZlcnkgbWVtYmVyIHF1ZXVlIGlzIGFjdGl2ZS4gUmVqZWN0IHVudGlsIHBlci1UQyBUTDQKJiM0MzsJICogc2hhcGluZyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aG91dCBhbGxvY2F0aW5nIGFkZGl0aW9uYWwgVEw0IG5vZGVzCiYjNDM7CSAqIGJleW9uZCB0aGUgZXhpc3RpbmcgaGllcmFyY2h5LgomIzQzOwkgKi8KJiM0MzsJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkgICAmIzM0O21xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xuJiMzNDssCiYjNDM7CQkgICBuYW1lLCB0YywgcWNvdW50KTsKJiM0MzsJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7bXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzJiMzNDssCiYjNDM7CQkJICAgICAgIG5hbWUsIHRjLCBxY291bnQpOwomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywKJiM0MzsJCQkJICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwl1MTYgbnVtX3R4cSA9IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOwomIzQzOwlpbnQgdGMsIHR4cTsKJiM0MzsKJiM0MzsJaWYgKHFvcHQtJmd0O251bV90YyAmZ3Q7IG51bV90eHEpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O051bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxuJiMzNDssCiYjNDM7CQkJICAgcW9wdC0mZ3Q7bnVtX3RjLCBudW1fdHhxKTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXUmIzM0OywKJiM0MzsJCQkJICAgICAgIHFvcHQtJmd0O251bV90YywgbnVtX3R4cSk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobnVtX3R4cSAmZ3Q7IE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcbiYjMzQ7LAomIzQzOwkJCSAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICAgICAmIzM0O051bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1JiMzNDssCiYjNDM7CQkJCSAgICAgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHFvcHQtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgcWNvdW50ID0gcW9wdC0mZ3Q7Y291bnRbdGNdOwomIzQzOwomIzQzOwkJZm9yICh0eHEgPSBxb3B0LSZndDtvZmZzZXRbdGNdOwomIzQzOwkJICAgICB0eHEgJmx0OyBxb3B0LSZndDtvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJCWlmICh0eHEgJmd0Oz0gbnVtX3R4cSkgewomIzQzOwkJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJCSAgICYjMzQ7bXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XG4mIzM0OywKJiM0MzsJCQkJCSAgIHR4cSwgbnVtX3R4cSk7CiYjNDM7CQkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkJCSAgICAgICAmIzM0O21xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldSYjMzQ7LAomIzQzOwkJCQkJCSAgICAgICB0eHEsIG51bV90eHEpOwomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpCiYjNDM7ewomIzQzOwl1NjQgbWJwczsKJiM0MzsKJiM0MzsJaWYgKCFyYXRlX2J5dGVzX3BzKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWlmIChyYXRlX2J5dGVzX3BzICZsdDsgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChyYXRlX2J5dGVzX3BzICZndDsgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChyYXRlX2J5dGVzX3BzICZndDsgZGl2X3U2NChVNjRfTUFYLCA4KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJbWJwcyA9IG90eDJfY29udmVydF9yYXRlKHJhdGVfYnl0ZXNfcHMpOwomIzQzOwlyZXR1cm4gaWxvZzIobWJwcyAvIDIpICZsdDs9IE1BWF9SQVRFX0VYUE9ORU5UOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwlib29sIGhhZF9tcXByaW8gPSBwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJYm9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJcW9wdC0mZ3Q7aHcgPSAwOwomIzQzOwomIzQzOwkvKiB0YyBxZGlzYyByZXBsYWNlIHJ1bnMgc2V0dXAgb24gdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlCiYjNDM7CSAqIG9sZCBvbmUuIHJlcGxhY2Vfc2V0dXBfZG9uZSBhbmQgVENfUk9PVF9HUkFGVCBkaXN0aW5ndWlzaCBzdGFsZQomIzQzOwkgKiBvbGQtaW5zdGFuY2UgdGVhcmRvd24gZnJvbSBncmFmdCBmYWlsdXJlIGFmdGVyIHNldHVwLgomIzQzOwkgKi8KJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgJmFtcDsmYW1wOyBwZnZmLSZndDtjdXJfbXFfc25hcCkgewomIzQzOwkJZXJyID0gMDsKJiM0MzsJCWlmIChwZnZmLSZndDttcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lKQomIzQzOwkJCW90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHBmdmYpOwomIzQzOwkJZWxzZQomIzQzOwkJCWVyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpOwomIzQzOwkJb3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi8KJiM0MzsJaWYgKCFoYWRfbXFwcmlvKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChpZl91cCkgewomIzQzOwkJaW50IGRvd25fZXJyLCBlcnI7CiYjNDM7CiYjNDM7CQlkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7CiYjNDM7CQllcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJCXJldHVybiBkb3duX2VycjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBuZG9fc3RvcCgpIGFscmVhZHkgZnJlZWQgdGhlIFRYIHNjaGVkdWxlciBUTCBub2RlczsgZHJvcCBzb2Z0d2FyZQomIzQzOwkgKiBzdGF0ZSBvbmx5LgomIzQzOwkgKi8KJiM0MzsJb3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCXN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBtcXByaW8tJmd0O2V4dGFjazsKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gJmFtcDttcXByaW8tJmd0O3FvcHQ7CiYjNDM7CWJvb2wgcmVwbGFjaW5nID0gcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQ7CiYjNDM7CWJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7CiYjNDM7CWludCB0YywgdHhxLCBlcnIsIGk7CiYjNDM7CiYjNDM7CWlmICghcW9wdC0mZ3Q7aHcpCiYjNDM7CQlyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTsKJiM0MzsKJiM0MzsJaWYgKCFpZl91cCkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7bXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7bXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVAmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG1xcHJpby0mZ3Q7c2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcbiYjMzQ7LCBtcXByaW8tJmd0O3NoYXBlcik7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeCYjMzQ7LAomIzQzOwkJCQkgICAgICAgbXFwcmlvLSZndDtzaGFwZXIpOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghdGVzdF9iaXQoUU9TX0NJUl9QSVJfU1VQUE9SVCwgJmFtcDtwZnZmLSZndDtody5jYXBfZmxhZykpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVImIzQzO1BJUiBzdXBwb3J0XG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtJmd0O3BkZXYpKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxuJiMzNDspOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGZ2Zi0mZ3Q7cGZjX2VuKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwZnZmLSZndDt4ZHBfcHJvZykgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmUmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDsKJiM0MzsJCXUzMiBxY291bnQgPSBxb3B0LSZndDtjb3VudFt0Y107CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IG1xcHJpby0mZ3Q7bWluX3JhdGVbdGNdOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJbWF4X3JhdGUgPSBtcXByaW8tJmd0O21heF9yYXRlW3RjXTsKJiM0MzsKJiM0MzsJCWlmIChtaW5fcmF0ZSAmYW1wOyZhbXA7IG1heF9yYXRlICZhbXA7JmFtcDsgbWluX3JhdGUgJmd0OyBtYXhfcmF0ZSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpOwomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgICAgICYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkJiMzNDssCiYjNDM7CQkJCQkgICAgICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkgewomIzQzOwkJCWVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1pbl9yYXRlLAomIzQzOwkJCQkJCQkgICBxY291bnQsIHRjLCAmIzM0O21pbiYjMzQ7KTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpIHsKJiM0MzsJCQllcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSwKJiM0MzsJCQkJCQkJICAgcWNvdW50LCB0YywgJiMzNDttYXgmIzM0Oyk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtaW5fcmF0ZSkpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXG4mIzM0OywKJiM0MzsJCQkJICAgbWluX3JhdGUsIHRjKTsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICAgICAmIzM0O21xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHMmIzM0OywKJiM0MzsJCQkJCSAgICAgICBtaW5fcmF0ZSwgdGMpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUgJmFtcDsmYW1wOwomIzQzOwkJICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1heF9yYXRlKSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcbiYjMzQ7LAomIzQzOwkJCQkgICBtYXhfcmF0ZSwgdGMpOwomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgICAgICYjMzQ7bXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0cyYjMzQ7LAomIzQzOwkJCQkJICAgICAgIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhuZXRkZXYsIGV4dGFjaywgcW9wdCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX21xcHJpb19zdGFnZV9jdXIocGZ2ZiwgbXFwcmlvKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtJmd0O25ldGRldiwgdHJ1ZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIHJlcGxhY2luZyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIG90eDJfbXFwcmlvX3VwKCkgbWF5IGhhdmUgcmVzdG9yZWQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZHVyaW5nCiYjNDM7CSAqIHRoZSByZXN0YXJ0IGFib3ZlLiBDbGVhciBldmVyeSBNRFEgc2hhcGVyIGJlZm9yZSBhcHBseWluZyB0aGUgbmV3CiYjNDM7CSAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlCiYjNDM7CSAqIGxpbWl0cyBpbiBoYXJkd2FyZS4KJiM0MzsJICovCiYjNDM7CWlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwlwZnZmLSZndDttcXByaW8uZmxhZ3MgPSBtcXByaW8tJmd0O2ZsYWdzOwomIzQzOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBxb3B0LSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwOwomIzQzOwkJdTMyIHFjb3VudCA9IHFvcHQtJmd0O2NvdW50W3RjXTsKJiM0MzsKJiM0MzsJCS8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUQomIzQzOwkJICogc2hhcGVyIHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZDsgc2VlCiYjNDM7CQkgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuIE11bHRpLXF1ZXVlIFRDcyB3aXRoIHJhdGVzCiYjNDM7CQkgKiBhcmUgcmVqZWN0ZWQgYWJvdmUuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCW1pbl9yYXRlID0gbXFwcmlvLSZndDttaW5fcmF0ZVt0Y107CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkKJiM0MzsJCQltYXhfcmF0ZSA9IG1xcHJpby0mZ3Q7bWF4X3JhdGVbdGNdOwomIzQzOwomIzQzOwkJZm9yICh0eHEgPSBxb3B0LSZndDtvZmZzZXRbdGNdOwomIzQzOwkJICAgICB0eHEgJmx0OyBxb3B0LSZndDtvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJCW5ldGRldl9kYmcobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxuJiMzNDssCiYjNDM7CQkJCSAgIHRjLCB0eHEsIG1pbl9yYXRlLCBtYXhfcmF0ZSk7CiYjNDM7CiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTsKJiM0MzsJCQlwZnZmLSZndDttcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlOwomIzQzOwomIzQzOwkJCWVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLAomIzQzOwkJCQkJCQkgICBtaW5fcmF0ZSwgbWF4X3JhdGUpOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCWdvdG8gY2xlYW51cDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwluZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHBmdmYtJmd0O2N1cl9tcV9zbmFwLSZndDtudW1fdGMpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGZ2Zi0mZ3Q7Y3VyX21xX3NuYXAtJmd0O251bV90YzsgaSYjNDM7JiM0MzspCiYjNDM7CQluZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcGZ2Zi0mZ3Q7Y3VyX21xX3NuYXAtJmd0O2NvdW50W2ldLAomIzQzOwkJCQkgICAgcW9wdC0mZ3Q7b2Zmc2V0W2ldKTsKJiM0MzsKJiM0MzsJcW9wdC0mZ3Q7aHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7CiYjNDM7CiYjNDM7CWlmIChyZXBsYWNpbmcpIHsKJiM0MzsJCXBmdmYtJmd0O21xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgPSB0cnVlOwomIzQzOwkJcGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IGZhbHNlOwomIzQzOwl9IGVsc2UgewomIzQzOwkJb3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJcW9wdC0mZ3Q7aHcgPSAwOwomIzQzOwlpZiAocmVwbGFjaW5nKSB7CiYjNDM7CQlpbnQgcmVzdG9yZV9lcnIgPSBvdHgyX21xcHJpb19yZXN0b3JlX29sZChwZnZmKTsKJiM0MzsKJiM0MzsJCW90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7CiYjNDM7CQlpZiAocmVzdG9yZV9lcnIpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkIGFuZCBwcmlvciBjb25maWd1cmF0aW9uIHJvbGxiYWNrIGZhaWxlZDogJWRcbiYjMzQ7LAomIzQzOwkJCQkgICByZXN0b3JlX2Vycik7CiYjNDM7CQkJaWYgKGV4dGFjaykKJiM0MzsJCQkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCQkJICAgICAgICYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkJiMzNDssCiYjNDM7CQkJCQkJICAgICAgIHJlc3RvcmVfZXJyKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFxuJiMzNDspOwomIzQzOwkJCWlmIChleHRhY2spCiYjNDM7CQkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCQkJICAgJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkJiMzNDspOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIGVyciA/IGVyciA6IC1FSU87CiYjNDM7CX0KJiM0MzsJb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCSAgICAgIHN0cnVjdCB0Y19yb290X3FvcHRfb2ZmbG9hZCAqcm9vdCkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAocm9vdC0mZ3Q7Y29tbWFuZCkgewomIzQzOwljYXNlIFRDX1JPT1RfR1JBRlQ6CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSkKJiM0MzsJCQlwZnZmLSZndDttcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gdHJ1ZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UgPSB0eXBlX2RhdGE7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwczsKJiM0MzsKJiM0MzsJaWYgKGJhc2UtJmd0O3R5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwljYXBzID0gYmFzZS0mZ3Q7Y2FwczsKJiM0MzsJY2Fwcy0mZ3Q7dmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogaW50IG90eDJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsCiAJCSAgdm9pZCAqdHlwZV9kYXRhKQogewogCXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIFRDX1FVRVJZX0NBUFM6CiYjNDM7CQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7CiAJY2FzZSBUQ19TRVRVUF9CTE9DSzoKIAkJcmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpOwogCWNhc2UgVENfU0VUVVBfUURJU0NfSFRCOgogCQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpOwomIzQzOwljYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzoKJiM0MzsJCXJldHVybiBvdHgyX3NldHVwX3RjX21xcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7CiYjNDM7CWNhc2UgVENfU0VUVVBfUk9PVF9RRElTQzoKJiM0MzsJCXJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQpAQCAtMTYzMiw2ICYjNDM7MjM0MSw3IEBAIEVYUE9SVF9TWU1CT0wob3R4Ml9pbml0X3RjKTsKIHZvaWQgb3R4Ml9zaHV0ZG93bl90YyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYykKIHsKIAlvdHgyX2Rlc3Ryb3lfdGNfZmxvd19saXN0KG5pYyk7CiYjNDM7CW90eDJfbXFwcmlvX3NuYXBfZGVzdHJveShuaWMpOwogfQogRVhQT1JUX1NZTUJPTChvdHgyX3NodXRkb3duX3RjKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jCmluZGV4IDY5YzA5MTFlMjhlOTEuLmQ5YWYxODJlNTcyMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMKQEAgLTExOCw2ICYjNDM7MTE4LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9jb25maWdfc2NoZWRfc2hhcGluZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiAJLyogY29uZmlndXJlIFBJUiAqLwogCW1heHJhdGUgPSAobm9kZS0mZ3Q7cmF0ZSAmZ3Q7IG5vZGUtJmd0O2NlaWwpID8gbm9kZS0mZ3Q7cmF0ZSA6IG5vZGUtJmd0O2NlaWw7CiAKJiM0MzsJLyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuCiYjNDM7CSAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuCiYjNDM7CSAqLwogCWNmZy0mZ3Q7cmVndmFsWypudW1fcmVnc10gPQogCQlvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgbWF4cmF0ZSwgNjU1MzYpOwogCSgqbnVtX3JlZ3MpJiM0MzsmIzQzOzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1ODQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgT2N0ZW9uVFgyIE5JQyBEcml2ZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIHNjb3BlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBzZWUgd2hpY2ggZmlsZXMgYXJlIGJlaW5nIG1vZGlmaWVkLiBPa2F5LCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzdWJzdGFudGlhbCB1cGRhdGU6CgpgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jYApgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNgCmBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaGAKYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNgCmBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNgCmBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jYApgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY2AKYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY2AKClJpZ2h0LCB0aGUgYG9jdGVvbnR4MmAgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlci4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGZvciBtZSBpczogaXMgdGhpcyBoYXJkd2FyZS1kZXBlbmRlbnQsIG9yIGNhbiBJIHJlcHJvZHVjZSB0aGlzIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQ/IElzIHRoaXMgdGllZCB0byB0aGUgQ045SywgQ04xMEsgcGh5c2ljYWwgQVNJQywgb3IgUENJZSBoYXJkd2FyZT8gT3IgY2FuIEkgdGVzdCB0aGlzIGluIFFFTVUgb3IgZXZlbiBzeXprYWxsZXI/IEkmIzM5O2xsIG5lZWQgdG8gZG8gc29tZSBkaWdnaW5nLCBwcm9iYWJseSB1c2luZyBgZ3JlcGAgb3IgY2hlY2tpbmcgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgYG9jdGVvbnR4MmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9DVEVPTlRYMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjY6Y29uZmlnIE9DVEVPTlRYMl9NQk9YXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTctXHR0cmlzdGF0ZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy04LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo5OmNvbmZpZyBPQ1RFT05UWDJfQUZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTAtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBSVlUgQWRtaW4gRnVuY3Rpb24gZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0yMj1jb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMTpjb25maWcgT0NURU9OVFgyX1BGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjQ1OmNvbmZpZyBPQ1RFT05UWDJfVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc3MgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgT2N0ZW9uIFRYMiBFdGhlcm5ldCBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIE9jdGVvbiBUWDIgZXRoZXJuZXQgZHJpdmVyLiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggaXMgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBsb29rIGF0IHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgZHJpdmVyJiMzOTtzIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZ2AuIFRoaXMgZmlsZSAqc2hvdWxkKiBsYXkgb3V0IGFsbCB0aGUgZGVwZW5kZW5jaWVzLCBmZWF0dXJlcywgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgd2F5IHRvIHVuZGVyc3RhbmQgaG93IGEga2VybmVsIGRyaXZlciBpcyBjb25zdHJ1Y3RlZCwgd2hhdCBpdCByZWxpZXMgb24sIGFuZCB3aGF0IGZlYXR1cmVzIEkgY2FuIGVuYWJsZSBvciBkaXNhYmxlLiBCeSBhbmFseXppbmcgdGhlIGBLY29uZmlnYCwgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgZnVuZGFtZW50YWwgbmF0dXJlIG9mIHRoZSBkZXZpY2UgYW5kIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBoYXJkd2FyZSBvciBzb2Z0d2FyZSBmZWF0dXJlcyBhcmUgaW52b2x2ZWQuIFRoaXMgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRvIGNvbmZpZ3VyZSBvciBtb2RpZnkgdGhpcyBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTWFydmVsbCBSVlUgTmV0d29yayBkcml2ZXJzIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE9DVEVPTlRYMl9NQk9YXG4gICA3Olx0XHR0cmlzdGF0ZVxuICAgODpcdFxuICAgOTpcdGNvbmZpZyBPQ1RFT05UWDJfQUZcbiAgMTA6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgT2N0ZW9uVFgyIFJWVSBBZG1pbiBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbiAgMTE6XHRcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxuICAxMjpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gIDEzOlx0XHRkZXBlbmRzIG9uICg2NEJJVCBcdTAwMjZcdTAwMjYgQ09NUElMRV9URVNUKSB8fCBBUk02NFxuICAxNDpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgMTU6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgMTY6XHRcdGhlbHBcbiAgMTc6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCYjMzk7cyBPY3Rlb25UWDIgUmVzb3VyY2UgVmlydHVhbGl6YXRpb25cbiAgMTg6XHRcdCAgVW5pdCYjMzk7cyBhZG1pbiBmdW5jdGlvbiBtYW5hZ2VyIHdoaWNoIG1hbmFnZXMgYWxsIFJWVSBIVyByZXNvdXJjZXNcbiAgMTk6XHRcdCAgYW5kIHByb3ZpZGVzIGEgbWVkaXVtIHRvIG90aGVyIFBGL1ZGcyB0byBjb25maWd1cmUgSFcuIFNob3VsZCBiZVxuICAyMDpcdFx0ICBlbmFibGVkIGZvciBvdGhlciBSVlUgZGV2aWNlIGRyaXZlcnMgdG8gd29yay5cbiAgMjE6XHRcbiAgMjI6XHRjb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcbiAgMjM6XHRcdGJvb2wgXCYjMzQ7RGlzYWJsZSBjYWNoaW5nIG9mIGR5bmFtaWMgZW50cmllcyBpbiBORENcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gT0NURU9OVFgyX0FGXG4gIDI1Olx0XHRkZWZhdWx0IG5cbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdCAgVGhpcyBjb25maWcgb3B0aW9uIGRpc2FibGVzIGNhY2hpbmcgb2YgZHluYW1pYyBlbnRyaWVzIHN1Y2ggYXMgTklYIFNRRXNcbiAgMjg6XHRcdCAgLCBOUEEgc3RhY2sgcGFnZXMgZXRjIGluIE5EQy4gQWxzbyBsb2NrcyBkb3duIE5JWCBTUS9DUS9SUS9SU1MgYW5kXG4gIDI5Olx0XHQgIE5QQSBBdXJhL1Bvb2wgY29udGV4dHMuXG4gIDMwOlx0XG4gIDMxOlx0Y29uZmlnIE9DVEVPTlRYMl9QRlxuICAzMjpcdFx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuICAzMzpcdFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXG4gIDM0Olx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiAgMzU6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAgMzY6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FFUyBpZiBNQUNTRUNcbiAgMzc6XHRcdGRlcGVuZHMgb24gKDY0QklUIFx1MDAyNlx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XG4gIDM4Olx0XHRzZWxlY3QgRElNTElCXG4gIDM5Olx0XHRkZXBlbmRzIG9uIFBDSVxuICA0MDpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICA0MTpcdFx0ZGVwZW5kcyBvbiBNQUNTRUMgfHwgIU1BQ1NFQ1xuICA0MjpcdFx0aGVscFxuICA0MzpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJiMzOTtzIE9jdGVvblRYMiBOSUMgcGh5c2ljYWwgZnVuY3Rpb24uXG4gIDQ0Olx0XG4gIDQ1Olx0Y29uZmlnIE9DVEVPTlRYMl9WRlxuICA0NjpcdFx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyXCYjMzQ7XG4gIDQ3Olx0XHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxuICA0ODpcdFx0aGVscFxuICA0OTpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJiMzOTtzIE9jdGVvblRYMiBOSUMgdmlydHVhbCBmdW5jdGlvbi5cbiAgNTA6XHRcbiAgNTE6XHRjb25maWcgUlZVX0VTV0lUQ0hcbiAgNTI6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgUlZVIEUtU3dpdGNoIHN1cHBvcnRcJiMzNDtcbiAgNTM6XHRcdGRlcGVuZHMgb24gT0NURU9OVFgyX1BGXG4gIDU0Olx0XHRkZWZhdWx0IG1cbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCYjMzk7cyBSVlUgRS1Td2l0Y2ggdGhhdFxuICA1NzpcdFx0ICBwcm92aWRlcyBpbnRlcm5hbCBTUklPViBwYWNrZXQgc3RlZXJpbmcgYW5kIHN3aXRjaGluZy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg1NAoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIERyaXZlciBSZWdpc3RyYXRpb24gZm9yIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQ3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaG93IHRoaXMgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBkcml2ZXIgcmVnaXN0ZXJzIGl0c2VsZiB3aXRoIHRoZSBQQ0kgc3lzdGVtLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbiBhbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgdGhlIENOOUsgb3IgQ04xMEsgY2hpcHMuIE15IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIHN0YW5kYXJkIFBDSSBkcml2ZXIgcmVnaXN0cmF0aW9uIHJvdXRpbmVzLiBTbywgSSYjMzk7bGwgc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIHJlbGV2YW50IGRpcmVjdG9yeSwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2AsIGZvciB0aGUgdGVsbC10YWxlIHNpZ25zOiBgbW9kdWxlX3BjaV9kcml2ZXJgIHdoaWNoIGlzIHRoZSBtYWNybyBhbmQgYHBjaV9yZWdpc3Rlcl9kcml2ZXJgLCB0aGUgZnVuY3Rpb24gaXRzZWxmLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludCBJJiMzOTttIGxvb2tpbmcgZm9yIGFuZCBwcm92aWRlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGFuYWx5emluZyB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyJiMzOTtzIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaV9yZWdpc3Rlcl9kcml2ZXJ8bW9kdWxlX3BjaV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9Mzc2MT1zdGF0aWMgaW50IF9faW5pdCBydnVfaW5pdF9tb2R1bGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzY2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6Mzc2NzpcdGVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2Y2d4X2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzY4LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzcwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6Mzc3MTpcdGVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2cHRwX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzcyLVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzc0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6Mzc3NTpcdGVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2bWNzX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzc2LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6Mzc3OTpcdGVyciA9ICBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNnJ2dV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc4MC1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0zNTkzPXN0YXRpYyBpbnQgX19pbml0IG90eDJfcnZ1cGZfaW5pdF9tb2R1bGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM1OTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjM1OTc6XHRyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZvdHgyX3BmX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM1OTgtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM9ODc1PXN0YXRpYyBpbnQgX19pbml0IG90eDJ2Zl9pbml0X21vZHVsZSh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtODc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYzo4Nzk6XHRyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZvdHgydmZfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtODgwLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmM9ODY5PXN0YXRpYyBpbnQgX19pbml0IHJ2dV9yZXBfaW5pdF9tb2R1bGUodm9pZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYy04NzAte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jOjg3MTpcdHJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNnJ2dV9yZXBfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYy04NzItfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTMwCgkJCQkJCQlvdXRwdXQ6IDEyOAoJCQkJCQkJdGhvdWdodHM6IDcyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBEcml2ZXJzKioKCk9rYXksIGxldCYjMzk7cyBnbyB0aHJvdWdoIHRoaXMgc3lzdGVtYXRpY2FsbHkuIFRoZSB0YXNrIGlzIHRvIGRldGVybWluZSBpZiB3ZSBzaG91bGQgYm90aGVyIGZ1enppbmcgdGhlIG1vZGlmaWVkIGNvZGUuIFRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBzYXkgd2UgY2FuIHNraXAgaXQgaWYgdGhlIGNoYW5nZXMgZmFsbCAqZXhjbHVzaXZlbHkqIGludG8gYSBjYXRlZ29yeSBsaWtlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gVGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgYWxsIHJlbGF0ZWQgdG8gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgaW50ZXJmYWNlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFsbCB0dWNrZWQgYXdheSBuZWF0bHkgdW5kZXIgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2AuCgpOb3csIHRoZSBPY3Rlb25UWDIsIHRoYXQmIzM5O3MgYSBNYXJ2ZWxsIFNtYXJ0TklDIG9yIFNvQyBuZXR3b3JrIHByb2Nlc3NvciAtIENOOUssIENOMTBLLCB0aGUgUlZVIGFyY2hpdGVjdHVyZS4gRnJvbSBteSB1bmRlcnN0YW5kaW5nLCB0aGlzICpkb2VzKiByZXF1aXJlIHBoeXNpY2FsIEFTSUMgb3IgUENJZSBjYXJkcyB0byBmdW5jdGlvbiwgb3IgYXQgbGVhc3QgZGVkaWNhdGVkIEFSTTY0IE9jdGVvblRYMiBoYXJkd2FyZS4gSXQmIzM5O3Mgbm90IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgcnVucyBpbiBhIHN0b2NrIFFFTVUgc2V0dXAsIHdoaWNoIGlzIHdoYXQgc3l6a2FsbGVyIHVzZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgaXNuJiMzOTt0IHNvbWUgY2xldmVyIHZpcnR1YWwgYnVzIG9yIHNvZnR3YXJlIGVtdWxhdGlvbiwgYnV0IGl0IGxvb2tzIGxpa2UgdGhlIGRlcGVuZGVuY2llcyBjaGVjayBmb3IgYDY0QklUYCwgYENPTVBJTEVfVEVTVGAsIGBBUk02NGAsIG9yIGBQQ0lgLCB3aGljaCBpbXBsaWVzIHRoYXQgdGhpcyByZXF1aXJlcyBQQ0kgZnVuY3Rpb25hbGl0eSBhbmQgaXMgbm90IGZ1bGx5IGFic3RyYWN0ZWQuCgpDaGVja2luZyB0aGUgZmlsZXMgYWdhaW46IGBydnVfbml4LmNgLCBgb3R4Ml9jb21tb24uY2AsIGBvdHgyX2NvbW1vbi5oYCwgYG90eDJfZGNibmwuY2AsIGBvdHgyX2V0aHRvb2wuY2AsIGBvdHgyX3BmLmNgLCBgb3R4Ml90Yy5jYCwgYW5kIGBxb3MuY2AuIFRoZXkgYXJlIGFsbCAqc3RyaWN0bHkqIHdpdGhpbiB0aGUgYG1hcnZlbGwvb2N0ZW9udHgyL2AgZGlyZWN0b3J5LCBzbyB0aGF0JiMzOTtzIHRoZSBkcml2ZXIuIFRoZSBkcml2ZXIgaW50ZXJmYWNlcyBkaXJlY3RseSB3aXRoIHRoZSBoYXJkd2FyZSwgbm90IGFuIGVtdWxhdGVkIGludGVyZmFjZS4gSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IGluIHNheWluZyBpdCBjb250cm9scyBwaHlzaWNhbCBPY3Rlb25UWDIvUlZVIE5JQ3MgYW5kIGRlcGVuZHMgb24gcGh5c2ljYWwgUENJZSBoYXJkd2FyZS4gSXQmIzM5O3Mgbm90IGdvaW5nIHRvIHJ1biBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAgb3IgdGhlIEdvb2dsZSBDbG91ZCBFbmdpbmUgZW52aXJvbm1lbnQgdGhhdCBTeXprYWxsZXIgdXNlcy4KClRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayBhbGwgdGhlIHJlcXVpcmVtZW50czogYFdvcnRoRnV6emluZzogZmFsc2VgLCBgRm9jdXNTeW1ib2xzOiBbXWAsIGBFbmFibGVDb25maWdzOiBbXWAsIGFuZCB0aGUgcmVhc29uaW5nIG5lZWRzIHRvIGJlIGNvbmNpc2UuCgpUaGUgcmVhc29uaW5nIGlzOiAmIzM0O1RoZSBtb2RpZmllZCBjb2RlIGlzIGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGFuZCBSVlUgZHJpdmVycyAoYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2ApLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZS9Tb0MgaGFyZHdhcmUgKE1hcnZlbGwgT2N0ZW9uVFgyL0NOOUsvQ04xMEspIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIFFFTVUvR0NFIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OwoKQWxyaWdodCwgdGhhdCBjb3ZlcnMgaXQuIExldCYjMzk7cyBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb2RlIGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGFuZCBSVlUgZHJpdmVycyAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIG1xcHJpbyBUQyBoYXJkd2FyZSBvZmZsb2FkIHN1cHBvcnQuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llL1NvQyBoYXJkd2FyZSAoTWFydmVsbCBPY3Rlb25UWDIgLyBSVlUpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29kZSBleGNsdXNpdmVseSB3aXRoaW4gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBhbmQgUlZVIGRyaXZlcnMgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyksIGFkZGluZyBtcXByaW8gVEMgaGFyZHdhcmUgb2ZmbG9hZCBzdXBwb3J0LiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZS9Tb0MgaGFyZHdhcmUgKE1hcnZlbGwgT2N0ZW9uVFgyIC8gUlZVKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzoxOTozMS4zODkxNTY3OTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTEzODM1NTkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvZGUgZXhjbHVzaXZlbHkgd2l0aGluIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgYW5kIFJWVSBkcml2ZXJzIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgbXFwcmlvIFRDIGhhcmR3YXJlIG9mZmxvYWQgc3VwcG9ydC4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUvU29DIGhhcmR3YXJlIChNYXJ2ZWxsIE9jdGVvblRYMiAvIFJWVSkgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzoxOTozMS4zODkxNjQ4ODRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODU3NjM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUxOGU5NDc0MWIxNDY1OGY1ZTE1OGY1NGNkNDdlZTcwNTM3Njg0ODRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAxMzoxOTozMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcXG5pbmRleCAxNTNlYjU3YmFkMDY3Li5jOWE0MzI2ZDcyNWQ4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xcbkBAIC0zMzEsOCArMzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLFxcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpXFxuK1xcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7XFxuK1xcdFxcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwicGNpZnVuYyAleCBtYXAgcGNpZnVuYyAleCBub3QgZXF1YWwsIGx2bD0ldSBzY2hxPSV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgcGNpZnVuYywgbWFwX2Z1bmMsIGx2bCwgc2NocSk7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xcbmluZGV4IDE3NTk5MjE4OGMxOGEuLmE1MTllMGE5N2EyYjcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xcbkBAIC02MTUsNiArNjE1LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XFxuIFxcbitzdGF0aWMgaW50XFxuK290eDJfbml4X3RtcV9yZWdfd3JpdGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgY250LFxcbitcXHRcXHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXFxuK1xcdFxcdCAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKVxcbit7XFxuK1xcdHN0cnVjdCBtYm94ICptYm94ID0gXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3g7XFxuK1xcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xcbitcXHRpbnQgaSwgZXJyO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XFxuK1xcdGlmICghcmVxKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXEtXFx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xcbitcXHRyZXEtXFx1MDAzZW51bV9yZWdzID0gY250O1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW2ldID0gcmVnX3ZhbFtpXTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4raW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0dTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107XFxuK1xcdHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107XFxuK1xcdGludCBlcnIsIHNtcSwgaSwgY250ID0gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZnZmLVxcdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXTsgaSsrKSB7XFxuK1xcdFxcdHNtcSA9IHBmdmYtXFx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcXG4rXFxuK1xcdFxcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFtjbnRdID0gMDtcXG4rXFx0XFx0Y250Kys7XFxuK1xcbitcXHRcXHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbY250XSA9IDA7XFxuK1xcdFxcdGNudCsrO1xcbitcXG4rXFx0XFx0aWYgKGNudCBcXHUwMDNjIE1BWF9SRUdTX1BFUl9NQk9YX01TRyAtIDEpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdFxcdGNudCA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChjbnQpIHtcXG4rXFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbitmYWlsOlxcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCBpbnQgdHhxLCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpXFxuK3tcXG4rXFx0c3RydWN0IG1ib3ggKm1ib3ggPSBcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveDtcXG4rXFx0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XFxuK1xcdGludCBlcnIsIHNtcSwgbiA9IDA7XFxuK1xcdHU2NCByZWdfYWRkclsyXTtcXG4rXFx0dTY0IHJlZ192YWxbMl07XFxuK1xcdHU2NCByYXRlO1xcbitcXG4rXFx0aWYgKCFtYXhyYXRlIFxcdTAwMjZcXHUwMDI2ICFtaW5yYXRlKSB7XFxuK1xcdFxcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcXG4rXFx0XFx0cmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFswXSA9IDA7XFxuK1xcdFxcdHJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbMV0gPSAwO1xcbitcXHRcXHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdH1cXG4rXFxuK1xcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xcbitcXHRpZiAoIXJlcSkge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmVxLVxcdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcXG4rXFxuK1xcdC8qIE1RUFJJTyBleHBvc2VzIG9ubHkgbWluL21heCByYXRlLCBub3QgYnVyc3QuICBQYXNzIGJ1cnN0IDAgc29cXG4rXFx0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxcbitcXHQgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzXFxuK1xcdCAqIGZyb20gdGhlIDY1NTM2IGJ5dGUgZGVmYXVsdCB1c2VkIGluIHRoZSBIVEIgcGF0aCwgd2hpY2ggaXMgYVxcbitcXHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcXG4rXFx0ICogaGFyZHdhcmUgY2FwLlxcbitcXHQgKlxcbitcXHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxcbitcXHQgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvblxcbitcXHQgKiBldmVyeSB1cGRhdGUgc28gb21pdHRlZCByYXRlcyBhcmUgYXBwbGllZCBleHBsaWNpdGx5IHJhdGhlciB0aGFuXFxuK1xcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXFxuK1xcdCAqL1xcbitcXHRyZXEtXFx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xcbitcXHRpZiAobWF4cmF0ZSkge1xcbitcXHRcXHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IDA7XFxuK1xcdH1cXG4rXFx0bisrO1xcbitcXG4rXFx0LyogQ0lSK1BJUiBzdXBwb3J0IGlzIHJlcXVpcmVkIGFuZCBjaGVja2VkIGF0IG1xcHJpbyBzZXR1cC4gKi9cXG4rXFx0cmVxLVxcdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0aWYgKG1pbnJhdGUpIHtcXG4rXFx0XFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSAwO1xcbitcXHR9XFxuK1xcdG4rKztcXG4rXFx0cmVxLVxcdTAwM2VudW1fcmVncyA9IG47XFxuK1xcbitcXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYylcXG4ge1xcbiBcXHR1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdO1xcbkBAIC02NTEsNyArNzg3LDExIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCh1NjQpaHctXFx1MDAzZXNtcV9saW5rX3R5cGUpO1xcbiBcXHRcXHRyZXEtXFx1MDAzZW51bV9yZWdzKys7XFxuIFxcdFxcdC8qIE1EUSBjb25maWcgKi9cXG4tXFx0XFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcXG4rXFx0XFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxcbitcXHRcXHRcXHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdWzBdO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XFxuK1xcbiBcXHRcXHRyZXEtXFx1MDAzZXJlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTtcXG4gXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbMV0gPSBwYXJlbnQgXFx1MDAzY1xcdTAwM2MgMTY7XFxuIFxcdFxcdHJlcS1cXHUwMDNlbnVtX3JlZ3MrKztcXG5AQCAtNzc5LDYgKzkxOSw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4gXFx0XFx0cmVxLVxcdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250O1xcbiBcXHR9XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXFxuK1xcdFxcdHJlcS1cXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFxuIFxcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94KTtcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuQEAgLTg0NCw2ICs5ODcsNyBAQCB2b2lkIG90eDJfdHhzY2hxX3N0b3Aoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXG4gXFx0LyogQ2xlYXIgdGhlIHR4c2NocSBsaXN0ICovXFxuIFxcdGZvciAobHZsID0gMDsgbHZsIFxcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCsrKSB7XFxuK1xcdFxcdHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXSA9IDA7XFxuIFxcdFxcdGZvciAoc2NocSA9IDA7IHNjaHEgXFx1MDAzYyBNQVhfVFhTQ0hRX1BFUl9GVU5DOyBzY2hxKyspXFxuIFxcdFxcdFxcdHBmdmYtXFx1MDAzZWh3LnR4c2NocV9saXN0W2x2bF1bc2NocV0gPSAwO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG5pbmRleCBlZWNlZTYxMmI3YjJjLi5lZGU3ZjExMTNiNzE0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG5AQCAtMTcsNiArMTcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc29jL21hcnZlbGwvc2lsaWNvbnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9tYWNzZWMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvcGt0X3NjaGVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RldmxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWU2NC5oXFx1MDAzZVxcbkBAIC00ODMsNiArNDg0LDIzIEBAIHN0cnVjdCBwZl9pcnFfZGF0YSB7XFxuIFxcdGludCBtZGV2cztcXG4gfTtcXG4gXFxuK3N0cnVjdCBtcV9vZmZsb2FkX3NuYXAge1xcbitcXHR1NjQgbWluX3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xcbitcXHR1NjQgbWF4X3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xcbitcXHRfX3U4IG51bV90YztcXG4rXFx0X191MTYgY291bnRbVENfUU9QVF9NQVhfUVVFVUVdO1xcbitcXHRfX3UxNiBvZmZzZXRbVENfUU9QVF9NQVhfUVVFVUVdO1xcbit9O1xcbitcXG4rc3RydWN0IG90eDJfbXFwcmlvIHtcXG4rXFx0dTMyXFx0ZmxhZ3M7XFxuK1xcdHU2NFxcdCptaW5fcmF0ZTtcXG4rXFx0dTY0XFx0Km1heF9yYXRlO1xcbitcXHRib29sXFx0cmF0ZV9saW1pdDtcXG4rXFx0Ym9vbFxcdHJlcGxhY2Vfc2V0dXBfZG9uZTtcXG4rXFx0Ym9vbFxcdHJlcGxhY2VfZ3JhZnRfZG9uZTtcXG4rfTtcXG4rXFxuIHN0cnVjdCBvdHgyX25pYyB7XFxuIFxcdHZvaWQgX19pb21lbVxcdFxcdCpyZWdfYmFzZTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2VcXHQqbmV0ZGV2O1xcbkBAIC01MTUsNiArNTMzLDEwIEBAIHN0cnVjdCBvdHgyX25pYyB7XFxuIFxcdHU2NFxcdFxcdFxcdGZsYWdzO1xcbiBcXHR1NjRcXHRcXHRcXHQqY3Ffb3BfYWRkcjtcXG4gXFxuK1xcdHN0cnVjdCBvdHgyX21xcHJpb1xcdG1xcHJpbztcXG4rXFx0c3RydWN0IG1xX29mZmxvYWRfc25hcFxcdCpjdXJfbXFfc25hcDtcXG4rXFx0c3RydWN0IG1xX29mZmxvYWRfc25hcFxcdCpvbGRfbXFfc25hcDtcXG4rXFxuIFxcdHN0cnVjdCBicGZfcHJvZ1xcdFxcdCp4ZHBfcHJvZztcXG4gXFx0c3RydWN0IG90eDJfcXNldFxcdHFzZXQ7XFxuIFxcdHN0cnVjdCBvdHgyX2h3XFx0XFx0aHc7XFxuQEAgLTEyNDYsNiArMTI2OCwxMSBAQCBkbWFfYWRkcl90IG90eDJfZG1hX21hcF9za2JfZnJhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VnLCBpbnQgKmxlbik7XFxuIHZvaWQgb3R4Ml9kbWFfdW5tYXBfc2tiX2ZyYWdzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNnX2xpc3QgKnNnKTtcXG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcXG4raW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLFxcbitcXHRcXHRcXHRcXHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcXG4raW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4gdm9pZCBvdHgyX3F1ZXVlX3ZmX3dvcmsoc3RydWN0IG1ib3ggKm13LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWJveF93cSxcXG4gXFx0XFx0XFx0aW50IGZpcnN0LCBpbnQgbWRldnMsIHU2NCBpbnRyKTtcXG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xcbmluZGV4IGYxMTBkZmE0MjM2MDUuLjRhNzBhYmMyMzBiZWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcXG5AQCAtNDEzLDYgKzQxMywxMiBAQCBzdGF0aWMgaW50IG90eDJfZGNibmxfaWVlZV9zZXRwZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpXFxuIFxcdHU4IG9sZF9wZmNfZW47XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgXFx1MDAyNlxcdTAwMjYgcGZjLVxcdTAwM2VwZmNfZW4pIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJQRkM6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0b2xkX3BmY19lbiA9IHBmdmYtXFx1MDAzZXBmY19lbjtcXG4gXFx0cGZ2Zi1cXHUwMDNlcGZjX2VuID0gcGZjLVxcdTAwM2VwZmNfZW47XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcXG5pbmRleCA5YmVlMWI5MWVlYWE2Li5lYzI2MDFjNmMyNTVhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xcbkBAIC0yODcsNiArMjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGNoYW5uZWwtXFx1MDAzZXR4X2NvdW50ICE9IHBmdmYtXFx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxcbitcXHQgICAgIGNoYW5uZWwtXFx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXFx1MDAzZWh3LnJ4X3F1ZXVlcykpIHtcXG4rXFx0XFx0bmV0ZGV2X2luZm8oZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcIk5vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIGNoYW5uZWwgY291bnQgd2hpbGUgTVEgcHJpbyBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGlmX3VwKVxcbiBcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zdG9wKGRldik7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbmluZGV4IGM5OTVmMjkwMDg1OTAuLjc5YTgyZTQ0NTQ1NDYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG5AQCAtMTk4MCw2ICsxOTgwLDEyIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZnJlZV9tZW07XFxuIFxcbitcXHRlcnIgPSBvdHgyX21xcHJpb191cChwZik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdG5ldGRldl9lcnIocGYtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVycyBkdXJpbmcgb3BlbjogJWQ7IGNvbnRpbnVpbmcgd2l0aG91dCBiYW5kd2lkdGggbGltaXRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBlcnIpO1xcbitcXG4gXFx0LyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovXFxuIFxcdGZvciAocWlkeCA9IDA7IHFpZHggXFx1MDAzYyBwZi1cXHUwMDNlaHcuY2ludF9jbnQ7IHFpZHgrKykge1xcbiBcXHRcXHRjcV9wb2xsID0gXFx1MDAyNnFzZXQtXFx1MDAzZW5hcGlbcWlkeF07XFxuQEAgLTI4NDYsNiArMjg1MiwxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4gXFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXFx1MDAzZW5ldGRldik7XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XFxuIFxcbitcXHRpZiAocHJvZyBcXHUwMDI2XFx1MDAyNiBwZi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHByb2cgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VtdHUgXFx1MDAzZSBNQVhfWERQX01UVSkge1xcbiBcXHRcXHRuZXRkZXZfd2FybihkZXYsIFxcXCJKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXFxuaW5kZXggMDM5ZmQ0N2ViZjUyMi4uYWJkNjZiMzY2MDA5YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xcbkBAIC0xNiw2ICsxNiw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNfYWN0L3RjX21pcnJlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjX2FjdC90Y192bGFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9zY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3NjaF9nZW5lcmljLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiY24xMGsuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm90eDJfY29tbW9uLmhcXFwiXFxuQEAgLTMxLDYgKzMzLDEwIEBAXFxuIFxcbiAjZGVmaW5lIE1DQVNUX0lOVkFMSURfR1JQXFx0XFx0KC0xVSlcXG4gI2RlZmluZSBSQVRFX01BTlRJU1NBX0JJVFNcXHRcXHQ4XFxuKy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqL1xcbisjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTXFx0MjUwMDAwVUxMXFxuKy8qIE1heCBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDEzMDgxNiBNYnBzKS4gKi9cXG4rI2RlZmluZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QU1xcdCgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpXFxuIFxcbiBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKVxcbkBAIC02MSw2ICs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcXG4gXFx0XFx0XFx0KmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgXFx1MDAzY1xcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uXFxuK1xcdFxcdCAqIENOMTBLKSwgbm90IGEgbWluaW1hbCBidXJzdC5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdCpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7XFxuIFxcdFxcdCpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTtcXG4gXFx0fVxcbkBAIC0xNjAwLDE0ICsxNjA5LDcxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0ICBuaWMsIG5pYywgaW5ncmVzcyk7XFxuIH1cXG4gXFxuKy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqL1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRkZXZtX2tmcmVlKHBmdmYtXFx1MDAzZWRldiwgcGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlKTtcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsIHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IE5VTEw7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IE5VTEw7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyA9IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIHJlcGxhY2luZylcXG4re1xcbitcXHR1MTYgbnVtX3R4cSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXG4rXFx0aWYgKHJlcGxhY2luZyBcXHUwMDI2XFx1MDAyNiBwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XFxuK1xcdFxcdG1lbXNldChwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUsIDAsXFxuK1xcdFxcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcXG4rXFx0XFx0bWVtc2V0KHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCxcXG4rXFx0XFx0ICAgICAgIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSkpO1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVxcdTAwM2VkZXYsIG51bV90eHEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cXHUwMDNlZGV2LCBudW1fdHhxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xcbitcXHRcXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZnJlZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKnNuYXApXFxuK3tcXG4rXFx0aWYgKCEqc25hcClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsICpzbmFwKTtcXG4rXFx0KnNuYXAgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3NuYXBfY29weShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqZHN0LFxcbitcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwO1xcbitcXHRpbnQgdGM7XFxuK1xcbitcXHRpZiAoISpkc3QpIHtcXG4rXFx0XFx0c25hcCA9IGRldm1fa3phbGxvYyhwZnZmLVxcdTAwM2VkZXYsIHNpemVvZigqc25hcCksIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIXNuYXApXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHQqZHN0ID0gc25hcDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c25hcCA9ICpkc3Q7XFxuK1xcdH1cXG4rXFxuK1xcdHNuYXAtXFx1MDAzZW51bV90YyA9IHFvcHQtXFx1MDAzZW51bV90YztcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgVENfUU9QVF9NQVhfUVVFVUU7IHRjKyspIHtcXG4rXFx0XFx0c25hcC1cXHUwMDNlY291bnRbdGNdID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXHRcXHRzbmFwLVxcdTAwM2VvZmZzZXRbdGNdID0gcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXTtcXG4rXFx0XFx0c25hcC1cXHUwMDNlbWluX3JhdGVbdGNdID0gMDtcXG4rXFx0XFx0c25hcC1cXHUwMDNlbWF4X3JhdGVbdGNdID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdHNuYXAtXFx1MDAzZW1pbl9yYXRlW3RjXSA9IG1xcHJpby1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxcbitcXHRcXHRcXHRzbmFwLVxcdTAwM2VtYXhfcmF0ZVt0Y10gPSBtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0cmV0dXJuIG90eDJfbXFwcmlvX3NuYXBfY29weShwZnZmLCBcXHUwMDI2cGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXAsIG1xcHJpbyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXFx1MDAyNnBmdmYtXFx1MDAzZW9sZF9tcV9zbmFwKTtcXG4rXFx0cGZ2Zi1cXHUwMDNlb2xkX21xX3NuYXAgPSBwZnZmLVxcdTAwM2VjdXJfbXFfc25hcDtcXG4rXFx0cGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXAgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gZmFsc2U7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0cmV0dXJuIHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9NRFFdICE9IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXAgPSBwZnZmLVxcdTAwM2VvbGRfbXFfc25hcDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFx0dTE2IG51bV90eHEgPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFx0aW50IHRjLCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghc25hcClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmLCBmYWxzZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRtZW1zZXQocGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlLCAwLCBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcXG4rXFx0bWVtc2V0KHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyA9IDA7XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBzbmFwLVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gc25hcC1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHR1NjQgbWF4X3JhdGUgPSBzbmFwLVxcdTAwM2VtYXhfcmF0ZVt0Y107XFxuK1xcbitcXHRcXHRpZiAobWluX3JhdGUpXFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NSU5fUkFURTtcXG4rXFx0XFx0aWYgKG1heF9yYXRlKVxcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUFYX1JBVEU7XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHNuYXAtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2Mgc25hcC1cXHUwMDNlb2Zmc2V0W3RjXSArIHNuYXAtXFx1MDAzZWNvdW50W3RjXTsgdHhxKyspIHtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHNuYXAtXFx1MDAzZW51bV90Yyk7XFxuK1xcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIHNuYXAtXFx1MDAzZW51bV90YzsgdGMrKylcXG4rXFx0XFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIHRjLCBzbmFwLVxcdTAwM2Vjb3VudFt0Y10sXFxuK1xcdFxcdFxcdFxcdCAgICBzbmFwLVxcdTAwM2VvZmZzZXRbdGNdKTtcXG4rXFxuK1xcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0Lyogb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoKSBjbGVhcnMgcmF0ZV9saW1pdCB3aGVuIG5kb19vcGVuKCkgZmFpbHMuXFxuK1xcdCAqIElmIG9wZW4gZmFpbGVkLCBUWCBzY2hlZHVsZXJzIHdlcmUgZnJlZWQ7IGRlZmVyIHNoYXBlciByZXN0b3JlIHRvIHRoZVxcbitcXHQgKiBuZXh0IHN1Y2Nlc3NmdWwgbmRvX29wZW4oKSB2aWEgb3R4Ml9tcXByaW9fdXAoKS5cXG4rXFx0ICovXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcXG4rXFxuK1xcdGlmIChwZnZmLVxcdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXSkge1xcbitcXHRcXHRlcnIgPSBvdHgyX21xcHJpb191cChwZnZmKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFxcdTAwMjZwZnZmLVxcdTAwM2VjdXJfbXFfc25hcCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXFx1MDAyNnBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwKTtcXG4rXFx0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFxcdTAwMjZwZnZmLVxcdTAwM2VvbGRfbXFfc25hcCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3N3KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cXHUwMDNlbmV0ZGV2O1xcbitcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgPSBmYWxzZTtcXG4rXFx0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcXG4rXFx0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTtcXG4rXFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rfVxcbitcXG4rLyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsXFxuKyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uXFxuKyAqIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93biAodGMgcWRpc2MgZGVsKSBhbmQgZXJyb3IgY2xlYW51cCwgbm90IG9uXFxuKyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLlxcbisgKi9cXG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhwZnZmLVxcdTAwM2VuZXRkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKVxcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XFxuK1xcbitcXHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcXG4rXFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihwZnZmLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGZhaWxlZCB0byBjbGVhciBoYXJkd2FyZSBzaGFwZXJzOiAlZDsgc29tZSBUWCBxdWV1ZXMgbWF5IHJldGFpbiBiYW5kd2lkdGggbGltaXRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBlcnIpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGludCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghcGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3IgKHR4cSA9IDA7IHR4cSBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xcbitcXHRcXHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XFxuK1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLmZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gcGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV07XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXTtcXG4rXFxuK1xcdFxcdGlmICghbWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgIW1heF9yYXRlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbWF4X3JhdGUpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHR4cSwgZXJyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvXFxuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxcbisgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cXG4rICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFyc1xcbisgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XFxuKyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duXFxuKyAqIHdpdGhvdXQgY2FsbGluZyBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieVxcbisgKiB0aGUgb3BlbiBlcnJvciBwYXRoLlxcbisgKlxcbisgKiBEbyBub3QgY2FsbCBkZXZfZGVhY3RpdmF0ZSgpL2Rldl9hY3RpdmF0ZSgpIGhlcmU6IHRoaXMgcnVucyBmcm9tXFxuKyAqIG5kb19zZXR1cF90YygpIHdoaWxlIHFkaXNjX2dyYWZ0KCkgbWF5IGFscmVhZHkgaG9sZCB0aGUgZGV2aWNlXFxuKyAqIGRlYWN0aXZhdGVkIGFuZCBtdXN0IHBlcmZvcm0gdGhlIGZpbmFsIGRldl9hY3RpdmF0ZSgpLlxcbisgKi9cXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXFxuK3tcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHQvKiBUT0RPOiBFeHBsb3JlIGxpdmUgVFggc2NoZWR1bGVyIHJlcHJvZ3JhbW1pbmcgdG8gYXZvaWQgYSBmdWxsXFxuK1xcdCAqIG5kb19zdG9wKCkvbmRvX29wZW4oKSBib3VuY2Ugb24gZXZlcnkgbXFwcmlvIGNoYW5nZS5cXG4rXFx0ICovXFxuK1xcdG5ldGRldl9pbmZvKG5ldGRldixcXG4rXFx0XFx0ICAgIFxcXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19zdG9wKG5ldGRldik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHQvKiBTZXQgYmVmb3JlIG5kb19vcGVuKCkgc28gb3R4Ml90eHNjaF9hbGxvYygpIHdpZGVucyBTTVEgYWxsb2NhdGlvbi5cXG4rXFx0ICogT24gdGVhcmRvd24sIGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlIHNvIG5kb19vcGVuKCkgZG9lcyBub3RcXG4rXFx0ICogcmUtYXBwbHkgYmFuZHdpZHRoIGxpbWl0cyB2aWEgb3R4Ml9tcXByaW9fdXAoKSBhZnRlciB0aGUga2VybmVsXFxuK1xcdCAqIHJlbW92ZWQgdGhlIHFkaXNjLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJhdGVfbGltaXQpXFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcXG4rXFxuK1xcdGVyciA9IG9wcy1cXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgZXJyKTtcXG4rXFx0XFx0LyogbmRvX29wZW4oKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXJzIG9uIGZhaWx1cmUgd2hpbGVcXG4rXFx0XFx0ICogbmV0aWZfcnVubmluZygpIG1heSBzdGlsbCBiZSB0cnVlOyBkcm9wIG1xcHJpbyBzb2Z0d2FyZSBzdGF0ZVxcbitcXHRcXHQgKiBvbmx5IGluc3RlYWQgb2Ygc2VuZGluZyBzaGFwZXIgY2xlYXJzIHRvIGZyZWVkIHF1ZXVlcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xcbitcXHRcXHQvKiBuZG9fb3BlbigpIHJvbGxzIGJhY2sgb24gZmFpbHVyZTsgbWFyayB0aGUgaW50ZXJmYWNlIGRvd24gc29cXG4rXFx0XFx0ICogbmV0aWZfY2xvc2UoKSBkb2VzIG5vdCBpbnZva2UgbmRvX3N0b3AoKSBvbiBmcmVlZCBOQVBJL3F1ZXVlXFxuK1xcdFxcdCAqIHN0YXRlLiBDYWxsZXIgaG9sZHMgUlROTDsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRwZnZmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xcbitcXHRcXHQvKiB2aXNpYmxlIHRvIG90eDJfc3RvcCgpIG9uIG90aGVyIGNwdXMgKi9cXG4rXFx0XFx0c21wX3dtYigpO1xcbitcXHRcXHRuZXRpZl9jbG9zZShuZXRkZXYpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHR1NjQgcmF0ZSwgdTMyIHFjb3VudCwgaW50IHRjLFxcbitcXHRcXHRcXHRcXHRcXHRjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGlmICghcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAocWNvdW50IFxcdTAwM2M9IDEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogVE9ETzogbXFwcmlvIG1pbl9yYXRlL21heF9yYXRlIGFyZSBwZXIgdHJhZmZpYyBjbGFzcywgYnV0IGJhbmR3aWR0aFxcbitcXHQgKiBvZmZsb2FkIHNoYXBlcyBvbiBwZXItcXVldWUgTURRIG5vZGVzIHBhcmVudGVkIHVuZGVyIGEgc2luZ2xlIFRMNC5cXG4rXFx0ICogV2l0aG91dCBwZXItVEMgVEw0IHNoYXBlcnMgdGhlIGRyaXZlciBjYW5ub3QgaG9ub3IgVEMtbGV2ZWwgbGltaXRzXFxuK1xcdCAqIGZvciBhIHRyYWZmaWMgY2xhc3MgdGhhdCBzcGFucyBtdWx0aXBsZSBxdWV1ZXMgd2l0aG91dCBlaXRoZXJcXG4rXFx0ICogZGl2aWRpbmcgdGhlIHJhdGUgYWNyb3NzIHF1ZXVlcyAodUFQSSBtaXNtYXRjaCkgb3IgZXhjZWVkaW5nIHRoZSBUQ1xcbitcXHQgKiBjYXAgd2hlbiBldmVyeSBtZW1iZXIgcXVldWUgaXMgYWN0aXZlLiBSZWplY3QgdW50aWwgcGVyLVRDIFRMNFxcbitcXHQgKiBzaGFwaW5nIGNhbiBiZSBpbXBsZW1lbnRlZCB3aXRob3V0IGFsbG9jYXRpbmcgYWRkaXRpb25hbCBUTDQgbm9kZXNcXG4rXFx0ICogYmV5b25kIHRoZSBleGlzdGluZyBoaWVyYXJjaHkuXFxuK1xcdCAqL1xcbitcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0ICAgXFxcIm1xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgbmFtZSwgdGMsIHFjb3VudCk7XFxuK1xcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBuYW1lLCB0YywgcWNvdW50KTtcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KVxcbit7XFxuK1xcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHUxNiBudW1fdHhxID0gcGZ2Zi1cXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XFxuK1xcdGludCB0YywgdHhxO1xcbitcXG4rXFx0aWYgKHFvcHQtXFx1MDAzZW51bV90YyBcXHUwMDNlIG51bV90eHEpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIHFvcHQtXFx1MDAzZW51bV90YywgbnVtX3R4cSk7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBxb3B0LVxcdTAwM2VudW1fdGMsIG51bV90eHEpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG51bV90eHEgXFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiTnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIHFvcHQtXFx1MDAzZW51bV90YzsgdGMrKykge1xcbitcXHRcXHR1MzIgcWNvdW50ID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXG4rXFx0XFx0Zm9yICh0eHEgPSBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdO1xcbitcXHRcXHQgICAgIHR4cSBcXHUwMDNjIHFvcHQtXFx1MDAzZW9mZnNldFt0Y10gKyBxY291bnQ7IHR4cSsrKSB7XFxuK1xcdFxcdFxcdGlmICh0eHEgXFx1MDAzZT0gbnVtX3R4cSkge1xcbitcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdHhxLCBudW1fdHhxKTtcXG4rXFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwibXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHR4cSwgbnVtX3R4cSk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpXFxuK3tcXG4rXFx0dTY0IG1icHM7XFxuK1xcbitcXHRpZiAoIXJhdGVfYnl0ZXNfcHMpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0aWYgKHJhdGVfYnl0ZXNfcHMgXFx1MDAzYyBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QUylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHJhdGVfYnl0ZXNfcHMgXFx1MDAzZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHJhdGVfYnl0ZXNfcHMgXFx1MDAzZSBkaXZfdTY0KFU2NF9NQVgsIDgpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRtYnBzID0gb3R4Ml9jb252ZXJ0X3JhdGUocmF0ZV9ieXRlc19wcyk7XFxuK1xcdHJldHVybiBpbG9nMihtYnBzIC8gMikgXFx1MDAzYz0gTUFYX1JBVEVfRVhQT05FTlQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxcbit7XFxuK1xcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFxcdTAwMjZtcXByaW8tXFx1MDAzZXFvcHQ7XFxuK1xcdGJvb2wgaGFkX21xcHJpbyA9IHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cXHUwMDNlbmV0ZGV2O1xcbitcXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSAwO1xcbitcXG4rXFx0LyogdGMgcWRpc2MgcmVwbGFjZSBydW5zIHNldHVwIG9uIHRoZSBuZXcgbXFwcmlvIGJlZm9yZSBkZXN0cm95aW5nIHRoZVxcbitcXHQgKiBvbGQgb25lLiByZXBsYWNlX3NldHVwX2RvbmUgYW5kIFRDX1JPT1RfR1JBRlQgZGlzdGluZ3Vpc2ggc3RhbGVcXG4rXFx0ICogb2xkLWluc3RhbmNlIHRlYXJkb3duIGZyb20gZ3JhZnQgZmFpbHVyZSBhZnRlciBzZXR1cC5cXG4rXFx0ICovXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lIFxcdTAwMjZcXHUwMDI2IHBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwKSB7XFxuK1xcdFxcdGVyciA9IDA7XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lKVxcbitcXHRcXHRcXHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0b3JlX29sZChwZnZmKTtcXG4rXFx0XFx0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cXG4rXFx0aWYgKCFoYWRfbXFwcmlvKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChpZl91cCkge1xcbitcXHRcXHRpbnQgZG93bl9lcnIsIGVycjtcXG4rXFxuK1xcdFxcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcXG4rXFx0XFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdHJldHVybiBkb3duX2VycjtcXG4rXFx0fVxcbitcXG4rXFx0LyogbmRvX3N0b3AoKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXIgVEwgbm9kZXM7IGRyb3Agc29mdHdhcmVcXG4rXFx0ICogc3RhdGUgb25seS5cXG4rXFx0ICovXFxuK1xcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby1cXHUwMDNlZXh0YWNrO1xcbitcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRib29sIHJlcGxhY2luZyA9IHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xcbitcXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbitcXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xcbitcXG4rXFx0aWYgKCFxb3B0LVxcdTAwM2VodylcXG4rXFx0XFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XFxuK1xcbitcXHRpZiAoIWlmX3VwKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobXFwcmlvLVxcdTAwM2VzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcXFxcblxcXCIsIG1xcHJpby1cXHUwMDNlc2hhcGVyKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssIFxcXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBtcXByaW8tXFx1MDAzZXNoYXBlcik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcXHUwMDI2cGZ2Zi1cXHUwMDNlaHcuY2FwX2ZsYWcpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVIrUElSIHN1cHBvcnRcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVIrUElSIHN1cHBvcnRcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXFx1MDAzZXBkZXYpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGZ2Zi1cXHUwMDNlcGZjX2VuKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGZ2Zi1cXHUwMDNleGRwX3Byb2cpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xcbitcXHRcXHR1MzIgcWNvdW50ID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcXG4rXFx0XFx0XFx0bWluX3JhdGUgPSBtcXByaW8tXFx1MDAzZW1pbl9yYXRlW3RjXTtcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXTtcXG4rXFxuK1xcdFxcdGlmIChtaW5fcmF0ZSBcXHUwMDI2XFx1MDAyNiBtYXhfcmF0ZSBcXHUwMDI2XFx1MDAyNiBtaW5fcmF0ZSBcXHUwMDNlIG1heF9yYXRlKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSkge1xcbitcXHRcXHRcXHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgcWNvdW50LCB0YywgXFxcIm1pblxcXCIpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKSB7XFxuK1xcdFxcdFxcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1heF9yYXRlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBxY291bnQsIHRjLCBcXFwibWF4XFxcIik7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1pbl9yYXRlKSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIG1pbl9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbWluX3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1heF9yYXRlKSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIG1heF9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhuZXRkZXYsIGV4dGFjaywgcW9wdCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19zdGFnZV9jdXIocGZ2ZiwgbXFwcmlvKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtXFx1MDAzZW5ldGRldiwgdHJ1ZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIHJlcGxhY2luZyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIG90eDJfbXFwcmlvX3VwKCkgbWF5IGhhdmUgcmVzdG9yZWQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZHVyaW5nXFxuK1xcdCAqIHRoZSByZXN0YXJ0IGFib3ZlLiBDbGVhciBldmVyeSBNRFEgc2hhcGVyIGJlZm9yZSBhcHBseWluZyB0aGUgbmV3XFxuK1xcdCAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlXFxuK1xcdCAqIGxpbWl0cyBpbiBoYXJkd2FyZS5cXG4rXFx0ICovXFxuK1xcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgPSBtcXByaW8tXFx1MDAzZWZsYWdzO1xcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcXG4rXFx0XFx0dTMyIHFjb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W3RjXTtcXG4rXFxuK1xcdFxcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUVxcbitcXHRcXHQgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWVcXG4rXFx0XFx0ICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLiBNdWx0aS1xdWV1ZSBUQ3Mgd2l0aCByYXRlc1xcbitcXHRcXHQgKiBhcmUgcmVqZWN0ZWQgYWJvdmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxcbitcXHRcXHRcXHRtaW5fcmF0ZSA9IG1xcHJpby1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxcbitcXHRcXHRcXHRtYXhfcmF0ZSA9IG1xcHJpby1cXHUwMDNlbWF4X3JhdGVbdGNdO1xcbitcXG4rXFx0XFx0Zm9yICh0eHEgPSBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdO1xcbitcXHRcXHQgICAgIHR4cSBcXHUwMDNjIHFvcHQtXFx1MDAzZW9mZnNldFt0Y10gKyBxY291bnQ7IHR4cSsrKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xcbitcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcXG4rXFxuK1xcdFxcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBwZnZmLVxcdTAwM2VjdXJfbXFfc25hcC1cXHUwMDNlbnVtX3RjKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwLVxcdTAwM2VudW1fdGM7IGkrKylcXG4rXFx0XFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwLVxcdTAwM2Vjb3VudFtpXSxcXG4rXFx0XFx0XFx0XFx0ICAgIHFvcHQtXFx1MDAzZW9mZnNldFtpXSk7XFxuK1xcbitcXHRxb3B0LVxcdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcXG4rXFxuK1xcdGlmIChyZXBsYWNpbmcpIHtcXG4rXFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IHRydWU7XFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0b3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rY2xlYW51cDpcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSAwO1xcbitcXHRpZiAocmVwbGFjaW5nKSB7XFxuK1xcdFxcdGludCByZXN0b3JlX2VyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xcbitcXG4rXFx0XFx0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcXG4rXFx0XFx0aWYgKHJlc3RvcmVfZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICByZXN0b3JlX2Vycik7XFxuK1xcdFxcdFxcdGlmIChleHRhY2spXFxuK1xcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQgYW5kIHByaW9yIGNvbmZpZ3VyYXRpb24gcm9sbGJhY2sgZmFpbGVkOiAlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICByZXN0b3JlX2Vycik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGlmIChleHRhY2spXFxuK1xcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkXFxcIik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XFxuK1xcdH1cXG4rXFx0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNfcm9vdF9xb3B0X29mZmxvYWQgKnJvb3QpXFxuK3tcXG4rXFx0c3dpdGNoIChyb290LVxcdTAwM2Vjb21tYW5kKSB7XFxuK1xcdGNhc2UgVENfUk9PVF9HUkFGVDpcXG4rXFx0XFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUpXFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSB0cnVlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XFxuK1xcbitcXHRpZiAoYmFzZS1cXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGNhcHMgPSBiYXNlLVxcdTAwM2VjYXBzO1xcbitcXHRjYXBzLVxcdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxcbiBcXHRcXHQgIHZvaWQgKnR5cGVfZGF0YSlcXG4ge1xcbiBcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19RVUVSWV9DQVBTOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XFxuIFxcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4gXFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xcbitcXHRjYXNlIFRDX1NFVFVQX1JPT1RfUURJU0M6XFxuK1xcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuQEAgLTE2MzIsNiArMjM0MSw3IEBAIEVYUE9SVF9TWU1CT0wob3R4Ml9pbml0X3RjKTtcXG4gdm9pZCBvdHgyX3NodXRkb3duX3RjKHN0cnVjdCBvdHgyX25pYyAqbmljKVxcbiB7XFxuIFxcdG90eDJfZGVzdHJveV90Y19mbG93X2xpc3QobmljKTtcXG4rXFx0b3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KG5pYyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChvdHgyX3NodXRkb3duX3RjKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xcbmluZGV4IDY5YzA5MTFlMjhlOTEuLmQ5YWYxODJlNTcyMWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuQEAgLTExOCw2ICsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4gXFx0LyogY29uZmlndXJlIFBJUiAqL1xcbiBcXHRtYXhyYXRlID0gKG5vZGUtXFx1MDAzZXJhdGUgXFx1MDAzZSBub2RlLVxcdTAwM2VjZWlsKSA/IG5vZGUtXFx1MDAzZXJhdGUgOiBub2RlLVxcdTAwM2VjZWlsO1xcbiBcXG4rXFx0LyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuXFxuK1xcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXFxuK1xcdCAqL1xcbiBcXHRjZmctXFx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cXG4gXFx0XFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcXG4gXFx0KCpudW1fcmVncykrKztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6MTk6MzEuODE4NDk5MjQyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDcwOTAwMTQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29kZSBleGNsdXNpdmVseSB3aXRoaW4gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBhbmQgUlZVIGRyaXZlcnMgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyksIGFkZGluZyBtcXByaW8gVEMgaGFyZHdhcmUgb2ZmbG9hZCBzdXBwb3J0LiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZS9Tb0MgaGFyZHdhcmUgKE1hcnZlbGwgT2N0ZW9uVFgyIC8gUlZVKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTE4ZTk0NzQxYjE0NjU4ZjVlMTU4ZjU0Y2Q0N2VlNzA1Mzc2ODQ4NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTM6MTk6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbmluZGV4IDE1M2ViNTdiYWQwNjcuLmM5YTQzMjZkNzI1ZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuQEAgLTMzMSw4ICszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcbitcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7XG4rXHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICBcInBjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcblwiLFxuK1x0XHRcdFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuaW5kZXggMTc1OTkyMTg4YzE4YS4uYTUxOWUwYTk3YTJiNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuQEAgLTYxNSw2ICs2MTUsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XG4gXG4rc3RhdGljIGludFxuK290eDJfbml4X3RtcV9yZWdfd3JpdGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgY250LFxuK1x0XHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXG4rXHRcdCAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKVxuK3tcbitcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuK1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4rXHRpbnQgaSwgZXJyO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcbitcdGlmICghcmVxKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdHJlcS1cdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcbitcdHJlcS1cdTAwM2VudW1fcmVncyA9IGNudDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4rXHRcdHJlcS1cdTAwM2VyZWdbaV0gPSByZWdfYWRkcltpXTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XG4rXHR9XG4rXG4rXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xuK1x0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbitcdGludCBlcnIsIHNtcSwgaSwgY250ID0gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV07IGkrKykge1xuK1x0XHRzbXEgPSBwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcbitcbitcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuK1x0XHRjbnQrKztcbitcbitcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuK1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuK1x0XHRjbnQrKztcbitcbitcdFx0aWYgKGNudCBcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4rXHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZmFpbDtcbitcdFx0Y250ID0gMDtcbitcdH1cbitcbitcdGlmIChjbnQpIHtcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4rXHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZmFpbDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK2ZhaWw6XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKVxuK3tcbitcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuK1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4rXHRpbnQgZXJyLCBzbXEsIG4gPSAwO1xuK1x0dTY0IHJlZ19hZGRyWzJdO1xuK1x0dTY0IHJlZ192YWxbMl07XG4rXHR1NjQgcmF0ZTtcbitcbitcdGlmICghbWF4cmF0ZSBcdTAwMjZcdTAwMjYgIW1pbnJhdGUpIHtcbitcdFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuK1x0XHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0XHRyZWdfdmFsWzBdID0gMDtcbitcdFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdFx0cmVnX3ZhbFsxXSA9IDA7XG4rXHRcdHJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdH1cbitcbitcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4rXHRpZiAoIXJlcSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4rXG4rXHQvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvXG4rXHQgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYXG4rXHQgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzXG4rXHQgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGFcbitcdCAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYVxuK1x0ICogaGFyZHdhcmUgY2FwLlxuK1x0ICpcbitcdCAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksXG4rXHQgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvblxuK1x0ICogZXZlcnkgdXBkYXRlIHNvIG9taXR0ZWQgcmF0ZXMgYXJlIGFwcGxpZWQgZXhwbGljaXRseSByYXRoZXIgdGhhblxuK1x0ICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS5cbitcdCAqL1xuK1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0aWYgKG1heHJhdGUpIHtcbitcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpO1xuK1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4rXHR9XG4rXHRuKys7XG4rXG4rXHQvKiBDSVIrUElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xuK1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuK1x0aWYgKG1pbnJhdGUpIHtcbitcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xuK1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4rXHR9XG4rXHRuKys7XG4rXHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBuO1xuK1xuK1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2Zvcl9wZmMpXG4ge1xuIFx0dTE2ICgqc2NocV9saXN0KVtNQVhfVFhTQ0hRX1BFUl9GVU5DXTtcbkBAIC02NTEsNyArNzg3LDExIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXG4gXHRcdFx0XHRcdFx0KHU2NClody1cdTAwM2VzbXFfbGlua190eXBlKTtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzKys7XG4gXHRcdC8qIE1EUSBjb25maWcgKi9cbi1cdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4rXHRcdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVswXTtcbitcdFx0ZWxzZVxuK1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4rXG4gXHRcdHJlcS1cdTAwM2VyZWdbMV0gPSBOSVhfQUZfTURRWF9QQVJFTlQoc2NocSk7XG4gXHRcdHJlcS1cdTAwM2VyZWd2YWxbMV0gPSBwYXJlbnQgXHUwMDNjXHUwMDNjIDE2O1xuIFx0XHRyZXEtXHUwMDNlbnVtX3JlZ3MrKztcbkBAIC03NzksNiArOTE5LDkgQEAgaW50IG90eDJfdHhzY2hfYWxsb2Moc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0XHRyZXEtXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1RMNF0gPSBjaGFuX2NudDtcbiBcdH1cbiBcbitcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuK1x0XHRyZXEtXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuK1xuIFx0cmMgPSBvdHgyX3N5bmNfbWJveF9tc2coXHUwMDI2cGZ2Zi1cdTAwM2VtYm94KTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuQEAgLTg0NCw2ICs5ODcsNyBAQCB2b2lkIG90eDJfdHhzY2hxX3N0b3Aoc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFxuIFx0LyogQ2xlYXIgdGhlIHR4c2NocSBsaXN0ICovXG4gXHRmb3IgKGx2bCA9IDA7IGx2bCBcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCsrKSB7XG4rXHRcdHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtsdmxdID0gMDtcbiBcdFx0Zm9yIChzY2hxID0gMDsgc2NocSBcdTAwM2MgTUFYX1RYU0NIUV9QRVJfRlVOQzsgc2NocSsrKVxuIFx0XHRcdHBmdmYtXHUwMDNlaHcudHhzY2hxX2xpc3RbbHZsXVtzY2hxXSA9IDA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuaW5kZXggZWVjZWU2MTJiN2IyYy4uZWRlN2YxMTEzYjcxNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuQEAgLTE3LDYgKzE3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zb2MvbWFydmVsbC9zaWxpY29ucy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29jL21hcnZlbGwvb2N0ZW9udHgyL2FzbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hY3NlYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9wa3Rfc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZTY0LmhcdTAwM2VcbkBAIC00ODMsNiArNDg0LDIzIEBAIHN0cnVjdCBwZl9pcnFfZGF0YSB7XG4gXHRpbnQgbWRldnM7XG4gfTtcbiBcbitzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwIHtcbitcdHU2NCBtaW5fcmF0ZVtUQ19RT1BUX01BWF9RVUVVRV07XG4rXHR1NjQgbWF4X3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xuK1x0X191OCBudW1fdGM7XG4rXHRfX3UxNiBjb3VudFtUQ19RT1BUX01BWF9RVUVVRV07XG4rXHRfX3UxNiBvZmZzZXRbVENfUU9QVF9NQVhfUVVFVUVdO1xuK307XG4rXG4rc3RydWN0IG90eDJfbXFwcmlvIHtcbitcdHUzMlx0ZmxhZ3M7XG4rXHR1NjRcdCptaW5fcmF0ZTtcbitcdHU2NFx0Km1heF9yYXRlO1xuK1x0Ym9vbFx0cmF0ZV9saW1pdDtcbitcdGJvb2xcdHJlcGxhY2Vfc2V0dXBfZG9uZTtcbitcdGJvb2xcdHJlcGxhY2VfZ3JhZnRfZG9uZTtcbit9O1xuK1xuIHN0cnVjdCBvdHgyX25pYyB7XG4gXHR2b2lkIF9faW9tZW1cdFx0KnJlZ19iYXNlO1xuIFx0c3RydWN0IG5ldF9kZXZpY2VcdCpuZXRkZXY7XG5AQCAtNTE1LDYgKzUzMywxMCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xuIFx0dTY0XHRcdFx0ZmxhZ3M7XG4gXHR1NjRcdFx0XHQqY3Ffb3BfYWRkcjtcbiBcbitcdHN0cnVjdCBvdHgyX21xcHJpb1x0bXFwcmlvO1xuK1x0c3RydWN0IG1xX29mZmxvYWRfc25hcFx0KmN1cl9tcV9zbmFwO1xuK1x0c3RydWN0IG1xX29mZmxvYWRfc25hcFx0Km9sZF9tcV9zbmFwO1xuK1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgKzEyNjgsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXG4rXHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li40YTcwYWJjMjMwYmVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxuIFx0dTggb2xkX3BmY19lbjtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjYgcGZjLVx1MDAzZXBmY19lbikge1xuK1x0XHRuZXRkZXZfZXJyKGRldixcbitcdFx0XHQgICBcIlBGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRvbGRfcGZjX2VuID0gcGZ2Zi1cdTAwM2VwZmNfZW47XG4gXHRwZnZmLVx1MDAzZXBmY19lbiA9IHBmYy1cdTAwM2VwZmNfZW47XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5pbmRleCA5YmVlMWI5MWVlYWE2Li5lYzI2MDFjNmMyNTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbkBAIC0yODcsNiArMjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjZcbitcdCAgICAoY2hhbm5lbC1cdTAwM2V0eF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxuK1x0ICAgICBjaGFubmVsLVx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXHUwMDNlaHcucnhfcXVldWVzKSkge1xuK1x0XHRuZXRkZXZfaW5mbyhkZXYsXG4rXHRcdFx0ICAgIFwiTm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4gXHRpZiAoaWZfdXApXG4gXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKGRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IGM5OTVmMjkwMDg1OTAuLjc5YTgyZTQ0NTQ1NDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5AQCAtMTk4MCw2ICsxOTgwLDEyIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZyZWVfbWVtO1xuIFxuK1x0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpO1xuK1x0aWYgKGVycilcbitcdFx0bmV0ZGV2X2VycihwZi1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICAgXCJtcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlcnMgZHVyaW5nIG9wZW46ICVkOyBjb250aW51aW5nIHdpdGhvdXQgYmFuZHdpZHRoIGxpbWl0c1xcblwiLFxuK1x0XHRcdCAgIGVycik7XG4rXG4gXHQvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi9cbiBcdGZvciAocWlkeCA9IDA7IHFpZHggXHUwMDNjIHBmLVx1MDAzZWh3LmNpbnRfY250OyBxaWR4KyspIHtcbiBcdFx0Y3FfcG9sbCA9IFx1MDAyNnFzZXQtXHUwMDNlbmFwaVtxaWR4XTtcbkBAIC0yODQ2LDYgKzI4NTIsMTIgQEAgc3RhdGljIGludCBvdHgyX3hkcF9zZXR1cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhwZi1cdTAwM2VuZXRkZXYpO1xuIFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcbiBcbitcdGlmIChwcm9nIFx1MDAyNlx1MDAyNiBwZi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCkge1xuK1x0XHRuZXRkZXZfZXJyKGRldixcbitcdFx0XHQgICBcIlhEUDogY2Fubm90IGF0dGFjaCB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZW10dSBcdTAwM2UgTUFYX1hEUF9NVFUpIHtcbiBcdFx0bmV0ZGV2X3dhcm4oZGV2LCBcIkp1bWJvIGZyYW1lcyBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIFhEUFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5pbmRleCAwMzlmZDQ3ZWJmNTIyLi5hYmQ2NmIzNjYwMDlhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuQEAgLTE2LDYgKzE2LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNfYWN0L3RjX21pcnJlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y192bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9zY2hlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L3NjaF9nZW5lcmljLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImNuMTBrLmhcIlxuICNpbmNsdWRlIFwib3R4Ml9jb21tb24uaFwiXG5AQCAtMzEsNiArMzMsMTAgQEBcbiBcbiAjZGVmaW5lIE1DQVNUX0lOVkFMSURfR1JQXHRcdCgtMVUpXG4gI2RlZmluZSBSQVRFX01BTlRJU1NBX0JJVFNcdFx0OFxuKy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqL1xuKyNkZWZpbmUgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFNcdDI1MDAwMFVMTFxuKy8qIE1heCBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDEzMDgxNiBNYnBzKS4gKi9cbisjZGVmaW5lIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTXHQoKE1BWF9CVVJTVF9TSVpFICogMTAwMDAwMFVMTCkgLyA4VUxMKVxuIFxuIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHRcdCAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKVxuQEAgLTYxLDYgKzY3LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxuIFx0XHRcdCpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMIFx1MDAzY1x1MDAzYyAoKmJ1cnN0X2V4cCAtIDcpKTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbitcdFx0LyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uXG4rXHRcdCAqIENOMTBLKSwgbm90IGEgbWluaW1hbCBidXJzdC5cbitcdFx0ICovXG4gXHRcdCpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7XG4gXHRcdCpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTtcbiBcdH1cbkBAIC0xNjAwLDE0ICsxNjA5LDcxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0ICBuaWMsIG5pYywgaW5ncmVzcyk7XG4gfVxuIFxuKy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqL1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKTtcbitcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKTtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlID0gTlVMTDtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlID0gTlVMTDtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gMDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgcmVwbGFjaW5nKVxuK3tcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcbitcdGlmIChyZXBsYWNpbmcgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIFx1MDAyNlx1MDAyNiBwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xuK1x0XHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUsIDAsXG4rXHRcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSkpO1xuK1x0XHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUsIDAsXG4rXHRcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkpO1xuK1x0XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbitcbitcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuK1x0XHRcdFx0XHQgICAgIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpLFxuK1x0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4rXHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSksXG4rXHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xuK1x0XHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2ZyZWUoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqc25hcClcbit7XG4rXHRpZiAoISpzbmFwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCAqc25hcCk7XG4rXHQqc25hcCA9IE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc25hcF9jb3B5KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbitcdFx0XHRcdCBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqZHN0LFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4re1xuK1x0Y29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXHUwMDI2bXFwcmlvLVx1MDAzZXFvcHQ7XG4rXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwO1xuK1x0aW50IHRjO1xuK1xuK1x0aWYgKCEqZHN0KSB7XG4rXHRcdHNuYXAgPSBkZXZtX2t6YWxsb2MocGZ2Zi1cdTAwM2VkZXYsIHNpemVvZigqc25hcCksIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIXNuYXApXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdCpkc3QgPSBzbmFwO1xuK1x0fSBlbHNlIHtcbitcdFx0c25hcCA9ICpkc3Q7XG4rXHR9XG4rXG4rXHRzbmFwLVx1MDAzZW51bV90YyA9IHFvcHQtXHUwMDNlbnVtX3RjO1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBUQ19RT1BUX01BWF9RVUVVRTsgdGMrKykge1xuK1x0XHRzbmFwLVx1MDAzZWNvdW50W3RjXSA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuK1x0XHRzbmFwLVx1MDAzZW9mZnNldFt0Y10gPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4rXHRcdHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdID0gMDtcbitcdFx0c25hcC1cdTAwM2VtYXhfcmF0ZVt0Y10gPSAwO1xuK1x0fVxuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRzbmFwLVx1MDAzZW1pbl9yYXRlW3RjXSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdHNuYXAtXHUwMDNlbWF4X3JhdGVbdGNdID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3N0YWdlX2N1cihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbit7XG4rXHRyZXR1cm4gb3R4Ml9tcXByaW9fc25hcF9jb3B5KHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlY3VyX21xX3NuYXAsIG1xcHJpbyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCk7XG4rXHRwZnZmLVx1MDAzZW9sZF9tcV9zbmFwID0gcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcDtcbitcdHBmdmYtXHUwMDNlY3VyX21xX3NuYXAgPSBOVUxMO1xuK31cbitcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgPSBmYWxzZTtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IGZhbHNlO1xuK31cbitcbitzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRyZXR1cm4gcGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfTURRXSAhPSAwO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwID0gcGZ2Zi1cdTAwM2VvbGRfbXFfc25hcDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcdGludCB0YywgdHhxLCBlcnI7XG4rXG4rXHRpZiAoIXNuYXApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2ZiwgZmFsc2UpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcbitcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpKTtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gMDtcbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2Mgc25hcC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gc25hcC1cdTAwM2VtaW5fcmF0ZVt0Y107XG4rXHRcdHU2NCBtYXhfcmF0ZSA9IHNuYXAtXHUwMDNlbWF4X3JhdGVbdGNdO1xuK1xuK1x0XHRpZiAobWluX3JhdGUpXG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUlOX1JBVEU7XG4rXHRcdGlmIChtYXhfcmF0ZSlcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NQVhfUkFURTtcbitcbitcdFx0Zm9yICh0eHEgPSBzbmFwLVx1MDAzZW9mZnNldFt0Y107XG4rXHRcdCAgICAgdHhxIFx1MDAzYyBzbmFwLVx1MDAzZW9mZnNldFt0Y10gKyBzbmFwLVx1MDAzZWNvdW50W3RjXTsgdHhxKyspIHtcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7XG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHNuYXAtXHUwMDNlbnVtX3RjKTtcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2Mgc25hcC1cdTAwM2VudW1fdGM7IHRjKyspXG4rXHRcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCB0Yywgc25hcC1cdTAwM2Vjb3VudFt0Y10sXG4rXHRcdFx0XHQgICAgc25hcC1cdTAwM2VvZmZzZXRbdGNdKTtcbitcbitcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XG4rXHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0Lyogb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoKSBjbGVhcnMgcmF0ZV9saW1pdCB3aGVuIG5kb19vcGVuKCkgZmFpbHMuXG4rXHQgKiBJZiBvcGVuIGZhaWxlZCwgVFggc2NoZWR1bGVycyB3ZXJlIGZyZWVkOyBkZWZlciBzaGFwZXIgcmVzdG9yZSB0byB0aGVcbitcdCAqIG5leHQgc3VjY2Vzc2Z1bCBuZG9fb3BlbigpIHZpYSBvdHgyX21xcHJpb191cCgpLlxuK1x0ICovXG4rXHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcbitcbitcdGlmIChwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdKSB7XG4rXHRcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmdmYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCk7XG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3N3KHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4rXG4rXHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gZmFsc2U7XG4rXHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuK1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTtcbitcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rfVxuK1xuKy8qIFRlYXIgZG93biBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQ6IGNsZWFyIHBlci1xdWV1ZSBzaGFwZXJzLFxuKyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uXG4rICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb25cbisgKiByb3V0aW5lIG5ldGRldiBzdG9wL29wZW4gY3ljbGVzIHdoZXJlIHRoZSBvZmZsb2FkIHN0YXlzIGFjdGl2ZS5cbisgKi9cbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcocGZ2Zi1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpXG4rXHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbitcbitcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuK1xuK1x0aWYgKGVycikge1xuK1x0XHRuZXRkZXZfZXJyKHBmdmYtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgIFwibXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgaGFyZHdhcmUgc2hhcGVyczogJWQ7IHNvbWUgVFggcXVldWVzIG1heSByZXRhaW4gYmFuZHdpZHRoIGxpbWl0c1xcblwiLFxuK1x0XHRcdCAgIGVycik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGludCB0eHEsIGVycjtcbitcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRmb3IgKHR4cSA9IDA7IHR4cSBcdTAwM2MgcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlczsgdHhxKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuK1xuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdG1pbl9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXTtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbitcdFx0XHRtYXhfcmF0ZSA9IHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV07XG4rXG4rXHRcdGlmICghbWluX3JhdGUgXHUwMDI2XHUwMDI2ICFtYXhfcmF0ZSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLFxuK1x0XHRcdFx0XHRcdCAgIG1heF9yYXRlKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlciBmb3IgdHhxICVkOiAlZFxcblwiLFxuK1x0XHRcdFx0ICAgdHhxLCBlcnIpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW9cbisgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSlcbisgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cbisgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzXG4rICogY2Fycmllciwgc3RvcHMgYWxsIFRYIHF1ZXVlcywgdGVhcnMgZG93biBJUlFzL05BUEkgYW5kIGRyb3BzIGluLWZsaWdodFxuKyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duXG4rICogd2l0aG91dCBjYWxsaW5nIG5kb19zdG9wKCkgYWdhaW4gb24gcmVzb3VyY2VzIGFscmVhZHkgdG9ybiBkb3duIGJ5XG4rICogdGhlIG9wZW4gZXJyb3IgcGF0aC5cbisgKlxuKyAqIERvIG5vdCBjYWxsIGRldl9kZWFjdGl2YXRlKCkvZGV2X2FjdGl2YXRlKCkgaGVyZTogdGhpcyBydW5zIGZyb21cbisgKiBuZG9fc2V0dXBfdGMoKSB3aGlsZSBxZGlzY19ncmFmdCgpIG1heSBhbHJlYWR5IGhvbGQgdGhlIGRldmljZVxuKyAqIGRlYWN0aXZhdGVkIGFuZCBtdXN0IHBlcmZvcm0gdGhlIGZpbmFsIGRldl9hY3RpdmF0ZSgpLlxuKyAqL1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KVxuK3tcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzO1xuK1x0aW50IGVycjtcbitcbitcdC8qIFRPRE86IEV4cGxvcmUgbGl2ZSBUWCBzY2hlZHVsZXIgcmVwcm9ncmFtbWluZyB0byBhdm9pZCBhIGZ1bGxcbitcdCAqIG5kb19zdG9wKCkvbmRvX29wZW4oKSBib3VuY2Ugb24gZXZlcnkgbXFwcmlvIGNoYW5nZS5cbitcdCAqL1xuK1x0bmV0ZGV2X2luZm8obmV0ZGV2LFxuK1x0XHQgICAgXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcblwiKTtcbitcbitcdGVyciA9IG9wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLlxuK1x0ICogT24gdGVhcmRvd24sIGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlIHNvIG5kb19vcGVuKCkgZG9lcyBub3RcbitcdCAqIHJlLWFwcGx5IGJhbmR3aWR0aCBsaW1pdHMgdmlhIG90eDJfbXFwcmlvX3VwKCkgYWZ0ZXIgdGhlIGtlcm5lbFxuK1x0ICogcmVtb3ZlZCB0aGUgcWRpc2MuXG4rXHQgKi9cbitcdGlmIChyYXRlX2xpbWl0KVxuK1x0XHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcbitcdGVsc2VcbitcdFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XG4rXG4rXHRlcnIgPSBvcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbitcdGlmIChlcnIpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXG5cIixcbitcdFx0XHQgICBlcnIpO1xuK1x0XHQvKiBuZG9fb3BlbigpIGFscmVhZHkgZnJlZWQgdGhlIFRYIHNjaGVkdWxlcnMgb24gZmFpbHVyZSB3aGlsZVxuK1x0XHQgKiBuZXRpZl9ydW5uaW5nKCkgbWF5IHN0aWxsIGJlIHRydWU7IGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlXG4rXHRcdCAqIG9ubHkgaW5zdGVhZCBvZiBzZW5kaW5nIHNoYXBlciBjbGVhcnMgdG8gZnJlZWQgcXVldWVzLlxuK1x0XHQgKi9cbitcdFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XG4rXHRcdC8qIG5kb19vcGVuKCkgcm9sbHMgYmFjayBvbiBmYWlsdXJlOyBtYXJrIHRoZSBpbnRlcmZhY2UgZG93biBzb1xuK1x0XHQgKiBuZXRpZl9jbG9zZSgpIGRvZXMgbm90IGludm9rZSBuZG9fc3RvcCgpIG9uIGZyZWVkIE5BUEkvcXVldWVcbitcdFx0ICogc3RhdGUuIENhbGxlciBob2xkcyBSVE5MOyBkZXZfY2xvc2UoKSB3b3VsZCBkZWFkbG9jay5cbitcdFx0ICovXG4rXHRcdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjtcbitcdFx0LyogdmlzaWJsZSB0byBvdHgyX3N0b3AoKSBvbiBvdGhlciBjcHVzICovXG4rXHRcdHNtcF93bWIoKTtcbitcdFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcbitcdH1cbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4rXHRcdFx0XHRcdHU2NCByYXRlLCB1MzIgcWNvdW50LCBpbnQgdGMsXG4rXHRcdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0aWYgKCFyYXRlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChxY291bnQgXHUwMDNjPSAxKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFRPRE86IG1xcHJpbyBtaW5fcmF0ZS9tYXhfcmF0ZSBhcmUgcGVyIHRyYWZmaWMgY2xhc3MsIGJ1dCBiYW5kd2lkdGhcbitcdCAqIG9mZmxvYWQgc2hhcGVzIG9uIHBlci1xdWV1ZSBNRFEgbm9kZXMgcGFyZW50ZWQgdW5kZXIgYSBzaW5nbGUgVEw0LlxuK1x0ICogV2l0aG91dCBwZXItVEMgVEw0IHNoYXBlcnMgdGhlIGRyaXZlciBjYW5ub3QgaG9ub3IgVEMtbGV2ZWwgbGltaXRzXG4rXHQgKiBmb3IgYSB0cmFmZmljIGNsYXNzIHRoYXQgc3BhbnMgbXVsdGlwbGUgcXVldWVzIHdpdGhvdXQgZWl0aGVyXG4rXHQgKiBkaXZpZGluZyB0aGUgcmF0ZSBhY3Jvc3MgcXVldWVzICh1QVBJIG1pc21hdGNoKSBvciBleGNlZWRpbmcgdGhlIFRDXG4rXHQgKiBjYXAgd2hlbiBldmVyeSBtZW1iZXIgcXVldWUgaXMgYWN0aXZlLiBSZWplY3QgdW50aWwgcGVyLVRDIFRMNFxuK1x0ICogc2hhcGluZyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aG91dCBhbGxvY2F0aW5nIGFkZGl0aW9uYWwgVEw0IG5vZGVzXG4rXHQgKiBiZXlvbmQgdGhlIGV4aXN0aW5nIGhpZXJhcmNoeS5cbitcdCAqL1xuK1x0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdCAgIFwibXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXFxuXCIsXG4rXHRcdCAgIG5hbWUsIHRjLCBxY291bnQpO1xuK1x0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwibXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXCIsXG4rXHRcdFx0ICAgICAgIG5hbWUsIHRjLCBxY291bnQpO1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpXG4re1xuK1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcdGludCB0YywgdHhxO1xuK1xuK1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBudW1fdHhxKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcblwiLFxuK1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcIixcbitcdFx0XHRcdCAgICAgICBxb3B0LVx1MDAzZW51bV90YywgbnVtX3R4cSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKG51bV90eHEgXHUwMDNlIE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcblwiLFxuK1x0XHRcdCAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuK1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIk51bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XCIsXG4rXHRcdFx0XHQgICAgICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdGZvciAodHhxID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICsgcWNvdW50OyB0eHErKykge1xuK1x0XHRcdGlmICh0eHEgXHUwMDNlPSBudW1fdHhxKSB7XG4rXHRcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdFx0ICAgXCJtcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXG5cIixcbitcdFx0XHRcdFx0ICAgdHhxLCBudW1fdHhxKTtcbitcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVwiLFxuK1x0XHRcdFx0XHRcdCAgICAgICB0eHEsIG51bV90eHEpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fcmF0ZV92YWxpZCh1NjQgcmF0ZV9ieXRlc19wcylcbit7XG4rXHR1NjQgbWJwcztcbitcbitcdGlmICghcmF0ZV9ieXRlc19wcylcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2MgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIGRpdl91NjQoVTY0X01BWCwgOCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTtcbitcdHJldHVybiBpbG9nMihtYnBzIC8gMikgXHUwMDNjPSBNQVhfUkFURV9FWFBPTkVOVDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuK1x0Ym9vbCBoYWRfbXFwcmlvID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgZXJyO1xuK1xuK1x0cW9wdC1cdTAwM2VodyA9IDA7XG4rXG4rXHQvKiB0YyBxZGlzYyByZXBsYWNlIHJ1bnMgc2V0dXAgb24gdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlXG4rXHQgKiBvbGQgb25lLiByZXBsYWNlX3NldHVwX2RvbmUgYW5kIFRDX1JPT1RfR1JBRlQgZGlzdGluZ3Vpc2ggc3RhbGVcbitcdCAqIG9sZC1pbnN0YW5jZSB0ZWFyZG93biBmcm9tIGdyYWZ0IGZhaWx1cmUgYWZ0ZXIgc2V0dXAuXG4rXHQgKi9cbitcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlY3VyX21xX3NuYXApIHtcbitcdFx0ZXJyID0gMDtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSlcbitcdFx0XHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xuK1x0XHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cbitcdGlmICghaGFkX21xcHJpbylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoaWZfdXApIHtcbitcdFx0aW50IGRvd25fZXJyLCBlcnI7XG4rXG4rXHRcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbitcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0cmV0dXJuIGRvd25fZXJyO1xuK1x0fVxuK1xuK1x0LyogbmRvX3N0b3AoKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXIgVEwgbm9kZXM7IGRyb3Agc29mdHdhcmVcbitcdCAqIHN0YXRlIG9ubHkuXG4rXHQgKi9cbitcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4re1xuK1x0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gbXFwcmlvLVx1MDAzZWV4dGFjaztcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdGJvb2wgcmVwbGFjaW5nID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xuK1xuK1x0aWYgKCFxb3B0LVx1MDAzZWh3KVxuK1x0XHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbitcbitcdGlmICghaWZfdXApIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChtcXByaW8tXHUwMDNlc2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcblwiLCBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssIFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcIixcbitcdFx0XHRcdCAgICAgICBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKGlzX290eDJfc2RwX3JlcChwZnZmLVx1MDAzZXBkZXYpKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKHBmdmYtXHUwMDNlcGZjX2VuKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAocGZ2Zi1cdTAwM2V4ZHBfcHJvZykge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdG1pbl9yYXRlID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4rXHRcdFx0bWF4X3JhdGUgPSBtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdO1xuK1xuK1x0XHRpZiAobWluX3JhdGUgXHUwMDI2XHUwMDI2IG1heF9yYXRlIFx1MDAyNlx1MDAyNiBtaW5fcmF0ZSBcdTAwM2UgbWF4X3JhdGUpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxuXCIsXG4rXHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcbitcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgICAgIFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXCIsXG4rXHRcdFx0XHRcdCAgICAgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSkge1xuK1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1pbl9yYXRlLFxuK1x0XHRcdFx0XHRcdFx0ICAgcWNvdW50LCB0YywgXCJtaW5cIik7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpIHtcbitcdFx0XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSxcbitcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsIFwibWF4XCIpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWluX3JhdGUpKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cIixcbitcdFx0XHRcdCAgIG1pbl9yYXRlLCB0Yyk7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcIixcbitcdFx0XHRcdFx0ICAgICAgIG1pbl9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtYXhfcmF0ZSkpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xcblwiLFxuK1x0XHRcdFx0ICAgbWF4X3JhdGUsIHRjKTtcbitcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgICAgIFwibXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1wiLFxuK1x0XHRcdFx0XHQgICAgICAgbWF4X3JhdGUsIHRjKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhuZXRkZXYsIGV4dGFjaywgcW9wdCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHBmdmYsIG1xcHJpbyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi1cdTAwM2VuZXRkZXYsIHRydWUpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2ZiwgcmVwbGFjaW5nKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIG90eDJfbXFwcmlvX3VwKCkgbWF5IGhhdmUgcmVzdG9yZWQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZHVyaW5nXG4rXHQgKiB0aGUgcmVzdGFydCBhYm92ZS4gQ2xlYXIgZXZlcnkgTURRIHNoYXBlciBiZWZvcmUgYXBwbHlpbmcgdGhlIG5ld1xuK1x0ICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGVcbitcdCAqIGxpbWl0cyBpbiBoYXJkd2FyZS5cbitcdCAqL1xuK1x0aWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHtcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gbXFwcmlvLVx1MDAzZWZsYWdzO1xuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbitcbitcdFx0LyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRXG4rXHRcdCAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZVxuK1x0XHQgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuIE11bHRpLXF1ZXVlIFRDcyB3aXRoIHJhdGVzXG4rXHRcdCAqIGFyZSByZWplY3RlZCBhYm92ZS5cbitcdFx0ICovXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdG1pbl9yYXRlID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4rXHRcdFx0bWF4X3JhdGUgPSBtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdO1xuK1xuK1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbitcdFx0ICAgICB0eHEgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcbitcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XFxuXCIsXG4rXHRcdFx0XHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuK1xuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4rXG4rXHRcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXG4rXHRcdFx0XHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHRcdH1cbitcdH1cbitcbitcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcC1cdTAwM2VudW1fdGMpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcC1cdTAwM2VudW1fdGM7IGkrKylcbitcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHBmdmYtXHUwMDNlY3VyX21xX3NuYXAtXHUwMDNlY291bnRbaV0sXG4rXHRcdFx0XHQgICAgcW9wdC1cdTAwM2VvZmZzZXRbaV0pO1xuK1xuK1x0cW9wdC1cdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcbitcbitcdGlmIChyZXBsYWNpbmcpIHtcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gdHJ1ZTtcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gZmFsc2U7XG4rXHR9IGVsc2Uge1xuK1x0XHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK1xuK2NsZWFudXA6XG4rXHRxb3B0LVx1MDAzZWh3ID0gMDtcbitcdGlmIChyZXBsYWNpbmcpIHtcbitcdFx0aW50IHJlc3RvcmVfZXJyID0gb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQocGZ2Zik7XG4rXG4rXHRcdG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7XG4rXHRcdGlmIChyZXN0b3JlX2Vycikge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkIGFuZCBwcmlvciBjb25maWd1cmF0aW9uIHJvbGxiYWNrIGZhaWxlZDogJWRcXG5cIixcbitcdFx0XHRcdCAgIHJlc3RvcmVfZXJyKTtcbitcdFx0XHRpZiAoZXh0YWNrKVxuK1x0XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdFx0ICAgICAgIFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkXCIsXG4rXHRcdFx0XHRcdFx0ICAgICAgIHJlc3RvcmVfZXJyKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFxcblwiKTtcbitcdFx0XHRpZiAoZXh0YWNrKVxuK1x0XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0XHQgICBcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IHByaW9yIGNvbmZpZ3VyYXRpb24gcmVzdG9yZWRcIik7XG4rXHRcdH1cbitcdFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XG4rXHR9XG4rXHRvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdCAgICAgIHN0cnVjdCB0Y19yb290X3FvcHRfb2ZmbG9hZCAqcm9vdClcbit7XG4rXHRzd2l0Y2ggKHJvb3QtXHUwMDNlY29tbWFuZCkge1xuK1x0Y2FzZSBUQ19ST09UX0dSQUZUOlxuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lKVxuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IHRydWU7XG4rXHRcdHJldHVybiAwO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpXG4re1xuK1x0c3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTtcbitcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcztcbitcbitcdGlmIChiYXNlLVx1MDAzZXR5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRjYXBzID0gYmFzZS1cdTAwM2VjYXBzO1xuK1x0Y2Fwcy1cdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuIFx0XHQgIHZvaWQgKnR5cGVfZGF0YSlcbiB7XG4gXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgVENfUVVFUllfQ0FQUzpcbitcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XG4rXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcbitcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcbitcdGNhc2UgVENfU0VUVVBfUk9PVF9RRElTQzpcbitcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcm9vdChuZXRkZXZfcHJpdihuZXRkZXYpLCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuQEAgLTE2MzIsNiArMjM0MSw3IEBAIEVYUE9SVF9TWU1CT0wob3R4Ml9pbml0X3RjKTtcbiB2b2lkIG90eDJfc2h1dGRvd25fdGMoc3RydWN0IG90eDJfbmljICpuaWMpXG4ge1xuIFx0b3R4Ml9kZXN0cm95X3RjX2Zsb3dfbGlzdChuaWMpO1xuK1x0b3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KG5pYyk7XG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9zaHV0ZG93bl90Yyk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5pbmRleCA2OWMwOTExZTI4ZTkxLi5kOWFmMTgyZTU3MjFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbkBAIC0xMTgsNiArMTE4LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9jb25maWdfc2NoZWRfc2hhcGluZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4gXHQvKiBjb25maWd1cmUgUElSICovXG4gXHRtYXhyYXRlID0gKG5vZGUtXHUwMDNlcmF0ZSBcdTAwM2Ugbm9kZS1cdTAwM2VjZWlsKSA/IG5vZGUtXHUwMDNlcmF0ZSA6IG5vZGUtXHUwMDNlY2VpbDtcbiBcbitcdC8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhblxuK1x0ICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS5cbitcdCAqL1xuIFx0Y2ZnLVx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cbiBcdFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcbiBcdCgqbnVtX3JlZ3MpKys7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzoxOTozMS44MTg1MDE5NTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTAyMjg0ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIE9jdGVvblRYMiBOSUMgRHJpdmVyKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyBpdHMgc2NvcGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHNlZSB3aGljaCBmaWxlcyBhcmUgYmVpbmcgbW9kaWZpZWQuIE9rYXksIGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGEgc3Vic3RhbnRpYWwgdXBkYXRlOlxuXG5gZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jYFxuYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jYFxuYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oYFxuYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNgXG5gZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jYFxuYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNgXG5gZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY2BcbmBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNgXG5cblJpZ2h0LCB0aGUgYG9jdGVvbnR4MmAgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlci4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGZvciBtZSBpczogaXMgdGhpcyBoYXJkd2FyZS1kZXBlbmRlbnQsIG9yIGNhbiBJIHJlcHJvZHVjZSB0aGlzIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQ/IElzIHRoaXMgdGllZCB0byB0aGUgQ045SywgQ04xMEsgcGh5c2ljYWwgQVNJQywgb3IgUENJZSBoYXJkd2FyZT8gT3IgY2FuIEkgdGVzdCB0aGlzIGluIFFFTVUgb3IgZXZlbiBzeXprYWxsZXI/IEknbGwgbmVlZCB0byBkbyBzb21lIGRpZ2dpbmcsIHByb2JhYmx5IHVzaW5nIGBncmVwYCBvciBjaGVja2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBgb2N0ZW9udHgyYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1ODQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzoxOTozNS4zMjA3OTA0OTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxMTA1MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9DVEVPTlRYMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6Njpjb25maWcgT0NURU9OVFgyX01CT1hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTctXFx0dHJpc3RhdGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo5OmNvbmZpZyBPQ1RFT05UWDJfQUZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEwLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE9jdGVvblRYMiBSVlUgQWRtaW4gRnVuY3Rpb24gZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0yMj1jb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMTpjb25maWcgT0NURU9OVFgyX1BGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMi1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgTklDIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo0NTpjb25maWcgT0NURU9OVFgyX1ZGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgTklDIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzoxOTozNS4zNjk5MDc2MzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTYxMzIxNjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgT2N0ZW9uIFRYMiBFdGhlcm5ldCBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgT2N0ZW9uIFRYMiBldGhlcm5ldCBkcml2ZXIuIFRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCBpcyB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGxvb2sgYXQgdGhlIGBLY29uZmlnYCBmaWxlIGluIHRoZSBkcml2ZXIncyBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWdgLiBUaGlzIGZpbGUgKnNob3VsZCogbGF5IG91dCBhbGwgdGhlIGRlcGVuZGVuY2llcywgZmVhdHVyZXMsIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGlzIHNwZWNpZmljIGRyaXZlci4gSXQncyB0aGUgc3RhbmRhcmQgd2F5IHRvIHVuZGVyc3RhbmQgaG93IGEga2VybmVsIGRyaXZlciBpcyBjb25zdHJ1Y3RlZCwgd2hhdCBpdCByZWxpZXMgb24sIGFuZCB3aGF0IGZlYXR1cmVzIEkgY2FuIGVuYWJsZSBvciBkaXNhYmxlLiBCeSBhbmFseXppbmcgdGhlIGBLY29uZmlnYCwgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgZnVuZGFtZW50YWwgbmF0dXJlIG9mIHRoZSBkZXZpY2UgYW5kIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBoYXJkd2FyZSBvciBzb2Z0d2FyZSBmZWF0dXJlcyBhcmUgaW52b2x2ZWQuIFRoaXMgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRvIGNvbmZpZ3VyZSBvciBtb2RpZnkgdGhpcyBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzcyLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6MTk6MzcuNTMxMjMyMjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Nzc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1hcnZlbGwgUlZVIE5ldHdvcmsgZHJpdmVycyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBPQ1RFT05UWDJfTUJPWFxcbiAgIDc6XFx0XFx0dHJpc3RhdGVcXG4gICA4OlxcdFxcbiAgIDk6XFx0Y29uZmlnIE9DVEVPTlRYMl9BRlxcbiAgMTA6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIFJWVSBBZG1pbiBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuICAxMTpcXHRcXHRzZWxlY3QgT0NURU9OVFgyX01CT1hcXG4gIDEyOlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiAoNjRCSVQgXFx1MDAyNlxcdTAwMjYgQ09NUElMRV9URVNUKSB8fCBBUk02NFxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDE1OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCdzIE9jdGVvblRYMiBSZXNvdXJjZSBWaXJ0dWFsaXphdGlvblxcbiAgMTg6XFx0XFx0ICBVbml0J3MgYWRtaW4gZnVuY3Rpb24gbWFuYWdlciB3aGljaCBtYW5hZ2VzIGFsbCBSVlUgSFcgcmVzb3VyY2VzXFxuICAxOTpcXHRcXHQgIGFuZCBwcm92aWRlcyBhIG1lZGl1bSB0byBvdGhlciBQRi9WRnMgdG8gY29uZmlndXJlIEhXLiBTaG91bGQgYmVcXG4gIDIwOlxcdFxcdCAgZW5hYmxlZCBmb3Igb3RoZXIgUlZVIGRldmljZSBkcml2ZXJzIHRvIHdvcmsuXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBORENfRElTX0RZTkFNSUNfQ0FDSElOR1xcbiAgMjM6XFx0XFx0Ym9vbCBcXFwiRGlzYWJsZSBjYWNoaW5nIG9mIGR5bmFtaWMgZW50cmllcyBpbiBORENcXFwiXFxuICAyNDpcXHRcXHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9BRlxcbiAgMjU6XFx0XFx0ZGVmYXVsdCBuXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIFRoaXMgY29uZmlnIG9wdGlvbiBkaXNhYmxlcyBjYWNoaW5nIG9mIGR5bmFtaWMgZW50cmllcyBzdWNoIGFzIE5JWCBTUUVzXFxuICAyODpcXHRcXHQgICwgTlBBIHN0YWNrIHBhZ2VzIGV0YyBpbiBOREMuIEFsc28gbG9ja3MgZG93biBOSVggU1EvQ1EvUlEvUlNTIGFuZFxcbiAgMjk6XFx0XFx0ICBOUEEgQXVyYS9Qb29sIGNvbnRleHRzLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRjb25maWcgT0NURU9OVFgyX1BGXFxuICAzMjpcXHRcXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgTklDIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlclxcXCJcXG4gIDMzOlxcdFxcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuICAzNTpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAzNjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVMgaWYgTUFDU0VDXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uICg2NEJJVCBcXHUwMDI2XFx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XFxuICAzODpcXHRcXHRzZWxlY3QgRElNTElCXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgNDA6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgNDE6XFx0XFx0ZGVwZW5kcyBvbiBNQUNTRUMgfHwgIU1BQ1NFQ1xcbiAgNDI6XFx0XFx0aGVscFxcbiAgNDM6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJ3MgT2N0ZW9uVFgyIE5JQyBwaHlzaWNhbCBmdW5jdGlvbi5cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0Y29uZmlnIE9DVEVPTlRYMl9WRlxcbiAgNDY6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlclxcXCJcXG4gIDQ3OlxcdFxcdGRlcGVuZHMgb24gT0NURU9OVFgyX1BGXFxuICA0ODpcXHRcXHRoZWxwXFxuICA0OTpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1hcnZlbGwncyBPY3Rlb25UWDIgTklDIHZpcnR1YWwgZnVuY3Rpb24uXFxuICA1MDpcXHRcXG4gIDUxOlxcdGNvbmZpZyBSVlVfRVNXSVRDSFxcbiAgNTI6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgUlZVIEUtU3dpdGNoIHN1cHBvcnRcXFwiXFxuICA1MzpcXHRcXHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxcbiAgNTQ6XFx0XFx0ZGVmYXVsdCBtXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1hcnZlbGwncyBSVlUgRS1Td2l0Y2ggdGhhdFxcbiAgNTc6XFx0XFx0ICBwcm92aWRlcyBpbnRlcm5hbCBTUklPViBwYWNrZXQgc3RlZXJpbmcgYW5kIHN3aXRjaGluZy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6MTk6MzcuNTMxMzAxODZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTQ5ODI4ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIERyaXZlciBSZWdpc3RyYXRpb24gZm9yIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQ3MqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGhvdyB0aGlzIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyIHJlZ2lzdGVycyBpdHNlbGYgd2l0aCB0aGUgUENJIHN5c3RlbS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiBhbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgdGhlIENOOUsgb3IgQ04xMEsgY2hpcHMuIE15IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIHN0YW5kYXJkIFBDSSBkcml2ZXIgcmVnaXN0cmF0aW9uIHJvdXRpbmVzLiBTbywgSSdsbCBzdGFydCBieSBncmVwcGluZyB0aGUgcmVsZXZhbnQgZGlyZWN0b3J5LCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYCwgZm9yIHRoZSB0ZWxsLXRhbGUgc2lnbnM6IGBtb2R1bGVfcGNpX2RyaXZlcmAgd2hpY2ggaXMgdGhlIG1hY3JvIGFuZCBgcGNpX3JlZ2lzdGVyX2RyaXZlcmAsIHRoZSBmdW5jdGlvbiBpdHNlbGYuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50IEknbSBsb29raW5nIGZvciBhbmQgcHJvdmlkZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBhbmFseXppbmcgdGhlIHJlc3Qgb2YgdGhlIGRyaXZlcidzIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg1NCwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6MTk6NDAuNjgxMTMzMzAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDAyMzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9yZWdpc3Rlcl9kcml2ZXJ8bW9kdWxlX3BjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTM3NjE9c3RhdGljIGludCBfX2luaXQgcnZ1X2luaXRfbW9kdWxlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzY2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM3Njc6XFx0ZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2Y2d4X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc2OC1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM3NzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6Mzc3MTpcXHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZwdHBfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzcyLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc3NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNzc1OlxcdGVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNm1jc19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM3NzYtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzc4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM3Nzk6XFx0ZXJyID0gIHBjaV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNnJ2dV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM3ODAtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTM1OTM9c3RhdGljIGludCBfX2luaXQgb3R4Ml9ydnVwZl9pbml0X21vZHVsZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNTk2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MzU5NzpcXHRyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2b3R4Ml9wZl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzU5OC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jPTg3NT1zdGF0aWMgaW50IF9faW5pdCBvdHgydmZfaW5pdF9tb2R1bGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtODc4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6ODc5OlxcdHJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZvdHgydmZfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jLTg4MC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmM9ODY5PXN0YXRpYyBpbnQgX19pbml0IHJ2dV9yZXBfaW5pdF9tb2R1bGUodm9pZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMtODcwLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmM6ODcxOlxcdHJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZydnVfcmVwX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jLTg3Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjE5OjQwLjczMjU0MTE2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3OTQ5MjkzMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgRHJpdmVycyoqXG5cbk9rYXksIGxldCdzIGdvIHRocm91Z2ggdGhpcyBzeXN0ZW1hdGljYWxseS4gVGhlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBib3RoZXIgZnV6emluZyB0aGUgbW9kaWZpZWQgY29kZS4gVGhlIG5lZ2F0aXZlIGNyaXRlcmlhIHNheSB3ZSBjYW4gc2tpcCBpdCBpZiB0aGUgY2hhbmdlcyBmYWxsICpleGNsdXNpdmVseSogaW50byBhIGNhdGVnb3J5IGxpa2Ugc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBBbHJpZ2h0LCBsZXQncyBzZWUuIFRoZSBjb2RlIGluIHF1ZXN0aW9uIGlzIGFsbCByZWxhdGVkIHRvIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGludGVyZmFjZS4gU3BlY2lmaWNhbGx5LCBpdCdzIGFsbCB0dWNrZWQgYXdheSBuZWF0bHkgdW5kZXIgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2AuXG5cbk5vdywgdGhlIE9jdGVvblRYMiwgdGhhdCdzIGEgTWFydmVsbCBTbWFydE5JQyBvciBTb0MgbmV0d29yayBwcm9jZXNzb3IgLSBDTjlLLCBDTjEwSywgdGhlIFJWVSBhcmNoaXRlY3R1cmUuIEZyb20gbXkgdW5kZXJzdGFuZGluZywgdGhpcyAqZG9lcyogcmVxdWlyZSBwaHlzaWNhbCBBU0lDIG9yIFBDSWUgY2FyZHMgdG8gZnVuY3Rpb24sIG9yIGF0IGxlYXN0IGRlZGljYXRlZCBBUk02NCBPY3Rlb25UWDIgaGFyZHdhcmUuIEl0J3Mgbm90IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgcnVucyBpbiBhIHN0b2NrIFFFTVUgc2V0dXAsIHdoaWNoIGlzIHdoYXQgc3l6a2FsbGVyIHVzZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgaXNuJ3Qgc29tZSBjbGV2ZXIgdmlydHVhbCBidXMgb3Igc29mdHdhcmUgZW11bGF0aW9uLCBidXQgaXQgbG9va3MgbGlrZSB0aGUgZGVwZW5kZW5jaWVzIGNoZWNrIGZvciBgNjRCSVRgLCBgQ09NUElMRV9URVNUYCwgYEFSTTY0YCwgb3IgYFBDSWAsIHdoaWNoIGltcGxpZXMgdGhhdCB0aGlzIHJlcXVpcmVzIFBDSSBmdW5jdGlvbmFsaXR5IGFuZCBpcyBub3QgZnVsbHkgYWJzdHJhY3RlZC5cblxuQ2hlY2tpbmcgdGhlIGZpbGVzIGFnYWluOiBgcnZ1X25peC5jYCwgYG90eDJfY29tbW9uLmNgLCBgb3R4Ml9jb21tb24uaGAsIGBvdHgyX2RjYm5sLmNgLCBgb3R4Ml9ldGh0b29sLmNgLCBgb3R4Ml9wZi5jYCwgYG90eDJfdGMuY2AsIGFuZCBgcW9zLmNgLiBUaGV5IGFyZSBhbGwgKnN0cmljdGx5KiB3aXRoaW4gdGhlIGBtYXJ2ZWxsL29jdGVvbnR4Mi9gIGRpcmVjdG9yeSwgc28gdGhhdCdzIHRoZSBkcml2ZXIuIFRoZSBkcml2ZXIgaW50ZXJmYWNlcyBkaXJlY3RseSB3aXRoIHRoZSBoYXJkd2FyZSwgbm90IGFuIGVtdWxhdGVkIGludGVyZmFjZS4gSSdtIHByZXR0eSBjb25maWRlbnQgaW4gc2F5aW5nIGl0IGNvbnRyb2xzIHBoeXNpY2FsIE9jdGVvblRYMi9SVlUgTklDcyBhbmQgZGVwZW5kcyBvbiBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLiBJdCdzIG5vdCBnb2luZyB0byBydW4gaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwIG9yIHRoZSBHb29nbGUgQ2xvdWQgRW5naW5lIGVudmlyb25tZW50IHRoYXQgU3l6a2FsbGVyIHVzZXMuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQncyBkb3VibGUtY2hlY2sgYWxsIHRoZSByZXF1aXJlbWVudHM6IGBXb3J0aEZ1enppbmc6IGZhbHNlYCwgYEZvY3VzU3ltYm9sczogW11gLCBgRW5hYmxlQ29uZmlnczogW11gLCBhbmQgdGhlIHJlYXNvbmluZyBuZWVkcyB0byBiZSBjb25jaXNlLlxuXG5UaGUgcmVhc29uaW5nIGlzOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGFuZCBSVlUgZHJpdmVycyAoYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2ApLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZS9Tb0MgaGFyZHdhcmUgKE1hcnZlbGwgT2N0ZW9uVFgyL0NOOUsvQ04xMEspIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIFFFTVUvR0NFIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIlxuXG5BbHJpZ2h0LCB0aGF0IGNvdmVycyBpdC4gTGV0J3MgaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTMwLCJPdXRwdXRUb2tlbnMiOjEyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzoxOTo0Ni41Mjc0NzM3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29kZSBleGNsdXNpdmVseSB3aXRoaW4gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBhbmQgUlZVIGRyaXZlcnMgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyksIGFkZGluZyBtcXByaW8gVEMgaGFyZHdhcmUgb2ZmbG9hZCBzdXBwb3J0LiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZS9Tb0MgaGFyZHdhcmUgKE1hcnZlbGwgT2N0ZW9uVFgyIC8gUlZVKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvZGUgZXhjbHVzaXZlbHkgd2l0aGluIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgYW5kIFJWVSBkcml2ZXJzIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgbXFwcmlvIFRDIGhhcmR3YXJlIG9mZmxvYWQgc3VwcG9ydC4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUvU29DIGhhcmR3YXJlIChNYXJ2ZWxsIE9jdGVvblRYMiAvIFJWVSkgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzoxOTo0Ni41Mjc1MDI0NTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow2zzx5[1] Phase: Running StartedAt: 2026-09-05 13:20:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2zzx5[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-05 13:20:11 +0000 UTC FinishedAt: 2026-09-05 13:20:22 +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,}