Name: series-workflow5zvtg Phase: Failed StartedAt: 2026-09-10 17:02:46 +0000 UTC FinishedAt: 2026-09-10 17:23:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zvtg[0] Phase: Succeeded StartedAt: 2026-09-10 17:02:46 +0000 UTC FinishedAt: 2026-09-10 17:22:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zvtg[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 17:02:46 +0000 UTC FinishedAt: 2026-09-10 17:22:52 +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+CgkJCTx0ZD4yMDI2LzA5LzEwIDE3OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNUTWljcm9lbGVjdHJvbmljcyAvIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIGRyaXZlciAoc3RtbWFjKSwgc3BlY2lmaWNhbGx5IGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9uIGFuZCBzZWxmdGVzdCBoZWxwZXJzLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoQVJNL01JUFMvZXRjLiBTb0NzIG9yIHNwZWNpZmljIEludGVsL0xvb25nc29uL1N5bm9wc3lzIFBDSSBOSUMgZGV2aWNlcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBvbiBhbWQ2NCwgcmVuZGVyaW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTc6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYTgwNjk2MWVkYzE0MTAwNzg0ZGE3OTY1NzA2MDNkYWM5ZjdlNGJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTc6MjI6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbmluZGV4IDVmZTdlOTVmZGQzNDUuLjM2NjRhMjk4NTc0YWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG5AQCAtMTUzNiwxNyAmIzQzOzE1MzYsMTcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzdG1tYWNfcnhfb2Zmc2V0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdHJldHVybiBORVRfU0tCX1BBRCAmIzQzOyBORVRfSVBfQUxJR047XG4gfVxuIFxuLXN0YXRpYyBpbnQgc3RtbWFjX3NldF9iZnNpemUoaW50IG10dSlcbiYjNDM7c3RhdGljIGludCBzdG1tYWNfc2V0X2Jmc2l6ZShpbnQgbGVuKVxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAobXR1IFx1MDAzZT0gQlVGX1NJWkVfOEtpQilcbiYjNDM7XHRpZiAobGVuIFx1MDAzZSBCVUZfU0laRV84S2lCKVxuIFx0XHRyZXQgPSBCVUZfU0laRV8xNktpQjtcbi1cdGVsc2UgaWYgKG10dSBcdTAwM2U9IEJVRl9TSVpFXzRLaUIpXG4mIzQzO1x0ZWxzZSBpZiAobGVuIFx1MDAzZSBCVUZfU0laRV80S2lCKVxuIFx0XHRyZXQgPSBCVUZfU0laRV84S2lCO1xuLVx0ZWxzZSBpZiAobXR1IFx1MDAzZT0gQlVGX1NJWkVfMktpQilcbiYjNDM7XHRlbHNlIGlmIChsZW4gXHUwMDNlIEJVRl9TSVpFXzJLaUIpXG4gXHRcdHJldCA9IEJVRl9TSVpFXzRLaUI7XG4tXHRlbHNlIGlmIChtdHUgXHUwMDNlIERFRkFVTFRfQlVGU0laRSlcbiYjNDM7XHRlbHNlIGlmIChsZW4gXHUwMDNlIERFRkFVTFRfQlVGU0laRSlcbiBcdFx0cmV0ID0gQlVGX1NJWkVfMktpQjtcbiBcdGVsc2VcbiBcdFx0cmV0ID0gREVGQVVMVF9CVUZTSVpFO1xuQEAgLTQwNjMsNyAmIzQzOzQwNjMsNyBAQCBzdGF0aWMgc3RydWN0IHN0bW1hY19kbWFfY29uZiAqXG4gc3RtbWFjX3NldHVwX2RtYV9kZXNjKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IG10dSlcbiB7XG4gXHRzdHJ1Y3Qgc3RtbWFjX2RtYV9jb25mICpkbWFfY29uZjtcbi1cdGludCBiZnNpemUsIHJldDtcbiYjNDM7XHRpbnQgYmZzaXplLCBsZW4sIHJldDtcbiBcdHU4IGNoYW47XG4gXG4gXHRkbWFfY29uZiA9IGt6YWxsb2Nfb2JqKCpkbWFfY29uZik7XG5AQCAtNDA3MywxMyAmIzQzOzQwNzMsMTUgQEAgc3RtbWFjX3NldHVwX2RtYV9kZXNjKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IG10dSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXHR9XG4gXG4tXHQvKiBSZXR1cm5zIDAgb3IgQlVGX1NJWkVfMTZLaUIgaWYgbXR1IFx1MDAzZSA4S2lCIGFuZCBkd21hYzQgb3IgcmluZyBtb2RlICovXG4tXHRiZnNpemUgPSBzdG1tYWNfc2V0XzE2a2liX2Jmc2l6ZShwcml2LCBtdHUpO1xuJiM0MztcdGxlbiA9IG10dSAmIzQzOyBFVEhfSExFTiAmIzQzOyAyICogVkxBTl9ITEVOICYjNDM7IEVUSF9GQ1NfTEVOICYjNDM7IE5FVF9JUF9BTElHTjtcbiYjNDM7XG4mIzQzO1x0LyogUmV0dXJucyAwIG9yIEJVRl9TSVpFXzE2S2lCIGlmIGxlbiBcdTAwM2UgOEtpQiBhbmQgZHdtYWM0IG9yIHJpbmcgbW9kZSAqL1xuJiM0MztcdGJmc2l6ZSA9IHN0bW1hY19zZXRfMTZraWJfYmZzaXplKHByaXYsIGxlbik7XG4gXHRpZiAoYmZzaXplIFx1MDAzYyAwKVxuIFx0XHRiZnNpemUgPSAwO1xuIFxuIFx0aWYgKGJmc2l6ZSBcdTAwM2MgQlVGX1NJWkVfMTZLaUIpXG4tXHRcdGJmc2l6ZSA9IHN0bW1hY19zZXRfYmZzaXplKG10dSk7XG4mIzQzO1x0XHRiZnNpemUgPSBzdG1tYWNfc2V0X2Jmc2l6ZShsZW4pO1xuIFxuIFx0ZG1hX2NvbmYtXHUwMDNlZG1hX2J1Zl9zeiA9IGJmc2l6ZTtcbiBcdC8qIENob3NlIHRoZSB0eC9yeCBzaXplIGZyb20gdGhlIGFscmVhZHkgZGVmaW5lZCBvbmUgaW4gdGhlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jXG5pbmRleCA2MzcyZWM3YzNmMzE3Li5mYzhkNjkyNjBmNDMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aHRvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91ZHAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcC5oXHUwMDNlXG5AQCAtMjM3LDYgJiM0MzsyMzgsMTAgQEAgc3RydWN0IHN0bW1hY190ZXN0X3ByaXYge1xuIFx0c3RydWN0IHN0bW1hY19wYWNrZXRfYXR0cnMgKnBhY2tldDtcbiBcdHN0cnVjdCBwYWNrZXRfdHlwZSBwdDtcbiBcdHN0cnVjdCBjb21wbGV0aW9uIGNvbXA7XG4mIzQzO1x0X19iZTE2IHBhY2tldF90eXBlO1xuJiM0MztcdGludCAoKmZ1bmMpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuJiM0MztcdFx0ICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX25kZXYpO1xuJiM0MztcdGJvb2wgY2FwdHVyZV9hbGw7XG4gXHRpbnQgZG91YmxlX3ZsYW47XG4gXHRpbnQgdmxhbl9pZDtcbiBcdGludCBvaztcbkBAIC0zMTYsNiAmIzQzOzMyMSw1MCBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2xvb3BiYWNrX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgc3RtbWFjX3NmdF9maWx0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19uZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN0bW1hY190ZXN0X3ByaXYgKnRwcml2ID0gcHQtXHUwMDNlYWZfcGFja2V0X3ByaXY7XG4mIzQzO1x0c3RydWN0IGV0aGhkciAqaGRyID0gZXRoX2hkcihza2IpO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoaGRyLVx1MDAzZWhfcHJvdG8gPT0gdHByaXYtXHUwMDNlcGFja2V0X3R5cGUpIHtcbiYjNDM7XHRcdHN0cnVjdCBza19idWZmICpuc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5za2IpXG4mIzQzO1x0XHRcdHJldCA9IHRwcml2LVx1MDAzZWZ1bmMobnNrYiwgbmRldiwgcHQsIG9yaWdfbmRldik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzdG1tYWNfc2Z0X2FkZF9wYWNrKHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3RtbWFjX3Rlc3RfcHJpdiAqdHByaXYgPSBwdC1cdTAwM2VhZl9wYWNrZXRfcHJpdjtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGRldl91c2VzX2RzYSh0cHJpdi1cdTAwM2VwdC5kZXYpIHx8IHRwcml2LVx1MDAzZWNhcHR1cmVfYWxsKSB7XG4mIzQzO1x0XHR0cHJpdi1cdTAwM2VwYWNrZXRfdHlwZSA9IHRwcml2LVx1MDAzZXB0LnR5cGU7XG4mIzQzO1x0XHR0cHJpdi1cdTAwM2VmdW5jID0gdHByaXYtXHUwMDNlcHQuZnVuYztcbiYjNDM7XG4mIzQzO1x0XHQvKiBEU0EgY29uZHVpdCB3aWxsIHJlcG9ydCBFVEhfUF9YRFNBLCBzbyBvdXIgcGFja2V0IGhhbmRsZXJcbiYjNDM7XHRcdCAqIHdvbiYjMzk7dCBtYXRjaC4gTGV0JiMzOTtzIHJlZ2lzdGVyIGEgRVRIX1BfQUxMIG1hdGNoIGFuZCBmaWx0ZXJcbiYjNDM7XHRcdCAqIG1hbnVhbGx5IGluIHN0bW1hY19zZnRfZmlsdGVyLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR0cHJpdi1cdTAwM2VwdC50eXBlID0gaHRvbnMoRVRIX1BfQUxMKTtcbiYjNDM7XHRcdHRwcml2LVx1MDAzZXB0LmZ1bmMgPSBzdG1tYWNfc2Z0X2ZpbHRlcjtcbiYjNDM7XHRcdHRwcml2LVx1MDAzZXB0Lmlnbm9yZV9vdXRnb2luZyA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZfYWRkX3BhY2socHQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzdG1tYWNfc2Z0X3JlbW92ZV9wYWNrKHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQpXG4mIzQzO3tcbiYjNDM7XHRkZXZfcmVtb3ZlX3BhY2socHQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sb29wYmFjayhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdFx0XHQgIHN0cnVjdCBzdG1tYWNfcGFja2V0X2F0dHJzICphdHRyKVxuIHtcbkBAIC0zMzcsNyAmIzQzOzM4Niw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sb29wYmFjayhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHR0cHJpdi1cdTAwM2VwYWNrZXQgPSBhdHRyO1xuIFxuIFx0aWYgKCFhdHRyLVx1MDAzZWRvbnRfd2FpdClcbi1cdFx0ZGV2X2FkZF9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiYjNDM7XHRcdHN0bW1hY19zZnRfYWRkX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuIFxuIFx0c2tiID0gc3RtbWFjX3Rlc3RfZ2V0X3VkcF9za2IocHJpdiwgYXR0cik7XG4gXHRpZiAoIXNrYikge1xuQEAgLTM2MCw3ICYjNDM7NDA5LDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2xvb3BiYWNrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbiBcbiBjbGVhbnVwOlxuIFx0aWYgKCFhdHRyLVx1MDAzZWRvbnRfd2FpdClcbi1cdFx0ZGV2X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiYjNDM7XHRcdHN0bW1hY19zZnRfcmVtb3ZlX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuIFx0a2ZyZWUodHByaXYpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtNDE0LDcgJiM0Mzs0NjMsNyBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X21tYyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gc3RhdGljIGludCBzdG1tYWNfdGVzdF9lZWUoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbiBcdHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKmluaXRpYWwsICpmaW5hbDtcbi1cdGludCByZXRyaWVzID0gMTA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0aW1lb3V0LCBtYXhfZHVyYXRpb247XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFwcml2LVx1MDAzZWRtYV9jYXAuZWVlIHx8ICFwcml2LVx1MDAzZWVlZV9hY3RpdmUpXG5AQCAtNDMwLDE0ICYjNDM7NDc5LDIxIEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfZWVlKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdFx0Z290byBvdXRfZnJlZV9pbml0aWFsO1xuIFx0fVxuIFxuJiM0MztcdC8qIFNuYXBzaG90IHN0YXRzLCB3ZSB3YW50IHRvIGNvdW50IHRoZSBpbl9scGkgZXZlbnRzLiBXZSBtYXkgZW50ZXJcbiYjNDM7XHQgKiBMUEkganVzdCBhZnRlciB0aGUgcGFja2V0IHdhcyBzZW50LlxuJiM0MztcdCAqL1xuIFx0bWVtY3B5KGluaXRpYWwsIFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLCBzaXplb2YoKmluaXRpYWwpKTtcbiBcbiYjNDM7XHQvKiBTZW5kIGEgZnJhbWUsIHRoZW4gd2FpdCB0byBlbnRlciBMUEkgKi9cbiBcdHJldCA9IHN0bW1hY190ZXN0X21hY19sb29wYmFjayhwcml2KTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X2ZyZWVfZmluYWw7XG4gXG4mIzQzO1x0bWF4X2R1cmF0aW9uID0gdXNlY3NfdG9famlmZmllcygyICogcHJpdi1cdTAwM2V0eF9scGlfdGltZXIpO1xuJiM0MztcbiBcdC8qIFdlIGhhdmUgbm8gdHJhZmZpYyBpbiB0aGUgbGluZSBzbywgc29vbmVyIG9yIGxhdGVyIGl0IHdpbGwgZ28gTFBJICovXG4tXHR3aGlsZSAoLS1yZXRyaWVzKSB7XG4mIzQzO1x0dGltZW91dCA9IGppZmZpZXMgJiM0MzsgbWF4X2R1cmF0aW9uO1xuJiM0MztcdHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkge1xuIFx0XHRtZW1jcHkoZmluYWwsIFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLCBzaXplb2YoKmZpbmFsKSk7XG4gXG4gXHRcdGlmIChmaW5hbC1cdTAwM2VpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uIFx1MDAzZVxuQEAgLTQ0NiwyMCAmIzQzOzUwMiwzOCBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2VlZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXHRcdG1zbGVlcCgxMDApO1xuIFx0fVxuIFxuLVx0aWYgKCFyZXRyaWVzKSB7XG4mIzQzO1x0bWVtY3B5KGZpbmFsLCBcdTAwMjZwcml2LVx1MDAzZXhzdGF0cywgc2l6ZW9mKCpmaW5hbCkpO1xuJiM0MztcdGlmIChmaW5hbC1cdTAwM2VpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uIFx1MDAzYz1cbiYjNDM7XHQgICAgaW5pdGlhbC1cdTAwM2VpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uKSB7XG4gXHRcdHJldCA9IC1FVElNRURPVVQ7XG4gXHRcdGdvdG8gb3V0X2ZyZWVfZmluYWw7XG4gXHR9XG4gXG4tXHRpZiAoZmluYWwtXHUwMDNlaXJxX3R4X3BhdGhfaW5fbHBpX21vZGVfbiBcdTAwM2M9XG4tXHQgICAgaW5pdGlhbC1cdTAwM2VpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uKSB7XG4tXHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0LyogUmUtc25hcHNob3QsIGFzIHdlIHdhbnQgdG8gbWVhc3VyZSBleGl0X2xwaSBldmVudHMuIFdlIHNob3VsZCBiZVxuJiM0MztcdCAqIGluIExQSSByaWdodCBub3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0bWVtY3B5KGluaXRpYWwsIFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLCBzaXplb2YoKmluaXRpYWwpKTtcbiYjNDM7XG4mIzQzO1x0LyogVFggc29tZXRoaW5nIHNvIHdlIGdvIG91dCBvZiBMUEkgKi9cbiYjNDM7XHRyZXQgPSBzdG1tYWNfdGVzdF9tYWNfbG9vcGJhY2socHJpdik7XG4mIzQzO1x0aWYgKHJldClcbiBcdFx0Z290byBvdXRfZnJlZV9maW5hbDtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgdGhlIGV4aXQgTFBJIGludGVycnVwdCAqL1xuJiM0MztcdHRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IG1heF9kdXJhdGlvbjtcbiYjNDM7XHR3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcbiYjNDM7XHRcdG1lbWNweShmaW5hbCwgXHUwMDI2cHJpdi1cdTAwM2V4c3RhdHMsIHNpemVvZigqZmluYWwpKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZmluYWwtXHUwMDNlaXJxX3R4X3BhdGhfZXhpdF9scGlfbW9kZV9uIFx1MDAzZVxuJiM0MztcdFx0ICAgIGluaXRpYWwtXHUwMDNlaXJxX3R4X3BhdGhfZXhpdF9scGlfbW9kZV9uKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdG1zbGVlcCgxMDApO1xuIFx0fVxuIFxuJiM0MztcdG1lbWNweShmaW5hbCwgXHUwMDI2cHJpdi1cdTAwM2V4c3RhdHMsIHNpemVvZigqZmluYWwpKTtcbiBcdGlmIChmaW5hbC1cdTAwM2VpcnFfdHhfcGF0aF9leGl0X2xwaV9tb2RlX24gXHUwMDNjPVxuIFx0ICAgIGluaXRpYWwtXHUwMDNlaXJxX3R4X3BhdGhfZXhpdF9scGlfbW9kZV9uKSB7XG4tXHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRyZXQgPSAtRVRJTUVET1VUO1xuIFx0XHRnb3RvIG91dF9mcmVlX2ZpbmFsO1xuIFx0fVxuIFxuQEAgLTc2Nyw3ICYjNDM7ODQxLDcgQEAgc3RhdGljIGludCBzdG1tYWNfdGVzdF9mbG93Y3RybChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXHR0cHJpdi1cdTAwM2VwdC5mdW5jID0gc3RtbWFjX3Rlc3RfZmxvd2N0cmxfdmFsaWRhdGU7XG4gXHR0cHJpdi1cdTAwM2VwdC5kZXYgPSBwcml2LVx1MDAzZWRldjtcbiBcdHRwcml2LVx1MDAzZXB0LmFmX3BhY2tldF9wcml2ID0gdHByaXY7XG4tXHRkZXZfYWRkX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuJiM0MztcdHN0bW1hY19zZnRfYWRkX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuIFxuIFx0LyogQ29tcHV0ZSBtaW5pbXVtIG51bWJlciBvZiBwYWNrZXRzIHRvIG1ha2UgRklGTyBmdWxsICovXG4gXHRwa3RfY291bnQgPSByeF9maWZvX3NpemU7XG5AQCAtODIzLDcgJiM0Mzs4OTcsNyBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2Zsb3djdHJsKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBjbGVhbnVwOlxuIFx0ZGV2X21jX2RlbChwcml2LVx1MDAzZWRldiwgcGFkZHIpO1xuIFx0ZGV2X3NldF9wcm9taXNjdWl0eShwcml2LVx1MDAzZWRldiwgLTEpO1xuLVx0ZGV2X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiYjNDM7XHRzdG1tYWNfc2Z0X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiBcdGtmcmVlKHRwcml2KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTkyMSw2ICYjNDM7OTk1LDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X3ZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdHRwcml2LVx1MDAzZXB0LmRldiA9IHByaXYtXHUwMDNlZGV2O1xuIFx0dHByaXYtXHUwMDNlcHQuYWZfcGFja2V0X3ByaXYgPSB0cHJpdjtcbiBcdHRwcml2LVx1MDAzZXBhY2tldCA9IFx1MDAyNmF0dHI7XG4mIzQzO1x0dHByaXYtXHUwMDNlY2FwdHVyZV9hbGwgPSB0cnVlO1xuIFxuIFx0LypcbiBcdCAqIEFzIHdlIHVzZSBIQVNIIGZpbHRlcmluZywgZmFsc2UgcG9zaXRpdmVzIG1heSBhcHBlYXIuIFRoaXMgaXMgYVxuQEAgLTkyOCw3ICYjNDM7MTAwMyw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF92bGFuZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXHQgKiBIQVNIIHZhbHVlcy5cbiBcdCAqL1xuIFx0dHByaXYtXHUwMDNldmxhbl9pZCA9IDB4MTIzO1xuLVx0ZGV2X2FkZF9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiYjNDM7XHRzdG1tYWNfc2Z0X2FkZF9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiBcbiBcdHJldCA9IHZsYW5fdmlkX2FkZChwcml2LVx1MDAzZWRldiwgaHRvbnMoRVRIX1BfODAyMVEpLCB0cHJpdi1cdTAwM2V2bGFuX2lkKTtcbiBcdGlmIChyZXQpXG5AQCAtOTY4LDcgJiM0MzsxMDQzLDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X3ZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiB2bGFuX2RlbDpcbiBcdHZsYW5fdmlkX2RlbChwcml2LVx1MDAzZWRldiwgaHRvbnMoRVRIX1BfODAyMVEpLCB0cHJpdi1cdTAwM2V2bGFuX2lkKTtcbiBjbGVhbnVwOlxuLVx0ZGV2X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiYjNDM7XHRzdG1tYWNfc2Z0X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiBcdGtmcmVlKHRwcml2KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTEwMTUsNiAmIzQzOzEwOTAsNyBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfZHZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdHRwcml2LVx1MDAzZXB0LmRldiA9IHByaXYtXHUwMDNlZGV2O1xuIFx0dHByaXYtXHUwMDNlcHQuYWZfcGFja2V0X3ByaXYgPSB0cHJpdjtcbiBcdHRwcml2LVx1MDAzZXBhY2tldCA9IFx1MDAyNmF0dHI7XG4mIzQzO1x0dHByaXYtXHUwMDNlY2FwdHVyZV9hbGwgPSB0cnVlO1xuIFxuIFx0LypcbiBcdCAqIEFzIHdlIHVzZSBIQVNIIGZpbHRlcmluZywgZmFsc2UgcG9zaXRpdmVzIG1heSBhcHBlYXIuIFRoaXMgaXMgYVxuQEAgLTEwMjIsNyAmIzQzOzEwOTgsNyBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfZHZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdCAqIEhBU0ggdmFsdWVzLlxuIFx0ICovXG4gXHR0cHJpdi1cdTAwM2V2bGFuX2lkID0gMHgxMjM7XG4tXHRkZXZfYWRkX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuJiM0MztcdHN0bW1hY19zZnRfYWRkX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuIFxuIFx0cmV0ID0gdmxhbl92aWRfYWRkKHByaXYtXHUwMDNlZGV2LCBodG9ucyhFVEhfUF84MDIxQUQpLCB0cHJpdi1cdTAwM2V2bGFuX2lkKTtcbiBcdGlmIChyZXQpXG5AQCAtMTA2Miw3ICYjNDM7MTEzOCw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9kdmxhbmZpbHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHZsYW5fZGVsOlxuIFx0dmxhbl92aWRfZGVsKHByaXYtXHUwMDNlZGV2LCBodG9ucyhFVEhfUF84MDIxQUQpLCB0cHJpdi1cdTAwM2V2bGFuX2lkKTtcbiBjbGVhbnVwOlxuLVx0ZGV2X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiYjNDM7XHRzdG1tYWNfc2Z0X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiBcdGtmcmVlKHRwcml2KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTEyOTMsNyAmIzQzOzEzNjksOCBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X3ZsYW5vZmZfY29tbW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgYm9vbCBzdmxhbilcbiBcdHRwcml2LVx1MDAzZXB0LmFmX3BhY2tldF9wcml2ID0gdHByaXY7XG4gXHR0cHJpdi1cdTAwM2VwYWNrZXQgPSBcdTAwMjZhdHRyO1xuIFx0dHByaXYtXHUwMDNldmxhbl9pZCA9IDB4MTIzO1xuLVx0ZGV2X2FkZF9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiYjNDM7XHR0cHJpdi1cdTAwM2VjYXB0dXJlX2FsbCA9IHRydWU7XG4mIzQzO1x0c3RtbWFjX3NmdF9hZGRfcGFjayhcdTAwMjZ0cHJpdi1cdTAwM2VwdCk7XG4gXG4gXHRyZXQgPSB2bGFuX3ZpZF9hZGQocHJpdi1cdTAwM2VkZXYsIGh0b25zKHByb3RvKSwgdHByaXYtXHUwMDNldmxhbl9pZCk7XG4gXHRpZiAocmV0KVxuQEAgLTEzMjAsNyAmIzQzOzEzOTcsNyBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X3ZsYW5vZmZfY29tbW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgYm9vbCBzdmxhbilcbiB2bGFuX2RlbDpcbiBcdHZsYW5fdmlkX2RlbChwcml2LVx1MDAzZWRldiwgaHRvbnMocHJvdG8pLCB0cHJpdi1cdTAwM2V2bGFuX2lkKTtcbiBjbGVhbnVwOlxuLVx0ZGV2X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiYjNDM7XHRzdG1tYWNfc2Z0X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiBcdGtmcmVlKHRwcml2KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTEzMzIsNyAmIzQzOzE0MDksNyBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X3ZsYW5vZmYoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFxuIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3Rfc3ZsYW5vZmYoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbi1cdGlmICghcHJpdi1cdTAwM2VkbWFfY2FwLmR2bGFuKVxuJiM0MztcdGlmICghKHByaXYtXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fU1RBR19UWCkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdHJldHVybiBzdG1tYWNfdGVzdF92bGFub2ZmX2NvbW1vbihwcml2LCB0cnVlKTtcbiB9XG5AQCAtMTY5OSw2ICYjNDM7MTc3Niw5IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9qdW1ibyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUxNiBxdWV1ZSlcbiBcdHN0cnVjdCBzdG1tYWNfcGFja2V0X2F0dHJzIGF0dHIgPSB7IH07XG4gXHRpbnQgc2l6ZSA9IHByaXYtXHUwMDNlZG1hX2NvbmYuZG1hX2J1Zl9zejtcbiBcbiYjNDM7XHRpZiAoIWR3bWFjX2lzX3htYWMocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZSkpXG4mIzQzO1x0XHRzaXplIC09IE5FVF9JUF9BTElHTjtcbiYjNDM7XG4gXHRhdHRyLmRzdCA9IHByaXYtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyO1xuIFx0YXR0ci5tYXhfc2l6ZSA9IHNpemUgLSBFVEhfRkNTX0xFTjtcbiBcdGF0dHIucXVldWVfbWFwcGluZyA9IHF1ZXVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE3OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTVE1pY3JvZWxlY3Ryb25pY3MgLyBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IE1BQyBkcml2ZXIgKHN0bW1hYyksIHNwZWNpZmljYWxseSBidWZmZXIgc2l6ZSBjYWxjdWxhdGlvbiBhbmQgc2VsZnRlc3QgaGVscGVycy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKEFSTS9NSVBTL2V0Yy4gU29DcyBvciBzcGVjaWZpYyBJbnRlbC9Mb29uZ3Nvbi9TeW5vcHN5cyBQQ0kgTklDIGRldmljZXMpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgb24gYW1kNjQsIHJlbmRlcmluZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2E4MDY5NjFlZGMxNDEwMDc4NGRhNzk2NTcwNjAzZGFjOWY3ZTRiZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDE3OjIyOjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMKaW5kZXggNWZlN2U5NWZkZDM0NS4uMzY2NGEyOTg1NzRhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jCkBAIC0xNTM2LDE3ICYjNDM7MTUzNiwxNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHN0bW1hY19yeF9vZmZzZXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogCXJldHVybiBORVRfU0tCX1BBRCAmIzQzOyBORVRfSVBfQUxJR047CiB9CiAKLXN0YXRpYyBpbnQgc3RtbWFjX3NldF9iZnNpemUoaW50IG10dSkKJiM0MztzdGF0aWMgaW50IHN0bW1hY19zZXRfYmZzaXplKGludCBsZW4pCiB7CiAJaW50IHJldDsKIAotCWlmIChtdHUgJmd0Oz0gQlVGX1NJWkVfOEtpQikKJiM0MzsJaWYgKGxlbiAmZ3Q7IEJVRl9TSVpFXzhLaUIpCiAJCXJldCA9IEJVRl9TSVpFXzE2S2lCOwotCWVsc2UgaWYgKG10dSAmZ3Q7PSBCVUZfU0laRV80S2lCKQomIzQzOwllbHNlIGlmIChsZW4gJmd0OyBCVUZfU0laRV80S2lCKQogCQlyZXQgPSBCVUZfU0laRV84S2lCOwotCWVsc2UgaWYgKG10dSAmZ3Q7PSBCVUZfU0laRV8yS2lCKQomIzQzOwllbHNlIGlmIChsZW4gJmd0OyBCVUZfU0laRV8yS2lCKQogCQlyZXQgPSBCVUZfU0laRV80S2lCOwotCWVsc2UgaWYgKG10dSAmZ3Q7IERFRkFVTFRfQlVGU0laRSkKJiM0MzsJZWxzZSBpZiAobGVuICZndDsgREVGQVVMVF9CVUZTSVpFKQogCQlyZXQgPSBCVUZfU0laRV8yS2lCOwogCWVsc2UKIAkJcmV0ID0gREVGQVVMVF9CVUZTSVpFOwpAQCAtNDA2Myw3ICYjNDM7NDA2Myw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX2RtYV9jb25mICoKIHN0bW1hY19zZXR1cF9kbWFfZGVzYyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBtdHUpCiB7CiAJc3RydWN0IHN0bW1hY19kbWFfY29uZiAqZG1hX2NvbmY7Ci0JaW50IGJmc2l6ZSwgcmV0OwomIzQzOwlpbnQgYmZzaXplLCBsZW4sIHJldDsKIAl1OCBjaGFuOwogCiAJZG1hX2NvbmYgPSBremFsbG9jX29iaigqZG1hX2NvbmYpOwpAQCAtNDA3MywxMyAmIzQzOzQwNzMsMTUgQEAgc3RtbWFjX3NldHVwX2RtYV9kZXNjKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IG10dSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQogCi0JLyogUmV0dXJucyAwIG9yIEJVRl9TSVpFXzE2S2lCIGlmIG10dSAmZ3Q7IDhLaUIgYW5kIGR3bWFjNCBvciByaW5nIG1vZGUgKi8KLQliZnNpemUgPSBzdG1tYWNfc2V0XzE2a2liX2Jmc2l6ZShwcml2LCBtdHUpOwomIzQzOwlsZW4gPSBtdHUgJiM0MzsgRVRIX0hMRU4gJiM0MzsgMiAqIFZMQU5fSExFTiAmIzQzOyBFVEhfRkNTX0xFTiAmIzQzOyBORVRfSVBfQUxJR047CiYjNDM7CiYjNDM7CS8qIFJldHVybnMgMCBvciBCVUZfU0laRV8xNktpQiBpZiBsZW4gJmd0OyA4S2lCIGFuZCBkd21hYzQgb3IgcmluZyBtb2RlICovCiYjNDM7CWJmc2l6ZSA9IHN0bW1hY19zZXRfMTZraWJfYmZzaXplKHByaXYsIGxlbik7CiAJaWYgKGJmc2l6ZSAmbHQ7IDApCiAJCWJmc2l6ZSA9IDA7CiAKIAlpZiAoYmZzaXplICZsdDsgQlVGX1NJWkVfMTZLaUIpCi0JCWJmc2l6ZSA9IHN0bW1hY19zZXRfYmZzaXplKG10dSk7CiYjNDM7CQliZnNpemUgPSBzdG1tYWNfc2V0X2Jmc2l6ZShsZW4pOwogCiAJZG1hX2NvbmYtJmd0O2RtYV9idWZfc3ogPSBiZnNpemU7CiAJLyogQ2hvc2UgdGhlIHR4L3J4IHNpemUgZnJvbSB0aGUgYWxyZWFkeSBkZWZpbmVkIG9uZSBpbiB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYwppbmRleCA2MzcyZWM3YzNmMzE3Li5mYzhkNjkyNjBmNDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2V0aHRvb2wuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VkcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvZHNhLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3BrdF9jbHMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvcGt0X3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjcC5oJmd0OwpAQCAtMjM3LDYgJiM0MzsyMzgsMTAgQEAgc3RydWN0IHN0bW1hY190ZXN0X3ByaXYgewogCXN0cnVjdCBzdG1tYWNfcGFja2V0X2F0dHJzICpwYWNrZXQ7CiAJc3RydWN0IHBhY2tldF90eXBlIHB0OwogCXN0cnVjdCBjb21wbGV0aW9uIGNvbXA7CiYjNDM7CV9fYmUxNiBwYWNrZXRfdHlwZTsKJiM0MzsJaW50ICgqZnVuYykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiYjNDM7CQkgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfbmRldik7CiYjNDM7CWJvb2wgY2FwdHVyZV9hbGw7CiAJaW50IGRvdWJsZV92bGFuOwogCWludCB2bGFuX2lkOwogCWludCBvazsKQEAgLTMxNiw2ICYjNDM7MzIxLDUwIEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfbG9vcGJhY2tfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgc3RtbWFjX3NmdF9maWx0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiYjNDM7CQkJICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LAomIzQzOwkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdG1tYWNfdGVzdF9wcml2ICp0cHJpdiA9IHB0LSZndDthZl9wYWNrZXRfcHJpdjsKJiM0MzsJc3RydWN0IGV0aGhkciAqaGRyID0gZXRoX2hkcihza2IpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGhkci0mZ3Q7aF9wcm90byA9PSB0cHJpdi0mZ3Q7cGFja2V0X3R5cGUpIHsKJiM0MzsJCXN0cnVjdCBza19idWZmICpuc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CiYjNDM7CiYjNDM7CQlpZiAobnNrYikKJiM0MzsJCQlyZXQgPSB0cHJpdi0mZ3Q7ZnVuYyhuc2tiLCBuZGV2LCBwdCwgb3JpZ19uZGV2KTsKJiM0MzsJfQomIzQzOwomIzQzOwlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc3RtbWFjX3NmdF9hZGRfcGFjayhzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0KQomIzQzO3sKJiM0MzsJc3RydWN0IHN0bW1hY190ZXN0X3ByaXYgKnRwcml2ID0gcHQtJmd0O2FmX3BhY2tldF9wcml2OwomIzQzOwomIzQzOwlpZiAobmV0ZGV2X3VzZXNfZHNhKHRwcml2LSZndDtwdC5kZXYpIHx8IHRwcml2LSZndDtjYXB0dXJlX2FsbCkgewomIzQzOwkJdHByaXYtJmd0O3BhY2tldF90eXBlID0gdHByaXYtJmd0O3B0LnR5cGU7CiYjNDM7CQl0cHJpdi0mZ3Q7ZnVuYyA9IHRwcml2LSZndDtwdC5mdW5jOwomIzQzOwomIzQzOwkJLyogRFNBIGNvbmR1aXQgd2lsbCByZXBvcnQgRVRIX1BfWERTQSwgc28gb3VyIHBhY2tldCBoYW5kbGVyCiYjNDM7CQkgKiB3b24mIzM5O3QgbWF0Y2guIExldCYjMzk7cyByZWdpc3RlciBhIEVUSF9QX0FMTCBtYXRjaCBhbmQgZmlsdGVyCiYjNDM7CQkgKiBtYW51YWxseSBpbiBzdG1tYWNfc2Z0X2ZpbHRlci4KJiM0MzsJCSAqLwomIzQzOwkJdHByaXYtJmd0O3B0LnR5cGUgPSBodG9ucyhFVEhfUF9BTEwpOwomIzQzOwkJdHByaXYtJmd0O3B0LmZ1bmMgPSBzdG1tYWNfc2Z0X2ZpbHRlcjsKJiM0MzsJCXRwcml2LSZndDtwdC5pZ25vcmVfb3V0Z29pbmcgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldl9hZGRfcGFjayhwdCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHN0bW1hY19zZnRfcmVtb3ZlX3BhY2soc3RydWN0IHBhY2tldF90eXBlICpwdCkKJiM0Mzt7CiYjNDM7CWRldl9yZW1vdmVfcGFjayhwdCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2xvb3BiYWNrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKIAkJCQkgIHN0cnVjdCBzdG1tYWNfcGFja2V0X2F0dHJzICphdHRyKQogewpAQCAtMzM3LDcgJiM0MzszODYsNyBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbG9vcGJhY2soc3RydWN0IHN0bW1hY19wcml2ICpwcml2LAogCXRwcml2LSZndDtwYWNrZXQgPSBhdHRyOwogCiAJaWYgKCFhdHRyLSZndDtkb250X3dhaXQpCi0JCWRldl9hZGRfcGFjaygmYW1wO3Rwcml2LSZndDtwdCk7CiYjNDM7CQlzdG1tYWNfc2Z0X2FkZF9wYWNrKCZhbXA7dHByaXYtJmd0O3B0KTsKIAogCXNrYiA9IHN0bW1hY190ZXN0X2dldF91ZHBfc2tiKHByaXYsIGF0dHIpOwogCWlmICghc2tiKSB7CkBAIC0zNjAsNyAmIzQzOzQwOSw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sb29wYmFjayhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiAKIGNsZWFudXA6CiAJaWYgKCFhdHRyLSZndDtkb250X3dhaXQpCi0JCWRldl9yZW1vdmVfcGFjaygmYW1wO3Rwcml2LSZndDtwdCk7CiYjNDM7CQlzdG1tYWNfc2Z0X3JlbW92ZV9wYWNrKCZhbXA7dHByaXYtJmd0O3B0KTsKIAlrZnJlZSh0cHJpdik7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTQxNCw3ICYjNDM7NDYzLDcgQEAgc3RhdGljIGludCBzdG1tYWNfdGVzdF9tbWMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogc3RhdGljIGludCBzdG1tYWNfdGVzdF9lZWUoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogewogCXN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKmluaXRpYWwsICpmaW5hbDsKLQlpbnQgcmV0cmllcyA9IDEwOwomIzQzOwl1bnNpZ25lZCBsb25nIHRpbWVvdXQsIG1heF9kdXJhdGlvbjsKIAlpbnQgcmV0OwogCiAJaWYgKCFwcml2LSZndDtkbWFfY2FwLmVlZSB8fCAhcHJpdi0mZ3Q7ZWVlX2FjdGl2ZSkKQEAgLTQzMCwxNCAmIzQzOzQ3OSwyMSBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2VlZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiAJCWdvdG8gb3V0X2ZyZWVfaW5pdGlhbDsKIAl9CiAKJiM0MzsJLyogU25hcHNob3Qgc3RhdHMsIHdlIHdhbnQgdG8gY291bnQgdGhlIGluX2xwaSBldmVudHMuIFdlIG1heSBlbnRlcgomIzQzOwkgKiBMUEkganVzdCBhZnRlciB0aGUgcGFja2V0IHdhcyBzZW50LgomIzQzOwkgKi8KIAltZW1jcHkoaW5pdGlhbCwgJmFtcDtwcml2LSZndDt4c3RhdHMsIHNpemVvZigqaW5pdGlhbCkpOwogCiYjNDM7CS8qIFNlbmQgYSBmcmFtZSwgdGhlbiB3YWl0IHRvIGVudGVyIExQSSAqLwogCXJldCA9IHN0bW1hY190ZXN0X21hY19sb29wYmFjayhwcml2KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9mcmVlX2ZpbmFsOwogCiYjNDM7CW1heF9kdXJhdGlvbiA9IHVzZWNzX3RvX2ppZmZpZXMoMiAqIHByaXYtJmd0O3R4X2xwaV90aW1lcik7CiYjNDM7CiAJLyogV2UgaGF2ZSBubyB0cmFmZmljIGluIHRoZSBsaW5lIHNvLCBzb29uZXIgb3IgbGF0ZXIgaXQgd2lsbCBnbyBMUEkgKi8KLQl3aGlsZSAoLS1yZXRyaWVzKSB7CiYjNDM7CXRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IG1heF9kdXJhdGlvbjsKJiM0MzsJd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CiAJCW1lbWNweShmaW5hbCwgJmFtcDtwcml2LSZndDt4c3RhdHMsIHNpemVvZigqZmluYWwpKTsKIAogCQlpZiAoZmluYWwtJmd0O2lycV90eF9wYXRoX2luX2xwaV9tb2RlX24gJmd0OwpAQCAtNDQ2LDIwICYjNDM7NTAyLDM4IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfZWVlKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIAkJbXNsZWVwKDEwMCk7CiAJfQogCi0JaWYgKCFyZXRyaWVzKSB7CiYjNDM7CW1lbWNweShmaW5hbCwgJmFtcDtwcml2LSZndDt4c3RhdHMsIHNpemVvZigqZmluYWwpKTsKJiM0MzsJaWYgKGZpbmFsLSZndDtpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uICZsdDs9CiYjNDM7CSAgICBpbml0aWFsLSZndDtpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uKSB7CiAJCXJldCA9IC1FVElNRURPVVQ7CiAJCWdvdG8gb3V0X2ZyZWVfZmluYWw7CiAJfQogCi0JaWYgKGZpbmFsLSZndDtpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uICZsdDs9Ci0JICAgIGluaXRpYWwtJmd0O2lycV90eF9wYXRoX2luX2xwaV9tb2RlX24pIHsKLQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJLyogUmUtc25hcHNob3QsIGFzIHdlIHdhbnQgdG8gbWVhc3VyZSBleGl0X2xwaSBldmVudHMuIFdlIHNob3VsZCBiZQomIzQzOwkgKiBpbiBMUEkgcmlnaHQgbm93LgomIzQzOwkgKi8KJiM0MzsJbWVtY3B5KGluaXRpYWwsICZhbXA7cHJpdi0mZ3Q7eHN0YXRzLCBzaXplb2YoKmluaXRpYWwpKTsKJiM0MzsKJiM0MzsJLyogVFggc29tZXRoaW5nIHNvIHdlIGdvIG91dCBvZiBMUEkgKi8KJiM0MzsJcmV0ID0gc3RtbWFjX3Rlc3RfbWFjX2xvb3BiYWNrKHByaXYpOwomIzQzOwlpZiAocmV0KQogCQlnb3RvIG91dF9mcmVlX2ZpbmFsOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciB0aGUgZXhpdCBMUEkgaW50ZXJydXB0ICovCiYjNDM7CXRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IG1heF9kdXJhdGlvbjsKJiM0MzsJd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CiYjNDM7CQltZW1jcHkoZmluYWwsICZhbXA7cHJpdi0mZ3Q7eHN0YXRzLCBzaXplb2YoKmZpbmFsKSk7CiYjNDM7CiYjNDM7CQlpZiAoZmluYWwtJmd0O2lycV90eF9wYXRoX2V4aXRfbHBpX21vZGVfbiAmZ3Q7CiYjNDM7CQkgICAgaW5pdGlhbC0mZ3Q7aXJxX3R4X3BhdGhfZXhpdF9scGlfbW9kZV9uKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJbXNsZWVwKDEwMCk7CiAJfQogCiYjNDM7CW1lbWNweShmaW5hbCwgJmFtcDtwcml2LSZndDt4c3RhdHMsIHNpemVvZigqZmluYWwpKTsKIAlpZiAoZmluYWwtJmd0O2lycV90eF9wYXRoX2V4aXRfbHBpX21vZGVfbiAmbHQ7PQogCSAgICBpbml0aWFsLSZndDtpcnFfdHhfcGF0aF9leGl0X2xwaV9tb2RlX24pIHsKLQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCXJldCA9IC1FVElNRURPVVQ7CiAJCWdvdG8gb3V0X2ZyZWVfZmluYWw7CiAJfQogCkBAIC03NjcsNyAmIzQzOzg0MSw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfZmxvd2N0cmwoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogCXRwcml2LSZndDtwdC5mdW5jID0gc3RtbWFjX3Rlc3RfZmxvd2N0cmxfdmFsaWRhdGU7CiAJdHByaXYtJmd0O3B0LmRldiA9IHByaXYtJmd0O2RldjsKIAl0cHJpdi0mZ3Q7cHQuYWZfcGFja2V0X3ByaXYgPSB0cHJpdjsKLQlkZXZfYWRkX3BhY2soJmFtcDt0cHJpdi0mZ3Q7cHQpOwomIzQzOwlzdG1tYWNfc2Z0X2FkZF9wYWNrKCZhbXA7dHByaXYtJmd0O3B0KTsKIAogCS8qIENvbXB1dGUgbWluaW11bSBudW1iZXIgb2YgcGFja2V0cyB0byBtYWtlIEZJRk8gZnVsbCAqLwogCXBrdF9jb3VudCA9IHJ4X2ZpZm9fc2l6ZTsKQEAgLTgyMyw3ICYjNDM7ODk3LDcgQEAgc3RhdGljIGludCBzdG1tYWNfdGVzdF9mbG93Y3RybChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiBjbGVhbnVwOgogCWRldl9tY19kZWwocHJpdi0mZ3Q7ZGV2LCBwYWRkcik7CiAJZGV2X3NldF9wcm9taXNjdWl0eShwcml2LSZndDtkZXYsIC0xKTsKLQlkZXZfcmVtb3ZlX3BhY2soJmFtcDt0cHJpdi0mZ3Q7cHQpOwomIzQzOwlzdG1tYWNfc2Z0X3JlbW92ZV9wYWNrKCZhbXA7dHByaXYtJmd0O3B0KTsKIAlrZnJlZSh0cHJpdik7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTkyMSw2ICYjNDM7OTk1LDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X3ZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIAl0cHJpdi0mZ3Q7cHQuZGV2ID0gcHJpdi0mZ3Q7ZGV2OwogCXRwcml2LSZndDtwdC5hZl9wYWNrZXRfcHJpdiA9IHRwcml2OwogCXRwcml2LSZndDtwYWNrZXQgPSAmYW1wO2F0dHI7CiYjNDM7CXRwcml2LSZndDtjYXB0dXJlX2FsbCA9IHRydWU7CiAKIAkvKgogCSAqIEFzIHdlIHVzZSBIQVNIIGZpbHRlcmluZywgZmFsc2UgcG9zaXRpdmVzIG1heSBhcHBlYXIuIFRoaXMgaXMgYQpAQCAtOTI4LDcgJiM0MzsxMDAzLDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X3ZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIAkgKiBIQVNIIHZhbHVlcy4KIAkgKi8KIAl0cHJpdi0mZ3Q7dmxhbl9pZCA9IDB4MTIzOwotCWRldl9hZGRfcGFjaygmYW1wO3Rwcml2LSZndDtwdCk7CiYjNDM7CXN0bW1hY19zZnRfYWRkX3BhY2soJmFtcDt0cHJpdi0mZ3Q7cHQpOwogCiAJcmV0ID0gdmxhbl92aWRfYWRkKHByaXYtJmd0O2RldiwgaHRvbnMoRVRIX1BfODAyMVEpLCB0cHJpdi0mZ3Q7dmxhbl9pZCk7CiAJaWYgKHJldCkKQEAgLTk2OCw3ICYjNDM7MTA0Myw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF92bGFuZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB2bGFuX2RlbDoKIAl2bGFuX3ZpZF9kZWwocHJpdi0mZ3Q7ZGV2LCBodG9ucyhFVEhfUF84MDIxUSksIHRwcml2LSZndDt2bGFuX2lkKTsKIGNsZWFudXA6Ci0JZGV2X3JlbW92ZV9wYWNrKCZhbXA7dHByaXYtJmd0O3B0KTsKJiM0MzsJc3RtbWFjX3NmdF9yZW1vdmVfcGFjaygmYW1wO3Rwcml2LSZndDtwdCk7CiAJa2ZyZWUodHByaXYpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xMDE1LDYgJiM0MzsxMDkwLDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2R2bGFuZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiAJdHByaXYtJmd0O3B0LmRldiA9IHByaXYtJmd0O2RldjsKIAl0cHJpdi0mZ3Q7cHQuYWZfcGFja2V0X3ByaXYgPSB0cHJpdjsKIAl0cHJpdi0mZ3Q7cGFja2V0ID0gJmFtcDthdHRyOwomIzQzOwl0cHJpdi0mZ3Q7Y2FwdHVyZV9hbGwgPSB0cnVlOwogCiAJLyoKIAkgKiBBcyB3ZSB1c2UgSEFTSCBmaWx0ZXJpbmcsIGZhbHNlIHBvc2l0aXZlcyBtYXkgYXBwZWFyLiBUaGlzIGlzIGEKQEAgLTEwMjIsNyAmIzQzOzEwOTgsNyBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfZHZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIAkgKiBIQVNIIHZhbHVlcy4KIAkgKi8KIAl0cHJpdi0mZ3Q7dmxhbl9pZCA9IDB4MTIzOwotCWRldl9hZGRfcGFjaygmYW1wO3Rwcml2LSZndDtwdCk7CiYjNDM7CXN0bW1hY19zZnRfYWRkX3BhY2soJmFtcDt0cHJpdi0mZ3Q7cHQpOwogCiAJcmV0ID0gdmxhbl92aWRfYWRkKHByaXYtJmd0O2RldiwgaHRvbnMoRVRIX1BfODAyMUFEKSwgdHByaXYtJmd0O3ZsYW5faWQpOwogCWlmIChyZXQpCkBAIC0xMDYyLDcgJiM0MzsxMTM4LDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2R2bGFuZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB2bGFuX2RlbDoKIAl2bGFuX3ZpZF9kZWwocHJpdi0mZ3Q7ZGV2LCBodG9ucyhFVEhfUF84MDIxQUQpLCB0cHJpdi0mZ3Q7dmxhbl9pZCk7CiBjbGVhbnVwOgotCWRldl9yZW1vdmVfcGFjaygmYW1wO3Rwcml2LSZndDtwdCk7CiYjNDM7CXN0bW1hY19zZnRfcmVtb3ZlX3BhY2soJmFtcDt0cHJpdi0mZ3Q7cHQpOwogCWtmcmVlKHRwcml2KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTI5Myw3ICYjNDM7MTM2OSw4IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3Rfdmxhbm9mZl9jb21tb24oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCBib29sIHN2bGFuKQogCXRwcml2LSZndDtwdC5hZl9wYWNrZXRfcHJpdiA9IHRwcml2OwogCXRwcml2LSZndDtwYWNrZXQgPSAmYW1wO2F0dHI7CiAJdHByaXYtJmd0O3ZsYW5faWQgPSAweDEyMzsKLQlkZXZfYWRkX3BhY2soJmFtcDt0cHJpdi0mZ3Q7cHQpOwomIzQzOwl0cHJpdi0mZ3Q7Y2FwdHVyZV9hbGwgPSB0cnVlOwomIzQzOwlzdG1tYWNfc2Z0X2FkZF9wYWNrKCZhbXA7dHByaXYtJmd0O3B0KTsKIAogCXJldCA9IHZsYW5fdmlkX2FkZChwcml2LSZndDtkZXYsIGh0b25zKHByb3RvKSwgdHByaXYtJmd0O3ZsYW5faWQpOwogCWlmIChyZXQpCkBAIC0xMzIwLDcgJiM0MzsxMzk3LDcgQEAgc3RhdGljIGludCBzdG1tYWNfdGVzdF92bGFub2ZmX2NvbW1vbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIGJvb2wgc3ZsYW4pCiB2bGFuX2RlbDoKIAl2bGFuX3ZpZF9kZWwocHJpdi0mZ3Q7ZGV2LCBodG9ucyhwcm90byksIHRwcml2LSZndDt2bGFuX2lkKTsKIGNsZWFudXA6Ci0JZGV2X3JlbW92ZV9wYWNrKCZhbXA7dHByaXYtJmd0O3B0KTsKJiM0MzsJc3RtbWFjX3NmdF9yZW1vdmVfcGFjaygmYW1wO3Rwcml2LSZndDtwdCk7CiAJa2ZyZWUodHByaXYpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xMzMyLDcgJiM0MzsxNDA5LDcgQEAgc3RhdGljIGludCBzdG1tYWNfdGVzdF92bGFub2ZmKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIAogc3RhdGljIGludCBzdG1tYWNfdGVzdF9zdmxhbm9mZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB7Ci0JaWYgKCFwcml2LSZndDtkbWFfY2FwLmR2bGFuKQomIzQzOwlpZiAoIShwcml2LSZndDtkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfVkxBTl9TVEFHX1RYKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCXJldHVybiBzdG1tYWNfdGVzdF92bGFub2ZmX2NvbW1vbihwcml2LCB0cnVlKTsKIH0KQEAgLTE2OTksNiAmIzQzOzE3NzYsOSBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfanVtYm8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB1MTYgcXVldWUpCiAJc3RydWN0IHN0bW1hY19wYWNrZXRfYXR0cnMgYXR0ciA9IHsgfTsKIAlpbnQgc2l6ZSA9IHByaXYtJmd0O2RtYV9jb25mLmRtYV9idWZfc3o7CiAKJiM0MzsJaWYgKCFkd21hY19pc194bWFjKHByaXYtJmd0O3BsYXQtJmd0O2NvcmVfdHlwZSkpCiYjNDM7CQlzaXplIC09IE5FVF9JUF9BTElHTjsKJiM0MzsKIAlhdHRyLmRzdCA9IHByaXYtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHI7CiAJYXR0ci5tYXhfc2l6ZSA9IHNpemUgLSBFVEhfRkNTX0xFTjsKIAlhdHRyLnF1ZXVlX21hcHBpbmcgPSBxdWV1ZTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTc6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMzMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaXMgZXZlbiAqd29ydGgqIGZ1enppbmcgKFdvcnRoRnV6emluZz10cnVlL2ZhbHNlKS4gUmlnaHQgbm93LCBJJiMzOTttIGxlYW5pbmcgdG93YXJkICYjMzQ7dHJ1ZSwmIzM0OyBidXQgbGV0JiMzOTtzIGJlIG1ldGhvZGljYWwuIE15IGltbWVkaWF0ZSBjb25jZXJucyBhcmU6IHdoYXQgY29kZSBpcyBtb2RpZmllZD8gV2hlcmUgZG9lcyBpdCBmaXQgaW50byB0aGUgc3lzdGVtPwoKTG9va2luZyBhdCB0aGUgZmlsZSBjaGFuZ2VzLCB3ZSBoYXZlOgoKKiAgIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jYAoqICAgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuY2AKClJpZ2h0IGF3YXksIHRoaXMgbG9va3MgaW50ZXJlc3RpbmcuIFdlJiMzOTtyZSBpbiB0aGUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIE11bHRpLUdpZ2FiaXQgRXRoZXJuZXQgLyBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IE1BQyBkcml2ZXIsIG9yIGBzdG1tYWNgLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgbmV0d29ya2luZyBjb2RlLCBlc3BlY2lhbGx5IGF0IHRoZSBkcml2ZXIgbGV2ZWwsIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nIGJlY2F1c2Ugb2YgYWxsIHRoZSBwb3RlbnRpYWwgZm9yIGNvbXBsZXggcGFja2V0IHByb2Nlc3NpbmcgYW5kIGV4dGVybmFsIGlucHV0LiBCdXQgbGV0JiMzOTtzIHZlcmlmeSBteSBhc3N1bXB0aW9ucy4KCk5vdywgbXkgbmV4dCBxdWVzdGlvbnMgc3RhcnQgcG9wcGluZyB1cDogSXMgdGhpcyBhIHZpcnR1YWxpemVkIGRyaXZlciwgZW11bGF0ZWQgd2l0aGluIFFFTVUvR0NFIG9yIHN0YW5kYXJkIHN5emthbGxlciB0ZXN0YmVkcywgb3IgaXMgdGhpcyBhIHBoeXNpY2FsIGhhcmR3YXJlIC8gU29DIGRyaXZlciAvIFBDSSBkcml2ZXI/IFRoaXMgaXMgaW1wb3J0YW50LiBJZiBpdCYjMzk7cyB2aXJ0dWFsaXplZCwgZnV6emluZyBpcyB1c3VhbGx5IHN0cmFpZ2h0Zm9yd2FyZC4gSWYgaXQmIzM5O3MgcGh5c2ljYWwgaGFyZHdhcmUsIGl0IGFkZHMgYSBsYXllciBvZiBjb21wbGV4aXR5IChhbmQgcG90ZW50aWFsbHkgZ3JlYXRlciB2YWx1ZSkuIEkgbmVlZCB0byBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ2AgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgcHJvYmVzLiBUaGlzIHdpbGwgaGVscCBtZSB0byBkZWNpZGUgdGhlIEZvY3VzU3ltYm9scyBhbmQgRW5hYmxlQ29uZmlncyBuZWVkZWQgdG8gZnV6ei4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1RNTUFDXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6Mjpjb25maWcgU1RNTUFDX0VUSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U1RNaWNyb2VsZWN0cm9uaWNzIE11bHRpLUdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0xOD1pZiBTVE1NQUNfRVRIXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyMDpjb25maWcgU1RNTUFDX1NFTEZURVNUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgU1RNTUFDIFNlbGZ0ZXN0c1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjI5OmNvbmZpZyBTVE1NQUNfUExBVEZPUk1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMzAtXHR0cmlzdGF0ZSBcJiMzNDtTVE1NQUMgUGxhdGZvcm0gYnVzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM3MT1lbmRpZiAjIFNUTU1BQ19QTEFURk9STVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zNzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjM3Mzpjb25maWcgU1RNTUFDX0xJQlBDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zNzQtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9Mzk4PWNvbmZpZyBEV01BQ19NT1RPUkNPTU1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTQwNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6NDA3OmNvbmZpZyBTVE1NQUNfUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTQwOC1cdHRyaXN0YXRlIFwmIzM0O1NUTU1BQyBQQ0kgYnVzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDY2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBzdG1tYWNgIERyaXZlciYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgc3RtbWFjYCwgdGhlIEV0aGVybmV0IE1BQyBkcml2ZXIsIHRhcmdldHMgU3lub3BzeXMgRGVzaWduV2FyZSBNQUMgSVBzLCBmcmVxdWVudGx5IGZvdW5kIG9uIEFSTSBTb0NzIGFuZCBzb21lIFBDSSBkZXZpY2VzLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYHN0bW1hY2AgaXMgZXZlbiBhY2Nlc3NpYmxlIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQsIG9yIGlmIGl0JiMzOTtzIHN0cmljdGx5IHRpZWQgdG8gcGh5c2ljYWwgaGFyZHdhcmUuCgpUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucywgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBhcHBsaWVzLiBTcGVjaWZpY2FsbHksIGl0IG1lbnRpb25zICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgb3IgdGhvc2UgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcy4gU28sIGlzIHRoZSBEZXNpZ25XYXJlIE1BQyBlbXVsYXRlZCwgb3IgaXMgaXQgaGFyZHdhcmUtZGVwZW5kZW50PwoKTm93LCBsZXQmIzM5O3MgZXhwbG9yZSBRRU1VJiMzOTtzIGVtdWxhdGlvbiBjYXBhYmlsaXRpZXMuIERvIGFueSBRRU1VIG1hY2hpbmUgdHlwZXMsIGxpa2UgYGFsbHdpbm5lci1hMTAtZW1hY2Agb3IgYHN0bTMyZjQwNWAsIGVtdWxhdGUgdGhlIERlc2lnbldhcmUgTUFDPyBUaGUgZmFjdCB0aGF0IFNUTTMyIGlzIG1lbnRpb25lZCBpcyBpbnRlcmVzdGluZywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyByZWxldmFudCB0byBhbiBhbWQ2NCB0YXJnZXQuIENhbiBJIHByb2JlIGBzdG1tYWNgIGluIGEgc3RhbmRhcmQgUUVNVS9hbWQ2NCBlbnZpcm9ubWVudCwgb3IgYW0gSSBzdHVjayB3aXRoIHBoeXNpY2FsIGhhcmR3YXJlPwoKVG8gYW5zd2VyIHRoaXMgY29uY2x1c2l2ZWx5LCBJIG5lZWQgdG8gY2hlY2sgaG93IGBzdG1tYWNgIGludGVyYWN0cyB3aXRoIFBDSS4gV2hhdCBQQ0kgSURzIGRvZXMgYFNUTU1BQ19QQ0lgIG1hdGNoPyBUaW1lIHRvIGNoZWNrIGBzdG1tYWNfcGNpLmNgIHRvIHNlZSBpZiB0aGlzIGRyaXZlciBpcyBldmVuIHJlbGV2YW50IGZvciB0aGUgc3RhbmRhcmQgeDg2IFFFTVUgZW52aXJvbm1lbnQuIFRoaXMgd2lsbCBjb25maXJtIHdoZXRoZXIgdGhpcyBpcyBhIGZydWl0ZnVsIGFyZWEgb2YgZnV6emluZyBleHBsb3JhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQQ0lfREVWSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMzYyPXN0YXRpYyB2b2lkIGludGVsX2V0aF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTM3My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM3NDojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUVVBUktcdFx0MHgwOTM3XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzNzU6I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VITF9SR01JSTFHXHRcdDB4NGIzMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzc2OiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FSExfU0dNSUkxR1x0XHQweDRiMzFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM3NzojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRUhMX1NHTUlJMkc1XHQweDRiMzJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTM3OC0vKiBJbnRlbChSKSBQcm9ncmFtbWFibGUgU2VydmljZXMgRW5naW5lIChJbnRlbChSKSBQU0UpIGNvbnNpc3Qgb2YgMiBNQUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzODAtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzODE6I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VITF9QU0UwX1JHTUlJMUdcdDB4NGJhMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzgyOiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FSExfUFNFMF9TR01JSTFHXHQweDRiYTFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM4MzojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRUhMX1BTRTBfU0dNSUkyRzVcdDB4NGJhMlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzg0OiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FSExfUFNFMV9SR01JSTFHXHQweDRiYjBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM4NTojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRUhMX1BTRTFfU0dNSUkxR1x0MHg0YmIxXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzODY6I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VITF9QU0UxX1NHTUlJMkc1XHQweDRiYjJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM4NzojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfVEdMSF9TR01JSTFHXzBcdDB4NDNhY1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzg4OiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9UR0xIX1NHTUlJMUdfMVx0MHg0M2EyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzODk6I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1RHTF9TR01JSTFHXHRcdDB4YTBhY1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzkwOiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9BRExTX1NHTUlJMUdfMFx0MHg3YWFjXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzOTE6I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0FETFNfU0dNSUkxR18xXHQweDdhYWRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM5MjojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfQURMTl9TR01JSTFHXHQweDU0YWNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM5MzojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUlBMUF9TR01JSTFHXHQweDUxYWNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTM5NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9MTM5NT1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaW50ZWxfZXRoX3BjaV9pZF90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzk2Olx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIFFVQVJLLCBcdTAwMjZxdWFya19pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzk3Olx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9SR01JSTFHLCBcdTAwMjZlaGxfcmdtaWkxZ19pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzk4Olx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9TR01JSTFHLCBcdTAwMjZlaGxfc2dtaWkxZ19pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzk5Olx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9TR01JSTJHNSwgXHUwMDI2ZWhsX3NnbWlpMWdfaW5mbykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTQwMDpcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfUFNFMF9SR01JSTFHLCBcdTAwMjZlaGxfcHNlMF9yZ21paTFnX2luZm8pIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjE0MDE6XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1BTRTBfU0dNSUkxRywgXHUwMDI2ZWhsX3BzZTBfc2dtaWkxZ19pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDAyOlx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9QU0UwX1NHTUlJMkc1LCBcdTAwMjZlaGxfcHNlMF9zZ21paTFnX2luZm8pIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjE0MDM6XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1BTRTFfUkdNSUkxRywgXHUwMDI2ZWhsX3BzZTFfcmdtaWkxZ19pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDA0Olx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9QU0UxX1NHTUlJMUcsIFx1MDAyNmVobF9wc2UxX3NnbWlpMWdfaW5mbykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTQwNTpcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfUFNFMV9TR01JSTJHNSwgXHUwMDI2ZWhsX3BzZTFfc2dtaWkxZ19pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDA2Olx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIFRHTF9TR01JSTFHLCBcdTAwMjZ0Z2xfc2dtaWkxZ19waHkwX2luZm8pIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjE0MDc6XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgVEdMSF9TR01JSTFHXzAsIFx1MDAyNnRnbF9zZ21paTFnX3BoeTBfaW5mbykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTQwODpcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBUR0xIX1NHTUlJMUdfMSwgXHUwMDI2dGdsX3NnbWlpMWdfcGh5MV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDA5Olx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEFETFNfU0dNSUkxR18wLCBcdTAwMjZhZGxzX3NnbWlpMWdfcGh5MF9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDEwOlx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEFETFNfU0dNSUkxR18xLCBcdTAwMjZhZGxzX3NnbWlpMWdfcGh5MV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDExOlx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEFETE5fU0dNSUkxRywgXHUwMDI2YWRsbl9zZ21paTFnX3BoeTBfaW5mbykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTQxMjpcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBSUExQX1NHTUlJMUcsIFx1MDAyNmFkbG5fc2dtaWkxZ19waHkwX2luZm8pIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTE0MTMtXHR7fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjcwOiNkZWZpbmUgUENJX0RFVklDRV9JRF9MT09OR1NPTl9HTUFDMVx0MHg3YTAzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjcxOiNkZWZpbmUgUENJX0RFVklDRV9JRF9MT09OR1NPTl9HTUFDMlx0MHg3YTIzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjcyOiNkZWZpbmUgUENJX0RFVklDRV9JRF9MT09OR1NPTl9HTkVUXHQweDdhMTNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNzMtI2RlZmluZSBEV01BQ19DT1JFX01VTFRJQ0hBTl9WMVx0MHgxMFx0LyogTG9vbmdzb24gY3VzdG9tIElEIDB4MTAgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTMwNj1zdGF0aWMgaW50IGxvb25nc29uX2R3bWFjX3NldHVwKHZvaWQgKmFwcml2LCBzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0zNTEtXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6MzUyOlx0aWYgKHBkZXYtXHUwMDNlZGV2aWNlICE9IFBDSV9ERVZJQ0VfSURfTE9PTkdTT05fR05FVCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0zNTMtXHRcdG1hYy1cdTAwM2VsaW5rLmNhcHMgPSBNQUNfMTAgfCBNQUNfMTAwIHwgTUFDXzEwMDA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz01OTY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGxvb25nc29uX2R3bWFjX2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjU5NzpcdHsgUENJX0RFVklDRV9EQVRBKExPT05HU09OLCBHTUFDMSwgXHUwMDI2bG9vbmdzb25fZ21hY19wY2lfaW5mbykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTk4Olx0eyBQQ0lfREVWSUNFX0RBVEEoTE9PTkdTT04sIEdNQUMyLCBcdTAwMjZsb29uZ3Nvbl9nbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1OTk6XHR7IFBDSV9ERVZJQ0VfREFUQShMT09OR1NPTiwgR05FVCwgXHUwMDI2bG9vbmdzb25fZ25ldF9wY2lfaW5mbykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNjAwLVx0e31cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYz0zNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGR3bWFjX21vdG9yY29tbV9wY2lfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jOjM2ODpcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01PVE9SQ09NTSwgMHg2ODAxKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMzY5LVx0eyB9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xOTI9c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDA6I2RlZmluZSBQQ0lfREVWSUNFX0lEX1NUTU1BQ19TVE1NQUNcdFx0MHgxMTA4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjAxOiNkZWZpbmUgUENJX0RFVklDRV9JRF9TWU5PUFNZU19HTUFDNV9JRFx0XHQweDcxMDJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdG1tYWNfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDQ6XHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNTpcdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNjpcdHsgUENJX0RFVklDRV9EQVRBKFNZTk9QU1lTLCBHTUFDNV9JRCwgXHUwMDI2c25wc19nbWFjNV9wY2lfaW5mbykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMDctXHR7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzE4CgkJCQkJCQlvdXRwdXQ6IDExOQoJCQkJCQkJdGhvdWdodHM6IDYxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBOb3QgV29ydGggRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaXMgc3VpdGFibGUgZm9yIGZ1enppbmcuIEZpcnN0LCBJIHNlZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBzdG1tYWNgIGRyaXZlcnMuIFJpZ2h0IGF3YXksIG15IGtub3dsZWRnZSBraWNrcyBpbjogdGhlc2UgYXJlIGhhcmR3YXJlIGRyaXZlcnMsIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgcGh5c2ljYWwgRXRoZXJuZXQgTUFDIGNvbnRyb2xsZXJzIOKAkyBjaGlwcyBmcm9tIFN5bm9wc3lzIERlc2lnbldhcmUsIGludGVncmF0ZWQgaW50byBTb0NzIG9yIGNvbm5lY3RlZCB2aWEgUENJLiBJbnRlbCBFSEwvVEdML0FETCwgU3lub3BzeXMgR01BQywgTG9vbmdzb24sIE1vdG9yY29tbSwgYW5kIHZhcmlvdXMgQVJNL01JUFMgU29DcyBhcmUgbWVudGlvbmVkLCBhbmQgSSAqa25vdyogdGhvc2UgYXJlbiYjMzk7dCB0aGluZ3MgdHlwaWNhbGx5IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIGVudmlyb25tZW50cywgd2hpY2ggYXJlIHdoYXQgc3l6a2FsbGVyIHVzdWFsbHkgbGV2ZXJhZ2VzLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyAqYW55KiB2aXJ0dWFsIG9yIGVtdWxhdGVkIGVxdWl2YWxlbnQg4oCTIHNvbWV0aGluZyBsaWtlIGBuZXRraXRgLCBgZHVtbXlgLCBgdmV0aGAsIGB0YXBgLCBgdHVuYCwgYG1hY3Z0YXBgLCBgbG9vcGJhY2tgLCBvciBgdmlydGlvLW5ldGAgZm9yIGBzdG1tYWNgLiBOb3BlLiBJdCYjMzk7cyBzdHJpY3RseSBmb3IgcGh5c2ljYWwgaGFyZHdhcmUuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHdoYXQmIzM5O3MgYmVlbiBtb2RpZmllZC4gVGhlIHBhdGNoIGlzIHZlcnkgZm9jdXNlZCDigJMganVzdCBgc3RtbWFjX21haW4uY2AgYW5kIGBzdG1tYWNfc2VsZnRlc3RzLmNgLiBUaGF0IG5hcnJvd3MgdGhlIHNjb3BlIHNpZ25pZmljYW50bHkuCgpOb3csIEkmIzM5O2xsIGFwcGx5IHRoZSBzcGVjaWZpYyBjcml0ZXJpYSBkZWZpbmVkIGluIFNlY3Rpb24gMi4gVGhlIGNvcmUgb2YgaXQgYm9pbHMgZG93biB0byBjaGVja2luZyBpZiB0aGUgbW9kaWZpZWQgY29kZSBmYWxscyBpbnRvIHRoZSAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7IGNhdGVnb3J5LiBMZXQmIzM5O3Mgc2VlLi4uIGEgdmVuZG9yLXNwZWNpZmljIEV0aGVybmV0IE1BQyBkcml2ZXIgKHN0bWljcm8gLyBzdG1tYWMpIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSwgb3IgYW4gQVNJQy9QQ0llL1NvQywgd2hpY2ggaXNuJiMzOTt0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVU/IEJpbmdvISBUaGF0JiMzOTtzIGEgcGVyZmVjdCBmaXQuCgpUaGVyZWZvcmU6CgoqICAgYFdvcnRoRnV6emluZ2A6IGZhbHNlIOKAkyBCZWNhdXNlIHRoaXMgY29kZSBpcyBpbmhlcmVudGx5IHRpZWQgdG8gcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy4KKiAgIGBGb2N1c1N5bWJvbHNgOiBcWyBdIOKAkyBObyByZWxldmFudCBzeW1ib2xzIHRvIGZvY3VzIG9uIHNpbmNlIHRoZSBkcml2ZXIgaXMgdW5yZWFjaGFibGUuCiogICBgRW5hYmxlQ29uZmlnc2A6IFxbIF0g4oCTIE5vdCBhcHBsaWNhYmxlLCB0aGUgZHJpdmVyIGlzIG5vdCBhcHBsaWNhYmxlLgoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIC8gU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBNQUMgZHJpdmVyIChzdG1tYWMpLCBzcGVjaWZpY2FsbHkgYnVmZmVyIHNpemUgY2FsY3VsYXRpb24gZm9yIE1UVSBjb25maWd1cmF0aW9uIGFuZCBldGh0b29sIHNlbGZ0ZXN0cy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKFNvQyBNQUMgb3Igc3BlY2lmaWMgUENJIGRldmljZXMpIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBRRU1VL3N5emthbGxlciBmdXp6aW5nIGVudmlyb25tZW50cyBvbiBhbWQ2NCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgZXZlcnl0aGluZyBvbmUgbGFzdCB0aW1lLiBBbGwgdGhlIGNyaXRlcmlhIGFyZSBtZXQgZm9yIG1ha2luZyB0aGlzIGEgJiMzNDtuby1nbyYjMzQ7IGZvciBmdXp6aW5nIGluIHRoZSBzdGFuZGFyZCBzZXR1cC4KCk9rYXksIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTc6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIC8gU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBNQUMgZHJpdmVyIChzdG1tYWMpLCBzcGVjaWZpY2FsbHkgYnVmZmVyIHNpemUgY2FsY3VsYXRpb24gYW5kIHNlbGZ0ZXN0IGhlbHBlcnMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChBUk0vTUlQUy9ldGMuIFNvQ3Mgb3Igc3BlY2lmaWMgSW50ZWwvTG9vbmdzb24vU3lub3BzeXMgUENJIE5JQyBkZXZpY2VzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIG9uIGFtZDY0LCByZW5kZXJpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNUTWljcm9lbGVjdHJvbmljcyAvIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIGRyaXZlciAoc3RtbWFjKSwgc3BlY2lmaWNhbGx5IGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9uIGFuZCBzZWxmdGVzdCBoZWxwZXJzLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoQVJNL01JUFMvZXRjLiBTb0NzIG9yIHNwZWNpZmljIEludGVsL0xvb25nc29uL1N5bm9wc3lzIFBDSSBOSUMgZGV2aWNlcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBvbiBhbWQ2NCwgcmVuZGVyaW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTc6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE3OjIyOjEzLjIyNjkyMDY0M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4Mzc0MDM0OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNUTWljcm9lbGVjdHJvbmljcyAvIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIGRyaXZlciAoc3RtbWFjKSwgc3BlY2lmaWNhbGx5IGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9uIGFuZCBzZWxmdGVzdCBoZWxwZXJzLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoQVJNL01JUFMvZXRjLiBTb0NzIG9yIHNwZWNpZmljIEludGVsL0xvb25nc29uL1N5bm9wc3lzIFBDSSBOSUMgZGV2aWNlcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBvbiBhbWQ2NCwgcmVuZGVyaW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE3OjIyOjEzLjIyNjkyNjcxM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg5OTE1MTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2E4MDY5NjFlZGMxNDEwMDc4NGRhNzk2NTcwNjAzZGFjOWY3ZTRiZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAxNzoyMjoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xcbmluZGV4IDVmZTdlOTVmZGQzNDUuLjM2NjRhMjk4NTc0YWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcXG5AQCAtMTUzNiwxNyArMTUzNiwxNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHN0bW1hY19yeF9vZmZzZXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiBcXHRyZXR1cm4gTkVUX1NLQl9QQUQgKyBORVRfSVBfQUxJR047XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgc3RtbWFjX3NldF9iZnNpemUoaW50IG10dSlcXG4rc3RhdGljIGludCBzdG1tYWNfc2V0X2Jmc2l6ZShpbnQgbGVuKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAobXR1IFxcdTAwM2U9IEJVRl9TSVpFXzhLaUIpXFxuK1xcdGlmIChsZW4gXFx1MDAzZSBCVUZfU0laRV84S2lCKVxcbiBcXHRcXHRyZXQgPSBCVUZfU0laRV8xNktpQjtcXG4tXFx0ZWxzZSBpZiAobXR1IFxcdTAwM2U9IEJVRl9TSVpFXzRLaUIpXFxuK1xcdGVsc2UgaWYgKGxlbiBcXHUwMDNlIEJVRl9TSVpFXzRLaUIpXFxuIFxcdFxcdHJldCA9IEJVRl9TSVpFXzhLaUI7XFxuLVxcdGVsc2UgaWYgKG10dSBcXHUwMDNlPSBCVUZfU0laRV8yS2lCKVxcbitcXHRlbHNlIGlmIChsZW4gXFx1MDAzZSBCVUZfU0laRV8yS2lCKVxcbiBcXHRcXHRyZXQgPSBCVUZfU0laRV80S2lCO1xcbi1cXHRlbHNlIGlmIChtdHUgXFx1MDAzZSBERUZBVUxUX0JVRlNJWkUpXFxuK1xcdGVsc2UgaWYgKGxlbiBcXHUwMDNlIERFRkFVTFRfQlVGU0laRSlcXG4gXFx0XFx0cmV0ID0gQlVGX1NJWkVfMktpQjtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyZXQgPSBERUZBVUxUX0JVRlNJWkU7XFxuQEAgLTQwNjMsNyArNDA2Myw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX2RtYV9jb25mICpcXG4gc3RtbWFjX3NldHVwX2RtYV9kZXNjKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IG10dSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgc3RtbWFjX2RtYV9jb25mICpkbWFfY29uZjtcXG4tXFx0aW50IGJmc2l6ZSwgcmV0O1xcbitcXHRpbnQgYmZzaXplLCBsZW4sIHJldDtcXG4gXFx0dTggY2hhbjtcXG4gXFxuIFxcdGRtYV9jb25mID0ga3phbGxvY19vYmooKmRtYV9jb25mKTtcXG5AQCAtNDA3MywxMyArNDA3MywxNSBAQCBzdG1tYWNfc2V0dXBfZG1hX2Rlc2Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgbXR1KVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gXFx0fVxcbiBcXG4tXFx0LyogUmV0dXJucyAwIG9yIEJVRl9TSVpFXzE2S2lCIGlmIG10dSBcXHUwMDNlIDhLaUIgYW5kIGR3bWFjNCBvciByaW5nIG1vZGUgKi9cXG4tXFx0YmZzaXplID0gc3RtbWFjX3NldF8xNmtpYl9iZnNpemUocHJpdiwgbXR1KTtcXG4rXFx0bGVuID0gbXR1ICsgRVRIX0hMRU4gKyAyICogVkxBTl9ITEVOICsgRVRIX0ZDU19MRU4gKyBORVRfSVBfQUxJR047XFxuK1xcbitcXHQvKiBSZXR1cm5zIDAgb3IgQlVGX1NJWkVfMTZLaUIgaWYgbGVuIFxcdTAwM2UgOEtpQiBhbmQgZHdtYWM0IG9yIHJpbmcgbW9kZSAqL1xcbitcXHRiZnNpemUgPSBzdG1tYWNfc2V0XzE2a2liX2Jmc2l6ZShwcml2LCBsZW4pO1xcbiBcXHRpZiAoYmZzaXplIFxcdTAwM2MgMClcXG4gXFx0XFx0YmZzaXplID0gMDtcXG4gXFxuIFxcdGlmIChiZnNpemUgXFx1MDAzYyBCVUZfU0laRV8xNktpQilcXG4tXFx0XFx0YmZzaXplID0gc3RtbWFjX3NldF9iZnNpemUobXR1KTtcXG4rXFx0XFx0YmZzaXplID0gc3RtbWFjX3NldF9iZnNpemUobGVuKTtcXG4gXFxuIFxcdGRtYV9jb25mLVxcdTAwM2VkbWFfYnVmX3N6ID0gYmZzaXplO1xcbiBcXHQvKiBDaG9zZSB0aGUgdHgvcnggc2l6ZSBmcm9tIHRoZSBhbHJlYWR5IGRlZmluZWQgb25lIGluIHRoZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcXG5pbmRleCA2MzcyZWM3YzNmMzE3Li5mYzhkNjkyNjBmNDMxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuY1xcbkBAIC0xMiw2ICsxMiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWRwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvZHNhLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9zY2hlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjcC5oXFx1MDAzZVxcbkBAIC0yMzcsNiArMjM4LDEwIEBAIHN0cnVjdCBzdG1tYWNfdGVzdF9wcml2IHtcXG4gXFx0c3RydWN0IHN0bW1hY19wYWNrZXRfYXR0cnMgKnBhY2tldDtcXG4gXFx0c3RydWN0IHBhY2tldF90eXBlIHB0O1xcbiBcXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xcbitcXHRfX2JlMTYgcGFja2V0X3R5cGU7XFxuK1xcdGludCAoKmZ1bmMpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbitcXHRcXHQgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfbmRldik7XFxuK1xcdGJvb2wgY2FwdHVyZV9hbGw7XFxuIFxcdGludCBkb3VibGVfdmxhbjtcXG4gXFx0aW50IHZsYW5faWQ7XFxuIFxcdGludCBvaztcXG5AQCAtMzE2LDYgKzMyMSw1MCBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2xvb3BiYWNrX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHN0bW1hY19zZnRfZmlsdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfbmRldilcXG4re1xcbitcXHRzdHJ1Y3Qgc3RtbWFjX3Rlc3RfcHJpdiAqdHByaXYgPSBwdC1cXHUwMDNlYWZfcGFja2V0X3ByaXY7XFxuK1xcdHN0cnVjdCBldGhoZHIgKmhkciA9IGV0aF9oZHIoc2tiKTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRpZiAoaGRyLVxcdTAwM2VoX3Byb3RvID09IHRwcml2LVxcdTAwM2VwYWNrZXRfdHlwZSkge1xcbitcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xcbitcXG4rXFx0XFx0aWYgKG5za2IpXFxuK1xcdFxcdFxcdHJldCA9IHRwcml2LVxcdTAwM2VmdW5jKG5za2IsIG5kZXYsIHB0LCBvcmlnX25kZXYpO1xcbitcXHR9XFxuK1xcbitcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc3RtbWFjX3NmdF9hZGRfcGFjayhzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0KVxcbit7XFxuK1xcdHN0cnVjdCBzdG1tYWNfdGVzdF9wcml2ICp0cHJpdiA9IHB0LVxcdTAwM2VhZl9wYWNrZXRfcHJpdjtcXG4rXFxuK1xcdGlmIChuZXRkZXZfdXNlc19kc2EodHByaXYtXFx1MDAzZXB0LmRldikgfHwgdHByaXYtXFx1MDAzZWNhcHR1cmVfYWxsKSB7XFxuK1xcdFxcdHRwcml2LVxcdTAwM2VwYWNrZXRfdHlwZSA9IHRwcml2LVxcdTAwM2VwdC50eXBlO1xcbitcXHRcXHR0cHJpdi1cXHUwMDNlZnVuYyA9IHRwcml2LVxcdTAwM2VwdC5mdW5jO1xcbitcXG4rXFx0XFx0LyogRFNBIGNvbmR1aXQgd2lsbCByZXBvcnQgRVRIX1BfWERTQSwgc28gb3VyIHBhY2tldCBoYW5kbGVyXFxuK1xcdFxcdCAqIHdvbid0IG1hdGNoLiBMZXQncyByZWdpc3RlciBhIEVUSF9QX0FMTCBtYXRjaCBhbmQgZmlsdGVyXFxuK1xcdFxcdCAqIG1hbnVhbGx5IGluIHN0bW1hY19zZnRfZmlsdGVyLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dHByaXYtXFx1MDAzZXB0LnR5cGUgPSBodG9ucyhFVEhfUF9BTEwpO1xcbitcXHRcXHR0cHJpdi1cXHUwMDNlcHQuZnVuYyA9IHN0bW1hY19zZnRfZmlsdGVyO1xcbitcXHRcXHR0cHJpdi1cXHUwMDNlcHQuaWdub3JlX291dGdvaW5nID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0ZGV2X2FkZF9wYWNrKHB0KTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc3RtbWFjX3NmdF9yZW1vdmVfcGFjayhzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0KVxcbit7XFxuK1xcdGRldl9yZW1vdmVfcGFjayhwdCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sb29wYmFjayhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IHN0bW1hY19wYWNrZXRfYXR0cnMgKmF0dHIpXFxuIHtcXG5AQCAtMzM3LDcgKzM4Niw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sb29wYmFjayhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuIFxcdHRwcml2LVxcdTAwM2VwYWNrZXQgPSBhdHRyO1xcbiBcXG4gXFx0aWYgKCFhdHRyLVxcdTAwM2Vkb250X3dhaXQpXFxuLVxcdFxcdGRldl9hZGRfcGFjayhcXHUwMDI2dHByaXYtXFx1MDAzZXB0KTtcXG4rXFx0XFx0c3RtbWFjX3NmdF9hZGRfcGFjayhcXHUwMDI2dHByaXYtXFx1MDAzZXB0KTtcXG4gXFxuIFxcdHNrYiA9IHN0bW1hY190ZXN0X2dldF91ZHBfc2tiKHByaXYsIGF0dHIpO1xcbiBcXHRpZiAoIXNrYikge1xcbkBAIC0zNjAsNyArNDA5LDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2xvb3BiYWNrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4gXFxuIGNsZWFudXA6XFxuIFxcdGlmICghYXR0ci1cXHUwMDNlZG9udF93YWl0KVxcbi1cXHRcXHRkZXZfcmVtb3ZlX3BhY2soXFx1MDAyNnRwcml2LVxcdTAwM2VwdCk7XFxuK1xcdFxcdHN0bW1hY19zZnRfcmVtb3ZlX3BhY2soXFx1MDAyNnRwcml2LVxcdTAwM2VwdCk7XFxuIFxcdGtmcmVlKHRwcml2KTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC00MTQsNyArNDYzLDcgQEAgc3RhdGljIGludCBzdG1tYWNfdGVzdF9tbWMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2VlZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIHtcXG4gXFx0c3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqaW5pdGlhbCwgKmZpbmFsO1xcbi1cXHRpbnQgcmV0cmllcyA9IDEwO1xcbitcXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQsIG1heF9kdXJhdGlvbjtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghcHJpdi1cXHUwMDNlZG1hX2NhcC5lZWUgfHwgIXByaXYtXFx1MDAzZWVlZV9hY3RpdmUpXFxuQEAgLTQzMCwxNCArNDc5LDIxIEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfZWVlKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4gXFx0XFx0Z290byBvdXRfZnJlZV9pbml0aWFsO1xcbiBcXHR9XFxuIFxcbitcXHQvKiBTbmFwc2hvdCBzdGF0cywgd2Ugd2FudCB0byBjb3VudCB0aGUgaW5fbHBpIGV2ZW50cy4gV2UgbWF5IGVudGVyXFxuK1xcdCAqIExQSSBqdXN0IGFmdGVyIHRoZSBwYWNrZXQgd2FzIHNlbnQuXFxuK1xcdCAqL1xcbiBcXHRtZW1jcHkoaW5pdGlhbCwgXFx1MDAyNnByaXYtXFx1MDAzZXhzdGF0cywgc2l6ZW9mKCppbml0aWFsKSk7XFxuIFxcbitcXHQvKiBTZW5kIGEgZnJhbWUsIHRoZW4gd2FpdCB0byBlbnRlciBMUEkgKi9cXG4gXFx0cmV0ID0gc3RtbWFjX3Rlc3RfbWFjX2xvb3BiYWNrKHByaXYpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIG91dF9mcmVlX2ZpbmFsO1xcbiBcXG4rXFx0bWF4X2R1cmF0aW9uID0gdXNlY3NfdG9famlmZmllcygyICogcHJpdi1cXHUwMDNldHhfbHBpX3RpbWVyKTtcXG4rXFxuIFxcdC8qIFdlIGhhdmUgbm8gdHJhZmZpYyBpbiB0aGUgbGluZSBzbywgc29vbmVyIG9yIGxhdGVyIGl0IHdpbGwgZ28gTFBJICovXFxuLVxcdHdoaWxlICgtLXJldHJpZXMpIHtcXG4rXFx0dGltZW91dCA9IGppZmZpZXMgKyBtYXhfZHVyYXRpb247XFxuK1xcdHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkge1xcbiBcXHRcXHRtZW1jcHkoZmluYWwsIFxcdTAwMjZwcml2LVxcdTAwM2V4c3RhdHMsIHNpemVvZigqZmluYWwpKTtcXG4gXFxuIFxcdFxcdGlmIChmaW5hbC1cXHUwMDNlaXJxX3R4X3BhdGhfaW5fbHBpX21vZGVfbiBcXHUwMDNlXFxuQEAgLTQ0NiwyMCArNTAyLDM4IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfZWVlKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4gXFx0XFx0bXNsZWVwKDEwMCk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICghcmV0cmllcykge1xcbitcXHRtZW1jcHkoZmluYWwsIFxcdTAwMjZwcml2LVxcdTAwM2V4c3RhdHMsIHNpemVvZigqZmluYWwpKTtcXG4rXFx0aWYgKGZpbmFsLVxcdTAwM2VpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uIFxcdTAwM2M9XFxuK1xcdCAgICBpbml0aWFsLVxcdTAwM2VpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uKSB7XFxuIFxcdFxcdHJldCA9IC1FVElNRURPVVQ7XFxuIFxcdFxcdGdvdG8gb3V0X2ZyZWVfZmluYWw7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChmaW5hbC1cXHUwMDNlaXJxX3R4X3BhdGhfaW5fbHBpX21vZGVfbiBcXHUwMDNjPVxcbi1cXHQgICAgaW5pdGlhbC1cXHUwMDNlaXJxX3R4X3BhdGhfaW5fbHBpX21vZGVfbikge1xcbi1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHQvKiBSZS1zbmFwc2hvdCwgYXMgd2Ugd2FudCB0byBtZWFzdXJlIGV4aXRfbHBpIGV2ZW50cy4gV2Ugc2hvdWxkIGJlXFxuK1xcdCAqIGluIExQSSByaWdodCBub3cuXFxuK1xcdCAqL1xcbitcXHRtZW1jcHkoaW5pdGlhbCwgXFx1MDAyNnByaXYtXFx1MDAzZXhzdGF0cywgc2l6ZW9mKCppbml0aWFsKSk7XFxuK1xcbitcXHQvKiBUWCBzb21ldGhpbmcgc28gd2UgZ28gb3V0IG9mIExQSSAqL1xcbitcXHRyZXQgPSBzdG1tYWNfdGVzdF9tYWNfbG9vcGJhY2socHJpdik7XFxuK1xcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0X2ZyZWVfZmluYWw7XFxuK1xcbitcXHQvKiBXYWl0IGZvciB0aGUgZXhpdCBMUEkgaW50ZXJydXB0ICovXFxuK1xcdHRpbWVvdXQgPSBqaWZmaWVzICsgbWF4X2R1cmF0aW9uO1xcbitcXHR3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcXG4rXFx0XFx0bWVtY3B5KGZpbmFsLCBcXHUwMDI2cHJpdi1cXHUwMDNleHN0YXRzLCBzaXplb2YoKmZpbmFsKSk7XFxuK1xcbitcXHRcXHRpZiAoZmluYWwtXFx1MDAzZWlycV90eF9wYXRoX2V4aXRfbHBpX21vZGVfbiBcXHUwMDNlXFxuK1xcdFxcdCAgICBpbml0aWFsLVxcdTAwM2VpcnFfdHhfcGF0aF9leGl0X2xwaV9tb2RlX24pXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRtc2xlZXAoMTAwKTtcXG4gXFx0fVxcbiBcXG4rXFx0bWVtY3B5KGZpbmFsLCBcXHUwMDI2cHJpdi1cXHUwMDNleHN0YXRzLCBzaXplb2YoKmZpbmFsKSk7XFxuIFxcdGlmIChmaW5hbC1cXHUwMDNlaXJxX3R4X3BhdGhfZXhpdF9scGlfbW9kZV9uIFxcdTAwM2M9XFxuIFxcdCAgICBpbml0aWFsLVxcdTAwM2VpcnFfdHhfcGF0aF9leGl0X2xwaV9tb2RlX24pIHtcXG4tXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0cmV0ID0gLUVUSU1FRE9VVDtcXG4gXFx0XFx0Z290byBvdXRfZnJlZV9maW5hbDtcXG4gXFx0fVxcbiBcXG5AQCAtNzY3LDcgKzg0MSw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfZmxvd2N0cmwoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiBcXHR0cHJpdi1cXHUwMDNlcHQuZnVuYyA9IHN0bW1hY190ZXN0X2Zsb3djdHJsX3ZhbGlkYXRlO1xcbiBcXHR0cHJpdi1cXHUwMDNlcHQuZGV2ID0gcHJpdi1cXHUwMDNlZGV2O1xcbiBcXHR0cHJpdi1cXHUwMDNlcHQuYWZfcGFja2V0X3ByaXYgPSB0cHJpdjtcXG4tXFx0ZGV2X2FkZF9wYWNrKFxcdTAwMjZ0cHJpdi1cXHUwMDNlcHQpO1xcbitcXHRzdG1tYWNfc2Z0X2FkZF9wYWNrKFxcdTAwMjZ0cHJpdi1cXHUwMDNlcHQpO1xcbiBcXG4gXFx0LyogQ29tcHV0ZSBtaW5pbXVtIG51bWJlciBvZiBwYWNrZXRzIHRvIG1ha2UgRklGTyBmdWxsICovXFxuIFxcdHBrdF9jb3VudCA9IHJ4X2ZpZm9fc2l6ZTtcXG5AQCAtODIzLDcgKzg5Nyw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfZmxvd2N0cmwoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiBjbGVhbnVwOlxcbiBcXHRkZXZfbWNfZGVsKHByaXYtXFx1MDAzZWRldiwgcGFkZHIpO1xcbiBcXHRkZXZfc2V0X3Byb21pc2N1aXR5KHByaXYtXFx1MDAzZWRldiwgLTEpO1xcbi1cXHRkZXZfcmVtb3ZlX3BhY2soXFx1MDAyNnRwcml2LVxcdTAwM2VwdCk7XFxuK1xcdHN0bW1hY19zZnRfcmVtb3ZlX3BhY2soXFx1MDAyNnRwcml2LVxcdTAwM2VwdCk7XFxuIFxcdGtmcmVlKHRwcml2KTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC05MjEsNiArOTk1LDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X3ZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4gXFx0dHByaXYtXFx1MDAzZXB0LmRldiA9IHByaXYtXFx1MDAzZWRldjtcXG4gXFx0dHByaXYtXFx1MDAzZXB0LmFmX3BhY2tldF9wcml2ID0gdHByaXY7XFxuIFxcdHRwcml2LVxcdTAwM2VwYWNrZXQgPSBcXHUwMDI2YXR0cjtcXG4rXFx0dHByaXYtXFx1MDAzZWNhcHR1cmVfYWxsID0gdHJ1ZTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEFzIHdlIHVzZSBIQVNIIGZpbHRlcmluZywgZmFsc2UgcG9zaXRpdmVzIG1heSBhcHBlYXIuIFRoaXMgaXMgYVxcbkBAIC05MjgsNyArMTAwMyw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF92bGFuZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIFxcdCAqIEhBU0ggdmFsdWVzLlxcbiBcXHQgKi9cXG4gXFx0dHByaXYtXFx1MDAzZXZsYW5faWQgPSAweDEyMztcXG4tXFx0ZGV2X2FkZF9wYWNrKFxcdTAwMjZ0cHJpdi1cXHUwMDNlcHQpO1xcbitcXHRzdG1tYWNfc2Z0X2FkZF9wYWNrKFxcdTAwMjZ0cHJpdi1cXHUwMDNlcHQpO1xcbiBcXG4gXFx0cmV0ID0gdmxhbl92aWRfYWRkKHByaXYtXFx1MDAzZWRldiwgaHRvbnMoRVRIX1BfODAyMVEpLCB0cHJpdi1cXHUwMDNldmxhbl9pZCk7XFxuIFxcdGlmIChyZXQpXFxuQEAgLTk2OCw3ICsxMDQzLDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X3ZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4gdmxhbl9kZWw6XFxuIFxcdHZsYW5fdmlkX2RlbChwcml2LVxcdTAwM2VkZXYsIGh0b25zKEVUSF9QXzgwMjFRKSwgdHByaXYtXFx1MDAzZXZsYW5faWQpO1xcbiBjbGVhbnVwOlxcbi1cXHRkZXZfcmVtb3ZlX3BhY2soXFx1MDAyNnRwcml2LVxcdTAwM2VwdCk7XFxuK1xcdHN0bW1hY19zZnRfcmVtb3ZlX3BhY2soXFx1MDAyNnRwcml2LVxcdTAwM2VwdCk7XFxuIFxcdGtmcmVlKHRwcml2KTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0xMDE1LDYgKzEwOTAsNyBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfZHZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4gXFx0dHByaXYtXFx1MDAzZXB0LmRldiA9IHByaXYtXFx1MDAzZWRldjtcXG4gXFx0dHByaXYtXFx1MDAzZXB0LmFmX3BhY2tldF9wcml2ID0gdHByaXY7XFxuIFxcdHRwcml2LVxcdTAwM2VwYWNrZXQgPSBcXHUwMDI2YXR0cjtcXG4rXFx0dHByaXYtXFx1MDAzZWNhcHR1cmVfYWxsID0gdHJ1ZTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEFzIHdlIHVzZSBIQVNIIGZpbHRlcmluZywgZmFsc2UgcG9zaXRpdmVzIG1heSBhcHBlYXIuIFRoaXMgaXMgYVxcbkBAIC0xMDIyLDcgKzEwOTgsNyBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfZHZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4gXFx0ICogSEFTSCB2YWx1ZXMuXFxuIFxcdCAqL1xcbiBcXHR0cHJpdi1cXHUwMDNldmxhbl9pZCA9IDB4MTIzO1xcbi1cXHRkZXZfYWRkX3BhY2soXFx1MDAyNnRwcml2LVxcdTAwM2VwdCk7XFxuK1xcdHN0bW1hY19zZnRfYWRkX3BhY2soXFx1MDAyNnRwcml2LVxcdTAwM2VwdCk7XFxuIFxcbiBcXHRyZXQgPSB2bGFuX3ZpZF9hZGQocHJpdi1cXHUwMDNlZGV2LCBodG9ucyhFVEhfUF84MDIxQUQpLCB0cHJpdi1cXHUwMDNldmxhbl9pZCk7XFxuIFxcdGlmIChyZXQpXFxuQEAgLTEwNjIsNyArMTEzOCw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9kdmxhbmZpbHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiB2bGFuX2RlbDpcXG4gXFx0dmxhbl92aWRfZGVsKHByaXYtXFx1MDAzZWRldiwgaHRvbnMoRVRIX1BfODAyMUFEKSwgdHByaXYtXFx1MDAzZXZsYW5faWQpO1xcbiBjbGVhbnVwOlxcbi1cXHRkZXZfcmVtb3ZlX3BhY2soXFx1MDAyNnRwcml2LVxcdTAwM2VwdCk7XFxuK1xcdHN0bW1hY19zZnRfcmVtb3ZlX3BhY2soXFx1MDAyNnRwcml2LVxcdTAwM2VwdCk7XFxuIFxcdGtmcmVlKHRwcml2KTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0xMjkzLDcgKzEzNjksOCBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X3ZsYW5vZmZfY29tbW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgYm9vbCBzdmxhbilcXG4gXFx0dHByaXYtXFx1MDAzZXB0LmFmX3BhY2tldF9wcml2ID0gdHByaXY7XFxuIFxcdHRwcml2LVxcdTAwM2VwYWNrZXQgPSBcXHUwMDI2YXR0cjtcXG4gXFx0dHByaXYtXFx1MDAzZXZsYW5faWQgPSAweDEyMztcXG4tXFx0ZGV2X2FkZF9wYWNrKFxcdTAwMjZ0cHJpdi1cXHUwMDNlcHQpO1xcbitcXHR0cHJpdi1cXHUwMDNlY2FwdHVyZV9hbGwgPSB0cnVlO1xcbitcXHRzdG1tYWNfc2Z0X2FkZF9wYWNrKFxcdTAwMjZ0cHJpdi1cXHUwMDNlcHQpO1xcbiBcXG4gXFx0cmV0ID0gdmxhbl92aWRfYWRkKHByaXYtXFx1MDAzZWRldiwgaHRvbnMocHJvdG8pLCB0cHJpdi1cXHUwMDNldmxhbl9pZCk7XFxuIFxcdGlmIChyZXQpXFxuQEAgLTEzMjAsNyArMTM5Nyw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3Rfdmxhbm9mZl9jb21tb24oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCBib29sIHN2bGFuKVxcbiB2bGFuX2RlbDpcXG4gXFx0dmxhbl92aWRfZGVsKHByaXYtXFx1MDAzZWRldiwgaHRvbnMocHJvdG8pLCB0cHJpdi1cXHUwMDNldmxhbl9pZCk7XFxuIGNsZWFudXA6XFxuLVxcdGRldl9yZW1vdmVfcGFjayhcXHUwMDI2dHByaXYtXFx1MDAzZXB0KTtcXG4rXFx0c3RtbWFjX3NmdF9yZW1vdmVfcGFjayhcXHUwMDI2dHByaXYtXFx1MDAzZXB0KTtcXG4gXFx0a2ZyZWUodHByaXYpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTEzMzIsNyArMTQwOSw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3Rfdmxhbm9mZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIFxcbiBzdGF0aWMgaW50IHN0bW1hY190ZXN0X3N2bGFub2ZmKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4ge1xcbi1cXHRpZiAoIXByaXYtXFx1MDAzZWRtYV9jYXAuZHZsYW4pXFxuK1xcdGlmICghKHByaXYtXFx1MDAzZWRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fU1RBR19UWCkpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0cmV0dXJuIHN0bW1hY190ZXN0X3ZsYW5vZmZfY29tbW9uKHByaXYsIHRydWUpO1xcbiB9XFxuQEAgLTE2OTksNiArMTc3Niw5IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9qdW1ibyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUxNiBxdWV1ZSlcXG4gXFx0c3RydWN0IHN0bW1hY19wYWNrZXRfYXR0cnMgYXR0ciA9IHsgfTtcXG4gXFx0aW50IHNpemUgPSBwcml2LVxcdTAwM2VkbWFfY29uZi5kbWFfYnVmX3N6O1xcbiBcXG4rXFx0aWYgKCFkd21hY19pc194bWFjKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZSkpXFxuK1xcdFxcdHNpemUgLT0gTkVUX0lQX0FMSUdOO1xcbitcXG4gXFx0YXR0ci5kc3QgPSBwcml2LVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyO1xcbiBcXHRhdHRyLm1heF9zaXplID0gc2l6ZSAtIEVUSF9GQ1NfTEVOO1xcbiBcXHRhdHRyLnF1ZXVlX21hcHBpbmcgPSBxdWV1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTc6MjI6MTMuODE3NTk5Mjg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNzc4MzM0MzMzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNUTWljcm9lbGVjdHJvbmljcyAvIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIGRyaXZlciAoc3RtbWFjKSwgc3BlY2lmaWNhbGx5IGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9uIGFuZCBzZWxmdGVzdCBoZWxwZXJzLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoQVJNL01JUFMvZXRjLiBTb0NzIG9yIHNwZWNpZmljIEludGVsL0xvb25nc29uL1N5bm9wc3lzIFBDSSBOSUMgZGV2aWNlcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBvbiBhbWQ2NCwgcmVuZGVyaW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2E4MDY5NjFlZGMxNDEwMDc4NGRhNzk2NTcwNjAzZGFjOWY3ZTRiZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDE3OjIyOjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbmluZGV4IDVmZTdlOTVmZGQzNDUuLjM2NjRhMjk4NTc0YWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG5AQCAtMTUzNiwxNyArMTUzNiwxNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHN0bW1hY19yeF9vZmZzZXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFx0cmV0dXJuIE5FVF9TS0JfUEFEICsgTkVUX0lQX0FMSUdOO1xuIH1cbiBcbi1zdGF0aWMgaW50IHN0bW1hY19zZXRfYmZzaXplKGludCBtdHUpXG4rc3RhdGljIGludCBzdG1tYWNfc2V0X2Jmc2l6ZShpbnQgbGVuKVxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAobXR1IFx1MDAzZT0gQlVGX1NJWkVfOEtpQilcbitcdGlmIChsZW4gXHUwMDNlIEJVRl9TSVpFXzhLaUIpXG4gXHRcdHJldCA9IEJVRl9TSVpFXzE2S2lCO1xuLVx0ZWxzZSBpZiAobXR1IFx1MDAzZT0gQlVGX1NJWkVfNEtpQilcbitcdGVsc2UgaWYgKGxlbiBcdTAwM2UgQlVGX1NJWkVfNEtpQilcbiBcdFx0cmV0ID0gQlVGX1NJWkVfOEtpQjtcbi1cdGVsc2UgaWYgKG10dSBcdTAwM2U9IEJVRl9TSVpFXzJLaUIpXG4rXHRlbHNlIGlmIChsZW4gXHUwMDNlIEJVRl9TSVpFXzJLaUIpXG4gXHRcdHJldCA9IEJVRl9TSVpFXzRLaUI7XG4tXHRlbHNlIGlmIChtdHUgXHUwMDNlIERFRkFVTFRfQlVGU0laRSlcbitcdGVsc2UgaWYgKGxlbiBcdTAwM2UgREVGQVVMVF9CVUZTSVpFKVxuIFx0XHRyZXQgPSBCVUZfU0laRV8yS2lCO1xuIFx0ZWxzZVxuIFx0XHRyZXQgPSBERUZBVUxUX0JVRlNJWkU7XG5AQCAtNDA2Myw3ICs0MDYzLDcgQEAgc3RhdGljIHN0cnVjdCBzdG1tYWNfZG1hX2NvbmYgKlxuIHN0bW1hY19zZXR1cF9kbWFfZGVzYyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBtdHUpXG4ge1xuIFx0c3RydWN0IHN0bW1hY19kbWFfY29uZiAqZG1hX2NvbmY7XG4tXHRpbnQgYmZzaXplLCByZXQ7XG4rXHRpbnQgYmZzaXplLCBsZW4sIHJldDtcbiBcdHU4IGNoYW47XG4gXG4gXHRkbWFfY29uZiA9IGt6YWxsb2Nfb2JqKCpkbWFfY29uZik7XG5AQCAtNDA3MywxMyArNDA3MywxNSBAQCBzdG1tYWNfc2V0dXBfZG1hX2Rlc2Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgbXR1KVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcdH1cbiBcbi1cdC8qIFJldHVybnMgMCBvciBCVUZfU0laRV8xNktpQiBpZiBtdHUgXHUwMDNlIDhLaUIgYW5kIGR3bWFjNCBvciByaW5nIG1vZGUgKi9cbi1cdGJmc2l6ZSA9IHN0bW1hY19zZXRfMTZraWJfYmZzaXplKHByaXYsIG10dSk7XG4rXHRsZW4gPSBtdHUgKyBFVEhfSExFTiArIDIgKiBWTEFOX0hMRU4gKyBFVEhfRkNTX0xFTiArIE5FVF9JUF9BTElHTjtcbitcbitcdC8qIFJldHVybnMgMCBvciBCVUZfU0laRV8xNktpQiBpZiBsZW4gXHUwMDNlIDhLaUIgYW5kIGR3bWFjNCBvciByaW5nIG1vZGUgKi9cbitcdGJmc2l6ZSA9IHN0bW1hY19zZXRfMTZraWJfYmZzaXplKHByaXYsIGxlbik7XG4gXHRpZiAoYmZzaXplIFx1MDAzYyAwKVxuIFx0XHRiZnNpemUgPSAwO1xuIFxuIFx0aWYgKGJmc2l6ZSBcdTAwM2MgQlVGX1NJWkVfMTZLaUIpXG4tXHRcdGJmc2l6ZSA9IHN0bW1hY19zZXRfYmZzaXplKG10dSk7XG4rXHRcdGJmc2l6ZSA9IHN0bW1hY19zZXRfYmZzaXplKGxlbik7XG4gXG4gXHRkbWFfY29uZi1cdTAwM2VkbWFfYnVmX3N6ID0gYmZzaXplO1xuIFx0LyogQ2hvc2UgdGhlIHR4L3J4IHNpemUgZnJvbSB0aGUgYWxyZWFkeSBkZWZpbmVkIG9uZSBpbiB0aGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcbmluZGV4IDYzNzJlYzdjM2YzMTcuLmZjOGQ2OTI2MGY0MzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuY1xuQEAgLTEyLDYgKzEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWRwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcC5oXHUwMDNlXG5AQCAtMjM3LDYgKzIzOCwxMCBAQCBzdHJ1Y3Qgc3RtbWFjX3Rlc3RfcHJpdiB7XG4gXHRzdHJ1Y3Qgc3RtbWFjX3BhY2tldF9hdHRycyAqcGFja2V0O1xuIFx0c3RydWN0IHBhY2tldF90eXBlIHB0O1xuIFx0c3RydWN0IGNvbXBsZXRpb24gY29tcDtcbitcdF9fYmUxNiBwYWNrZXRfdHlwZTtcbitcdGludCAoKmZ1bmMpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuK1x0XHQgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfbmRldik7XG4rXHRib29sIGNhcHR1cmVfYWxsO1xuIFx0aW50IGRvdWJsZV92bGFuO1xuIFx0aW50IHZsYW5faWQ7XG4gXHRpbnQgb2s7XG5AQCAtMzE2LDYgKzMyMSw1MCBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2xvb3BiYWNrX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBzdG1tYWNfc2Z0X2ZpbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbitcdFx0XHQgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsXG4rXHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19uZGV2KVxuK3tcbitcdHN0cnVjdCBzdG1tYWNfdGVzdF9wcml2ICp0cHJpdiA9IHB0LVx1MDAzZWFmX3BhY2tldF9wcml2O1xuK1x0c3RydWN0IGV0aGhkciAqaGRyID0gZXRoX2hkcihza2IpO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAoaGRyLVx1MDAzZWhfcHJvdG8gPT0gdHByaXYtXHUwMDNlcGFja2V0X3R5cGUpIHtcbitcdFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbitcbitcdFx0aWYgKG5za2IpXG4rXHRcdFx0cmV0ID0gdHByaXYtXHUwMDNlZnVuYyhuc2tiLCBuZGV2LCBwdCwgb3JpZ19uZGV2KTtcbitcdH1cbitcbitcdGtmcmVlX3NrYihza2IpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQgc3RtbWFjX3NmdF9hZGRfcGFjayhzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0KVxuK3tcbitcdHN0cnVjdCBzdG1tYWNfdGVzdF9wcml2ICp0cHJpdiA9IHB0LVx1MDAzZWFmX3BhY2tldF9wcml2O1xuK1xuK1x0aWYgKG5ldGRldl91c2VzX2RzYSh0cHJpdi1cdTAwM2VwdC5kZXYpIHx8IHRwcml2LVx1MDAzZWNhcHR1cmVfYWxsKSB7XG4rXHRcdHRwcml2LVx1MDAzZXBhY2tldF90eXBlID0gdHByaXYtXHUwMDNlcHQudHlwZTtcbitcdFx0dHByaXYtXHUwMDNlZnVuYyA9IHRwcml2LVx1MDAzZXB0LmZ1bmM7XG4rXG4rXHRcdC8qIERTQSBjb25kdWl0IHdpbGwgcmVwb3J0IEVUSF9QX1hEU0EsIHNvIG91ciBwYWNrZXQgaGFuZGxlclxuK1x0XHQgKiB3b24ndCBtYXRjaC4gTGV0J3MgcmVnaXN0ZXIgYSBFVEhfUF9BTEwgbWF0Y2ggYW5kIGZpbHRlclxuK1x0XHQgKiBtYW51YWxseSBpbiBzdG1tYWNfc2Z0X2ZpbHRlci5cbitcdFx0ICovXG4rXHRcdHRwcml2LVx1MDAzZXB0LnR5cGUgPSBodG9ucyhFVEhfUF9BTEwpO1xuK1x0XHR0cHJpdi1cdTAwM2VwdC5mdW5jID0gc3RtbWFjX3NmdF9maWx0ZXI7XG4rXHRcdHRwcml2LVx1MDAzZXB0Lmlnbm9yZV9vdXRnb2luZyA9IHRydWU7XG4rXHR9XG4rXG4rXHRkZXZfYWRkX3BhY2socHQpO1xuK31cbitcbitzdGF0aWMgdm9pZCBzdG1tYWNfc2Z0X3JlbW92ZV9wYWNrKHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQpXG4re1xuK1x0ZGV2X3JlbW92ZV9wYWNrKHB0KTtcbit9XG4rXG4gc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2xvb3BiYWNrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbiBcdFx0XHRcdCAgc3RydWN0IHN0bW1hY19wYWNrZXRfYXR0cnMgKmF0dHIpXG4ge1xuQEAgLTMzNyw3ICszODYsNyBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbG9vcGJhY2soc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0dHByaXYtXHUwMDNlcGFja2V0ID0gYXR0cjtcbiBcbiBcdGlmICghYXR0ci1cdTAwM2Vkb250X3dhaXQpXG4tXHRcdGRldl9hZGRfcGFjayhcdTAwMjZ0cHJpdi1cdTAwM2VwdCk7XG4rXHRcdHN0bW1hY19zZnRfYWRkX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuIFxuIFx0c2tiID0gc3RtbWFjX3Rlc3RfZ2V0X3VkcF9za2IocHJpdiwgYXR0cik7XG4gXHRpZiAoIXNrYikge1xuQEAgLTM2MCw3ICs0MDksNyBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbG9vcGJhY2soc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFxuIGNsZWFudXA6XG4gXHRpZiAoIWF0dHItXHUwMDNlZG9udF93YWl0KVxuLVx0XHRkZXZfcmVtb3ZlX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuK1x0XHRzdG1tYWNfc2Z0X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiBcdGtmcmVlKHRwcml2KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTQxNCw3ICs0NjMsNyBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X21tYyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gc3RhdGljIGludCBzdG1tYWNfdGVzdF9lZWUoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbiBcdHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKmluaXRpYWwsICpmaW5hbDtcbi1cdGludCByZXRyaWVzID0gMTA7XG4rXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQsIG1heF9kdXJhdGlvbjtcbiBcdGludCByZXQ7XG4gXG4gXHRpZiAoIXByaXYtXHUwMDNlZG1hX2NhcC5lZWUgfHwgIXByaXYtXHUwMDNlZWVlX2FjdGl2ZSlcbkBAIC00MzAsMTQgKzQ3OSwyMSBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2VlZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXHRcdGdvdG8gb3V0X2ZyZWVfaW5pdGlhbDtcbiBcdH1cbiBcbitcdC8qIFNuYXBzaG90IHN0YXRzLCB3ZSB3YW50IHRvIGNvdW50IHRoZSBpbl9scGkgZXZlbnRzLiBXZSBtYXkgZW50ZXJcbitcdCAqIExQSSBqdXN0IGFmdGVyIHRoZSBwYWNrZXQgd2FzIHNlbnQuXG4rXHQgKi9cbiBcdG1lbWNweShpbml0aWFsLCBcdTAwMjZwcml2LVx1MDAzZXhzdGF0cywgc2l6ZW9mKCppbml0aWFsKSk7XG4gXG4rXHQvKiBTZW5kIGEgZnJhbWUsIHRoZW4gd2FpdCB0byBlbnRlciBMUEkgKi9cbiBcdHJldCA9IHN0bW1hY190ZXN0X21hY19sb29wYmFjayhwcml2KTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X2ZyZWVfZmluYWw7XG4gXG4rXHRtYXhfZHVyYXRpb24gPSB1c2Vjc190b19qaWZmaWVzKDIgKiBwcml2LVx1MDAzZXR4X2xwaV90aW1lcik7XG4rXG4gXHQvKiBXZSBoYXZlIG5vIHRyYWZmaWMgaW4gdGhlIGxpbmUgc28sIHNvb25lciBvciBsYXRlciBpdCB3aWxsIGdvIExQSSAqL1xuLVx0d2hpbGUgKC0tcmV0cmllcykge1xuK1x0dGltZW91dCA9IGppZmZpZXMgKyBtYXhfZHVyYXRpb247XG4rXHR3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcbiBcdFx0bWVtY3B5KGZpbmFsLCBcdTAwMjZwcml2LVx1MDAzZXhzdGF0cywgc2l6ZW9mKCpmaW5hbCkpO1xuIFxuIFx0XHRpZiAoZmluYWwtXHUwMDNlaXJxX3R4X3BhdGhfaW5fbHBpX21vZGVfbiBcdTAwM2VcbkBAIC00NDYsMjAgKzUwMiwzOCBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2VlZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXHRcdG1zbGVlcCgxMDApO1xuIFx0fVxuIFxuLVx0aWYgKCFyZXRyaWVzKSB7XG4rXHRtZW1jcHkoZmluYWwsIFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLCBzaXplb2YoKmZpbmFsKSk7XG4rXHRpZiAoZmluYWwtXHUwMDNlaXJxX3R4X3BhdGhfaW5fbHBpX21vZGVfbiBcdTAwM2M9XG4rXHQgICAgaW5pdGlhbC1cdTAwM2VpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uKSB7XG4gXHRcdHJldCA9IC1FVElNRURPVVQ7XG4gXHRcdGdvdG8gb3V0X2ZyZWVfZmluYWw7XG4gXHR9XG4gXG4tXHRpZiAoZmluYWwtXHUwMDNlaXJxX3R4X3BhdGhfaW5fbHBpX21vZGVfbiBcdTAwM2M9XG4tXHQgICAgaW5pdGlhbC1cdTAwM2VpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uKSB7XG4tXHRcdHJldCA9IC1FSU5WQUw7XG4rXHQvKiBSZS1zbmFwc2hvdCwgYXMgd2Ugd2FudCB0byBtZWFzdXJlIGV4aXRfbHBpIGV2ZW50cy4gV2Ugc2hvdWxkIGJlXG4rXHQgKiBpbiBMUEkgcmlnaHQgbm93LlxuK1x0ICovXG4rXHRtZW1jcHkoaW5pdGlhbCwgXHUwMDI2cHJpdi1cdTAwM2V4c3RhdHMsIHNpemVvZigqaW5pdGlhbCkpO1xuK1xuK1x0LyogVFggc29tZXRoaW5nIHNvIHdlIGdvIG91dCBvZiBMUEkgKi9cbitcdHJldCA9IHN0bW1hY190ZXN0X21hY19sb29wYmFjayhwcml2KTtcbitcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X2ZyZWVfZmluYWw7XG4rXG4rXHQvKiBXYWl0IGZvciB0aGUgZXhpdCBMUEkgaW50ZXJydXB0ICovXG4rXHR0aW1lb3V0ID0gamlmZmllcyArIG1heF9kdXJhdGlvbjtcbitcdHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkge1xuK1x0XHRtZW1jcHkoZmluYWwsIFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLCBzaXplb2YoKmZpbmFsKSk7XG4rXG4rXHRcdGlmIChmaW5hbC1cdTAwM2VpcnFfdHhfcGF0aF9leGl0X2xwaV9tb2RlX24gXHUwMDNlXG4rXHRcdCAgICBpbml0aWFsLVx1MDAzZWlycV90eF9wYXRoX2V4aXRfbHBpX21vZGVfbilcbitcdFx0XHRicmVhaztcbitcdFx0bXNsZWVwKDEwMCk7XG4gXHR9XG4gXG4rXHRtZW1jcHkoZmluYWwsIFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLCBzaXplb2YoKmZpbmFsKSk7XG4gXHRpZiAoZmluYWwtXHUwMDNlaXJxX3R4X3BhdGhfZXhpdF9scGlfbW9kZV9uIFx1MDAzYz1cbiBcdCAgICBpbml0aWFsLVx1MDAzZWlycV90eF9wYXRoX2V4aXRfbHBpX21vZGVfbikge1xuLVx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRyZXQgPSAtRVRJTUVET1VUO1xuIFx0XHRnb3RvIG91dF9mcmVlX2ZpbmFsO1xuIFx0fVxuIFxuQEAgLTc2Nyw3ICs4NDEsNyBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2Zsb3djdHJsKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdHRwcml2LVx1MDAzZXB0LmZ1bmMgPSBzdG1tYWNfdGVzdF9mbG93Y3RybF92YWxpZGF0ZTtcbiBcdHRwcml2LVx1MDAzZXB0LmRldiA9IHByaXYtXHUwMDNlZGV2O1xuIFx0dHByaXYtXHUwMDNlcHQuYWZfcGFja2V0X3ByaXYgPSB0cHJpdjtcbi1cdGRldl9hZGRfcGFjayhcdTAwMjZ0cHJpdi1cdTAwM2VwdCk7XG4rXHRzdG1tYWNfc2Z0X2FkZF9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiBcbiBcdC8qIENvbXB1dGUgbWluaW11bSBudW1iZXIgb2YgcGFja2V0cyB0byBtYWtlIEZJRk8gZnVsbCAqL1xuIFx0cGt0X2NvdW50ID0gcnhfZmlmb19zaXplO1xuQEAgLTgyMyw3ICs4OTcsNyBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2Zsb3djdHJsKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBjbGVhbnVwOlxuIFx0ZGV2X21jX2RlbChwcml2LVx1MDAzZWRldiwgcGFkZHIpO1xuIFx0ZGV2X3NldF9wcm9taXNjdWl0eShwcml2LVx1MDAzZWRldiwgLTEpO1xuLVx0ZGV2X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbitcdHN0bW1hY19zZnRfcmVtb3ZlX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuIFx0a2ZyZWUodHByaXYpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtOTIxLDYgKzk5NSw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF92bGFuZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXHR0cHJpdi1cdTAwM2VwdC5kZXYgPSBwcml2LVx1MDAzZWRldjtcbiBcdHRwcml2LVx1MDAzZXB0LmFmX3BhY2tldF9wcml2ID0gdHByaXY7XG4gXHR0cHJpdi1cdTAwM2VwYWNrZXQgPSBcdTAwMjZhdHRyO1xuK1x0dHByaXYtXHUwMDNlY2FwdHVyZV9hbGwgPSB0cnVlO1xuIFxuIFx0LypcbiBcdCAqIEFzIHdlIHVzZSBIQVNIIGZpbHRlcmluZywgZmFsc2UgcG9zaXRpdmVzIG1heSBhcHBlYXIuIFRoaXMgaXMgYVxuQEAgLTkyOCw3ICsxMDAzLDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X3ZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdCAqIEhBU0ggdmFsdWVzLlxuIFx0ICovXG4gXHR0cHJpdi1cdTAwM2V2bGFuX2lkID0gMHgxMjM7XG4tXHRkZXZfYWRkX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuK1x0c3RtbWFjX3NmdF9hZGRfcGFjayhcdTAwMjZ0cHJpdi1cdTAwM2VwdCk7XG4gXG4gXHRyZXQgPSB2bGFuX3ZpZF9hZGQocHJpdi1cdTAwM2VkZXYsIGh0b25zKEVUSF9QXzgwMjFRKSwgdHByaXYtXHUwMDNldmxhbl9pZCk7XG4gXHRpZiAocmV0KVxuQEAgLTk2OCw3ICsxMDQzLDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X3ZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiB2bGFuX2RlbDpcbiBcdHZsYW5fdmlkX2RlbChwcml2LVx1MDAzZWRldiwgaHRvbnMoRVRIX1BfODAyMVEpLCB0cHJpdi1cdTAwM2V2bGFuX2lkKTtcbiBjbGVhbnVwOlxuLVx0ZGV2X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbitcdHN0bW1hY19zZnRfcmVtb3ZlX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuIFx0a2ZyZWUodHByaXYpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMTAxNSw2ICsxMDkwLDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2R2bGFuZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXHR0cHJpdi1cdTAwM2VwdC5kZXYgPSBwcml2LVx1MDAzZWRldjtcbiBcdHRwcml2LVx1MDAzZXB0LmFmX3BhY2tldF9wcml2ID0gdHByaXY7XG4gXHR0cHJpdi1cdTAwM2VwYWNrZXQgPSBcdTAwMjZhdHRyO1xuK1x0dHByaXYtXHUwMDNlY2FwdHVyZV9hbGwgPSB0cnVlO1xuIFxuIFx0LypcbiBcdCAqIEFzIHdlIHVzZSBIQVNIIGZpbHRlcmluZywgZmFsc2UgcG9zaXRpdmVzIG1heSBhcHBlYXIuIFRoaXMgaXMgYVxuQEAgLTEwMjIsNyArMTA5OCw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9kdmxhbmZpbHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFx0ICogSEFTSCB2YWx1ZXMuXG4gXHQgKi9cbiBcdHRwcml2LVx1MDAzZXZsYW5faWQgPSAweDEyMztcbi1cdGRldl9hZGRfcGFjayhcdTAwMjZ0cHJpdi1cdTAwM2VwdCk7XG4rXHRzdG1tYWNfc2Z0X2FkZF9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiBcbiBcdHJldCA9IHZsYW5fdmlkX2FkZChwcml2LVx1MDAzZWRldiwgaHRvbnMoRVRIX1BfODAyMUFEKSwgdHByaXYtXHUwMDNldmxhbl9pZCk7XG4gXHRpZiAocmV0KVxuQEAgLTEwNjIsNyArMTEzOCw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9kdmxhbmZpbHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHZsYW5fZGVsOlxuIFx0dmxhbl92aWRfZGVsKHByaXYtXHUwMDNlZGV2LCBodG9ucyhFVEhfUF84MDIxQUQpLCB0cHJpdi1cdTAwM2V2bGFuX2lkKTtcbiBjbGVhbnVwOlxuLVx0ZGV2X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbitcdHN0bW1hY19zZnRfcmVtb3ZlX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuIFx0a2ZyZWUodHByaXYpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMTI5Myw3ICsxMzY5LDggQEAgc3RhdGljIGludCBzdG1tYWNfdGVzdF92bGFub2ZmX2NvbW1vbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIGJvb2wgc3ZsYW4pXG4gXHR0cHJpdi1cdTAwM2VwdC5hZl9wYWNrZXRfcHJpdiA9IHRwcml2O1xuIFx0dHByaXYtXHUwMDNlcGFja2V0ID0gXHUwMDI2YXR0cjtcbiBcdHRwcml2LVx1MDAzZXZsYW5faWQgPSAweDEyMztcbi1cdGRldl9hZGRfcGFjayhcdTAwMjZ0cHJpdi1cdTAwM2VwdCk7XG4rXHR0cHJpdi1cdTAwM2VjYXB0dXJlX2FsbCA9IHRydWU7XG4rXHRzdG1tYWNfc2Z0X2FkZF9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiBcbiBcdHJldCA9IHZsYW5fdmlkX2FkZChwcml2LVx1MDAzZWRldiwgaHRvbnMocHJvdG8pLCB0cHJpdi1cdTAwM2V2bGFuX2lkKTtcbiBcdGlmIChyZXQpXG5AQCAtMTMyMCw3ICsxMzk3LDcgQEAgc3RhdGljIGludCBzdG1tYWNfdGVzdF92bGFub2ZmX2NvbW1vbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIGJvb2wgc3ZsYW4pXG4gdmxhbl9kZWw6XG4gXHR2bGFuX3ZpZF9kZWwocHJpdi1cdTAwM2VkZXYsIGh0b25zKHByb3RvKSwgdHByaXYtXHUwMDNldmxhbl9pZCk7XG4gY2xlYW51cDpcbi1cdGRldl9yZW1vdmVfcGFjayhcdTAwMjZ0cHJpdi1cdTAwM2VwdCk7XG4rXHRzdG1tYWNfc2Z0X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiBcdGtmcmVlKHRwcml2KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTEzMzIsNyArMTQwOSw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3Rfdmxhbm9mZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXG4gc3RhdGljIGludCBzdG1tYWNfdGVzdF9zdmxhbm9mZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuLVx0aWYgKCFwcml2LVx1MDAzZWRtYV9jYXAuZHZsYW4pXG4rXHRpZiAoIShwcml2LVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX1NUQUdfVFgpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHRyZXR1cm4gc3RtbWFjX3Rlc3Rfdmxhbm9mZl9jb21tb24ocHJpdiwgdHJ1ZSk7XG4gfVxuQEAgLTE2OTksNiArMTc3Niw5IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9qdW1ibyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUxNiBxdWV1ZSlcbiBcdHN0cnVjdCBzdG1tYWNfcGFja2V0X2F0dHJzIGF0dHIgPSB7IH07XG4gXHRpbnQgc2l6ZSA9IHByaXYtXHUwMDNlZG1hX2NvbmYuZG1hX2J1Zl9zejtcbiBcbitcdGlmICghZHdtYWNfaXNfeG1hYyhwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlKSlcbitcdFx0c2l6ZSAtPSBORVRfSVBfQUxJR047XG4rXG4gXHRhdHRyLmRzdCA9IHByaXYtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyO1xuIFx0YXR0ci5tYXhfc2l6ZSA9IHNpemUgLSBFVEhfRkNTX0xFTjtcbiBcdGF0dHIucXVldWVfbWFwcGluZyA9IHF1ZXVlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTc6MjI6MTMuODE3NjAxODM1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ4MTI3ODE3NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpcyBldmVuICp3b3J0aCogZnV6emluZyAoV29ydGhGdXp6aW5nPXRydWUvZmFsc2UpLiBSaWdodCBub3csIEknbSBsZWFuaW5nIHRvd2FyZCBcInRydWUsXCIgYnV0IGxldCdzIGJlIG1ldGhvZGljYWwuIE15IGltbWVkaWF0ZSBjb25jZXJucyBhcmU6IHdoYXQgY29kZSBpcyBtb2RpZmllZD8gV2hlcmUgZG9lcyBpdCBmaXQgaW50byB0aGUgc3lzdGVtP1xuXG5Mb29raW5nIGF0IHRoZSBmaWxlIGNoYW5nZXMsIHdlIGhhdmU6XG5cbiogICBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY2BcbiogICBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jYFxuXG5SaWdodCBhd2F5LCB0aGlzIGxvb2tzIGludGVyZXN0aW5nLiBXZSdyZSBpbiB0aGUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIE11bHRpLUdpZ2FiaXQgRXRoZXJuZXQgLyBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IE1BQyBkcml2ZXIsIG9yIGBzdG1tYWNgLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgbmV0d29ya2luZyBjb2RlLCBlc3BlY2lhbGx5IGF0IHRoZSBkcml2ZXIgbGV2ZWwsIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nIGJlY2F1c2Ugb2YgYWxsIHRoZSBwb3RlbnRpYWwgZm9yIGNvbXBsZXggcGFja2V0IHByb2Nlc3NpbmcgYW5kIGV4dGVybmFsIGlucHV0LiBCdXQgbGV0J3MgdmVyaWZ5IG15IGFzc3VtcHRpb25zLlxuXG5Ob3csIG15IG5leHQgcXVlc3Rpb25zIHN0YXJ0IHBvcHBpbmcgdXA6IElzIHRoaXMgYSB2aXJ0dWFsaXplZCBkcml2ZXIsIGVtdWxhdGVkIHdpdGhpbiBRRU1VL0dDRSBvciBzdGFuZGFyZCBzeXprYWxsZXIgdGVzdGJlZHMsIG9yIGlzIHRoaXMgYSBwaHlzaWNhbCBoYXJkd2FyZSAvIFNvQyBkcml2ZXIgLyBQQ0kgZHJpdmVyPyBUaGlzIGlzIGltcG9ydGFudC4gSWYgaXQncyB2aXJ0dWFsaXplZCwgZnV6emluZyBpcyB1c3VhbGx5IHN0cmFpZ2h0Zm9yd2FyZC4gSWYgaXQncyBwaHlzaWNhbCBoYXJkd2FyZSwgaXQgYWRkcyBhIGxheWVyIG9mIGNvbXBsZXhpdHkgKGFuZCBwb3RlbnRpYWxseSBncmVhdGVyIHZhbHVlKS4gSSBuZWVkIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnYCBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBwcm9iZXMuIFRoaXMgd2lsbCBoZWxwIG1lIHRvIGRlY2lkZSB0aGUgRm9jdXNTeW1ib2xzIGFuZCBFbmFibGVDb25maWdzIG5lZWRlZCB0byBmdXp6LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzMzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTc6MjI6MjguNjMwMzg2NTcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNTQxNDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTVE1NQUNfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjI6Y29uZmlnIFNUTU1BQ19FVEhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9MTg9aWYgU1RNTUFDX0VUSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyMDpjb25maWcgU1RNTUFDX1NFTEZURVNUU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgU1RNTUFDIFNlbGZ0ZXN0c1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyOTpjb25maWcgU1RNTUFDX1BMQVRGT1JNXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zMC1cXHR0cmlzdGF0ZSBcXFwiU1RNTUFDIFBsYXRmb3JtIGJ1cyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0zNzE9ZW5kaWYgIyBTVE1NQUNfUExBVEZPUk1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTM3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjM3Mzpjb25maWcgU1RNTUFDX0xJQlBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMzc0LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM5OD1jb25maWcgRFdNQUNfTU9UT1JDT01NXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTQwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjQwNzpjb25maWcgU1RNTUFDX1BDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctNDA4LVxcdHRyaXN0YXRlIFxcXCJTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNzoyMjoyOC42OTE5MzI0ODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Mzc3NzM4OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBzdG1tYWNgIERyaXZlcidzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgc3RtbWFjYCwgdGhlIEV0aGVybmV0IE1BQyBkcml2ZXIsIHRhcmdldHMgU3lub3BzeXMgRGVzaWduV2FyZSBNQUMgSVBzLCBmcmVxdWVudGx5IGZvdW5kIG9uIEFSTSBTb0NzIGFuZCBzb21lIFBDSSBkZXZpY2VzLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYHN0bW1hY2AgaXMgZXZlbiBhY2Nlc3NpYmxlIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQsIG9yIGlmIGl0J3Mgc3RyaWN0bHkgdGllZCB0byBwaHlzaWNhbCBoYXJkd2FyZS5cblxuVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnMsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgYXBwbGllcy4gU3BlY2lmaWNhbGx5LCBpdCBtZW50aW9ucyBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIG9yIHRob3NlIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMuIFNvLCBpcyB0aGUgRGVzaWduV2FyZSBNQUMgZW11bGF0ZWQsIG9yIGlzIGl0IGhhcmR3YXJlLWRlcGVuZGVudD9cblxuTm93LCBsZXQncyBleHBsb3JlIFFFTVUncyBlbXVsYXRpb24gY2FwYWJpbGl0aWVzLiBEbyBhbnkgUUVNVSBtYWNoaW5lIHR5cGVzLCBsaWtlIGBhbGx3aW5uZXItYTEwLWVtYWNgIG9yIGBzdG0zMmY0MDVgLCBlbXVsYXRlIHRoZSBEZXNpZ25XYXJlIE1BQz8gVGhlIGZhY3QgdGhhdCBTVE0zMiBpcyBtZW50aW9uZWQgaXMgaW50ZXJlc3RpbmcsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgcmVsZXZhbnQgdG8gYW4gYW1kNjQgdGFyZ2V0LiBDYW4gSSBwcm9iZSBgc3RtbWFjYCBpbiBhIHN0YW5kYXJkIFFFTVUvYW1kNjQgZW52aXJvbm1lbnQsIG9yIGFtIEkgc3R1Y2sgd2l0aCBwaHlzaWNhbCBoYXJkd2FyZT9cblxuVG8gYW5zd2VyIHRoaXMgY29uY2x1c2l2ZWx5LCBJIG5lZWQgdG8gY2hlY2sgaG93IGBzdG1tYWNgIGludGVyYWN0cyB3aXRoIFBDSS4gV2hhdCBQQ0kgSURzIGRvZXMgYFNUTU1BQ19QQ0lgIG1hdGNoPyBUaW1lIHRvIGNoZWNrIGBzdG1tYWNfcGNpLmNgIHRvIHNlZSBpZiB0aGlzIGRyaXZlciBpcyBldmVuIHJlbGV2YW50IGZvciB0aGUgc3RhbmRhcmQgeDg2IFFFTVUgZW52aXJvbm1lbnQuIFRoaXMgd2lsbCBjb25maXJtIHdoZXRoZXIgdGhpcyBpcyBhIGZydWl0ZnVsIGFyZWEgb2YgZnV6emluZyBleHBsb3JhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ2NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNzoyMjozNS4wNjk2NzM1MDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxNjIyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUENJX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEzNjI9c3RhdGljIHZvaWQgaW50ZWxfZXRoX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzNzMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzc0OiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9RVUFSS1xcdFxcdDB4MDkzN1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM3NTojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRUhMX1JHTUlJMUdcXHRcXHQweDRiMzBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzNzY6I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VITF9TR01JSTFHXFx0XFx0MHg0YjMxXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzc3OiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FSExfU0dNSUkyRzVcXHQweDRiMzJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzNzgtLyogSW50ZWwoUikgUHJvZ3JhbW1hYmxlIFNlcnZpY2VzIEVuZ2luZSAoSW50ZWwoUikgUFNFKSBjb25zaXN0IG9mIDIgTUFDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzODAtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzgxOiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FSExfUFNFMF9SR01JSTFHXFx0MHg0YmEwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzgyOiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FSExfUFNFMF9TR01JSTFHXFx0MHg0YmExXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzgzOiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FSExfUFNFMF9TR01JSTJHNVxcdDB4NGJhMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM4NDojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRUhMX1BTRTFfUkdNSUkxR1xcdDB4NGJiMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM4NTojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRUhMX1BTRTFfU0dNSUkxR1xcdDB4NGJiMVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM4NjojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRUhMX1BTRTFfU0dNSUkyRzVcXHQweDRiYjJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzODc6I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1RHTEhfU0dNSUkxR18wXFx0MHg0M2FjXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzg4OiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9UR0xIX1NHTUlJMUdfMVxcdDB4NDNhMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM4OTojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfVEdMX1NHTUlJMUdcXHRcXHQweGEwYWNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzOTA6I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0FETFNfU0dNSUkxR18wXFx0MHg3YWFjXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzkxOiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9BRExTX1NHTUlJMUdfMVxcdDB4N2FhZFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM5MjojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfQURMTl9TR01JSTFHXFx0MHg1NGFjXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzkzOiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9SUExQX1NHTUlJMUdcXHQweDUxYWNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzOTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMzk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpbnRlbF9ldGhfcGNpX2lkX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzk2OlxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBRVUFSSywgXFx1MDAyNnF1YXJrX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzk3OlxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfUkdNSUkxRywgXFx1MDAyNmVobF9yZ21paTFnX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzk4OlxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfU0dNSUkxRywgXFx1MDAyNmVobF9zZ21paTFnX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzk5OlxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfU0dNSUkyRzUsIFxcdTAwMjZlaGxfc2dtaWkxZ19pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTQwMDpcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1BTRTBfUkdNSUkxRywgXFx1MDAyNmVobF9wc2UwX3JnbWlpMWdfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjE0MDE6XFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9QU0UwX1NHTUlJMUcsIFxcdTAwMjZlaGxfcHNlMF9zZ21paTFnX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDAyOlxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfUFNFMF9TR01JSTJHNSwgXFx1MDAyNmVobF9wc2UwX3NnbWlpMWdfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjE0MDM6XFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9QU0UxX1JHTUlJMUcsIFxcdTAwMjZlaGxfcHNlMV9yZ21paTFnX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDA0OlxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfUFNFMV9TR01JSTFHLCBcXHUwMDI2ZWhsX3BzZTFfc2dtaWkxZ19pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTQwNTpcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1BTRTFfU0dNSUkyRzUsIFxcdTAwMjZlaGxfcHNlMV9zZ21paTFnX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDA2OlxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBUR0xfU0dNSUkxRywgXFx1MDAyNnRnbF9zZ21paTFnX3BoeTBfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjE0MDc6XFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIFRHTEhfU0dNSUkxR18wLCBcXHUwMDI2dGdsX3NnbWlpMWdfcGh5MF9pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTQwODpcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgVEdMSF9TR01JSTFHXzEsIFxcdTAwMjZ0Z2xfc2dtaWkxZ19waHkxX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDA5OlxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBBRExTX1NHTUlJMUdfMCwgXFx1MDAyNmFkbHNfc2dtaWkxZ19waHkwX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDEwOlxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBBRExTX1NHTUlJMUdfMSwgXFx1MDAyNmFkbHNfc2dtaWkxZ19waHkxX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDExOlxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBBRExOX1NHTUlJMUcsIFxcdTAwMjZhZGxuX3NnbWlpMWdfcGh5MF9pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTQxMjpcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgUlBMUF9TR01JSTFHLCBcXHUwMDI2YWRsbl9zZ21paTFnX3BoeTBfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTE0MTMtXFx0e31cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo3MDojZGVmaW5lIFBDSV9ERVZJQ0VfSURfTE9PTkdTT05fR01BQzFcXHQweDdhMDNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjcxOiNkZWZpbmUgUENJX0RFVklDRV9JRF9MT09OR1NPTl9HTUFDMlxcdDB4N2EyM1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NzI6I2RlZmluZSBQQ0lfREVWSUNFX0lEX0xPT05HU09OX0dORVRcXHQweDdhMTNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTczLSNkZWZpbmUgRFdNQUNfQ09SRV9NVUxUSUNIQU5fVjFcXHQweDEwXFx0LyogTG9vbmdzb24gY3VzdG9tIElEIDB4MTAgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM9MzA2PXN0YXRpYyBpbnQgbG9vbmdzb25fZHdtYWNfc2V0dXAodm9pZCAqYXByaXYsIHN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKm1hYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtMzUxLVxcdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6MzUyOlxcdGlmIChwZGV2LVxcdTAwM2VkZXZpY2UgIT0gUENJX0RFVklDRV9JRF9MT09OR1NPTl9HTkVUKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0zNTMtXFx0XFx0bWFjLVxcdTAwM2VsaW5rLmNhcHMgPSBNQUNfMTAgfCBNQUNfMTAwIHwgTUFDXzEwMDA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTU5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbG9vbmdzb25fZHdtYWNfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjU5NzpcXHR7IFBDSV9ERVZJQ0VfREFUQShMT09OR1NPTiwgR01BQzEsIFxcdTAwMjZsb29uZ3Nvbl9nbWFjX3BjaV9pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTk4OlxcdHsgUENJX0RFVklDRV9EQVRBKExPT05HU09OLCBHTUFDMiwgXFx1MDAyNmxvb25nc29uX2dtYWNfcGNpX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1OTk6XFx0eyBQQ0lfREVWSUNFX0RBVEEoTE9PTkdTT04sIEdORVQsIFxcdTAwMjZsb29uZ3Nvbl9nbmV0X3BjaV9pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNjAwLVxcdHt9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYz0zNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGR3bWFjX21vdG9yY29tbV9wY2lfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYzozNjg6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTU9UT1JDT01NLCAweDY4MDEpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMzY5LVxcdHsgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xOTI9c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTk5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDA6I2RlZmluZSBQQ0lfREVWSUNFX0lEX1NUTU1BQ19TVE1NQUNcXHRcXHQweDExMDhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjAxOiNkZWZpbmUgUENJX0RFVklDRV9JRF9TWU5PUFNZU19HTUFDNV9JRFxcdFxcdDB4NzEwMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTIwMz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3RtbWFjX2lkX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNDpcXHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXFx1MDAyNnN0bW1hY19wY2lfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjA1OlxcdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXFx1MDAyNnN0bW1hY19wY2lfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjA2OlxcdHsgUENJX0RFVklDRV9EQVRBKFNZTk9QU1lTLCBHTUFDNV9JRCwgXFx1MDAyNnNucHNfZ21hYzVfcGNpX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIwNy1cXHR7fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNzoyMjozNS4xMTg4NDAzMjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDgyMDcyODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IE5vdCBXb3J0aCBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaXMgc3VpdGFibGUgZm9yIGZ1enppbmcuIEZpcnN0LCBJIHNlZSB3ZSdyZSBkZWFsaW5nIHdpdGggYHN0bW1hY2AgZHJpdmVycy4gUmlnaHQgYXdheSwgbXkga25vd2xlZGdlIGtpY2tzIGluOiB0aGVzZSBhcmUgaGFyZHdhcmUgZHJpdmVycywgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBwaHlzaWNhbCBFdGhlcm5ldCBNQUMgY29udHJvbGxlcnMg4oCTIGNoaXBzIGZyb20gU3lub3BzeXMgRGVzaWduV2FyZSwgaW50ZWdyYXRlZCBpbnRvIFNvQ3Mgb3IgY29ubmVjdGVkIHZpYSBQQ0kuIEludGVsIEVITC9UR0wvQURMLCBTeW5vcHN5cyBHTUFDLCBMb29uZ3NvbiwgTW90b3Jjb21tLCBhbmQgdmFyaW91cyBBUk0vTUlQUyBTb0NzIGFyZSBtZW50aW9uZWQsIGFuZCBJICprbm93KiB0aG9zZSBhcmVuJ3QgdGhpbmdzIHR5cGljYWxseSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBlbnZpcm9ubWVudHMsIHdoaWNoIGFyZSB3aGF0IHN5emthbGxlciB1c3VhbGx5IGxldmVyYWdlcy5cblxuTGV0J3MgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgKmFueSogdmlydHVhbCBvciBlbXVsYXRlZCBlcXVpdmFsZW50IOKAkyBzb21ldGhpbmcgbGlrZSBgbmV0a2l0YCwgYGR1bW15YCwgYHZldGhgLCBgdGFwYCwgYHR1bmAsIGBtYWN2dGFwYCwgYGxvb3BiYWNrYCwgb3IgYHZpcnRpby1uZXRgIGZvciBgc3RtbWFjYC4gTm9wZS4gSXQncyBzdHJpY3RseSBmb3IgcGh5c2ljYWwgaGFyZHdhcmUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB3aGF0J3MgYmVlbiBtb2RpZmllZC4gVGhlIHBhdGNoIGlzIHZlcnkgZm9jdXNlZCDigJMganVzdCBgc3RtbWFjX21haW4uY2AgYW5kIGBzdG1tYWNfc2VsZnRlc3RzLmNgLiBUaGF0IG5hcnJvd3MgdGhlIHNjb3BlIHNpZ25pZmljYW50bHkuXG5cbk5vdywgSSdsbCBhcHBseSB0aGUgc3BlY2lmaWMgY3JpdGVyaWEgZGVmaW5lZCBpbiBTZWN0aW9uIDIuIFRoZSBjb3JlIG9mIGl0IGJvaWxzIGRvd24gdG8gY2hlY2tpbmcgaWYgdGhlIG1vZGlmaWVkIGNvZGUgZmFsbHMgaW50byB0aGUgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBjYXRlZ29yeS4gTGV0J3Mgc2VlLi4uIGEgdmVuZG9yLXNwZWNpZmljIEV0aGVybmV0IE1BQyBkcml2ZXIgKHN0bWljcm8gLyBzdG1tYWMpIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSwgb3IgYW4gQVNJQy9QQ0llL1NvQywgd2hpY2ggaXNuJ3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVT8gQmluZ28hIFRoYXQncyBhIHBlcmZlY3QgZml0LlxuXG5UaGVyZWZvcmU6XG5cbiogICBgV29ydGhGdXp6aW5nYDogZmFsc2Ug4oCTIEJlY2F1c2UgdGhpcyBjb2RlIGlzIGluaGVyZW50bHkgdGllZCB0byBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBcXFsgXSDigJMgTm8gcmVsZXZhbnQgc3ltYm9scyB0byBmb2N1cyBvbiBzaW5jZSB0aGUgZHJpdmVyIGlzIHVucmVhY2hhYmxlLlxuKiAgIGBFbmFibGVDb25maWdzYDogXFxbIF0g4oCTIE5vdCBhcHBsaWNhYmxlLCB0aGUgZHJpdmVyIGlzIG5vdCBhcHBsaWNhYmxlLlxuKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNUTWljcm9lbGVjdHJvbmljcyAvIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIGRyaXZlciAoc3RtbWFjKSwgc3BlY2lmaWNhbGx5IGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9uIGZvciBNVFUgY29uZmlndXJhdGlvbiBhbmQgZXRodG9vbCBzZWxmdGVzdHMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChTb0MgTUFDIG9yIHNwZWNpZmljIFBDSSBkZXZpY2VzKSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgUUVNVS9zeXprYWxsZXIgZnV6emluZyBlbnZpcm9ubWVudHMgb24gYW1kNjQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ2xsIGRvdWJsZS1jaGVjayBldmVyeXRoaW5nIG9uZSBsYXN0IHRpbWUuIEFsbCB0aGUgY3JpdGVyaWEgYXJlIG1ldCBmb3IgbWFraW5nIHRoaXMgYSBcIm5vLWdvXCIgZm9yIGZ1enppbmcgaW4gdGhlIHN0YW5kYXJkIHNldHVwLlxuXG5Pa2F5LCBJJ20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzE4LCJPdXRwdXRUb2tlbnMiOjExOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNzoyMjo0MS42MDA5MTYyNDNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTVE1pY3JvZWxlY3Ryb25pY3MgLyBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IE1BQyBkcml2ZXIgKHN0bW1hYyksIHNwZWNpZmljYWxseSBidWZmZXIgc2l6ZSBjYWxjdWxhdGlvbiBhbmQgc2VsZnRlc3QgaGVscGVycy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKEFSTS9NSVBTL2V0Yy4gU29DcyBvciBzcGVjaWZpYyBJbnRlbC9Mb29uZ3Nvbi9TeW5vcHN5cyBQQ0kgTklDIGRldmljZXMpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgb24gYW1kNjQsIHJlbmRlcmluZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIC8gU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBNQUMgZHJpdmVyIChzdG1tYWMpLCBzcGVjaWZpY2FsbHkgYnVmZmVyIHNpemUgY2FsY3VsYXRpb24gYW5kIHNlbGZ0ZXN0IGhlbHBlcnMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChBUk0vTUlQUy9ldGMuIFNvQ3Mgb3Igc3BlY2lmaWMgSW50ZWwvTG9vbmdzb24vU3lub3BzeXMgUENJIE5JQyBkZXZpY2VzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIG9uIGFtZDY0LCByZW5kZXJpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTc6MjI6NDEuNjAwOTQ0NTAzWiIsIlNlcSI6OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zvtg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 17:02:46 +0000 UTC FinishedAt: 2026-09-10 17:22:42 +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+CgkJCTx0ZD4yMDI2LzA5LzEwIDE3OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNUTWljcm9lbGVjdHJvbmljcyAvIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIGRyaXZlciAoc3RtbWFjKSwgc3BlY2lmaWNhbGx5IGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9uIGFuZCBzZWxmdGVzdCBoZWxwZXJzLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoQVJNL01JUFMvZXRjLiBTb0NzIG9yIHNwZWNpZmljIEludGVsL0xvb25nc29uL1N5bm9wc3lzIFBDSSBOSUMgZGV2aWNlcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBvbiBhbWQ2NCwgcmVuZGVyaW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTc6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYTgwNjk2MWVkYzE0MTAwNzg0ZGE3OTY1NzA2MDNkYWM5ZjdlNGJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTc6MjI6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbmluZGV4IDVmZTdlOTVmZGQzNDUuLjM2NjRhMjk4NTc0YWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG5AQCAtMTUzNiwxNyAmIzQzOzE1MzYsMTcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzdG1tYWNfcnhfb2Zmc2V0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdHJldHVybiBORVRfU0tCX1BBRCAmIzQzOyBORVRfSVBfQUxJR047XG4gfVxuIFxuLXN0YXRpYyBpbnQgc3RtbWFjX3NldF9iZnNpemUoaW50IG10dSlcbiYjNDM7c3RhdGljIGludCBzdG1tYWNfc2V0X2Jmc2l6ZShpbnQgbGVuKVxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAobXR1IFx1MDAzZT0gQlVGX1NJWkVfOEtpQilcbiYjNDM7XHRpZiAobGVuIFx1MDAzZSBCVUZfU0laRV84S2lCKVxuIFx0XHRyZXQgPSBCVUZfU0laRV8xNktpQjtcbi1cdGVsc2UgaWYgKG10dSBcdTAwM2U9IEJVRl9TSVpFXzRLaUIpXG4mIzQzO1x0ZWxzZSBpZiAobGVuIFx1MDAzZSBCVUZfU0laRV80S2lCKVxuIFx0XHRyZXQgPSBCVUZfU0laRV84S2lCO1xuLVx0ZWxzZSBpZiAobXR1IFx1MDAzZT0gQlVGX1NJWkVfMktpQilcbiYjNDM7XHRlbHNlIGlmIChsZW4gXHUwMDNlIEJVRl9TSVpFXzJLaUIpXG4gXHRcdHJldCA9IEJVRl9TSVpFXzRLaUI7XG4tXHRlbHNlIGlmIChtdHUgXHUwMDNlIERFRkFVTFRfQlVGU0laRSlcbiYjNDM7XHRlbHNlIGlmIChsZW4gXHUwMDNlIERFRkFVTFRfQlVGU0laRSlcbiBcdFx0cmV0ID0gQlVGX1NJWkVfMktpQjtcbiBcdGVsc2VcbiBcdFx0cmV0ID0gREVGQVVMVF9CVUZTSVpFO1xuQEAgLTQwNjMsNyAmIzQzOzQwNjMsNyBAQCBzdGF0aWMgc3RydWN0IHN0bW1hY19kbWFfY29uZiAqXG4gc3RtbWFjX3NldHVwX2RtYV9kZXNjKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IG10dSlcbiB7XG4gXHRzdHJ1Y3Qgc3RtbWFjX2RtYV9jb25mICpkbWFfY29uZjtcbi1cdGludCBiZnNpemUsIHJldDtcbiYjNDM7XHRpbnQgYmZzaXplLCBsZW4sIHJldDtcbiBcdHU4IGNoYW47XG4gXG4gXHRkbWFfY29uZiA9IGt6YWxsb2Nfb2JqKCpkbWFfY29uZik7XG5AQCAtNDA3MywxMyAmIzQzOzQwNzMsMTUgQEAgc3RtbWFjX3NldHVwX2RtYV9kZXNjKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IG10dSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXHR9XG4gXG4tXHQvKiBSZXR1cm5zIDAgb3IgQlVGX1NJWkVfMTZLaUIgaWYgbXR1IFx1MDAzZSA4S2lCIGFuZCBkd21hYzQgb3IgcmluZyBtb2RlICovXG4tXHRiZnNpemUgPSBzdG1tYWNfc2V0XzE2a2liX2Jmc2l6ZShwcml2LCBtdHUpO1xuJiM0MztcdGxlbiA9IG10dSAmIzQzOyBFVEhfSExFTiAmIzQzOyAyICogVkxBTl9ITEVOICYjNDM7IEVUSF9GQ1NfTEVOICYjNDM7IE5FVF9JUF9BTElHTjtcbiYjNDM7XG4mIzQzO1x0LyogUmV0dXJucyAwIG9yIEJVRl9TSVpFXzE2S2lCIGlmIGxlbiBcdTAwM2UgOEtpQiBhbmQgZHdtYWM0IG9yIHJpbmcgbW9kZSAqL1xuJiM0MztcdGJmc2l6ZSA9IHN0bW1hY19zZXRfMTZraWJfYmZzaXplKHByaXYsIGxlbik7XG4gXHRpZiAoYmZzaXplIFx1MDAzYyAwKVxuIFx0XHRiZnNpemUgPSAwO1xuIFxuIFx0aWYgKGJmc2l6ZSBcdTAwM2MgQlVGX1NJWkVfMTZLaUIpXG4tXHRcdGJmc2l6ZSA9IHN0bW1hY19zZXRfYmZzaXplKG10dSk7XG4mIzQzO1x0XHRiZnNpemUgPSBzdG1tYWNfc2V0X2Jmc2l6ZShsZW4pO1xuIFxuIFx0ZG1hX2NvbmYtXHUwMDNlZG1hX2J1Zl9zeiA9IGJmc2l6ZTtcbiBcdC8qIENob3NlIHRoZSB0eC9yeCBzaXplIGZyb20gdGhlIGFscmVhZHkgZGVmaW5lZCBvbmUgaW4gdGhlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jXG5pbmRleCA2MzcyZWM3YzNmMzE3Li5mYzhkNjkyNjBmNDMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aHRvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91ZHAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcC5oXHUwMDNlXG5AQCAtMjM3LDYgJiM0MzsyMzgsMTAgQEAgc3RydWN0IHN0bW1hY190ZXN0X3ByaXYge1xuIFx0c3RydWN0IHN0bW1hY19wYWNrZXRfYXR0cnMgKnBhY2tldDtcbiBcdHN0cnVjdCBwYWNrZXRfdHlwZSBwdDtcbiBcdHN0cnVjdCBjb21wbGV0aW9uIGNvbXA7XG4mIzQzO1x0X19iZTE2IHBhY2tldF90eXBlO1xuJiM0MztcdGludCAoKmZ1bmMpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuJiM0MztcdFx0ICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX25kZXYpO1xuJiM0MztcdGJvb2wgY2FwdHVyZV9hbGw7XG4gXHRpbnQgZG91YmxlX3ZsYW47XG4gXHRpbnQgdmxhbl9pZDtcbiBcdGludCBvaztcbkBAIC0zMTYsNiAmIzQzOzMyMSw1MCBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2xvb3BiYWNrX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgc3RtbWFjX3NmdF9maWx0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19uZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN0bW1hY190ZXN0X3ByaXYgKnRwcml2ID0gcHQtXHUwMDNlYWZfcGFja2V0X3ByaXY7XG4mIzQzO1x0c3RydWN0IGV0aGhkciAqaGRyID0gZXRoX2hkcihza2IpO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoaGRyLVx1MDAzZWhfcHJvdG8gPT0gdHByaXYtXHUwMDNlcGFja2V0X3R5cGUpIHtcbiYjNDM7XHRcdHN0cnVjdCBza19idWZmICpuc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5za2IpXG4mIzQzO1x0XHRcdHJldCA9IHRwcml2LVx1MDAzZWZ1bmMobnNrYiwgbmRldiwgcHQsIG9yaWdfbmRldik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzdG1tYWNfc2Z0X2FkZF9wYWNrKHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3RtbWFjX3Rlc3RfcHJpdiAqdHByaXYgPSBwdC1cdTAwM2VhZl9wYWNrZXRfcHJpdjtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGRldl91c2VzX2RzYSh0cHJpdi1cdTAwM2VwdC5kZXYpIHx8IHRwcml2LVx1MDAzZWNhcHR1cmVfYWxsKSB7XG4mIzQzO1x0XHR0cHJpdi1cdTAwM2VwYWNrZXRfdHlwZSA9IHRwcml2LVx1MDAzZXB0LnR5cGU7XG4mIzQzO1x0XHR0cHJpdi1cdTAwM2VmdW5jID0gdHByaXYtXHUwMDNlcHQuZnVuYztcbiYjNDM7XG4mIzQzO1x0XHQvKiBEU0EgY29uZHVpdCB3aWxsIHJlcG9ydCBFVEhfUF9YRFNBLCBzbyBvdXIgcGFja2V0IGhhbmRsZXJcbiYjNDM7XHRcdCAqIHdvbiYjMzk7dCBtYXRjaC4gTGV0JiMzOTtzIHJlZ2lzdGVyIGEgRVRIX1BfQUxMIG1hdGNoIGFuZCBmaWx0ZXJcbiYjNDM7XHRcdCAqIG1hbnVhbGx5IGluIHN0bW1hY19zZnRfZmlsdGVyLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR0cHJpdi1cdTAwM2VwdC50eXBlID0gaHRvbnMoRVRIX1BfQUxMKTtcbiYjNDM7XHRcdHRwcml2LVx1MDAzZXB0LmZ1bmMgPSBzdG1tYWNfc2Z0X2ZpbHRlcjtcbiYjNDM7XHRcdHRwcml2LVx1MDAzZXB0Lmlnbm9yZV9vdXRnb2luZyA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZfYWRkX3BhY2socHQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzdG1tYWNfc2Z0X3JlbW92ZV9wYWNrKHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQpXG4mIzQzO3tcbiYjNDM7XHRkZXZfcmVtb3ZlX3BhY2socHQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sb29wYmFjayhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdFx0XHQgIHN0cnVjdCBzdG1tYWNfcGFja2V0X2F0dHJzICphdHRyKVxuIHtcbkBAIC0zMzcsNyAmIzQzOzM4Niw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sb29wYmFjayhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHR0cHJpdi1cdTAwM2VwYWNrZXQgPSBhdHRyO1xuIFxuIFx0aWYgKCFhdHRyLVx1MDAzZWRvbnRfd2FpdClcbi1cdFx0ZGV2X2FkZF9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiYjNDM7XHRcdHN0bW1hY19zZnRfYWRkX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuIFxuIFx0c2tiID0gc3RtbWFjX3Rlc3RfZ2V0X3VkcF9za2IocHJpdiwgYXR0cik7XG4gXHRpZiAoIXNrYikge1xuQEAgLTM2MCw3ICYjNDM7NDA5LDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2xvb3BiYWNrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbiBcbiBjbGVhbnVwOlxuIFx0aWYgKCFhdHRyLVx1MDAzZWRvbnRfd2FpdClcbi1cdFx0ZGV2X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiYjNDM7XHRcdHN0bW1hY19zZnRfcmVtb3ZlX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuIFx0a2ZyZWUodHByaXYpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtNDE0LDcgJiM0Mzs0NjMsNyBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X21tYyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gc3RhdGljIGludCBzdG1tYWNfdGVzdF9lZWUoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbiBcdHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKmluaXRpYWwsICpmaW5hbDtcbi1cdGludCByZXRyaWVzID0gMTA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0aW1lb3V0LCBtYXhfZHVyYXRpb247XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFwcml2LVx1MDAzZWRtYV9jYXAuZWVlIHx8ICFwcml2LVx1MDAzZWVlZV9hY3RpdmUpXG5AQCAtNDMwLDE0ICYjNDM7NDc5LDIxIEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfZWVlKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdFx0Z290byBvdXRfZnJlZV9pbml0aWFsO1xuIFx0fVxuIFxuJiM0MztcdC8qIFNuYXBzaG90IHN0YXRzLCB3ZSB3YW50IHRvIGNvdW50IHRoZSBpbl9scGkgZXZlbnRzLiBXZSBtYXkgZW50ZXJcbiYjNDM7XHQgKiBMUEkganVzdCBhZnRlciB0aGUgcGFja2V0IHdhcyBzZW50LlxuJiM0MztcdCAqL1xuIFx0bWVtY3B5KGluaXRpYWwsIFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLCBzaXplb2YoKmluaXRpYWwpKTtcbiBcbiYjNDM7XHQvKiBTZW5kIGEgZnJhbWUsIHRoZW4gd2FpdCB0byBlbnRlciBMUEkgKi9cbiBcdHJldCA9IHN0bW1hY190ZXN0X21hY19sb29wYmFjayhwcml2KTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X2ZyZWVfZmluYWw7XG4gXG4mIzQzO1x0bWF4X2R1cmF0aW9uID0gdXNlY3NfdG9famlmZmllcygyICogcHJpdi1cdTAwM2V0eF9scGlfdGltZXIpO1xuJiM0MztcbiBcdC8qIFdlIGhhdmUgbm8gdHJhZmZpYyBpbiB0aGUgbGluZSBzbywgc29vbmVyIG9yIGxhdGVyIGl0IHdpbGwgZ28gTFBJICovXG4tXHR3aGlsZSAoLS1yZXRyaWVzKSB7XG4mIzQzO1x0dGltZW91dCA9IGppZmZpZXMgJiM0MzsgbWF4X2R1cmF0aW9uO1xuJiM0MztcdHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkge1xuIFx0XHRtZW1jcHkoZmluYWwsIFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLCBzaXplb2YoKmZpbmFsKSk7XG4gXG4gXHRcdGlmIChmaW5hbC1cdTAwM2VpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uIFx1MDAzZVxuQEAgLTQ0NiwyMCAmIzQzOzUwMiwzOCBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2VlZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXHRcdG1zbGVlcCgxMDApO1xuIFx0fVxuIFxuLVx0aWYgKCFyZXRyaWVzKSB7XG4mIzQzO1x0bWVtY3B5KGZpbmFsLCBcdTAwMjZwcml2LVx1MDAzZXhzdGF0cywgc2l6ZW9mKCpmaW5hbCkpO1xuJiM0MztcdGlmIChmaW5hbC1cdTAwM2VpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uIFx1MDAzYz1cbiYjNDM7XHQgICAgaW5pdGlhbC1cdTAwM2VpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uKSB7XG4gXHRcdHJldCA9IC1FVElNRURPVVQ7XG4gXHRcdGdvdG8gb3V0X2ZyZWVfZmluYWw7XG4gXHR9XG4gXG4tXHRpZiAoZmluYWwtXHUwMDNlaXJxX3R4X3BhdGhfaW5fbHBpX21vZGVfbiBcdTAwM2M9XG4tXHQgICAgaW5pdGlhbC1cdTAwM2VpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uKSB7XG4tXHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0LyogUmUtc25hcHNob3QsIGFzIHdlIHdhbnQgdG8gbWVhc3VyZSBleGl0X2xwaSBldmVudHMuIFdlIHNob3VsZCBiZVxuJiM0MztcdCAqIGluIExQSSByaWdodCBub3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0bWVtY3B5KGluaXRpYWwsIFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLCBzaXplb2YoKmluaXRpYWwpKTtcbiYjNDM7XG4mIzQzO1x0LyogVFggc29tZXRoaW5nIHNvIHdlIGdvIG91dCBvZiBMUEkgKi9cbiYjNDM7XHRyZXQgPSBzdG1tYWNfdGVzdF9tYWNfbG9vcGJhY2socHJpdik7XG4mIzQzO1x0aWYgKHJldClcbiBcdFx0Z290byBvdXRfZnJlZV9maW5hbDtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgdGhlIGV4aXQgTFBJIGludGVycnVwdCAqL1xuJiM0MztcdHRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IG1heF9kdXJhdGlvbjtcbiYjNDM7XHR3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcbiYjNDM7XHRcdG1lbWNweShmaW5hbCwgXHUwMDI2cHJpdi1cdTAwM2V4c3RhdHMsIHNpemVvZigqZmluYWwpKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZmluYWwtXHUwMDNlaXJxX3R4X3BhdGhfZXhpdF9scGlfbW9kZV9uIFx1MDAzZVxuJiM0MztcdFx0ICAgIGluaXRpYWwtXHUwMDNlaXJxX3R4X3BhdGhfZXhpdF9scGlfbW9kZV9uKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdG1zbGVlcCgxMDApO1xuIFx0fVxuIFxuJiM0MztcdG1lbWNweShmaW5hbCwgXHUwMDI2cHJpdi1cdTAwM2V4c3RhdHMsIHNpemVvZigqZmluYWwpKTtcbiBcdGlmIChmaW5hbC1cdTAwM2VpcnFfdHhfcGF0aF9leGl0X2xwaV9tb2RlX24gXHUwMDNjPVxuIFx0ICAgIGluaXRpYWwtXHUwMDNlaXJxX3R4X3BhdGhfZXhpdF9scGlfbW9kZV9uKSB7XG4tXHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRyZXQgPSAtRVRJTUVET1VUO1xuIFx0XHRnb3RvIG91dF9mcmVlX2ZpbmFsO1xuIFx0fVxuIFxuQEAgLTc2Nyw3ICYjNDM7ODQxLDcgQEAgc3RhdGljIGludCBzdG1tYWNfdGVzdF9mbG93Y3RybChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXHR0cHJpdi1cdTAwM2VwdC5mdW5jID0gc3RtbWFjX3Rlc3RfZmxvd2N0cmxfdmFsaWRhdGU7XG4gXHR0cHJpdi1cdTAwM2VwdC5kZXYgPSBwcml2LVx1MDAzZWRldjtcbiBcdHRwcml2LVx1MDAzZXB0LmFmX3BhY2tldF9wcml2ID0gdHByaXY7XG4tXHRkZXZfYWRkX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuJiM0MztcdHN0bW1hY19zZnRfYWRkX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuIFxuIFx0LyogQ29tcHV0ZSBtaW5pbXVtIG51bWJlciBvZiBwYWNrZXRzIHRvIG1ha2UgRklGTyBmdWxsICovXG4gXHRwa3RfY291bnQgPSByeF9maWZvX3NpemU7XG5AQCAtODIzLDcgJiM0Mzs4OTcsNyBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2Zsb3djdHJsKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBjbGVhbnVwOlxuIFx0ZGV2X21jX2RlbChwcml2LVx1MDAzZWRldiwgcGFkZHIpO1xuIFx0ZGV2X3NldF9wcm9taXNjdWl0eShwcml2LVx1MDAzZWRldiwgLTEpO1xuLVx0ZGV2X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiYjNDM7XHRzdG1tYWNfc2Z0X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiBcdGtmcmVlKHRwcml2KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTkyMSw2ICYjNDM7OTk1LDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X3ZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdHRwcml2LVx1MDAzZXB0LmRldiA9IHByaXYtXHUwMDNlZGV2O1xuIFx0dHByaXYtXHUwMDNlcHQuYWZfcGFja2V0X3ByaXYgPSB0cHJpdjtcbiBcdHRwcml2LVx1MDAzZXBhY2tldCA9IFx1MDAyNmF0dHI7XG4mIzQzO1x0dHByaXYtXHUwMDNlY2FwdHVyZV9hbGwgPSB0cnVlO1xuIFxuIFx0LypcbiBcdCAqIEFzIHdlIHVzZSBIQVNIIGZpbHRlcmluZywgZmFsc2UgcG9zaXRpdmVzIG1heSBhcHBlYXIuIFRoaXMgaXMgYVxuQEAgLTkyOCw3ICYjNDM7MTAwMyw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF92bGFuZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXHQgKiBIQVNIIHZhbHVlcy5cbiBcdCAqL1xuIFx0dHByaXYtXHUwMDNldmxhbl9pZCA9IDB4MTIzO1xuLVx0ZGV2X2FkZF9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiYjNDM7XHRzdG1tYWNfc2Z0X2FkZF9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiBcbiBcdHJldCA9IHZsYW5fdmlkX2FkZChwcml2LVx1MDAzZWRldiwgaHRvbnMoRVRIX1BfODAyMVEpLCB0cHJpdi1cdTAwM2V2bGFuX2lkKTtcbiBcdGlmIChyZXQpXG5AQCAtOTY4LDcgJiM0MzsxMDQzLDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X3ZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiB2bGFuX2RlbDpcbiBcdHZsYW5fdmlkX2RlbChwcml2LVx1MDAzZWRldiwgaHRvbnMoRVRIX1BfODAyMVEpLCB0cHJpdi1cdTAwM2V2bGFuX2lkKTtcbiBjbGVhbnVwOlxuLVx0ZGV2X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiYjNDM7XHRzdG1tYWNfc2Z0X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiBcdGtmcmVlKHRwcml2KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTEwMTUsNiAmIzQzOzEwOTAsNyBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfZHZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdHRwcml2LVx1MDAzZXB0LmRldiA9IHByaXYtXHUwMDNlZGV2O1xuIFx0dHByaXYtXHUwMDNlcHQuYWZfcGFja2V0X3ByaXYgPSB0cHJpdjtcbiBcdHRwcml2LVx1MDAzZXBhY2tldCA9IFx1MDAyNmF0dHI7XG4mIzQzO1x0dHByaXYtXHUwMDNlY2FwdHVyZV9hbGwgPSB0cnVlO1xuIFxuIFx0LypcbiBcdCAqIEFzIHdlIHVzZSBIQVNIIGZpbHRlcmluZywgZmFsc2UgcG9zaXRpdmVzIG1heSBhcHBlYXIuIFRoaXMgaXMgYVxuQEAgLTEwMjIsNyAmIzQzOzEwOTgsNyBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfZHZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdCAqIEhBU0ggdmFsdWVzLlxuIFx0ICovXG4gXHR0cHJpdi1cdTAwM2V2bGFuX2lkID0gMHgxMjM7XG4tXHRkZXZfYWRkX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuJiM0MztcdHN0bW1hY19zZnRfYWRkX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuIFxuIFx0cmV0ID0gdmxhbl92aWRfYWRkKHByaXYtXHUwMDNlZGV2LCBodG9ucyhFVEhfUF84MDIxQUQpLCB0cHJpdi1cdTAwM2V2bGFuX2lkKTtcbiBcdGlmIChyZXQpXG5AQCAtMTA2Miw3ICYjNDM7MTEzOCw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9kdmxhbmZpbHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHZsYW5fZGVsOlxuIFx0dmxhbl92aWRfZGVsKHByaXYtXHUwMDNlZGV2LCBodG9ucyhFVEhfUF84MDIxQUQpLCB0cHJpdi1cdTAwM2V2bGFuX2lkKTtcbiBjbGVhbnVwOlxuLVx0ZGV2X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiYjNDM7XHRzdG1tYWNfc2Z0X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiBcdGtmcmVlKHRwcml2KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTEyOTMsNyAmIzQzOzEzNjksOCBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X3ZsYW5vZmZfY29tbW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgYm9vbCBzdmxhbilcbiBcdHRwcml2LVx1MDAzZXB0LmFmX3BhY2tldF9wcml2ID0gdHByaXY7XG4gXHR0cHJpdi1cdTAwM2VwYWNrZXQgPSBcdTAwMjZhdHRyO1xuIFx0dHByaXYtXHUwMDNldmxhbl9pZCA9IDB4MTIzO1xuLVx0ZGV2X2FkZF9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiYjNDM7XHR0cHJpdi1cdTAwM2VjYXB0dXJlX2FsbCA9IHRydWU7XG4mIzQzO1x0c3RtbWFjX3NmdF9hZGRfcGFjayhcdTAwMjZ0cHJpdi1cdTAwM2VwdCk7XG4gXG4gXHRyZXQgPSB2bGFuX3ZpZF9hZGQocHJpdi1cdTAwM2VkZXYsIGh0b25zKHByb3RvKSwgdHByaXYtXHUwMDNldmxhbl9pZCk7XG4gXHRpZiAocmV0KVxuQEAgLTEzMjAsNyAmIzQzOzEzOTcsNyBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X3ZsYW5vZmZfY29tbW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgYm9vbCBzdmxhbilcbiB2bGFuX2RlbDpcbiBcdHZsYW5fdmlkX2RlbChwcml2LVx1MDAzZWRldiwgaHRvbnMocHJvdG8pLCB0cHJpdi1cdTAwM2V2bGFuX2lkKTtcbiBjbGVhbnVwOlxuLVx0ZGV2X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiYjNDM7XHRzdG1tYWNfc2Z0X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiBcdGtmcmVlKHRwcml2KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTEzMzIsNyAmIzQzOzE0MDksNyBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X3ZsYW5vZmYoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFxuIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3Rfc3ZsYW5vZmYoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbi1cdGlmICghcHJpdi1cdTAwM2VkbWFfY2FwLmR2bGFuKVxuJiM0MztcdGlmICghKHByaXYtXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fU1RBR19UWCkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdHJldHVybiBzdG1tYWNfdGVzdF92bGFub2ZmX2NvbW1vbihwcml2LCB0cnVlKTtcbiB9XG5AQCAtMTY5OSw2ICYjNDM7MTc3Niw5IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9qdW1ibyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUxNiBxdWV1ZSlcbiBcdHN0cnVjdCBzdG1tYWNfcGFja2V0X2F0dHJzIGF0dHIgPSB7IH07XG4gXHRpbnQgc2l6ZSA9IHByaXYtXHUwMDNlZG1hX2NvbmYuZG1hX2J1Zl9zejtcbiBcbiYjNDM7XHRpZiAoIWR3bWFjX2lzX3htYWMocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZSkpXG4mIzQzO1x0XHRzaXplIC09IE5FVF9JUF9BTElHTjtcbiYjNDM7XG4gXHRhdHRyLmRzdCA9IHByaXYtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyO1xuIFx0YXR0ci5tYXhfc2l6ZSA9IHNpemUgLSBFVEhfRkNTX0xFTjtcbiBcdGF0dHIucXVldWVfbWFwcGluZyA9IHF1ZXVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE3OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTVE1pY3JvZWxlY3Ryb25pY3MgLyBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IE1BQyBkcml2ZXIgKHN0bW1hYyksIHNwZWNpZmljYWxseSBidWZmZXIgc2l6ZSBjYWxjdWxhdGlvbiBhbmQgc2VsZnRlc3QgaGVscGVycy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKEFSTS9NSVBTL2V0Yy4gU29DcyBvciBzcGVjaWZpYyBJbnRlbC9Mb29uZ3Nvbi9TeW5vcHN5cyBQQ0kgTklDIGRldmljZXMpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgb24gYW1kNjQsIHJlbmRlcmluZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2E4MDY5NjFlZGMxNDEwMDc4NGRhNzk2NTcwNjAzZGFjOWY3ZTRiZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDE3OjIyOjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMKaW5kZXggNWZlN2U5NWZkZDM0NS4uMzY2NGEyOTg1NzRhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jCkBAIC0xNTM2LDE3ICYjNDM7MTUzNiwxNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHN0bW1hY19yeF9vZmZzZXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogCXJldHVybiBORVRfU0tCX1BBRCAmIzQzOyBORVRfSVBfQUxJR047CiB9CiAKLXN0YXRpYyBpbnQgc3RtbWFjX3NldF9iZnNpemUoaW50IG10dSkKJiM0MztzdGF0aWMgaW50IHN0bW1hY19zZXRfYmZzaXplKGludCBsZW4pCiB7CiAJaW50IHJldDsKIAotCWlmIChtdHUgJmd0Oz0gQlVGX1NJWkVfOEtpQikKJiM0MzsJaWYgKGxlbiAmZ3Q7IEJVRl9TSVpFXzhLaUIpCiAJCXJldCA9IEJVRl9TSVpFXzE2S2lCOwotCWVsc2UgaWYgKG10dSAmZ3Q7PSBCVUZfU0laRV80S2lCKQomIzQzOwllbHNlIGlmIChsZW4gJmd0OyBCVUZfU0laRV80S2lCKQogCQlyZXQgPSBCVUZfU0laRV84S2lCOwotCWVsc2UgaWYgKG10dSAmZ3Q7PSBCVUZfU0laRV8yS2lCKQomIzQzOwllbHNlIGlmIChsZW4gJmd0OyBCVUZfU0laRV8yS2lCKQogCQlyZXQgPSBCVUZfU0laRV80S2lCOwotCWVsc2UgaWYgKG10dSAmZ3Q7IERFRkFVTFRfQlVGU0laRSkKJiM0MzsJZWxzZSBpZiAobGVuICZndDsgREVGQVVMVF9CVUZTSVpFKQogCQlyZXQgPSBCVUZfU0laRV8yS2lCOwogCWVsc2UKIAkJcmV0ID0gREVGQVVMVF9CVUZTSVpFOwpAQCAtNDA2Myw3ICYjNDM7NDA2Myw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX2RtYV9jb25mICoKIHN0bW1hY19zZXR1cF9kbWFfZGVzYyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBtdHUpCiB7CiAJc3RydWN0IHN0bW1hY19kbWFfY29uZiAqZG1hX2NvbmY7Ci0JaW50IGJmc2l6ZSwgcmV0OwomIzQzOwlpbnQgYmZzaXplLCBsZW4sIHJldDsKIAl1OCBjaGFuOwogCiAJZG1hX2NvbmYgPSBremFsbG9jX29iaigqZG1hX2NvbmYpOwpAQCAtNDA3MywxMyAmIzQzOzQwNzMsMTUgQEAgc3RtbWFjX3NldHVwX2RtYV9kZXNjKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IG10dSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQogCi0JLyogUmV0dXJucyAwIG9yIEJVRl9TSVpFXzE2S2lCIGlmIG10dSAmZ3Q7IDhLaUIgYW5kIGR3bWFjNCBvciByaW5nIG1vZGUgKi8KLQliZnNpemUgPSBzdG1tYWNfc2V0XzE2a2liX2Jmc2l6ZShwcml2LCBtdHUpOwomIzQzOwlsZW4gPSBtdHUgJiM0MzsgRVRIX0hMRU4gJiM0MzsgMiAqIFZMQU5fSExFTiAmIzQzOyBFVEhfRkNTX0xFTiAmIzQzOyBORVRfSVBfQUxJR047CiYjNDM7CiYjNDM7CS8qIFJldHVybnMgMCBvciBCVUZfU0laRV8xNktpQiBpZiBsZW4gJmd0OyA4S2lCIGFuZCBkd21hYzQgb3IgcmluZyBtb2RlICovCiYjNDM7CWJmc2l6ZSA9IHN0bW1hY19zZXRfMTZraWJfYmZzaXplKHByaXYsIGxlbik7CiAJaWYgKGJmc2l6ZSAmbHQ7IDApCiAJCWJmc2l6ZSA9IDA7CiAKIAlpZiAoYmZzaXplICZsdDsgQlVGX1NJWkVfMTZLaUIpCi0JCWJmc2l6ZSA9IHN0bW1hY19zZXRfYmZzaXplKG10dSk7CiYjNDM7CQliZnNpemUgPSBzdG1tYWNfc2V0X2Jmc2l6ZShsZW4pOwogCiAJZG1hX2NvbmYtJmd0O2RtYV9idWZfc3ogPSBiZnNpemU7CiAJLyogQ2hvc2UgdGhlIHR4L3J4IHNpemUgZnJvbSB0aGUgYWxyZWFkeSBkZWZpbmVkIG9uZSBpbiB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYwppbmRleCA2MzcyZWM3YzNmMzE3Li5mYzhkNjkyNjBmNDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2V0aHRvb2wuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VkcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvZHNhLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3BrdF9jbHMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvcGt0X3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjcC5oJmd0OwpAQCAtMjM3LDYgJiM0MzsyMzgsMTAgQEAgc3RydWN0IHN0bW1hY190ZXN0X3ByaXYgewogCXN0cnVjdCBzdG1tYWNfcGFja2V0X2F0dHJzICpwYWNrZXQ7CiAJc3RydWN0IHBhY2tldF90eXBlIHB0OwogCXN0cnVjdCBjb21wbGV0aW9uIGNvbXA7CiYjNDM7CV9fYmUxNiBwYWNrZXRfdHlwZTsKJiM0MzsJaW50ICgqZnVuYykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiYjNDM7CQkgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfbmRldik7CiYjNDM7CWJvb2wgY2FwdHVyZV9hbGw7CiAJaW50IGRvdWJsZV92bGFuOwogCWludCB2bGFuX2lkOwogCWludCBvazsKQEAgLTMxNiw2ICYjNDM7MzIxLDUwIEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfbG9vcGJhY2tfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgc3RtbWFjX3NmdF9maWx0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiYjNDM7CQkJICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LAomIzQzOwkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdG1tYWNfdGVzdF9wcml2ICp0cHJpdiA9IHB0LSZndDthZl9wYWNrZXRfcHJpdjsKJiM0MzsJc3RydWN0IGV0aGhkciAqaGRyID0gZXRoX2hkcihza2IpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGhkci0mZ3Q7aF9wcm90byA9PSB0cHJpdi0mZ3Q7cGFja2V0X3R5cGUpIHsKJiM0MzsJCXN0cnVjdCBza19idWZmICpuc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CiYjNDM7CiYjNDM7CQlpZiAobnNrYikKJiM0MzsJCQlyZXQgPSB0cHJpdi0mZ3Q7ZnVuYyhuc2tiLCBuZGV2LCBwdCwgb3JpZ19uZGV2KTsKJiM0MzsJfQomIzQzOwomIzQzOwlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc3RtbWFjX3NmdF9hZGRfcGFjayhzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0KQomIzQzO3sKJiM0MzsJc3RydWN0IHN0bW1hY190ZXN0X3ByaXYgKnRwcml2ID0gcHQtJmd0O2FmX3BhY2tldF9wcml2OwomIzQzOwomIzQzOwlpZiAobmV0ZGV2X3VzZXNfZHNhKHRwcml2LSZndDtwdC5kZXYpIHx8IHRwcml2LSZndDtjYXB0dXJlX2FsbCkgewomIzQzOwkJdHByaXYtJmd0O3BhY2tldF90eXBlID0gdHByaXYtJmd0O3B0LnR5cGU7CiYjNDM7CQl0cHJpdi0mZ3Q7ZnVuYyA9IHRwcml2LSZndDtwdC5mdW5jOwomIzQzOwomIzQzOwkJLyogRFNBIGNvbmR1aXQgd2lsbCByZXBvcnQgRVRIX1BfWERTQSwgc28gb3VyIHBhY2tldCBoYW5kbGVyCiYjNDM7CQkgKiB3b24mIzM5O3QgbWF0Y2guIExldCYjMzk7cyByZWdpc3RlciBhIEVUSF9QX0FMTCBtYXRjaCBhbmQgZmlsdGVyCiYjNDM7CQkgKiBtYW51YWxseSBpbiBzdG1tYWNfc2Z0X2ZpbHRlci4KJiM0MzsJCSAqLwomIzQzOwkJdHByaXYtJmd0O3B0LnR5cGUgPSBodG9ucyhFVEhfUF9BTEwpOwomIzQzOwkJdHByaXYtJmd0O3B0LmZ1bmMgPSBzdG1tYWNfc2Z0X2ZpbHRlcjsKJiM0MzsJCXRwcml2LSZndDtwdC5pZ25vcmVfb3V0Z29pbmcgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldl9hZGRfcGFjayhwdCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHN0bW1hY19zZnRfcmVtb3ZlX3BhY2soc3RydWN0IHBhY2tldF90eXBlICpwdCkKJiM0Mzt7CiYjNDM7CWRldl9yZW1vdmVfcGFjayhwdCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2xvb3BiYWNrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKIAkJCQkgIHN0cnVjdCBzdG1tYWNfcGFja2V0X2F0dHJzICphdHRyKQogewpAQCAtMzM3LDcgJiM0MzszODYsNyBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbG9vcGJhY2soc3RydWN0IHN0bW1hY19wcml2ICpwcml2LAogCXRwcml2LSZndDtwYWNrZXQgPSBhdHRyOwogCiAJaWYgKCFhdHRyLSZndDtkb250X3dhaXQpCi0JCWRldl9hZGRfcGFjaygmYW1wO3Rwcml2LSZndDtwdCk7CiYjNDM7CQlzdG1tYWNfc2Z0X2FkZF9wYWNrKCZhbXA7dHByaXYtJmd0O3B0KTsKIAogCXNrYiA9IHN0bW1hY190ZXN0X2dldF91ZHBfc2tiKHByaXYsIGF0dHIpOwogCWlmICghc2tiKSB7CkBAIC0zNjAsNyAmIzQzOzQwOSw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sb29wYmFjayhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiAKIGNsZWFudXA6CiAJaWYgKCFhdHRyLSZndDtkb250X3dhaXQpCi0JCWRldl9yZW1vdmVfcGFjaygmYW1wO3Rwcml2LSZndDtwdCk7CiYjNDM7CQlzdG1tYWNfc2Z0X3JlbW92ZV9wYWNrKCZhbXA7dHByaXYtJmd0O3B0KTsKIAlrZnJlZSh0cHJpdik7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTQxNCw3ICYjNDM7NDYzLDcgQEAgc3RhdGljIGludCBzdG1tYWNfdGVzdF9tbWMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogc3RhdGljIGludCBzdG1tYWNfdGVzdF9lZWUoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogewogCXN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKmluaXRpYWwsICpmaW5hbDsKLQlpbnQgcmV0cmllcyA9IDEwOwomIzQzOwl1bnNpZ25lZCBsb25nIHRpbWVvdXQsIG1heF9kdXJhdGlvbjsKIAlpbnQgcmV0OwogCiAJaWYgKCFwcml2LSZndDtkbWFfY2FwLmVlZSB8fCAhcHJpdi0mZ3Q7ZWVlX2FjdGl2ZSkKQEAgLTQzMCwxNCAmIzQzOzQ3OSwyMSBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2VlZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiAJCWdvdG8gb3V0X2ZyZWVfaW5pdGlhbDsKIAl9CiAKJiM0MzsJLyogU25hcHNob3Qgc3RhdHMsIHdlIHdhbnQgdG8gY291bnQgdGhlIGluX2xwaSBldmVudHMuIFdlIG1heSBlbnRlcgomIzQzOwkgKiBMUEkganVzdCBhZnRlciB0aGUgcGFja2V0IHdhcyBzZW50LgomIzQzOwkgKi8KIAltZW1jcHkoaW5pdGlhbCwgJmFtcDtwcml2LSZndDt4c3RhdHMsIHNpemVvZigqaW5pdGlhbCkpOwogCiYjNDM7CS8qIFNlbmQgYSBmcmFtZSwgdGhlbiB3YWl0IHRvIGVudGVyIExQSSAqLwogCXJldCA9IHN0bW1hY190ZXN0X21hY19sb29wYmFjayhwcml2KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9mcmVlX2ZpbmFsOwogCiYjNDM7CW1heF9kdXJhdGlvbiA9IHVzZWNzX3RvX2ppZmZpZXMoMiAqIHByaXYtJmd0O3R4X2xwaV90aW1lcik7CiYjNDM7CiAJLyogV2UgaGF2ZSBubyB0cmFmZmljIGluIHRoZSBsaW5lIHNvLCBzb29uZXIgb3IgbGF0ZXIgaXQgd2lsbCBnbyBMUEkgKi8KLQl3aGlsZSAoLS1yZXRyaWVzKSB7CiYjNDM7CXRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IG1heF9kdXJhdGlvbjsKJiM0MzsJd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CiAJCW1lbWNweShmaW5hbCwgJmFtcDtwcml2LSZndDt4c3RhdHMsIHNpemVvZigqZmluYWwpKTsKIAogCQlpZiAoZmluYWwtJmd0O2lycV90eF9wYXRoX2luX2xwaV9tb2RlX24gJmd0OwpAQCAtNDQ2LDIwICYjNDM7NTAyLDM4IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfZWVlKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIAkJbXNsZWVwKDEwMCk7CiAJfQogCi0JaWYgKCFyZXRyaWVzKSB7CiYjNDM7CW1lbWNweShmaW5hbCwgJmFtcDtwcml2LSZndDt4c3RhdHMsIHNpemVvZigqZmluYWwpKTsKJiM0MzsJaWYgKGZpbmFsLSZndDtpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uICZsdDs9CiYjNDM7CSAgICBpbml0aWFsLSZndDtpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uKSB7CiAJCXJldCA9IC1FVElNRURPVVQ7CiAJCWdvdG8gb3V0X2ZyZWVfZmluYWw7CiAJfQogCi0JaWYgKGZpbmFsLSZndDtpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uICZsdDs9Ci0JICAgIGluaXRpYWwtJmd0O2lycV90eF9wYXRoX2luX2xwaV9tb2RlX24pIHsKLQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJLyogUmUtc25hcHNob3QsIGFzIHdlIHdhbnQgdG8gbWVhc3VyZSBleGl0X2xwaSBldmVudHMuIFdlIHNob3VsZCBiZQomIzQzOwkgKiBpbiBMUEkgcmlnaHQgbm93LgomIzQzOwkgKi8KJiM0MzsJbWVtY3B5KGluaXRpYWwsICZhbXA7cHJpdi0mZ3Q7eHN0YXRzLCBzaXplb2YoKmluaXRpYWwpKTsKJiM0MzsKJiM0MzsJLyogVFggc29tZXRoaW5nIHNvIHdlIGdvIG91dCBvZiBMUEkgKi8KJiM0MzsJcmV0ID0gc3RtbWFjX3Rlc3RfbWFjX2xvb3BiYWNrKHByaXYpOwomIzQzOwlpZiAocmV0KQogCQlnb3RvIG91dF9mcmVlX2ZpbmFsOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciB0aGUgZXhpdCBMUEkgaW50ZXJydXB0ICovCiYjNDM7CXRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IG1heF9kdXJhdGlvbjsKJiM0MzsJd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CiYjNDM7CQltZW1jcHkoZmluYWwsICZhbXA7cHJpdi0mZ3Q7eHN0YXRzLCBzaXplb2YoKmZpbmFsKSk7CiYjNDM7CiYjNDM7CQlpZiAoZmluYWwtJmd0O2lycV90eF9wYXRoX2V4aXRfbHBpX21vZGVfbiAmZ3Q7CiYjNDM7CQkgICAgaW5pdGlhbC0mZ3Q7aXJxX3R4X3BhdGhfZXhpdF9scGlfbW9kZV9uKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJbXNsZWVwKDEwMCk7CiAJfQogCiYjNDM7CW1lbWNweShmaW5hbCwgJmFtcDtwcml2LSZndDt4c3RhdHMsIHNpemVvZigqZmluYWwpKTsKIAlpZiAoZmluYWwtJmd0O2lycV90eF9wYXRoX2V4aXRfbHBpX21vZGVfbiAmbHQ7PQogCSAgICBpbml0aWFsLSZndDtpcnFfdHhfcGF0aF9leGl0X2xwaV9tb2RlX24pIHsKLQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCXJldCA9IC1FVElNRURPVVQ7CiAJCWdvdG8gb3V0X2ZyZWVfZmluYWw7CiAJfQogCkBAIC03NjcsNyAmIzQzOzg0MSw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfZmxvd2N0cmwoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogCXRwcml2LSZndDtwdC5mdW5jID0gc3RtbWFjX3Rlc3RfZmxvd2N0cmxfdmFsaWRhdGU7CiAJdHByaXYtJmd0O3B0LmRldiA9IHByaXYtJmd0O2RldjsKIAl0cHJpdi0mZ3Q7cHQuYWZfcGFja2V0X3ByaXYgPSB0cHJpdjsKLQlkZXZfYWRkX3BhY2soJmFtcDt0cHJpdi0mZ3Q7cHQpOwomIzQzOwlzdG1tYWNfc2Z0X2FkZF9wYWNrKCZhbXA7dHByaXYtJmd0O3B0KTsKIAogCS8qIENvbXB1dGUgbWluaW11bSBudW1iZXIgb2YgcGFja2V0cyB0byBtYWtlIEZJRk8gZnVsbCAqLwogCXBrdF9jb3VudCA9IHJ4X2ZpZm9fc2l6ZTsKQEAgLTgyMyw3ICYjNDM7ODk3LDcgQEAgc3RhdGljIGludCBzdG1tYWNfdGVzdF9mbG93Y3RybChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiBjbGVhbnVwOgogCWRldl9tY19kZWwocHJpdi0mZ3Q7ZGV2LCBwYWRkcik7CiAJZGV2X3NldF9wcm9taXNjdWl0eShwcml2LSZndDtkZXYsIC0xKTsKLQlkZXZfcmVtb3ZlX3BhY2soJmFtcDt0cHJpdi0mZ3Q7cHQpOwomIzQzOwlzdG1tYWNfc2Z0X3JlbW92ZV9wYWNrKCZhbXA7dHByaXYtJmd0O3B0KTsKIAlrZnJlZSh0cHJpdik7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTkyMSw2ICYjNDM7OTk1LDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X3ZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIAl0cHJpdi0mZ3Q7cHQuZGV2ID0gcHJpdi0mZ3Q7ZGV2OwogCXRwcml2LSZndDtwdC5hZl9wYWNrZXRfcHJpdiA9IHRwcml2OwogCXRwcml2LSZndDtwYWNrZXQgPSAmYW1wO2F0dHI7CiYjNDM7CXRwcml2LSZndDtjYXB0dXJlX2FsbCA9IHRydWU7CiAKIAkvKgogCSAqIEFzIHdlIHVzZSBIQVNIIGZpbHRlcmluZywgZmFsc2UgcG9zaXRpdmVzIG1heSBhcHBlYXIuIFRoaXMgaXMgYQpAQCAtOTI4LDcgJiM0MzsxMDAzLDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X3ZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIAkgKiBIQVNIIHZhbHVlcy4KIAkgKi8KIAl0cHJpdi0mZ3Q7dmxhbl9pZCA9IDB4MTIzOwotCWRldl9hZGRfcGFjaygmYW1wO3Rwcml2LSZndDtwdCk7CiYjNDM7CXN0bW1hY19zZnRfYWRkX3BhY2soJmFtcDt0cHJpdi0mZ3Q7cHQpOwogCiAJcmV0ID0gdmxhbl92aWRfYWRkKHByaXYtJmd0O2RldiwgaHRvbnMoRVRIX1BfODAyMVEpLCB0cHJpdi0mZ3Q7dmxhbl9pZCk7CiAJaWYgKHJldCkKQEAgLTk2OCw3ICYjNDM7MTA0Myw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF92bGFuZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB2bGFuX2RlbDoKIAl2bGFuX3ZpZF9kZWwocHJpdi0mZ3Q7ZGV2LCBodG9ucyhFVEhfUF84MDIxUSksIHRwcml2LSZndDt2bGFuX2lkKTsKIGNsZWFudXA6Ci0JZGV2X3JlbW92ZV9wYWNrKCZhbXA7dHByaXYtJmd0O3B0KTsKJiM0MzsJc3RtbWFjX3NmdF9yZW1vdmVfcGFjaygmYW1wO3Rwcml2LSZndDtwdCk7CiAJa2ZyZWUodHByaXYpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xMDE1LDYgJiM0MzsxMDkwLDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2R2bGFuZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiAJdHByaXYtJmd0O3B0LmRldiA9IHByaXYtJmd0O2RldjsKIAl0cHJpdi0mZ3Q7cHQuYWZfcGFja2V0X3ByaXYgPSB0cHJpdjsKIAl0cHJpdi0mZ3Q7cGFja2V0ID0gJmFtcDthdHRyOwomIzQzOwl0cHJpdi0mZ3Q7Y2FwdHVyZV9hbGwgPSB0cnVlOwogCiAJLyoKIAkgKiBBcyB3ZSB1c2UgSEFTSCBmaWx0ZXJpbmcsIGZhbHNlIHBvc2l0aXZlcyBtYXkgYXBwZWFyLiBUaGlzIGlzIGEKQEAgLTEwMjIsNyAmIzQzOzEwOTgsNyBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfZHZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIAkgKiBIQVNIIHZhbHVlcy4KIAkgKi8KIAl0cHJpdi0mZ3Q7dmxhbl9pZCA9IDB4MTIzOwotCWRldl9hZGRfcGFjaygmYW1wO3Rwcml2LSZndDtwdCk7CiYjNDM7CXN0bW1hY19zZnRfYWRkX3BhY2soJmFtcDt0cHJpdi0mZ3Q7cHQpOwogCiAJcmV0ID0gdmxhbl92aWRfYWRkKHByaXYtJmd0O2RldiwgaHRvbnMoRVRIX1BfODAyMUFEKSwgdHByaXYtJmd0O3ZsYW5faWQpOwogCWlmIChyZXQpCkBAIC0xMDYyLDcgJiM0MzsxMTM4LDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2R2bGFuZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB2bGFuX2RlbDoKIAl2bGFuX3ZpZF9kZWwocHJpdi0mZ3Q7ZGV2LCBodG9ucyhFVEhfUF84MDIxQUQpLCB0cHJpdi0mZ3Q7dmxhbl9pZCk7CiBjbGVhbnVwOgotCWRldl9yZW1vdmVfcGFjaygmYW1wO3Rwcml2LSZndDtwdCk7CiYjNDM7CXN0bW1hY19zZnRfcmVtb3ZlX3BhY2soJmFtcDt0cHJpdi0mZ3Q7cHQpOwogCWtmcmVlKHRwcml2KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTI5Myw3ICYjNDM7MTM2OSw4IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3Rfdmxhbm9mZl9jb21tb24oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCBib29sIHN2bGFuKQogCXRwcml2LSZndDtwdC5hZl9wYWNrZXRfcHJpdiA9IHRwcml2OwogCXRwcml2LSZndDtwYWNrZXQgPSAmYW1wO2F0dHI7CiAJdHByaXYtJmd0O3ZsYW5faWQgPSAweDEyMzsKLQlkZXZfYWRkX3BhY2soJmFtcDt0cHJpdi0mZ3Q7cHQpOwomIzQzOwl0cHJpdi0mZ3Q7Y2FwdHVyZV9hbGwgPSB0cnVlOwomIzQzOwlzdG1tYWNfc2Z0X2FkZF9wYWNrKCZhbXA7dHByaXYtJmd0O3B0KTsKIAogCXJldCA9IHZsYW5fdmlkX2FkZChwcml2LSZndDtkZXYsIGh0b25zKHByb3RvKSwgdHByaXYtJmd0O3ZsYW5faWQpOwogCWlmIChyZXQpCkBAIC0xMzIwLDcgJiM0MzsxMzk3LDcgQEAgc3RhdGljIGludCBzdG1tYWNfdGVzdF92bGFub2ZmX2NvbW1vbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIGJvb2wgc3ZsYW4pCiB2bGFuX2RlbDoKIAl2bGFuX3ZpZF9kZWwocHJpdi0mZ3Q7ZGV2LCBodG9ucyhwcm90byksIHRwcml2LSZndDt2bGFuX2lkKTsKIGNsZWFudXA6Ci0JZGV2X3JlbW92ZV9wYWNrKCZhbXA7dHByaXYtJmd0O3B0KTsKJiM0MzsJc3RtbWFjX3NmdF9yZW1vdmVfcGFjaygmYW1wO3Rwcml2LSZndDtwdCk7CiAJa2ZyZWUodHByaXYpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xMzMyLDcgJiM0MzsxNDA5LDcgQEAgc3RhdGljIGludCBzdG1tYWNfdGVzdF92bGFub2ZmKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIAogc3RhdGljIGludCBzdG1tYWNfdGVzdF9zdmxhbm9mZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB7Ci0JaWYgKCFwcml2LSZndDtkbWFfY2FwLmR2bGFuKQomIzQzOwlpZiAoIShwcml2LSZndDtkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfVkxBTl9TVEFHX1RYKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCXJldHVybiBzdG1tYWNfdGVzdF92bGFub2ZmX2NvbW1vbihwcml2LCB0cnVlKTsKIH0KQEAgLTE2OTksNiAmIzQzOzE3NzYsOSBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfanVtYm8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB1MTYgcXVldWUpCiAJc3RydWN0IHN0bW1hY19wYWNrZXRfYXR0cnMgYXR0ciA9IHsgfTsKIAlpbnQgc2l6ZSA9IHByaXYtJmd0O2RtYV9jb25mLmRtYV9idWZfc3o7CiAKJiM0MzsJaWYgKCFkd21hY19pc194bWFjKHByaXYtJmd0O3BsYXQtJmd0O2NvcmVfdHlwZSkpCiYjNDM7CQlzaXplIC09IE5FVF9JUF9BTElHTjsKJiM0MzsKIAlhdHRyLmRzdCA9IHByaXYtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHI7CiAJYXR0ci5tYXhfc2l6ZSA9IHNpemUgLSBFVEhfRkNTX0xFTjsKIAlhdHRyLnF1ZXVlX21hcHBpbmcgPSBxdWV1ZTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTc6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMzMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaXMgZXZlbiAqd29ydGgqIGZ1enppbmcgKFdvcnRoRnV6emluZz10cnVlL2ZhbHNlKS4gUmlnaHQgbm93LCBJJiMzOTttIGxlYW5pbmcgdG93YXJkICYjMzQ7dHJ1ZSwmIzM0OyBidXQgbGV0JiMzOTtzIGJlIG1ldGhvZGljYWwuIE15IGltbWVkaWF0ZSBjb25jZXJucyBhcmU6IHdoYXQgY29kZSBpcyBtb2RpZmllZD8gV2hlcmUgZG9lcyBpdCBmaXQgaW50byB0aGUgc3lzdGVtPwoKTG9va2luZyBhdCB0aGUgZmlsZSBjaGFuZ2VzLCB3ZSBoYXZlOgoKKiAgIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jYAoqICAgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuY2AKClJpZ2h0IGF3YXksIHRoaXMgbG9va3MgaW50ZXJlc3RpbmcuIFdlJiMzOTtyZSBpbiB0aGUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIE11bHRpLUdpZ2FiaXQgRXRoZXJuZXQgLyBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IE1BQyBkcml2ZXIsIG9yIGBzdG1tYWNgLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgbmV0d29ya2luZyBjb2RlLCBlc3BlY2lhbGx5IGF0IHRoZSBkcml2ZXIgbGV2ZWwsIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nIGJlY2F1c2Ugb2YgYWxsIHRoZSBwb3RlbnRpYWwgZm9yIGNvbXBsZXggcGFja2V0IHByb2Nlc3NpbmcgYW5kIGV4dGVybmFsIGlucHV0LiBCdXQgbGV0JiMzOTtzIHZlcmlmeSBteSBhc3N1bXB0aW9ucy4KCk5vdywgbXkgbmV4dCBxdWVzdGlvbnMgc3RhcnQgcG9wcGluZyB1cDogSXMgdGhpcyBhIHZpcnR1YWxpemVkIGRyaXZlciwgZW11bGF0ZWQgd2l0aGluIFFFTVUvR0NFIG9yIHN0YW5kYXJkIHN5emthbGxlciB0ZXN0YmVkcywgb3IgaXMgdGhpcyBhIHBoeXNpY2FsIGhhcmR3YXJlIC8gU29DIGRyaXZlciAvIFBDSSBkcml2ZXI/IFRoaXMgaXMgaW1wb3J0YW50LiBJZiBpdCYjMzk7cyB2aXJ0dWFsaXplZCwgZnV6emluZyBpcyB1c3VhbGx5IHN0cmFpZ2h0Zm9yd2FyZC4gSWYgaXQmIzM5O3MgcGh5c2ljYWwgaGFyZHdhcmUsIGl0IGFkZHMgYSBsYXllciBvZiBjb21wbGV4aXR5IChhbmQgcG90ZW50aWFsbHkgZ3JlYXRlciB2YWx1ZSkuIEkgbmVlZCB0byBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ2AgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgcHJvYmVzLiBUaGlzIHdpbGwgaGVscCBtZSB0byBkZWNpZGUgdGhlIEZvY3VzU3ltYm9scyBhbmQgRW5hYmxlQ29uZmlncyBuZWVkZWQgdG8gZnV6ei4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1RNTUFDXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6Mjpjb25maWcgU1RNTUFDX0VUSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U1RNaWNyb2VsZWN0cm9uaWNzIE11bHRpLUdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0xOD1pZiBTVE1NQUNfRVRIXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyMDpjb25maWcgU1RNTUFDX1NFTEZURVNUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgU1RNTUFDIFNlbGZ0ZXN0c1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjI5OmNvbmZpZyBTVE1NQUNfUExBVEZPUk1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMzAtXHR0cmlzdGF0ZSBcJiMzNDtTVE1NQUMgUGxhdGZvcm0gYnVzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM3MT1lbmRpZiAjIFNUTU1BQ19QTEFURk9STVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zNzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjM3Mzpjb25maWcgU1RNTUFDX0xJQlBDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zNzQtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9Mzk4PWNvbmZpZyBEV01BQ19NT1RPUkNPTU1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTQwNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6NDA3OmNvbmZpZyBTVE1NQUNfUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTQwOC1cdHRyaXN0YXRlIFwmIzM0O1NUTU1BQyBQQ0kgYnVzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDY2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBzdG1tYWNgIERyaXZlciYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgc3RtbWFjYCwgdGhlIEV0aGVybmV0IE1BQyBkcml2ZXIsIHRhcmdldHMgU3lub3BzeXMgRGVzaWduV2FyZSBNQUMgSVBzLCBmcmVxdWVudGx5IGZvdW5kIG9uIEFSTSBTb0NzIGFuZCBzb21lIFBDSSBkZXZpY2VzLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYHN0bW1hY2AgaXMgZXZlbiBhY2Nlc3NpYmxlIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQsIG9yIGlmIGl0JiMzOTtzIHN0cmljdGx5IHRpZWQgdG8gcGh5c2ljYWwgaGFyZHdhcmUuCgpUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucywgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBhcHBsaWVzLiBTcGVjaWZpY2FsbHksIGl0IG1lbnRpb25zICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgb3IgdGhvc2UgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcy4gU28sIGlzIHRoZSBEZXNpZ25XYXJlIE1BQyBlbXVsYXRlZCwgb3IgaXMgaXQgaGFyZHdhcmUtZGVwZW5kZW50PwoKTm93LCBsZXQmIzM5O3MgZXhwbG9yZSBRRU1VJiMzOTtzIGVtdWxhdGlvbiBjYXBhYmlsaXRpZXMuIERvIGFueSBRRU1VIG1hY2hpbmUgdHlwZXMsIGxpa2UgYGFsbHdpbm5lci1hMTAtZW1hY2Agb3IgYHN0bTMyZjQwNWAsIGVtdWxhdGUgdGhlIERlc2lnbldhcmUgTUFDPyBUaGUgZmFjdCB0aGF0IFNUTTMyIGlzIG1lbnRpb25lZCBpcyBpbnRlcmVzdGluZywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyByZWxldmFudCB0byBhbiBhbWQ2NCB0YXJnZXQuIENhbiBJIHByb2JlIGBzdG1tYWNgIGluIGEgc3RhbmRhcmQgUUVNVS9hbWQ2NCBlbnZpcm9ubWVudCwgb3IgYW0gSSBzdHVjayB3aXRoIHBoeXNpY2FsIGhhcmR3YXJlPwoKVG8gYW5zd2VyIHRoaXMgY29uY2x1c2l2ZWx5LCBJIG5lZWQgdG8gY2hlY2sgaG93IGBzdG1tYWNgIGludGVyYWN0cyB3aXRoIFBDSS4gV2hhdCBQQ0kgSURzIGRvZXMgYFNUTU1BQ19QQ0lgIG1hdGNoPyBUaW1lIHRvIGNoZWNrIGBzdG1tYWNfcGNpLmNgIHRvIHNlZSBpZiB0aGlzIGRyaXZlciBpcyBldmVuIHJlbGV2YW50IGZvciB0aGUgc3RhbmRhcmQgeDg2IFFFTVUgZW52aXJvbm1lbnQuIFRoaXMgd2lsbCBjb25maXJtIHdoZXRoZXIgdGhpcyBpcyBhIGZydWl0ZnVsIGFyZWEgb2YgZnV6emluZyBleHBsb3JhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQQ0lfREVWSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMzYyPXN0YXRpYyB2b2lkIGludGVsX2V0aF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTM3My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM3NDojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUVVBUktcdFx0MHgwOTM3XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzNzU6I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VITF9SR01JSTFHXHRcdDB4NGIzMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzc2OiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FSExfU0dNSUkxR1x0XHQweDRiMzFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM3NzojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRUhMX1NHTUlJMkc1XHQweDRiMzJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTM3OC0vKiBJbnRlbChSKSBQcm9ncmFtbWFibGUgU2VydmljZXMgRW5naW5lIChJbnRlbChSKSBQU0UpIGNvbnNpc3Qgb2YgMiBNQUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzODAtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzODE6I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VITF9QU0UwX1JHTUlJMUdcdDB4NGJhMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzgyOiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FSExfUFNFMF9TR01JSTFHXHQweDRiYTFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM4MzojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRUhMX1BTRTBfU0dNSUkyRzVcdDB4NGJhMlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzg0OiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FSExfUFNFMV9SR01JSTFHXHQweDRiYjBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM4NTojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRUhMX1BTRTFfU0dNSUkxR1x0MHg0YmIxXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzODY6I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VITF9QU0UxX1NHTUlJMkc1XHQweDRiYjJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM4NzojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfVEdMSF9TR01JSTFHXzBcdDB4NDNhY1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzg4OiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9UR0xIX1NHTUlJMUdfMVx0MHg0M2EyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzODk6I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1RHTF9TR01JSTFHXHRcdDB4YTBhY1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzkwOiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9BRExTX1NHTUlJMUdfMFx0MHg3YWFjXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzOTE6I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0FETFNfU0dNSUkxR18xXHQweDdhYWRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM5MjojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfQURMTl9TR01JSTFHXHQweDU0YWNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM5MzojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUlBMUF9TR01JSTFHXHQweDUxYWNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTM5NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9MTM5NT1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaW50ZWxfZXRoX3BjaV9pZF90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzk2Olx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIFFVQVJLLCBcdTAwMjZxdWFya19pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzk3Olx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9SR01JSTFHLCBcdTAwMjZlaGxfcmdtaWkxZ19pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzk4Olx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9TR01JSTFHLCBcdTAwMjZlaGxfc2dtaWkxZ19pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzk5Olx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9TR01JSTJHNSwgXHUwMDI2ZWhsX3NnbWlpMWdfaW5mbykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTQwMDpcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfUFNFMF9SR01JSTFHLCBcdTAwMjZlaGxfcHNlMF9yZ21paTFnX2luZm8pIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjE0MDE6XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1BTRTBfU0dNSUkxRywgXHUwMDI2ZWhsX3BzZTBfc2dtaWkxZ19pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDAyOlx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9QU0UwX1NHTUlJMkc1LCBcdTAwMjZlaGxfcHNlMF9zZ21paTFnX2luZm8pIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjE0MDM6XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1BTRTFfUkdNSUkxRywgXHUwMDI2ZWhsX3BzZTFfcmdtaWkxZ19pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDA0Olx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9QU0UxX1NHTUlJMUcsIFx1MDAyNmVobF9wc2UxX3NnbWlpMWdfaW5mbykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTQwNTpcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfUFNFMV9TR01JSTJHNSwgXHUwMDI2ZWhsX3BzZTFfc2dtaWkxZ19pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDA2Olx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIFRHTF9TR01JSTFHLCBcdTAwMjZ0Z2xfc2dtaWkxZ19waHkwX2luZm8pIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjE0MDc6XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgVEdMSF9TR01JSTFHXzAsIFx1MDAyNnRnbF9zZ21paTFnX3BoeTBfaW5mbykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTQwODpcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBUR0xIX1NHTUlJMUdfMSwgXHUwMDI2dGdsX3NnbWlpMWdfcGh5MV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDA5Olx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEFETFNfU0dNSUkxR18wLCBcdTAwMjZhZGxzX3NnbWlpMWdfcGh5MF9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDEwOlx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEFETFNfU0dNSUkxR18xLCBcdTAwMjZhZGxzX3NnbWlpMWdfcGh5MV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDExOlx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEFETE5fU0dNSUkxRywgXHUwMDI2YWRsbl9zZ21paTFnX3BoeTBfaW5mbykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTQxMjpcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBSUExQX1NHTUlJMUcsIFx1MDAyNmFkbG5fc2dtaWkxZ19waHkwX2luZm8pIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTE0MTMtXHR7fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjcwOiNkZWZpbmUgUENJX0RFVklDRV9JRF9MT09OR1NPTl9HTUFDMVx0MHg3YTAzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjcxOiNkZWZpbmUgUENJX0RFVklDRV9JRF9MT09OR1NPTl9HTUFDMlx0MHg3YTIzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjcyOiNkZWZpbmUgUENJX0RFVklDRV9JRF9MT09OR1NPTl9HTkVUXHQweDdhMTNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNzMtI2RlZmluZSBEV01BQ19DT1JFX01VTFRJQ0hBTl9WMVx0MHgxMFx0LyogTG9vbmdzb24gY3VzdG9tIElEIDB4MTAgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTMwNj1zdGF0aWMgaW50IGxvb25nc29uX2R3bWFjX3NldHVwKHZvaWQgKmFwcml2LCBzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0zNTEtXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6MzUyOlx0aWYgKHBkZXYtXHUwMDNlZGV2aWNlICE9IFBDSV9ERVZJQ0VfSURfTE9PTkdTT05fR05FVCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0zNTMtXHRcdG1hYy1cdTAwM2VsaW5rLmNhcHMgPSBNQUNfMTAgfCBNQUNfMTAwIHwgTUFDXzEwMDA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz01OTY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGxvb25nc29uX2R3bWFjX2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjU5NzpcdHsgUENJX0RFVklDRV9EQVRBKExPT05HU09OLCBHTUFDMSwgXHUwMDI2bG9vbmdzb25fZ21hY19wY2lfaW5mbykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTk4Olx0eyBQQ0lfREVWSUNFX0RBVEEoTE9PTkdTT04sIEdNQUMyLCBcdTAwMjZsb29uZ3Nvbl9nbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1OTk6XHR7IFBDSV9ERVZJQ0VfREFUQShMT09OR1NPTiwgR05FVCwgXHUwMDI2bG9vbmdzb25fZ25ldF9wY2lfaW5mbykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNjAwLVx0e31cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYz0zNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGR3bWFjX21vdG9yY29tbV9wY2lfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jOjM2ODpcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01PVE9SQ09NTSwgMHg2ODAxKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMzY5LVx0eyB9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xOTI9c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDA6I2RlZmluZSBQQ0lfREVWSUNFX0lEX1NUTU1BQ19TVE1NQUNcdFx0MHgxMTA4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjAxOiNkZWZpbmUgUENJX0RFVklDRV9JRF9TWU5PUFNZU19HTUFDNV9JRFx0XHQweDcxMDJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdG1tYWNfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDQ6XHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNTpcdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNjpcdHsgUENJX0RFVklDRV9EQVRBKFNZTk9QU1lTLCBHTUFDNV9JRCwgXHUwMDI2c25wc19nbWFjNV9wY2lfaW5mbykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMDctXHR7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzE4CgkJCQkJCQlvdXRwdXQ6IDExOQoJCQkJCQkJdGhvdWdodHM6IDYxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBOb3QgV29ydGggRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaXMgc3VpdGFibGUgZm9yIGZ1enppbmcuIEZpcnN0LCBJIHNlZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBzdG1tYWNgIGRyaXZlcnMuIFJpZ2h0IGF3YXksIG15IGtub3dsZWRnZSBraWNrcyBpbjogdGhlc2UgYXJlIGhhcmR3YXJlIGRyaXZlcnMsIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgcGh5c2ljYWwgRXRoZXJuZXQgTUFDIGNvbnRyb2xsZXJzIOKAkyBjaGlwcyBmcm9tIFN5bm9wc3lzIERlc2lnbldhcmUsIGludGVncmF0ZWQgaW50byBTb0NzIG9yIGNvbm5lY3RlZCB2aWEgUENJLiBJbnRlbCBFSEwvVEdML0FETCwgU3lub3BzeXMgR01BQywgTG9vbmdzb24sIE1vdG9yY29tbSwgYW5kIHZhcmlvdXMgQVJNL01JUFMgU29DcyBhcmUgbWVudGlvbmVkLCBhbmQgSSAqa25vdyogdGhvc2UgYXJlbiYjMzk7dCB0aGluZ3MgdHlwaWNhbGx5IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIGVudmlyb25tZW50cywgd2hpY2ggYXJlIHdoYXQgc3l6a2FsbGVyIHVzdWFsbHkgbGV2ZXJhZ2VzLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyAqYW55KiB2aXJ0dWFsIG9yIGVtdWxhdGVkIGVxdWl2YWxlbnQg4oCTIHNvbWV0aGluZyBsaWtlIGBuZXRraXRgLCBgZHVtbXlgLCBgdmV0aGAsIGB0YXBgLCBgdHVuYCwgYG1hY3Z0YXBgLCBgbG9vcGJhY2tgLCBvciBgdmlydGlvLW5ldGAgZm9yIGBzdG1tYWNgLiBOb3BlLiBJdCYjMzk7cyBzdHJpY3RseSBmb3IgcGh5c2ljYWwgaGFyZHdhcmUuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHdoYXQmIzM5O3MgYmVlbiBtb2RpZmllZC4gVGhlIHBhdGNoIGlzIHZlcnkgZm9jdXNlZCDigJMganVzdCBgc3RtbWFjX21haW4uY2AgYW5kIGBzdG1tYWNfc2VsZnRlc3RzLmNgLiBUaGF0IG5hcnJvd3MgdGhlIHNjb3BlIHNpZ25pZmljYW50bHkuCgpOb3csIEkmIzM5O2xsIGFwcGx5IHRoZSBzcGVjaWZpYyBjcml0ZXJpYSBkZWZpbmVkIGluIFNlY3Rpb24gMi4gVGhlIGNvcmUgb2YgaXQgYm9pbHMgZG93biB0byBjaGVja2luZyBpZiB0aGUgbW9kaWZpZWQgY29kZSBmYWxscyBpbnRvIHRoZSAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7IGNhdGVnb3J5LiBMZXQmIzM5O3Mgc2VlLi4uIGEgdmVuZG9yLXNwZWNpZmljIEV0aGVybmV0IE1BQyBkcml2ZXIgKHN0bWljcm8gLyBzdG1tYWMpIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSwgb3IgYW4gQVNJQy9QQ0llL1NvQywgd2hpY2ggaXNuJiMzOTt0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVU/IEJpbmdvISBUaGF0JiMzOTtzIGEgcGVyZmVjdCBmaXQuCgpUaGVyZWZvcmU6CgoqICAgYFdvcnRoRnV6emluZ2A6IGZhbHNlIOKAkyBCZWNhdXNlIHRoaXMgY29kZSBpcyBpbmhlcmVudGx5IHRpZWQgdG8gcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy4KKiAgIGBGb2N1c1N5bWJvbHNgOiBcWyBdIOKAkyBObyByZWxldmFudCBzeW1ib2xzIHRvIGZvY3VzIG9uIHNpbmNlIHRoZSBkcml2ZXIgaXMgdW5yZWFjaGFibGUuCiogICBgRW5hYmxlQ29uZmlnc2A6IFxbIF0g4oCTIE5vdCBhcHBsaWNhYmxlLCB0aGUgZHJpdmVyIGlzIG5vdCBhcHBsaWNhYmxlLgoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIC8gU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBNQUMgZHJpdmVyIChzdG1tYWMpLCBzcGVjaWZpY2FsbHkgYnVmZmVyIHNpemUgY2FsY3VsYXRpb24gZm9yIE1UVSBjb25maWd1cmF0aW9uIGFuZCBldGh0b29sIHNlbGZ0ZXN0cy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKFNvQyBNQUMgb3Igc3BlY2lmaWMgUENJIGRldmljZXMpIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBRRU1VL3N5emthbGxlciBmdXp6aW5nIGVudmlyb25tZW50cyBvbiBhbWQ2NCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgZXZlcnl0aGluZyBvbmUgbGFzdCB0aW1lLiBBbGwgdGhlIGNyaXRlcmlhIGFyZSBtZXQgZm9yIG1ha2luZyB0aGlzIGEgJiMzNDtuby1nbyYjMzQ7IGZvciBmdXp6aW5nIGluIHRoZSBzdGFuZGFyZCBzZXR1cC4KCk9rYXksIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTc6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIC8gU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBNQUMgZHJpdmVyIChzdG1tYWMpLCBzcGVjaWZpY2FsbHkgYnVmZmVyIHNpemUgY2FsY3VsYXRpb24gYW5kIHNlbGZ0ZXN0IGhlbHBlcnMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChBUk0vTUlQUy9ldGMuIFNvQ3Mgb3Igc3BlY2lmaWMgSW50ZWwvTG9vbmdzb24vU3lub3BzeXMgUENJIE5JQyBkZXZpY2VzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIG9uIGFtZDY0LCByZW5kZXJpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNUTWljcm9lbGVjdHJvbmljcyAvIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIGRyaXZlciAoc3RtbWFjKSwgc3BlY2lmaWNhbGx5IGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9uIGFuZCBzZWxmdGVzdCBoZWxwZXJzLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoQVJNL01JUFMvZXRjLiBTb0NzIG9yIHNwZWNpZmljIEludGVsL0xvb25nc29uL1N5bm9wc3lzIFBDSSBOSUMgZGV2aWNlcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBvbiBhbWQ2NCwgcmVuZGVyaW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTc6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE3OjIyOjEzLjIyNjkyMDY0M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4Mzc0MDM0OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNUTWljcm9lbGVjdHJvbmljcyAvIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIGRyaXZlciAoc3RtbWFjKSwgc3BlY2lmaWNhbGx5IGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9uIGFuZCBzZWxmdGVzdCBoZWxwZXJzLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoQVJNL01JUFMvZXRjLiBTb0NzIG9yIHNwZWNpZmljIEludGVsL0xvb25nc29uL1N5bm9wc3lzIFBDSSBOSUMgZGV2aWNlcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBvbiBhbWQ2NCwgcmVuZGVyaW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE3OjIyOjEzLjIyNjkyNjcxM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg5OTE1MTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2E4MDY5NjFlZGMxNDEwMDc4NGRhNzk2NTcwNjAzZGFjOWY3ZTRiZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAxNzoyMjoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xcbmluZGV4IDVmZTdlOTVmZGQzNDUuLjM2NjRhMjk4NTc0YWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcXG5AQCAtMTUzNiwxNyArMTUzNiwxNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHN0bW1hY19yeF9vZmZzZXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiBcXHRyZXR1cm4gTkVUX1NLQl9QQUQgKyBORVRfSVBfQUxJR047XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgc3RtbWFjX3NldF9iZnNpemUoaW50IG10dSlcXG4rc3RhdGljIGludCBzdG1tYWNfc2V0X2Jmc2l6ZShpbnQgbGVuKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAobXR1IFxcdTAwM2U9IEJVRl9TSVpFXzhLaUIpXFxuK1xcdGlmIChsZW4gXFx1MDAzZSBCVUZfU0laRV84S2lCKVxcbiBcXHRcXHRyZXQgPSBCVUZfU0laRV8xNktpQjtcXG4tXFx0ZWxzZSBpZiAobXR1IFxcdTAwM2U9IEJVRl9TSVpFXzRLaUIpXFxuK1xcdGVsc2UgaWYgKGxlbiBcXHUwMDNlIEJVRl9TSVpFXzRLaUIpXFxuIFxcdFxcdHJldCA9IEJVRl9TSVpFXzhLaUI7XFxuLVxcdGVsc2UgaWYgKG10dSBcXHUwMDNlPSBCVUZfU0laRV8yS2lCKVxcbitcXHRlbHNlIGlmIChsZW4gXFx1MDAzZSBCVUZfU0laRV8yS2lCKVxcbiBcXHRcXHRyZXQgPSBCVUZfU0laRV80S2lCO1xcbi1cXHRlbHNlIGlmIChtdHUgXFx1MDAzZSBERUZBVUxUX0JVRlNJWkUpXFxuK1xcdGVsc2UgaWYgKGxlbiBcXHUwMDNlIERFRkFVTFRfQlVGU0laRSlcXG4gXFx0XFx0cmV0ID0gQlVGX1NJWkVfMktpQjtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyZXQgPSBERUZBVUxUX0JVRlNJWkU7XFxuQEAgLTQwNjMsNyArNDA2Myw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX2RtYV9jb25mICpcXG4gc3RtbWFjX3NldHVwX2RtYV9kZXNjKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IG10dSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgc3RtbWFjX2RtYV9jb25mICpkbWFfY29uZjtcXG4tXFx0aW50IGJmc2l6ZSwgcmV0O1xcbitcXHRpbnQgYmZzaXplLCBsZW4sIHJldDtcXG4gXFx0dTggY2hhbjtcXG4gXFxuIFxcdGRtYV9jb25mID0ga3phbGxvY19vYmooKmRtYV9jb25mKTtcXG5AQCAtNDA3MywxMyArNDA3MywxNSBAQCBzdG1tYWNfc2V0dXBfZG1hX2Rlc2Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgbXR1KVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gXFx0fVxcbiBcXG4tXFx0LyogUmV0dXJucyAwIG9yIEJVRl9TSVpFXzE2S2lCIGlmIG10dSBcXHUwMDNlIDhLaUIgYW5kIGR3bWFjNCBvciByaW5nIG1vZGUgKi9cXG4tXFx0YmZzaXplID0gc3RtbWFjX3NldF8xNmtpYl9iZnNpemUocHJpdiwgbXR1KTtcXG4rXFx0bGVuID0gbXR1ICsgRVRIX0hMRU4gKyAyICogVkxBTl9ITEVOICsgRVRIX0ZDU19MRU4gKyBORVRfSVBfQUxJR047XFxuK1xcbitcXHQvKiBSZXR1cm5zIDAgb3IgQlVGX1NJWkVfMTZLaUIgaWYgbGVuIFxcdTAwM2UgOEtpQiBhbmQgZHdtYWM0IG9yIHJpbmcgbW9kZSAqL1xcbitcXHRiZnNpemUgPSBzdG1tYWNfc2V0XzE2a2liX2Jmc2l6ZShwcml2LCBsZW4pO1xcbiBcXHRpZiAoYmZzaXplIFxcdTAwM2MgMClcXG4gXFx0XFx0YmZzaXplID0gMDtcXG4gXFxuIFxcdGlmIChiZnNpemUgXFx1MDAzYyBCVUZfU0laRV8xNktpQilcXG4tXFx0XFx0YmZzaXplID0gc3RtbWFjX3NldF9iZnNpemUobXR1KTtcXG4rXFx0XFx0YmZzaXplID0gc3RtbWFjX3NldF9iZnNpemUobGVuKTtcXG4gXFxuIFxcdGRtYV9jb25mLVxcdTAwM2VkbWFfYnVmX3N6ID0gYmZzaXplO1xcbiBcXHQvKiBDaG9zZSB0aGUgdHgvcnggc2l6ZSBmcm9tIHRoZSBhbHJlYWR5IGRlZmluZWQgb25lIGluIHRoZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcXG5pbmRleCA2MzcyZWM3YzNmMzE3Li5mYzhkNjkyNjBmNDMxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuY1xcbkBAIC0xMiw2ICsxMiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWRwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvZHNhLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9zY2hlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjcC5oXFx1MDAzZVxcbkBAIC0yMzcsNiArMjM4LDEwIEBAIHN0cnVjdCBzdG1tYWNfdGVzdF9wcml2IHtcXG4gXFx0c3RydWN0IHN0bW1hY19wYWNrZXRfYXR0cnMgKnBhY2tldDtcXG4gXFx0c3RydWN0IHBhY2tldF90eXBlIHB0O1xcbiBcXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xcbitcXHRfX2JlMTYgcGFja2V0X3R5cGU7XFxuK1xcdGludCAoKmZ1bmMpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbitcXHRcXHQgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfbmRldik7XFxuK1xcdGJvb2wgY2FwdHVyZV9hbGw7XFxuIFxcdGludCBkb3VibGVfdmxhbjtcXG4gXFx0aW50IHZsYW5faWQ7XFxuIFxcdGludCBvaztcXG5AQCAtMzE2LDYgKzMyMSw1MCBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2xvb3BiYWNrX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHN0bW1hY19zZnRfZmlsdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfbmRldilcXG4re1xcbitcXHRzdHJ1Y3Qgc3RtbWFjX3Rlc3RfcHJpdiAqdHByaXYgPSBwdC1cXHUwMDNlYWZfcGFja2V0X3ByaXY7XFxuK1xcdHN0cnVjdCBldGhoZHIgKmhkciA9IGV0aF9oZHIoc2tiKTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRpZiAoaGRyLVxcdTAwM2VoX3Byb3RvID09IHRwcml2LVxcdTAwM2VwYWNrZXRfdHlwZSkge1xcbitcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xcbitcXG4rXFx0XFx0aWYgKG5za2IpXFxuK1xcdFxcdFxcdHJldCA9IHRwcml2LVxcdTAwM2VmdW5jKG5za2IsIG5kZXYsIHB0LCBvcmlnX25kZXYpO1xcbitcXHR9XFxuK1xcbitcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc3RtbWFjX3NmdF9hZGRfcGFjayhzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0KVxcbit7XFxuK1xcdHN0cnVjdCBzdG1tYWNfdGVzdF9wcml2ICp0cHJpdiA9IHB0LVxcdTAwM2VhZl9wYWNrZXRfcHJpdjtcXG4rXFxuK1xcdGlmIChuZXRkZXZfdXNlc19kc2EodHByaXYtXFx1MDAzZXB0LmRldikgfHwgdHByaXYtXFx1MDAzZWNhcHR1cmVfYWxsKSB7XFxuK1xcdFxcdHRwcml2LVxcdTAwM2VwYWNrZXRfdHlwZSA9IHRwcml2LVxcdTAwM2VwdC50eXBlO1xcbitcXHRcXHR0cHJpdi1cXHUwMDNlZnVuYyA9IHRwcml2LVxcdTAwM2VwdC5mdW5jO1xcbitcXG4rXFx0XFx0LyogRFNBIGNvbmR1aXQgd2lsbCByZXBvcnQgRVRIX1BfWERTQSwgc28gb3VyIHBhY2tldCBoYW5kbGVyXFxuK1xcdFxcdCAqIHdvbid0IG1hdGNoLiBMZXQncyByZWdpc3RlciBhIEVUSF9QX0FMTCBtYXRjaCBhbmQgZmlsdGVyXFxuK1xcdFxcdCAqIG1hbnVhbGx5IGluIHN0bW1hY19zZnRfZmlsdGVyLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dHByaXYtXFx1MDAzZXB0LnR5cGUgPSBodG9ucyhFVEhfUF9BTEwpO1xcbitcXHRcXHR0cHJpdi1cXHUwMDNlcHQuZnVuYyA9IHN0bW1hY19zZnRfZmlsdGVyO1xcbitcXHRcXHR0cHJpdi1cXHUwMDNlcHQuaWdub3JlX291dGdvaW5nID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0ZGV2X2FkZF9wYWNrKHB0KTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc3RtbWFjX3NmdF9yZW1vdmVfcGFjayhzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0KVxcbit7XFxuK1xcdGRldl9yZW1vdmVfcGFjayhwdCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sb29wYmFjayhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IHN0bW1hY19wYWNrZXRfYXR0cnMgKmF0dHIpXFxuIHtcXG5AQCAtMzM3LDcgKzM4Niw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sb29wYmFjayhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuIFxcdHRwcml2LVxcdTAwM2VwYWNrZXQgPSBhdHRyO1xcbiBcXG4gXFx0aWYgKCFhdHRyLVxcdTAwM2Vkb250X3dhaXQpXFxuLVxcdFxcdGRldl9hZGRfcGFjayhcXHUwMDI2dHByaXYtXFx1MDAzZXB0KTtcXG4rXFx0XFx0c3RtbWFjX3NmdF9hZGRfcGFjayhcXHUwMDI2dHByaXYtXFx1MDAzZXB0KTtcXG4gXFxuIFxcdHNrYiA9IHN0bW1hY190ZXN0X2dldF91ZHBfc2tiKHByaXYsIGF0dHIpO1xcbiBcXHRpZiAoIXNrYikge1xcbkBAIC0zNjAsNyArNDA5LDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2xvb3BiYWNrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4gXFxuIGNsZWFudXA6XFxuIFxcdGlmICghYXR0ci1cXHUwMDNlZG9udF93YWl0KVxcbi1cXHRcXHRkZXZfcmVtb3ZlX3BhY2soXFx1MDAyNnRwcml2LVxcdTAwM2VwdCk7XFxuK1xcdFxcdHN0bW1hY19zZnRfcmVtb3ZlX3BhY2soXFx1MDAyNnRwcml2LVxcdTAwM2VwdCk7XFxuIFxcdGtmcmVlKHRwcml2KTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC00MTQsNyArNDYzLDcgQEAgc3RhdGljIGludCBzdG1tYWNfdGVzdF9tbWMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2VlZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIHtcXG4gXFx0c3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqaW5pdGlhbCwgKmZpbmFsO1xcbi1cXHRpbnQgcmV0cmllcyA9IDEwO1xcbitcXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQsIG1heF9kdXJhdGlvbjtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghcHJpdi1cXHUwMDNlZG1hX2NhcC5lZWUgfHwgIXByaXYtXFx1MDAzZWVlZV9hY3RpdmUpXFxuQEAgLTQzMCwxNCArNDc5LDIxIEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfZWVlKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4gXFx0XFx0Z290byBvdXRfZnJlZV9pbml0aWFsO1xcbiBcXHR9XFxuIFxcbitcXHQvKiBTbmFwc2hvdCBzdGF0cywgd2Ugd2FudCB0byBjb3VudCB0aGUgaW5fbHBpIGV2ZW50cy4gV2UgbWF5IGVudGVyXFxuK1xcdCAqIExQSSBqdXN0IGFmdGVyIHRoZSBwYWNrZXQgd2FzIHNlbnQuXFxuK1xcdCAqL1xcbiBcXHRtZW1jcHkoaW5pdGlhbCwgXFx1MDAyNnByaXYtXFx1MDAzZXhzdGF0cywgc2l6ZW9mKCppbml0aWFsKSk7XFxuIFxcbitcXHQvKiBTZW5kIGEgZnJhbWUsIHRoZW4gd2FpdCB0byBlbnRlciBMUEkgKi9cXG4gXFx0cmV0ID0gc3RtbWFjX3Rlc3RfbWFjX2xvb3BiYWNrKHByaXYpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIG91dF9mcmVlX2ZpbmFsO1xcbiBcXG4rXFx0bWF4X2R1cmF0aW9uID0gdXNlY3NfdG9famlmZmllcygyICogcHJpdi1cXHUwMDNldHhfbHBpX3RpbWVyKTtcXG4rXFxuIFxcdC8qIFdlIGhhdmUgbm8gdHJhZmZpYyBpbiB0aGUgbGluZSBzbywgc29vbmVyIG9yIGxhdGVyIGl0IHdpbGwgZ28gTFBJICovXFxuLVxcdHdoaWxlICgtLXJldHJpZXMpIHtcXG4rXFx0dGltZW91dCA9IGppZmZpZXMgKyBtYXhfZHVyYXRpb247XFxuK1xcdHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkge1xcbiBcXHRcXHRtZW1jcHkoZmluYWwsIFxcdTAwMjZwcml2LVxcdTAwM2V4c3RhdHMsIHNpemVvZigqZmluYWwpKTtcXG4gXFxuIFxcdFxcdGlmIChmaW5hbC1cXHUwMDNlaXJxX3R4X3BhdGhfaW5fbHBpX21vZGVfbiBcXHUwMDNlXFxuQEAgLTQ0NiwyMCArNTAyLDM4IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfZWVlKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4gXFx0XFx0bXNsZWVwKDEwMCk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICghcmV0cmllcykge1xcbitcXHRtZW1jcHkoZmluYWwsIFxcdTAwMjZwcml2LVxcdTAwM2V4c3RhdHMsIHNpemVvZigqZmluYWwpKTtcXG4rXFx0aWYgKGZpbmFsLVxcdTAwM2VpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uIFxcdTAwM2M9XFxuK1xcdCAgICBpbml0aWFsLVxcdTAwM2VpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uKSB7XFxuIFxcdFxcdHJldCA9IC1FVElNRURPVVQ7XFxuIFxcdFxcdGdvdG8gb3V0X2ZyZWVfZmluYWw7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChmaW5hbC1cXHUwMDNlaXJxX3R4X3BhdGhfaW5fbHBpX21vZGVfbiBcXHUwMDNjPVxcbi1cXHQgICAgaW5pdGlhbC1cXHUwMDNlaXJxX3R4X3BhdGhfaW5fbHBpX21vZGVfbikge1xcbi1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHQvKiBSZS1zbmFwc2hvdCwgYXMgd2Ugd2FudCB0byBtZWFzdXJlIGV4aXRfbHBpIGV2ZW50cy4gV2Ugc2hvdWxkIGJlXFxuK1xcdCAqIGluIExQSSByaWdodCBub3cuXFxuK1xcdCAqL1xcbitcXHRtZW1jcHkoaW5pdGlhbCwgXFx1MDAyNnByaXYtXFx1MDAzZXhzdGF0cywgc2l6ZW9mKCppbml0aWFsKSk7XFxuK1xcbitcXHQvKiBUWCBzb21ldGhpbmcgc28gd2UgZ28gb3V0IG9mIExQSSAqL1xcbitcXHRyZXQgPSBzdG1tYWNfdGVzdF9tYWNfbG9vcGJhY2socHJpdik7XFxuK1xcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0X2ZyZWVfZmluYWw7XFxuK1xcbitcXHQvKiBXYWl0IGZvciB0aGUgZXhpdCBMUEkgaW50ZXJydXB0ICovXFxuK1xcdHRpbWVvdXQgPSBqaWZmaWVzICsgbWF4X2R1cmF0aW9uO1xcbitcXHR3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcXG4rXFx0XFx0bWVtY3B5KGZpbmFsLCBcXHUwMDI2cHJpdi1cXHUwMDNleHN0YXRzLCBzaXplb2YoKmZpbmFsKSk7XFxuK1xcbitcXHRcXHRpZiAoZmluYWwtXFx1MDAzZWlycV90eF9wYXRoX2V4aXRfbHBpX21vZGVfbiBcXHUwMDNlXFxuK1xcdFxcdCAgICBpbml0aWFsLVxcdTAwM2VpcnFfdHhfcGF0aF9leGl0X2xwaV9tb2RlX24pXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRtc2xlZXAoMTAwKTtcXG4gXFx0fVxcbiBcXG4rXFx0bWVtY3B5KGZpbmFsLCBcXHUwMDI2cHJpdi1cXHUwMDNleHN0YXRzLCBzaXplb2YoKmZpbmFsKSk7XFxuIFxcdGlmIChmaW5hbC1cXHUwMDNlaXJxX3R4X3BhdGhfZXhpdF9scGlfbW9kZV9uIFxcdTAwM2M9XFxuIFxcdCAgICBpbml0aWFsLVxcdTAwM2VpcnFfdHhfcGF0aF9leGl0X2xwaV9tb2RlX24pIHtcXG4tXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0cmV0ID0gLUVUSU1FRE9VVDtcXG4gXFx0XFx0Z290byBvdXRfZnJlZV9maW5hbDtcXG4gXFx0fVxcbiBcXG5AQCAtNzY3LDcgKzg0MSw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfZmxvd2N0cmwoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiBcXHR0cHJpdi1cXHUwMDNlcHQuZnVuYyA9IHN0bW1hY190ZXN0X2Zsb3djdHJsX3ZhbGlkYXRlO1xcbiBcXHR0cHJpdi1cXHUwMDNlcHQuZGV2ID0gcHJpdi1cXHUwMDNlZGV2O1xcbiBcXHR0cHJpdi1cXHUwMDNlcHQuYWZfcGFja2V0X3ByaXYgPSB0cHJpdjtcXG4tXFx0ZGV2X2FkZF9wYWNrKFxcdTAwMjZ0cHJpdi1cXHUwMDNlcHQpO1xcbitcXHRzdG1tYWNfc2Z0X2FkZF9wYWNrKFxcdTAwMjZ0cHJpdi1cXHUwMDNlcHQpO1xcbiBcXG4gXFx0LyogQ29tcHV0ZSBtaW5pbXVtIG51bWJlciBvZiBwYWNrZXRzIHRvIG1ha2UgRklGTyBmdWxsICovXFxuIFxcdHBrdF9jb3VudCA9IHJ4X2ZpZm9fc2l6ZTtcXG5AQCAtODIzLDcgKzg5Nyw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfZmxvd2N0cmwoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiBjbGVhbnVwOlxcbiBcXHRkZXZfbWNfZGVsKHByaXYtXFx1MDAzZWRldiwgcGFkZHIpO1xcbiBcXHRkZXZfc2V0X3Byb21pc2N1aXR5KHByaXYtXFx1MDAzZWRldiwgLTEpO1xcbi1cXHRkZXZfcmVtb3ZlX3BhY2soXFx1MDAyNnRwcml2LVxcdTAwM2VwdCk7XFxuK1xcdHN0bW1hY19zZnRfcmVtb3ZlX3BhY2soXFx1MDAyNnRwcml2LVxcdTAwM2VwdCk7XFxuIFxcdGtmcmVlKHRwcml2KTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC05MjEsNiArOTk1LDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X3ZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4gXFx0dHByaXYtXFx1MDAzZXB0LmRldiA9IHByaXYtXFx1MDAzZWRldjtcXG4gXFx0dHByaXYtXFx1MDAzZXB0LmFmX3BhY2tldF9wcml2ID0gdHByaXY7XFxuIFxcdHRwcml2LVxcdTAwM2VwYWNrZXQgPSBcXHUwMDI2YXR0cjtcXG4rXFx0dHByaXYtXFx1MDAzZWNhcHR1cmVfYWxsID0gdHJ1ZTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEFzIHdlIHVzZSBIQVNIIGZpbHRlcmluZywgZmFsc2UgcG9zaXRpdmVzIG1heSBhcHBlYXIuIFRoaXMgaXMgYVxcbkBAIC05MjgsNyArMTAwMyw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF92bGFuZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIFxcdCAqIEhBU0ggdmFsdWVzLlxcbiBcXHQgKi9cXG4gXFx0dHByaXYtXFx1MDAzZXZsYW5faWQgPSAweDEyMztcXG4tXFx0ZGV2X2FkZF9wYWNrKFxcdTAwMjZ0cHJpdi1cXHUwMDNlcHQpO1xcbitcXHRzdG1tYWNfc2Z0X2FkZF9wYWNrKFxcdTAwMjZ0cHJpdi1cXHUwMDNlcHQpO1xcbiBcXG4gXFx0cmV0ID0gdmxhbl92aWRfYWRkKHByaXYtXFx1MDAzZWRldiwgaHRvbnMoRVRIX1BfODAyMVEpLCB0cHJpdi1cXHUwMDNldmxhbl9pZCk7XFxuIFxcdGlmIChyZXQpXFxuQEAgLTk2OCw3ICsxMDQzLDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X3ZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4gdmxhbl9kZWw6XFxuIFxcdHZsYW5fdmlkX2RlbChwcml2LVxcdTAwM2VkZXYsIGh0b25zKEVUSF9QXzgwMjFRKSwgdHByaXYtXFx1MDAzZXZsYW5faWQpO1xcbiBjbGVhbnVwOlxcbi1cXHRkZXZfcmVtb3ZlX3BhY2soXFx1MDAyNnRwcml2LVxcdTAwM2VwdCk7XFxuK1xcdHN0bW1hY19zZnRfcmVtb3ZlX3BhY2soXFx1MDAyNnRwcml2LVxcdTAwM2VwdCk7XFxuIFxcdGtmcmVlKHRwcml2KTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0xMDE1LDYgKzEwOTAsNyBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfZHZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4gXFx0dHByaXYtXFx1MDAzZXB0LmRldiA9IHByaXYtXFx1MDAzZWRldjtcXG4gXFx0dHByaXYtXFx1MDAzZXB0LmFmX3BhY2tldF9wcml2ID0gdHByaXY7XFxuIFxcdHRwcml2LVxcdTAwM2VwYWNrZXQgPSBcXHUwMDI2YXR0cjtcXG4rXFx0dHByaXYtXFx1MDAzZWNhcHR1cmVfYWxsID0gdHJ1ZTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEFzIHdlIHVzZSBIQVNIIGZpbHRlcmluZywgZmFsc2UgcG9zaXRpdmVzIG1heSBhcHBlYXIuIFRoaXMgaXMgYVxcbkBAIC0xMDIyLDcgKzEwOTgsNyBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfZHZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4gXFx0ICogSEFTSCB2YWx1ZXMuXFxuIFxcdCAqL1xcbiBcXHR0cHJpdi1cXHUwMDNldmxhbl9pZCA9IDB4MTIzO1xcbi1cXHRkZXZfYWRkX3BhY2soXFx1MDAyNnRwcml2LVxcdTAwM2VwdCk7XFxuK1xcdHN0bW1hY19zZnRfYWRkX3BhY2soXFx1MDAyNnRwcml2LVxcdTAwM2VwdCk7XFxuIFxcbiBcXHRyZXQgPSB2bGFuX3ZpZF9hZGQocHJpdi1cXHUwMDNlZGV2LCBodG9ucyhFVEhfUF84MDIxQUQpLCB0cHJpdi1cXHUwMDNldmxhbl9pZCk7XFxuIFxcdGlmIChyZXQpXFxuQEAgLTEwNjIsNyArMTEzOCw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9kdmxhbmZpbHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiB2bGFuX2RlbDpcXG4gXFx0dmxhbl92aWRfZGVsKHByaXYtXFx1MDAzZWRldiwgaHRvbnMoRVRIX1BfODAyMUFEKSwgdHByaXYtXFx1MDAzZXZsYW5faWQpO1xcbiBjbGVhbnVwOlxcbi1cXHRkZXZfcmVtb3ZlX3BhY2soXFx1MDAyNnRwcml2LVxcdTAwM2VwdCk7XFxuK1xcdHN0bW1hY19zZnRfcmVtb3ZlX3BhY2soXFx1MDAyNnRwcml2LVxcdTAwM2VwdCk7XFxuIFxcdGtmcmVlKHRwcml2KTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0xMjkzLDcgKzEzNjksOCBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X3ZsYW5vZmZfY29tbW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgYm9vbCBzdmxhbilcXG4gXFx0dHByaXYtXFx1MDAzZXB0LmFmX3BhY2tldF9wcml2ID0gdHByaXY7XFxuIFxcdHRwcml2LVxcdTAwM2VwYWNrZXQgPSBcXHUwMDI2YXR0cjtcXG4gXFx0dHByaXYtXFx1MDAzZXZsYW5faWQgPSAweDEyMztcXG4tXFx0ZGV2X2FkZF9wYWNrKFxcdTAwMjZ0cHJpdi1cXHUwMDNlcHQpO1xcbitcXHR0cHJpdi1cXHUwMDNlY2FwdHVyZV9hbGwgPSB0cnVlO1xcbitcXHRzdG1tYWNfc2Z0X2FkZF9wYWNrKFxcdTAwMjZ0cHJpdi1cXHUwMDNlcHQpO1xcbiBcXG4gXFx0cmV0ID0gdmxhbl92aWRfYWRkKHByaXYtXFx1MDAzZWRldiwgaHRvbnMocHJvdG8pLCB0cHJpdi1cXHUwMDNldmxhbl9pZCk7XFxuIFxcdGlmIChyZXQpXFxuQEAgLTEzMjAsNyArMTM5Nyw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3Rfdmxhbm9mZl9jb21tb24oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCBib29sIHN2bGFuKVxcbiB2bGFuX2RlbDpcXG4gXFx0dmxhbl92aWRfZGVsKHByaXYtXFx1MDAzZWRldiwgaHRvbnMocHJvdG8pLCB0cHJpdi1cXHUwMDNldmxhbl9pZCk7XFxuIGNsZWFudXA6XFxuLVxcdGRldl9yZW1vdmVfcGFjayhcXHUwMDI2dHByaXYtXFx1MDAzZXB0KTtcXG4rXFx0c3RtbWFjX3NmdF9yZW1vdmVfcGFjayhcXHUwMDI2dHByaXYtXFx1MDAzZXB0KTtcXG4gXFx0a2ZyZWUodHByaXYpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTEzMzIsNyArMTQwOSw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3Rfdmxhbm9mZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIFxcbiBzdGF0aWMgaW50IHN0bW1hY190ZXN0X3N2bGFub2ZmKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4ge1xcbi1cXHRpZiAoIXByaXYtXFx1MDAzZWRtYV9jYXAuZHZsYW4pXFxuK1xcdGlmICghKHByaXYtXFx1MDAzZWRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fU1RBR19UWCkpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0cmV0dXJuIHN0bW1hY190ZXN0X3ZsYW5vZmZfY29tbW9uKHByaXYsIHRydWUpO1xcbiB9XFxuQEAgLTE2OTksNiArMTc3Niw5IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9qdW1ibyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUxNiBxdWV1ZSlcXG4gXFx0c3RydWN0IHN0bW1hY19wYWNrZXRfYXR0cnMgYXR0ciA9IHsgfTtcXG4gXFx0aW50IHNpemUgPSBwcml2LVxcdTAwM2VkbWFfY29uZi5kbWFfYnVmX3N6O1xcbiBcXG4rXFx0aWYgKCFkd21hY19pc194bWFjKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZSkpXFxuK1xcdFxcdHNpemUgLT0gTkVUX0lQX0FMSUdOO1xcbitcXG4gXFx0YXR0ci5kc3QgPSBwcml2LVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyO1xcbiBcXHRhdHRyLm1heF9zaXplID0gc2l6ZSAtIEVUSF9GQ1NfTEVOO1xcbiBcXHRhdHRyLnF1ZXVlX21hcHBpbmcgPSBxdWV1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTc6MjI6MTMuODE3NTk5Mjg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNzc4MzM0MzMzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNUTWljcm9lbGVjdHJvbmljcyAvIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIGRyaXZlciAoc3RtbWFjKSwgc3BlY2lmaWNhbGx5IGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9uIGFuZCBzZWxmdGVzdCBoZWxwZXJzLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoQVJNL01JUFMvZXRjLiBTb0NzIG9yIHNwZWNpZmljIEludGVsL0xvb25nc29uL1N5bm9wc3lzIFBDSSBOSUMgZGV2aWNlcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBvbiBhbWQ2NCwgcmVuZGVyaW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2E4MDY5NjFlZGMxNDEwMDc4NGRhNzk2NTcwNjAzZGFjOWY3ZTRiZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDE3OjIyOjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbmluZGV4IDVmZTdlOTVmZGQzNDUuLjM2NjRhMjk4NTc0YWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG5AQCAtMTUzNiwxNyArMTUzNiwxNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHN0bW1hY19yeF9vZmZzZXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFx0cmV0dXJuIE5FVF9TS0JfUEFEICsgTkVUX0lQX0FMSUdOO1xuIH1cbiBcbi1zdGF0aWMgaW50IHN0bW1hY19zZXRfYmZzaXplKGludCBtdHUpXG4rc3RhdGljIGludCBzdG1tYWNfc2V0X2Jmc2l6ZShpbnQgbGVuKVxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAobXR1IFx1MDAzZT0gQlVGX1NJWkVfOEtpQilcbitcdGlmIChsZW4gXHUwMDNlIEJVRl9TSVpFXzhLaUIpXG4gXHRcdHJldCA9IEJVRl9TSVpFXzE2S2lCO1xuLVx0ZWxzZSBpZiAobXR1IFx1MDAzZT0gQlVGX1NJWkVfNEtpQilcbitcdGVsc2UgaWYgKGxlbiBcdTAwM2UgQlVGX1NJWkVfNEtpQilcbiBcdFx0cmV0ID0gQlVGX1NJWkVfOEtpQjtcbi1cdGVsc2UgaWYgKG10dSBcdTAwM2U9IEJVRl9TSVpFXzJLaUIpXG4rXHRlbHNlIGlmIChsZW4gXHUwMDNlIEJVRl9TSVpFXzJLaUIpXG4gXHRcdHJldCA9IEJVRl9TSVpFXzRLaUI7XG4tXHRlbHNlIGlmIChtdHUgXHUwMDNlIERFRkFVTFRfQlVGU0laRSlcbitcdGVsc2UgaWYgKGxlbiBcdTAwM2UgREVGQVVMVF9CVUZTSVpFKVxuIFx0XHRyZXQgPSBCVUZfU0laRV8yS2lCO1xuIFx0ZWxzZVxuIFx0XHRyZXQgPSBERUZBVUxUX0JVRlNJWkU7XG5AQCAtNDA2Myw3ICs0MDYzLDcgQEAgc3RhdGljIHN0cnVjdCBzdG1tYWNfZG1hX2NvbmYgKlxuIHN0bW1hY19zZXR1cF9kbWFfZGVzYyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBtdHUpXG4ge1xuIFx0c3RydWN0IHN0bW1hY19kbWFfY29uZiAqZG1hX2NvbmY7XG4tXHRpbnQgYmZzaXplLCByZXQ7XG4rXHRpbnQgYmZzaXplLCBsZW4sIHJldDtcbiBcdHU4IGNoYW47XG4gXG4gXHRkbWFfY29uZiA9IGt6YWxsb2Nfb2JqKCpkbWFfY29uZik7XG5AQCAtNDA3MywxMyArNDA3MywxNSBAQCBzdG1tYWNfc2V0dXBfZG1hX2Rlc2Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgbXR1KVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcdH1cbiBcbi1cdC8qIFJldHVybnMgMCBvciBCVUZfU0laRV8xNktpQiBpZiBtdHUgXHUwMDNlIDhLaUIgYW5kIGR3bWFjNCBvciByaW5nIG1vZGUgKi9cbi1cdGJmc2l6ZSA9IHN0bW1hY19zZXRfMTZraWJfYmZzaXplKHByaXYsIG10dSk7XG4rXHRsZW4gPSBtdHUgKyBFVEhfSExFTiArIDIgKiBWTEFOX0hMRU4gKyBFVEhfRkNTX0xFTiArIE5FVF9JUF9BTElHTjtcbitcbitcdC8qIFJldHVybnMgMCBvciBCVUZfU0laRV8xNktpQiBpZiBsZW4gXHUwMDNlIDhLaUIgYW5kIGR3bWFjNCBvciByaW5nIG1vZGUgKi9cbitcdGJmc2l6ZSA9IHN0bW1hY19zZXRfMTZraWJfYmZzaXplKHByaXYsIGxlbik7XG4gXHRpZiAoYmZzaXplIFx1MDAzYyAwKVxuIFx0XHRiZnNpemUgPSAwO1xuIFxuIFx0aWYgKGJmc2l6ZSBcdTAwM2MgQlVGX1NJWkVfMTZLaUIpXG4tXHRcdGJmc2l6ZSA9IHN0bW1hY19zZXRfYmZzaXplKG10dSk7XG4rXHRcdGJmc2l6ZSA9IHN0bW1hY19zZXRfYmZzaXplKGxlbik7XG4gXG4gXHRkbWFfY29uZi1cdTAwM2VkbWFfYnVmX3N6ID0gYmZzaXplO1xuIFx0LyogQ2hvc2UgdGhlIHR4L3J4IHNpemUgZnJvbSB0aGUgYWxyZWFkeSBkZWZpbmVkIG9uZSBpbiB0aGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcbmluZGV4IDYzNzJlYzdjM2YzMTcuLmZjOGQ2OTI2MGY0MzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuY1xuQEAgLTEyLDYgKzEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWRwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcC5oXHUwMDNlXG5AQCAtMjM3LDYgKzIzOCwxMCBAQCBzdHJ1Y3Qgc3RtbWFjX3Rlc3RfcHJpdiB7XG4gXHRzdHJ1Y3Qgc3RtbWFjX3BhY2tldF9hdHRycyAqcGFja2V0O1xuIFx0c3RydWN0IHBhY2tldF90eXBlIHB0O1xuIFx0c3RydWN0IGNvbXBsZXRpb24gY29tcDtcbitcdF9fYmUxNiBwYWNrZXRfdHlwZTtcbitcdGludCAoKmZ1bmMpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuK1x0XHQgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfbmRldik7XG4rXHRib29sIGNhcHR1cmVfYWxsO1xuIFx0aW50IGRvdWJsZV92bGFuO1xuIFx0aW50IHZsYW5faWQ7XG4gXHRpbnQgb2s7XG5AQCAtMzE2LDYgKzMyMSw1MCBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2xvb3BiYWNrX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBzdG1tYWNfc2Z0X2ZpbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbitcdFx0XHQgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsXG4rXHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19uZGV2KVxuK3tcbitcdHN0cnVjdCBzdG1tYWNfdGVzdF9wcml2ICp0cHJpdiA9IHB0LVx1MDAzZWFmX3BhY2tldF9wcml2O1xuK1x0c3RydWN0IGV0aGhkciAqaGRyID0gZXRoX2hkcihza2IpO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAoaGRyLVx1MDAzZWhfcHJvdG8gPT0gdHByaXYtXHUwMDNlcGFja2V0X3R5cGUpIHtcbitcdFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbitcbitcdFx0aWYgKG5za2IpXG4rXHRcdFx0cmV0ID0gdHByaXYtXHUwMDNlZnVuYyhuc2tiLCBuZGV2LCBwdCwgb3JpZ19uZGV2KTtcbitcdH1cbitcbitcdGtmcmVlX3NrYihza2IpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQgc3RtbWFjX3NmdF9hZGRfcGFjayhzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0KVxuK3tcbitcdHN0cnVjdCBzdG1tYWNfdGVzdF9wcml2ICp0cHJpdiA9IHB0LVx1MDAzZWFmX3BhY2tldF9wcml2O1xuK1xuK1x0aWYgKG5ldGRldl91c2VzX2RzYSh0cHJpdi1cdTAwM2VwdC5kZXYpIHx8IHRwcml2LVx1MDAzZWNhcHR1cmVfYWxsKSB7XG4rXHRcdHRwcml2LVx1MDAzZXBhY2tldF90eXBlID0gdHByaXYtXHUwMDNlcHQudHlwZTtcbitcdFx0dHByaXYtXHUwMDNlZnVuYyA9IHRwcml2LVx1MDAzZXB0LmZ1bmM7XG4rXG4rXHRcdC8qIERTQSBjb25kdWl0IHdpbGwgcmVwb3J0IEVUSF9QX1hEU0EsIHNvIG91ciBwYWNrZXQgaGFuZGxlclxuK1x0XHQgKiB3b24ndCBtYXRjaC4gTGV0J3MgcmVnaXN0ZXIgYSBFVEhfUF9BTEwgbWF0Y2ggYW5kIGZpbHRlclxuK1x0XHQgKiBtYW51YWxseSBpbiBzdG1tYWNfc2Z0X2ZpbHRlci5cbitcdFx0ICovXG4rXHRcdHRwcml2LVx1MDAzZXB0LnR5cGUgPSBodG9ucyhFVEhfUF9BTEwpO1xuK1x0XHR0cHJpdi1cdTAwM2VwdC5mdW5jID0gc3RtbWFjX3NmdF9maWx0ZXI7XG4rXHRcdHRwcml2LVx1MDAzZXB0Lmlnbm9yZV9vdXRnb2luZyA9IHRydWU7XG4rXHR9XG4rXG4rXHRkZXZfYWRkX3BhY2socHQpO1xuK31cbitcbitzdGF0aWMgdm9pZCBzdG1tYWNfc2Z0X3JlbW92ZV9wYWNrKHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQpXG4re1xuK1x0ZGV2X3JlbW92ZV9wYWNrKHB0KTtcbit9XG4rXG4gc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2xvb3BiYWNrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbiBcdFx0XHRcdCAgc3RydWN0IHN0bW1hY19wYWNrZXRfYXR0cnMgKmF0dHIpXG4ge1xuQEAgLTMzNyw3ICszODYsNyBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbG9vcGJhY2soc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0dHByaXYtXHUwMDNlcGFja2V0ID0gYXR0cjtcbiBcbiBcdGlmICghYXR0ci1cdTAwM2Vkb250X3dhaXQpXG4tXHRcdGRldl9hZGRfcGFjayhcdTAwMjZ0cHJpdi1cdTAwM2VwdCk7XG4rXHRcdHN0bW1hY19zZnRfYWRkX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuIFxuIFx0c2tiID0gc3RtbWFjX3Rlc3RfZ2V0X3VkcF9za2IocHJpdiwgYXR0cik7XG4gXHRpZiAoIXNrYikge1xuQEAgLTM2MCw3ICs0MDksNyBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbG9vcGJhY2soc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFxuIGNsZWFudXA6XG4gXHRpZiAoIWF0dHItXHUwMDNlZG9udF93YWl0KVxuLVx0XHRkZXZfcmVtb3ZlX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuK1x0XHRzdG1tYWNfc2Z0X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiBcdGtmcmVlKHRwcml2KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTQxNCw3ICs0NjMsNyBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X21tYyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gc3RhdGljIGludCBzdG1tYWNfdGVzdF9lZWUoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbiBcdHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKmluaXRpYWwsICpmaW5hbDtcbi1cdGludCByZXRyaWVzID0gMTA7XG4rXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQsIG1heF9kdXJhdGlvbjtcbiBcdGludCByZXQ7XG4gXG4gXHRpZiAoIXByaXYtXHUwMDNlZG1hX2NhcC5lZWUgfHwgIXByaXYtXHUwMDNlZWVlX2FjdGl2ZSlcbkBAIC00MzAsMTQgKzQ3OSwyMSBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2VlZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXHRcdGdvdG8gb3V0X2ZyZWVfaW5pdGlhbDtcbiBcdH1cbiBcbitcdC8qIFNuYXBzaG90IHN0YXRzLCB3ZSB3YW50IHRvIGNvdW50IHRoZSBpbl9scGkgZXZlbnRzLiBXZSBtYXkgZW50ZXJcbitcdCAqIExQSSBqdXN0IGFmdGVyIHRoZSBwYWNrZXQgd2FzIHNlbnQuXG4rXHQgKi9cbiBcdG1lbWNweShpbml0aWFsLCBcdTAwMjZwcml2LVx1MDAzZXhzdGF0cywgc2l6ZW9mKCppbml0aWFsKSk7XG4gXG4rXHQvKiBTZW5kIGEgZnJhbWUsIHRoZW4gd2FpdCB0byBlbnRlciBMUEkgKi9cbiBcdHJldCA9IHN0bW1hY190ZXN0X21hY19sb29wYmFjayhwcml2KTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X2ZyZWVfZmluYWw7XG4gXG4rXHRtYXhfZHVyYXRpb24gPSB1c2Vjc190b19qaWZmaWVzKDIgKiBwcml2LVx1MDAzZXR4X2xwaV90aW1lcik7XG4rXG4gXHQvKiBXZSBoYXZlIG5vIHRyYWZmaWMgaW4gdGhlIGxpbmUgc28sIHNvb25lciBvciBsYXRlciBpdCB3aWxsIGdvIExQSSAqL1xuLVx0d2hpbGUgKC0tcmV0cmllcykge1xuK1x0dGltZW91dCA9IGppZmZpZXMgKyBtYXhfZHVyYXRpb247XG4rXHR3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcbiBcdFx0bWVtY3B5KGZpbmFsLCBcdTAwMjZwcml2LVx1MDAzZXhzdGF0cywgc2l6ZW9mKCpmaW5hbCkpO1xuIFxuIFx0XHRpZiAoZmluYWwtXHUwMDNlaXJxX3R4X3BhdGhfaW5fbHBpX21vZGVfbiBcdTAwM2VcbkBAIC00NDYsMjAgKzUwMiwzOCBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2VlZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXHRcdG1zbGVlcCgxMDApO1xuIFx0fVxuIFxuLVx0aWYgKCFyZXRyaWVzKSB7XG4rXHRtZW1jcHkoZmluYWwsIFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLCBzaXplb2YoKmZpbmFsKSk7XG4rXHRpZiAoZmluYWwtXHUwMDNlaXJxX3R4X3BhdGhfaW5fbHBpX21vZGVfbiBcdTAwM2M9XG4rXHQgICAgaW5pdGlhbC1cdTAwM2VpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uKSB7XG4gXHRcdHJldCA9IC1FVElNRURPVVQ7XG4gXHRcdGdvdG8gb3V0X2ZyZWVfZmluYWw7XG4gXHR9XG4gXG4tXHRpZiAoZmluYWwtXHUwMDNlaXJxX3R4X3BhdGhfaW5fbHBpX21vZGVfbiBcdTAwM2M9XG4tXHQgICAgaW5pdGlhbC1cdTAwM2VpcnFfdHhfcGF0aF9pbl9scGlfbW9kZV9uKSB7XG4tXHRcdHJldCA9IC1FSU5WQUw7XG4rXHQvKiBSZS1zbmFwc2hvdCwgYXMgd2Ugd2FudCB0byBtZWFzdXJlIGV4aXRfbHBpIGV2ZW50cy4gV2Ugc2hvdWxkIGJlXG4rXHQgKiBpbiBMUEkgcmlnaHQgbm93LlxuK1x0ICovXG4rXHRtZW1jcHkoaW5pdGlhbCwgXHUwMDI2cHJpdi1cdTAwM2V4c3RhdHMsIHNpemVvZigqaW5pdGlhbCkpO1xuK1xuK1x0LyogVFggc29tZXRoaW5nIHNvIHdlIGdvIG91dCBvZiBMUEkgKi9cbitcdHJldCA9IHN0bW1hY190ZXN0X21hY19sb29wYmFjayhwcml2KTtcbitcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X2ZyZWVfZmluYWw7XG4rXG4rXHQvKiBXYWl0IGZvciB0aGUgZXhpdCBMUEkgaW50ZXJydXB0ICovXG4rXHR0aW1lb3V0ID0gamlmZmllcyArIG1heF9kdXJhdGlvbjtcbitcdHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkge1xuK1x0XHRtZW1jcHkoZmluYWwsIFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLCBzaXplb2YoKmZpbmFsKSk7XG4rXG4rXHRcdGlmIChmaW5hbC1cdTAwM2VpcnFfdHhfcGF0aF9leGl0X2xwaV9tb2RlX24gXHUwMDNlXG4rXHRcdCAgICBpbml0aWFsLVx1MDAzZWlycV90eF9wYXRoX2V4aXRfbHBpX21vZGVfbilcbitcdFx0XHRicmVhaztcbitcdFx0bXNsZWVwKDEwMCk7XG4gXHR9XG4gXG4rXHRtZW1jcHkoZmluYWwsIFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLCBzaXplb2YoKmZpbmFsKSk7XG4gXHRpZiAoZmluYWwtXHUwMDNlaXJxX3R4X3BhdGhfZXhpdF9scGlfbW9kZV9uIFx1MDAzYz1cbiBcdCAgICBpbml0aWFsLVx1MDAzZWlycV90eF9wYXRoX2V4aXRfbHBpX21vZGVfbikge1xuLVx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRyZXQgPSAtRVRJTUVET1VUO1xuIFx0XHRnb3RvIG91dF9mcmVlX2ZpbmFsO1xuIFx0fVxuIFxuQEAgLTc2Nyw3ICs4NDEsNyBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2Zsb3djdHJsKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdHRwcml2LVx1MDAzZXB0LmZ1bmMgPSBzdG1tYWNfdGVzdF9mbG93Y3RybF92YWxpZGF0ZTtcbiBcdHRwcml2LVx1MDAzZXB0LmRldiA9IHByaXYtXHUwMDNlZGV2O1xuIFx0dHByaXYtXHUwMDNlcHQuYWZfcGFja2V0X3ByaXYgPSB0cHJpdjtcbi1cdGRldl9hZGRfcGFjayhcdTAwMjZ0cHJpdi1cdTAwM2VwdCk7XG4rXHRzdG1tYWNfc2Z0X2FkZF9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiBcbiBcdC8qIENvbXB1dGUgbWluaW11bSBudW1iZXIgb2YgcGFja2V0cyB0byBtYWtlIEZJRk8gZnVsbCAqL1xuIFx0cGt0X2NvdW50ID0gcnhfZmlmb19zaXplO1xuQEAgLTgyMyw3ICs4OTcsNyBAQCBzdGF0aWMgaW50IHN0bW1hY190ZXN0X2Zsb3djdHJsKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBjbGVhbnVwOlxuIFx0ZGV2X21jX2RlbChwcml2LVx1MDAzZWRldiwgcGFkZHIpO1xuIFx0ZGV2X3NldF9wcm9taXNjdWl0eShwcml2LVx1MDAzZWRldiwgLTEpO1xuLVx0ZGV2X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbitcdHN0bW1hY19zZnRfcmVtb3ZlX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuIFx0a2ZyZWUodHByaXYpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtOTIxLDYgKzk5NSw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF92bGFuZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXHR0cHJpdi1cdTAwM2VwdC5kZXYgPSBwcml2LVx1MDAzZWRldjtcbiBcdHRwcml2LVx1MDAzZXB0LmFmX3BhY2tldF9wcml2ID0gdHByaXY7XG4gXHR0cHJpdi1cdTAwM2VwYWNrZXQgPSBcdTAwMjZhdHRyO1xuK1x0dHByaXYtXHUwMDNlY2FwdHVyZV9hbGwgPSB0cnVlO1xuIFxuIFx0LypcbiBcdCAqIEFzIHdlIHVzZSBIQVNIIGZpbHRlcmluZywgZmFsc2UgcG9zaXRpdmVzIG1heSBhcHBlYXIuIFRoaXMgaXMgYVxuQEAgLTkyOCw3ICsxMDAzLDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X3ZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdCAqIEhBU0ggdmFsdWVzLlxuIFx0ICovXG4gXHR0cHJpdi1cdTAwM2V2bGFuX2lkID0gMHgxMjM7XG4tXHRkZXZfYWRkX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuK1x0c3RtbWFjX3NmdF9hZGRfcGFjayhcdTAwMjZ0cHJpdi1cdTAwM2VwdCk7XG4gXG4gXHRyZXQgPSB2bGFuX3ZpZF9hZGQocHJpdi1cdTAwM2VkZXYsIGh0b25zKEVUSF9QXzgwMjFRKSwgdHByaXYtXHUwMDNldmxhbl9pZCk7XG4gXHRpZiAocmV0KVxuQEAgLTk2OCw3ICsxMDQzLDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X3ZsYW5maWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiB2bGFuX2RlbDpcbiBcdHZsYW5fdmlkX2RlbChwcml2LVx1MDAzZWRldiwgaHRvbnMoRVRIX1BfODAyMVEpLCB0cHJpdi1cdTAwM2V2bGFuX2lkKTtcbiBjbGVhbnVwOlxuLVx0ZGV2X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbitcdHN0bW1hY19zZnRfcmVtb3ZlX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuIFx0a2ZyZWUodHByaXYpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMTAxNSw2ICsxMDkwLDcgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2R2bGFuZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXHR0cHJpdi1cdTAwM2VwdC5kZXYgPSBwcml2LVx1MDAzZWRldjtcbiBcdHRwcml2LVx1MDAzZXB0LmFmX3BhY2tldF9wcml2ID0gdHByaXY7XG4gXHR0cHJpdi1cdTAwM2VwYWNrZXQgPSBcdTAwMjZhdHRyO1xuK1x0dHByaXYtXHUwMDNlY2FwdHVyZV9hbGwgPSB0cnVlO1xuIFxuIFx0LypcbiBcdCAqIEFzIHdlIHVzZSBIQVNIIGZpbHRlcmluZywgZmFsc2UgcG9zaXRpdmVzIG1heSBhcHBlYXIuIFRoaXMgaXMgYVxuQEAgLTEwMjIsNyArMTA5OCw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9kdmxhbmZpbHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFx0ICogSEFTSCB2YWx1ZXMuXG4gXHQgKi9cbiBcdHRwcml2LVx1MDAzZXZsYW5faWQgPSAweDEyMztcbi1cdGRldl9hZGRfcGFjayhcdTAwMjZ0cHJpdi1cdTAwM2VwdCk7XG4rXHRzdG1tYWNfc2Z0X2FkZF9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiBcbiBcdHJldCA9IHZsYW5fdmlkX2FkZChwcml2LVx1MDAzZWRldiwgaHRvbnMoRVRIX1BfODAyMUFEKSwgdHByaXYtXHUwMDNldmxhbl9pZCk7XG4gXHRpZiAocmV0KVxuQEAgLTEwNjIsNyArMTEzOCw3IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9kdmxhbmZpbHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHZsYW5fZGVsOlxuIFx0dmxhbl92aWRfZGVsKHByaXYtXHUwMDNlZGV2LCBodG9ucyhFVEhfUF84MDIxQUQpLCB0cHJpdi1cdTAwM2V2bGFuX2lkKTtcbiBjbGVhbnVwOlxuLVx0ZGV2X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbitcdHN0bW1hY19zZnRfcmVtb3ZlX3BhY2soXHUwMDI2dHByaXYtXHUwMDNlcHQpO1xuIFx0a2ZyZWUodHByaXYpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMTI5Myw3ICsxMzY5LDggQEAgc3RhdGljIGludCBzdG1tYWNfdGVzdF92bGFub2ZmX2NvbW1vbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIGJvb2wgc3ZsYW4pXG4gXHR0cHJpdi1cdTAwM2VwdC5hZl9wYWNrZXRfcHJpdiA9IHRwcml2O1xuIFx0dHByaXYtXHUwMDNlcGFja2V0ID0gXHUwMDI2YXR0cjtcbiBcdHRwcml2LVx1MDAzZXZsYW5faWQgPSAweDEyMztcbi1cdGRldl9hZGRfcGFjayhcdTAwMjZ0cHJpdi1cdTAwM2VwdCk7XG4rXHR0cHJpdi1cdTAwM2VjYXB0dXJlX2FsbCA9IHRydWU7XG4rXHRzdG1tYWNfc2Z0X2FkZF9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiBcbiBcdHJldCA9IHZsYW5fdmlkX2FkZChwcml2LVx1MDAzZWRldiwgaHRvbnMocHJvdG8pLCB0cHJpdi1cdTAwM2V2bGFuX2lkKTtcbiBcdGlmIChyZXQpXG5AQCAtMTMyMCw3ICsxMzk3LDcgQEAgc3RhdGljIGludCBzdG1tYWNfdGVzdF92bGFub2ZmX2NvbW1vbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIGJvb2wgc3ZsYW4pXG4gdmxhbl9kZWw6XG4gXHR2bGFuX3ZpZF9kZWwocHJpdi1cdTAwM2VkZXYsIGh0b25zKHByb3RvKSwgdHByaXYtXHUwMDNldmxhbl9pZCk7XG4gY2xlYW51cDpcbi1cdGRldl9yZW1vdmVfcGFjayhcdTAwMjZ0cHJpdi1cdTAwM2VwdCk7XG4rXHRzdG1tYWNfc2Z0X3JlbW92ZV9wYWNrKFx1MDAyNnRwcml2LVx1MDAzZXB0KTtcbiBcdGtmcmVlKHRwcml2KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTEzMzIsNyArMTQwOSw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3Rfdmxhbm9mZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXG4gc3RhdGljIGludCBzdG1tYWNfdGVzdF9zdmxhbm9mZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuLVx0aWYgKCFwcml2LVx1MDAzZWRtYV9jYXAuZHZsYW4pXG4rXHRpZiAoIShwcml2LVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX1NUQUdfVFgpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHRyZXR1cm4gc3RtbWFjX3Rlc3Rfdmxhbm9mZl9jb21tb24ocHJpdiwgdHJ1ZSk7XG4gfVxuQEAgLTE2OTksNiArMTc3Niw5IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9qdW1ibyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUxNiBxdWV1ZSlcbiBcdHN0cnVjdCBzdG1tYWNfcGFja2V0X2F0dHJzIGF0dHIgPSB7IH07XG4gXHRpbnQgc2l6ZSA9IHByaXYtXHUwMDNlZG1hX2NvbmYuZG1hX2J1Zl9zejtcbiBcbitcdGlmICghZHdtYWNfaXNfeG1hYyhwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlKSlcbitcdFx0c2l6ZSAtPSBORVRfSVBfQUxJR047XG4rXG4gXHRhdHRyLmRzdCA9IHByaXYtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyO1xuIFx0YXR0ci5tYXhfc2l6ZSA9IHNpemUgLSBFVEhfRkNTX0xFTjtcbiBcdGF0dHIucXVldWVfbWFwcGluZyA9IHF1ZXVlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTc6MjI6MTMuODE3NjAxODM1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ4MTI3ODE3NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpcyBldmVuICp3b3J0aCogZnV6emluZyAoV29ydGhGdXp6aW5nPXRydWUvZmFsc2UpLiBSaWdodCBub3csIEknbSBsZWFuaW5nIHRvd2FyZCBcInRydWUsXCIgYnV0IGxldCdzIGJlIG1ldGhvZGljYWwuIE15IGltbWVkaWF0ZSBjb25jZXJucyBhcmU6IHdoYXQgY29kZSBpcyBtb2RpZmllZD8gV2hlcmUgZG9lcyBpdCBmaXQgaW50byB0aGUgc3lzdGVtP1xuXG5Mb29raW5nIGF0IHRoZSBmaWxlIGNoYW5nZXMsIHdlIGhhdmU6XG5cbiogICBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY2BcbiogICBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jYFxuXG5SaWdodCBhd2F5LCB0aGlzIGxvb2tzIGludGVyZXN0aW5nLiBXZSdyZSBpbiB0aGUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIE11bHRpLUdpZ2FiaXQgRXRoZXJuZXQgLyBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IE1BQyBkcml2ZXIsIG9yIGBzdG1tYWNgLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgbmV0d29ya2luZyBjb2RlLCBlc3BlY2lhbGx5IGF0IHRoZSBkcml2ZXIgbGV2ZWwsIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nIGJlY2F1c2Ugb2YgYWxsIHRoZSBwb3RlbnRpYWwgZm9yIGNvbXBsZXggcGFja2V0IHByb2Nlc3NpbmcgYW5kIGV4dGVybmFsIGlucHV0LiBCdXQgbGV0J3MgdmVyaWZ5IG15IGFzc3VtcHRpb25zLlxuXG5Ob3csIG15IG5leHQgcXVlc3Rpb25zIHN0YXJ0IHBvcHBpbmcgdXA6IElzIHRoaXMgYSB2aXJ0dWFsaXplZCBkcml2ZXIsIGVtdWxhdGVkIHdpdGhpbiBRRU1VL0dDRSBvciBzdGFuZGFyZCBzeXprYWxsZXIgdGVzdGJlZHMsIG9yIGlzIHRoaXMgYSBwaHlzaWNhbCBoYXJkd2FyZSAvIFNvQyBkcml2ZXIgLyBQQ0kgZHJpdmVyPyBUaGlzIGlzIGltcG9ydGFudC4gSWYgaXQncyB2aXJ0dWFsaXplZCwgZnV6emluZyBpcyB1c3VhbGx5IHN0cmFpZ2h0Zm9yd2FyZC4gSWYgaXQncyBwaHlzaWNhbCBoYXJkd2FyZSwgaXQgYWRkcyBhIGxheWVyIG9mIGNvbXBsZXhpdHkgKGFuZCBwb3RlbnRpYWxseSBncmVhdGVyIHZhbHVlKS4gSSBuZWVkIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnYCBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBwcm9iZXMuIFRoaXMgd2lsbCBoZWxwIG1lIHRvIGRlY2lkZSB0aGUgRm9jdXNTeW1ib2xzIGFuZCBFbmFibGVDb25maWdzIG5lZWRlZCB0byBmdXp6LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzMzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTc6MjI6MjguNjMwMzg2NTcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNTQxNDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTVE1NQUNfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjI6Y29uZmlnIFNUTU1BQ19FVEhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9MTg9aWYgU1RNTUFDX0VUSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyMDpjb25maWcgU1RNTUFDX1NFTEZURVNUU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgU1RNTUFDIFNlbGZ0ZXN0c1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyOTpjb25maWcgU1RNTUFDX1BMQVRGT1JNXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zMC1cXHR0cmlzdGF0ZSBcXFwiU1RNTUFDIFBsYXRmb3JtIGJ1cyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0zNzE9ZW5kaWYgIyBTVE1NQUNfUExBVEZPUk1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTM3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjM3Mzpjb25maWcgU1RNTUFDX0xJQlBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMzc0LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM5OD1jb25maWcgRFdNQUNfTU9UT1JDT01NXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTQwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjQwNzpjb25maWcgU1RNTUFDX1BDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctNDA4LVxcdHRyaXN0YXRlIFxcXCJTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNzoyMjoyOC42OTE5MzI0ODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Mzc3NzM4OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBzdG1tYWNgIERyaXZlcidzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgc3RtbWFjYCwgdGhlIEV0aGVybmV0IE1BQyBkcml2ZXIsIHRhcmdldHMgU3lub3BzeXMgRGVzaWduV2FyZSBNQUMgSVBzLCBmcmVxdWVudGx5IGZvdW5kIG9uIEFSTSBTb0NzIGFuZCBzb21lIFBDSSBkZXZpY2VzLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYHN0bW1hY2AgaXMgZXZlbiBhY2Nlc3NpYmxlIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQsIG9yIGlmIGl0J3Mgc3RyaWN0bHkgdGllZCB0byBwaHlzaWNhbCBoYXJkd2FyZS5cblxuVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnMsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgYXBwbGllcy4gU3BlY2lmaWNhbGx5LCBpdCBtZW50aW9ucyBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIG9yIHRob3NlIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMuIFNvLCBpcyB0aGUgRGVzaWduV2FyZSBNQUMgZW11bGF0ZWQsIG9yIGlzIGl0IGhhcmR3YXJlLWRlcGVuZGVudD9cblxuTm93LCBsZXQncyBleHBsb3JlIFFFTVUncyBlbXVsYXRpb24gY2FwYWJpbGl0aWVzLiBEbyBhbnkgUUVNVSBtYWNoaW5lIHR5cGVzLCBsaWtlIGBhbGx3aW5uZXItYTEwLWVtYWNgIG9yIGBzdG0zMmY0MDVgLCBlbXVsYXRlIHRoZSBEZXNpZ25XYXJlIE1BQz8gVGhlIGZhY3QgdGhhdCBTVE0zMiBpcyBtZW50aW9uZWQgaXMgaW50ZXJlc3RpbmcsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgcmVsZXZhbnQgdG8gYW4gYW1kNjQgdGFyZ2V0LiBDYW4gSSBwcm9iZSBgc3RtbWFjYCBpbiBhIHN0YW5kYXJkIFFFTVUvYW1kNjQgZW52aXJvbm1lbnQsIG9yIGFtIEkgc3R1Y2sgd2l0aCBwaHlzaWNhbCBoYXJkd2FyZT9cblxuVG8gYW5zd2VyIHRoaXMgY29uY2x1c2l2ZWx5LCBJIG5lZWQgdG8gY2hlY2sgaG93IGBzdG1tYWNgIGludGVyYWN0cyB3aXRoIFBDSS4gV2hhdCBQQ0kgSURzIGRvZXMgYFNUTU1BQ19QQ0lgIG1hdGNoPyBUaW1lIHRvIGNoZWNrIGBzdG1tYWNfcGNpLmNgIHRvIHNlZSBpZiB0aGlzIGRyaXZlciBpcyBldmVuIHJlbGV2YW50IGZvciB0aGUgc3RhbmRhcmQgeDg2IFFFTVUgZW52aXJvbm1lbnQuIFRoaXMgd2lsbCBjb25maXJtIHdoZXRoZXIgdGhpcyBpcyBhIGZydWl0ZnVsIGFyZWEgb2YgZnV6emluZyBleHBsb3JhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ2NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNzoyMjozNS4wNjk2NzM1MDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxNjIyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUENJX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEzNjI9c3RhdGljIHZvaWQgaW50ZWxfZXRoX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzNzMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzc0OiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9RVUFSS1xcdFxcdDB4MDkzN1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM3NTojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRUhMX1JHTUlJMUdcXHRcXHQweDRiMzBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzNzY6I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VITF9TR01JSTFHXFx0XFx0MHg0YjMxXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzc3OiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FSExfU0dNSUkyRzVcXHQweDRiMzJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzNzgtLyogSW50ZWwoUikgUHJvZ3JhbW1hYmxlIFNlcnZpY2VzIEVuZ2luZSAoSW50ZWwoUikgUFNFKSBjb25zaXN0IG9mIDIgTUFDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzODAtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzgxOiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FSExfUFNFMF9SR01JSTFHXFx0MHg0YmEwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzgyOiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FSExfUFNFMF9TR01JSTFHXFx0MHg0YmExXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzgzOiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FSExfUFNFMF9TR01JSTJHNVxcdDB4NGJhMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM4NDojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRUhMX1BTRTFfUkdNSUkxR1xcdDB4NGJiMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM4NTojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRUhMX1BTRTFfU0dNSUkxR1xcdDB4NGJiMVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM4NjojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRUhMX1BTRTFfU0dNSUkyRzVcXHQweDRiYjJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzODc6I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1RHTEhfU0dNSUkxR18wXFx0MHg0M2FjXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzg4OiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9UR0xIX1NHTUlJMUdfMVxcdDB4NDNhMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM4OTojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfVEdMX1NHTUlJMUdcXHRcXHQweGEwYWNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzOTA6I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0FETFNfU0dNSUkxR18wXFx0MHg3YWFjXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzkxOiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9BRExTX1NHTUlJMUdfMVxcdDB4N2FhZFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM5MjojZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfQURMTl9TR01JSTFHXFx0MHg1NGFjXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzkzOiNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9SUExQX1NHTUlJMUdcXHQweDUxYWNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzOTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMzk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpbnRlbF9ldGhfcGNpX2lkX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzk2OlxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBRVUFSSywgXFx1MDAyNnF1YXJrX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzk3OlxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfUkdNSUkxRywgXFx1MDAyNmVobF9yZ21paTFnX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzk4OlxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfU0dNSUkxRywgXFx1MDAyNmVobF9zZ21paTFnX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzk5OlxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfU0dNSUkyRzUsIFxcdTAwMjZlaGxfc2dtaWkxZ19pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTQwMDpcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1BTRTBfUkdNSUkxRywgXFx1MDAyNmVobF9wc2UwX3JnbWlpMWdfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjE0MDE6XFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9QU0UwX1NHTUlJMUcsIFxcdTAwMjZlaGxfcHNlMF9zZ21paTFnX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDAyOlxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfUFNFMF9TR01JSTJHNSwgXFx1MDAyNmVobF9wc2UwX3NnbWlpMWdfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjE0MDM6XFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9QU0UxX1JHTUlJMUcsIFxcdTAwMjZlaGxfcHNlMV9yZ21paTFnX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDA0OlxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfUFNFMV9TR01JSTFHLCBcXHUwMDI2ZWhsX3BzZTFfc2dtaWkxZ19pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTQwNTpcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1BTRTFfU0dNSUkyRzUsIFxcdTAwMjZlaGxfcHNlMV9zZ21paTFnX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDA2OlxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBUR0xfU0dNSUkxRywgXFx1MDAyNnRnbF9zZ21paTFnX3BoeTBfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjE0MDc6XFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIFRHTEhfU0dNSUkxR18wLCBcXHUwMDI2dGdsX3NnbWlpMWdfcGh5MF9pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTQwODpcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgVEdMSF9TR01JSTFHXzEsIFxcdTAwMjZ0Z2xfc2dtaWkxZ19waHkxX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDA5OlxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBBRExTX1NHTUlJMUdfMCwgXFx1MDAyNmFkbHNfc2dtaWkxZ19waHkwX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDEwOlxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBBRExTX1NHTUlJMUdfMSwgXFx1MDAyNmFkbHNfc2dtaWkxZ19waHkxX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDExOlxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBBRExOX1NHTUlJMUcsIFxcdTAwMjZhZGxuX3NnbWlpMWdfcGh5MF9pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTQxMjpcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgUlBMUF9TR01JSTFHLCBcXHUwMDI2YWRsbl9zZ21paTFnX3BoeTBfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTE0MTMtXFx0e31cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo3MDojZGVmaW5lIFBDSV9ERVZJQ0VfSURfTE9PTkdTT05fR01BQzFcXHQweDdhMDNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjcxOiNkZWZpbmUgUENJX0RFVklDRV9JRF9MT09OR1NPTl9HTUFDMlxcdDB4N2EyM1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NzI6I2RlZmluZSBQQ0lfREVWSUNFX0lEX0xPT05HU09OX0dORVRcXHQweDdhMTNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTczLSNkZWZpbmUgRFdNQUNfQ09SRV9NVUxUSUNIQU5fVjFcXHQweDEwXFx0LyogTG9vbmdzb24gY3VzdG9tIElEIDB4MTAgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM9MzA2PXN0YXRpYyBpbnQgbG9vbmdzb25fZHdtYWNfc2V0dXAodm9pZCAqYXByaXYsIHN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKm1hYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtMzUxLVxcdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6MzUyOlxcdGlmIChwZGV2LVxcdTAwM2VkZXZpY2UgIT0gUENJX0RFVklDRV9JRF9MT09OR1NPTl9HTkVUKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0zNTMtXFx0XFx0bWFjLVxcdTAwM2VsaW5rLmNhcHMgPSBNQUNfMTAgfCBNQUNfMTAwIHwgTUFDXzEwMDA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTU5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbG9vbmdzb25fZHdtYWNfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjU5NzpcXHR7IFBDSV9ERVZJQ0VfREFUQShMT09OR1NPTiwgR01BQzEsIFxcdTAwMjZsb29uZ3Nvbl9nbWFjX3BjaV9pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTk4OlxcdHsgUENJX0RFVklDRV9EQVRBKExPT05HU09OLCBHTUFDMiwgXFx1MDAyNmxvb25nc29uX2dtYWNfcGNpX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1OTk6XFx0eyBQQ0lfREVWSUNFX0RBVEEoTE9PTkdTT04sIEdORVQsIFxcdTAwMjZsb29uZ3Nvbl9nbmV0X3BjaV9pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNjAwLVxcdHt9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYz0zNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGR3bWFjX21vdG9yY29tbV9wY2lfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYzozNjg6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTU9UT1JDT01NLCAweDY4MDEpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMzY5LVxcdHsgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xOTI9c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTk5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDA6I2RlZmluZSBQQ0lfREVWSUNFX0lEX1NUTU1BQ19TVE1NQUNcXHRcXHQweDExMDhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjAxOiNkZWZpbmUgUENJX0RFVklDRV9JRF9TWU5PUFNZU19HTUFDNV9JRFxcdFxcdDB4NzEwMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTIwMz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3RtbWFjX2lkX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNDpcXHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXFx1MDAyNnN0bW1hY19wY2lfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjA1OlxcdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXFx1MDAyNnN0bW1hY19wY2lfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjA2OlxcdHsgUENJX0RFVklDRV9EQVRBKFNZTk9QU1lTLCBHTUFDNV9JRCwgXFx1MDAyNnNucHNfZ21hYzVfcGNpX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIwNy1cXHR7fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNzoyMjozNS4xMTg4NDAzMjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDgyMDcyODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IE5vdCBXb3J0aCBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaXMgc3VpdGFibGUgZm9yIGZ1enppbmcuIEZpcnN0LCBJIHNlZSB3ZSdyZSBkZWFsaW5nIHdpdGggYHN0bW1hY2AgZHJpdmVycy4gUmlnaHQgYXdheSwgbXkga25vd2xlZGdlIGtpY2tzIGluOiB0aGVzZSBhcmUgaGFyZHdhcmUgZHJpdmVycywgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBwaHlzaWNhbCBFdGhlcm5ldCBNQUMgY29udHJvbGxlcnMg4oCTIGNoaXBzIGZyb20gU3lub3BzeXMgRGVzaWduV2FyZSwgaW50ZWdyYXRlZCBpbnRvIFNvQ3Mgb3IgY29ubmVjdGVkIHZpYSBQQ0kuIEludGVsIEVITC9UR0wvQURMLCBTeW5vcHN5cyBHTUFDLCBMb29uZ3NvbiwgTW90b3Jjb21tLCBhbmQgdmFyaW91cyBBUk0vTUlQUyBTb0NzIGFyZSBtZW50aW9uZWQsIGFuZCBJICprbm93KiB0aG9zZSBhcmVuJ3QgdGhpbmdzIHR5cGljYWxseSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBlbnZpcm9ubWVudHMsIHdoaWNoIGFyZSB3aGF0IHN5emthbGxlciB1c3VhbGx5IGxldmVyYWdlcy5cblxuTGV0J3MgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgKmFueSogdmlydHVhbCBvciBlbXVsYXRlZCBlcXVpdmFsZW50IOKAkyBzb21ldGhpbmcgbGlrZSBgbmV0a2l0YCwgYGR1bW15YCwgYHZldGhgLCBgdGFwYCwgYHR1bmAsIGBtYWN2dGFwYCwgYGxvb3BiYWNrYCwgb3IgYHZpcnRpby1uZXRgIGZvciBgc3RtbWFjYC4gTm9wZS4gSXQncyBzdHJpY3RseSBmb3IgcGh5c2ljYWwgaGFyZHdhcmUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB3aGF0J3MgYmVlbiBtb2RpZmllZC4gVGhlIHBhdGNoIGlzIHZlcnkgZm9jdXNlZCDigJMganVzdCBgc3RtbWFjX21haW4uY2AgYW5kIGBzdG1tYWNfc2VsZnRlc3RzLmNgLiBUaGF0IG5hcnJvd3MgdGhlIHNjb3BlIHNpZ25pZmljYW50bHkuXG5cbk5vdywgSSdsbCBhcHBseSB0aGUgc3BlY2lmaWMgY3JpdGVyaWEgZGVmaW5lZCBpbiBTZWN0aW9uIDIuIFRoZSBjb3JlIG9mIGl0IGJvaWxzIGRvd24gdG8gY2hlY2tpbmcgaWYgdGhlIG1vZGlmaWVkIGNvZGUgZmFsbHMgaW50byB0aGUgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBjYXRlZ29yeS4gTGV0J3Mgc2VlLi4uIGEgdmVuZG9yLXNwZWNpZmljIEV0aGVybmV0IE1BQyBkcml2ZXIgKHN0bWljcm8gLyBzdG1tYWMpIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSwgb3IgYW4gQVNJQy9QQ0llL1NvQywgd2hpY2ggaXNuJ3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVT8gQmluZ28hIFRoYXQncyBhIHBlcmZlY3QgZml0LlxuXG5UaGVyZWZvcmU6XG5cbiogICBgV29ydGhGdXp6aW5nYDogZmFsc2Ug4oCTIEJlY2F1c2UgdGhpcyBjb2RlIGlzIGluaGVyZW50bHkgdGllZCB0byBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBcXFsgXSDigJMgTm8gcmVsZXZhbnQgc3ltYm9scyB0byBmb2N1cyBvbiBzaW5jZSB0aGUgZHJpdmVyIGlzIHVucmVhY2hhYmxlLlxuKiAgIGBFbmFibGVDb25maWdzYDogXFxbIF0g4oCTIE5vdCBhcHBsaWNhYmxlLCB0aGUgZHJpdmVyIGlzIG5vdCBhcHBsaWNhYmxlLlxuKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNUTWljcm9lbGVjdHJvbmljcyAvIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIGRyaXZlciAoc3RtbWFjKSwgc3BlY2lmaWNhbGx5IGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9uIGZvciBNVFUgY29uZmlndXJhdGlvbiBhbmQgZXRodG9vbCBzZWxmdGVzdHMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChTb0MgTUFDIG9yIHNwZWNpZmljIFBDSSBkZXZpY2VzKSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgUUVNVS9zeXprYWxsZXIgZnV6emluZyBlbnZpcm9ubWVudHMgb24gYW1kNjQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ2xsIGRvdWJsZS1jaGVjayBldmVyeXRoaW5nIG9uZSBsYXN0IHRpbWUuIEFsbCB0aGUgY3JpdGVyaWEgYXJlIG1ldCBmb3IgbWFraW5nIHRoaXMgYSBcIm5vLWdvXCIgZm9yIGZ1enppbmcgaW4gdGhlIHN0YW5kYXJkIHNldHVwLlxuXG5Pa2F5LCBJJ20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzE4LCJPdXRwdXRUb2tlbnMiOjExOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNzoyMjo0MS42MDA5MTYyNDNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTVE1pY3JvZWxlY3Ryb25pY3MgLyBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IE1BQyBkcml2ZXIgKHN0bW1hYyksIHNwZWNpZmljYWxseSBidWZmZXIgc2l6ZSBjYWxjdWxhdGlvbiBhbmQgc2VsZnRlc3QgaGVscGVycy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKEFSTS9NSVBTL2V0Yy4gU29DcyBvciBzcGVjaWZpYyBJbnRlbC9Mb29uZ3Nvbi9TeW5vcHN5cyBQQ0kgTklDIGRldmljZXMpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgb24gYW1kNjQsIHJlbmRlcmluZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIC8gU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBNQUMgZHJpdmVyIChzdG1tYWMpLCBzcGVjaWZpY2FsbHkgYnVmZmVyIHNpemUgY2FsY3VsYXRpb24gYW5kIHNlbGZ0ZXN0IGhlbHBlcnMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChBUk0vTUlQUy9ldGMuIFNvQ3Mgb3Igc3BlY2lmaWMgSW50ZWwvTG9vbmdzb24vU3lub3BzeXMgUENJIE5JQyBkZXZpY2VzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIG9uIGFtZDY0LCByZW5kZXJpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTc6MjI6NDEuNjAwOTQ0NTAzWiIsIlNlcSI6OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zvtg[1] Phase: Running StartedAt: 2026-09-10 17:22:52 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zvtg[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-10 17:22:52 +0000 UTC FinishedAt: 2026-09-10 17:22:56 +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,}