Name: series-workflowrzw5p Phase: Failed StartedAt: 2026-07-30 19:28:56 +0000 UTC FinishedAt: 2026-07-30 19:48:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzw5p[0] Phase: Succeeded StartedAt: 2026-07-30 19:28:56 +0000 UTC FinishedAt: 2026-07-30 19:48:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzw5p[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 19:28:56 +0000 UTC FinishedAt: 2026-07-30 19:48:00 +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+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbG9nZ2luZyBvZiBpbnZhbGlkIFRDUCBwYWNrZXRzIGluIG5ldGZpbHRlciBjb25udHJhY2sgdG8gZGVmZXIgdGhlIGxvZ2dpbmcgdW50aWwgYWZ0ZXIgdGhlIGNvbm50cmFjayBzcGlubG9jayBpcyByZWxlYXNlZC4gVGhpcyBpcyBhIHB1cmVseSBkZWNvcmF0aXZlL2xvZ2dpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUgbmV0d29yayBzdGFjay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiM2QzN2VkYTVkNDg5ZWE0ZmQ4ZjFiNTViYmZjMjJkYzFjOWQxOGIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTk6NDc6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xuaW5kZXggY2VlZWQzZDdmZTUyMC4uMDBmMDE3ZDk5OTdmYSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xuQEAgLTQ4MCwzNyAmIzQzOzQ4MCwxMjUgQEAgc3RhdGljIHZvaWQgdGNwX2luaXRfc2VuZGVyKHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcbiBcdH1cbiB9XG4gXG4tX19wcmludGYoNiwgNylcbi1zdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uIG5mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbi1cdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXG4tXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyLFxuLVx0XHRcdFx0XHRcdGVudW0gbmZfY3RfdGNwX2FjdGlvbiByZXQsXG4tXHRcdFx0XHRcdFx0Y29uc3QgY2hhciAqZm10LCAuLi4pXG4mIzQzO2VudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUge1xuJiM0MztcdE5GX1RDUF9MT0dfTk9ORSxcbiYjNDM7XHRORl9UQ1BfTE9HX09WRVJTSE9ULFxuJiM0MztcdE5GX1RDUF9MT0dfU0VRX09WRVIsXG4mIzQzO1x0TkZfVENQX0xPR19BQ0tfT1ZFUixcbiYjNDM7XHRORl9UQ1BfTE9HX1NFUV9VTkRFUixcbiYjNDM7XHRORl9UQ1BfTE9HX0FDS19VTkRFUixcbiYjNDM7XHRORl9UQ1BfTE9HX0xPV0VSX1RJTUVPVVQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nIHtcbiYjNDM7XHRlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGU7XG4mIzQzO1x0dTMyIHZhbHVlO1xuJiM0MztcdHU4IGluZGV4O1xuJiM0MztcdHU4IGRpcjtcbiYjNDM7XHR1OCBsYXN0X2luZGV4O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3Mge1xuJiM0MztcdC8qIEF0IG1vc3Qgb25lIHRjcF9pbl93aW5kb3coKSBsb2cgcGx1cyBvbmUgbG93ZXItdGltZW91dCBsb2cuICovXG4mIzQzO1x0c3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyBlbnRyaWVzWzJdO1xuJiM0MztcdHU4IG51bTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG5mX3RjcF9xdWV1ZV9pbnZhbGlkX2xvZyhzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncyxcbiYjNDM7XHRcdFx0XHQgICAgIGVudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUgdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgIHUzMiB2YWx1ZSwgdTggaW5kZXgsIHU4IGRpcixcbiYjNDM7XHRcdFx0XHQgICAgIHU4IGxhc3RfaW5kZXgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nICpsb2c7XG4mIzQzO1xuJiM0MztcdGlmIChsb2dzLVx1MDAzZW51bSBcdTAwM2U9IEFSUkFZX1NJWkUobG9ncy1cdTAwM2VlbnRyaWVzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bG9nID0gXHUwMDI2bG9ncy1cdTAwM2VlbnRyaWVzW2xvZ3MtXHUwMDNlbnVtJiM0MzsmIzQzO107XG4mIzQzO1x0bG9nLVx1MDAzZXR5cGUgPSB0eXBlO1xuJiM0MztcdGxvZy1cdTAwM2V2YWx1ZSA9IHZhbHVlO1xuJiM0MztcdGxvZy1cdTAwM2VpbmRleCA9IGluZGV4O1xuJiM0MztcdGxvZy1cdTAwM2VkaXIgPSBkaXI7XG4mIzQzO1x0bG9nLVx1MDAzZWxhc3RfaW5kZXggPSBsYXN0X2luZGV4O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uXG4mIzQzO25mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4mIzQzO1x0XHQgICBjb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsXG4mIzQzO1x0XHQgICBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncyxcbiYjNDM7XHRcdCAgIGVudW0gbmZfY3RfdGNwX2FjdGlvbiByZXQsXG4mIzQzO1x0XHQgICBlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGUsXG4mIzQzO1x0XHQgICB1MzIgdmFsdWUpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuID0gbmZfdGNwX3Blcm5ldChuZl9jdF9uZXQoY3QpKTtcbi1cdHN0cnVjdCB2YV9mb3JtYXQgdmFmO1xuLVx0dmFfbGlzdCBhcmdzO1xuIFx0Ym9vbCBiZV9saWJlcmFsO1xuIFxuIFx0YmVfbGliZXJhbCA9IHNlbmRlci1cdTAwM2VmbGFncyBcdTAwMjYgSVBfQ1RfVENQX0ZMQUdfQkVfTElCRVJBTCB8fCB0bi1cdTAwM2V0Y3BfYmVfbGliZXJhbDtcbiBcdGlmIChiZV9saWJlcmFsKVxuIFx0XHRyZXR1cm4gTkZDVF9UQ1BfQUNDRVBUO1xuIFxuLVx0dmFfc3RhcnQoYXJncywgZm10KTtcbi1cdHZhZi5mbXQgPSBmbXQ7XG4tXHR2YWYudmEgPSBcdTAwMjZhcmdzO1xuLVx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXCYjMzQ7JXBWXCYjMzQ7LCBcdTAwMjZ2YWYpO1xuLVx0dmFfZW5kKGFyZ3MpO1xuLVxuJiM0MztcdG5mX3RjcF9xdWV1ZV9pbnZhbGlkX2xvZyhsb2dzLCB0eXBlLCB2YWx1ZSwgMCwgMCwgMCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbmZfdGNwX2VtaXRfaW52YWxpZF9sb2coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuJiM0MztcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXG4mIzQzO1x0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZylcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAobG9nLVx1MDAzZXR5cGUpIHtcbiYjNDM7XHRjYXNlIE5GX1RDUF9MT0dfT1ZFUlNIT1Q6XG4mIzQzO1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuJiM0MztcdFx0XHRcdFx0ICBcJiMzNDsldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5GX1RDUF9MT0dfU0VRX09WRVI6XG4mIzQzO1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuJiM0MztcdFx0XHRcdFx0ICBcJiMzNDtTRVEgaXMgb3ZlciB1cHBlciBib3VuZCAldSAob3ZlciB0aGUgd2luZG93IG9mIHRoZSByZWNlaXZlcilcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5GX1RDUF9MT0dfQUNLX09WRVI6XG4mIzQzO1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuJiM0MztcdFx0XHRcdFx0ICBcJiMzNDtBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICBsb2ctXHUwMDNldmFsdWUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBORl9UQ1BfTE9HX1NFUV9VTkRFUjpcbiYjNDM7XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4mIzQzO1x0XHRcdFx0XHQgIFwmIzM0O1NFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICBsb2ctXHUwMDNldmFsdWUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBORl9UQ1BfTE9HX0FDS19VTkRFUjpcbiYjNDM7XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4mIzQzO1x0XHRcdFx0XHQgIFwmIzM0O2lnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZClcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5GX1RDUF9MT0dfTE9XRVJfVElNRU9VVDpcbiYjNDM7XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4mIzQzO1x0XHRcdFx0XHQgIFwmIzM0O3BhY2tldCAoaW5kZXggJWQsIGRpciAlZCkgcmVzcG9uc2UgZm9yIGluZGV4ICVkIGxvd2VyIHRpbWVvdXQgdG8gJXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgIGxvZy1cdTAwM2VpbmRleCwgbG9nLVx1MDAzZWRpcixcbiYjNDM7XHRcdFx0XHRcdCAgbG9nLVx1MDAzZWxhc3RfaW5kZXgsIGxvZy1cdTAwM2V2YWx1ZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5GX1RDUF9MT0dfTk9ORTpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbmZfdGNwX2VtaXRfaW52YWxpZF9sb2dzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncylcbiYjNDM7e1xuJiM0MztcdHU4IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxvZ3MtXHUwMDNlbnVtOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG5mX3RjcF9lbWl0X2ludmFsaWRfbG9nKHNrYiwgY3QsIHN0YXRlLCBcdTAwMjZsb2dzLVx1MDAzZWVudHJpZXNbaV0pO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb25cbiB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbiBcdCAgICAgIHVuc2lnbmVkIGludCBpbmRleCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3BoLFxuLVx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpXG4mIzQzO1x0ICAgICAgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3MgKmxvZ3MpXG4ge1xuIFx0c3RydWN0IGlwX2N0X3RjcCAqc3RhdGUgPSBcdTAwMjZjdC1cdTAwM2Vwcm90by50Y3A7XG4gXHRzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIgPSBcdTAwMjZzdGF0ZS1cdTAwM2VzZWVuW2Rpcl07XG5AQCAtNjQwLDMxICYjNDM7NzI4LDI5IEBAIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuIFx0XHRcdHNlbmRlci1cdTAwM2V0ZF9lbmQgPSBlbmQ7XG4gXHRcdFx0c2VuZGVyLVx1MDAzZWZsYWdzIHw9IElQX0NUX1RDUF9GTEFHX0RBVEFfVU5BQ0tOT1dMRURHRUQ7XG4gXG4tXHRcdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSxcbi1cdFx0XHRcdFx0XHQgIFwmIzM0OyV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZFwmIzM0Oywgb3ZlcnNob3QpO1xuJiM0MztcdFx0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZ3MsIE5GQ1RfVENQX0lHTk9SRSxcbiYjNDM7XHRcdFx0XHRcdCAgTkZfVENQX0xPR19PVkVSU0hPVCwgb3ZlcnNob3QpO1xuIFx0XHR9XG4gXG4tXHRcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JTlZBTElELFxuLVx0XHRcdFx0XHQgIFwmIzM0O1NFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVwmIzM0Oyxcbi1cdFx0XHRcdFx0ICBzZW5kZXItXHUwMDNldGRfbWF4ZW5kICYjNDM7IDEpO1xuJiM0MztcdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChjdCwgc2VuZGVyLCBsb2dzLCBORkNUX1RDUF9JTlZBTElELFxuJiM0MztcdFx0XHRcdCAgTkZfVENQX0xPR19TRVFfT1ZFUiwgc2VuZGVyLVx1MDAzZXRkX21heGVuZCAmIzQzOyAxKTtcbiBcdH1cbiBcbiBcdGlmICghYmVmb3JlKHNhY2ssIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCAmIzQzOyAxKSlcbi1cdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lOVkFMSUQsXG4tXHRcdFx0XHRcdCAgXCYjMzQ7QUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KVwmIzM0Oyxcbi1cdFx0XHRcdFx0ICByZWNlaXZlci1cdTAwM2V0ZF9lbmQgJiM0MzsgMSk7XG4mIzQzO1x0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZ3MsIE5GQ1RfVENQX0lOVkFMSUQsXG4mIzQzO1x0XHRcdFx0ICBORl9UQ1BfTE9HX0FDS19PVkVSLCByZWNlaXZlci1cdTAwM2V0ZF9lbmQgJiM0MzsgMSk7XG4gXG4gXHQvKiBJcyB0aGUgZW5kaW5nIHNlcXVlbmNlIGluIHRoZSByZWNlaXZlIHdpbmRvdyAoaWYgYXZhaWxhYmxlKT8gKi9cbiBcdGluX3JlY3Zfd2luID0gIXJlY2VpdmVyLVx1MDAzZXRkX21heHdpbiB8fFxuIFx0XHQgICAgICBhZnRlcihlbmQsIHNlbmRlci1cdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cdTAwM2V0ZF9tYXh3aW4gLSAxKTtcbiBcdGlmICghaW5fcmVjdl93aW4pXG4tXHRcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsXG4tXHRcdFx0XHRcdCAgXCYjMzQ7U0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZClcJiMzNDssXG4tXHRcdFx0XHRcdCAgc2VuZGVyLVx1MDAzZXRkX2VuZCAtIHJlY2VpdmVyLVx1MDAzZXRkX21heHdpbiAtIDEpO1xuJiM0MztcdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChjdCwgc2VuZGVyLCBsb2dzLCBORkNUX1RDUF9JR05PUkUsXG4mIzQzO1x0XHRcdFx0ICBORl9UQ1BfTE9HX1NFUV9VTkRFUixcbiYjNDM7XHRcdFx0XHQgIHNlbmRlci1cdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cdTAwM2V0ZF9tYXh3aW4gLSAxKTtcbiBcdGlmICghYWZ0ZXIoc2FjaywgcmVjZWl2ZXItXHUwMDNldGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKSlcbi1cdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSxcbi1cdFx0XHRcdFx0ICBcJiMzNDtpZ25vcmVkIEFDSyB1bmRlciBsb3dlciBib3VuZCAldSAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQpXCYjMzQ7LFxuLVx0XHRcdFx0XHQgIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSk7XG4mIzQzO1x0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZ3MsIE5GQ1RfVENQX0lHTk9SRSxcbiYjNDM7XHRcdFx0XHQgIE5GX1RDUF9MT0dfQUNLX1VOREVSLFxuJiM0MztcdFx0XHRcdCAgcmVjZWl2ZXItXHUwMDNldGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKTtcbiBcbiBcdC8qIFRha2UgaW50byBhY2NvdW50IHdpbmRvdyBzY2FsaW5nIChSRkMgMTMyMykuICovXG4gXHRpZiAoIXRjcGgtXHUwMDNlc3luKVxuQEAgLTcyMCwxMCAmIzQzOzgwNiw5IEBAIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcbi1cdFx0XHRcdFx0IGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4tXHRcdFx0XHRcdCBpbnQgaW5kZXgsXG4tXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpXG4mIzQzO1x0XHRcdFx0IGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4mIzQzO1x0XHRcdFx0IGludCBpbmRleCxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3MgKmxvZ3MpXG4ge1xuIFx0Y29uc3QgdW5zaWduZWQgaW50ICp0aW1lb3V0cztcbiBcdGNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0bjtcbkBAIC03NjQsOSAmIzQzOzg0OSwxMCBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcbiBcbiBcdFx0dGltZW91dCA9IFJFQURfT05DRSh0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1VOQUNLXSk7XG4gXHRcdGlmIChleHBpcmVzIFx1MDAzZSB0aW1lb3V0KSB7XG4tXHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLFxuLVx0XHRcdFx0XHQgIFwmIzM0O3BhY2tldCAoaW5kZXggJWQsIGRpciAlZCkgcmVzcG9uc2UgZm9yIGluZGV4ICVkIGxvd2VyIHRpbWVvdXQgdG8gJXVcJiMzNDssXG4tXHRcdFx0XHRcdCAgaW5kZXgsIGRpciwgY3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXgsIHRpbWVvdXQpO1xuJiM0MztcdFx0XHRuZl90Y3BfcXVldWVfaW52YWxpZF9sb2cobG9ncyxcbiYjNDM7XHRcdFx0XHRcdFx0IE5GX1RDUF9MT0dfTE9XRVJfVElNRU9VVCxcbiYjNDM7XHRcdFx0XHRcdFx0IHRpbWVvdXQsIGluZGV4LCBkaXIsXG4mIzQzO1x0XHRcdFx0XHRcdCBjdC1cdTAwM2Vwcm90by50Y3AubGFzdF9pbmRleCk7XG4gXG4gXHRcdFx0V1JJVEVfT05DRShjdC1cdTAwM2V0aW1lb3V0LCB0aW1lb3V0ICYjNDM7IG5mY3RfdGltZV9zdGFtcCk7XG4gXHRcdH1cbkBAIC05NzEsNiAmIzQzOzEwNTcsNyBAQCBpbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0ZW51bSB0Y3BfY29ubnRyYWNrIG5ld19zdGF0ZSwgb2xkX3N0YXRlO1xuIFx0dW5zaWduZWQgaW50IGluZGV4LCAqdGltZW91dHM7XG4gXHRlbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmVzO1xuJiM0MztcdHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2dzIGxvZ3MgPSB7fTtcbiBcdGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7XG4gXHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aDtcbiBcdHN0cnVjdCB0Y3BoZHIgX3RjcGg7XG5AQCAtMTI1MiwxNCAmIzQzOzEzMzksMTYgQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdH1cbiBcbiBcdHJlcyA9IHRjcF9pbl93aW5kb3coY3QsIGRpciwgaW5kZXgsXG4tXHRcdFx0ICAgIHNrYiwgZGF0YW9mZiwgdGgsIHN0YXRlKTtcbiYjNDM7XHRcdFx0ICAgIHNrYiwgZGF0YW9mZiwgdGgsIFx1MDAyNmxvZ3MpO1xuIFx0c3dpdGNoIChyZXMpIHtcbiBcdGNhc2UgTkZDVF9UQ1BfSUdOT1JFOlxuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdG5mX3RjcF9lbWl0X2ludmFsaWRfbG9ncyhza2IsIGN0LCBzdGF0ZSwgXHUwMDI2bG9ncyk7XG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXHRjYXNlIE5GQ1RfVENQX0lOVkFMSUQ6XG4tXHRcdG5mX3RjcF9oYW5kbGVfaW52YWxpZChjdCwgZGlyLCBpbmRleCwgc2tiLCBzdGF0ZSk7XG4mIzQzO1x0XHRuZl90Y3BfaGFuZGxlX2ludmFsaWQoY3QsIGRpciwgaW5kZXgsIFx1MDAyNmxvZ3MpO1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdG5mX3RjcF9lbWl0X2ludmFsaWRfbG9ncyhza2IsIGN0LCBzdGF0ZSwgXHUwMDI2bG9ncyk7XG4gXHRcdHJldHVybiAtTkZfQUNDRVBUO1xuIFx0Y2FzZSBORkNUX1RDUF9BQ0NFUFQ6XG4gXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxvZ2dpbmcgb2YgaW52YWxpZCBUQ1AgcGFja2V0cyBpbiBuZXRmaWx0ZXIgY29ubnRyYWNrIHRvIGRlZmVyIHRoZSBsb2dnaW5nIHVudGlsIGFmdGVyIHRoZSBjb25udHJhY2sgc3BpbmxvY2sgaXMgcmVsZWFzZWQuIFRoaXMgaXMgYSBwdXJlbHkgZGVjb3JhdGl2ZS9sb2dnaW5nIGNoYW5nZSB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIG5ldHdvcmsgc3RhY2suJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjNkMzdlZGE1ZDQ4OWVhNGZkOGYxYjU1YmJmYzIyZGMxYzlkMThiMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDMwIDE5OjQ3OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwppbmRleCBjZWVlZDNkN2ZlNTIwLi4wMGYwMTdkOTk5N2ZhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwpAQCAtNDgwLDM3ICYjNDM7NDgwLDEyNSBAQCBzdGF0aWMgdm9pZCB0Y3BfaW5pdF9zZW5kZXIoc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyLAogCX0KIH0KIAotX19wcmludGYoNiwgNykKLXN0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb24gbmZfdGNwX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCQljb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCQkJCQljb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsCi0JCQkJCQljb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsCi0JCQkJCQllbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmV0LAotCQkJCQkJY29uc3QgY2hhciAqZm10LCAuLi4pCiYjNDM7ZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB7CiYjNDM7CU5GX1RDUF9MT0dfTk9ORSwKJiM0MzsJTkZfVENQX0xPR19PVkVSU0hPVCwKJiM0MzsJTkZfVENQX0xPR19TRVFfT1ZFUiwKJiM0MzsJTkZfVENQX0xPR19BQ0tfT1ZFUiwKJiM0MzsJTkZfVENQX0xPR19TRVFfVU5ERVIsCiYjNDM7CU5GX1RDUF9MT0dfQUNLX1VOREVSLAomIzQzOwlORl9UQ1BfTE9HX0xPV0VSX1RJTUVPVVQsCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nIHsKJiM0MzsJZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB0eXBlOwomIzQzOwl1MzIgdmFsdWU7CiYjNDM7CXU4IGluZGV4OwomIzQzOwl1OCBkaXI7CiYjNDM7CXU4IGxhc3RfaW5kZXg7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyB7CiYjNDM7CS8qIEF0IG1vc3Qgb25lIHRjcF9pbl93aW5kb3coKSBsb2cgcGx1cyBvbmUgbG93ZXItdGltZW91dCBsb2cuICovCiYjNDM7CXN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgZW50cmllc1syXTsKJiM0MzsJdTggbnVtOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmZfdGNwX3F1ZXVlX2ludmFsaWRfbG9nKHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2dzICpsb2dzLAomIzQzOwkJCQkgICAgIGVudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUgdHlwZSwKJiM0MzsJCQkJICAgICB1MzIgdmFsdWUsIHU4IGluZGV4LCB1OCBkaXIsCiYjNDM7CQkJCSAgICAgdTggbGFzdF9pbmRleCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZzsKJiM0MzsKJiM0MzsJaWYgKGxvZ3MtJmd0O251bSAmZ3Q7PSBBUlJBWV9TSVpFKGxvZ3MtJmd0O2VudHJpZXMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlsb2cgPSAmYW1wO2xvZ3MtJmd0O2VudHJpZXNbbG9ncy0mZ3Q7bnVtJiM0MzsmIzQzO107CiYjNDM7CWxvZy0mZ3Q7dHlwZSA9IHR5cGU7CiYjNDM7CWxvZy0mZ3Q7dmFsdWUgPSB2YWx1ZTsKJiM0MzsJbG9nLSZndDtpbmRleCA9IGluZGV4OwomIzQzOwlsb2ctJmd0O2RpciA9IGRpcjsKJiM0MzsJbG9nLSZndDtsYXN0X2luZGV4ID0gbGFzdF9pbmRleDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvbgomIzQzO25mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCiYjNDM7CQkgICBjb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsCiYjNDM7CQkgICBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncywKJiM0MzsJCSAgIGVudW0gbmZfY3RfdGNwX2FjdGlvbiByZXQsCiYjNDM7CQkgICBlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGUsCiYjNDM7CQkgICB1MzIgdmFsdWUpCiB7CiAJY29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuID0gbmZfdGNwX3Blcm5ldChuZl9jdF9uZXQoY3QpKTsKLQlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsKLQl2YV9saXN0IGFyZ3M7CiAJYm9vbCBiZV9saWJlcmFsOwogCiAJYmVfbGliZXJhbCA9IHNlbmRlci0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfQ1RfVENQX0ZMQUdfQkVfTElCRVJBTCB8fCB0bi0mZ3Q7dGNwX2JlX2xpYmVyYWw7CiAJaWYgKGJlX2xpYmVyYWwpCiAJCXJldHVybiBORkNUX1RDUF9BQ0NFUFQ7CiAKLQl2YV9zdGFydChhcmdzLCBmbXQpOwotCXZhZi5mbXQgPSBmbXQ7Ci0JdmFmLnZhID0gJmFtcDthcmdzOwotCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsICYjMzQ7JXBWJiMzNDssICZhbXA7dmFmKTsKLQl2YV9lbmQoYXJncyk7Ci0KJiM0MzsJbmZfdGNwX3F1ZXVlX2ludmFsaWRfbG9nKGxvZ3MsIHR5cGUsIHZhbHVlLCAwLCAwLCAwKTsKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIHZvaWQgbmZfdGNwX2VtaXRfaW52YWxpZF9sb2coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKJiM0MzsJCQkJICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSwKJiM0MzsJCQkJICAgIGNvbnN0IHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZykKJiM0Mzt7CiYjNDM7CXN3aXRjaCAobG9nLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19PVkVSU0hPVDoKJiM0MzsJCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsCiYjNDM7CQkJCQkgICYjMzQ7JXUgYnl0ZXMgbW9yZSB0aGFuIGV4cGVjdGVkJiMzNDssCiYjNDM7CQkJCQkgIGxvZy0mZ3Q7dmFsdWUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19TRVFfT1ZFUjoKJiM0MzsJCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsCiYjNDM7CQkJCQkgICYjMzQ7U0VRIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKG92ZXIgdGhlIHdpbmRvdyBvZiB0aGUgcmVjZWl2ZXIpJiMzNDssCiYjNDM7CQkJCQkgIGxvZy0mZ3Q7dmFsdWUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19BQ0tfT1ZFUjoKJiM0MzsJCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsCiYjNDM7CQkJCQkgICYjMzQ7QUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KSYjMzQ7LAomIzQzOwkJCQkJICBsb2ctJmd0O3ZhbHVlKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE5GX1RDUF9MT0dfU0VRX1VOREVSOgomIzQzOwkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwKJiM0MzsJCQkJCSAgJiMzNDtTRVEgaXMgdW5kZXIgbG93ZXIgYm91bmQgJXUgKGFscmVhZHkgQUNLZWQgZGF0YSByZXRyYW5zbWl0dGVkKSYjMzQ7LAomIzQzOwkJCQkJICBsb2ctJmd0O3ZhbHVlKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE5GX1RDUF9MT0dfQUNLX1VOREVSOgomIzQzOwkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwKJiM0MzsJCQkJCSAgJiMzNDtpZ25vcmVkIEFDSyB1bmRlciBsb3dlciBib3VuZCAldSAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQpJiMzNDssCiYjNDM7CQkJCQkgIGxvZy0mZ3Q7dmFsdWUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19MT1dFUl9USU1FT1VUOgomIzQzOwkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwKJiM0MzsJCQkJCSAgJiMzNDtwYWNrZXQgKGluZGV4ICVkLCBkaXIgJWQpIHJlc3BvbnNlIGZvciBpbmRleCAlZCBsb3dlciB0aW1lb3V0IHRvICV1JiMzNDssCiYjNDM7CQkJCQkgIGxvZy0mZ3Q7aW5kZXgsIGxvZy0mZ3Q7ZGlyLAomIzQzOwkJCQkJICBsb2ctJmd0O2xhc3RfaW5kZXgsIGxvZy0mZ3Q7dmFsdWUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19OT05FOgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmZfdGNwX2VtaXRfaW52YWxpZF9sb2dzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSwKJiM0MzsJCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncykKJiM0Mzt7CiYjNDM7CXU4IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBsb2dzLSZndDtudW07IGkmIzQzOyYjNDM7KQomIzQzOwkJbmZfdGNwX2VtaXRfaW52YWxpZF9sb2coc2tiLCBjdCwgc3RhdGUsICZhbXA7bG9ncy0mZ3Q7ZW50cmllc1tpXSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvbgogdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCiAJICAgICAgdW5zaWduZWQgaW50IGluZGV4LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3BoLAotCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpob29rX3N0YXRlKQomIzQzOwkgICAgICBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncykKIHsKIAlzdHJ1Y3QgaXBfY3RfdGNwICpzdGF0ZSA9ICZhbXA7Y3QtJmd0O3Byb3RvLnRjcDsKIAlzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIgPSAmYW1wO3N0YXRlLSZndDtzZWVuW2Rpcl07CkBAIC02NDAsMzEgJiM0Mzs3MjgsMjkgQEAgdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCiAJCQlzZW5kZXItJmd0O3RkX2VuZCA9IGVuZDsKIAkJCXNlbmRlci0mZ3Q7ZmxhZ3MgfD0gSVBfQ1RfVENQX0ZMQUdfREFUQV9VTkFDS05PV0xFREdFRDsKIAotCQkJcmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSwKLQkJCQkJCSAgJiMzNDsldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWQmIzM0Oywgb3ZlcnNob3QpOwomIzQzOwkJCXJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoY3QsIHNlbmRlciwgbG9ncywgTkZDVF9UQ1BfSUdOT1JFLAomIzQzOwkJCQkJICBORl9UQ1BfTE9HX09WRVJTSE9ULCBvdmVyc2hvdCk7CiAJCX0KIAotCQlyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSU5WQUxJRCwKLQkJCQkJICAmIzM0O1NFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKSYjMzQ7LAotCQkJCQkgIHNlbmRlci0mZ3Q7dGRfbWF4ZW5kICYjNDM7IDEpOwomIzQzOwkJcmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChjdCwgc2VuZGVyLCBsb2dzLCBORkNUX1RDUF9JTlZBTElELAomIzQzOwkJCQkgIE5GX1RDUF9MT0dfU0VRX09WRVIsIHNlbmRlci0mZ3Q7dGRfbWF4ZW5kICYjNDM7IDEpOwogCX0KIAogCWlmICghYmVmb3JlKHNhY2ssIHJlY2VpdmVyLSZndDt0ZF9lbmQgJiM0MzsgMSkpCi0JCXJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JTlZBTElELAotCQkJCQkgICYjMzQ7QUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KSYjMzQ7LAotCQkJCQkgIHJlY2VpdmVyLSZndDt0ZF9lbmQgJiM0MzsgMSk7CiYjNDM7CQlyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZ3MsIE5GQ1RfVENQX0lOVkFMSUQsCiYjNDM7CQkJCSAgTkZfVENQX0xPR19BQ0tfT1ZFUiwgcmVjZWl2ZXItJmd0O3RkX2VuZCAmIzQzOyAxKTsKIAogCS8qIElzIHRoZSBlbmRpbmcgc2VxdWVuY2UgaW4gdGhlIHJlY2VpdmUgd2luZG93IChpZiBhdmFpbGFibGUpPyAqLwogCWluX3JlY3Zfd2luID0gIXJlY2VpdmVyLSZndDt0ZF9tYXh3aW4gfHwKIAkJICAgICAgYWZ0ZXIoZW5kLCBzZW5kZXItJmd0O3RkX2VuZCAtIHJlY2VpdmVyLSZndDt0ZF9tYXh3aW4gLSAxKTsKIAlpZiAoIWluX3JlY3Zfd2luKQotCQlyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLAotCQkJCQkgICYjMzQ7U0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZCkmIzM0OywKLQkJCQkJICBzZW5kZXItJmd0O3RkX2VuZCAtIHJlY2VpdmVyLSZndDt0ZF9tYXh3aW4gLSAxKTsKJiM0MzsJCXJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoY3QsIHNlbmRlciwgbG9ncywgTkZDVF9UQ1BfSUdOT1JFLAomIzQzOwkJCQkgIE5GX1RDUF9MT0dfU0VRX1VOREVSLAomIzQzOwkJCQkgIHNlbmRlci0mZ3Q7dGRfZW5kIC0gcmVjZWl2ZXItJmd0O3RkX21heHdpbiAtIDEpOwogCWlmICghYWZ0ZXIoc2FjaywgcmVjZWl2ZXItJmd0O3RkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSkpCi0JCXJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsCi0JCQkJCSAgJiMzNDtpZ25vcmVkIEFDSyB1bmRlciBsb3dlciBib3VuZCAldSAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQpJiMzNDssCi0JCQkJCSAgcmVjZWl2ZXItJmd0O3RkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSk7CiYjNDM7CQlyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZ3MsIE5GQ1RfVENQX0lHTk9SRSwKJiM0MzsJCQkJICBORl9UQ1BfTE9HX0FDS19VTkRFUiwKJiM0MzsJCQkJICByZWNlaXZlci0mZ3Q7dGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKTsKIAogCS8qIFRha2UgaW50byBhY2NvdW50IHdpbmRvdyBzY2FsaW5nIChSRkMgMTMyMykuICovCiAJaWYgKCF0Y3BoLSZndDtzeW4pCkBAIC03MjAsMTAgJiM0Mzs4MDYsOSBAQCB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKIH0KIAogc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCQkJCSBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLAotCQkJCQkgaW50IGluZGV4LAotCQkJCQkgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpob29rX3N0YXRlKQomIzQzOwkJCQkgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKJiM0MzsJCQkJIGludCBpbmRleCwKJiM0MzsJCQkJIHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2dzICpsb2dzKQogewogCWNvbnN0IHVuc2lnbmVkIGludCAqdGltZW91dHM7CiAJY29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuOwpAQCAtNzY0LDkgJiM0Mzs4NDksMTAgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsCiAKIAkJdGltZW91dCA9IFJFQURfT05DRSh0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1VOQUNLXSk7CiAJCWlmIChleHBpcmVzICZndDsgdGltZW91dCkgewotCQkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLAotCQkJCQkgICYjMzQ7cGFja2V0IChpbmRleCAlZCwgZGlyICVkKSByZXNwb25zZSBmb3IgaW5kZXggJWQgbG93ZXIgdGltZW91dCB0byAldSYjMzQ7LAotCQkJCQkgIGluZGV4LCBkaXIsIGN0LSZndDtwcm90by50Y3AubGFzdF9pbmRleCwgdGltZW91dCk7CiYjNDM7CQkJbmZfdGNwX3F1ZXVlX2ludmFsaWRfbG9nKGxvZ3MsCiYjNDM7CQkJCQkJIE5GX1RDUF9MT0dfTE9XRVJfVElNRU9VVCwKJiM0MzsJCQkJCQkgdGltZW91dCwgaW5kZXgsIGRpciwKJiM0MzsJCQkJCQkgY3QtJmd0O3Byb3RvLnRjcC5sYXN0X2luZGV4KTsKIAogCQkJV1JJVEVfT05DRShjdC0mZ3Q7dGltZW91dCwgdGltZW91dCAmIzQzOyBuZmN0X3RpbWVfc3RhbXApOwogCQl9CkBAIC05NzEsNiAmIzQzOzEwNTcsNyBAQCBpbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LAogCWVudW0gdGNwX2Nvbm50cmFjayBuZXdfc3RhdGUsIG9sZF9zdGF0ZTsKIAl1bnNpZ25lZCBpbnQgaW5kZXgsICp0aW1lb3V0czsKIAllbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmVzOwomIzQzOwlzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyBsb2dzID0ge307CiAJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjsKIAljb25zdCBzdHJ1Y3QgdGNwaGRyICp0aDsKIAlzdHJ1Y3QgdGNwaGRyIF90Y3BoOwpAQCAtMTI1MiwxNCAmIzQzOzEzMzksMTYgQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCwKIAl9CiAKIAlyZXMgPSB0Y3BfaW5fd2luZG93KGN0LCBkaXIsIGluZGV4LAotCQkJICAgIHNrYiwgZGF0YW9mZiwgdGgsIHN0YXRlKTsKJiM0MzsJCQkgICAgc2tiLCBkYXRhb2ZmLCB0aCwgJmFtcDtsb2dzKTsKIAlzd2l0Y2ggKHJlcykgewogCWNhc2UgTkZDVF9UQ1BfSUdOT1JFOgogCQlzcGluX3VubG9ja19iaCgmYW1wO2N0LSZndDtsb2NrKTsKJiM0MzsJCW5mX3RjcF9lbWl0X2ludmFsaWRfbG9ncyhza2IsIGN0LCBzdGF0ZSwgJmFtcDtsb2dzKTsKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAljYXNlIE5GQ1RfVENQX0lOVkFMSUQ6Ci0JCW5mX3RjcF9oYW5kbGVfaW52YWxpZChjdCwgZGlyLCBpbmRleCwgc2tiLCBzdGF0ZSk7CiYjNDM7CQluZl90Y3BfaGFuZGxlX2ludmFsaWQoY3QsIGRpciwgaW5kZXgsICZhbXA7bG9ncyk7CiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7Y3QtJmd0O2xvY2spOwomIzQzOwkJbmZfdGNwX2VtaXRfaW52YWxpZF9sb2dzKHNrYiwgY3QsIHN0YXRlLCAmYW1wO2xvZ3MpOwogCQlyZXR1cm4gLU5GX0FDQ0VQVDsKIAljYXNlIE5GQ1RfVENQX0FDQ0VQVDoKIAkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNzgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUQ1AgQ29ubnRyYWNrIExvZ2dpbmcgUmVmYWN0b3IqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYXBwbGllZCB0byBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNgLiBJdCYjMzk7cyByZWZhY3RvcmluZyBob3cgaW52YWxpZCBUQ1AgcGFja2V0cyBhcmUgbG9nZ2VkIHdpdGhpbiBuZXRmaWx0ZXIgY29ubnRyYWNrLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhleSYjMzk7cmUgaW50cm9kdWNpbmcgdGhlc2UgbmV3IHN0cnVjdHVyZXM6IGBlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlYCwgYHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2dgLCBhbmQgYHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2dzYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBtb3ZpbmcgYXdheSBmcm9tIGRpcmVjdCBjYWxscyB0byBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgYW5kIGluc3RlYWQgcXVldWluZyB0aGVzZSBsb2cgbWVzc2FnZXMgZm9yIGxhdGVyIGVtaXNzaW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGFuIGF0dGVtcHQgdG8gYXZvaWQgaG9sZGluZyBgY3QtJmd0O2xvY2tgIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGxvZ2dpbmcuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IG9wdGltaXphdGlvbi4KCkEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhpczogYG5mX3RjcF9lbWl0X2ludmFsaWRfbG9nc2AgaXMgZGVmaW5pdGVseSBjYWxsZWQgKmFmdGVyKiBgc3Bpbl91bmxvY2tfYmgoJmFtcDtjdC0mZ3Q7bG9jaylgLiBTbywgYHRjcF9pbl93aW5kb3dgIGFuZCBgbmZfdGNwX2hhbmRsZV9pbnZhbGlkYCBub3cgc3RvcmUgbG9nIG1lc3NhZ2VzIGluIGEgbG9jYWwgYHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2dzIGxvZ3NgIHZhcmlhYmxlIG9uIHRoZSBzdGFjay4gVGhlIGVtaXNzaW9uIHRoZW4gaGFwcGVucyBhZnRlciByZWxlYXNpbmcgdGhlIGxvY2suIENsZXZlciwgdGhleSYjMzk7cmUgdXNpbmcgYSBsb2NhbCBidWZmZXIgdG8gZGVjb3VwbGUgdGhlIGxvZ2dpbmcgZnJvbSB0aGUgY3JpdGljYWwgc2VjdGlvbi4KCkZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQsIHRoaXMgKmlzKiBhIGNoYW5nZSBiZWNhdXNlIGl0IGFsdGVycyB0aGUgbG9jayBjb250ZXh0IG9mIHRoZSBsb2dnaW5nIGZ1bmN0aW9uLiBCdXQsIGRvZXMgaXQgY2hhbmdlIHRoZSBjb3JlIFRDUCBjb25udHJhY2sgbG9naWM/IE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBubywgdGhlIGxvZ2dpbmcgZnVuY3Rpb24gYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGlzIHByZXR0eSBtdWNoIGp1c3QgZm9yIGxvZ2dpbmcuIE5vIGZ1bmN0aW9uYWwgc2lkZSBlZmZlY3QuCgpMZXQmIzM5O3MgZGl2ZSBkZWVwZXIgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9uYWwgYWx0ZXJhdGlvbnMgYmV5b25kIGp1c3QgdGhlIGRlZmVycmVkIGxvZ2dpbmcuIE9rYXksIHRoZSBwYXRjaCBjaGFuZ2VzIGBuZl90Y3BfbG9nX2ludmFsaWRgIHRvIHF1ZXVlIHRoZSBsb2cgaW5zdGVhZCBvZiBjYWxsaW5nIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCBkaXJlY3RseS4gYHRjcF9pbl93aW5kb3dgIHN0aWxsIHJldHVybnMgdGhlIHNhbWUgdmFsdWVzOiBgTkZDVF9UQ1BfSUdOT1JFYCwgYE5GQ1RfVENQX0lOVkFMSURgLCBvciBgTkZDVF9UQ1BfQUNDRVBUYC4gVGhvc2UgYWxsIGFyZSB0aGUgc2FtZS4gQW5kIHRoZSB0aW1lb3V0IG1vZGlmaWNhdGlvbnMgaW4gYG5mX3RjcF9oYW5kbGVfaW52YWxpZGAgc2VlbSB0byBiZSB1bmNoYW5nZWQ6IHRoZSBjb3JlIGxvZ2ljIGlzIHRoZSBzYW1lLiBUaGUgb25seSBjaGFuZ2UgaXMgdGhlIGRlZmVycmFsLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyBjaGFuZ2Ugd29ydGggZnV6emluZz8KCk9uIHRoZSBvbmUgaGFuZCwgaWYgaXQgKndlcmUqIGp1c3QgYSByZWZhY3RvcmluZyBvZiBsb2dnaW5nLCBJIG1pZ2h0IHNheSBubywgYXMgcGVyIHRoZSBpbnN0cnVjdGlvbnMgaW4gdGhlIHByb21wdC4gSG93ZXZlciwgZGVmZXJyaW5nIGxvZ2dpbmcgb3V0c2lkZSBhIHNwaW5sb2NrICpjb3VsZCogcHJldmVudCBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGxvY2t1cHMuIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYnV0IG1vcmUgaW4gdGVybXMgb2YgY29uY3VycmVuY3kgcmF0aGVyIHRoYW4gYWx0ZXJpbmcgdGhlIG5ldHdvcmsgc3RhY2sgZXhlY3V0aW9uLiBJdCBjaGFuZ2VzICp3aGVuKiB0aGUgbG9nIGlzIGVtaXR0ZWQuIFRoZSBjb3JlIFRDUCBjb25udHJhY2sgKmJlaGF2aW9yKiBzZWVtcyB1bmNoYW5nZWQuCgpSZW1lbWJlcmluZyB0aGUgcHJvbXB0JiMzOTtzIGluc3RydWN0aW9uOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4gLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4gLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuJiMzNDsKCkxldCYjMzk7cyBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGF0IGNoYW5nZSwgYWdhaW46CmBgYGMKLQl2YV9zdGFydChhcmdzLCBmbXQpOwotCXZhZi5mbXQgPSBmbXQ7Ci0JdmFmLnZhID0gJmFtcDthcmdzOwotCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsICYjMzQ7JXBWJiMzNDssICZhbXA7dmFmKTsKLQl2YV9lbmQoYXJncyk7Ci0KJiM0MzsJbmZfdGNwX3F1ZXVlX2ludmFsaWRfbG9nKGxvZ3MsIHR5cGUsIHZhbHVlLCAwLCAwLCAwKTsKIAlyZXR1cm4gcmV0OwpgYGAKSXQmIzM5O3MganVzdCBkZWZlcnJpbmcgdGhlIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCBjYWxsLiBXZSYjMzk7cmUgb25seSBxdWV1aW5nIGl0IG5vdy4gYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgICppcyogYSBsb2dnaW5nIGZ1bmN0aW9uLiBTbywgaWYgdGhpcyBwYXRjaCAqb25seSogY29udGFpbnMgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyBsaWtlIGxvZ2dpbmcsIHdlIHNob3VsZCByZXR1cm4gZmFsc2UuIEV2ZW4gdGhvdWdoIGl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0IGlzIG9ubHkgYSBjaGFuZ2UgaW4gdGVybXMgb2YgY29uY3VycmVuY3ksIHdoaWNoIGlzIGEgc2lkZSBlZmZlY3QuIEl0IGlzIGEgbG9nZ2luZyBmdW5jdGlvbiwgd2l0aCBubyBmdW5jdGlvbmFsIHNpZGUgZWZmZWN0cy4KCkdpdmVuIHRoYXQgYW5kIHRoZSBsYWNrIG9mIG90aGVyIGZ1bmN0aW9uYWwgY2hhbmdlcywgaXQgKmxvb2tzIGxpa2UqIHRoaXMgaXMgZnVuZGFtZW50YWxseSBhIGxvZ2dpbmcgcmVmYWN0b3JpbmcgYW5kIHRoZSBhbnN3ZXIgaXMgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM9NzI9X19wcmludGYoNCwgNSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NzM6dm9pZCBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTc0LVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy05My19XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjk0OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy05NS0jZW5kaWZcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM9MTQ4PXN0YXRpYyBpbnQgZG9fYmFzaWNfY2hlY2tzKHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMTc0LVx0XHQgICAgIGNvdW50ICE9IDApIHx8ICFzY2gtXHUwMDNlbGVuZ3RoKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6MTc1Olx0XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMTc2LVx0XHRcdFx0XHRcdCAgXCYjMzQ7JXMgZmFpbGVkLiBjaHVuayBudW0gJWQsIHR5cGUgJWQsIGxlbiAlZCBmbGFnICVkXFxuXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYz0zMjc9aW50IG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTM3My1cdCAgICBzaC1cdTAwM2V2dGFnICE9IGN0LVx1MDAzZXByb3RvLnNjdHAudnRhZ1tkaXJdKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6Mzc0Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTM3NS1cdFx0XHRcdFx0ICBcJiMzNDt2ZXJpZmljYXRpb24gdGFnIGNoZWNrIGZhaWxlZCAleCB2cyAleCBmb3IgZGlyICVkXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy00NTMtXHRcdGlmIChuZXdfc3RhdGUgPT0gU0NUUF9DT05OVFJBQ0tfTUFYKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6NDU0Olx0XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtNDU1LVx0XHRcdFx0XHRcdCAgXCYjMzQ7SW52YWxpZCwgb2xkX3N0YXRlICVkLCBkaXIgJWQsIHR5cGUgJWRcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9NTQ0PXN0YXRpYyB2b2lkIG5mX3RjcF9lbWl0X2ludmFsaWRfbG9nKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTUwLVx0Y2FzZSBORl9UQ1BfTE9HX09WRVJTSE9UOlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTUxOlx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTUyLVx0XHRcdFx0XHQgIFwmIzM0OyV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZFwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NTUtXHRjYXNlIE5GX1RDUF9MT0dfU0VRX09WRVI6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1NTY6XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NTctXHRcdFx0XHRcdCAgXCYjMzQ7U0VRIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKG92ZXIgdGhlIHdpbmRvdyBvZiB0aGUgcmVjZWl2ZXIpXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU2MC1cdGNhc2UgTkZfVENQX0xPR19BQ0tfT1ZFUjpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjU2MTpcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU2Mi1cdFx0XHRcdFx0ICBcJiMzNDtBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU2NS1cdGNhc2UgTkZfVENQX0xPR19TRVFfVU5ERVI6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1NjY6XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NjctXHRcdFx0XHRcdCAgXCYjMzQ7U0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZClcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTcwLVx0Y2FzZSBORl9UQ1BfTE9HX0FDS19VTkRFUjpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjU3MTpcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU3Mi1cdFx0XHRcdFx0ICBcJiMzNDtpZ25vcmVkIEFDSyB1bmRlciBsb3dlciBib3VuZCAldSAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQpXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU3NS1cdGNhc2UgTkZfVENQX0xPR19MT1dFUl9USU1FT1VUOlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTc2Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTc3LVx0XHRcdFx0XHQgIFwmIzM0O3BhY2tldCAoaW5kZXggJWQsIGRpciAlZCkgcmVzcG9uc2UgZm9yIGluZGV4ICVkIGxvd2VyIHRpbWVvdXQgdG8gJXVcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9MTA0OT1pbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyMDEtXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTIwMjpcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyMDMtXHRcdFx0XHRcdCAgXCYjMzQ7cGFja2V0IChpbmRleCAlZCkgaW4gZGlyICVkIGlnbm9yZWQsIHN0YXRlICVzXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyMjQtXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTIyNTpcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyMjYtXHRcdFx0XHRcdCAgXCYjMzQ7cGFja2V0IChpbmRleCAlZCkgaW4gZGlyICVkIGludmFsaWQsIHN0YXRlICVzXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyNDItXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMjQzOlx0XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFwmIzM0O2NoYWxsZW5nZS1hY2sgaWdub3JlZFwmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjQ0LVx0XHRcdHJldHVybiBORl9BQ0NFUFQ7IC8qIERvbiYjMzk7dCBjaGFuZ2Ugc3RhdGUgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjg3LVx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMjg4Olx0XHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXCYjMzQ7aW52YWxpZCByc3RcJiMzNDspO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTI4OS1cdFx0XHRcdHJldHVybiAtTkZfQUNDRVBUO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5ODUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA5MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgV29ydGhpbmVzcyBvZiBGdXp6aW5nKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBUaGlzIHBhdGNoIGxvb2tzIGxpa2UgaXQmIzM5O3MgY2hhbmdpbmcgaG93IGludmFsaWQgVENQIHNlZ21lbnRzIGFyZSBsb2dnZWQgd2l0aGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGZyYW1ld29yay4gSW5pdGlhbGx5LCBJIHNlZSB0aGF0IHRoZSBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgZnVuY3Rpb24gaXMgYmVpbmcgcmVwbGFjZWQgYnkgYSBxdWV1ZWQgbG9nZ2luZyBtZWNoYW5pc20sIHdoaWNoIGlzIGludGVyZXN0aW5nLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgKmp1c3QqIGEgbG9nZ2luZyBjaGFuZ2UsIG9yIGlzIHRoZXJlIGEgZnVuY3Rpb25hbCBzaWRlIGVmZmVjdD8mIzM0OwoKTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRoZSBjb2RlIGRpZmYgY29uZmlybXMgdGhhdCB0aGUgcHJpbWFyeSBhbHRlcmF0aW9uIGlzIGluZGVlZCB0aGUgbG9nZ2luZyBtZWNoYW5pc20gaXRzZWxmLiBUaGUgZGlyZWN0IGNhbGwgdG8gYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGlzIHJlcGxhY2VkIHdpdGggYG5mX3RjcF9xdWV1ZV9pbnZhbGlkX2xvZ2AgYW5kIGxhdGVyIGBuZl90Y3BfZW1pdF9pbnZhbGlkX2xvZ3NgLiBUaGUga2V5IGlzIHRoYXQgYG5mX3RjcF9lbWl0X2ludmFsaWRfbG9nc2AgaXMgY2FsbGVkICphZnRlciogcmVsZWFzaW5nIHRoZSBzcGlubG9jayAoYHNwaW5fdW5sb2NrX2JoKCZhbXA7Y3QtJmd0O2xvY2spYCkuIFRoaXMgaXMgbm90IGp1c3QgY29zbWV0aWM7IGl0JiMzOTtzIGEgcmVmYWN0b3JpbmcgdG8gYXZvaWQgaG9sZGluZyBhIGxvY2sgd2hpbGUgbG9nZ2luZywgd2hpY2ggY291bGQgcHJldmVudCBwb3NzaWJsZSBkZWFkbG9ja3MgYW5kIG9yIGltcHJvdmUgcGVyZm9ybWFuY2UuCgpCdXQsIGdpdmVuIHRoZSBwcm9tcHQsIEkmIzM5O20gdHJ5aW5nIHRvIGRldGVybWluZSBpZiBpdOKAmXMgYSDigJxwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2UsIHN1Y2ggYXMgbG9nZ2luZy7igJ0gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB5ZXMsIGJlY2F1c2UgdGhlIHJldHVybiB2YWx1ZXMgKGBORl9BQ0NFUFRgLCBgLU5GX0FDQ0VQVGApIGFuZCB0aGUgb3ZlcmFsbCBmbG93LCAqZnVuY3Rpb25hbGx5KiBzcGVha2luZywgc2VlbSB1bmNoYW5nZWQuIFRoZSBzdGF0ZSBjaGFuZ2VzIGFyZSBjb25zaXN0ZW50LiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHdoZXJlIHRoZSBsb2dnaW5nIG9jY3Vycywgc3BlY2lmaWNhbGx5IG91dHNpZGUgdGhlIGxvY2suIFRoZSBjb3JlIGJlaGF2aW9yIG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgcmVtYWlucyB0aGUgc2FtZS4KClRoZSBwcm9tcHTigJlzIGd1aWRhbmNlIG1lbnRpb25zICYjMzQ7UHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMmIzM0OyBkb24mIzM5O3Qgd2FycmFudCBmdXp6aW5nLiBJcyByZWZhY3RvcmluZyBsb2dnaW5nIHRvIGF2b2lkIGxvY2sgY29udGVudGlvbiBhIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZT8gSXQgZG9lc27igJl0IG1vZGlmeSB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIHByb3RvY29sLiBJJiMzOTttIGxlYW5pbmcgdG93YXJkIHRoZSBhbnN3ZXIgYmVpbmcgeWVzLCBidXQgbGV0JiMzOTtzIGRvdWJsZS1jaGVjay4KCkxldCYjMzk7cyBsb29rIG1vcmUgYXQgYG5mX3RjcF9oYW5kbGVfaW52YWxpZGAuIFRoZSBjb2RlIHF1ZXVlcyB0aGUgbG9nLiBUaGlzIGlzIHB1cmVseSBhIGxvZ2dpbmcgY2hhbmdlLiBJJiMzOTttIGdvaW5nIHRvIGRlY2xhcmUgdGhpcyBwYXRjaCBhcyBzb21ldGhpbmcgdGhhdCBpc24mIzM5O3QgZnVuY3Rpb25hbGx5IGFsdGVyaW5nIHRoZSBzdGFjayYjMzk7cyBiZWhhdmlvciwgYnV0IGluc3RlYWQsIGl0IGlzIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIGxvZ2dpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoZXJlZm9yZSwgSSBiZWxpZXZlIHRoZSBhcHByb3ByaWF0ZSByZXNwb25zZSBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDcwOlx0RVhQT1JUX1NZTUJPTF9HUEwobmZfbDRwcm90b19sb2dfaW52YWxpZCk7XG4gIDcxOlx0XG4gIDcyOlx0X19wcmludGYoNCwgNSlcbiAgNzM6XHR2b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgNzQ6XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuICA3NTpcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXG4gIDc2Olx0XHRcdFx0ICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuICA3NzpcdHtcbiAgNzg6XHRcdHN0cnVjdCB2YV9mb3JtYXQgdmFmO1xuICA3OTpcdFx0c3RydWN0IG5ldCAqbmV0O1xuICA4MDpcdFx0dmFfbGlzdCBhcmdzO1xuICA4MTpcdFxuICA4MjpcdFx0bmV0ID0gbmZfY3RfbmV0KGN0KTtcbiAgODM6XHRcdGlmIChsaWtlbHkobmV0LVx1MDAzZWN0LnN5c2N0bF9sb2dfaW52YWxpZCA9PSAwKSlcbiAgODQ6XHRcdFx0cmV0dXJuO1xuICA4NTpcdFxuICA4NjpcdFx0dmFfc3RhcnQoYXJncywgZm10KTtcbiAgODc6XHRcdHZhZi5mbXQgPSBmbXQ7XG4gIDg4Olx0XHR2YWYudmEgPSBcdTAwMjZhcmdzO1xuICA4OTpcdFxuICA5MDpcdFx0bmZfbDRwcm90b19sb2dfaW52YWxpZChza2IsIHN0YXRlLFxuICA5MTpcdFx0XHRcdCAgICAgICBuZl9jdF9wcm90b251bShjdCksIFwmIzM0OyVwVlwmIzM0OywgXHUwMDI2dmFmKTtcbiAgOTI6XHRcdHZhX2VuZChhcmdzKTtcbiAgOTM6XHR9XG4gIDk0Olx0RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfbDRwcm90b19sb2dfaW52YWxpZCk7XG4gIDk1Olx0I2VuZGlmXG4gIDk2Olx0XG4gIDk3Olx0Y29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpuZl9jdF9sNHByb3RvX2ZpbmQodTggbDRwcm90bylcbiAgOTg6XHR7XG4gIDk5Olx0XHRzd2l0Y2ggKGw0cHJvdG8pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg3MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzczoKCioqQSBTaW1wbGUgRnVuY3Rpb24gQ2FsbCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGFuZCBpdCYjMzk7cyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgYmFzaWNhbGx5IGEgd3JhcHBlci4gSXQgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBkb2luZyBhbnl0aGluZyBjb21wbGV4IGluIGFuZCBvZiBpdHNlbGYuIEVzc2VudGlhbGx5LCB3aGF0IEkmIzM5O20gc2VlaW5nIGlzIHRoYXQgaXQmIzM5O3MganVzdCBjYWxsaW5nIGBuZl9sNHByb3RvX2xvZ19pbnZhbGlkYC4gVGhhdCYjMzk7cyBpdC4gTm8gYWRkaXRpb25hbCBsb2dpYywgbm8gcHJlLXByb2Nlc3NpbmcsIG5vIHBvc3QtcHJvY2Vzc2luZy4gSXQmIzM5O3MgYSBkaXJlY3QgcGFzcy10aHJvdWdoLiBJIHN1cHBvc2UgaXQgY291bGQgYmUgYW4gYWJzdHJhY3Rpb24sIGxpa2VseSBhbiBhdHRlbXB0IHRvIGdyb3VwIHJlbGF0ZWQgZXJyb3IgcmVwb3J0aW5nLCBvciBwZXJoYXBzIGEgbGF5ZXIgb2YgaW5kaXJlY3Rpb24gZm9yIGZ1dHVyZSBtb2RpZmljYXRpb25zLiBCdXQgYXQgdGhpcyBsZXZlbCwgaXQmIzM5O3MgYSBvbmUtbGluZXI6IHRoZSBmaXJzdCBmdW5jdGlvbiBqdXN0IGRlbGVnYXRlcyB0byB0aGUgc2Vjb25kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2w0cHJvdG9fbG9nX2ludmFsaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTQ4PV9fcHJpbnRmKDQsIDUpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjQ5OnZvaWQgbmZfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01MC1cdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNjktfVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo3MDpFWFBPUlRfU1lNQk9MX0dQTChuZl9sNHByb3RvX2xvZ19pbnZhbGlkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNzEtXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz03Mz12b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTg5LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo5MDpcdG5mX2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtOTEtXHRcdFx0ICAgICAgIG5mX2N0X3Byb3RvbnVtKGN0KSwgXCYjMzQ7JXBWXCYjMzQ7LCBcdTAwMjZ2YWYpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYz0xMDY9aW50IG5mX2Nvbm50cmFja19pbmV0X2Vycm9yKHN0cnVjdCBuZl9jb25uICp0bXBsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYy0xNzItXHRcdGlmIChzdGF0ZS1cdTAwM2VwZiA9PSBBRl9JTkVUKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmM6MTczOlx0XHRcdG5mX2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYy0xNzQtXHRcdFx0XHRcdCAgICAgICBsNHByb3RvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYy0xNzctXHRcdH0gZWxzZSBpZiAoc3RhdGUtXHUwMDNlcGYgPT0gQUZfSU5FVDYpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYzoxNzg6XHRcdFx0bmZfbDRwcm90b19sb2dfaW52YWxpZChza2IsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jLTE3OS1cdFx0XHRcdFx0ICAgICAgIGw0cHJvdG8sXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jPTE5Nj1zdGF0aWMgdm9pZCBpY21wX2Vycm9yX2xvZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYy0xOTkte1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jOjIwMDpcdG5mX2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBzdGF0ZSwgSVBQUk9UT19JQ01QLCBcJiMzNDslc1wmIzM0OywgbXNnKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYy0yMDEtfVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jPTEyNz1zdGF0aWMgdm9pZCBpY21wdjZfZXJyb3JfbG9nKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMtMTMwLXtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jOjEzMTpcdG5mX2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBzdGF0ZSwgSVBQUk9UT19JQ01QVjYsIFwmIzM0OyVzXCYjMzQ7LCBtc2cpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMtMTMyLX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM9Mjk1PXN0YXRpYyBib29sIHNjdHBfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMzIxLW91dF9pbnZhbGlkOlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jOjMyMjpcdG5mX2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBzdGF0ZSwgSVBQUk9UT19TQ1RQLCBcJiMzNDslc1wmIzM0OywgbG9nbXNnKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0zMjMtXHRyZXR1cm4gdHJ1ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz04ODA9c3RhdGljIHZvaWQgdGNwX2Vycm9yX2xvZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTg4My17XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo4ODQ6XHRuZl9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgc3RhdGUsIElQUFJPVE9fVENQLCBcJiMzNDslc1wmIzM0OywgbXNnKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTg4NS19XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmM9Mzc9c3RhdGljIHZvaWQgdWRwX2Vycm9yX2xvZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jLTQwLXtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jOjQxOlx0bmZfbDRwcm90b19sb2dfaW52YWxpZChza2IsIHN0YXRlLCBJUFBST1RPX1VEUCwgXCYjMzQ7JXNcJiMzNDssIG1zZyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYy00Mi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzOTQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIGBuZl9sNHByb3RvX2xvZ19pbnZhbGlkYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhpcyBgbmZfbDRwcm90b19sb2dfaW52YWxpZGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgcGFydGljdWxhcmx5IGl0cyByb2xlIGluIGhhbmRsaW5nIGludmFsaWQgTDQgcHJvdG9jb2wgZGF0YS4gVGhpcyBpcyBjcnVjaWFsIGZvciBuZXR3b3JrIHNlY3VyaXR5IGFuZCB0cmFmZmljIGFuYWx5c2lzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uPyBXaGF0IGluZm9ybWF0aW9uIGRvZXMgaXQgbG9nPyBJcyB0aGlzIGxvZ2dpbmcgY29uZmlndXJhYmxlPyBBbmQgaG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCBvdGhlciBOZXRmaWx0ZXIgY29tcG9uZW50cywgcGFydGljdWxhcmx5IHRob3NlIGRlYWxpbmcgd2l0aCBwYWNrZXQgZmlsdGVyaW5nIGFuZCBjb25uZWN0aW9uIHRyYWNraW5nPyBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIGNvbnNpZGVyYXRpb25zIGFyb3VuZCBwZXJmb3JtYW5jZSBhbmQgcG90ZW50aWFsIERvUyB2ZWN0b3JzIOKAkyBob3cgZWZmaWNpZW50bHkgaXMgdGhpcyBoYW5kbGluZyBlcnJvcnM/IEFueSBjaGFuY2UgZm9yIHJhY2UgY29uZGl0aW9ucz8gQXJlIHRoZXJlIGFueSBrbm93biB2dWxuZXJhYmlsaXRpZXMgYXNzb2NpYXRlZCB3aXRoIGl0cyBsb2dnaW5nIG1lY2hhbmlzbXM/IExldCYjMzk7cyBnZXQgaW50byB0aGUgZGV0YWlscyBhbmQgZmlndXJlIG91dCBob3cgcm9idXN0IGl0IHRydWx5IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG4gIDQxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbiAgNDI6XHQjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4gIDQzOlx0I2luY2x1ZGUgXHUwMDNjbmV0L2luZXRfZnJhZy5oXHUwMDNlXG4gIDQ0Olx0XG4gIDQ1Olx0c3RhdGljIERFRklORV9NVVRFWChuZl9jdF9wcm90b19tdXRleCk7XG4gIDQ2Olx0XG4gIDQ3Olx0I2lmZGVmIENPTkZJR19TWVNDVExcbiAgNDg6XHRfX3ByaW50Zig0LCA1KVxuICA0OTpcdHZvaWQgbmZfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICA1MDpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXG4gIDUxOlx0XHRcdFx0ICAgIHU4IHByb3RvbnVtLFxuICA1MjpcdFx0XHRcdCAgICBjb25zdCBjaGFyICpmbXQsIC4uLilcbiAgNTM6XHR7XG4gIDU0Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzdGF0ZS1cdTAwM2VuZXQ7XG4gIDU1Olx0XHRzdHJ1Y3QgdmFfZm9ybWF0IHZhZjtcbiAgNTY6XHRcdHZhX2xpc3QgYXJncztcbiAgNTc6XHRcbiAgNTg6XHRcdGlmIChuZXQtXHUwMDNlY3Quc3lzY3RsX2xvZ19pbnZhbGlkICE9IHByb3RvbnVtIFx1MDAyNlx1MDAyNlxuICA1OTpcdFx0ICAgIG5ldC1cdTAwM2VjdC5zeXNjdGxfbG9nX2ludmFsaWQgIT0gSVBQUk9UT19SQVcpXG4gIDYwOlx0XHRcdHJldHVybjtcbiAgNjE6XHRcbiAgNjI6XHRcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XG4gIDYzOlx0XHR2YWYuZm10ID0gZm10O1xuICA2NDpcdFx0dmFmLnZhID0gXHUwMDI2YXJncztcbiAgNjU6XHRcbiAgNjY6XHRcdG5mX2xvZ19wYWNrZXQobmV0LCBzdGF0ZS1cdTAwM2VwZiwgMCwgc2tiLCBzdGF0ZS1cdTAwM2Vpbiwgc3RhdGUtXHUwMDNlb3V0LFxuICA2NzpcdFx0XHQgICAgICBOVUxMLCBcJiMzNDtuZl9jdF9wcm90b18lZDogJXBWIFwmIzM0OywgcHJvdG9udW0sIFx1MDAyNnZhZik7XG4gIDY4Olx0XHR2YV9lbmQoYXJncyk7XG4gIDY5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA4NQoJCQkJCQkJb3V0cHV0OiA4MwoJCQkJCQkJdGhvdWdodHM6IDU4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIEltcGFjdDogTG9nZ2luZyBSZWZhY3RvcmluZyoqCgpPa2F5LCBzbyBgbmZfbDRwcm90b19sb2dfaW52YWxpZGAgbm93IGNhbGxzIGBuZl9sb2dfcGFja2V0YCBkaWZmZXJlbnRseS4gSXQmIzM5O3MgYSBsb2dnaW5nIGZ1bmN0aW9uLCBwdXJlbHkuIFRoaXMgcGF0Y2gmIzM5O3MgcHVycG9zZSBpcyB0byBkZWZlciB0aGlzIGxvZ2dpbmcgdG8gYXZvaWQgaG9sZGluZyBgY3QtJmd0O2xvY2tgIGR1cmluZyB0aGUgbG9nZ2luZyBwcm9jZXNzLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRlcm1zIG9mIGxvY2sgY29udGVudGlvbiBhbmQgZGVhZGxvY2sgYXZvaWRhbmNlLCBmb3Igc3VyZSwgYnV0IGZ1bmRhbWVudGFsbHksIGl0JiMzOTtzIGp1c3QgYWJvdXQgKndoZW4qIHRoZSBsb2dnaW5nIGhhcHBlbnMuCgpJIGhhZCB0byBkb3VibGUtY2hlY2s6IGRvZXMgdGhpcyBhY3R1YWxseSBjaGFuZ2UgdGhlIHByb2dyYW0gZmxvdz8gTm9wZSwgdGhlIHJldHVybiB2YWx1ZXMgb2YgYHRjcF9pbl93aW5kb3dgIGFuZCBgbmZfdGNwX2hhbmRsZV9pbnZhbGlkYCBhcmUgdGhlIHNhbWU7IHRoZSBzdGF0ZSBjaGFuZ2VzIGFyZSBjb25zaXN0ZW50LiBUaGUgbG9nZ2luZyBpcyBqdXN0IG1vdmVkIG91dHNpZGUgdGhlIGxvY2suCgpTaG91bGQgSSBldmVuIGZ1enogdGhpcz8gSG1tLCB1bmxpa2VseS4gVW5sZXNzIHRoZXJlJiMzOTtzIGEgYnVnIGluICpob3cqIHRoZSBsb2dnaW5nIGlzIHF1ZXVlZCwgbGlrZSBhbiBvdXQtb2YtYm91bmRzIGlzc3VlLiBMZXQmIzM5O3MgbG9vayBhdCB0aGF0IHF1ZXVpbmcgY29kZS4uLgoKYGBgYwpzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyB7CgkvKiBBdCBtb3N0IG9uZSB0Y3BfaW5fd2luZG93KCkgbG9nIHBsdXMgb25lIGxvd2VyLXRpbWVvdXQgbG9nLiAqLwoJc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyBlbnRyaWVzWzJdOwoJdTggbnVtOwp9OwoKc3RhdGljIHZvaWQgbmZfdGNwX3F1ZXVlX2ludmFsaWRfbG9nKHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2dzICpsb2dzLAoJCQkJICAgICBlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGUsCgkJCQkgICAgIHUzMiB2YWx1ZSwgdTggaW5kZXgsIHU4IGRpciwKCQkJCSAgICAgdTggbGFzdF9pbmRleCkKewoJc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyAqbG9nOwoKCWlmIChsb2dzLSZndDtudW0gJmd0Oz0gQVJSQVlfU0laRShsb2dzLSZndDtlbnRyaWVzKSkKCQlyZXR1cm47CgoJbG9nID0gJmFtcDtsb2dzLSZndDtlbnRyaWVzW2xvZ3MtJmd0O251bSYjNDM7JiM0MztdOwoJbG9nLSZndDt0eXBlID0gdHlwZTsKCWxvZy0mZ3Q7dmFsdWUgPSB2YWx1ZTsKCWxvZy0mZ3Q7aW5kZXggPSBpbmRleDsKCWxvZy0mZ3Q7ZGlyID0gZGlyOwoJbG9nLSZndDtsYXN0X2luZGV4ID0gbGFzdF9pbmRleDsKfQpgYGAKClllcCwgc2ltcGxlIGFuZCBzYWZlLiBgQVJSQVlfU0laRWAgY2hlY2ssIGEgc21hbGwgYXJyYXkuIE5vIG9idmlvdXMgcHJvYmxlbXMgdGhlcmUuCgpUaGUgcHJvbXB0IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBoYXMgJiMzNDtQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4mIzM0OyBUaGlzIGlzIGEgcmVmYWN0b3Jpbmcgb2YgKmxvZ2dpbmcqLiBJdCBkZWZlcnMgdGhlIGxvZ2dpbmcsIGJ1dCB0aGUgbG9nZ2luZyBpdHNlbGYgaXMgc3RpbGwgdGhlIHNhbWUuIFNvIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgYmVjYXVzZSBpdCAqaXMqIGEgbG9nZ2luZyBjaGFuZ2UuCgpOb3csIGhvbGQgb24uIElzIGl0ICpwb3NzaWJsZSogdGhpcyBjaGFuZ2UgZml4ZXMgYW4gdW5kZXJseWluZyBkZWFkbG9jayBpc3N1ZSBieSBtb3ZpbmcgdGhlIGxvZ2dpbmc/IFllcywgcG90ZW50aWFsbHkuIEJ1dCB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYWlkIHRvIHJldHVybiBgZmFsc2VgIGZvciAmIzM0O3B1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMmIzM0Oy4gSXMgbW92aW5nIGxvZ2dpbmcgb3V0c2lkZSBhIHNwaW5sb2NrIHB1cmVseSBkZWNvcmF0aXZlPyBJdCBkb2VzbiYjMzk7dCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIHByb3RvY29sIGV4ZWN1dGlvbi4gSSYjMzk7bSBnb2luZyB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbG9nZ2luZyBvZiBpbnZhbGlkIFRDUCBwYWNrZXRzIGluIG5ldGZpbHRlciBjb25udHJhY2sgdG8gZGVmZXIgdGhlIGxvZ2dpbmcgdW50aWwgYWZ0ZXIgdGhlIGNvbm50cmFjayBzcGlubG9jayBpcyByZWxlYXNlZC4gVGhpcyBpcyBhIHB1cmVseSBkZWNvcmF0aXZlL2xvZ2dpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUgbmV0d29yayBzdGFjay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbG9nZ2luZyBvZiBpbnZhbGlkIFRDUCBwYWNrZXRzIGluIG5ldGZpbHRlciBjb25udHJhY2sgdG8gZGVmZXIgdGhlIGxvZ2dpbmcgdW50aWwgYWZ0ZXIgdGhlIGNvbm50cmFjayBzcGlubG9jayBpcyByZWxlYXNlZC4gVGhpcyBpcyBhIHB1cmVseSBkZWNvcmF0aXZlL2xvZ2dpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUgbmV0d29yayBzdGFjay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTo0NzowNy41Mzk3NzMzNTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTE5MjM3NjkxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsb2dnaW5nIG9mIGludmFsaWQgVENQIHBhY2tldHMgaW4gbmV0ZmlsdGVyIGNvbm50cmFjayB0byBkZWZlciB0aGUgbG9nZ2luZyB1bnRpbCBhZnRlciB0aGUgY29ubnRyYWNrIHNwaW5sb2NrIGlzIHJlbGVhc2VkLiBUaGlzIGlzIGEgcHVyZWx5IGRlY29yYXRpdmUvbG9nZ2luZyBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBuZXR3b3JrIHN0YWNrLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6NDc6MDcuNTM5NzgxNTI0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE4MjI1NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiM2QzN2VkYTVkNDg5ZWE0ZmQ4ZjFiNTViYmZjMjJkYzFjOWQxOGIyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDE5OjQ3OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcXG5pbmRleCBjZWVlZDNkN2ZlNTIwLi4wMGYwMTdkOTk5N2ZhIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcXG5AQCAtNDgwLDM3ICs0ODAsMTI1IEBAIHN0YXRpYyB2b2lkIHRjcF9pbml0X3NlbmRlcihzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsXFxuIFxcdH1cXG4gfVxcbiBcXG4tX19wcmludGYoNiwgNylcXG4tc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvbiBuZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJldCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqZm10LCAuLi4pXFxuK2VudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUge1xcbitcXHRORl9UQ1BfTE9HX05PTkUsXFxuK1xcdE5GX1RDUF9MT0dfT1ZFUlNIT1QsXFxuK1xcdE5GX1RDUF9MT0dfU0VRX09WRVIsXFxuK1xcdE5GX1RDUF9MT0dfQUNLX09WRVIsXFxuK1xcdE5GX1RDUF9MT0dfU0VRX1VOREVSLFxcbitcXHRORl9UQ1BfTE9HX0FDS19VTkRFUixcXG4rXFx0TkZfVENQX0xPR19MT1dFUl9USU1FT1VULFxcbit9O1xcbitcXG4rc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyB7XFxuK1xcdGVudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUgdHlwZTtcXG4rXFx0dTMyIHZhbHVlO1xcbitcXHR1OCBpbmRleDtcXG4rXFx0dTggZGlyO1xcbitcXHR1OCBsYXN0X2luZGV4O1xcbit9O1xcbitcXG4rc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3Mge1xcbitcXHQvKiBBdCBtb3N0IG9uZSB0Y3BfaW5fd2luZG93KCkgbG9nIHBsdXMgb25lIGxvd2VyLXRpbWVvdXQgbG9nLiAqL1xcbitcXHRzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nIGVudHJpZXNbMl07XFxuK1xcdHU4IG51bTtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIG5mX3RjcF9xdWV1ZV9pbnZhbGlkX2xvZyhzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncyxcXG4rXFx0XFx0XFx0XFx0ICAgICBlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyIHZhbHVlLCB1OCBpbmRleCwgdTggZGlyLFxcbitcXHRcXHRcXHRcXHQgICAgIHU4IGxhc3RfaW5kZXgpXFxuK3tcXG4rXFx0c3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyAqbG9nO1xcbitcXG4rXFx0aWYgKGxvZ3MtXFx1MDAzZW51bSBcXHUwMDNlPSBBUlJBWV9TSVpFKGxvZ3MtXFx1MDAzZWVudHJpZXMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRsb2cgPSBcXHUwMDI2bG9ncy1cXHUwMDNlZW50cmllc1tsb2dzLVxcdTAwM2VudW0rK107XFxuK1xcdGxvZy1cXHUwMDNldHlwZSA9IHR5cGU7XFxuK1xcdGxvZy1cXHUwMDNldmFsdWUgPSB2YWx1ZTtcXG4rXFx0bG9nLVxcdTAwM2VpbmRleCA9IGluZGV4O1xcbitcXHRsb2ctXFx1MDAzZWRpciA9IGRpcjtcXG4rXFx0bG9nLVxcdTAwM2VsYXN0X2luZGV4ID0gbGFzdF9pbmRleDtcXG4rfVxcbitcXG4rc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvblxcbituZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbitcXHRcXHQgICBjb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsXFxuK1xcdFxcdCAgIHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2dzICpsb2dzLFxcbitcXHRcXHQgICBlbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmV0LFxcbitcXHRcXHQgICBlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGUsXFxuK1xcdFxcdCAgIHUzMiB2YWx1ZSlcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgbmZfdGNwX25ldCAqdG4gPSBuZl90Y3BfcGVybmV0KG5mX2N0X25ldChjdCkpO1xcbi1cXHRzdHJ1Y3QgdmFfZm9ybWF0IHZhZjtcXG4tXFx0dmFfbGlzdCBhcmdzO1xcbiBcXHRib29sIGJlX2xpYmVyYWw7XFxuIFxcbiBcXHRiZV9saWJlcmFsID0gc2VuZGVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX0NUX1RDUF9GTEFHX0JFX0xJQkVSQUwgfHwgdG4tXFx1MDAzZXRjcF9iZV9saWJlcmFsO1xcbiBcXHRpZiAoYmVfbGliZXJhbClcXG4gXFx0XFx0cmV0dXJuIE5GQ1RfVENQX0FDQ0VQVDtcXG4gXFxuLVxcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XFxuLVxcdHZhZi5mbXQgPSBmbXQ7XFxuLVxcdHZhZi52YSA9IFxcdTAwMjZhcmdzO1xcbi1cXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcXFwiJXBWXFxcIiwgXFx1MDAyNnZhZik7XFxuLVxcdHZhX2VuZChhcmdzKTtcXG4tXFxuK1xcdG5mX3RjcF9xdWV1ZV9pbnZhbGlkX2xvZyhsb2dzLCB0eXBlLCB2YWx1ZSwgMCwgMCwgMCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG5mX3RjcF9lbWl0X2ludmFsaWRfbG9nKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuK1xcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXFxuK1xcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nICpsb2cpXFxuK3tcXG4rXFx0c3dpdGNoIChsb2ctXFx1MDAzZXR5cGUpIHtcXG4rXFx0Y2FzZSBORl9UQ1BfTE9HX09WRVJTSE9UOlxcbitcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbitcXHRcXHRcXHRcXHRcXHQgIFxcXCIldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWRcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgIGxvZy1cXHUwMDNldmFsdWUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBORl9UQ1BfTE9HX1NFUV9PVkVSOlxcbitcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbitcXHRcXHRcXHRcXHRcXHQgIFxcXCJTRVEgaXMgb3ZlciB1cHBlciBib3VuZCAldSAob3ZlciB0aGUgd2luZG93IG9mIHRoZSByZWNlaXZlcilcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgIGxvZy1cXHUwMDNldmFsdWUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBORl9UQ1BfTE9HX0FDS19PVkVSOlxcbitcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbitcXHRcXHRcXHRcXHRcXHQgIFxcXCJBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICBsb2ctXFx1MDAzZXZhbHVlKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTkZfVENQX0xPR19TRVFfVU5ERVI6XFxuK1xcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFxcIlNFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICBsb2ctXFx1MDAzZXZhbHVlKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTkZfVENQX0xPR19BQ0tfVU5ERVI6XFxuK1xcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFxcImlnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZClcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgIGxvZy1cXHUwMDNldmFsdWUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBORl9UQ1BfTE9HX0xPV0VSX1RJTUVPVVQ6XFxuK1xcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFxcInBhY2tldCAoaW5kZXggJWQsIGRpciAlZCkgcmVzcG9uc2UgZm9yIGluZGV4ICVkIGxvd2VyIHRpbWVvdXQgdG8gJXVcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgIGxvZy1cXHUwMDNlaW5kZXgsIGxvZy1cXHUwMDNlZGlyLFxcbitcXHRcXHRcXHRcXHRcXHQgIGxvZy1cXHUwMDNlbGFzdF9pbmRleCwgbG9nLVxcdTAwM2V2YWx1ZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5GX1RDUF9MT0dfTk9ORTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbmZfdGNwX2VtaXRfaW52YWxpZF9sb2dzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncylcXG4re1xcbitcXHR1OCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxvZ3MtXFx1MDAzZW51bTsgaSsrKVxcbitcXHRcXHRuZl90Y3BfZW1pdF9pbnZhbGlkX2xvZyhza2IsIGN0LCBzdGF0ZSwgXFx1MDAyNmxvZ3MtXFx1MDAzZWVudHJpZXNbaV0pO1xcbit9XFxuK1xcbiBzdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uXFxuIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbiBcXHQgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdCAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3BoLFxcbi1cXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqaG9va19zdGF0ZSlcXG4rXFx0ICAgICAgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3MgKmxvZ3MpXFxuIHtcXG4gXFx0c3RydWN0IGlwX2N0X3RjcCAqc3RhdGUgPSBcXHUwMDI2Y3QtXFx1MDAzZXByb3RvLnRjcDtcXG4gXFx0c3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyID0gXFx1MDAyNnN0YXRlLVxcdTAwM2VzZWVuW2Rpcl07XFxuQEAgLTY0MCwzMSArNzI4LDI5IEBAIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbiBcXHRcXHRcXHRzZW5kZXItXFx1MDAzZXRkX2VuZCA9IGVuZDtcXG4gXFx0XFx0XFx0c2VuZGVyLVxcdTAwM2VmbGFncyB8PSBJUF9DVF9UQ1BfRkxBR19EQVRBX1VOQUNLTk9XTEVER0VEO1xcbiBcXG4tXFx0XFx0XFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBcXFwiJXUgYnl0ZXMgbW9yZSB0aGFuIGV4cGVjdGVkXFxcIiwgb3ZlcnNob3QpO1xcbitcXHRcXHRcXHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZ3MsIE5GQ1RfVENQX0lHTk9SRSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBORl9UQ1BfTE9HX09WRVJTSE9ULCBvdmVyc2hvdCk7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JTlZBTElELFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJTRVEgaXMgb3ZlciB1cHBlciBib3VuZCAldSAob3ZlciB0aGUgd2luZG93IG9mIHRoZSByZWNlaXZlcilcXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHQgIHNlbmRlci1cXHUwMDNldGRfbWF4ZW5kICsgMSk7XFxuK1xcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoY3QsIHNlbmRlciwgbG9ncywgTkZDVF9UQ1BfSU5WQUxJRCxcXG4rXFx0XFx0XFx0XFx0ICBORl9UQ1BfTE9HX1NFUV9PVkVSLCBzZW5kZXItXFx1MDAzZXRkX21heGVuZCArIDEpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIWJlZm9yZShzYWNrLCByZWNlaXZlci1cXHUwMDNldGRfZW5kICsgMSkpXFxuLVxcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JTlZBTElELFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICByZWNlaXZlci1cXHUwMDNldGRfZW5kICsgMSk7XFxuK1xcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoY3QsIHNlbmRlciwgbG9ncywgTkZDVF9UQ1BfSU5WQUxJRCxcXG4rXFx0XFx0XFx0XFx0ICBORl9UQ1BfTE9HX0FDS19PVkVSLCByZWNlaXZlci1cXHUwMDNldGRfZW5kICsgMSk7XFxuIFxcbiBcXHQvKiBJcyB0aGUgZW5kaW5nIHNlcXVlbmNlIGluIHRoZSByZWNlaXZlIHdpbmRvdyAoaWYgYXZhaWxhYmxlKT8gKi9cXG4gXFx0aW5fcmVjdl93aW4gPSAhcmVjZWl2ZXItXFx1MDAzZXRkX21heHdpbiB8fFxcbiBcXHRcXHQgICAgICBhZnRlcihlbmQsIHNlbmRlci1cXHUwMDNldGRfZW5kIC0gcmVjZWl2ZXItXFx1MDAzZXRkX21heHdpbiAtIDEpO1xcbiBcXHRpZiAoIWluX3JlY3Zfd2luKVxcbi1cXHRcXHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJTRVEgaXMgdW5kZXIgbG93ZXIgYm91bmQgJXUgKGFscmVhZHkgQUNLZWQgZGF0YSByZXRyYW5zbWl0dGVkKVxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgc2VuZGVyLVxcdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cXHUwMDNldGRfbWF4d2luIC0gMSk7XFxuK1xcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoY3QsIHNlbmRlciwgbG9ncywgTkZDVF9UQ1BfSUdOT1JFLFxcbitcXHRcXHRcXHRcXHQgIE5GX1RDUF9MT0dfU0VRX1VOREVSLFxcbitcXHRcXHRcXHRcXHQgIHNlbmRlci1cXHUwMDNldGRfZW5kIC0gcmVjZWl2ZXItXFx1MDAzZXRkX21heHdpbiAtIDEpO1xcbiBcXHRpZiAoIWFmdGVyKHNhY2ssIHJlY2VpdmVyLVxcdTAwM2V0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpKVxcbi1cXHRcXHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJpZ25vcmVkIEFDSyB1bmRlciBsb3dlciBib3VuZCAldSAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQpXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICByZWNlaXZlci1cXHUwMDNldGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKTtcXG4rXFx0XFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChjdCwgc2VuZGVyLCBsb2dzLCBORkNUX1RDUF9JR05PUkUsXFxuK1xcdFxcdFxcdFxcdCAgTkZfVENQX0xPR19BQ0tfVU5ERVIsXFxuK1xcdFxcdFxcdFxcdCAgcmVjZWl2ZXItXFx1MDAzZXRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSk7XFxuIFxcbiBcXHQvKiBUYWtlIGludG8gYWNjb3VudCB3aW5kb3cgc2NhbGluZyAoUkZDIDEzMjMpLiAqL1xcbiBcXHRpZiAoIXRjcGgtXFx1MDAzZXN5bilcXG5AQCAtNzIwLDEwICs4MDYsOSBAQCB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLVxcdFxcdFxcdFxcdFxcdCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbi1cXHRcXHRcXHRcXHRcXHQgaW50IGluZGV4LFxcbi1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpob29rX3N0YXRlKVxcbitcXHRcXHRcXHRcXHQgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG4rXFx0XFx0XFx0XFx0IGludCBpbmRleCxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2dzICpsb2dzKVxcbiB7XFxuIFxcdGNvbnN0IHVuc2lnbmVkIGludCAqdGltZW91dHM7XFxuIFxcdGNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0bjtcXG5AQCAtNzY0LDkgKzg0OSwxMCBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFxuIFxcdFxcdHRpbWVvdXQgPSBSRUFEX09OQ0UodGltZW91dHNbVENQX0NPTk5UUkFDS19VTkFDS10pO1xcbiBcXHRcXHRpZiAoZXhwaXJlcyBcXHUwMDNlIHRpbWVvdXQpIHtcXG4tXFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJwYWNrZXQgKGluZGV4ICVkLCBkaXIgJWQpIHJlc3BvbnNlIGZvciBpbmRleCAlZCBsb3dlciB0aW1lb3V0IHRvICV1XFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICBpbmRleCwgZGlyLCBjdC1cXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXgsIHRpbWVvdXQpO1xcbitcXHRcXHRcXHRuZl90Y3BfcXVldWVfaW52YWxpZF9sb2cobG9ncyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IE5GX1RDUF9MT0dfTE9XRVJfVElNRU9VVCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHRpbWVvdXQsIGluZGV4LCBkaXIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBjdC1cXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXgpO1xcbiBcXG4gXFx0XFx0XFx0V1JJVEVfT05DRShjdC1cXHUwMDNldGltZW91dCwgdGltZW91dCArIG5mY3RfdGltZV9zdGFtcCk7XFxuIFxcdFxcdH1cXG5AQCAtOTcxLDYgKzEwNTcsNyBAQCBpbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbiBcXHRlbnVtIHRjcF9jb25udHJhY2sgbmV3X3N0YXRlLCBvbGRfc3RhdGU7XFxuIFxcdHVuc2lnbmVkIGludCBpbmRleCwgKnRpbWVvdXRzO1xcbiBcXHRlbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmVzO1xcbitcXHRzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyBsb2dzID0ge307XFxuIFxcdGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7XFxuIFxcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoO1xcbiBcXHRzdHJ1Y3QgdGNwaGRyIF90Y3BoO1xcbkBAIC0xMjUyLDE0ICsxMzM5LDE2IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcdH1cXG4gXFxuIFxcdHJlcyA9IHRjcF9pbl93aW5kb3coY3QsIGRpciwgaW5kZXgsXFxuLVxcdFxcdFxcdCAgICBza2IsIGRhdGFvZmYsIHRoLCBzdGF0ZSk7XFxuK1xcdFxcdFxcdCAgICBza2IsIGRhdGFvZmYsIHRoLCBcXHUwMDI2bG9ncyk7XFxuIFxcdHN3aXRjaCAocmVzKSB7XFxuIFxcdGNhc2UgTkZDVF9UQ1BfSUdOT1JFOlxcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRuZl90Y3BfZW1pdF9pbnZhbGlkX2xvZ3Moc2tiLCBjdCwgc3RhdGUsIFxcdTAwMjZsb2dzKTtcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFx0Y2FzZSBORkNUX1RDUF9JTlZBTElEOlxcbi1cXHRcXHRuZl90Y3BfaGFuZGxlX2ludmFsaWQoY3QsIGRpciwgaW5kZXgsIHNrYiwgc3RhdGUpO1xcbitcXHRcXHRuZl90Y3BfaGFuZGxlX2ludmFsaWQoY3QsIGRpciwgaW5kZXgsIFxcdTAwMjZsb2dzKTtcXG4gXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmN0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0bmZfdGNwX2VtaXRfaW52YWxpZF9sb2dzKHNrYiwgY3QsIHN0YXRlLCBcXHUwMDI2bG9ncyk7XFxuIFxcdFxcdHJldHVybiAtTkZfQUNDRVBUO1xcbiBcXHRjYXNlIE5GQ1RfVENQX0FDQ0VQVDpcXG4gXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjQ3OjA3Ljk2MjMxNTcyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQwNzY5ODI1NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxvZ2dpbmcgb2YgaW52YWxpZCBUQ1AgcGFja2V0cyBpbiBuZXRmaWx0ZXIgY29ubnRyYWNrIHRvIGRlZmVyIHRoZSBsb2dnaW5nIHVudGlsIGFmdGVyIHRoZSBjb25udHJhY2sgc3BpbmxvY2sgaXMgcmVsZWFzZWQuIFRoaXMgaXMgYSBwdXJlbHkgZGVjb3JhdGl2ZS9sb2dnaW5nIGNoYW5nZSB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIG5ldHdvcmsgc3RhY2suXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiM2QzN2VkYTVkNDg5ZWE0ZmQ4ZjFiNTViYmZjMjJkYzFjOWQxOGIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTk6NDc6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG5pbmRleCBjZWVlZDNkN2ZlNTIwLi4wMGYwMTdkOTk5N2ZhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG5AQCAtNDgwLDM3ICs0ODAsMTI1IEBAIHN0YXRpYyB2b2lkIHRjcF9pbml0X3NlbmRlcihzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsXG4gXHR9XG4gfVxuIFxuLV9fcHJpbnRmKDYsIDcpXG4tc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvbiBuZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlLFxuLVx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcbi1cdFx0XHRcdFx0XHRlbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmV0LFxuLVx0XHRcdFx0XHRcdGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuK2VudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUge1xuK1x0TkZfVENQX0xPR19OT05FLFxuK1x0TkZfVENQX0xPR19PVkVSU0hPVCxcbitcdE5GX1RDUF9MT0dfU0VRX09WRVIsXG4rXHRORl9UQ1BfTE9HX0FDS19PVkVSLFxuK1x0TkZfVENQX0xPR19TRVFfVU5ERVIsXG4rXHRORl9UQ1BfTE9HX0FDS19VTkRFUixcbitcdE5GX1RDUF9MT0dfTE9XRVJfVElNRU9VVCxcbit9O1xuK1xuK3N0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cge1xuK1x0ZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB0eXBlO1xuK1x0dTMyIHZhbHVlO1xuK1x0dTggaW5kZXg7XG4rXHR1OCBkaXI7XG4rXHR1OCBsYXN0X2luZGV4O1xuK307XG4rXG4rc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3Mge1xuK1x0LyogQXQgbW9zdCBvbmUgdGNwX2luX3dpbmRvdygpIGxvZyBwbHVzIG9uZSBsb3dlci10aW1lb3V0IGxvZy4gKi9cbitcdHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgZW50cmllc1syXTtcbitcdHU4IG51bTtcbit9O1xuK1xuK3N0YXRpYyB2b2lkIG5mX3RjcF9xdWV1ZV9pbnZhbGlkX2xvZyhzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncyxcbitcdFx0XHRcdCAgICAgZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB0eXBlLFxuK1x0XHRcdFx0ICAgICB1MzIgdmFsdWUsIHU4IGluZGV4LCB1OCBkaXIsXG4rXHRcdFx0XHQgICAgIHU4IGxhc3RfaW5kZXgpXG4re1xuK1x0c3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyAqbG9nO1xuK1xuK1x0aWYgKGxvZ3MtXHUwMDNlbnVtIFx1MDAzZT0gQVJSQVlfU0laRShsb2dzLVx1MDAzZWVudHJpZXMpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRsb2cgPSBcdTAwMjZsb2dzLVx1MDAzZWVudHJpZXNbbG9ncy1cdTAwM2VudW0rK107XG4rXHRsb2ctXHUwMDNldHlwZSA9IHR5cGU7XG4rXHRsb2ctXHUwMDNldmFsdWUgPSB2YWx1ZTtcbitcdGxvZy1cdTAwM2VpbmRleCA9IGluZGV4O1xuK1x0bG9nLVx1MDAzZWRpciA9IGRpcjtcbitcdGxvZy1cdTAwM2VsYXN0X2luZGV4ID0gbGFzdF9pbmRleDtcbit9XG4rXG4rc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvblxuK25mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4rXHRcdCAgIGNvbnN0IHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcbitcdFx0ICAgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3MgKmxvZ3MsXG4rXHRcdCAgIGVudW0gbmZfY3RfdGNwX2FjdGlvbiByZXQsXG4rXHRcdCAgIGVudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUgdHlwZSxcbitcdFx0ICAgdTMyIHZhbHVlKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0biA9IG5mX3RjcF9wZXJuZXQobmZfY3RfbmV0KGN0KSk7XG4tXHRzdHJ1Y3QgdmFfZm9ybWF0IHZhZjtcbi1cdHZhX2xpc3QgYXJncztcbiBcdGJvb2wgYmVfbGliZXJhbDtcbiBcbiBcdGJlX2xpYmVyYWwgPSBzZW5kZXItXHUwMDNlZmxhZ3MgXHUwMDI2IElQX0NUX1RDUF9GTEFHX0JFX0xJQkVSQUwgfHwgdG4tXHUwMDNldGNwX2JlX2xpYmVyYWw7XG4gXHRpZiAoYmVfbGliZXJhbClcbiBcdFx0cmV0dXJuIE5GQ1RfVENQX0FDQ0VQVDtcbiBcbi1cdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XG4tXHR2YWYuZm10ID0gZm10O1xuLVx0dmFmLnZhID0gXHUwMDI2YXJncztcbi1cdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFwiJXBWXCIsIFx1MDAyNnZhZik7XG4tXHR2YV9lbmQoYXJncyk7XG4tXG4rXHRuZl90Y3BfcXVldWVfaW52YWxpZF9sb2cobG9ncywgdHlwZSwgdmFsdWUsIDAsIDAsIDApO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbmZfdGNwX2VtaXRfaW52YWxpZF9sb2coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4rXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlLFxuK1x0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZylcbit7XG4rXHRzd2l0Y2ggKGxvZy1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIE5GX1RDUF9MT0dfT1ZFUlNIT1Q6XG4rXHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4rXHRcdFx0XHRcdCAgXCIldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWRcIixcbitcdFx0XHRcdFx0ICBsb2ctXHUwMDNldmFsdWUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTkZfVENQX0xPR19TRVFfT1ZFUjpcbitcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbitcdFx0XHRcdFx0ICBcIlNFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVwiLFxuK1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBORl9UQ1BfTE9HX0FDS19PVkVSOlxuK1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuK1x0XHRcdFx0XHQgIFwiQUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KVwiLFxuK1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBORl9UQ1BfTE9HX1NFUV9VTkRFUjpcbitcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbitcdFx0XHRcdFx0ICBcIlNFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpXCIsXG4rXHRcdFx0XHRcdCAgbG9nLVx1MDAzZXZhbHVlKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE5GX1RDUF9MT0dfQUNLX1VOREVSOlxuK1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuK1x0XHRcdFx0XHQgIFwiaWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKVwiLFxuK1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBORl9UQ1BfTE9HX0xPV0VSX1RJTUVPVVQ6XG4rXHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4rXHRcdFx0XHRcdCAgXCJwYWNrZXQgKGluZGV4ICVkLCBkaXIgJWQpIHJlc3BvbnNlIGZvciBpbmRleCAlZCBsb3dlciB0aW1lb3V0IHRvICV1XCIsXG4rXHRcdFx0XHRcdCAgbG9nLVx1MDAzZWluZGV4LCBsb2ctXHUwMDNlZGlyLFxuK1x0XHRcdFx0XHQgIGxvZy1cdTAwM2VsYXN0X2luZGV4LCBsb2ctXHUwMDNldmFsdWUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTkZfVENQX0xPR19OT05FOlxuK1x0XHRicmVhaztcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgbmZfdGNwX2VtaXRfaW52YWxpZF9sb2dzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlLFxuK1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncylcbit7XG4rXHR1OCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbG9ncy1cdTAwM2VudW07IGkrKylcbitcdFx0bmZfdGNwX2VtaXRfaW52YWxpZF9sb2coc2tiLCBjdCwgc3RhdGUsIFx1MDAyNmxvZ3MtXHUwMDNlZW50cmllc1tpXSk7XG4rfVxuK1xuIHN0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb25cbiB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbiBcdCAgICAgIHVuc2lnbmVkIGludCBpbmRleCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3BoLFxuLVx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpXG4rXHQgICAgICBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncylcbiB7XG4gXHRzdHJ1Y3QgaXBfY3RfdGNwICpzdGF0ZSA9IFx1MDAyNmN0LVx1MDAzZXByb3RvLnRjcDtcbiBcdHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlciA9IFx1MDAyNnN0YXRlLVx1MDAzZXNlZW5bZGlyXTtcbkBAIC02NDAsMzEgKzcyOCwyOSBAQCB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbiBcdFx0XHRzZW5kZXItXHUwMDNldGRfZW5kID0gZW5kO1xuIFx0XHRcdHNlbmRlci1cdTAwM2VmbGFncyB8PSBJUF9DVF9UQ1BfRkxBR19EQVRBX1VOQUNLTk9XTEVER0VEO1xuIFxuLVx0XHRcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsXG4tXHRcdFx0XHRcdFx0ICBcIiV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZFwiLCBvdmVyc2hvdCk7XG4rXHRcdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChjdCwgc2VuZGVyLCBsb2dzLCBORkNUX1RDUF9JR05PUkUsXG4rXHRcdFx0XHRcdCAgTkZfVENQX0xPR19PVkVSU0hPVCwgb3ZlcnNob3QpO1xuIFx0XHR9XG4gXG4tXHRcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JTlZBTElELFxuLVx0XHRcdFx0XHQgIFwiU0VRIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKG92ZXIgdGhlIHdpbmRvdyBvZiB0aGUgcmVjZWl2ZXIpXCIsXG4tXHRcdFx0XHRcdCAgc2VuZGVyLVx1MDAzZXRkX21heGVuZCArIDEpO1xuK1x0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZ3MsIE5GQ1RfVENQX0lOVkFMSUQsXG4rXHRcdFx0XHQgIE5GX1RDUF9MT0dfU0VRX09WRVIsIHNlbmRlci1cdTAwM2V0ZF9tYXhlbmQgKyAxKTtcbiBcdH1cbiBcbiBcdGlmICghYmVmb3JlKHNhY2ssIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCArIDEpKVxuLVx0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSU5WQUxJRCxcbi1cdFx0XHRcdFx0ICBcIkFDSyBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChBQ0tlZCBkYXRhIG5vdCBzZWVuIHlldClcIixcbi1cdFx0XHRcdFx0ICByZWNlaXZlci1cdTAwM2V0ZF9lbmQgKyAxKTtcbitcdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChjdCwgc2VuZGVyLCBsb2dzLCBORkNUX1RDUF9JTlZBTElELFxuK1x0XHRcdFx0ICBORl9UQ1BfTE9HX0FDS19PVkVSLCByZWNlaXZlci1cdTAwM2V0ZF9lbmQgKyAxKTtcbiBcbiBcdC8qIElzIHRoZSBlbmRpbmcgc2VxdWVuY2UgaW4gdGhlIHJlY2VpdmUgd2luZG93IChpZiBhdmFpbGFibGUpPyAqL1xuIFx0aW5fcmVjdl93aW4gPSAhcmVjZWl2ZXItXHUwMDNldGRfbWF4d2luIHx8XG4gXHRcdCAgICAgIGFmdGVyKGVuZCwgc2VuZGVyLVx1MDAzZXRkX2VuZCAtIHJlY2VpdmVyLVx1MDAzZXRkX21heHdpbiAtIDEpO1xuIFx0aWYgKCFpbl9yZWN2X3dpbilcbi1cdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSxcbi1cdFx0XHRcdFx0ICBcIlNFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpXCIsXG4tXHRcdFx0XHRcdCAgc2VuZGVyLVx1MDAzZXRkX2VuZCAtIHJlY2VpdmVyLVx1MDAzZXRkX21heHdpbiAtIDEpO1xuK1x0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZ3MsIE5GQ1RfVENQX0lHTk9SRSxcbitcdFx0XHRcdCAgTkZfVENQX0xPR19TRVFfVU5ERVIsXG4rXHRcdFx0XHQgIHNlbmRlci1cdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cdTAwM2V0ZF9tYXh3aW4gLSAxKTtcbiBcdGlmICghYWZ0ZXIoc2FjaywgcmVjZWl2ZXItXHUwMDNldGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKSlcbi1cdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSxcbi1cdFx0XHRcdFx0ICBcImlnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZClcIixcbi1cdFx0XHRcdFx0ICByZWNlaXZlci1cdTAwM2V0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpO1xuK1x0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZ3MsIE5GQ1RfVENQX0lHTk9SRSxcbitcdFx0XHRcdCAgTkZfVENQX0xPR19BQ0tfVU5ERVIsXG4rXHRcdFx0XHQgIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSk7XG4gXG4gXHQvKiBUYWtlIGludG8gYWNjb3VudCB3aW5kb3cgc2NhbGluZyAoUkZDIDEzMjMpLiAqL1xuIFx0aWYgKCF0Y3BoLVx1MDAzZXN5bilcbkBAIC03MjAsMTAgKzgwNiw5IEBAIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcbi1cdFx0XHRcdFx0IGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4tXHRcdFx0XHRcdCBpbnQgaW5kZXgsXG4tXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpXG4rXHRcdFx0XHQgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbitcdFx0XHRcdCBpbnQgaW5kZXgsXG4rXHRcdFx0XHQgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3MgKmxvZ3MpXG4ge1xuIFx0Y29uc3QgdW5zaWduZWQgaW50ICp0aW1lb3V0cztcbiBcdGNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0bjtcbkBAIC03NjQsOSArODQ5LDEwIEBAIHN0YXRpYyB2b2lkIF9fY29sZCBuZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFxuIFx0XHR0aW1lb3V0ID0gUkVBRF9PTkNFKHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfVU5BQ0tdKTtcbiBcdFx0aWYgKGV4cGlyZXMgXHUwMDNlIHRpbWVvdXQpIHtcbi1cdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsXG4tXHRcdFx0XHRcdCAgXCJwYWNrZXQgKGluZGV4ICVkLCBkaXIgJWQpIHJlc3BvbnNlIGZvciBpbmRleCAlZCBsb3dlciB0aW1lb3V0IHRvICV1XCIsXG4tXHRcdFx0XHRcdCAgaW5kZXgsIGRpciwgY3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXgsIHRpbWVvdXQpO1xuK1x0XHRcdG5mX3RjcF9xdWV1ZV9pbnZhbGlkX2xvZyhsb2dzLFxuK1x0XHRcdFx0XHRcdCBORl9UQ1BfTE9HX0xPV0VSX1RJTUVPVVQsXG4rXHRcdFx0XHRcdFx0IHRpbWVvdXQsIGluZGV4LCBkaXIsXG4rXHRcdFx0XHRcdFx0IGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2luZGV4KTtcbiBcbiBcdFx0XHRXUklURV9PTkNFKGN0LVx1MDAzZXRpbWVvdXQsIHRpbWVvdXQgKyBuZmN0X3RpbWVfc3RhbXApO1xuIFx0XHR9XG5AQCAtOTcxLDYgKzEwNTcsNyBAQCBpbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0ZW51bSB0Y3BfY29ubnRyYWNrIG5ld19zdGF0ZSwgb2xkX3N0YXRlO1xuIFx0dW5zaWduZWQgaW50IGluZGV4LCAqdGltZW91dHM7XG4gXHRlbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmVzO1xuK1x0c3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3MgbG9ncyA9IHt9O1xuIFx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjtcbiBcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoO1xuIFx0c3RydWN0IHRjcGhkciBfdGNwaDtcbkBAIC0xMjUyLDE0ICsxMzM5LDE2IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHR9XG4gXG4gXHRyZXMgPSB0Y3BfaW5fd2luZG93KGN0LCBkaXIsIGluZGV4LFxuLVx0XHRcdCAgICBza2IsIGRhdGFvZmYsIHRoLCBzdGF0ZSk7XG4rXHRcdFx0ICAgIHNrYiwgZGF0YW9mZiwgdGgsIFx1MDAyNmxvZ3MpO1xuIFx0c3dpdGNoIChyZXMpIHtcbiBcdGNhc2UgTkZDVF9UQ1BfSUdOT1JFOlxuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbitcdFx0bmZfdGNwX2VtaXRfaW52YWxpZF9sb2dzKHNrYiwgY3QsIHN0YXRlLCBcdTAwMjZsb2dzKTtcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdGNhc2UgTkZDVF9UQ1BfSU5WQUxJRDpcbi1cdFx0bmZfdGNwX2hhbmRsZV9pbnZhbGlkKGN0LCBkaXIsIGluZGV4LCBza2IsIHN0YXRlKTtcbitcdFx0bmZfdGNwX2hhbmRsZV9pbnZhbGlkKGN0LCBkaXIsIGluZGV4LCBcdTAwMjZsb2dzKTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4rXHRcdG5mX3RjcF9lbWl0X2ludmFsaWRfbG9ncyhza2IsIGN0LCBzdGF0ZSwgXHUwMDI2bG9ncyk7XG4gXHRcdHJldHVybiAtTkZfQUNDRVBUO1xuIFx0Y2FzZSBORkNUX1RDUF9BQ0NFUFQ6XG4gXHRcdGJyZWFrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6NDc6MDcuOTYyMzE3MDA3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1NjgzMDE4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgQ29ubnRyYWNrIExvZ2dpbmcgUmVmYWN0b3IqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFwcGxpZWQgdG8gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jYC4gSXQncyByZWZhY3RvcmluZyBob3cgaW52YWxpZCBUQ1AgcGFja2V0cyBhcmUgbG9nZ2VkIHdpdGhpbiBuZXRmaWx0ZXIgY29ubnRyYWNrLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhleSdyZSBpbnRyb2R1Y2luZyB0aGVzZSBuZXcgc3RydWN0dXJlczogYGVudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGVgLCBgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ2AsIGFuZCBgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3NgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIG1vdmluZyBhd2F5IGZyb20gZGlyZWN0IGNhbGxzIHRvIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCBhbmQgaW5zdGVhZCBxdWV1aW5nIHRoZXNlIGxvZyBtZXNzYWdlcyBmb3IgbGF0ZXIgZW1pc3Npb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYW4gYXR0ZW1wdCB0byBhdm9pZCBob2xkaW5nIGBjdC1cdTAwM2Vsb2NrYCB3aGlsZSBwZXJmb3JtaW5nIHRoZSBsb2dnaW5nLiBUaGF0J3MgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IG9wdGltaXphdGlvbi5cblxuQSBxdWljayBjaGVjayBjb25maXJtcyB0aGlzOiBgbmZfdGNwX2VtaXRfaW52YWxpZF9sb2dzYCBpcyBkZWZpbml0ZWx5IGNhbGxlZCAqYWZ0ZXIqIGBzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKWAuIFNvLCBgdGNwX2luX3dpbmRvd2AgYW5kIGBuZl90Y3BfaGFuZGxlX2ludmFsaWRgIG5vdyBzdG9yZSBsb2cgbWVzc2FnZXMgaW4gYSBsb2NhbCBgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3MgbG9nc2AgdmFyaWFibGUgb24gdGhlIHN0YWNrLiBUaGUgZW1pc3Npb24gdGhlbiBoYXBwZW5zIGFmdGVyIHJlbGVhc2luZyB0aGUgbG9jay4gQ2xldmVyLCB0aGV5J3JlIHVzaW5nIGEgbG9jYWwgYnVmZmVyIHRvIGRlY291cGxlIHRoZSBsb2dnaW5nIGZyb20gdGhlIGNyaXRpY2FsIHNlY3Rpb24uXG5cbkZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQsIHRoaXMgKmlzKiBhIGNoYW5nZSBiZWNhdXNlIGl0IGFsdGVycyB0aGUgbG9jayBjb250ZXh0IG9mIHRoZSBsb2dnaW5nIGZ1bmN0aW9uLiBCdXQsIGRvZXMgaXQgY2hhbmdlIHRoZSBjb3JlIFRDUCBjb25udHJhY2sgbG9naWM/IE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBubywgdGhlIGxvZ2dpbmcgZnVuY3Rpb24gYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGlzIHByZXR0eSBtdWNoIGp1c3QgZm9yIGxvZ2dpbmcuIE5vIGZ1bmN0aW9uYWwgc2lkZSBlZmZlY3QuXG5cbkxldCdzIGRpdmUgZGVlcGVyIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmdW5jdGlvbmFsIGFsdGVyYXRpb25zIGJleW9uZCBqdXN0IHRoZSBkZWZlcnJlZCBsb2dnaW5nLiBPa2F5LCB0aGUgcGF0Y2ggY2hhbmdlcyBgbmZfdGNwX2xvZ19pbnZhbGlkYCB0byBxdWV1ZSB0aGUgbG9nIGluc3RlYWQgb2YgY2FsbGluZyBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgZGlyZWN0bHkuIGB0Y3BfaW5fd2luZG93YCBzdGlsbCByZXR1cm5zIHRoZSBzYW1lIHZhbHVlczogYE5GQ1RfVENQX0lHTk9SRWAsIGBORkNUX1RDUF9JTlZBTElEYCwgb3IgYE5GQ1RfVENQX0FDQ0VQVGAuIFRob3NlIGFsbCBhcmUgdGhlIHNhbWUuIEFuZCB0aGUgdGltZW91dCBtb2RpZmljYXRpb25zIGluIGBuZl90Y3BfaGFuZGxlX2ludmFsaWRgIHNlZW0gdG8gYmUgdW5jaGFuZ2VkOiB0aGUgY29yZSBsb2dpYyBpcyB0aGUgc2FtZS4gVGhlIG9ubHkgY2hhbmdlIGlzIHRoZSBkZWZlcnJhbC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyBjaGFuZ2Ugd29ydGggZnV6emluZz9cblxuT24gdGhlIG9uZSBoYW5kLCBpZiBpdCAqd2VyZSoganVzdCBhIHJlZmFjdG9yaW5nIG9mIGxvZ2dpbmcsIEkgbWlnaHQgc2F5IG5vLCBhcyBwZXIgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgcHJvbXB0LiBIb3dldmVyLCBkZWZlcnJpbmcgbG9nZ2luZyBvdXRzaWRlIGEgc3BpbmxvY2sgKmNvdWxkKiBwcmV2ZW50IHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgbG9ja3Vwcy4gVGhhdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGJ1dCBtb3JlIGluIHRlcm1zIG9mIGNvbmN1cnJlbmN5IHJhdGhlciB0aGFuIGFsdGVyaW5nIHRoZSBuZXR3b3JrIHN0YWNrIGV4ZWN1dGlvbi4gSXQgY2hhbmdlcyAqd2hlbiogdGhlIGxvZyBpcyBlbWl0dGVkLiBUaGUgY29yZSBUQ1AgY29ubnRyYWNrICpiZWhhdmlvciogc2VlbXMgdW5jaGFuZ2VkLlxuXG5SZW1lbWJlcmluZyB0aGUgcHJvbXB0J3MgaW5zdHJ1Y3Rpb246IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLiAtIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLiAtIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cIlxuXG5MZXQncyBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGF0IGNoYW5nZSwgYWdhaW46XG5gYGBjXG4tXHR2YV9zdGFydChhcmdzLCBmbXQpO1xuLVx0dmFmLmZtdCA9IGZtdDtcbi1cdHZhZi52YSA9IFx1MDAyNmFyZ3M7XG4tXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcIiVwVlwiLCBcdTAwMjZ2YWYpO1xuLVx0dmFfZW5kKGFyZ3MpO1xuLVxuK1x0bmZfdGNwX3F1ZXVlX2ludmFsaWRfbG9nKGxvZ3MsIHR5cGUsIHZhbHVlLCAwLCAwLCAwKTtcbiBcdHJldHVybiByZXQ7XG5gYGBcbkl0J3MganVzdCBkZWZlcnJpbmcgdGhlIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCBjYWxsLiBXZSdyZSBvbmx5IHF1ZXVpbmcgaXQgbm93LiBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgKmlzKiBhIGxvZ2dpbmcgZnVuY3Rpb24uIFNvLCBpZiB0aGlzIHBhdGNoICpvbmx5KiBjb250YWlucyBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzIGxpa2UgbG9nZ2luZywgd2Ugc2hvdWxkIHJldHVybiBmYWxzZS4gRXZlbiB0aG91Z2ggaXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgaXQgaXMgb25seSBhIGNoYW5nZSBpbiB0ZXJtcyBvZiBjb25jdXJyZW5jeSwgd2hpY2ggaXMgYSBzaWRlIGVmZmVjdC4gSXQgaXMgYSBsb2dnaW5nIGZ1bmN0aW9uLCB3aXRoIG5vIGZ1bmN0aW9uYWwgc2lkZSBlZmZlY3RzLlxuXG5HaXZlbiB0aGF0IGFuZCB0aGUgbGFjayBvZiBvdGhlciBmdW5jdGlvbmFsIGNoYW5nZXMsIGl0ICpsb29rcyBsaWtlKiB0aGlzIGlzIGZ1bmRhbWVudGFsbHkgYSBsb2dnaW5nIHJlZmFjdG9yaW5nIGFuZCB0aGUgYW5zd2VyIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTc4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6NDc6MjEuNTMwNjIyOTA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0ODk3OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz03Mj1fX3ByaW50Zig0LCA1KVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NzM6dm9pZCBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy03NC1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy05My19XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo5NDpFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTk1LSNlbmRpZlxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jPTE0OD1zdGF0aWMgaW50IGRvX2Jhc2ljX2NoZWNrcyhzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMTc0LVxcdFxcdCAgICAgY291bnQgIT0gMCkgfHwgIXNjaC1cXHUwMDNlbGVuZ3RoKSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jOjE3NTpcXHRcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0xNzYtXFx0XFx0XFx0XFx0XFx0XFx0ICBcXFwiJXMgZmFpbGVkLiBjaHVuayBudW0gJWQsIHR5cGUgJWQsIGxlbiAlZCBmbGFnICVkXFxcXG5cXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jPTMyNz1pbnQgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0zNzMtXFx0ICAgIHNoLVxcdTAwM2V2dGFnICE9IGN0LVxcdTAwM2Vwcm90by5zY3RwLnZ0YWdbZGlyXSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYzozNzQ6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMzc1LVxcdFxcdFxcdFxcdFxcdCAgXFxcInZlcmlmaWNhdGlvbiB0YWcgY2hlY2sgZmFpbGVkICV4IHZzICV4IGZvciBkaXIgJWRcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTQ1My1cXHRcXHRpZiAobmV3X3N0YXRlID09IFNDVFBfQ09OTlRSQUNLX01BWCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYzo0NTQ6XFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtNDU1LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcIkludmFsaWQsIG9sZF9zdGF0ZSAlZCwgZGlyICVkLCB0eXBlICVkXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTU0ND1zdGF0aWMgdm9pZCBuZl90Y3BfZW1pdF9pbnZhbGlkX2xvZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTUwLVxcdGNhc2UgTkZfVENQX0xPR19PVkVSU0hPVDpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1NTE6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NTItXFx0XFx0XFx0XFx0XFx0ICBcXFwiJXUgYnl0ZXMgbW9yZSB0aGFuIGV4cGVjdGVkXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU1NS1cXHRjYXNlIE5GX1RDUF9MT0dfU0VRX09WRVI6XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTU2OlxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTU3LVxcdFxcdFxcdFxcdFxcdCAgXFxcIlNFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NjAtXFx0Y2FzZSBORl9UQ1BfTE9HX0FDS19PVkVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjU2MTpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU2Mi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU2NS1cXHRjYXNlIE5GX1RDUF9MT0dfU0VRX1VOREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjU2NjpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU2Ny1cXHRcXHRcXHRcXHRcXHQgIFxcXCJTRVEgaXMgdW5kZXIgbG93ZXIgYm91bmQgJXUgKGFscmVhZHkgQUNLZWQgZGF0YSByZXRyYW5zbWl0dGVkKVxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NzAtXFx0Y2FzZSBORl9UQ1BfTE9HX0FDS19VTkRFUjpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1NzE6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NzItXFx0XFx0XFx0XFx0XFx0ICBcXFwiaWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKVxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NzUtXFx0Y2FzZSBORl9UQ1BfTE9HX0xPV0VSX1RJTUVPVVQ6XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTc2OlxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTc3LVxcdFxcdFxcdFxcdFxcdCAgXFxcInBhY2tldCAoaW5kZXggJWQsIGRpciAlZCkgcmVzcG9uc2UgZm9yIGluZGV4ICVkIGxvd2VyIHRpbWVvdXQgdG8gJXVcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9MTA0OT1pbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTIwMS1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEyMDI6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjAzLVxcdFxcdFxcdFxcdFxcdCAgXFxcInBhY2tldCAoaW5kZXggJWQpIGluIGRpciAlZCBpZ25vcmVkLCBzdGF0ZSAlc1xcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjI0LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTIyNTpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyMjYtXFx0XFx0XFx0XFx0XFx0ICBcXFwicGFja2V0IChpbmRleCAlZCkgaW4gZGlyICVkIGludmFsaWQsIHN0YXRlICVzXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyNDItXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmN0LVxcdTAwM2Vsb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMjQzOlxcdFxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFxcXCJjaGFsbGVuZ2UtYWNrIGlnbm9yZWRcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjQ0LVxcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7IC8qIERvbid0IGNoYW5nZSBzdGF0ZSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTI4Ny1cXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEyODg6XFx0XFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXFxcImludmFsaWQgcnN0XFxcIik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTI4OS1cXHRcXHRcXHRcXHRyZXR1cm4gLU5GX0FDQ0VQVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6NDc6MjEuNjI1NTI1NzA2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2MDkwMjA3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgV29ydGhpbmVzcyBvZiBGdXp6aW5nKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGlzIHBhdGNoIGxvb2tzIGxpa2UgaXQncyBjaGFuZ2luZyBob3cgaW52YWxpZCBUQ1Agc2VnbWVudHMgYXJlIGxvZ2dlZCB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrLiBJbml0aWFsbHksIEkgc2VlIHRoYXQgdGhlIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCBmdW5jdGlvbiBpcyBiZWluZyByZXBsYWNlZCBieSBhIHF1ZXVlZCBsb2dnaW5nIG1lY2hhbmlzbSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE15IGZpcnN0IHRob3VnaHQgaXMsIFwiSXMgdGhpcyAqanVzdCogYSBsb2dnaW5nIGNoYW5nZSwgb3IgaXMgdGhlcmUgYSBmdW5jdGlvbmFsIHNpZGUgZWZmZWN0P1wiXG5cbkxldCdzIGRpZyBkZWVwZXIuIFRoZSBjb2RlIGRpZmYgY29uZmlybXMgdGhhdCB0aGUgcHJpbWFyeSBhbHRlcmF0aW9uIGlzIGluZGVlZCB0aGUgbG9nZ2luZyBtZWNoYW5pc20gaXRzZWxmLiBUaGUgZGlyZWN0IGNhbGwgdG8gYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGlzIHJlcGxhY2VkIHdpdGggYG5mX3RjcF9xdWV1ZV9pbnZhbGlkX2xvZ2AgYW5kIGxhdGVyIGBuZl90Y3BfZW1pdF9pbnZhbGlkX2xvZ3NgLiBUaGUga2V5IGlzIHRoYXQgYG5mX3RjcF9lbWl0X2ludmFsaWRfbG9nc2AgaXMgY2FsbGVkICphZnRlciogcmVsZWFzaW5nIHRoZSBzcGlubG9jayAoYHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spYCkuIFRoaXMgaXMgbm90IGp1c3QgY29zbWV0aWM7IGl0J3MgYSByZWZhY3RvcmluZyB0byBhdm9pZCBob2xkaW5nIGEgbG9jayB3aGlsZSBsb2dnaW5nLCB3aGljaCBjb3VsZCBwcmV2ZW50IHBvc3NpYmxlIGRlYWRsb2NrcyBhbmQgb3IgaW1wcm92ZSBwZXJmb3JtYW5jZS5cblxuQnV0LCBnaXZlbiB0aGUgcHJvbXB0LCBJJ20gdHJ5aW5nIHRvIGRldGVybWluZSBpZiBpdOKAmXMgYSDigJxwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2UsIHN1Y2ggYXMgbG9nZ2luZy7igJ0gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB5ZXMsIGJlY2F1c2UgdGhlIHJldHVybiB2YWx1ZXMgKGBORl9BQ0NFUFRgLCBgLU5GX0FDQ0VQVGApIGFuZCB0aGUgb3ZlcmFsbCBmbG93LCAqZnVuY3Rpb25hbGx5KiBzcGVha2luZywgc2VlbSB1bmNoYW5nZWQuIFRoZSBzdGF0ZSBjaGFuZ2VzIGFyZSBjb25zaXN0ZW50LiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHdoZXJlIHRoZSBsb2dnaW5nIG9jY3Vycywgc3BlY2lmaWNhbGx5IG91dHNpZGUgdGhlIGxvY2suIFRoZSBjb3JlIGJlaGF2aW9yIG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgcmVtYWlucyB0aGUgc2FtZS5cblxuVGhlIHByb21wdOKAmXMgZ3VpZGFuY2UgbWVudGlvbnMgXCJQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50c1wiIGRvbid0IHdhcnJhbnQgZnV6emluZy4gSXMgcmVmYWN0b3JpbmcgbG9nZ2luZyB0byBhdm9pZCBsb2NrIGNvbnRlbnRpb24gYSBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2U/IEl0IGRvZXNu4oCZdCBtb2RpZnkgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBwcm90b2NvbC4gSSdtIGxlYW5pbmcgdG93YXJkIHRoZSBhbnN3ZXIgYmVpbmcgeWVzLCBidXQgbGV0J3MgZG91YmxlLWNoZWNrLlxuXG5MZXQncyBsb29rIG1vcmUgYXQgYG5mX3RjcF9oYW5kbGVfaW52YWxpZGAuIFRoZSBjb2RlIHF1ZXVlcyB0aGUgbG9nLiBUaGlzIGlzIHB1cmVseSBhIGxvZ2dpbmcgY2hhbmdlLiBJJ20gZ29pbmcgdG8gZGVjbGFyZSB0aGlzIHBhdGNoIGFzIHNvbWV0aGluZyB0aGF0IGlzbid0IGZ1bmN0aW9uYWxseSBhbHRlcmluZyB0aGUgc3RhY2sncyBiZWhhdmlvciwgYnV0IGluc3RlYWQsIGl0IGlzIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIGxvZ2dpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoZXJlZm9yZSwgSSBiZWxpZXZlIHRoZSBhcHByb3ByaWF0ZSByZXNwb25zZSBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk4NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTo0NzozMi4yMzQ1NDg3MTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MDpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9sNHByb3RvX2xvZ19pbnZhbGlkKTtcXG4gIDcxOlxcdFxcbiAgNzI6XFx0X19wcmludGYoNCwgNSlcXG4gIDczOlxcdHZvaWQgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgNzQ6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4gIDc1OlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXFxuICA3NjpcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuICA3NzpcXHR7XFxuICA3ODpcXHRcXHRzdHJ1Y3QgdmFfZm9ybWF0IHZhZjtcXG4gIDc5OlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4gIDgwOlxcdFxcdHZhX2xpc3QgYXJncztcXG4gIDgxOlxcdFxcbiAgODI6XFx0XFx0bmV0ID0gbmZfY3RfbmV0KGN0KTtcXG4gIDgzOlxcdFxcdGlmIChsaWtlbHkobmV0LVxcdTAwM2VjdC5zeXNjdGxfbG9nX2ludmFsaWQgPT0gMCkpXFxuICA4NDpcXHRcXHRcXHRyZXR1cm47XFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XFxuICA4NzpcXHRcXHR2YWYuZm10ID0gZm10O1xcbiAgODg6XFx0XFx0dmFmLnZhID0gXFx1MDAyNmFyZ3M7XFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdG5mX2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBzdGF0ZSxcXG4gIDkxOlxcdFxcdFxcdFxcdCAgICAgICBuZl9jdF9wcm90b251bShjdCksIFxcXCIlcFZcXFwiLCBcXHUwMDI2dmFmKTtcXG4gIDkyOlxcdFxcdHZhX2VuZChhcmdzKTtcXG4gIDkzOlxcdH1cXG4gIDk0OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQpO1xcbiAgOTU6XFx0I2VuZGlmXFxuICA5NjpcXHRcXG4gIDk3OlxcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbmZfY3RfbDRwcm90b19maW5kKHU4IGw0cHJvdG8pXFxuICA5ODpcXHR7XFxuICA5OTpcXHRcXHRzd2l0Y2ggKGw0cHJvdG8pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6NDc6MzIuMjM0NjU5MDQ2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5NzU5ODgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzczpcblxuKipBIFNpbXBsZSBGdW5jdGlvbiBDYWxsKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGFuZCBpdCdzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBiYXNpY2FsbHkgYSB3cmFwcGVyLiBJdCBkb2Vzbid0IHNlZW0gdG8gYmUgZG9pbmcgYW55dGhpbmcgY29tcGxleCBpbiBhbmQgb2YgaXRzZWxmLiBFc3NlbnRpYWxseSwgd2hhdCBJJ20gc2VlaW5nIGlzIHRoYXQgaXQncyBqdXN0IGNhbGxpbmcgYG5mX2w0cHJvdG9fbG9nX2ludmFsaWRgLiBUaGF0J3MgaXQuIE5vIGFkZGl0aW9uYWwgbG9naWMsIG5vIHByZS1wcm9jZXNzaW5nLCBubyBwb3N0LXByb2Nlc3NpbmcuIEl0J3MgYSBkaXJlY3QgcGFzcy10aHJvdWdoLiBJIHN1cHBvc2UgaXQgY291bGQgYmUgYW4gYWJzdHJhY3Rpb24sIGxpa2VseSBhbiBhdHRlbXB0IHRvIGdyb3VwIHJlbGF0ZWQgZXJyb3IgcmVwb3J0aW5nLCBvciBwZXJoYXBzIGEgbGF5ZXIgb2YgaW5kaXJlY3Rpb24gZm9yIGZ1dHVyZSBtb2RpZmljYXRpb25zLiBCdXQgYXQgdGhpcyBsZXZlbCwgaXQncyBhIG9uZS1saW5lcjogdGhlIGZpcnN0IGZ1bmN0aW9uIGp1c3QgZGVsZWdhdGVzIHRvIHRoZSBzZWNvbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODcyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTo0NzozNS4zMzIyNjExMjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMzg4NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2w0cHJvdG9fbG9nX2ludmFsaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz00OD1fX3ByaW50Zig0LCA1KVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NDk6dm9pZCBuZl9sNHByb3RvX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01MC1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy02OS19XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo3MDpFWFBPUlRfU1lNQk9MX0dQTChuZl9sNHByb3RvX2xvZ19pbnZhbGlkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTcxLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz03Mz12b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtODktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo5MDpcXHRuZl9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy05MS1cXHRcXHRcXHQgICAgICAgbmZfY3RfcHJvdG9udW0oY3QpLCBcXFwiJXBWXFxcIiwgXFx1MDAyNnZhZik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmM9MTA2PWludCBuZl9jb25udHJhY2tfaW5ldF9lcnJvcihzdHJ1Y3QgbmZfY29ubiAqdG1wbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYy0xNzItXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VwZiA9PSBBRl9JTkVUKSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jOjE3MzpcXHRcXHRcXHRuZl9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jLTE3NC1cXHRcXHRcXHRcXHRcXHQgICAgICAgbDRwcm90byxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYy0xNzctXFx0XFx0fSBlbHNlIGlmIChzdGF0ZS1cXHUwMDNlcGYgPT0gQUZfSU5FVDYpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmM6MTc4OlxcdFxcdFxcdG5mX2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMtMTc5LVxcdFxcdFxcdFxcdFxcdCAgICAgICBsNHByb3RvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jPTE5Nj1zdGF0aWMgdm9pZCBpY21wX2Vycm9yX2xvZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jLTE5OS17XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jOjIwMDpcXHRuZl9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgc3RhdGUsIElQUFJPVE9fSUNNUCwgXFxcIiVzXFxcIiwgbXNnKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMtMjAxLX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jPTEyNz1zdGF0aWMgdm9pZCBpY21wdjZfZXJyb3JfbG9nKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYy0xMzAte1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jOjEzMTpcXHRuZl9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgc3RhdGUsIElQUFJPVE9fSUNNUFY2LCBcXFwiJXNcXFwiLCBtc2cpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jLTEzMi19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM9Mjk1PXN0YXRpYyBib29sIHNjdHBfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0zMjEtb3V0X2ludmFsaWQ6XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jOjMyMjpcXHRuZl9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgc3RhdGUsIElQUFJPVE9fU0NUUCwgXFxcIiVzXFxcIiwgbG9nbXNnKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMzIzLVxcdHJldHVybiB0cnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9ODgwPXN0YXRpYyB2b2lkIHRjcF9lcnJvcl9sb2coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTg4My17XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6ODg0OlxcdG5mX2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBzdGF0ZSwgSVBQUk9UT19UQ1AsIFxcXCIlc1xcXCIsIG1zZyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtODg1LX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jPTM3PXN0YXRpYyB2b2lkIHVkcF9lcnJvcl9sb2coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jLTQwLXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYzo0MTpcXHRuZl9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgc3RhdGUsIElQUFJPVE9fVURQLCBcXFwiJXNcXFwiLCBtc2cpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jLTQyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6NDc6MzUuNDMzNjU1Mjk0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NTUxMDQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgYG5mX2w0cHJvdG9fbG9nX2ludmFsaWRgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhpcyBgbmZfbDRwcm90b19sb2dfaW52YWxpZGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgcGFydGljdWxhcmx5IGl0cyByb2xlIGluIGhhbmRsaW5nIGludmFsaWQgTDQgcHJvdG9jb2wgZGF0YS4gVGhpcyBpcyBjcnVjaWFsIGZvciBuZXR3b3JrIHNlY3VyaXR5IGFuZCB0cmFmZmljIGFuYWx5c2lzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uPyBXaGF0IGluZm9ybWF0aW9uIGRvZXMgaXQgbG9nPyBJcyB0aGlzIGxvZ2dpbmcgY29uZmlndXJhYmxlPyBBbmQgaG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCBvdGhlciBOZXRmaWx0ZXIgY29tcG9uZW50cywgcGFydGljdWxhcmx5IHRob3NlIGRlYWxpbmcgd2l0aCBwYWNrZXQgZmlsdGVyaW5nIGFuZCBjb25uZWN0aW9uIHRyYWNraW5nPyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgY29uc2lkZXJhdGlvbnMgYXJvdW5kIHBlcmZvcm1hbmNlIGFuZCBwb3RlbnRpYWwgRG9TIHZlY3RvcnMg4oCTIGhvdyBlZmZpY2llbnRseSBpcyB0aGlzIGhhbmRsaW5nIGVycm9ycz8gQW55IGNoYW5jZSBmb3IgcmFjZSBjb25kaXRpb25zPyBBcmUgdGhlcmUgYW55IGtub3duIHZ1bG5lcmFiaWxpdGllcyBhc3NvY2lhdGVkIHdpdGggaXRzIGxvZ2dpbmcgbWVjaGFuaXNtcz8gTGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMgYW5kIGZpZ3VyZSBvdXQgaG93IHJvYnVzdCBpdCB0cnVseSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzOTQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTo0NzozOC42MDkxNjgyOTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwdjYuaFxcdTAwM2VcXG4gIDQxOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbjYuaFxcdTAwM2VcXG4gIDQyOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbiAgNDM6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9pbmV0X2ZyYWcuaFxcdTAwM2VcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0c3RhdGljIERFRklORV9NVVRFWChuZl9jdF9wcm90b19tdXRleCk7XFxuICA0NjpcXHRcXG4gIDQ3OlxcdCNpZmRlZiBDT05GSUdfU1lTQ1RMXFxuICA0ODpcXHRfX3ByaW50Zig0LCA1KVxcbiAgNDk6XFx0dm9pZCBuZl9sNHByb3RvX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuICA1MDpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlLFxcbiAgNTE6XFx0XFx0XFx0XFx0ICAgIHU4IHByb3RvbnVtLFxcbiAgNTI6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbiAgNTM6XFx0e1xcbiAgNTQ6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc3RhdGUtXFx1MDAzZW5ldDtcXG4gIDU1OlxcdFxcdHN0cnVjdCB2YV9mb3JtYXQgdmFmO1xcbiAgNTY6XFx0XFx0dmFfbGlzdCBhcmdzO1xcbiAgNTc6XFx0XFxuICA1ODpcXHRcXHRpZiAobmV0LVxcdTAwM2VjdC5zeXNjdGxfbG9nX2ludmFsaWQgIT0gcHJvdG9udW0gXFx1MDAyNlxcdTAwMjZcXG4gIDU5OlxcdFxcdCAgICBuZXQtXFx1MDAzZWN0LnN5c2N0bF9sb2dfaW52YWxpZCAhPSBJUFBST1RPX1JBVylcXG4gIDYwOlxcdFxcdFxcdHJldHVybjtcXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0dmFfc3RhcnQoYXJncywgZm10KTtcXG4gIDYzOlxcdFxcdHZhZi5mbXQgPSBmbXQ7XFxuICA2NDpcXHRcXHR2YWYudmEgPSBcXHUwMDI2YXJncztcXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0bmZfbG9nX3BhY2tldChuZXQsIHN0YXRlLVxcdTAwM2VwZiwgMCwgc2tiLCBzdGF0ZS1cXHUwMDNlaW4sIHN0YXRlLVxcdTAwM2VvdXQsXFxuICA2NzpcXHRcXHRcXHQgICAgICBOVUxMLCBcXFwibmZfY3RfcHJvdG9fJWQ6ICVwViBcXFwiLCBwcm90b251bSwgXFx1MDAyNnZhZik7XFxuICA2ODpcXHRcXHR2YV9lbmQoYXJncyk7XFxuICA2OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjQ3OjM4LjYwOTI4NTk3M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDEyMjgyNTc0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoJ3MgSW1wYWN0OiBMb2dnaW5nIFJlZmFjdG9yaW5nKipcblxuT2theSwgc28gYG5mX2w0cHJvdG9fbG9nX2ludmFsaWRgIG5vdyBjYWxscyBgbmZfbG9nX3BhY2tldGAgZGlmZmVyZW50bHkuIEl0J3MgYSBsb2dnaW5nIGZ1bmN0aW9uLCBwdXJlbHkuIFRoaXMgcGF0Y2gncyBwdXJwb3NlIGlzIHRvIGRlZmVyIHRoaXMgbG9nZ2luZyB0byBhdm9pZCBob2xkaW5nIGBjdC1cdTAwM2Vsb2NrYCBkdXJpbmcgdGhlIGxvZ2dpbmcgcHJvY2Vzcy4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRlcm1zIG9mIGxvY2sgY29udGVudGlvbiBhbmQgZGVhZGxvY2sgYXZvaWRhbmNlLCBmb3Igc3VyZSwgYnV0IGZ1bmRhbWVudGFsbHksIGl0J3MganVzdCBhYm91dCAqd2hlbiogdGhlIGxvZ2dpbmcgaGFwcGVucy5cblxuSSBoYWQgdG8gZG91YmxlLWNoZWNrOiBkb2VzIHRoaXMgYWN0dWFsbHkgY2hhbmdlIHRoZSBwcm9ncmFtIGZsb3c/IE5vcGUsIHRoZSByZXR1cm4gdmFsdWVzIG9mIGB0Y3BfaW5fd2luZG93YCBhbmQgYG5mX3RjcF9oYW5kbGVfaW52YWxpZGAgYXJlIHRoZSBzYW1lOyB0aGUgc3RhdGUgY2hhbmdlcyBhcmUgY29uc2lzdGVudC4gVGhlIGxvZ2dpbmcgaXMganVzdCBtb3ZlZCBvdXRzaWRlIHRoZSBsb2NrLlxuXG5TaG91bGQgSSBldmVuIGZ1enogdGhpcz8gSG1tLCB1bmxpa2VseS4gVW5sZXNzIHRoZXJlJ3MgYSBidWcgaW4gKmhvdyogdGhlIGxvZ2dpbmcgaXMgcXVldWVkLCBsaWtlIGFuIG91dC1vZi1ib3VuZHMgaXNzdWUuIExldCdzIGxvb2sgYXQgdGhhdCBxdWV1aW5nIGNvZGUuLi5cblxuYGBgY1xuc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3Mge1xuXHQvKiBBdCBtb3N0IG9uZSB0Y3BfaW5fd2luZG93KCkgbG9nIHBsdXMgb25lIGxvd2VyLXRpbWVvdXQgbG9nLiAqL1xuXHRzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nIGVudHJpZXNbMl07XG5cdHU4IG51bTtcbn07XG5cbnN0YXRpYyB2b2lkIG5mX3RjcF9xdWV1ZV9pbnZhbGlkX2xvZyhzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncyxcblx0XHRcdFx0ICAgICBlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGUsXG5cdFx0XHRcdCAgICAgdTMyIHZhbHVlLCB1OCBpbmRleCwgdTggZGlyLFxuXHRcdFx0XHQgICAgIHU4IGxhc3RfaW5kZXgpXG57XG5cdHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZztcblxuXHRpZiAobG9ncy1cdTAwM2VudW0gXHUwMDNlPSBBUlJBWV9TSVpFKGxvZ3MtXHUwMDNlZW50cmllcykpXG5cdFx0cmV0dXJuO1xuXG5cdGxvZyA9IFx1MDAyNmxvZ3MtXHUwMDNlZW50cmllc1tsb2dzLVx1MDAzZW51bSsrXTtcblx0bG9nLVx1MDAzZXR5cGUgPSB0eXBlO1xuXHRsb2ctXHUwMDNldmFsdWUgPSB2YWx1ZTtcblx0bG9nLVx1MDAzZWluZGV4ID0gaW5kZXg7XG5cdGxvZy1cdTAwM2VkaXIgPSBkaXI7XG5cdGxvZy1cdTAwM2VsYXN0X2luZGV4ID0gbGFzdF9pbmRleDtcbn1cbmBgYFxuXG5ZZXAsIHNpbXBsZSBhbmQgc2FmZS4gYEFSUkFZX1NJWkVgIGNoZWNrLCBhIHNtYWxsIGFycmF5LiBObyBvYnZpb3VzIHByb2JsZW1zIHRoZXJlLlxuXG5UaGUgcHJvbXB0IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBoYXMgXCJQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cIiBUaGlzIGlzIGEgcmVmYWN0b3Jpbmcgb2YgKmxvZ2dpbmcqLiBJdCBkZWZlcnMgdGhlIGxvZ2dpbmcsIGJ1dCB0aGUgbG9nZ2luZyBpdHNlbGYgaXMgc3RpbGwgdGhlIHNhbWUuIFNvIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgYmVjYXVzZSBpdCAqaXMqIGEgbG9nZ2luZyBjaGFuZ2UuXG5cbk5vdywgaG9sZCBvbi4gSXMgaXQgKnBvc3NpYmxlKiB0aGlzIGNoYW5nZSBmaXhlcyBhbiB1bmRlcmx5aW5nIGRlYWRsb2NrIGlzc3VlIGJ5IG1vdmluZyB0aGUgbG9nZ2luZz8gWWVzLCBwb3RlbnRpYWxseS4gQnV0IHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNhaWQgdG8gcmV0dXJuIGBmYWxzZWAgZm9yIFwicHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlc1wiLiBJcyBtb3ZpbmcgbG9nZ2luZyBvdXRzaWRlIGEgc3BpbmxvY2sgcHVyZWx5IGRlY29yYXRpdmU/IEl0IGRvZXNuJ3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBwcm90b2NvbCBleGVjdXRpb24uIEknbSBnb2luZyB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA4NSwiT3V0cHV0VG9rZW5zIjo4MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjQ3OjQ4LjczMjExNDEwOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbG9nZ2luZyBvZiBpbnZhbGlkIFRDUCBwYWNrZXRzIGluIG5ldGZpbHRlciBjb25udHJhY2sgdG8gZGVmZXIgdGhlIGxvZ2dpbmcgdW50aWwgYWZ0ZXIgdGhlIGNvbm50cmFjayBzcGlubG9jayBpcyByZWxlYXNlZC4gVGhpcyBpcyBhIHB1cmVseSBkZWNvcmF0aXZlL2xvZ2dpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUgbmV0d29yayBzdGFjay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbG9nZ2luZyBvZiBpbnZhbGlkIFRDUCBwYWNrZXRzIGluIG5ldGZpbHRlciBjb25udHJhY2sgdG8gZGVmZXIgdGhlIGxvZ2dpbmcgdW50aWwgYWZ0ZXIgdGhlIGNvbm50cmFjayBzcGlubG9jayBpcyByZWxlYXNlZC4gVGhpcyBpcyBhIHB1cmVseSBkZWNvcmF0aXZlL2xvZ2dpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUgbmV0d29yayBzdGFjay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowrzw5p[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 19:28:56 +0000 UTC FinishedAt: 2026-07-30 19:47:50 +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+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbG9nZ2luZyBvZiBpbnZhbGlkIFRDUCBwYWNrZXRzIGluIG5ldGZpbHRlciBjb25udHJhY2sgdG8gZGVmZXIgdGhlIGxvZ2dpbmcgdW50aWwgYWZ0ZXIgdGhlIGNvbm50cmFjayBzcGlubG9jayBpcyByZWxlYXNlZC4gVGhpcyBpcyBhIHB1cmVseSBkZWNvcmF0aXZlL2xvZ2dpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUgbmV0d29yayBzdGFjay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiM2QzN2VkYTVkNDg5ZWE0ZmQ4ZjFiNTViYmZjMjJkYzFjOWQxOGIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTk6NDc6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xuaW5kZXggY2VlZWQzZDdmZTUyMC4uMDBmMDE3ZDk5OTdmYSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xuQEAgLTQ4MCwzNyAmIzQzOzQ4MCwxMjUgQEAgc3RhdGljIHZvaWQgdGNwX2luaXRfc2VuZGVyKHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcbiBcdH1cbiB9XG4gXG4tX19wcmludGYoNiwgNylcbi1zdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uIG5mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbi1cdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXG4tXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyLFxuLVx0XHRcdFx0XHRcdGVudW0gbmZfY3RfdGNwX2FjdGlvbiByZXQsXG4tXHRcdFx0XHRcdFx0Y29uc3QgY2hhciAqZm10LCAuLi4pXG4mIzQzO2VudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUge1xuJiM0MztcdE5GX1RDUF9MT0dfTk9ORSxcbiYjNDM7XHRORl9UQ1BfTE9HX09WRVJTSE9ULFxuJiM0MztcdE5GX1RDUF9MT0dfU0VRX09WRVIsXG4mIzQzO1x0TkZfVENQX0xPR19BQ0tfT1ZFUixcbiYjNDM7XHRORl9UQ1BfTE9HX1NFUV9VTkRFUixcbiYjNDM7XHRORl9UQ1BfTE9HX0FDS19VTkRFUixcbiYjNDM7XHRORl9UQ1BfTE9HX0xPV0VSX1RJTUVPVVQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nIHtcbiYjNDM7XHRlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGU7XG4mIzQzO1x0dTMyIHZhbHVlO1xuJiM0MztcdHU4IGluZGV4O1xuJiM0MztcdHU4IGRpcjtcbiYjNDM7XHR1OCBsYXN0X2luZGV4O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3Mge1xuJiM0MztcdC8qIEF0IG1vc3Qgb25lIHRjcF9pbl93aW5kb3coKSBsb2cgcGx1cyBvbmUgbG93ZXItdGltZW91dCBsb2cuICovXG4mIzQzO1x0c3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyBlbnRyaWVzWzJdO1xuJiM0MztcdHU4IG51bTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG5mX3RjcF9xdWV1ZV9pbnZhbGlkX2xvZyhzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncyxcbiYjNDM7XHRcdFx0XHQgICAgIGVudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUgdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgIHUzMiB2YWx1ZSwgdTggaW5kZXgsIHU4IGRpcixcbiYjNDM7XHRcdFx0XHQgICAgIHU4IGxhc3RfaW5kZXgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nICpsb2c7XG4mIzQzO1xuJiM0MztcdGlmIChsb2dzLVx1MDAzZW51bSBcdTAwM2U9IEFSUkFZX1NJWkUobG9ncy1cdTAwM2VlbnRyaWVzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bG9nID0gXHUwMDI2bG9ncy1cdTAwM2VlbnRyaWVzW2xvZ3MtXHUwMDNlbnVtJiM0MzsmIzQzO107XG4mIzQzO1x0bG9nLVx1MDAzZXR5cGUgPSB0eXBlO1xuJiM0MztcdGxvZy1cdTAwM2V2YWx1ZSA9IHZhbHVlO1xuJiM0MztcdGxvZy1cdTAwM2VpbmRleCA9IGluZGV4O1xuJiM0MztcdGxvZy1cdTAwM2VkaXIgPSBkaXI7XG4mIzQzO1x0bG9nLVx1MDAzZWxhc3RfaW5kZXggPSBsYXN0X2luZGV4O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uXG4mIzQzO25mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4mIzQzO1x0XHQgICBjb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsXG4mIzQzO1x0XHQgICBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncyxcbiYjNDM7XHRcdCAgIGVudW0gbmZfY3RfdGNwX2FjdGlvbiByZXQsXG4mIzQzO1x0XHQgICBlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGUsXG4mIzQzO1x0XHQgICB1MzIgdmFsdWUpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuID0gbmZfdGNwX3Blcm5ldChuZl9jdF9uZXQoY3QpKTtcbi1cdHN0cnVjdCB2YV9mb3JtYXQgdmFmO1xuLVx0dmFfbGlzdCBhcmdzO1xuIFx0Ym9vbCBiZV9saWJlcmFsO1xuIFxuIFx0YmVfbGliZXJhbCA9IHNlbmRlci1cdTAwM2VmbGFncyBcdTAwMjYgSVBfQ1RfVENQX0ZMQUdfQkVfTElCRVJBTCB8fCB0bi1cdTAwM2V0Y3BfYmVfbGliZXJhbDtcbiBcdGlmIChiZV9saWJlcmFsKVxuIFx0XHRyZXR1cm4gTkZDVF9UQ1BfQUNDRVBUO1xuIFxuLVx0dmFfc3RhcnQoYXJncywgZm10KTtcbi1cdHZhZi5mbXQgPSBmbXQ7XG4tXHR2YWYudmEgPSBcdTAwMjZhcmdzO1xuLVx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXCYjMzQ7JXBWXCYjMzQ7LCBcdTAwMjZ2YWYpO1xuLVx0dmFfZW5kKGFyZ3MpO1xuLVxuJiM0MztcdG5mX3RjcF9xdWV1ZV9pbnZhbGlkX2xvZyhsb2dzLCB0eXBlLCB2YWx1ZSwgMCwgMCwgMCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbmZfdGNwX2VtaXRfaW52YWxpZF9sb2coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuJiM0MztcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXG4mIzQzO1x0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZylcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAobG9nLVx1MDAzZXR5cGUpIHtcbiYjNDM7XHRjYXNlIE5GX1RDUF9MT0dfT1ZFUlNIT1Q6XG4mIzQzO1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuJiM0MztcdFx0XHRcdFx0ICBcJiMzNDsldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5GX1RDUF9MT0dfU0VRX09WRVI6XG4mIzQzO1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuJiM0MztcdFx0XHRcdFx0ICBcJiMzNDtTRVEgaXMgb3ZlciB1cHBlciBib3VuZCAldSAob3ZlciB0aGUgd2luZG93IG9mIHRoZSByZWNlaXZlcilcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5GX1RDUF9MT0dfQUNLX09WRVI6XG4mIzQzO1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuJiM0MztcdFx0XHRcdFx0ICBcJiMzNDtBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICBsb2ctXHUwMDNldmFsdWUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBORl9UQ1BfTE9HX1NFUV9VTkRFUjpcbiYjNDM7XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4mIzQzO1x0XHRcdFx0XHQgIFwmIzM0O1NFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICBsb2ctXHUwMDNldmFsdWUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBORl9UQ1BfTE9HX0FDS19VTkRFUjpcbiYjNDM7XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4mIzQzO1x0XHRcdFx0XHQgIFwmIzM0O2lnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZClcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5GX1RDUF9MT0dfTE9XRVJfVElNRU9VVDpcbiYjNDM7XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4mIzQzO1x0XHRcdFx0XHQgIFwmIzM0O3BhY2tldCAoaW5kZXggJWQsIGRpciAlZCkgcmVzcG9uc2UgZm9yIGluZGV4ICVkIGxvd2VyIHRpbWVvdXQgdG8gJXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgIGxvZy1cdTAwM2VpbmRleCwgbG9nLVx1MDAzZWRpcixcbiYjNDM7XHRcdFx0XHRcdCAgbG9nLVx1MDAzZWxhc3RfaW5kZXgsIGxvZy1cdTAwM2V2YWx1ZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5GX1RDUF9MT0dfTk9ORTpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbmZfdGNwX2VtaXRfaW52YWxpZF9sb2dzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncylcbiYjNDM7e1xuJiM0MztcdHU4IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxvZ3MtXHUwMDNlbnVtOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG5mX3RjcF9lbWl0X2ludmFsaWRfbG9nKHNrYiwgY3QsIHN0YXRlLCBcdTAwMjZsb2dzLVx1MDAzZWVudHJpZXNbaV0pO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb25cbiB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbiBcdCAgICAgIHVuc2lnbmVkIGludCBpbmRleCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3BoLFxuLVx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpXG4mIzQzO1x0ICAgICAgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3MgKmxvZ3MpXG4ge1xuIFx0c3RydWN0IGlwX2N0X3RjcCAqc3RhdGUgPSBcdTAwMjZjdC1cdTAwM2Vwcm90by50Y3A7XG4gXHRzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIgPSBcdTAwMjZzdGF0ZS1cdTAwM2VzZWVuW2Rpcl07XG5AQCAtNjQwLDMxICYjNDM7NzI4LDI5IEBAIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuIFx0XHRcdHNlbmRlci1cdTAwM2V0ZF9lbmQgPSBlbmQ7XG4gXHRcdFx0c2VuZGVyLVx1MDAzZWZsYWdzIHw9IElQX0NUX1RDUF9GTEFHX0RBVEFfVU5BQ0tOT1dMRURHRUQ7XG4gXG4tXHRcdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSxcbi1cdFx0XHRcdFx0XHQgIFwmIzM0OyV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZFwmIzM0Oywgb3ZlcnNob3QpO1xuJiM0MztcdFx0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZ3MsIE5GQ1RfVENQX0lHTk9SRSxcbiYjNDM7XHRcdFx0XHRcdCAgTkZfVENQX0xPR19PVkVSU0hPVCwgb3ZlcnNob3QpO1xuIFx0XHR9XG4gXG4tXHRcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JTlZBTElELFxuLVx0XHRcdFx0XHQgIFwmIzM0O1NFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVwmIzM0Oyxcbi1cdFx0XHRcdFx0ICBzZW5kZXItXHUwMDNldGRfbWF4ZW5kICYjNDM7IDEpO1xuJiM0MztcdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChjdCwgc2VuZGVyLCBsb2dzLCBORkNUX1RDUF9JTlZBTElELFxuJiM0MztcdFx0XHRcdCAgTkZfVENQX0xPR19TRVFfT1ZFUiwgc2VuZGVyLVx1MDAzZXRkX21heGVuZCAmIzQzOyAxKTtcbiBcdH1cbiBcbiBcdGlmICghYmVmb3JlKHNhY2ssIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCAmIzQzOyAxKSlcbi1cdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lOVkFMSUQsXG4tXHRcdFx0XHRcdCAgXCYjMzQ7QUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KVwmIzM0Oyxcbi1cdFx0XHRcdFx0ICByZWNlaXZlci1cdTAwM2V0ZF9lbmQgJiM0MzsgMSk7XG4mIzQzO1x0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZ3MsIE5GQ1RfVENQX0lOVkFMSUQsXG4mIzQzO1x0XHRcdFx0ICBORl9UQ1BfTE9HX0FDS19PVkVSLCByZWNlaXZlci1cdTAwM2V0ZF9lbmQgJiM0MzsgMSk7XG4gXG4gXHQvKiBJcyB0aGUgZW5kaW5nIHNlcXVlbmNlIGluIHRoZSByZWNlaXZlIHdpbmRvdyAoaWYgYXZhaWxhYmxlKT8gKi9cbiBcdGluX3JlY3Zfd2luID0gIXJlY2VpdmVyLVx1MDAzZXRkX21heHdpbiB8fFxuIFx0XHQgICAgICBhZnRlcihlbmQsIHNlbmRlci1cdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cdTAwM2V0ZF9tYXh3aW4gLSAxKTtcbiBcdGlmICghaW5fcmVjdl93aW4pXG4tXHRcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsXG4tXHRcdFx0XHRcdCAgXCYjMzQ7U0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZClcJiMzNDssXG4tXHRcdFx0XHRcdCAgc2VuZGVyLVx1MDAzZXRkX2VuZCAtIHJlY2VpdmVyLVx1MDAzZXRkX21heHdpbiAtIDEpO1xuJiM0MztcdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChjdCwgc2VuZGVyLCBsb2dzLCBORkNUX1RDUF9JR05PUkUsXG4mIzQzO1x0XHRcdFx0ICBORl9UQ1BfTE9HX1NFUV9VTkRFUixcbiYjNDM7XHRcdFx0XHQgIHNlbmRlci1cdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cdTAwM2V0ZF9tYXh3aW4gLSAxKTtcbiBcdGlmICghYWZ0ZXIoc2FjaywgcmVjZWl2ZXItXHUwMDNldGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKSlcbi1cdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSxcbi1cdFx0XHRcdFx0ICBcJiMzNDtpZ25vcmVkIEFDSyB1bmRlciBsb3dlciBib3VuZCAldSAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQpXCYjMzQ7LFxuLVx0XHRcdFx0XHQgIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSk7XG4mIzQzO1x0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZ3MsIE5GQ1RfVENQX0lHTk9SRSxcbiYjNDM7XHRcdFx0XHQgIE5GX1RDUF9MT0dfQUNLX1VOREVSLFxuJiM0MztcdFx0XHRcdCAgcmVjZWl2ZXItXHUwMDNldGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKTtcbiBcbiBcdC8qIFRha2UgaW50byBhY2NvdW50IHdpbmRvdyBzY2FsaW5nIChSRkMgMTMyMykuICovXG4gXHRpZiAoIXRjcGgtXHUwMDNlc3luKVxuQEAgLTcyMCwxMCAmIzQzOzgwNiw5IEBAIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcbi1cdFx0XHRcdFx0IGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4tXHRcdFx0XHRcdCBpbnQgaW5kZXgsXG4tXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpXG4mIzQzO1x0XHRcdFx0IGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4mIzQzO1x0XHRcdFx0IGludCBpbmRleCxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3MgKmxvZ3MpXG4ge1xuIFx0Y29uc3QgdW5zaWduZWQgaW50ICp0aW1lb3V0cztcbiBcdGNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0bjtcbkBAIC03NjQsOSAmIzQzOzg0OSwxMCBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcbiBcbiBcdFx0dGltZW91dCA9IFJFQURfT05DRSh0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1VOQUNLXSk7XG4gXHRcdGlmIChleHBpcmVzIFx1MDAzZSB0aW1lb3V0KSB7XG4tXHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLFxuLVx0XHRcdFx0XHQgIFwmIzM0O3BhY2tldCAoaW5kZXggJWQsIGRpciAlZCkgcmVzcG9uc2UgZm9yIGluZGV4ICVkIGxvd2VyIHRpbWVvdXQgdG8gJXVcJiMzNDssXG4tXHRcdFx0XHRcdCAgaW5kZXgsIGRpciwgY3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXgsIHRpbWVvdXQpO1xuJiM0MztcdFx0XHRuZl90Y3BfcXVldWVfaW52YWxpZF9sb2cobG9ncyxcbiYjNDM7XHRcdFx0XHRcdFx0IE5GX1RDUF9MT0dfTE9XRVJfVElNRU9VVCxcbiYjNDM7XHRcdFx0XHRcdFx0IHRpbWVvdXQsIGluZGV4LCBkaXIsXG4mIzQzO1x0XHRcdFx0XHRcdCBjdC1cdTAwM2Vwcm90by50Y3AubGFzdF9pbmRleCk7XG4gXG4gXHRcdFx0V1JJVEVfT05DRShjdC1cdTAwM2V0aW1lb3V0LCB0aW1lb3V0ICYjNDM7IG5mY3RfdGltZV9zdGFtcCk7XG4gXHRcdH1cbkBAIC05NzEsNiAmIzQzOzEwNTcsNyBAQCBpbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0ZW51bSB0Y3BfY29ubnRyYWNrIG5ld19zdGF0ZSwgb2xkX3N0YXRlO1xuIFx0dW5zaWduZWQgaW50IGluZGV4LCAqdGltZW91dHM7XG4gXHRlbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmVzO1xuJiM0MztcdHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2dzIGxvZ3MgPSB7fTtcbiBcdGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7XG4gXHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aDtcbiBcdHN0cnVjdCB0Y3BoZHIgX3RjcGg7XG5AQCAtMTI1MiwxNCAmIzQzOzEzMzksMTYgQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdH1cbiBcbiBcdHJlcyA9IHRjcF9pbl93aW5kb3coY3QsIGRpciwgaW5kZXgsXG4tXHRcdFx0ICAgIHNrYiwgZGF0YW9mZiwgdGgsIHN0YXRlKTtcbiYjNDM7XHRcdFx0ICAgIHNrYiwgZGF0YW9mZiwgdGgsIFx1MDAyNmxvZ3MpO1xuIFx0c3dpdGNoIChyZXMpIHtcbiBcdGNhc2UgTkZDVF9UQ1BfSUdOT1JFOlxuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdG5mX3RjcF9lbWl0X2ludmFsaWRfbG9ncyhza2IsIGN0LCBzdGF0ZSwgXHUwMDI2bG9ncyk7XG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXHRjYXNlIE5GQ1RfVENQX0lOVkFMSUQ6XG4tXHRcdG5mX3RjcF9oYW5kbGVfaW52YWxpZChjdCwgZGlyLCBpbmRleCwgc2tiLCBzdGF0ZSk7XG4mIzQzO1x0XHRuZl90Y3BfaGFuZGxlX2ludmFsaWQoY3QsIGRpciwgaW5kZXgsIFx1MDAyNmxvZ3MpO1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdG5mX3RjcF9lbWl0X2ludmFsaWRfbG9ncyhza2IsIGN0LCBzdGF0ZSwgXHUwMDI2bG9ncyk7XG4gXHRcdHJldHVybiAtTkZfQUNDRVBUO1xuIFx0Y2FzZSBORkNUX1RDUF9BQ0NFUFQ6XG4gXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxvZ2dpbmcgb2YgaW52YWxpZCBUQ1AgcGFja2V0cyBpbiBuZXRmaWx0ZXIgY29ubnRyYWNrIHRvIGRlZmVyIHRoZSBsb2dnaW5nIHVudGlsIGFmdGVyIHRoZSBjb25udHJhY2sgc3BpbmxvY2sgaXMgcmVsZWFzZWQuIFRoaXMgaXMgYSBwdXJlbHkgZGVjb3JhdGl2ZS9sb2dnaW5nIGNoYW5nZSB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIG5ldHdvcmsgc3RhY2suJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjNkMzdlZGE1ZDQ4OWVhNGZkOGYxYjU1YmJmYzIyZGMxYzlkMThiMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDMwIDE5OjQ3OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwppbmRleCBjZWVlZDNkN2ZlNTIwLi4wMGYwMTdkOTk5N2ZhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwpAQCAtNDgwLDM3ICYjNDM7NDgwLDEyNSBAQCBzdGF0aWMgdm9pZCB0Y3BfaW5pdF9zZW5kZXIoc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyLAogCX0KIH0KIAotX19wcmludGYoNiwgNykKLXN0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb24gbmZfdGNwX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCQljb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCQkJCQljb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsCi0JCQkJCQljb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsCi0JCQkJCQllbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmV0LAotCQkJCQkJY29uc3QgY2hhciAqZm10LCAuLi4pCiYjNDM7ZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB7CiYjNDM7CU5GX1RDUF9MT0dfTk9ORSwKJiM0MzsJTkZfVENQX0xPR19PVkVSU0hPVCwKJiM0MzsJTkZfVENQX0xPR19TRVFfT1ZFUiwKJiM0MzsJTkZfVENQX0xPR19BQ0tfT1ZFUiwKJiM0MzsJTkZfVENQX0xPR19TRVFfVU5ERVIsCiYjNDM7CU5GX1RDUF9MT0dfQUNLX1VOREVSLAomIzQzOwlORl9UQ1BfTE9HX0xPV0VSX1RJTUVPVVQsCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nIHsKJiM0MzsJZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB0eXBlOwomIzQzOwl1MzIgdmFsdWU7CiYjNDM7CXU4IGluZGV4OwomIzQzOwl1OCBkaXI7CiYjNDM7CXU4IGxhc3RfaW5kZXg7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyB7CiYjNDM7CS8qIEF0IG1vc3Qgb25lIHRjcF9pbl93aW5kb3coKSBsb2cgcGx1cyBvbmUgbG93ZXItdGltZW91dCBsb2cuICovCiYjNDM7CXN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgZW50cmllc1syXTsKJiM0MzsJdTggbnVtOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmZfdGNwX3F1ZXVlX2ludmFsaWRfbG9nKHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2dzICpsb2dzLAomIzQzOwkJCQkgICAgIGVudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUgdHlwZSwKJiM0MzsJCQkJICAgICB1MzIgdmFsdWUsIHU4IGluZGV4LCB1OCBkaXIsCiYjNDM7CQkJCSAgICAgdTggbGFzdF9pbmRleCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZzsKJiM0MzsKJiM0MzsJaWYgKGxvZ3MtJmd0O251bSAmZ3Q7PSBBUlJBWV9TSVpFKGxvZ3MtJmd0O2VudHJpZXMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlsb2cgPSAmYW1wO2xvZ3MtJmd0O2VudHJpZXNbbG9ncy0mZ3Q7bnVtJiM0MzsmIzQzO107CiYjNDM7CWxvZy0mZ3Q7dHlwZSA9IHR5cGU7CiYjNDM7CWxvZy0mZ3Q7dmFsdWUgPSB2YWx1ZTsKJiM0MzsJbG9nLSZndDtpbmRleCA9IGluZGV4OwomIzQzOwlsb2ctJmd0O2RpciA9IGRpcjsKJiM0MzsJbG9nLSZndDtsYXN0X2luZGV4ID0gbGFzdF9pbmRleDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvbgomIzQzO25mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCiYjNDM7CQkgICBjb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsCiYjNDM7CQkgICBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncywKJiM0MzsJCSAgIGVudW0gbmZfY3RfdGNwX2FjdGlvbiByZXQsCiYjNDM7CQkgICBlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGUsCiYjNDM7CQkgICB1MzIgdmFsdWUpCiB7CiAJY29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuID0gbmZfdGNwX3Blcm5ldChuZl9jdF9uZXQoY3QpKTsKLQlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsKLQl2YV9saXN0IGFyZ3M7CiAJYm9vbCBiZV9saWJlcmFsOwogCiAJYmVfbGliZXJhbCA9IHNlbmRlci0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfQ1RfVENQX0ZMQUdfQkVfTElCRVJBTCB8fCB0bi0mZ3Q7dGNwX2JlX2xpYmVyYWw7CiAJaWYgKGJlX2xpYmVyYWwpCiAJCXJldHVybiBORkNUX1RDUF9BQ0NFUFQ7CiAKLQl2YV9zdGFydChhcmdzLCBmbXQpOwotCXZhZi5mbXQgPSBmbXQ7Ci0JdmFmLnZhID0gJmFtcDthcmdzOwotCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsICYjMzQ7JXBWJiMzNDssICZhbXA7dmFmKTsKLQl2YV9lbmQoYXJncyk7Ci0KJiM0MzsJbmZfdGNwX3F1ZXVlX2ludmFsaWRfbG9nKGxvZ3MsIHR5cGUsIHZhbHVlLCAwLCAwLCAwKTsKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIHZvaWQgbmZfdGNwX2VtaXRfaW52YWxpZF9sb2coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKJiM0MzsJCQkJICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSwKJiM0MzsJCQkJICAgIGNvbnN0IHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZykKJiM0Mzt7CiYjNDM7CXN3aXRjaCAobG9nLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19PVkVSU0hPVDoKJiM0MzsJCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsCiYjNDM7CQkJCQkgICYjMzQ7JXUgYnl0ZXMgbW9yZSB0aGFuIGV4cGVjdGVkJiMzNDssCiYjNDM7CQkJCQkgIGxvZy0mZ3Q7dmFsdWUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19TRVFfT1ZFUjoKJiM0MzsJCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsCiYjNDM7CQkJCQkgICYjMzQ7U0VRIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKG92ZXIgdGhlIHdpbmRvdyBvZiB0aGUgcmVjZWl2ZXIpJiMzNDssCiYjNDM7CQkJCQkgIGxvZy0mZ3Q7dmFsdWUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19BQ0tfT1ZFUjoKJiM0MzsJCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsCiYjNDM7CQkJCQkgICYjMzQ7QUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KSYjMzQ7LAomIzQzOwkJCQkJICBsb2ctJmd0O3ZhbHVlKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE5GX1RDUF9MT0dfU0VRX1VOREVSOgomIzQzOwkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwKJiM0MzsJCQkJCSAgJiMzNDtTRVEgaXMgdW5kZXIgbG93ZXIgYm91bmQgJXUgKGFscmVhZHkgQUNLZWQgZGF0YSByZXRyYW5zbWl0dGVkKSYjMzQ7LAomIzQzOwkJCQkJICBsb2ctJmd0O3ZhbHVlKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE5GX1RDUF9MT0dfQUNLX1VOREVSOgomIzQzOwkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwKJiM0MzsJCQkJCSAgJiMzNDtpZ25vcmVkIEFDSyB1bmRlciBsb3dlciBib3VuZCAldSAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQpJiMzNDssCiYjNDM7CQkJCQkgIGxvZy0mZ3Q7dmFsdWUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19MT1dFUl9USU1FT1VUOgomIzQzOwkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwKJiM0MzsJCQkJCSAgJiMzNDtwYWNrZXQgKGluZGV4ICVkLCBkaXIgJWQpIHJlc3BvbnNlIGZvciBpbmRleCAlZCBsb3dlciB0aW1lb3V0IHRvICV1JiMzNDssCiYjNDM7CQkJCQkgIGxvZy0mZ3Q7aW5kZXgsIGxvZy0mZ3Q7ZGlyLAomIzQzOwkJCQkJICBsb2ctJmd0O2xhc3RfaW5kZXgsIGxvZy0mZ3Q7dmFsdWUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19OT05FOgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmZfdGNwX2VtaXRfaW52YWxpZF9sb2dzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSwKJiM0MzsJCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncykKJiM0Mzt7CiYjNDM7CXU4IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBsb2dzLSZndDtudW07IGkmIzQzOyYjNDM7KQomIzQzOwkJbmZfdGNwX2VtaXRfaW52YWxpZF9sb2coc2tiLCBjdCwgc3RhdGUsICZhbXA7bG9ncy0mZ3Q7ZW50cmllc1tpXSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvbgogdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCiAJICAgICAgdW5zaWduZWQgaW50IGluZGV4LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3BoLAotCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpob29rX3N0YXRlKQomIzQzOwkgICAgICBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncykKIHsKIAlzdHJ1Y3QgaXBfY3RfdGNwICpzdGF0ZSA9ICZhbXA7Y3QtJmd0O3Byb3RvLnRjcDsKIAlzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIgPSAmYW1wO3N0YXRlLSZndDtzZWVuW2Rpcl07CkBAIC02NDAsMzEgJiM0Mzs3MjgsMjkgQEAgdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCiAJCQlzZW5kZXItJmd0O3RkX2VuZCA9IGVuZDsKIAkJCXNlbmRlci0mZ3Q7ZmxhZ3MgfD0gSVBfQ1RfVENQX0ZMQUdfREFUQV9VTkFDS05PV0xFREdFRDsKIAotCQkJcmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSwKLQkJCQkJCSAgJiMzNDsldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWQmIzM0Oywgb3ZlcnNob3QpOwomIzQzOwkJCXJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoY3QsIHNlbmRlciwgbG9ncywgTkZDVF9UQ1BfSUdOT1JFLAomIzQzOwkJCQkJICBORl9UQ1BfTE9HX09WRVJTSE9ULCBvdmVyc2hvdCk7CiAJCX0KIAotCQlyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSU5WQUxJRCwKLQkJCQkJICAmIzM0O1NFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKSYjMzQ7LAotCQkJCQkgIHNlbmRlci0mZ3Q7dGRfbWF4ZW5kICYjNDM7IDEpOwomIzQzOwkJcmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChjdCwgc2VuZGVyLCBsb2dzLCBORkNUX1RDUF9JTlZBTElELAomIzQzOwkJCQkgIE5GX1RDUF9MT0dfU0VRX09WRVIsIHNlbmRlci0mZ3Q7dGRfbWF4ZW5kICYjNDM7IDEpOwogCX0KIAogCWlmICghYmVmb3JlKHNhY2ssIHJlY2VpdmVyLSZndDt0ZF9lbmQgJiM0MzsgMSkpCi0JCXJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JTlZBTElELAotCQkJCQkgICYjMzQ7QUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KSYjMzQ7LAotCQkJCQkgIHJlY2VpdmVyLSZndDt0ZF9lbmQgJiM0MzsgMSk7CiYjNDM7CQlyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZ3MsIE5GQ1RfVENQX0lOVkFMSUQsCiYjNDM7CQkJCSAgTkZfVENQX0xPR19BQ0tfT1ZFUiwgcmVjZWl2ZXItJmd0O3RkX2VuZCAmIzQzOyAxKTsKIAogCS8qIElzIHRoZSBlbmRpbmcgc2VxdWVuY2UgaW4gdGhlIHJlY2VpdmUgd2luZG93IChpZiBhdmFpbGFibGUpPyAqLwogCWluX3JlY3Zfd2luID0gIXJlY2VpdmVyLSZndDt0ZF9tYXh3aW4gfHwKIAkJICAgICAgYWZ0ZXIoZW5kLCBzZW5kZXItJmd0O3RkX2VuZCAtIHJlY2VpdmVyLSZndDt0ZF9tYXh3aW4gLSAxKTsKIAlpZiAoIWluX3JlY3Zfd2luKQotCQlyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLAotCQkJCQkgICYjMzQ7U0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZCkmIzM0OywKLQkJCQkJICBzZW5kZXItJmd0O3RkX2VuZCAtIHJlY2VpdmVyLSZndDt0ZF9tYXh3aW4gLSAxKTsKJiM0MzsJCXJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoY3QsIHNlbmRlciwgbG9ncywgTkZDVF9UQ1BfSUdOT1JFLAomIzQzOwkJCQkgIE5GX1RDUF9MT0dfU0VRX1VOREVSLAomIzQzOwkJCQkgIHNlbmRlci0mZ3Q7dGRfZW5kIC0gcmVjZWl2ZXItJmd0O3RkX21heHdpbiAtIDEpOwogCWlmICghYWZ0ZXIoc2FjaywgcmVjZWl2ZXItJmd0O3RkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSkpCi0JCXJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsCi0JCQkJCSAgJiMzNDtpZ25vcmVkIEFDSyB1bmRlciBsb3dlciBib3VuZCAldSAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQpJiMzNDssCi0JCQkJCSAgcmVjZWl2ZXItJmd0O3RkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSk7CiYjNDM7CQlyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZ3MsIE5GQ1RfVENQX0lHTk9SRSwKJiM0MzsJCQkJICBORl9UQ1BfTE9HX0FDS19VTkRFUiwKJiM0MzsJCQkJICByZWNlaXZlci0mZ3Q7dGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKTsKIAogCS8qIFRha2UgaW50byBhY2NvdW50IHdpbmRvdyBzY2FsaW5nIChSRkMgMTMyMykuICovCiAJaWYgKCF0Y3BoLSZndDtzeW4pCkBAIC03MjAsMTAgJiM0Mzs4MDYsOSBAQCB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKIH0KIAogc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCQkJCSBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLAotCQkJCQkgaW50IGluZGV4LAotCQkJCQkgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpob29rX3N0YXRlKQomIzQzOwkJCQkgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKJiM0MzsJCQkJIGludCBpbmRleCwKJiM0MzsJCQkJIHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2dzICpsb2dzKQogewogCWNvbnN0IHVuc2lnbmVkIGludCAqdGltZW91dHM7CiAJY29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuOwpAQCAtNzY0LDkgJiM0Mzs4NDksMTAgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsCiAKIAkJdGltZW91dCA9IFJFQURfT05DRSh0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1VOQUNLXSk7CiAJCWlmIChleHBpcmVzICZndDsgdGltZW91dCkgewotCQkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLAotCQkJCQkgICYjMzQ7cGFja2V0IChpbmRleCAlZCwgZGlyICVkKSByZXNwb25zZSBmb3IgaW5kZXggJWQgbG93ZXIgdGltZW91dCB0byAldSYjMzQ7LAotCQkJCQkgIGluZGV4LCBkaXIsIGN0LSZndDtwcm90by50Y3AubGFzdF9pbmRleCwgdGltZW91dCk7CiYjNDM7CQkJbmZfdGNwX3F1ZXVlX2ludmFsaWRfbG9nKGxvZ3MsCiYjNDM7CQkJCQkJIE5GX1RDUF9MT0dfTE9XRVJfVElNRU9VVCwKJiM0MzsJCQkJCQkgdGltZW91dCwgaW5kZXgsIGRpciwKJiM0MzsJCQkJCQkgY3QtJmd0O3Byb3RvLnRjcC5sYXN0X2luZGV4KTsKIAogCQkJV1JJVEVfT05DRShjdC0mZ3Q7dGltZW91dCwgdGltZW91dCAmIzQzOyBuZmN0X3RpbWVfc3RhbXApOwogCQl9CkBAIC05NzEsNiAmIzQzOzEwNTcsNyBAQCBpbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LAogCWVudW0gdGNwX2Nvbm50cmFjayBuZXdfc3RhdGUsIG9sZF9zdGF0ZTsKIAl1bnNpZ25lZCBpbnQgaW5kZXgsICp0aW1lb3V0czsKIAllbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmVzOwomIzQzOwlzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyBsb2dzID0ge307CiAJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjsKIAljb25zdCBzdHJ1Y3QgdGNwaGRyICp0aDsKIAlzdHJ1Y3QgdGNwaGRyIF90Y3BoOwpAQCAtMTI1MiwxNCAmIzQzOzEzMzksMTYgQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCwKIAl9CiAKIAlyZXMgPSB0Y3BfaW5fd2luZG93KGN0LCBkaXIsIGluZGV4LAotCQkJICAgIHNrYiwgZGF0YW9mZiwgdGgsIHN0YXRlKTsKJiM0MzsJCQkgICAgc2tiLCBkYXRhb2ZmLCB0aCwgJmFtcDtsb2dzKTsKIAlzd2l0Y2ggKHJlcykgewogCWNhc2UgTkZDVF9UQ1BfSUdOT1JFOgogCQlzcGluX3VubG9ja19iaCgmYW1wO2N0LSZndDtsb2NrKTsKJiM0MzsJCW5mX3RjcF9lbWl0X2ludmFsaWRfbG9ncyhza2IsIGN0LCBzdGF0ZSwgJmFtcDtsb2dzKTsKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAljYXNlIE5GQ1RfVENQX0lOVkFMSUQ6Ci0JCW5mX3RjcF9oYW5kbGVfaW52YWxpZChjdCwgZGlyLCBpbmRleCwgc2tiLCBzdGF0ZSk7CiYjNDM7CQluZl90Y3BfaGFuZGxlX2ludmFsaWQoY3QsIGRpciwgaW5kZXgsICZhbXA7bG9ncyk7CiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7Y3QtJmd0O2xvY2spOwomIzQzOwkJbmZfdGNwX2VtaXRfaW52YWxpZF9sb2dzKHNrYiwgY3QsIHN0YXRlLCAmYW1wO2xvZ3MpOwogCQlyZXR1cm4gLU5GX0FDQ0VQVDsKIAljYXNlIE5GQ1RfVENQX0FDQ0VQVDoKIAkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNzgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUQ1AgQ29ubnRyYWNrIExvZ2dpbmcgUmVmYWN0b3IqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYXBwbGllZCB0byBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNgLiBJdCYjMzk7cyByZWZhY3RvcmluZyBob3cgaW52YWxpZCBUQ1AgcGFja2V0cyBhcmUgbG9nZ2VkIHdpdGhpbiBuZXRmaWx0ZXIgY29ubnRyYWNrLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhleSYjMzk7cmUgaW50cm9kdWNpbmcgdGhlc2UgbmV3IHN0cnVjdHVyZXM6IGBlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlYCwgYHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2dgLCBhbmQgYHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2dzYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBtb3ZpbmcgYXdheSBmcm9tIGRpcmVjdCBjYWxscyB0byBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgYW5kIGluc3RlYWQgcXVldWluZyB0aGVzZSBsb2cgbWVzc2FnZXMgZm9yIGxhdGVyIGVtaXNzaW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGFuIGF0dGVtcHQgdG8gYXZvaWQgaG9sZGluZyBgY3QtJmd0O2xvY2tgIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGxvZ2dpbmcuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IG9wdGltaXphdGlvbi4KCkEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhpczogYG5mX3RjcF9lbWl0X2ludmFsaWRfbG9nc2AgaXMgZGVmaW5pdGVseSBjYWxsZWQgKmFmdGVyKiBgc3Bpbl91bmxvY2tfYmgoJmFtcDtjdC0mZ3Q7bG9jaylgLiBTbywgYHRjcF9pbl93aW5kb3dgIGFuZCBgbmZfdGNwX2hhbmRsZV9pbnZhbGlkYCBub3cgc3RvcmUgbG9nIG1lc3NhZ2VzIGluIGEgbG9jYWwgYHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2dzIGxvZ3NgIHZhcmlhYmxlIG9uIHRoZSBzdGFjay4gVGhlIGVtaXNzaW9uIHRoZW4gaGFwcGVucyBhZnRlciByZWxlYXNpbmcgdGhlIGxvY2suIENsZXZlciwgdGhleSYjMzk7cmUgdXNpbmcgYSBsb2NhbCBidWZmZXIgdG8gZGVjb3VwbGUgdGhlIGxvZ2dpbmcgZnJvbSB0aGUgY3JpdGljYWwgc2VjdGlvbi4KCkZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQsIHRoaXMgKmlzKiBhIGNoYW5nZSBiZWNhdXNlIGl0IGFsdGVycyB0aGUgbG9jayBjb250ZXh0IG9mIHRoZSBsb2dnaW5nIGZ1bmN0aW9uLiBCdXQsIGRvZXMgaXQgY2hhbmdlIHRoZSBjb3JlIFRDUCBjb25udHJhY2sgbG9naWM/IE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBubywgdGhlIGxvZ2dpbmcgZnVuY3Rpb24gYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGlzIHByZXR0eSBtdWNoIGp1c3QgZm9yIGxvZ2dpbmcuIE5vIGZ1bmN0aW9uYWwgc2lkZSBlZmZlY3QuCgpMZXQmIzM5O3MgZGl2ZSBkZWVwZXIgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9uYWwgYWx0ZXJhdGlvbnMgYmV5b25kIGp1c3QgdGhlIGRlZmVycmVkIGxvZ2dpbmcuIE9rYXksIHRoZSBwYXRjaCBjaGFuZ2VzIGBuZl90Y3BfbG9nX2ludmFsaWRgIHRvIHF1ZXVlIHRoZSBsb2cgaW5zdGVhZCBvZiBjYWxsaW5nIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCBkaXJlY3RseS4gYHRjcF9pbl93aW5kb3dgIHN0aWxsIHJldHVybnMgdGhlIHNhbWUgdmFsdWVzOiBgTkZDVF9UQ1BfSUdOT1JFYCwgYE5GQ1RfVENQX0lOVkFMSURgLCBvciBgTkZDVF9UQ1BfQUNDRVBUYC4gVGhvc2UgYWxsIGFyZSB0aGUgc2FtZS4gQW5kIHRoZSB0aW1lb3V0IG1vZGlmaWNhdGlvbnMgaW4gYG5mX3RjcF9oYW5kbGVfaW52YWxpZGAgc2VlbSB0byBiZSB1bmNoYW5nZWQ6IHRoZSBjb3JlIGxvZ2ljIGlzIHRoZSBzYW1lLiBUaGUgb25seSBjaGFuZ2UgaXMgdGhlIGRlZmVycmFsLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyBjaGFuZ2Ugd29ydGggZnV6emluZz8KCk9uIHRoZSBvbmUgaGFuZCwgaWYgaXQgKndlcmUqIGp1c3QgYSByZWZhY3RvcmluZyBvZiBsb2dnaW5nLCBJIG1pZ2h0IHNheSBubywgYXMgcGVyIHRoZSBpbnN0cnVjdGlvbnMgaW4gdGhlIHByb21wdC4gSG93ZXZlciwgZGVmZXJyaW5nIGxvZ2dpbmcgb3V0c2lkZSBhIHNwaW5sb2NrICpjb3VsZCogcHJldmVudCBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGxvY2t1cHMuIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYnV0IG1vcmUgaW4gdGVybXMgb2YgY29uY3VycmVuY3kgcmF0aGVyIHRoYW4gYWx0ZXJpbmcgdGhlIG5ldHdvcmsgc3RhY2sgZXhlY3V0aW9uLiBJdCBjaGFuZ2VzICp3aGVuKiB0aGUgbG9nIGlzIGVtaXR0ZWQuIFRoZSBjb3JlIFRDUCBjb25udHJhY2sgKmJlaGF2aW9yKiBzZWVtcyB1bmNoYW5nZWQuCgpSZW1lbWJlcmluZyB0aGUgcHJvbXB0JiMzOTtzIGluc3RydWN0aW9uOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4gLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4gLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuJiMzNDsKCkxldCYjMzk7cyBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGF0IGNoYW5nZSwgYWdhaW46CmBgYGMKLQl2YV9zdGFydChhcmdzLCBmbXQpOwotCXZhZi5mbXQgPSBmbXQ7Ci0JdmFmLnZhID0gJmFtcDthcmdzOwotCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsICYjMzQ7JXBWJiMzNDssICZhbXA7dmFmKTsKLQl2YV9lbmQoYXJncyk7Ci0KJiM0MzsJbmZfdGNwX3F1ZXVlX2ludmFsaWRfbG9nKGxvZ3MsIHR5cGUsIHZhbHVlLCAwLCAwLCAwKTsKIAlyZXR1cm4gcmV0OwpgYGAKSXQmIzM5O3MganVzdCBkZWZlcnJpbmcgdGhlIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCBjYWxsLiBXZSYjMzk7cmUgb25seSBxdWV1aW5nIGl0IG5vdy4gYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgICppcyogYSBsb2dnaW5nIGZ1bmN0aW9uLiBTbywgaWYgdGhpcyBwYXRjaCAqb25seSogY29udGFpbnMgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyBsaWtlIGxvZ2dpbmcsIHdlIHNob3VsZCByZXR1cm4gZmFsc2UuIEV2ZW4gdGhvdWdoIGl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0IGlzIG9ubHkgYSBjaGFuZ2UgaW4gdGVybXMgb2YgY29uY3VycmVuY3ksIHdoaWNoIGlzIGEgc2lkZSBlZmZlY3QuIEl0IGlzIGEgbG9nZ2luZyBmdW5jdGlvbiwgd2l0aCBubyBmdW5jdGlvbmFsIHNpZGUgZWZmZWN0cy4KCkdpdmVuIHRoYXQgYW5kIHRoZSBsYWNrIG9mIG90aGVyIGZ1bmN0aW9uYWwgY2hhbmdlcywgaXQgKmxvb2tzIGxpa2UqIHRoaXMgaXMgZnVuZGFtZW50YWxseSBhIGxvZ2dpbmcgcmVmYWN0b3JpbmcgYW5kIHRoZSBhbnN3ZXIgaXMgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM9NzI9X19wcmludGYoNCwgNSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NzM6dm9pZCBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTc0LVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy05My19XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjk0OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy05NS0jZW5kaWZcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM9MTQ4PXN0YXRpYyBpbnQgZG9fYmFzaWNfY2hlY2tzKHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMTc0LVx0XHQgICAgIGNvdW50ICE9IDApIHx8ICFzY2gtXHUwMDNlbGVuZ3RoKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6MTc1Olx0XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMTc2LVx0XHRcdFx0XHRcdCAgXCYjMzQ7JXMgZmFpbGVkLiBjaHVuayBudW0gJWQsIHR5cGUgJWQsIGxlbiAlZCBmbGFnICVkXFxuXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYz0zMjc9aW50IG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTM3My1cdCAgICBzaC1cdTAwM2V2dGFnICE9IGN0LVx1MDAzZXByb3RvLnNjdHAudnRhZ1tkaXJdKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6Mzc0Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTM3NS1cdFx0XHRcdFx0ICBcJiMzNDt2ZXJpZmljYXRpb24gdGFnIGNoZWNrIGZhaWxlZCAleCB2cyAleCBmb3IgZGlyICVkXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy00NTMtXHRcdGlmIChuZXdfc3RhdGUgPT0gU0NUUF9DT05OVFJBQ0tfTUFYKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6NDU0Olx0XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtNDU1LVx0XHRcdFx0XHRcdCAgXCYjMzQ7SW52YWxpZCwgb2xkX3N0YXRlICVkLCBkaXIgJWQsIHR5cGUgJWRcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9NTQ0PXN0YXRpYyB2b2lkIG5mX3RjcF9lbWl0X2ludmFsaWRfbG9nKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTUwLVx0Y2FzZSBORl9UQ1BfTE9HX09WRVJTSE9UOlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTUxOlx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTUyLVx0XHRcdFx0XHQgIFwmIzM0OyV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZFwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NTUtXHRjYXNlIE5GX1RDUF9MT0dfU0VRX09WRVI6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1NTY6XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NTctXHRcdFx0XHRcdCAgXCYjMzQ7U0VRIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKG92ZXIgdGhlIHdpbmRvdyBvZiB0aGUgcmVjZWl2ZXIpXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU2MC1cdGNhc2UgTkZfVENQX0xPR19BQ0tfT1ZFUjpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjU2MTpcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU2Mi1cdFx0XHRcdFx0ICBcJiMzNDtBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU2NS1cdGNhc2UgTkZfVENQX0xPR19TRVFfVU5ERVI6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1NjY6XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NjctXHRcdFx0XHRcdCAgXCYjMzQ7U0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZClcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTcwLVx0Y2FzZSBORl9UQ1BfTE9HX0FDS19VTkRFUjpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjU3MTpcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU3Mi1cdFx0XHRcdFx0ICBcJiMzNDtpZ25vcmVkIEFDSyB1bmRlciBsb3dlciBib3VuZCAldSAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQpXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU3NS1cdGNhc2UgTkZfVENQX0xPR19MT1dFUl9USU1FT1VUOlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTc2Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTc3LVx0XHRcdFx0XHQgIFwmIzM0O3BhY2tldCAoaW5kZXggJWQsIGRpciAlZCkgcmVzcG9uc2UgZm9yIGluZGV4ICVkIGxvd2VyIHRpbWVvdXQgdG8gJXVcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9MTA0OT1pbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyMDEtXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTIwMjpcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyMDMtXHRcdFx0XHRcdCAgXCYjMzQ7cGFja2V0IChpbmRleCAlZCkgaW4gZGlyICVkIGlnbm9yZWQsIHN0YXRlICVzXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyMjQtXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTIyNTpcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyMjYtXHRcdFx0XHRcdCAgXCYjMzQ7cGFja2V0IChpbmRleCAlZCkgaW4gZGlyICVkIGludmFsaWQsIHN0YXRlICVzXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyNDItXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMjQzOlx0XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFwmIzM0O2NoYWxsZW5nZS1hY2sgaWdub3JlZFwmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjQ0LVx0XHRcdHJldHVybiBORl9BQ0NFUFQ7IC8qIERvbiYjMzk7dCBjaGFuZ2Ugc3RhdGUgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjg3LVx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMjg4Olx0XHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXCYjMzQ7aW52YWxpZCByc3RcJiMzNDspO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTI4OS1cdFx0XHRcdHJldHVybiAtTkZfQUNDRVBUO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5ODUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA5MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgV29ydGhpbmVzcyBvZiBGdXp6aW5nKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBUaGlzIHBhdGNoIGxvb2tzIGxpa2UgaXQmIzM5O3MgY2hhbmdpbmcgaG93IGludmFsaWQgVENQIHNlZ21lbnRzIGFyZSBsb2dnZWQgd2l0aGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGZyYW1ld29yay4gSW5pdGlhbGx5LCBJIHNlZSB0aGF0IHRoZSBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgZnVuY3Rpb24gaXMgYmVpbmcgcmVwbGFjZWQgYnkgYSBxdWV1ZWQgbG9nZ2luZyBtZWNoYW5pc20sIHdoaWNoIGlzIGludGVyZXN0aW5nLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgKmp1c3QqIGEgbG9nZ2luZyBjaGFuZ2UsIG9yIGlzIHRoZXJlIGEgZnVuY3Rpb25hbCBzaWRlIGVmZmVjdD8mIzM0OwoKTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRoZSBjb2RlIGRpZmYgY29uZmlybXMgdGhhdCB0aGUgcHJpbWFyeSBhbHRlcmF0aW9uIGlzIGluZGVlZCB0aGUgbG9nZ2luZyBtZWNoYW5pc20gaXRzZWxmLiBUaGUgZGlyZWN0IGNhbGwgdG8gYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGlzIHJlcGxhY2VkIHdpdGggYG5mX3RjcF9xdWV1ZV9pbnZhbGlkX2xvZ2AgYW5kIGxhdGVyIGBuZl90Y3BfZW1pdF9pbnZhbGlkX2xvZ3NgLiBUaGUga2V5IGlzIHRoYXQgYG5mX3RjcF9lbWl0X2ludmFsaWRfbG9nc2AgaXMgY2FsbGVkICphZnRlciogcmVsZWFzaW5nIHRoZSBzcGlubG9jayAoYHNwaW5fdW5sb2NrX2JoKCZhbXA7Y3QtJmd0O2xvY2spYCkuIFRoaXMgaXMgbm90IGp1c3QgY29zbWV0aWM7IGl0JiMzOTtzIGEgcmVmYWN0b3JpbmcgdG8gYXZvaWQgaG9sZGluZyBhIGxvY2sgd2hpbGUgbG9nZ2luZywgd2hpY2ggY291bGQgcHJldmVudCBwb3NzaWJsZSBkZWFkbG9ja3MgYW5kIG9yIGltcHJvdmUgcGVyZm9ybWFuY2UuCgpCdXQsIGdpdmVuIHRoZSBwcm9tcHQsIEkmIzM5O20gdHJ5aW5nIHRvIGRldGVybWluZSBpZiBpdOKAmXMgYSDigJxwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2UsIHN1Y2ggYXMgbG9nZ2luZy7igJ0gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB5ZXMsIGJlY2F1c2UgdGhlIHJldHVybiB2YWx1ZXMgKGBORl9BQ0NFUFRgLCBgLU5GX0FDQ0VQVGApIGFuZCB0aGUgb3ZlcmFsbCBmbG93LCAqZnVuY3Rpb25hbGx5KiBzcGVha2luZywgc2VlbSB1bmNoYW5nZWQuIFRoZSBzdGF0ZSBjaGFuZ2VzIGFyZSBjb25zaXN0ZW50LiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHdoZXJlIHRoZSBsb2dnaW5nIG9jY3Vycywgc3BlY2lmaWNhbGx5IG91dHNpZGUgdGhlIGxvY2suIFRoZSBjb3JlIGJlaGF2aW9yIG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgcmVtYWlucyB0aGUgc2FtZS4KClRoZSBwcm9tcHTigJlzIGd1aWRhbmNlIG1lbnRpb25zICYjMzQ7UHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMmIzM0OyBkb24mIzM5O3Qgd2FycmFudCBmdXp6aW5nLiBJcyByZWZhY3RvcmluZyBsb2dnaW5nIHRvIGF2b2lkIGxvY2sgY29udGVudGlvbiBhIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZT8gSXQgZG9lc27igJl0IG1vZGlmeSB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIHByb3RvY29sLiBJJiMzOTttIGxlYW5pbmcgdG93YXJkIHRoZSBhbnN3ZXIgYmVpbmcgeWVzLCBidXQgbGV0JiMzOTtzIGRvdWJsZS1jaGVjay4KCkxldCYjMzk7cyBsb29rIG1vcmUgYXQgYG5mX3RjcF9oYW5kbGVfaW52YWxpZGAuIFRoZSBjb2RlIHF1ZXVlcyB0aGUgbG9nLiBUaGlzIGlzIHB1cmVseSBhIGxvZ2dpbmcgY2hhbmdlLiBJJiMzOTttIGdvaW5nIHRvIGRlY2xhcmUgdGhpcyBwYXRjaCBhcyBzb21ldGhpbmcgdGhhdCBpc24mIzM5O3QgZnVuY3Rpb25hbGx5IGFsdGVyaW5nIHRoZSBzdGFjayYjMzk7cyBiZWhhdmlvciwgYnV0IGluc3RlYWQsIGl0IGlzIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIGxvZ2dpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoZXJlZm9yZSwgSSBiZWxpZXZlIHRoZSBhcHByb3ByaWF0ZSByZXNwb25zZSBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDcwOlx0RVhQT1JUX1NZTUJPTF9HUEwobmZfbDRwcm90b19sb2dfaW52YWxpZCk7XG4gIDcxOlx0XG4gIDcyOlx0X19wcmludGYoNCwgNSlcbiAgNzM6XHR2b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgNzQ6XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuICA3NTpcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXG4gIDc2Olx0XHRcdFx0ICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuICA3NzpcdHtcbiAgNzg6XHRcdHN0cnVjdCB2YV9mb3JtYXQgdmFmO1xuICA3OTpcdFx0c3RydWN0IG5ldCAqbmV0O1xuICA4MDpcdFx0dmFfbGlzdCBhcmdzO1xuICA4MTpcdFxuICA4MjpcdFx0bmV0ID0gbmZfY3RfbmV0KGN0KTtcbiAgODM6XHRcdGlmIChsaWtlbHkobmV0LVx1MDAzZWN0LnN5c2N0bF9sb2dfaW52YWxpZCA9PSAwKSlcbiAgODQ6XHRcdFx0cmV0dXJuO1xuICA4NTpcdFxuICA4NjpcdFx0dmFfc3RhcnQoYXJncywgZm10KTtcbiAgODc6XHRcdHZhZi5mbXQgPSBmbXQ7XG4gIDg4Olx0XHR2YWYudmEgPSBcdTAwMjZhcmdzO1xuICA4OTpcdFxuICA5MDpcdFx0bmZfbDRwcm90b19sb2dfaW52YWxpZChza2IsIHN0YXRlLFxuICA5MTpcdFx0XHRcdCAgICAgICBuZl9jdF9wcm90b251bShjdCksIFwmIzM0OyVwVlwmIzM0OywgXHUwMDI2dmFmKTtcbiAgOTI6XHRcdHZhX2VuZChhcmdzKTtcbiAgOTM6XHR9XG4gIDk0Olx0RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfbDRwcm90b19sb2dfaW52YWxpZCk7XG4gIDk1Olx0I2VuZGlmXG4gIDk2Olx0XG4gIDk3Olx0Y29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpuZl9jdF9sNHByb3RvX2ZpbmQodTggbDRwcm90bylcbiAgOTg6XHR7XG4gIDk5Olx0XHRzd2l0Y2ggKGw0cHJvdG8pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg3MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzczoKCioqQSBTaW1wbGUgRnVuY3Rpb24gQ2FsbCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGFuZCBpdCYjMzk7cyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgYmFzaWNhbGx5IGEgd3JhcHBlci4gSXQgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBkb2luZyBhbnl0aGluZyBjb21wbGV4IGluIGFuZCBvZiBpdHNlbGYuIEVzc2VudGlhbGx5LCB3aGF0IEkmIzM5O20gc2VlaW5nIGlzIHRoYXQgaXQmIzM5O3MganVzdCBjYWxsaW5nIGBuZl9sNHByb3RvX2xvZ19pbnZhbGlkYC4gVGhhdCYjMzk7cyBpdC4gTm8gYWRkaXRpb25hbCBsb2dpYywgbm8gcHJlLXByb2Nlc3NpbmcsIG5vIHBvc3QtcHJvY2Vzc2luZy4gSXQmIzM5O3MgYSBkaXJlY3QgcGFzcy10aHJvdWdoLiBJIHN1cHBvc2UgaXQgY291bGQgYmUgYW4gYWJzdHJhY3Rpb24sIGxpa2VseSBhbiBhdHRlbXB0IHRvIGdyb3VwIHJlbGF0ZWQgZXJyb3IgcmVwb3J0aW5nLCBvciBwZXJoYXBzIGEgbGF5ZXIgb2YgaW5kaXJlY3Rpb24gZm9yIGZ1dHVyZSBtb2RpZmljYXRpb25zLiBCdXQgYXQgdGhpcyBsZXZlbCwgaXQmIzM5O3MgYSBvbmUtbGluZXI6IHRoZSBmaXJzdCBmdW5jdGlvbiBqdXN0IGRlbGVnYXRlcyB0byB0aGUgc2Vjb25kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2w0cHJvdG9fbG9nX2ludmFsaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTQ4PV9fcHJpbnRmKDQsIDUpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjQ5OnZvaWQgbmZfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01MC1cdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNjktfVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo3MDpFWFBPUlRfU1lNQk9MX0dQTChuZl9sNHByb3RvX2xvZ19pbnZhbGlkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNzEtXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz03Mz12b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTg5LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo5MDpcdG5mX2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtOTEtXHRcdFx0ICAgICAgIG5mX2N0X3Byb3RvbnVtKGN0KSwgXCYjMzQ7JXBWXCYjMzQ7LCBcdTAwMjZ2YWYpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYz0xMDY9aW50IG5mX2Nvbm50cmFja19pbmV0X2Vycm9yKHN0cnVjdCBuZl9jb25uICp0bXBsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYy0xNzItXHRcdGlmIChzdGF0ZS1cdTAwM2VwZiA9PSBBRl9JTkVUKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmM6MTczOlx0XHRcdG5mX2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYy0xNzQtXHRcdFx0XHRcdCAgICAgICBsNHByb3RvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYy0xNzctXHRcdH0gZWxzZSBpZiAoc3RhdGUtXHUwMDNlcGYgPT0gQUZfSU5FVDYpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYzoxNzg6XHRcdFx0bmZfbDRwcm90b19sb2dfaW52YWxpZChza2IsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jLTE3OS1cdFx0XHRcdFx0ICAgICAgIGw0cHJvdG8sXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jPTE5Nj1zdGF0aWMgdm9pZCBpY21wX2Vycm9yX2xvZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYy0xOTkte1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jOjIwMDpcdG5mX2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBzdGF0ZSwgSVBQUk9UT19JQ01QLCBcJiMzNDslc1wmIzM0OywgbXNnKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYy0yMDEtfVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jPTEyNz1zdGF0aWMgdm9pZCBpY21wdjZfZXJyb3JfbG9nKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMtMTMwLXtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jOjEzMTpcdG5mX2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBzdGF0ZSwgSVBQUk9UT19JQ01QVjYsIFwmIzM0OyVzXCYjMzQ7LCBtc2cpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMtMTMyLX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM9Mjk1PXN0YXRpYyBib29sIHNjdHBfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMzIxLW91dF9pbnZhbGlkOlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jOjMyMjpcdG5mX2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBzdGF0ZSwgSVBQUk9UT19TQ1RQLCBcJiMzNDslc1wmIzM0OywgbG9nbXNnKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0zMjMtXHRyZXR1cm4gdHJ1ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz04ODA9c3RhdGljIHZvaWQgdGNwX2Vycm9yX2xvZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTg4My17XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo4ODQ6XHRuZl9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgc3RhdGUsIElQUFJPVE9fVENQLCBcJiMzNDslc1wmIzM0OywgbXNnKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTg4NS19XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmM9Mzc9c3RhdGljIHZvaWQgdWRwX2Vycm9yX2xvZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jLTQwLXtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jOjQxOlx0bmZfbDRwcm90b19sb2dfaW52YWxpZChza2IsIHN0YXRlLCBJUFBST1RPX1VEUCwgXCYjMzQ7JXNcJiMzNDssIG1zZyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYy00Mi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzOTQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIGBuZl9sNHByb3RvX2xvZ19pbnZhbGlkYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhpcyBgbmZfbDRwcm90b19sb2dfaW52YWxpZGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgcGFydGljdWxhcmx5IGl0cyByb2xlIGluIGhhbmRsaW5nIGludmFsaWQgTDQgcHJvdG9jb2wgZGF0YS4gVGhpcyBpcyBjcnVjaWFsIGZvciBuZXR3b3JrIHNlY3VyaXR5IGFuZCB0cmFmZmljIGFuYWx5c2lzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uPyBXaGF0IGluZm9ybWF0aW9uIGRvZXMgaXQgbG9nPyBJcyB0aGlzIGxvZ2dpbmcgY29uZmlndXJhYmxlPyBBbmQgaG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCBvdGhlciBOZXRmaWx0ZXIgY29tcG9uZW50cywgcGFydGljdWxhcmx5IHRob3NlIGRlYWxpbmcgd2l0aCBwYWNrZXQgZmlsdGVyaW5nIGFuZCBjb25uZWN0aW9uIHRyYWNraW5nPyBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIGNvbnNpZGVyYXRpb25zIGFyb3VuZCBwZXJmb3JtYW5jZSBhbmQgcG90ZW50aWFsIERvUyB2ZWN0b3JzIOKAkyBob3cgZWZmaWNpZW50bHkgaXMgdGhpcyBoYW5kbGluZyBlcnJvcnM/IEFueSBjaGFuY2UgZm9yIHJhY2UgY29uZGl0aW9ucz8gQXJlIHRoZXJlIGFueSBrbm93biB2dWxuZXJhYmlsaXRpZXMgYXNzb2NpYXRlZCB3aXRoIGl0cyBsb2dnaW5nIG1lY2hhbmlzbXM/IExldCYjMzk7cyBnZXQgaW50byB0aGUgZGV0YWlscyBhbmQgZmlndXJlIG91dCBob3cgcm9idXN0IGl0IHRydWx5IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG4gIDQxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbiAgNDI6XHQjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4gIDQzOlx0I2luY2x1ZGUgXHUwMDNjbmV0L2luZXRfZnJhZy5oXHUwMDNlXG4gIDQ0Olx0XG4gIDQ1Olx0c3RhdGljIERFRklORV9NVVRFWChuZl9jdF9wcm90b19tdXRleCk7XG4gIDQ2Olx0XG4gIDQ3Olx0I2lmZGVmIENPTkZJR19TWVNDVExcbiAgNDg6XHRfX3ByaW50Zig0LCA1KVxuICA0OTpcdHZvaWQgbmZfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICA1MDpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXG4gIDUxOlx0XHRcdFx0ICAgIHU4IHByb3RvbnVtLFxuICA1MjpcdFx0XHRcdCAgICBjb25zdCBjaGFyICpmbXQsIC4uLilcbiAgNTM6XHR7XG4gIDU0Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzdGF0ZS1cdTAwM2VuZXQ7XG4gIDU1Olx0XHRzdHJ1Y3QgdmFfZm9ybWF0IHZhZjtcbiAgNTY6XHRcdHZhX2xpc3QgYXJncztcbiAgNTc6XHRcbiAgNTg6XHRcdGlmIChuZXQtXHUwMDNlY3Quc3lzY3RsX2xvZ19pbnZhbGlkICE9IHByb3RvbnVtIFx1MDAyNlx1MDAyNlxuICA1OTpcdFx0ICAgIG5ldC1cdTAwM2VjdC5zeXNjdGxfbG9nX2ludmFsaWQgIT0gSVBQUk9UT19SQVcpXG4gIDYwOlx0XHRcdHJldHVybjtcbiAgNjE6XHRcbiAgNjI6XHRcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XG4gIDYzOlx0XHR2YWYuZm10ID0gZm10O1xuICA2NDpcdFx0dmFmLnZhID0gXHUwMDI2YXJncztcbiAgNjU6XHRcbiAgNjY6XHRcdG5mX2xvZ19wYWNrZXQobmV0LCBzdGF0ZS1cdTAwM2VwZiwgMCwgc2tiLCBzdGF0ZS1cdTAwM2Vpbiwgc3RhdGUtXHUwMDNlb3V0LFxuICA2NzpcdFx0XHQgICAgICBOVUxMLCBcJiMzNDtuZl9jdF9wcm90b18lZDogJXBWIFwmIzM0OywgcHJvdG9udW0sIFx1MDAyNnZhZik7XG4gIDY4Olx0XHR2YV9lbmQoYXJncyk7XG4gIDY5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA4NQoJCQkJCQkJb3V0cHV0OiA4MwoJCQkJCQkJdGhvdWdodHM6IDU4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIEltcGFjdDogTG9nZ2luZyBSZWZhY3RvcmluZyoqCgpPa2F5LCBzbyBgbmZfbDRwcm90b19sb2dfaW52YWxpZGAgbm93IGNhbGxzIGBuZl9sb2dfcGFja2V0YCBkaWZmZXJlbnRseS4gSXQmIzM5O3MgYSBsb2dnaW5nIGZ1bmN0aW9uLCBwdXJlbHkuIFRoaXMgcGF0Y2gmIzM5O3MgcHVycG9zZSBpcyB0byBkZWZlciB0aGlzIGxvZ2dpbmcgdG8gYXZvaWQgaG9sZGluZyBgY3QtJmd0O2xvY2tgIGR1cmluZyB0aGUgbG9nZ2luZyBwcm9jZXNzLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRlcm1zIG9mIGxvY2sgY29udGVudGlvbiBhbmQgZGVhZGxvY2sgYXZvaWRhbmNlLCBmb3Igc3VyZSwgYnV0IGZ1bmRhbWVudGFsbHksIGl0JiMzOTtzIGp1c3QgYWJvdXQgKndoZW4qIHRoZSBsb2dnaW5nIGhhcHBlbnMuCgpJIGhhZCB0byBkb3VibGUtY2hlY2s6IGRvZXMgdGhpcyBhY3R1YWxseSBjaGFuZ2UgdGhlIHByb2dyYW0gZmxvdz8gTm9wZSwgdGhlIHJldHVybiB2YWx1ZXMgb2YgYHRjcF9pbl93aW5kb3dgIGFuZCBgbmZfdGNwX2hhbmRsZV9pbnZhbGlkYCBhcmUgdGhlIHNhbWU7IHRoZSBzdGF0ZSBjaGFuZ2VzIGFyZSBjb25zaXN0ZW50LiBUaGUgbG9nZ2luZyBpcyBqdXN0IG1vdmVkIG91dHNpZGUgdGhlIGxvY2suCgpTaG91bGQgSSBldmVuIGZ1enogdGhpcz8gSG1tLCB1bmxpa2VseS4gVW5sZXNzIHRoZXJlJiMzOTtzIGEgYnVnIGluICpob3cqIHRoZSBsb2dnaW5nIGlzIHF1ZXVlZCwgbGlrZSBhbiBvdXQtb2YtYm91bmRzIGlzc3VlLiBMZXQmIzM5O3MgbG9vayBhdCB0aGF0IHF1ZXVpbmcgY29kZS4uLgoKYGBgYwpzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyB7CgkvKiBBdCBtb3N0IG9uZSB0Y3BfaW5fd2luZG93KCkgbG9nIHBsdXMgb25lIGxvd2VyLXRpbWVvdXQgbG9nLiAqLwoJc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyBlbnRyaWVzWzJdOwoJdTggbnVtOwp9OwoKc3RhdGljIHZvaWQgbmZfdGNwX3F1ZXVlX2ludmFsaWRfbG9nKHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2dzICpsb2dzLAoJCQkJICAgICBlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGUsCgkJCQkgICAgIHUzMiB2YWx1ZSwgdTggaW5kZXgsIHU4IGRpciwKCQkJCSAgICAgdTggbGFzdF9pbmRleCkKewoJc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyAqbG9nOwoKCWlmIChsb2dzLSZndDtudW0gJmd0Oz0gQVJSQVlfU0laRShsb2dzLSZndDtlbnRyaWVzKSkKCQlyZXR1cm47CgoJbG9nID0gJmFtcDtsb2dzLSZndDtlbnRyaWVzW2xvZ3MtJmd0O251bSYjNDM7JiM0MztdOwoJbG9nLSZndDt0eXBlID0gdHlwZTsKCWxvZy0mZ3Q7dmFsdWUgPSB2YWx1ZTsKCWxvZy0mZ3Q7aW5kZXggPSBpbmRleDsKCWxvZy0mZ3Q7ZGlyID0gZGlyOwoJbG9nLSZndDtsYXN0X2luZGV4ID0gbGFzdF9pbmRleDsKfQpgYGAKClllcCwgc2ltcGxlIGFuZCBzYWZlLiBgQVJSQVlfU0laRWAgY2hlY2ssIGEgc21hbGwgYXJyYXkuIE5vIG9idmlvdXMgcHJvYmxlbXMgdGhlcmUuCgpUaGUgcHJvbXB0IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBoYXMgJiMzNDtQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4mIzM0OyBUaGlzIGlzIGEgcmVmYWN0b3Jpbmcgb2YgKmxvZ2dpbmcqLiBJdCBkZWZlcnMgdGhlIGxvZ2dpbmcsIGJ1dCB0aGUgbG9nZ2luZyBpdHNlbGYgaXMgc3RpbGwgdGhlIHNhbWUuIFNvIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgYmVjYXVzZSBpdCAqaXMqIGEgbG9nZ2luZyBjaGFuZ2UuCgpOb3csIGhvbGQgb24uIElzIGl0ICpwb3NzaWJsZSogdGhpcyBjaGFuZ2UgZml4ZXMgYW4gdW5kZXJseWluZyBkZWFkbG9jayBpc3N1ZSBieSBtb3ZpbmcgdGhlIGxvZ2dpbmc/IFllcywgcG90ZW50aWFsbHkuIEJ1dCB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYWlkIHRvIHJldHVybiBgZmFsc2VgIGZvciAmIzM0O3B1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMmIzM0Oy4gSXMgbW92aW5nIGxvZ2dpbmcgb3V0c2lkZSBhIHNwaW5sb2NrIHB1cmVseSBkZWNvcmF0aXZlPyBJdCBkb2VzbiYjMzk7dCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIHByb3RvY29sIGV4ZWN1dGlvbi4gSSYjMzk7bSBnb2luZyB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbG9nZ2luZyBvZiBpbnZhbGlkIFRDUCBwYWNrZXRzIGluIG5ldGZpbHRlciBjb25udHJhY2sgdG8gZGVmZXIgdGhlIGxvZ2dpbmcgdW50aWwgYWZ0ZXIgdGhlIGNvbm50cmFjayBzcGlubG9jayBpcyByZWxlYXNlZC4gVGhpcyBpcyBhIHB1cmVseSBkZWNvcmF0aXZlL2xvZ2dpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUgbmV0d29yayBzdGFjay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbG9nZ2luZyBvZiBpbnZhbGlkIFRDUCBwYWNrZXRzIGluIG5ldGZpbHRlciBjb25udHJhY2sgdG8gZGVmZXIgdGhlIGxvZ2dpbmcgdW50aWwgYWZ0ZXIgdGhlIGNvbm50cmFjayBzcGlubG9jayBpcyByZWxlYXNlZC4gVGhpcyBpcyBhIHB1cmVseSBkZWNvcmF0aXZlL2xvZ2dpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUgbmV0d29yayBzdGFjay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTo0NzowNy41Mzk3NzMzNTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTE5MjM3NjkxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsb2dnaW5nIG9mIGludmFsaWQgVENQIHBhY2tldHMgaW4gbmV0ZmlsdGVyIGNvbm50cmFjayB0byBkZWZlciB0aGUgbG9nZ2luZyB1bnRpbCBhZnRlciB0aGUgY29ubnRyYWNrIHNwaW5sb2NrIGlzIHJlbGVhc2VkLiBUaGlzIGlzIGEgcHVyZWx5IGRlY29yYXRpdmUvbG9nZ2luZyBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBuZXR3b3JrIHN0YWNrLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6NDc6MDcuNTM5NzgxNTI0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE4MjI1NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiM2QzN2VkYTVkNDg5ZWE0ZmQ4ZjFiNTViYmZjMjJkYzFjOWQxOGIyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDE5OjQ3OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcXG5pbmRleCBjZWVlZDNkN2ZlNTIwLi4wMGYwMTdkOTk5N2ZhIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcXG5AQCAtNDgwLDM3ICs0ODAsMTI1IEBAIHN0YXRpYyB2b2lkIHRjcF9pbml0X3NlbmRlcihzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsXFxuIFxcdH1cXG4gfVxcbiBcXG4tX19wcmludGYoNiwgNylcXG4tc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvbiBuZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJldCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqZm10LCAuLi4pXFxuK2VudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUge1xcbitcXHRORl9UQ1BfTE9HX05PTkUsXFxuK1xcdE5GX1RDUF9MT0dfT1ZFUlNIT1QsXFxuK1xcdE5GX1RDUF9MT0dfU0VRX09WRVIsXFxuK1xcdE5GX1RDUF9MT0dfQUNLX09WRVIsXFxuK1xcdE5GX1RDUF9MT0dfU0VRX1VOREVSLFxcbitcXHRORl9UQ1BfTE9HX0FDS19VTkRFUixcXG4rXFx0TkZfVENQX0xPR19MT1dFUl9USU1FT1VULFxcbit9O1xcbitcXG4rc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyB7XFxuK1xcdGVudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUgdHlwZTtcXG4rXFx0dTMyIHZhbHVlO1xcbitcXHR1OCBpbmRleDtcXG4rXFx0dTggZGlyO1xcbitcXHR1OCBsYXN0X2luZGV4O1xcbit9O1xcbitcXG4rc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3Mge1xcbitcXHQvKiBBdCBtb3N0IG9uZSB0Y3BfaW5fd2luZG93KCkgbG9nIHBsdXMgb25lIGxvd2VyLXRpbWVvdXQgbG9nLiAqL1xcbitcXHRzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nIGVudHJpZXNbMl07XFxuK1xcdHU4IG51bTtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIG5mX3RjcF9xdWV1ZV9pbnZhbGlkX2xvZyhzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncyxcXG4rXFx0XFx0XFx0XFx0ICAgICBlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyIHZhbHVlLCB1OCBpbmRleCwgdTggZGlyLFxcbitcXHRcXHRcXHRcXHQgICAgIHU4IGxhc3RfaW5kZXgpXFxuK3tcXG4rXFx0c3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyAqbG9nO1xcbitcXG4rXFx0aWYgKGxvZ3MtXFx1MDAzZW51bSBcXHUwMDNlPSBBUlJBWV9TSVpFKGxvZ3MtXFx1MDAzZWVudHJpZXMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRsb2cgPSBcXHUwMDI2bG9ncy1cXHUwMDNlZW50cmllc1tsb2dzLVxcdTAwM2VudW0rK107XFxuK1xcdGxvZy1cXHUwMDNldHlwZSA9IHR5cGU7XFxuK1xcdGxvZy1cXHUwMDNldmFsdWUgPSB2YWx1ZTtcXG4rXFx0bG9nLVxcdTAwM2VpbmRleCA9IGluZGV4O1xcbitcXHRsb2ctXFx1MDAzZWRpciA9IGRpcjtcXG4rXFx0bG9nLVxcdTAwM2VsYXN0X2luZGV4ID0gbGFzdF9pbmRleDtcXG4rfVxcbitcXG4rc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvblxcbituZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbitcXHRcXHQgICBjb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsXFxuK1xcdFxcdCAgIHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2dzICpsb2dzLFxcbitcXHRcXHQgICBlbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmV0LFxcbitcXHRcXHQgICBlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGUsXFxuK1xcdFxcdCAgIHUzMiB2YWx1ZSlcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgbmZfdGNwX25ldCAqdG4gPSBuZl90Y3BfcGVybmV0KG5mX2N0X25ldChjdCkpO1xcbi1cXHRzdHJ1Y3QgdmFfZm9ybWF0IHZhZjtcXG4tXFx0dmFfbGlzdCBhcmdzO1xcbiBcXHRib29sIGJlX2xpYmVyYWw7XFxuIFxcbiBcXHRiZV9saWJlcmFsID0gc2VuZGVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX0NUX1RDUF9GTEFHX0JFX0xJQkVSQUwgfHwgdG4tXFx1MDAzZXRjcF9iZV9saWJlcmFsO1xcbiBcXHRpZiAoYmVfbGliZXJhbClcXG4gXFx0XFx0cmV0dXJuIE5GQ1RfVENQX0FDQ0VQVDtcXG4gXFxuLVxcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XFxuLVxcdHZhZi5mbXQgPSBmbXQ7XFxuLVxcdHZhZi52YSA9IFxcdTAwMjZhcmdzO1xcbi1cXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcXFwiJXBWXFxcIiwgXFx1MDAyNnZhZik7XFxuLVxcdHZhX2VuZChhcmdzKTtcXG4tXFxuK1xcdG5mX3RjcF9xdWV1ZV9pbnZhbGlkX2xvZyhsb2dzLCB0eXBlLCB2YWx1ZSwgMCwgMCwgMCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG5mX3RjcF9lbWl0X2ludmFsaWRfbG9nKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuK1xcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXFxuK1xcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nICpsb2cpXFxuK3tcXG4rXFx0c3dpdGNoIChsb2ctXFx1MDAzZXR5cGUpIHtcXG4rXFx0Y2FzZSBORl9UQ1BfTE9HX09WRVJTSE9UOlxcbitcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbitcXHRcXHRcXHRcXHRcXHQgIFxcXCIldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWRcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgIGxvZy1cXHUwMDNldmFsdWUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBORl9UQ1BfTE9HX1NFUV9PVkVSOlxcbitcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbitcXHRcXHRcXHRcXHRcXHQgIFxcXCJTRVEgaXMgb3ZlciB1cHBlciBib3VuZCAldSAob3ZlciB0aGUgd2luZG93IG9mIHRoZSByZWNlaXZlcilcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgIGxvZy1cXHUwMDNldmFsdWUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBORl9UQ1BfTE9HX0FDS19PVkVSOlxcbitcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbitcXHRcXHRcXHRcXHRcXHQgIFxcXCJBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICBsb2ctXFx1MDAzZXZhbHVlKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTkZfVENQX0xPR19TRVFfVU5ERVI6XFxuK1xcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFxcIlNFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICBsb2ctXFx1MDAzZXZhbHVlKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTkZfVENQX0xPR19BQ0tfVU5ERVI6XFxuK1xcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFxcImlnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZClcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgIGxvZy1cXHUwMDNldmFsdWUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBORl9UQ1BfTE9HX0xPV0VSX1RJTUVPVVQ6XFxuK1xcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFxcInBhY2tldCAoaW5kZXggJWQsIGRpciAlZCkgcmVzcG9uc2UgZm9yIGluZGV4ICVkIGxvd2VyIHRpbWVvdXQgdG8gJXVcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgIGxvZy1cXHUwMDNlaW5kZXgsIGxvZy1cXHUwMDNlZGlyLFxcbitcXHRcXHRcXHRcXHRcXHQgIGxvZy1cXHUwMDNlbGFzdF9pbmRleCwgbG9nLVxcdTAwM2V2YWx1ZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5GX1RDUF9MT0dfTk9ORTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbmZfdGNwX2VtaXRfaW52YWxpZF9sb2dzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncylcXG4re1xcbitcXHR1OCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxvZ3MtXFx1MDAzZW51bTsgaSsrKVxcbitcXHRcXHRuZl90Y3BfZW1pdF9pbnZhbGlkX2xvZyhza2IsIGN0LCBzdGF0ZSwgXFx1MDAyNmxvZ3MtXFx1MDAzZWVudHJpZXNbaV0pO1xcbit9XFxuK1xcbiBzdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uXFxuIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbiBcXHQgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdCAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3BoLFxcbi1cXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqaG9va19zdGF0ZSlcXG4rXFx0ICAgICAgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3MgKmxvZ3MpXFxuIHtcXG4gXFx0c3RydWN0IGlwX2N0X3RjcCAqc3RhdGUgPSBcXHUwMDI2Y3QtXFx1MDAzZXByb3RvLnRjcDtcXG4gXFx0c3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyID0gXFx1MDAyNnN0YXRlLVxcdTAwM2VzZWVuW2Rpcl07XFxuQEAgLTY0MCwzMSArNzI4LDI5IEBAIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbiBcXHRcXHRcXHRzZW5kZXItXFx1MDAzZXRkX2VuZCA9IGVuZDtcXG4gXFx0XFx0XFx0c2VuZGVyLVxcdTAwM2VmbGFncyB8PSBJUF9DVF9UQ1BfRkxBR19EQVRBX1VOQUNLTk9XTEVER0VEO1xcbiBcXG4tXFx0XFx0XFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBcXFwiJXUgYnl0ZXMgbW9yZSB0aGFuIGV4cGVjdGVkXFxcIiwgb3ZlcnNob3QpO1xcbitcXHRcXHRcXHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZ3MsIE5GQ1RfVENQX0lHTk9SRSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBORl9UQ1BfTE9HX09WRVJTSE9ULCBvdmVyc2hvdCk7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JTlZBTElELFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJTRVEgaXMgb3ZlciB1cHBlciBib3VuZCAldSAob3ZlciB0aGUgd2luZG93IG9mIHRoZSByZWNlaXZlcilcXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHQgIHNlbmRlci1cXHUwMDNldGRfbWF4ZW5kICsgMSk7XFxuK1xcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoY3QsIHNlbmRlciwgbG9ncywgTkZDVF9UQ1BfSU5WQUxJRCxcXG4rXFx0XFx0XFx0XFx0ICBORl9UQ1BfTE9HX1NFUV9PVkVSLCBzZW5kZXItXFx1MDAzZXRkX21heGVuZCArIDEpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIWJlZm9yZShzYWNrLCByZWNlaXZlci1cXHUwMDNldGRfZW5kICsgMSkpXFxuLVxcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JTlZBTElELFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICByZWNlaXZlci1cXHUwMDNldGRfZW5kICsgMSk7XFxuK1xcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoY3QsIHNlbmRlciwgbG9ncywgTkZDVF9UQ1BfSU5WQUxJRCxcXG4rXFx0XFx0XFx0XFx0ICBORl9UQ1BfTE9HX0FDS19PVkVSLCByZWNlaXZlci1cXHUwMDNldGRfZW5kICsgMSk7XFxuIFxcbiBcXHQvKiBJcyB0aGUgZW5kaW5nIHNlcXVlbmNlIGluIHRoZSByZWNlaXZlIHdpbmRvdyAoaWYgYXZhaWxhYmxlKT8gKi9cXG4gXFx0aW5fcmVjdl93aW4gPSAhcmVjZWl2ZXItXFx1MDAzZXRkX21heHdpbiB8fFxcbiBcXHRcXHQgICAgICBhZnRlcihlbmQsIHNlbmRlci1cXHUwMDNldGRfZW5kIC0gcmVjZWl2ZXItXFx1MDAzZXRkX21heHdpbiAtIDEpO1xcbiBcXHRpZiAoIWluX3JlY3Zfd2luKVxcbi1cXHRcXHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJTRVEgaXMgdW5kZXIgbG93ZXIgYm91bmQgJXUgKGFscmVhZHkgQUNLZWQgZGF0YSByZXRyYW5zbWl0dGVkKVxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgc2VuZGVyLVxcdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cXHUwMDNldGRfbWF4d2luIC0gMSk7XFxuK1xcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoY3QsIHNlbmRlciwgbG9ncywgTkZDVF9UQ1BfSUdOT1JFLFxcbitcXHRcXHRcXHRcXHQgIE5GX1RDUF9MT0dfU0VRX1VOREVSLFxcbitcXHRcXHRcXHRcXHQgIHNlbmRlci1cXHUwMDNldGRfZW5kIC0gcmVjZWl2ZXItXFx1MDAzZXRkX21heHdpbiAtIDEpO1xcbiBcXHRpZiAoIWFmdGVyKHNhY2ssIHJlY2VpdmVyLVxcdTAwM2V0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpKVxcbi1cXHRcXHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJpZ25vcmVkIEFDSyB1bmRlciBsb3dlciBib3VuZCAldSAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQpXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICByZWNlaXZlci1cXHUwMDNldGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKTtcXG4rXFx0XFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChjdCwgc2VuZGVyLCBsb2dzLCBORkNUX1RDUF9JR05PUkUsXFxuK1xcdFxcdFxcdFxcdCAgTkZfVENQX0xPR19BQ0tfVU5ERVIsXFxuK1xcdFxcdFxcdFxcdCAgcmVjZWl2ZXItXFx1MDAzZXRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSk7XFxuIFxcbiBcXHQvKiBUYWtlIGludG8gYWNjb3VudCB3aW5kb3cgc2NhbGluZyAoUkZDIDEzMjMpLiAqL1xcbiBcXHRpZiAoIXRjcGgtXFx1MDAzZXN5bilcXG5AQCAtNzIwLDEwICs4MDYsOSBAQCB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLVxcdFxcdFxcdFxcdFxcdCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbi1cXHRcXHRcXHRcXHRcXHQgaW50IGluZGV4LFxcbi1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpob29rX3N0YXRlKVxcbitcXHRcXHRcXHRcXHQgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG4rXFx0XFx0XFx0XFx0IGludCBpbmRleCxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2dzICpsb2dzKVxcbiB7XFxuIFxcdGNvbnN0IHVuc2lnbmVkIGludCAqdGltZW91dHM7XFxuIFxcdGNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0bjtcXG5AQCAtNzY0LDkgKzg0OSwxMCBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFxuIFxcdFxcdHRpbWVvdXQgPSBSRUFEX09OQ0UodGltZW91dHNbVENQX0NPTk5UUkFDS19VTkFDS10pO1xcbiBcXHRcXHRpZiAoZXhwaXJlcyBcXHUwMDNlIHRpbWVvdXQpIHtcXG4tXFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJwYWNrZXQgKGluZGV4ICVkLCBkaXIgJWQpIHJlc3BvbnNlIGZvciBpbmRleCAlZCBsb3dlciB0aW1lb3V0IHRvICV1XFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICBpbmRleCwgZGlyLCBjdC1cXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXgsIHRpbWVvdXQpO1xcbitcXHRcXHRcXHRuZl90Y3BfcXVldWVfaW52YWxpZF9sb2cobG9ncyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IE5GX1RDUF9MT0dfTE9XRVJfVElNRU9VVCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHRpbWVvdXQsIGluZGV4LCBkaXIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBjdC1cXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXgpO1xcbiBcXG4gXFx0XFx0XFx0V1JJVEVfT05DRShjdC1cXHUwMDNldGltZW91dCwgdGltZW91dCArIG5mY3RfdGltZV9zdGFtcCk7XFxuIFxcdFxcdH1cXG5AQCAtOTcxLDYgKzEwNTcsNyBAQCBpbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbiBcXHRlbnVtIHRjcF9jb25udHJhY2sgbmV3X3N0YXRlLCBvbGRfc3RhdGU7XFxuIFxcdHVuc2lnbmVkIGludCBpbmRleCwgKnRpbWVvdXRzO1xcbiBcXHRlbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmVzO1xcbitcXHRzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyBsb2dzID0ge307XFxuIFxcdGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7XFxuIFxcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoO1xcbiBcXHRzdHJ1Y3QgdGNwaGRyIF90Y3BoO1xcbkBAIC0xMjUyLDE0ICsxMzM5LDE2IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcdH1cXG4gXFxuIFxcdHJlcyA9IHRjcF9pbl93aW5kb3coY3QsIGRpciwgaW5kZXgsXFxuLVxcdFxcdFxcdCAgICBza2IsIGRhdGFvZmYsIHRoLCBzdGF0ZSk7XFxuK1xcdFxcdFxcdCAgICBza2IsIGRhdGFvZmYsIHRoLCBcXHUwMDI2bG9ncyk7XFxuIFxcdHN3aXRjaCAocmVzKSB7XFxuIFxcdGNhc2UgTkZDVF9UQ1BfSUdOT1JFOlxcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRuZl90Y3BfZW1pdF9pbnZhbGlkX2xvZ3Moc2tiLCBjdCwgc3RhdGUsIFxcdTAwMjZsb2dzKTtcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFx0Y2FzZSBORkNUX1RDUF9JTlZBTElEOlxcbi1cXHRcXHRuZl90Y3BfaGFuZGxlX2ludmFsaWQoY3QsIGRpciwgaW5kZXgsIHNrYiwgc3RhdGUpO1xcbitcXHRcXHRuZl90Y3BfaGFuZGxlX2ludmFsaWQoY3QsIGRpciwgaW5kZXgsIFxcdTAwMjZsb2dzKTtcXG4gXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmN0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0bmZfdGNwX2VtaXRfaW52YWxpZF9sb2dzKHNrYiwgY3QsIHN0YXRlLCBcXHUwMDI2bG9ncyk7XFxuIFxcdFxcdHJldHVybiAtTkZfQUNDRVBUO1xcbiBcXHRjYXNlIE5GQ1RfVENQX0FDQ0VQVDpcXG4gXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjQ3OjA3Ljk2MjMxNTcyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQwNzY5ODI1NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxvZ2dpbmcgb2YgaW52YWxpZCBUQ1AgcGFja2V0cyBpbiBuZXRmaWx0ZXIgY29ubnRyYWNrIHRvIGRlZmVyIHRoZSBsb2dnaW5nIHVudGlsIGFmdGVyIHRoZSBjb25udHJhY2sgc3BpbmxvY2sgaXMgcmVsZWFzZWQuIFRoaXMgaXMgYSBwdXJlbHkgZGVjb3JhdGl2ZS9sb2dnaW5nIGNoYW5nZSB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIG5ldHdvcmsgc3RhY2suXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiM2QzN2VkYTVkNDg5ZWE0ZmQ4ZjFiNTViYmZjMjJkYzFjOWQxOGIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTk6NDc6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG5pbmRleCBjZWVlZDNkN2ZlNTIwLi4wMGYwMTdkOTk5N2ZhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG5AQCAtNDgwLDM3ICs0ODAsMTI1IEBAIHN0YXRpYyB2b2lkIHRjcF9pbml0X3NlbmRlcihzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsXG4gXHR9XG4gfVxuIFxuLV9fcHJpbnRmKDYsIDcpXG4tc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvbiBuZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlLFxuLVx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcbi1cdFx0XHRcdFx0XHRlbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmV0LFxuLVx0XHRcdFx0XHRcdGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuK2VudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUge1xuK1x0TkZfVENQX0xPR19OT05FLFxuK1x0TkZfVENQX0xPR19PVkVSU0hPVCxcbitcdE5GX1RDUF9MT0dfU0VRX09WRVIsXG4rXHRORl9UQ1BfTE9HX0FDS19PVkVSLFxuK1x0TkZfVENQX0xPR19TRVFfVU5ERVIsXG4rXHRORl9UQ1BfTE9HX0FDS19VTkRFUixcbitcdE5GX1RDUF9MT0dfTE9XRVJfVElNRU9VVCxcbit9O1xuK1xuK3N0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cge1xuK1x0ZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB0eXBlO1xuK1x0dTMyIHZhbHVlO1xuK1x0dTggaW5kZXg7XG4rXHR1OCBkaXI7XG4rXHR1OCBsYXN0X2luZGV4O1xuK307XG4rXG4rc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3Mge1xuK1x0LyogQXQgbW9zdCBvbmUgdGNwX2luX3dpbmRvdygpIGxvZyBwbHVzIG9uZSBsb3dlci10aW1lb3V0IGxvZy4gKi9cbitcdHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgZW50cmllc1syXTtcbitcdHU4IG51bTtcbit9O1xuK1xuK3N0YXRpYyB2b2lkIG5mX3RjcF9xdWV1ZV9pbnZhbGlkX2xvZyhzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncyxcbitcdFx0XHRcdCAgICAgZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB0eXBlLFxuK1x0XHRcdFx0ICAgICB1MzIgdmFsdWUsIHU4IGluZGV4LCB1OCBkaXIsXG4rXHRcdFx0XHQgICAgIHU4IGxhc3RfaW5kZXgpXG4re1xuK1x0c3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyAqbG9nO1xuK1xuK1x0aWYgKGxvZ3MtXHUwMDNlbnVtIFx1MDAzZT0gQVJSQVlfU0laRShsb2dzLVx1MDAzZWVudHJpZXMpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRsb2cgPSBcdTAwMjZsb2dzLVx1MDAzZWVudHJpZXNbbG9ncy1cdTAwM2VudW0rK107XG4rXHRsb2ctXHUwMDNldHlwZSA9IHR5cGU7XG4rXHRsb2ctXHUwMDNldmFsdWUgPSB2YWx1ZTtcbitcdGxvZy1cdTAwM2VpbmRleCA9IGluZGV4O1xuK1x0bG9nLVx1MDAzZWRpciA9IGRpcjtcbitcdGxvZy1cdTAwM2VsYXN0X2luZGV4ID0gbGFzdF9pbmRleDtcbit9XG4rXG4rc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvblxuK25mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4rXHRcdCAgIGNvbnN0IHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcbitcdFx0ICAgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3MgKmxvZ3MsXG4rXHRcdCAgIGVudW0gbmZfY3RfdGNwX2FjdGlvbiByZXQsXG4rXHRcdCAgIGVudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUgdHlwZSxcbitcdFx0ICAgdTMyIHZhbHVlKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0biA9IG5mX3RjcF9wZXJuZXQobmZfY3RfbmV0KGN0KSk7XG4tXHRzdHJ1Y3QgdmFfZm9ybWF0IHZhZjtcbi1cdHZhX2xpc3QgYXJncztcbiBcdGJvb2wgYmVfbGliZXJhbDtcbiBcbiBcdGJlX2xpYmVyYWwgPSBzZW5kZXItXHUwMDNlZmxhZ3MgXHUwMDI2IElQX0NUX1RDUF9GTEFHX0JFX0xJQkVSQUwgfHwgdG4tXHUwMDNldGNwX2JlX2xpYmVyYWw7XG4gXHRpZiAoYmVfbGliZXJhbClcbiBcdFx0cmV0dXJuIE5GQ1RfVENQX0FDQ0VQVDtcbiBcbi1cdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XG4tXHR2YWYuZm10ID0gZm10O1xuLVx0dmFmLnZhID0gXHUwMDI2YXJncztcbi1cdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFwiJXBWXCIsIFx1MDAyNnZhZik7XG4tXHR2YV9lbmQoYXJncyk7XG4tXG4rXHRuZl90Y3BfcXVldWVfaW52YWxpZF9sb2cobG9ncywgdHlwZSwgdmFsdWUsIDAsIDAsIDApO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbmZfdGNwX2VtaXRfaW52YWxpZF9sb2coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4rXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlLFxuK1x0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZylcbit7XG4rXHRzd2l0Y2ggKGxvZy1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIE5GX1RDUF9MT0dfT1ZFUlNIT1Q6XG4rXHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4rXHRcdFx0XHRcdCAgXCIldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWRcIixcbitcdFx0XHRcdFx0ICBsb2ctXHUwMDNldmFsdWUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTkZfVENQX0xPR19TRVFfT1ZFUjpcbitcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbitcdFx0XHRcdFx0ICBcIlNFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVwiLFxuK1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBORl9UQ1BfTE9HX0FDS19PVkVSOlxuK1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuK1x0XHRcdFx0XHQgIFwiQUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KVwiLFxuK1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBORl9UQ1BfTE9HX1NFUV9VTkRFUjpcbitcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbitcdFx0XHRcdFx0ICBcIlNFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpXCIsXG4rXHRcdFx0XHRcdCAgbG9nLVx1MDAzZXZhbHVlKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE5GX1RDUF9MT0dfQUNLX1VOREVSOlxuK1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuK1x0XHRcdFx0XHQgIFwiaWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKVwiLFxuK1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBORl9UQ1BfTE9HX0xPV0VSX1RJTUVPVVQ6XG4rXHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4rXHRcdFx0XHRcdCAgXCJwYWNrZXQgKGluZGV4ICVkLCBkaXIgJWQpIHJlc3BvbnNlIGZvciBpbmRleCAlZCBsb3dlciB0aW1lb3V0IHRvICV1XCIsXG4rXHRcdFx0XHRcdCAgbG9nLVx1MDAzZWluZGV4LCBsb2ctXHUwMDNlZGlyLFxuK1x0XHRcdFx0XHQgIGxvZy1cdTAwM2VsYXN0X2luZGV4LCBsb2ctXHUwMDNldmFsdWUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTkZfVENQX0xPR19OT05FOlxuK1x0XHRicmVhaztcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgbmZfdGNwX2VtaXRfaW52YWxpZF9sb2dzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlLFxuK1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncylcbit7XG4rXHR1OCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbG9ncy1cdTAwM2VudW07IGkrKylcbitcdFx0bmZfdGNwX2VtaXRfaW52YWxpZF9sb2coc2tiLCBjdCwgc3RhdGUsIFx1MDAyNmxvZ3MtXHUwMDNlZW50cmllc1tpXSk7XG4rfVxuK1xuIHN0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb25cbiB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbiBcdCAgICAgIHVuc2lnbmVkIGludCBpbmRleCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3BoLFxuLVx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpXG4rXHQgICAgICBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncylcbiB7XG4gXHRzdHJ1Y3QgaXBfY3RfdGNwICpzdGF0ZSA9IFx1MDAyNmN0LVx1MDAzZXByb3RvLnRjcDtcbiBcdHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlciA9IFx1MDAyNnN0YXRlLVx1MDAzZXNlZW5bZGlyXTtcbkBAIC02NDAsMzEgKzcyOCwyOSBAQCB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbiBcdFx0XHRzZW5kZXItXHUwMDNldGRfZW5kID0gZW5kO1xuIFx0XHRcdHNlbmRlci1cdTAwM2VmbGFncyB8PSBJUF9DVF9UQ1BfRkxBR19EQVRBX1VOQUNLTk9XTEVER0VEO1xuIFxuLVx0XHRcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsXG4tXHRcdFx0XHRcdFx0ICBcIiV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZFwiLCBvdmVyc2hvdCk7XG4rXHRcdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChjdCwgc2VuZGVyLCBsb2dzLCBORkNUX1RDUF9JR05PUkUsXG4rXHRcdFx0XHRcdCAgTkZfVENQX0xPR19PVkVSU0hPVCwgb3ZlcnNob3QpO1xuIFx0XHR9XG4gXG4tXHRcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JTlZBTElELFxuLVx0XHRcdFx0XHQgIFwiU0VRIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKG92ZXIgdGhlIHdpbmRvdyBvZiB0aGUgcmVjZWl2ZXIpXCIsXG4tXHRcdFx0XHRcdCAgc2VuZGVyLVx1MDAzZXRkX21heGVuZCArIDEpO1xuK1x0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZ3MsIE5GQ1RfVENQX0lOVkFMSUQsXG4rXHRcdFx0XHQgIE5GX1RDUF9MT0dfU0VRX09WRVIsIHNlbmRlci1cdTAwM2V0ZF9tYXhlbmQgKyAxKTtcbiBcdH1cbiBcbiBcdGlmICghYmVmb3JlKHNhY2ssIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCArIDEpKVxuLVx0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSU5WQUxJRCxcbi1cdFx0XHRcdFx0ICBcIkFDSyBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChBQ0tlZCBkYXRhIG5vdCBzZWVuIHlldClcIixcbi1cdFx0XHRcdFx0ICByZWNlaXZlci1cdTAwM2V0ZF9lbmQgKyAxKTtcbitcdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChjdCwgc2VuZGVyLCBsb2dzLCBORkNUX1RDUF9JTlZBTElELFxuK1x0XHRcdFx0ICBORl9UQ1BfTE9HX0FDS19PVkVSLCByZWNlaXZlci1cdTAwM2V0ZF9lbmQgKyAxKTtcbiBcbiBcdC8qIElzIHRoZSBlbmRpbmcgc2VxdWVuY2UgaW4gdGhlIHJlY2VpdmUgd2luZG93IChpZiBhdmFpbGFibGUpPyAqL1xuIFx0aW5fcmVjdl93aW4gPSAhcmVjZWl2ZXItXHUwMDNldGRfbWF4d2luIHx8XG4gXHRcdCAgICAgIGFmdGVyKGVuZCwgc2VuZGVyLVx1MDAzZXRkX2VuZCAtIHJlY2VpdmVyLVx1MDAzZXRkX21heHdpbiAtIDEpO1xuIFx0aWYgKCFpbl9yZWN2X3dpbilcbi1cdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSxcbi1cdFx0XHRcdFx0ICBcIlNFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpXCIsXG4tXHRcdFx0XHRcdCAgc2VuZGVyLVx1MDAzZXRkX2VuZCAtIHJlY2VpdmVyLVx1MDAzZXRkX21heHdpbiAtIDEpO1xuK1x0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZ3MsIE5GQ1RfVENQX0lHTk9SRSxcbitcdFx0XHRcdCAgTkZfVENQX0xPR19TRVFfVU5ERVIsXG4rXHRcdFx0XHQgIHNlbmRlci1cdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cdTAwM2V0ZF9tYXh3aW4gLSAxKTtcbiBcdGlmICghYWZ0ZXIoc2FjaywgcmVjZWl2ZXItXHUwMDNldGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKSlcbi1cdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSxcbi1cdFx0XHRcdFx0ICBcImlnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZClcIixcbi1cdFx0XHRcdFx0ICByZWNlaXZlci1cdTAwM2V0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpO1xuK1x0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZ3MsIE5GQ1RfVENQX0lHTk9SRSxcbitcdFx0XHRcdCAgTkZfVENQX0xPR19BQ0tfVU5ERVIsXG4rXHRcdFx0XHQgIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSk7XG4gXG4gXHQvKiBUYWtlIGludG8gYWNjb3VudCB3aW5kb3cgc2NhbGluZyAoUkZDIDEzMjMpLiAqL1xuIFx0aWYgKCF0Y3BoLVx1MDAzZXN5bilcbkBAIC03MjAsMTAgKzgwNiw5IEBAIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcbi1cdFx0XHRcdFx0IGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4tXHRcdFx0XHRcdCBpbnQgaW5kZXgsXG4tXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpXG4rXHRcdFx0XHQgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbitcdFx0XHRcdCBpbnQgaW5kZXgsXG4rXHRcdFx0XHQgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3MgKmxvZ3MpXG4ge1xuIFx0Y29uc3QgdW5zaWduZWQgaW50ICp0aW1lb3V0cztcbiBcdGNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0bjtcbkBAIC03NjQsOSArODQ5LDEwIEBAIHN0YXRpYyB2b2lkIF9fY29sZCBuZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFxuIFx0XHR0aW1lb3V0ID0gUkVBRF9PTkNFKHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfVU5BQ0tdKTtcbiBcdFx0aWYgKGV4cGlyZXMgXHUwMDNlIHRpbWVvdXQpIHtcbi1cdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsXG4tXHRcdFx0XHRcdCAgXCJwYWNrZXQgKGluZGV4ICVkLCBkaXIgJWQpIHJlc3BvbnNlIGZvciBpbmRleCAlZCBsb3dlciB0aW1lb3V0IHRvICV1XCIsXG4tXHRcdFx0XHRcdCAgaW5kZXgsIGRpciwgY3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXgsIHRpbWVvdXQpO1xuK1x0XHRcdG5mX3RjcF9xdWV1ZV9pbnZhbGlkX2xvZyhsb2dzLFxuK1x0XHRcdFx0XHRcdCBORl9UQ1BfTE9HX0xPV0VSX1RJTUVPVVQsXG4rXHRcdFx0XHRcdFx0IHRpbWVvdXQsIGluZGV4LCBkaXIsXG4rXHRcdFx0XHRcdFx0IGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2luZGV4KTtcbiBcbiBcdFx0XHRXUklURV9PTkNFKGN0LVx1MDAzZXRpbWVvdXQsIHRpbWVvdXQgKyBuZmN0X3RpbWVfc3RhbXApO1xuIFx0XHR9XG5AQCAtOTcxLDYgKzEwNTcsNyBAQCBpbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0ZW51bSB0Y3BfY29ubnRyYWNrIG5ld19zdGF0ZSwgb2xkX3N0YXRlO1xuIFx0dW5zaWduZWQgaW50IGluZGV4LCAqdGltZW91dHM7XG4gXHRlbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmVzO1xuK1x0c3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3MgbG9ncyA9IHt9O1xuIFx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjtcbiBcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoO1xuIFx0c3RydWN0IHRjcGhkciBfdGNwaDtcbkBAIC0xMjUyLDE0ICsxMzM5LDE2IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHR9XG4gXG4gXHRyZXMgPSB0Y3BfaW5fd2luZG93KGN0LCBkaXIsIGluZGV4LFxuLVx0XHRcdCAgICBza2IsIGRhdGFvZmYsIHRoLCBzdGF0ZSk7XG4rXHRcdFx0ICAgIHNrYiwgZGF0YW9mZiwgdGgsIFx1MDAyNmxvZ3MpO1xuIFx0c3dpdGNoIChyZXMpIHtcbiBcdGNhc2UgTkZDVF9UQ1BfSUdOT1JFOlxuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbitcdFx0bmZfdGNwX2VtaXRfaW52YWxpZF9sb2dzKHNrYiwgY3QsIHN0YXRlLCBcdTAwMjZsb2dzKTtcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdGNhc2UgTkZDVF9UQ1BfSU5WQUxJRDpcbi1cdFx0bmZfdGNwX2hhbmRsZV9pbnZhbGlkKGN0LCBkaXIsIGluZGV4LCBza2IsIHN0YXRlKTtcbitcdFx0bmZfdGNwX2hhbmRsZV9pbnZhbGlkKGN0LCBkaXIsIGluZGV4LCBcdTAwMjZsb2dzKTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4rXHRcdG5mX3RjcF9lbWl0X2ludmFsaWRfbG9ncyhza2IsIGN0LCBzdGF0ZSwgXHUwMDI2bG9ncyk7XG4gXHRcdHJldHVybiAtTkZfQUNDRVBUO1xuIFx0Y2FzZSBORkNUX1RDUF9BQ0NFUFQ6XG4gXHRcdGJyZWFrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6NDc6MDcuOTYyMzE3MDA3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1NjgzMDE4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgQ29ubnRyYWNrIExvZ2dpbmcgUmVmYWN0b3IqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFwcGxpZWQgdG8gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jYC4gSXQncyByZWZhY3RvcmluZyBob3cgaW52YWxpZCBUQ1AgcGFja2V0cyBhcmUgbG9nZ2VkIHdpdGhpbiBuZXRmaWx0ZXIgY29ubnRyYWNrLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhleSdyZSBpbnRyb2R1Y2luZyB0aGVzZSBuZXcgc3RydWN0dXJlczogYGVudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGVgLCBgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ2AsIGFuZCBgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3NgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIG1vdmluZyBhd2F5IGZyb20gZGlyZWN0IGNhbGxzIHRvIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCBhbmQgaW5zdGVhZCBxdWV1aW5nIHRoZXNlIGxvZyBtZXNzYWdlcyBmb3IgbGF0ZXIgZW1pc3Npb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYW4gYXR0ZW1wdCB0byBhdm9pZCBob2xkaW5nIGBjdC1cdTAwM2Vsb2NrYCB3aGlsZSBwZXJmb3JtaW5nIHRoZSBsb2dnaW5nLiBUaGF0J3MgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IG9wdGltaXphdGlvbi5cblxuQSBxdWljayBjaGVjayBjb25maXJtcyB0aGlzOiBgbmZfdGNwX2VtaXRfaW52YWxpZF9sb2dzYCBpcyBkZWZpbml0ZWx5IGNhbGxlZCAqYWZ0ZXIqIGBzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKWAuIFNvLCBgdGNwX2luX3dpbmRvd2AgYW5kIGBuZl90Y3BfaGFuZGxlX2ludmFsaWRgIG5vdyBzdG9yZSBsb2cgbWVzc2FnZXMgaW4gYSBsb2NhbCBgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3MgbG9nc2AgdmFyaWFibGUgb24gdGhlIHN0YWNrLiBUaGUgZW1pc3Npb24gdGhlbiBoYXBwZW5zIGFmdGVyIHJlbGVhc2luZyB0aGUgbG9jay4gQ2xldmVyLCB0aGV5J3JlIHVzaW5nIGEgbG9jYWwgYnVmZmVyIHRvIGRlY291cGxlIHRoZSBsb2dnaW5nIGZyb20gdGhlIGNyaXRpY2FsIHNlY3Rpb24uXG5cbkZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQsIHRoaXMgKmlzKiBhIGNoYW5nZSBiZWNhdXNlIGl0IGFsdGVycyB0aGUgbG9jayBjb250ZXh0IG9mIHRoZSBsb2dnaW5nIGZ1bmN0aW9uLiBCdXQsIGRvZXMgaXQgY2hhbmdlIHRoZSBjb3JlIFRDUCBjb25udHJhY2sgbG9naWM/IE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBubywgdGhlIGxvZ2dpbmcgZnVuY3Rpb24gYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGlzIHByZXR0eSBtdWNoIGp1c3QgZm9yIGxvZ2dpbmcuIE5vIGZ1bmN0aW9uYWwgc2lkZSBlZmZlY3QuXG5cbkxldCdzIGRpdmUgZGVlcGVyIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmdW5jdGlvbmFsIGFsdGVyYXRpb25zIGJleW9uZCBqdXN0IHRoZSBkZWZlcnJlZCBsb2dnaW5nLiBPa2F5LCB0aGUgcGF0Y2ggY2hhbmdlcyBgbmZfdGNwX2xvZ19pbnZhbGlkYCB0byBxdWV1ZSB0aGUgbG9nIGluc3RlYWQgb2YgY2FsbGluZyBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgZGlyZWN0bHkuIGB0Y3BfaW5fd2luZG93YCBzdGlsbCByZXR1cm5zIHRoZSBzYW1lIHZhbHVlczogYE5GQ1RfVENQX0lHTk9SRWAsIGBORkNUX1RDUF9JTlZBTElEYCwgb3IgYE5GQ1RfVENQX0FDQ0VQVGAuIFRob3NlIGFsbCBhcmUgdGhlIHNhbWUuIEFuZCB0aGUgdGltZW91dCBtb2RpZmljYXRpb25zIGluIGBuZl90Y3BfaGFuZGxlX2ludmFsaWRgIHNlZW0gdG8gYmUgdW5jaGFuZ2VkOiB0aGUgY29yZSBsb2dpYyBpcyB0aGUgc2FtZS4gVGhlIG9ubHkgY2hhbmdlIGlzIHRoZSBkZWZlcnJhbC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyBjaGFuZ2Ugd29ydGggZnV6emluZz9cblxuT24gdGhlIG9uZSBoYW5kLCBpZiBpdCAqd2VyZSoganVzdCBhIHJlZmFjdG9yaW5nIG9mIGxvZ2dpbmcsIEkgbWlnaHQgc2F5IG5vLCBhcyBwZXIgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgcHJvbXB0LiBIb3dldmVyLCBkZWZlcnJpbmcgbG9nZ2luZyBvdXRzaWRlIGEgc3BpbmxvY2sgKmNvdWxkKiBwcmV2ZW50IHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgbG9ja3Vwcy4gVGhhdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGJ1dCBtb3JlIGluIHRlcm1zIG9mIGNvbmN1cnJlbmN5IHJhdGhlciB0aGFuIGFsdGVyaW5nIHRoZSBuZXR3b3JrIHN0YWNrIGV4ZWN1dGlvbi4gSXQgY2hhbmdlcyAqd2hlbiogdGhlIGxvZyBpcyBlbWl0dGVkLiBUaGUgY29yZSBUQ1AgY29ubnRyYWNrICpiZWhhdmlvciogc2VlbXMgdW5jaGFuZ2VkLlxuXG5SZW1lbWJlcmluZyB0aGUgcHJvbXB0J3MgaW5zdHJ1Y3Rpb246IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLiAtIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLiAtIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cIlxuXG5MZXQncyBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGF0IGNoYW5nZSwgYWdhaW46XG5gYGBjXG4tXHR2YV9zdGFydChhcmdzLCBmbXQpO1xuLVx0dmFmLmZtdCA9IGZtdDtcbi1cdHZhZi52YSA9IFx1MDAyNmFyZ3M7XG4tXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcIiVwVlwiLCBcdTAwMjZ2YWYpO1xuLVx0dmFfZW5kKGFyZ3MpO1xuLVxuK1x0bmZfdGNwX3F1ZXVlX2ludmFsaWRfbG9nKGxvZ3MsIHR5cGUsIHZhbHVlLCAwLCAwLCAwKTtcbiBcdHJldHVybiByZXQ7XG5gYGBcbkl0J3MganVzdCBkZWZlcnJpbmcgdGhlIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCBjYWxsLiBXZSdyZSBvbmx5IHF1ZXVpbmcgaXQgbm93LiBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgKmlzKiBhIGxvZ2dpbmcgZnVuY3Rpb24uIFNvLCBpZiB0aGlzIHBhdGNoICpvbmx5KiBjb250YWlucyBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzIGxpa2UgbG9nZ2luZywgd2Ugc2hvdWxkIHJldHVybiBmYWxzZS4gRXZlbiB0aG91Z2ggaXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgaXQgaXMgb25seSBhIGNoYW5nZSBpbiB0ZXJtcyBvZiBjb25jdXJyZW5jeSwgd2hpY2ggaXMgYSBzaWRlIGVmZmVjdC4gSXQgaXMgYSBsb2dnaW5nIGZ1bmN0aW9uLCB3aXRoIG5vIGZ1bmN0aW9uYWwgc2lkZSBlZmZlY3RzLlxuXG5HaXZlbiB0aGF0IGFuZCB0aGUgbGFjayBvZiBvdGhlciBmdW5jdGlvbmFsIGNoYW5nZXMsIGl0ICpsb29rcyBsaWtlKiB0aGlzIGlzIGZ1bmRhbWVudGFsbHkgYSBsb2dnaW5nIHJlZmFjdG9yaW5nIGFuZCB0aGUgYW5zd2VyIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTc4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6NDc6MjEuNTMwNjIyOTA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0ODk3OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz03Mj1fX3ByaW50Zig0LCA1KVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NzM6dm9pZCBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy03NC1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy05My19XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo5NDpFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTk1LSNlbmRpZlxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jPTE0OD1zdGF0aWMgaW50IGRvX2Jhc2ljX2NoZWNrcyhzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMTc0LVxcdFxcdCAgICAgY291bnQgIT0gMCkgfHwgIXNjaC1cXHUwMDNlbGVuZ3RoKSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jOjE3NTpcXHRcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0xNzYtXFx0XFx0XFx0XFx0XFx0XFx0ICBcXFwiJXMgZmFpbGVkLiBjaHVuayBudW0gJWQsIHR5cGUgJWQsIGxlbiAlZCBmbGFnICVkXFxcXG5cXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jPTMyNz1pbnQgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0zNzMtXFx0ICAgIHNoLVxcdTAwM2V2dGFnICE9IGN0LVxcdTAwM2Vwcm90by5zY3RwLnZ0YWdbZGlyXSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYzozNzQ6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMzc1LVxcdFxcdFxcdFxcdFxcdCAgXFxcInZlcmlmaWNhdGlvbiB0YWcgY2hlY2sgZmFpbGVkICV4IHZzICV4IGZvciBkaXIgJWRcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTQ1My1cXHRcXHRpZiAobmV3X3N0YXRlID09IFNDVFBfQ09OTlRSQUNLX01BWCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYzo0NTQ6XFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtNDU1LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcIkludmFsaWQsIG9sZF9zdGF0ZSAlZCwgZGlyICVkLCB0eXBlICVkXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTU0ND1zdGF0aWMgdm9pZCBuZl90Y3BfZW1pdF9pbnZhbGlkX2xvZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTUwLVxcdGNhc2UgTkZfVENQX0xPR19PVkVSU0hPVDpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1NTE6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NTItXFx0XFx0XFx0XFx0XFx0ICBcXFwiJXUgYnl0ZXMgbW9yZSB0aGFuIGV4cGVjdGVkXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU1NS1cXHRjYXNlIE5GX1RDUF9MT0dfU0VRX09WRVI6XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTU2OlxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTU3LVxcdFxcdFxcdFxcdFxcdCAgXFxcIlNFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NjAtXFx0Y2FzZSBORl9UQ1BfTE9HX0FDS19PVkVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjU2MTpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU2Mi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU2NS1cXHRjYXNlIE5GX1RDUF9MT0dfU0VRX1VOREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjU2NjpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU2Ny1cXHRcXHRcXHRcXHRcXHQgIFxcXCJTRVEgaXMgdW5kZXIgbG93ZXIgYm91bmQgJXUgKGFscmVhZHkgQUNLZWQgZGF0YSByZXRyYW5zbWl0dGVkKVxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NzAtXFx0Y2FzZSBORl9UQ1BfTE9HX0FDS19VTkRFUjpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1NzE6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NzItXFx0XFx0XFx0XFx0XFx0ICBcXFwiaWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKVxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NzUtXFx0Y2FzZSBORl9UQ1BfTE9HX0xPV0VSX1RJTUVPVVQ6XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTc2OlxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTc3LVxcdFxcdFxcdFxcdFxcdCAgXFxcInBhY2tldCAoaW5kZXggJWQsIGRpciAlZCkgcmVzcG9uc2UgZm9yIGluZGV4ICVkIGxvd2VyIHRpbWVvdXQgdG8gJXVcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9MTA0OT1pbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTIwMS1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEyMDI6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjAzLVxcdFxcdFxcdFxcdFxcdCAgXFxcInBhY2tldCAoaW5kZXggJWQpIGluIGRpciAlZCBpZ25vcmVkLCBzdGF0ZSAlc1xcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjI0LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTIyNTpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyMjYtXFx0XFx0XFx0XFx0XFx0ICBcXFwicGFja2V0IChpbmRleCAlZCkgaW4gZGlyICVkIGludmFsaWQsIHN0YXRlICVzXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyNDItXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmN0LVxcdTAwM2Vsb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMjQzOlxcdFxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFxcXCJjaGFsbGVuZ2UtYWNrIGlnbm9yZWRcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjQ0LVxcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7IC8qIERvbid0IGNoYW5nZSBzdGF0ZSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTI4Ny1cXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEyODg6XFx0XFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXFxcImludmFsaWQgcnN0XFxcIik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTI4OS1cXHRcXHRcXHRcXHRyZXR1cm4gLU5GX0FDQ0VQVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6NDc6MjEuNjI1NTI1NzA2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2MDkwMjA3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgV29ydGhpbmVzcyBvZiBGdXp6aW5nKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGlzIHBhdGNoIGxvb2tzIGxpa2UgaXQncyBjaGFuZ2luZyBob3cgaW52YWxpZCBUQ1Agc2VnbWVudHMgYXJlIGxvZ2dlZCB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrLiBJbml0aWFsbHksIEkgc2VlIHRoYXQgdGhlIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCBmdW5jdGlvbiBpcyBiZWluZyByZXBsYWNlZCBieSBhIHF1ZXVlZCBsb2dnaW5nIG1lY2hhbmlzbSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE15IGZpcnN0IHRob3VnaHQgaXMsIFwiSXMgdGhpcyAqanVzdCogYSBsb2dnaW5nIGNoYW5nZSwgb3IgaXMgdGhlcmUgYSBmdW5jdGlvbmFsIHNpZGUgZWZmZWN0P1wiXG5cbkxldCdzIGRpZyBkZWVwZXIuIFRoZSBjb2RlIGRpZmYgY29uZmlybXMgdGhhdCB0aGUgcHJpbWFyeSBhbHRlcmF0aW9uIGlzIGluZGVlZCB0aGUgbG9nZ2luZyBtZWNoYW5pc20gaXRzZWxmLiBUaGUgZGlyZWN0IGNhbGwgdG8gYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGlzIHJlcGxhY2VkIHdpdGggYG5mX3RjcF9xdWV1ZV9pbnZhbGlkX2xvZ2AgYW5kIGxhdGVyIGBuZl90Y3BfZW1pdF9pbnZhbGlkX2xvZ3NgLiBUaGUga2V5IGlzIHRoYXQgYG5mX3RjcF9lbWl0X2ludmFsaWRfbG9nc2AgaXMgY2FsbGVkICphZnRlciogcmVsZWFzaW5nIHRoZSBzcGlubG9jayAoYHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spYCkuIFRoaXMgaXMgbm90IGp1c3QgY29zbWV0aWM7IGl0J3MgYSByZWZhY3RvcmluZyB0byBhdm9pZCBob2xkaW5nIGEgbG9jayB3aGlsZSBsb2dnaW5nLCB3aGljaCBjb3VsZCBwcmV2ZW50IHBvc3NpYmxlIGRlYWRsb2NrcyBhbmQgb3IgaW1wcm92ZSBwZXJmb3JtYW5jZS5cblxuQnV0LCBnaXZlbiB0aGUgcHJvbXB0LCBJJ20gdHJ5aW5nIHRvIGRldGVybWluZSBpZiBpdOKAmXMgYSDigJxwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2UsIHN1Y2ggYXMgbG9nZ2luZy7igJ0gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB5ZXMsIGJlY2F1c2UgdGhlIHJldHVybiB2YWx1ZXMgKGBORl9BQ0NFUFRgLCBgLU5GX0FDQ0VQVGApIGFuZCB0aGUgb3ZlcmFsbCBmbG93LCAqZnVuY3Rpb25hbGx5KiBzcGVha2luZywgc2VlbSB1bmNoYW5nZWQuIFRoZSBzdGF0ZSBjaGFuZ2VzIGFyZSBjb25zaXN0ZW50LiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHdoZXJlIHRoZSBsb2dnaW5nIG9jY3Vycywgc3BlY2lmaWNhbGx5IG91dHNpZGUgdGhlIGxvY2suIFRoZSBjb3JlIGJlaGF2aW9yIG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgcmVtYWlucyB0aGUgc2FtZS5cblxuVGhlIHByb21wdOKAmXMgZ3VpZGFuY2UgbWVudGlvbnMgXCJQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50c1wiIGRvbid0IHdhcnJhbnQgZnV6emluZy4gSXMgcmVmYWN0b3JpbmcgbG9nZ2luZyB0byBhdm9pZCBsb2NrIGNvbnRlbnRpb24gYSBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2U/IEl0IGRvZXNu4oCZdCBtb2RpZnkgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBwcm90b2NvbC4gSSdtIGxlYW5pbmcgdG93YXJkIHRoZSBhbnN3ZXIgYmVpbmcgeWVzLCBidXQgbGV0J3MgZG91YmxlLWNoZWNrLlxuXG5MZXQncyBsb29rIG1vcmUgYXQgYG5mX3RjcF9oYW5kbGVfaW52YWxpZGAuIFRoZSBjb2RlIHF1ZXVlcyB0aGUgbG9nLiBUaGlzIGlzIHB1cmVseSBhIGxvZ2dpbmcgY2hhbmdlLiBJJ20gZ29pbmcgdG8gZGVjbGFyZSB0aGlzIHBhdGNoIGFzIHNvbWV0aGluZyB0aGF0IGlzbid0IGZ1bmN0aW9uYWxseSBhbHRlcmluZyB0aGUgc3RhY2sncyBiZWhhdmlvciwgYnV0IGluc3RlYWQsIGl0IGlzIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIGxvZ2dpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoZXJlZm9yZSwgSSBiZWxpZXZlIHRoZSBhcHByb3ByaWF0ZSByZXNwb25zZSBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk4NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTo0NzozMi4yMzQ1NDg3MTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MDpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9sNHByb3RvX2xvZ19pbnZhbGlkKTtcXG4gIDcxOlxcdFxcbiAgNzI6XFx0X19wcmludGYoNCwgNSlcXG4gIDczOlxcdHZvaWQgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgNzQ6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4gIDc1OlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXFxuICA3NjpcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuICA3NzpcXHR7XFxuICA3ODpcXHRcXHRzdHJ1Y3QgdmFfZm9ybWF0IHZhZjtcXG4gIDc5OlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4gIDgwOlxcdFxcdHZhX2xpc3QgYXJncztcXG4gIDgxOlxcdFxcbiAgODI6XFx0XFx0bmV0ID0gbmZfY3RfbmV0KGN0KTtcXG4gIDgzOlxcdFxcdGlmIChsaWtlbHkobmV0LVxcdTAwM2VjdC5zeXNjdGxfbG9nX2ludmFsaWQgPT0gMCkpXFxuICA4NDpcXHRcXHRcXHRyZXR1cm47XFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XFxuICA4NzpcXHRcXHR2YWYuZm10ID0gZm10O1xcbiAgODg6XFx0XFx0dmFmLnZhID0gXFx1MDAyNmFyZ3M7XFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdG5mX2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBzdGF0ZSxcXG4gIDkxOlxcdFxcdFxcdFxcdCAgICAgICBuZl9jdF9wcm90b251bShjdCksIFxcXCIlcFZcXFwiLCBcXHUwMDI2dmFmKTtcXG4gIDkyOlxcdFxcdHZhX2VuZChhcmdzKTtcXG4gIDkzOlxcdH1cXG4gIDk0OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQpO1xcbiAgOTU6XFx0I2VuZGlmXFxuICA5NjpcXHRcXG4gIDk3OlxcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbmZfY3RfbDRwcm90b19maW5kKHU4IGw0cHJvdG8pXFxuICA5ODpcXHR7XFxuICA5OTpcXHRcXHRzd2l0Y2ggKGw0cHJvdG8pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6NDc6MzIuMjM0NjU5MDQ2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5NzU5ODgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzczpcblxuKipBIFNpbXBsZSBGdW5jdGlvbiBDYWxsKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGFuZCBpdCdzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBiYXNpY2FsbHkgYSB3cmFwcGVyLiBJdCBkb2Vzbid0IHNlZW0gdG8gYmUgZG9pbmcgYW55dGhpbmcgY29tcGxleCBpbiBhbmQgb2YgaXRzZWxmLiBFc3NlbnRpYWxseSwgd2hhdCBJJ20gc2VlaW5nIGlzIHRoYXQgaXQncyBqdXN0IGNhbGxpbmcgYG5mX2w0cHJvdG9fbG9nX2ludmFsaWRgLiBUaGF0J3MgaXQuIE5vIGFkZGl0aW9uYWwgbG9naWMsIG5vIHByZS1wcm9jZXNzaW5nLCBubyBwb3N0LXByb2Nlc3NpbmcuIEl0J3MgYSBkaXJlY3QgcGFzcy10aHJvdWdoLiBJIHN1cHBvc2UgaXQgY291bGQgYmUgYW4gYWJzdHJhY3Rpb24sIGxpa2VseSBhbiBhdHRlbXB0IHRvIGdyb3VwIHJlbGF0ZWQgZXJyb3IgcmVwb3J0aW5nLCBvciBwZXJoYXBzIGEgbGF5ZXIgb2YgaW5kaXJlY3Rpb24gZm9yIGZ1dHVyZSBtb2RpZmljYXRpb25zLiBCdXQgYXQgdGhpcyBsZXZlbCwgaXQncyBhIG9uZS1saW5lcjogdGhlIGZpcnN0IGZ1bmN0aW9uIGp1c3QgZGVsZWdhdGVzIHRvIHRoZSBzZWNvbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODcyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTo0NzozNS4zMzIyNjExMjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMzg4NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2w0cHJvdG9fbG9nX2ludmFsaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz00OD1fX3ByaW50Zig0LCA1KVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NDk6dm9pZCBuZl9sNHByb3RvX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01MC1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy02OS19XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo3MDpFWFBPUlRfU1lNQk9MX0dQTChuZl9sNHByb3RvX2xvZ19pbnZhbGlkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTcxLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz03Mz12b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtODktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo5MDpcXHRuZl9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy05MS1cXHRcXHRcXHQgICAgICAgbmZfY3RfcHJvdG9udW0oY3QpLCBcXFwiJXBWXFxcIiwgXFx1MDAyNnZhZik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmM9MTA2PWludCBuZl9jb25udHJhY2tfaW5ldF9lcnJvcihzdHJ1Y3QgbmZfY29ubiAqdG1wbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYy0xNzItXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VwZiA9PSBBRl9JTkVUKSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jOjE3MzpcXHRcXHRcXHRuZl9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jLTE3NC1cXHRcXHRcXHRcXHRcXHQgICAgICAgbDRwcm90byxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYy0xNzctXFx0XFx0fSBlbHNlIGlmIChzdGF0ZS1cXHUwMDNlcGYgPT0gQUZfSU5FVDYpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmM6MTc4OlxcdFxcdFxcdG5mX2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMtMTc5LVxcdFxcdFxcdFxcdFxcdCAgICAgICBsNHByb3RvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jPTE5Nj1zdGF0aWMgdm9pZCBpY21wX2Vycm9yX2xvZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jLTE5OS17XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jOjIwMDpcXHRuZl9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgc3RhdGUsIElQUFJPVE9fSUNNUCwgXFxcIiVzXFxcIiwgbXNnKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMtMjAxLX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jPTEyNz1zdGF0aWMgdm9pZCBpY21wdjZfZXJyb3JfbG9nKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYy0xMzAte1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jOjEzMTpcXHRuZl9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgc3RhdGUsIElQUFJPVE9fSUNNUFY2LCBcXFwiJXNcXFwiLCBtc2cpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jLTEzMi19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM9Mjk1PXN0YXRpYyBib29sIHNjdHBfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0zMjEtb3V0X2ludmFsaWQ6XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jOjMyMjpcXHRuZl9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgc3RhdGUsIElQUFJPVE9fU0NUUCwgXFxcIiVzXFxcIiwgbG9nbXNnKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMzIzLVxcdHJldHVybiB0cnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9ODgwPXN0YXRpYyB2b2lkIHRjcF9lcnJvcl9sb2coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTg4My17XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6ODg0OlxcdG5mX2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBzdGF0ZSwgSVBQUk9UT19UQ1AsIFxcXCIlc1xcXCIsIG1zZyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtODg1LX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jPTM3PXN0YXRpYyB2b2lkIHVkcF9lcnJvcl9sb2coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jLTQwLXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYzo0MTpcXHRuZl9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgc3RhdGUsIElQUFJPVE9fVURQLCBcXFwiJXNcXFwiLCBtc2cpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jLTQyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6NDc6MzUuNDMzNjU1Mjk0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NTUxMDQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgYG5mX2w0cHJvdG9fbG9nX2ludmFsaWRgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhpcyBgbmZfbDRwcm90b19sb2dfaW52YWxpZGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgcGFydGljdWxhcmx5IGl0cyByb2xlIGluIGhhbmRsaW5nIGludmFsaWQgTDQgcHJvdG9jb2wgZGF0YS4gVGhpcyBpcyBjcnVjaWFsIGZvciBuZXR3b3JrIHNlY3VyaXR5IGFuZCB0cmFmZmljIGFuYWx5c2lzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uPyBXaGF0IGluZm9ybWF0aW9uIGRvZXMgaXQgbG9nPyBJcyB0aGlzIGxvZ2dpbmcgY29uZmlndXJhYmxlPyBBbmQgaG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCBvdGhlciBOZXRmaWx0ZXIgY29tcG9uZW50cywgcGFydGljdWxhcmx5IHRob3NlIGRlYWxpbmcgd2l0aCBwYWNrZXQgZmlsdGVyaW5nIGFuZCBjb25uZWN0aW9uIHRyYWNraW5nPyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgY29uc2lkZXJhdGlvbnMgYXJvdW5kIHBlcmZvcm1hbmNlIGFuZCBwb3RlbnRpYWwgRG9TIHZlY3RvcnMg4oCTIGhvdyBlZmZpY2llbnRseSBpcyB0aGlzIGhhbmRsaW5nIGVycm9ycz8gQW55IGNoYW5jZSBmb3IgcmFjZSBjb25kaXRpb25zPyBBcmUgdGhlcmUgYW55IGtub3duIHZ1bG5lcmFiaWxpdGllcyBhc3NvY2lhdGVkIHdpdGggaXRzIGxvZ2dpbmcgbWVjaGFuaXNtcz8gTGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMgYW5kIGZpZ3VyZSBvdXQgaG93IHJvYnVzdCBpdCB0cnVseSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzOTQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTo0NzozOC42MDkxNjgyOTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwdjYuaFxcdTAwM2VcXG4gIDQxOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbjYuaFxcdTAwM2VcXG4gIDQyOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbiAgNDM6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9pbmV0X2ZyYWcuaFxcdTAwM2VcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0c3RhdGljIERFRklORV9NVVRFWChuZl9jdF9wcm90b19tdXRleCk7XFxuICA0NjpcXHRcXG4gIDQ3OlxcdCNpZmRlZiBDT05GSUdfU1lTQ1RMXFxuICA0ODpcXHRfX3ByaW50Zig0LCA1KVxcbiAgNDk6XFx0dm9pZCBuZl9sNHByb3RvX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuICA1MDpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlLFxcbiAgNTE6XFx0XFx0XFx0XFx0ICAgIHU4IHByb3RvbnVtLFxcbiAgNTI6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbiAgNTM6XFx0e1xcbiAgNTQ6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc3RhdGUtXFx1MDAzZW5ldDtcXG4gIDU1OlxcdFxcdHN0cnVjdCB2YV9mb3JtYXQgdmFmO1xcbiAgNTY6XFx0XFx0dmFfbGlzdCBhcmdzO1xcbiAgNTc6XFx0XFxuICA1ODpcXHRcXHRpZiAobmV0LVxcdTAwM2VjdC5zeXNjdGxfbG9nX2ludmFsaWQgIT0gcHJvdG9udW0gXFx1MDAyNlxcdTAwMjZcXG4gIDU5OlxcdFxcdCAgICBuZXQtXFx1MDAzZWN0LnN5c2N0bF9sb2dfaW52YWxpZCAhPSBJUFBST1RPX1JBVylcXG4gIDYwOlxcdFxcdFxcdHJldHVybjtcXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0dmFfc3RhcnQoYXJncywgZm10KTtcXG4gIDYzOlxcdFxcdHZhZi5mbXQgPSBmbXQ7XFxuICA2NDpcXHRcXHR2YWYudmEgPSBcXHUwMDI2YXJncztcXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0bmZfbG9nX3BhY2tldChuZXQsIHN0YXRlLVxcdTAwM2VwZiwgMCwgc2tiLCBzdGF0ZS1cXHUwMDNlaW4sIHN0YXRlLVxcdTAwM2VvdXQsXFxuICA2NzpcXHRcXHRcXHQgICAgICBOVUxMLCBcXFwibmZfY3RfcHJvdG9fJWQ6ICVwViBcXFwiLCBwcm90b251bSwgXFx1MDAyNnZhZik7XFxuICA2ODpcXHRcXHR2YV9lbmQoYXJncyk7XFxuICA2OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjQ3OjM4LjYwOTI4NTk3M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDEyMjgyNTc0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoJ3MgSW1wYWN0OiBMb2dnaW5nIFJlZmFjdG9yaW5nKipcblxuT2theSwgc28gYG5mX2w0cHJvdG9fbG9nX2ludmFsaWRgIG5vdyBjYWxscyBgbmZfbG9nX3BhY2tldGAgZGlmZmVyZW50bHkuIEl0J3MgYSBsb2dnaW5nIGZ1bmN0aW9uLCBwdXJlbHkuIFRoaXMgcGF0Y2gncyBwdXJwb3NlIGlzIHRvIGRlZmVyIHRoaXMgbG9nZ2luZyB0byBhdm9pZCBob2xkaW5nIGBjdC1cdTAwM2Vsb2NrYCBkdXJpbmcgdGhlIGxvZ2dpbmcgcHJvY2Vzcy4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRlcm1zIG9mIGxvY2sgY29udGVudGlvbiBhbmQgZGVhZGxvY2sgYXZvaWRhbmNlLCBmb3Igc3VyZSwgYnV0IGZ1bmRhbWVudGFsbHksIGl0J3MganVzdCBhYm91dCAqd2hlbiogdGhlIGxvZ2dpbmcgaGFwcGVucy5cblxuSSBoYWQgdG8gZG91YmxlLWNoZWNrOiBkb2VzIHRoaXMgYWN0dWFsbHkgY2hhbmdlIHRoZSBwcm9ncmFtIGZsb3c/IE5vcGUsIHRoZSByZXR1cm4gdmFsdWVzIG9mIGB0Y3BfaW5fd2luZG93YCBhbmQgYG5mX3RjcF9oYW5kbGVfaW52YWxpZGAgYXJlIHRoZSBzYW1lOyB0aGUgc3RhdGUgY2hhbmdlcyBhcmUgY29uc2lzdGVudC4gVGhlIGxvZ2dpbmcgaXMganVzdCBtb3ZlZCBvdXRzaWRlIHRoZSBsb2NrLlxuXG5TaG91bGQgSSBldmVuIGZ1enogdGhpcz8gSG1tLCB1bmxpa2VseS4gVW5sZXNzIHRoZXJlJ3MgYSBidWcgaW4gKmhvdyogdGhlIGxvZ2dpbmcgaXMgcXVldWVkLCBsaWtlIGFuIG91dC1vZi1ib3VuZHMgaXNzdWUuIExldCdzIGxvb2sgYXQgdGhhdCBxdWV1aW5nIGNvZGUuLi5cblxuYGBgY1xuc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZ3Mge1xuXHQvKiBBdCBtb3N0IG9uZSB0Y3BfaW5fd2luZG93KCkgbG9nIHBsdXMgb25lIGxvd2VyLXRpbWVvdXQgbG9nLiAqL1xuXHRzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nIGVudHJpZXNbMl07XG5cdHU4IG51bTtcbn07XG5cbnN0YXRpYyB2b2lkIG5mX3RjcF9xdWV1ZV9pbnZhbGlkX2xvZyhzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9ncyAqbG9ncyxcblx0XHRcdFx0ICAgICBlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGUsXG5cdFx0XHRcdCAgICAgdTMyIHZhbHVlLCB1OCBpbmRleCwgdTggZGlyLFxuXHRcdFx0XHQgICAgIHU4IGxhc3RfaW5kZXgpXG57XG5cdHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZztcblxuXHRpZiAobG9ncy1cdTAwM2VudW0gXHUwMDNlPSBBUlJBWV9TSVpFKGxvZ3MtXHUwMDNlZW50cmllcykpXG5cdFx0cmV0dXJuO1xuXG5cdGxvZyA9IFx1MDAyNmxvZ3MtXHUwMDNlZW50cmllc1tsb2dzLVx1MDAzZW51bSsrXTtcblx0bG9nLVx1MDAzZXR5cGUgPSB0eXBlO1xuXHRsb2ctXHUwMDNldmFsdWUgPSB2YWx1ZTtcblx0bG9nLVx1MDAzZWluZGV4ID0gaW5kZXg7XG5cdGxvZy1cdTAwM2VkaXIgPSBkaXI7XG5cdGxvZy1cdTAwM2VsYXN0X2luZGV4ID0gbGFzdF9pbmRleDtcbn1cbmBgYFxuXG5ZZXAsIHNpbXBsZSBhbmQgc2FmZS4gYEFSUkFZX1NJWkVgIGNoZWNrLCBhIHNtYWxsIGFycmF5LiBObyBvYnZpb3VzIHByb2JsZW1zIHRoZXJlLlxuXG5UaGUgcHJvbXB0IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBoYXMgXCJQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cIiBUaGlzIGlzIGEgcmVmYWN0b3Jpbmcgb2YgKmxvZ2dpbmcqLiBJdCBkZWZlcnMgdGhlIGxvZ2dpbmcsIGJ1dCB0aGUgbG9nZ2luZyBpdHNlbGYgaXMgc3RpbGwgdGhlIHNhbWUuIFNvIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgYmVjYXVzZSBpdCAqaXMqIGEgbG9nZ2luZyBjaGFuZ2UuXG5cbk5vdywgaG9sZCBvbi4gSXMgaXQgKnBvc3NpYmxlKiB0aGlzIGNoYW5nZSBmaXhlcyBhbiB1bmRlcmx5aW5nIGRlYWRsb2NrIGlzc3VlIGJ5IG1vdmluZyB0aGUgbG9nZ2luZz8gWWVzLCBwb3RlbnRpYWxseS4gQnV0IHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNhaWQgdG8gcmV0dXJuIGBmYWxzZWAgZm9yIFwicHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlc1wiLiBJcyBtb3ZpbmcgbG9nZ2luZyBvdXRzaWRlIGEgc3BpbmxvY2sgcHVyZWx5IGRlY29yYXRpdmU/IEl0IGRvZXNuJ3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBwcm90b2NvbCBleGVjdXRpb24uIEknbSBnb2luZyB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA4NSwiT3V0cHV0VG9rZW5zIjo4MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjQ3OjQ4LjczMjExNDEwOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbG9nZ2luZyBvZiBpbnZhbGlkIFRDUCBwYWNrZXRzIGluIG5ldGZpbHRlciBjb25udHJhY2sgdG8gZGVmZXIgdGhlIGxvZ2dpbmcgdW50aWwgYWZ0ZXIgdGhlIGNvbm50cmFjayBzcGlubG9jayBpcyByZWxlYXNlZC4gVGhpcyBpcyBhIHB1cmVseSBkZWNvcmF0aXZlL2xvZ2dpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUgbmV0d29yayBzdGFjay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbG9nZ2luZyBvZiBpbnZhbGlkIFRDUCBwYWNrZXRzIGluIG5ldGZpbHRlciBjb25udHJhY2sgdG8gZGVmZXIgdGhlIGxvZ2dpbmcgdW50aWwgYWZ0ZXIgdGhlIGNvbm50cmFjayBzcGlubG9jayBpcyByZWxlYXNlZC4gVGhpcyBpcyBhIHB1cmVseSBkZWNvcmF0aXZlL2xvZ2dpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUgbmV0d29yayBzdGFjay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowrzw5p[1] Phase: Running StartedAt: 2026-07-30 19:48:00 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzw5p[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-30 19:48:00 +0000 UTC FinishedAt: 2026-07-30 19:48:06 +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,}