ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDY2NjliZjAuLjZiMWZkMWIgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMjMsNiArMjMsNyBAQAogL2dpdC1jYXQtZmlsZQogL2dpdC1jaGVjay1hdHRyCiAvZ2l0LWNoZWNrLWlnbm9yZQorL2dpdC1jaGVjay1tYWlsbWFwCiAvZ2l0LWNoZWNrLXJlZi1mb3JtYXQKIC9naXQtY2hlY2tvdXQKIC9naXQtY2hlY2tvdXQtaW5kZXgKQEAgLTEyNSw2ICsxMjYsNyBAQAogL2dpdC1yZW1vdGUtZnRwcwogL2dpdC1yZW1vdGUtZmQKIC9naXQtcmVtb3RlLWV4dAorL2dpdC1yZW1vdGUtdGVzdGdpdAogL2dpdC1yZW1vdGUtdGVzdHB5CiAvZ2l0LXJlbW90ZS10ZXN0c3ZuCiAvZ2l0LXJlcGFjawpAQCAtMTkwLDYgKzE5Miw4IEBACiAvdGVzdC1ta3RlbXAKIC90ZXN0LXBhcnNlLW9wdGlvbnMKIC90ZXN0LXBhdGgtdXRpbHMKKy90ZXN0LXByaW8tcXVldWUKKy90ZXN0LXJlYWQtY2FjaGUKIC90ZXN0LXJlZ2V4CiAvdGVzdC1yZXZpc2lvbi13YWxraW5nCiAvdGVzdC1ydW4tY29tbWFuZApAQCAtMjI4LDYgKzIzMiw3IEBACiAvY3Njb3BlKgogKi5vYmoKICoubGliCisqLnJlcwogKi5zbG4KICouc3VvCiAqLm5jYgpkaWZmIC0tZ2l0IGEvLm1haWxtYXAgYi8ubWFpbG1hcAppbmRleCA0OGQ3YWNmLi41NzA3MGI1IDEwMDY0NAotLS0gYS8ubWFpbG1hcAorKysgYi8ubWFpbG1hcApAQCAtNSw5OCArNSwyMTYgQEAKICMgc2FtZSBwZXJzb24gYXBwZWFyaW5nIG5vdCB0byBiZSBzby4KICMKIAorPG5pY29AZmx1eG5pYy5uZXQ+IDxuaWNvQGNhbS5vcmc+CitBbGVqYW5kcm8gUi4gU2VkZcOxbyA8YXNlZGVub0BNSVQuRURVPiA8YXNlZGVub0BtaXQuZWR1PgogQWxleCBCZW5uw6llIDxrZXJuZWwtaGFja2VyQGJlbm5lZS5jb20+CitBbGV4IFJpZXNlbiA8cmFhLmxrbWxAZ21haWwuY29tPiA8Zm9yazBAdC1vbmxpbmUuZGU+CitBbGV4IFJpZXNlbiA8cmFhLmxrbWxAZ21haWwuY29tPiA8cmFhQGxpbWJvLmxvY2FsZG9tYWluPgorQWxleCBSaWVzZW4gPHJhYS5sa21sQGdtYWlsLmNvbT4gPHJhYUBzdGVlbC5ob21lPgorQWxleCBWYW5kaXZlciA8YWxleEBjaG1yci5uZXQ+IDxhbGV4bXZATUlULkVEVT4KIEFsZXhhbmRlciBHYXZyaWxvdiA8YW5nYXZyaWxvdkBnbWFpbC5jb20+CitBbGV4ZXkgU2h1bWtpbiA8YWxleC5jcmV6b2ZmQGdtYWlsLmNvbT4gPHphcHBlZEBtYWlsLnJ1PgorQW5kZXJzIEthc2VvcmcgPGFuZGVyc2tATUlULkVEVT4gPGFuZGVyc2tAa3NwbGljZS5jb20+CitBbmRlcnMgS2FzZW9yZyA8YW5kZXJza0BNSVQuRURVPiA8YW5kZXJza0BtaXQuZWR1PgogQW5lZXNoIEt1bWFyIEsuViA8YW5lZXNoLmt1bWFyQGdtYWlsLmNvbT4KK0JlbiBXYWx0b24gPGJkd2FsdG9uQGdtYWlsLmNvbT4gPGJ3YWx0b25AYXJ0c2NpLnV0b3JvbnRvLmNhPgorQmVybnQgSGFuc2VuIDxiZXJudEBub3JhbmcuY2E+IDxiZXJudEBhbHVtbmkudXdhdGVybG9vLmNhPgorQnJhbmRvbiBDYXNleSA8ZHJhZm5lbEBnbWFpbC5jb20+IDxjYXNleUBucmxzc2MubmF2eS5taWw+CiBCcmlhbiBNLiBDYXJsc29uIDxzYW5kYWxzQGNydXN0eXRvb3RocGFzdGUuYXRoLmN4PgorQnJ5YW4gTGFyc2VuIDxicnlhbkBsYXJzZW4uc3Q+IDxicnlhbi5sYXJzZW5AZ21haWwuY29tPgorQnJ5YW4gTGFyc2VuIDxicnlhbkBsYXJzZW4uc3Q+IDxicnlhbmxhcnNlbkB5YWhvby5jb20+CiBDaGVuZyBSZW5xdWFuIDxjcnF1YW5AZ21haWwuY29tPgogQ2hyaXMgU2hvZW1ha2VyIDxjLnNob2VtYWtlckBjb3gubmV0PgorQ2hyaXMgV3JpZ2h0IDxjaHJpc3dAc291cy1zb2wub3JnPiA8Y2hyaXN3QG9zZGwub3JnPgorQ3NhYmEgSGVuayA8Y3NhYmFAZ2x1c3Rlci5jb20+IDxjc2FiYUBsb3dsaWZlLmh1PgogRGFuIEpvaG5zb24gPGNvbXB1dGVyZHJ1aWRAZ21haWwuY29tPgotRGFuYSBMLiBIb3cgPGRhbmFob3dAZ21haWwuY29tPgotRGFuYSBMLiBIb3cgPGhvd0BkZWF0aHZhbGxleS5jc3dpdGNoLmNvbT4KK0RhbmEgTC4gSG93IDxkYW5haG93QGdtYWlsLmNvbT4gPGhvd0BkZWF0aHZhbGxleS5jc3dpdGNoLmNvbT4KIERhbmllbCBCYXJrYWxvdyA8YmFya2Fsb3dAaWFiZXJ2b24ub3JnPgorRGF2aWQgQnJvd24gPGdpdEBkYXZpZGIub3JnPiA8ZGF2aWRiQHF1aWNpbmMuY29tPgogRGF2aWQgRC4gS2lsemVyIDxkZGtpbHplckBraWx6ZXIubmV0PgogRGF2aWQgS8OlZ2VkYWwgPGRhdmlka0BseXNhdG9yLmxpdS5zZT4KK0RhdmlkIFJlaXNzIDxkcmVpc3NAZmFjZWJvb2suY29tPiA8ZHJlaXNzQGRyZWlzcy12bXdhcmUuKG5vbmUpPgogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgogRGVza2luIE1pbGxlciA8ZGVza2lubUB1bWljaC5lZHU+CiBEaXJrIFPDvHNzZXJvdHQgPG5ld3NsZXR0ZXJAZGlyay5teTEuY2M+CitFcmljIEJsYWtlIDxlYmxha2VAcmVkaGF0LmNvbT4gPGViYjlAYnl1Lm5ldD4KK0VyaWMgSGFuY2hyb3cgPGVyaWMuaGFuY2hyb3dAZ21haWwuY29tPiA8b2ZmYnkxQGJsYXJnLm5ldD4KIEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHRoeXJzdXMuY29tPgogRXJpayBGYXllLUx1bmQgPGt1c21hYml0ZUBnbWFpbC5jb20+IDxrdXNtYWJpdGVAZ29vZ2xlbWFpbC5jb20+Ci1GcmVkcmlrIEt1aXZpbmVuIDxmcmVrdTA0NUBzdHVkZW50LmxpdS5zZT4KK0V5dmluZCBCZXJuaGFyZHNlbiA8ZXl2aW5kLmJlcm5oYXJkc2VuQGdtYWlsLmNvbT4gPGV5dmluZC1naXRAb3Jha2VsLm50bnUubm8+CitGbG9yaWFuIEFjaGxlaXRuZXIgPGZsb3JpYW4uYWNobGVpdG5lci4yLjYuMzFAZ21haWwuY29tPiA8Zmxvcmlhbi5hY2hsZWl0bmVyMi42LjMxQGdtYWlsLmNvbT4KK0ZyYW5jayBCdWktSHV1IDx2YWdhYm9uLnh5ekBnbWFpbC5jb20+IDxmYnVpaHV1QGdtYWlsLmNvbT4KK0ZyYW5rIExpY2h0ZW5oZWxkIDxmcmFua0BsaWNodGVuaGVsZC5kZT4gPGRqcGlnQGRlYmlhbi5vcmc+CitGcmFuayBMaWNodGVuaGVsZCA8ZnJhbmtAbGljaHRlbmhlbGQuZGU+IDxmbGljaHRlbmhlbGRAYXN0YXJvLmNvbT4KK0ZyZWRyaWsgS3VpdmluZW4gPGZyZWt1aUBnbWFpbC5jb20+IDxmcmVrdTA0NUBzdHVkZW50LmxpdS5zZT4KIEZyw6lkw6lyaWMgSGVpdHptYW5uIDxmcmVkZXJpYy5oZWl0em1hbm5AZ21haWwuY29tPgotSC4gUGV0ZXIgQW52aW4gPGhwYUBib25kZS5zYy5vcmlvbm11bHRpLmNvbT4KLUguIFBldGVyIEFudmluIDxocGFAdGF6ZW5kYS5zYy5vcmlvbm11bHRpLmNvbT4KLUguIFBldGVyIEFudmluIDxocGFAdHJhbnRvci5ob3MuYW52aW4ub3JnPgorR2FycnkgRG9sbGV5IDxnZG9sbGV5QHVjbGEuZWR1PiA8Z2RvbGxleUBhcnBuZXR3b3Jrcy5jb20+CitHcmVnIFByaWNlIDxwcmljZUBtaXQuZWR1PiA8cHJpY2VATUlULkVEVT4KK0dyZWcgUHJpY2UgPHByaWNlQG1pdC5lZHU+IDxwcmljZUBrc3BsaWNlLmNvbT4KK0hlaWtvIFZvaWd0IDxodm9pZ3RAaHZvaWd0Lm5ldD4gPGdpdC1saXN0QGh2b2lndC5uZXQ+CitILiBNZXJpam4gQnJhbmQgPGgubS5icmFuZEB4czRhbGwubmw+IEguTWVyaWpuIEJyYW5kIDxoLm0uYnJhbmRAeHM0YWxsLm5sPgorSC4gUGV0ZXIgQW52aW4gPGhwYUB6eXRvci5jb20+IDxocGFAYm9uZGUuc2Mub3Jpb25tdWx0aS5jb20+CitILiBQZXRlciBBbnZpbiA8aHBhQHp5dG9yLmNvbT4gPGhwYUBzbXlybm8uaG9zLmFudmluLm9yZz4KK0guIFBldGVyIEFudmluIDxocGFAenl0b3IuY29tPiA8aHBhQHRhemVuZGEuc2Mub3Jpb25tdWx0aS5jb20+CitILiBQZXRlciBBbnZpbiA8aHBhQHp5dG9yLmNvbT4gPGhwYUB0cmFudG9yLmhvcy5hbnZpbi5vcmc+CitIYW4tV2VuIE5pZW5odXlzIDxoYW53ZW5AZ29vZ2xlLmNvbT4gSGFuLVdlbiBOaWVuaHV5cyA8aGFud2VuQHhzNGFsbC5ubD4KIEhvcnN0IEguIHZvbiBCcmFuZCA8dm9uYnJhbmRAaW5mLnV0ZnNtLmNsPgotxLBzbWFpbCBEw7ZubWV6IDxpc21haWxAcGFyZHVzLm9yZy50cj4KK0ouIEJydWNlIEZpZWxkcyA8YmZpZWxkc0BjaXRpLnVtaWNoLmVkdT4gPGJmaWVsZHNAZmllbGRzZXMub3JnPgorSi4gQnJ1Y2UgRmllbGRzIDxiZmllbGRzQGNpdGkudW1pY2guZWR1PiA8YmZpZWxkc0BwaWcubGludXhkZXYudXMuZGVsbC5jb20+CitKLiBCcnVjZSBGaWVsZHMgPGJmaWVsZHNAY2l0aS51bWljaC5lZHU+IDxiZmllbGRzQHB1enpsZS5maWVsZHNlcy5vcmc+CiBKYWt1YiBOYXLEmWJza2kgPGpuYXJlYkBnbWFpbC5jb20+Ci1KYXkgU29mZmlhbiA8amF5c29mZmlhbitnaXRAZ21haWwuY29tPgorSmFzb24gUmllZHkgPGVqckBlZWNzLmJlcmtlbGV5LmVkdT4gPGVqckBFRUNTLkJlcmtlbGV5LkVEVT4KK0phc29uIFJpZWR5IDxlanJAZWVjcy5iZXJrZWxleS5lZHU+IDxlanJAY3MuYmVya2VsZXkuZWR1PgorSmF5IFNvZmZpYW4gPGpheXNvZmZpYW5AZ21haWwuY29tPiA8amF5c29mZmlhbitnaXRAZ21haWwuY29tPgogSmVmZiBLaW5nIDxwZWZmQHBlZmYubmV0PiA8cGVmZkBnaXRodWIuY29tPgorSmVmZiBNdWl6ZWxhYXIgPGptdWl6ZWxhYXJAbW96aWxsYS5jb20+IDxqZWZmQGluZmlkaWdtLm5ldD4KK0ppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4gPG1leWVyaW5nQHJlZGhhdC5jb20+CiBKb2FjaGltIEJlcmRhbCBIYWdhIDxjamhhZ2FAZnlzLnVpby5ubz4KLUpvaGFubmVzIFNpeHQgPGo2dEBrZGJnLm9yZz4gPGpvaGFubmVzLnNpeHRAdGVsZWNvbS5hdD4KLUpvaGFubmVzIFNpeHQgPGo2dEBrZGJnLm9yZz4gPGouc2l4dEB2aXNjb3ZlcnkubmV0PgorSm9oYW5uZXMgU2NoaW5kZWxpbiA8Sm9oYW5uZXMuU2NoaW5kZWxpbkBnbXguZGU+IDxqb2hhbm5lcy5zY2hpbmRlbGluQGdteC5kZT4KIEpvaGFubmVzIFNpeHQgPGo2dEBrZGJnLm9yZz4gPEouU2l4dEBldWRhcHRpY3MuY29tPgotSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KLUpvbiBTZXltb3VyIDxqb25AYmxhY2tjdWJlcy5keW5kbnMub3JnPgotSm9uYXRoYW4gTmllZGVyIDxqcm5pZWRlckB1Y2hpY2Fnby5lZHU+CitKb2hhbm5lcyBTaXh0IDxqNnRAa2RiZy5vcmc+IDxqLnNpeHRAdmlzY292ZXJ5Lm5ldD4KK0pvaGFubmVzIFNpeHQgPGo2dEBrZGJnLm9yZz4gPGpvaGFubmVzLnNpeHRAdGVsZWNvbS5hdD4KK0pvbiBMb2VsaWdlciA8amRsQGpkbC5jb20+IDxqZGxAZnJlZXNjYWxlLmNvbT4KK0pvbiBMb2VsaWdlciA8amRsQGpkbC5jb20+IDxqZGxAZnJlZXNjYWxlLm9yZz4KK0pvbiBTZXltb3VyIDxqb24uc2V5bW91ckBnbWFpbC5jb20+IDxqb25AYmxhY2tjdWJlcy5keW5kbnMub3JnPgorSm9uYXRoYW4gTmllZGVyIDxqcm5pZWRlckBnbWFpbC5jb20+IDxqcm5pZWRlckB1Y2hpY2Fnby5lZHU+CitKb25hdGhhbiBkZWwgU3Ryb3RoZXIgPGpvbi5kZWxTdHJvdGhlckBiZXN0YmVmb3JlLnR2PiA8bWFpbGxpc3RAc3RlZWxza2llcy5jb20+CitKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+IDxqb3NoQGZyZWVkZXNrdG9wLm9yZz4KK0pvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4gPGpvc2h0QHVzLmlibS5jb20+CitKdWxpYW4gUGhpbGxpcHMgPGp1bGlhbkBxdWFudHVtZnlyZS5jby51az4gPGpwM0BxdWFudHVtZnlyZS5jby51az4KIEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4gPGdpdHN0ZXJAcG9ib3guY29tPgotSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiA8anVuaW9AcG9ib3guY29tPgotSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiA8anVuaW9AdHdpbnN1bi5jb20+Ci1KdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+IDxqdW5raW9AdHdpbnN1bi5jb20+CiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+IDxqdW5pb0BoZXJhLmtlcm5lbC5vcmc+CiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+IDxqdW5pb0BrZXJuZWwub3JnPgorSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiA8anVuaW9AcG9ib3guY29tPgorSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiA8anVuaW9AdHdpbnN1bi5jb20+CiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+IDxqdW5raW9AY294Lm5ldD4KLUthcmwgSGFzc2Vsc3Ryw7ZtIDxraGFAdHJlc2thbC5jb20+Ci1LZXZpbiBMZXVuZyA8a2V2aW5sc2tAZ21haWwuY29tPgorSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiA8anVua2lvQHR3aW5zdW4uY29tPgorS2FybCBXaWJlcmcgPGtoYUB0cmVza2FsLmNvbT4gS2FybCBIYXNzZWxzdHLDtm0gPGtoYUB0cmVza2FsLmNvbT4KK0thcmwgV2liZXJnIDxraGFAdHJlc2thbC5jb20+IEthcmwgSGFzc2Vsc3Ryw7ZtIDxraGFAeW9naHVydC5oZW1tYS50cmVza2FsLmNvbT4KK0thcnN0ZW4gQmxlZXMgPGJsZWVzQGRjb24uZGU+IDxrYXJzdGVuLmJsZWVzQGRjb24uZGU+CitLYXJzdGVuIEJsZWVzIDxibGVlc0BkY29uLmRlPiA8a2Fyc3Rlbi5ibGVlc0BnbWFpbC5jb20+CitLYXkgU2lldmVycyA8a2F5LnNpZXZlcnNAdnJmeS5vcmc+IDxrYXkuc2lldmVyc0BzdXNlLmRlPgorS2F5IFNpZXZlcnMgPGtheS5zaWV2ZXJzQHZyZnkub3JnPiA8a2F5QG1hbS4obm9uZSk+CitLZWl0aCBDYXNjaW8gPGtlaXRoQENTLlVDTEEuRURVPiA8a2VpdGhAY3MudWNsYS5lZHU+CiBLZW50IEVuZ3N0cm9tIDxrZW50QGx5c2F0b3IubGl1LnNlPgorS2V2aW4gTGV1bmcgPGtldmlubHNrQGdtYWlsLmNvbT4KK0tpcmlsbCBTbWVsa292IDxraXJyQG5hdnl0dXguc3BiLnJ1PiA8a2lyckBsYW5kYXUucGh5cy5zcGJ1LnJ1PgorS2lyaWxsIFNtZWxrb3YgPGtpcnJAbmF2eXR1eC5zcGIucnU+IDxraXJyQG1ucy5zcGIucnU+CitLbnV0IEZyYW5rZSA8S251dC5GcmFua2VAZ214LmRlPiA8ay5mcmFua2VAc2NpZW5jZS1jb21wdXRpbmcuZGU+CiBMYXJzIERvZWxsZSA8bGFycy5kb2VsbGVAb24tbGluZSAhIGRlPgogTGFycyBEb2VsbGUgPGxhcnMuZG9lbGxlQG9uLWxpbmUuZGU+CitMYXJzIE5vc2NoaW5za2kgPGxhcnNAcHVibGljLm5vc2NoaW5za2kuZGU+IDxsYXJzLm5vc2NoaW5za2lAcnd0aC1hYWNoZW4uZGU+CiBMaSBIb25nIDxsZWVob25nQHBrdS5lZHUuY24+Ci1MaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+IDx0b3J2YWxkc0B3b29keS5saW51eC1mb3VuZGF0aW9uLm9yZz4KLUxpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4gPHRvcnZhbGRzQG9zZGwub3JnPgotTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPiA8dG9ydmFsZHNAZzUub3NkbC5vcmc+CiBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+IDx0b3J2YWxkc0Bldm8ub3NkbC5vcmc+Ci1MaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+IDx0b3J2YWxkc0BwcGM5NzAub3NkbC5vcmc+CitMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+IDx0b3J2YWxkc0BnNS5vc2RsLm9yZz4KK0xpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4gPHRvcnZhbGRzQG9zZGwub3JnPgogTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPiA8dG9ydmFsZHNAcHBjOTcwLm9zZGwub3JnLihub25lKT4KLUx1a2FzIFNhbmRzdHLDtm0gPGx1a2Fzc0BldGVrLmNoYWxtZXJzLnNlPgorTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPiA8dG9ydmFsZHNAcHBjOTcwLm9zZGwub3JnPgorTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPiA8dG9ydmFsZHNAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CitMdWthcyBTYW5kc3Ryw7ZtIDxsdWtzYW5AZ21haWwuY29tPiA8bHVrYXNzQGV0ZWsuY2hhbG1lcnMuc2U+CitNYXJjIEtob3V6YW0gPG1hcmMua2hvdXphbUBlcmljc3Nvbi5jb20+IDxtYXJjLmtob3V6YW1AZ21haWwuY29tPgogTWFyYy1BbmRyw6kgTHVyZWF1IDxtYXJjYW5kcmUubHVyZWF1QGdtYWlsLmNvbT4KK01hcmNvIENvc3RhbGJhIDxtY29zdGFsYmFAZ21haWwuY29tPiA8bWNvc3RhbGJhQHlhaG9vLml0PgorTWFyayBMZXZlZGFobCA8bWRsMTIzQHZlcml6b24ubmV0PiA8bWxldmVkYWhsQGdtYWlsLmNvbT4KIE1hcmsgUmFkYSA8bWFyYWRhQHV3YXRlcmxvby5jYT4KIE1hcnRpbiBMYW5naG9mZiA8bWFydGluQGxhcHRvcC5vcmc+IDxtYXJ0aW5AY2F0YWx5c3QubmV0Lm56PgogTWFydGluIHZvbiBad2VpZ2JlcmdrIDxtYXJ0aW52b256QGdtYWlsLmNvbT4gPG1hcnRpbi52b24uendlaWdiZXJna0BnbWFpbC5jb20+CitNYXR0IERyYWlzZXkgPG1hdHRAZHJhaXNleS5jYT4gPG1hdHRkcmFpc2V5QHN5bXBhdGljby5jYT4KK01hdHQgS3JhYWkgPGtyYWFpQGZ0YmZzLm9yZz4gPG1hdHQua3JhYWlAYW1vLmFiYm90dC5jb20+CitNYXR0IE1jQ3V0Y2hlbiA8bWF0dEBtYXR0bWNjdXRjaGVuLm5ldD4gPGhhc2hwcm9kdWN0QGdtYWlsLmNvbT4KK01hdHRoaWFzIEtlc3RlbmhvbHogPG1hdHRoaWFzQHNwaW5sb2NrLmNoPiA8bWtAc3BpbmxvY2suY2g+CitNYXR0aGlhcyBVcmxpY2hzIDxtYXR0aGlhc0B1cmxpY2hzLmRlPiA8c211cmZAa2lzdGUuKG5vbmUpPgorTWF0dGhpYXMgVXJsaWNocyA8bWF0dGhpYXNAdXJsaWNocy5kZT4gPHNtdXJmQHNtdXJmLm5vcmlzLmRlPgogTWljaGFlbCBDb2xlbWFuIDx0dXR1ZmFuQGdtYWlsLmNvbT4KIE1pY2hhZWwgSiBHcnViZXIgPGdpdEBkcm1pY2hhLndhcnBtYWlsLm5ldD4gPG1pY2hhZWxqZ3J1YmVyK2dtYW5lQGZhc3RtYWlsLmZtPgogTWljaGFlbCBXLiBPbHNvbiA8bXdvbHNvbkBnbnUub3JnPgorTWljaGFlbCBXaXR0ZW4gPG1md2l0dGVuQGdtYWlsLmNvbT4gPG1md2l0dGVuQE1JVC5FRFU+CitNaWNoYWVsIFdpdHRlbiA8bWZ3aXR0ZW5AZ21haWwuY29tPiA8bWZ3aXR0ZW5AbWl0LmVkdT4KK01pY2hhbCBSb2tvcyA8bWljaGFsLnJva29zQG5leHRzb2Z0LmN6PiA8cm9rb3NAbmV4dHNvZnQuY3o+CiBNaWNoZWxlIEJhbGxhYmlvIDxiYXJyYV9jdWRhQGthdGFtYWlsLmNvbT4KK01pa2xvcyBWYWpuYSA8dm1pa2xvc0BmcnVnYWx3YXJlLm9yZz4gPHZtaWtsb3NAc3VzZS5jej4KK05hbWh5dW5nIEtpbSA8bmFtaHl1bmdAZ21haWwuY29tPiA8bmFtaHl1bmcua2ltQGxnZS5jb20+CitOYW1oeXVuZyBLaW0gPG5hbWh5dW5nQGdtYWlsLmNvbT4gPG5hbWh5dW5nQGtlcm5lbC5vcmc+CiBOYW5ha28gU2hpcmFpc2hpIDxuYW5ha28zQGJsdWVib3R0bGUuY29tPgogTmFuYWtvIFNoaXJhaXNoaSA8bmFuYWtvM0BsYXZhYml0LmNvbT4KK05lbHNvbiBFbGhhZ2UgPG5lbGhhZ2VAbWl0LmVkdT4gPG5lbGhhZ2VATUlULkVEVT4KK05lbHNvbiBFbGhhZ2UgPG5lbGhhZ2VAbWl0LmVkdT4gPG5lbGhhZ2VAa3NwbGljZS5jb20+CiBOZ3V54buFbiBUaMOhaSBOZ+G7jWMgRHV5IDxwY2xvdWRzQGdtYWlsLmNvbT4KLTxuaWNvQGZsdXhuaWMubmV0PiA8bmljb0BjYW0ub3JnPgotUGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+IDxwZXRlckBzdmFydGVuLmludGVybi5zb2Z0d29sdmVzLnBwLnNlPgorTmljayBTdG9rb2UgPG5pY2tAbm9vZGxlZmFjdG9yeS5jby51az4gTmljayBXb29sbGV5IDxuaWNrQG5vb2RsZWZhY3RvcnkuY28udWs+CitOaWNrIFN0b2tvZSA8bmlja0Bub29kbGVmYWN0b3J5LmNvLnVrPiBOaWNrIFdvb2xsZXkgPG5pY2t3b29sbGV5QHlhaG9vLmNvLnVrPgorTmljb2xhcyBNb3JleS1DaGFpc2VtYXJ0aW4gPGRldmVsLWdpdEBtb3JleS1jaGFpc2VtYXJ0aW4uY29tPiA8bmljb2xhcy5tb3JleUBmcmVlLmZyPgorTmljb2xhcyBNb3JleS1DaGFpc2VtYXJ0aW4gPGRldmVsLWdpdEBtb3JleS1jaGFpc2VtYXJ0aW4uY29tPiA8bm1vcmV5QGthbHJheS5ldT4KK05pY29sYXMgU2VicmVjaHQgPG5pY29sYXMucy5kZXZAZ214LmZyPiA8bmkuc0BsYXBvc3RlLm5ldD4KK1Bhb2xvIEJvbnppbmkgPGJvbnppbmlAZ251Lm9yZz4gPHBhb2xvLmJvbnppbmlAbHUudW5pc2kuY2g+CitQYXNjYWwgT2JyeSA8cGFzY2FsQG9icnkubmV0PiA8cGFzY2FsLm9icnlAZ21haWwuY29tPgorUGFzY2FsIE9icnkgPHBhc2NhbEBvYnJ5Lm5ldD4gPHBhc2NhbC5vYnJ5QHdhbmFkb28uZnI+CitQYXQgTm90eiA8cGF0bm90ekBnbWFpbC5jb20+IDxwa25vdHpAc2FuZGlhLmdvdj4KK1BhdWwgTWFja2VycmFzIDxwYXVsdXNAc2FtYmEub3JnPiA8cGF1bHVzQGRvcnJpZ28uKG5vbmUpPgorUGF1bCBNYWNrZXJyYXMgPHBhdWx1c0BzYW1iYS5vcmc+IDxwYXVsdXNAcG9nby4obm9uZSk+CitQZXRlciBCYXVtYW5uIDx3YXN0ZS5tYW5hZ2VyQGdteC5kZT4gPFBldGVyLkIuQmF1bWFubkBzdHVkLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgorUGV0ZXIgQmF1bWFubiA8d2FzdGUubWFuYWdlckBnbXguZGU+IDxzaXByYmF1bUBzdHVkLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgogUGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+IDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPgorUGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+IDxwZXRlckBzdmFydGVuLmludGVybi5zb2Z0d29sdmVzLnBwLnNlPgogUGV0ciBCYXVkaXMgPHBhc2t5QHVjdy5jej4gPHBhc2t5QHN1c2UuY3o+CitQZXRyIEJhdWRpcyA8cGFza3lAdWN3LmN6PiA8eHBhc2t5QG1hY2hpbmU+CitQaGlsIEhvcmQgPGhvcmRwQGNpc2NvLmNvbT4gPHBoaWwuaG9yZEBnbWFpbC5jb20+CitQaGlsaXAgSsOkZ2Vuc3RlZHQgPHBoaWxpcEBmb29saXAub3JnPiA8cGhpbGlwLmphZ2Vuc3RlZHRAZ21haWwuY29tPgorUGhpbGlwcCBBLiBIYXJ0bWFubiA8cGFoQHFvLmN4PiA8cGhAc29yZ2guZGU+CiBQaGlsaXBwZSBCcnVoYXQgPGJvb2tAY3Bhbi5vcmc+CiBSYWxmIFRoaWVsb3cgPHJhbGYudGhpZWxvd0BnbWFpbC5jb20+IDxyYWxmLnRoaWVsb3dAZ29vZ2xlbWFpbC5jb20+CiBSYW1zYXkgQWxsYW4gSm9uZXMgPHJhbXNheUByYW1zYXkxLmRlbW9uLmNvLnVrPgotUmVuw6kgU2NoYXJmZSA8cmVuZS5zY2hhcmZlQGxzcmZpcmUuYXRoLmN4PgorUmVuw6kgU2NoYXJmZSA8bC5zLnJAd2ViLmRlPiA8cmVuZS5zY2hhcmZlQGxzcmZpcmUuYXRoLmN4PgogUm9iZXJ0IEZpdHpzaW1vbnMgPHJvYmZpdHpAMjczay5uZXQ+CitSb2JlcnQgU2hlYXJtYW4gPHJvYmVydHNoZWFybWFuQGdtYWlsLmNvbT4gPHJvYkBjb2Rld2VhdmVycy5jb20+CiBSb2JlcnQgWmVoIDxyb2JlcnQuYS56ZWhAZ21haWwuY29tPgotU2FtIFZpbGFpbiA8c2FtQHZpbGFpbi5uZXQ+Ci1TYW50aSBCw6lqYXIgPHNiZWphckBnbWFpbC5jb20+CitSb2JpbiBSb3NlbmJlcmcgPHJvYmluLnJvc2VuYmVyZ0BkZXdpcmUuY29tPiA8cm9iaW4ucm9zZW5iZXJnLmxpc3RzQGRld2lyZS5jb20+CitSeWFuIEFuZGVyc29uIDxyeWFuQG1pY2hvbmxpbmUuY29tPiA8cmRhQGdvb2dsZS5jb20+CitTYWxpa2ggWmFraXJvdiA8c2FsaWtoLnpha2lyb3ZAZ21haWwuY29tPiA8U2FsaWtoLlpha2lyb3ZASW50ZWwuY29tPgorU2FtIFZpbGFpbiA8c2FtQHZpbGFpbi5uZXQ+IDxzYW0udmlsYWluQGNhdGFseXN0Lm5ldC5uej4KK1NhbnRpIELDqWphciA8c2FudGlAYWdvbGluYS5uZXQ+IDxzYmVqYXJAZ21haWwuY29tPgogU2VhbiBFc3RhYnJvb2tzIDxzZWFubGttbEBzeW1wYXRpY28uY2E+CitTZWJhc3RpYW4gU2NodWJlcnRoIDxzc2NodWJlcnRoQGdtYWlsLmNvbT4gPHNzY2h1YmVydGhAdmlzYWdlaW1hZ2luZy5jb20+CitTZXRoIEZhbGNvbiA8c2V0aEB1c2VycHJpbWFyeS5uZXQ+IDxzZmFsY29uQGZoY3JjLm9yZz4KIFNoYXduIE8uIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4KLVN0ZXZlbiBHcmltbSA8a29yZXRoQG1pZHdpbnRlci5jb20+CitTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4gPHNpbW9uQGxzdC5kZT4KK1NpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPiA8c2hhdXNtYW5AdHJvbGx0ZWNoLmNvbT4KK1N0ZWZhbiBOYWV3ZSA8c3RlZmFuLm5hZXdlQGdtYWlsLmNvbT4gPHN0ZWZhbi5uYWV3ZUBhdGxhcy1lbGVrdHJvbmlrLmNvbT4KK1N0ZWZhbiBOYWV3ZSA8c3RlZmFuLm5hZXdlQGdtYWlsLmNvbT4gPHN0ZWZhbi5uYWV3ZUBnb29nbGVtYWlsLmNvbT4KK1N0ZWZhbiBTcGVybGluZyA8c3RzcEBlbGVnby5kZT4gPHN0c3BAc3RzcC5uYW1lPgorU3RlcGhlbiBCb3lkIDxiZWJhcmlub0BnbWFpbC5jb20+IDxzYm95ZEBjb2RlYXVyb3JhLm9yZz4KK1N0ZXZlbiBEcmFrZSA8c2RyYWtlQHhuZXQuY28ubno+IDxzZHJha2VAaWh1Zy5jby5uej4KK1N0ZXZlbiBHcmltbSA8a29yZXRoQG1pZHdpbnRlci5jb20+IDxzZ3JpbW1Ac2dyaW1tLW1icC5sb2NhbD4KK1N0ZXZlbiBXYWx0ZXIgPHN0ZXZlbnJ3YWx0ZXJAZ21haWwuY29tPiA8c3dhbHRlckBsZXhtYXJrLmNvbT4KK1N0ZXZlbiBXYWx0ZXIgPHN0ZXZlbnJ3YWx0ZXJAZ21haWwuY29tPiA8c3dhbHRlckBscGRldi5wcnRkZXYubGV4bWFyay5jb20+CitTdmVuIFZlcmRvb2xhZWdlIDxza2ltb0Brb3RuZXQub3JnPiA8U3Zlbi5WZXJkb29sYWVnZUBjcy5rdWxldXZlbi5hYy5iZT4KK1N2ZW4gVmVyZG9vbGFlZ2UgPHNraW1vQGtvdG5ldC5vcmc+IDxza2ltb0BsaWFjcy5ubD4KIFRheSBSYXkgQ2h1YW4gPHJjdGF5ODlAZ21haWwuY29tPgorVGVkIFBlcmNpdmFsIDx0ZWRAbWlkZzN0Lm5ldD4gPHRlZC5wZXJjaXZhbEBxdWVzdC5jb20+CiBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorVGhvbWFzIEFja2VybWFubiA8dGguYWNrZXJAYXJjb3IuZGU+IDx0aC5hY2tlcjY2QGFyY29yLmRlPgogVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorVGltbyBIaXJ2b25lbiA8dGloaXJ2b25AZ21haWwuY29tPiA8dGloaXJ2b25AZWUub3VsdS5maT4KK1RvYnkgQWxsc29wcCA8VG9ieS5BbGxzb3BwQG5hdm1hbi5jby5uej4gPHRvYnkuYWxsc29wcEBuYXZtYW4uY28ubno+CitUb20gR3Jlbm5hbiA8dG1ncmVubmFuQGdtYWlsLmNvbT4gPHRncmVubmFuQHJlZGJhY2suY29tPgorVG9tbWkgVmlydGFuZW4gPHR2QGRlYmlhbi5vcmc+IDx0dkBlYWdhaW4ubmV0PgorVG9tbWkgVmlydGFuZW4gPHR2QGRlYmlhbi5vcmc+IDx0dkBpbm9pLmZpPgorVG9tbXkgVGhvcm4gPHRvbW15LWdpdEB0aG9ybi53cz4gPHR0MTcyOUB5YWhvby5jb20+CiBUb255IEx1Y2sgPHRvbnkubHVja0BpbnRlbC5jb20+Ci1Vd2UgS2xlaW5lLUvDtm5pZyA8VXdlX1plaXNiZXJnZXJAZGlnaS5jb20+Ci1Vd2UgS2xlaW5lLUvDtm5pZyA8VXdlLktsZWluZS1Lb2VuaWdAZGlnaS5jb20+Ci1Vd2UgS2xlaW5lLUvDtm5pZyA8dWtsZWluZWtAaW5mb3JtYXRpay51bmktZnJlaWJ1cmcuZGU+Ci1Vd2UgS2xlaW5lLUvDtm5pZyA8dXplaXNiZXJnZXJAaW8uZnNmb3J0aC5kZT4KLVV3ZSBLbGVpbmUtS8O2bmlnIDx6ZWlzYmVyZ0BpbmZvcm1hdGlrLnVuaS1mcmVpYnVyZy5kZT4KLVZpbGxlIFNreXR0w6QgPHNjb3BAeGVtYWNzLm9yZz4KK1RvciBBcm5lIFZlc3Riw7ggPHRvcmFybnZAZ21haWwuY29tPiA8dGF2ZXN0Ym9AdHJvbGx0ZWNoLmNvbT4KK1RyZW50IFBpZXBobyA8dHBpZXBob0BnbWFpbC5jb20+IDx0cGllcGhvQGZyZWVzY2FsZS5jb20+CitUcmVudCBQaWVwaG8gPHRwaWVwaG9AZ21haWwuY29tPiA8eHl6enlAc3BlYWtlYXN5Lm9yZz4KK1V3ZSBLbGVpbmUtS8O2bmlnIDx1LmtsZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGU+IDxVd2UuS2xlaW5lLUtvZW5pZ0BkaWdpLmNvbT4KK1V3ZSBLbGVpbmUtS8O2bmlnIDx1LmtsZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGU+IDx1a2xlaW5la0BpbmZvcm1hdGlrLnVuaS1mcmVpYnVyZy5kZT4KK1V3ZSBLbGVpbmUtS8O2bmlnIDx1LmtsZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGU+IDx1emVpc2JlcmdlckBpby5mc2ZvcnRoLmRlPgorVXdlIEtsZWluZS1Lw7ZuaWcgPHUua2xlaW5lLWtvZW5pZ0BwZW5ndXRyb25peC5kZT4gPHplaXNiZXJnQGluZm9ybWF0aWsudW5pLWZyZWlidXJnLmRlPgorVmlsbGUgU2t5dHTDpCA8dmlsbGUuc2t5dHRhQGlraS5maT4gPHNjb3BAeGVtYWNzLm9yZz4KIFZpdGFseSAiX1ZpIiBTaHVrZWxhIDxwdWJsaWNfdmlAdHV0LmJ5PgorVy4gVHJldm9yIEtpbmcgPHdraW5nQHRyZW1pbHkudXM+IDx3a2luZ0BkcmV4ZWwuZWR1PgogV2lsbGlhbSBQdXJzZWxsIDxiaWxsLnB1cnNlbGxAZ21haWwuY29tPgorWU9ORVRBTkkgVG9tb2thenUgPHkwbjN0NG4xQGdtYWlsLmNvbT4gPHFod3QrZ2l0QGxlcy5hdGguY3g+CitZT05FVEFOSSBUb21va2F6dSA8eTBuM3Q0bjFAZ21haWwuY29tPiA8eTBuZXRhbjFAZHJhZ29uZmx5YnNkLm9yZz4KIFlPU0hJRlVKSSBIaWRlYWtpIDx5b3NoZnVqaUBsaW51eC1pcHY2Lm9yZz4KKyMgdGhlIHR3byBhbm9ueW1vdXMgY29udHJpYnV0b3JzIGFyZSBkaWZmZXJlbnQgcGVyc29uczoKIGFub255bW91cyA8bGludXhAaG9yaXpvbi5jb20+CiBhbm9ueW1vdXMgPGxpbnV4QGhvcml6b24ubmV0PgorxLBzbWFpbCBEw7ZubWV6IDxpc21haWxAcGFyZHVzLm9yZy50cj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCmluZGV4IDYyZGJkOWEuLjBjZmRjMzYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vTWFrZWZpbGUKKysrIGIvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZQpAQCAtMzEsMTEgKzMxLDExIEBACiBNQU43X1RYVCArPSBnaXR3b3JrZmxvd3MudHh0CiAKIE1BTl9UWFQgPSAkKE1BTjFfVFhUKSAkKE1BTjVfVFhUKSAkKE1BTjdfVFhUKQotTUFOX1hNTD0kKHBhdHN1YnN0ICUudHh0LCUueG1sLCQoTUFOX1RYVCkpCi1NQU5fSFRNTD0kKHBhdHN1YnN0ICUudHh0LCUuaHRtbCwkKE1BTl9UWFQpKQorTUFOX1hNTCA9ICQocGF0c3Vic3QgJS50eHQsJS54bWwsJChNQU5fVFhUKSkKK01BTl9IVE1MID0gJChwYXRzdWJzdCAlLnR4dCwlLmh0bWwsJChNQU5fVFhUKSkKIAogT0JTT0xFVEVfSFRNTCA9IGdpdC1yZW1vdGUtaGVscGVycy5odG1sCi1ET0NfSFRNTD0kKE1BTl9IVE1MKSAkKE9CU09MRVRFX0hUTUwpCitET0NfSFRNTCA9ICQoTUFOX0hUTUwpICQoT0JTT0xFVEVfSFRNTCkKIAogQVJUSUNMRVMgPSBob3d0by1pbmRleAogQVJUSUNMRVMgKz0gZXZlcnlkYXkKQEAgLTc0LDM1ICs3NCwzNSBAQAogCiBET0NfSFRNTCArPSAkKHBhdHN1YnN0ICUsJS5odG1sLCQoQVJUSUNMRVMpICQoU1BfQVJUSUNMRVMpKQogCi1ET0NfTUFOMT0kKHBhdHN1YnN0ICUudHh0LCUuMSwkKE1BTjFfVFhUKSkKLURPQ19NQU41PSQocGF0c3Vic3QgJS50eHQsJS41LCQoTUFONV9UWFQpKQotRE9DX01BTjc9JChwYXRzdWJzdCAlLnR4dCwlLjcsJChNQU43X1RYVCkpCitET0NfTUFOMSA9ICQocGF0c3Vic3QgJS50eHQsJS4xLCQoTUFOMV9UWFQpKQorRE9DX01BTjUgPSAkKHBhdHN1YnN0ICUudHh0LCUuNSwkKE1BTjVfVFhUKSkKK0RPQ19NQU43ID0gJChwYXRzdWJzdCAlLnR4dCwlLjcsJChNQU43X1RYVCkpCiAKLXByZWZpeD89JChIT01FKQotYmluZGlyPz0kKHByZWZpeCkvYmluCi1odG1sZGlyPz0kKHByZWZpeCkvc2hhcmUvZG9jL2dpdC1kb2MKLXBkZmRpcj89JChwcmVmaXgpL3NoYXJlL2RvYy9naXQtZG9jCi1tYW5kaXI/PSQocHJlZml4KS9zaGFyZS9tYW4KLW1hbjFkaXI9JChtYW5kaXIpL21hbjEKLW1hbjVkaXI9JChtYW5kaXIpL21hbjUKLW1hbjdkaXI9JChtYW5kaXIpL21hbjcKLSMgREVTVERJUj0KK3ByZWZpeCA/PSAkKEhPTUUpCitiaW5kaXIgPz0gJChwcmVmaXgpL2JpbgoraHRtbGRpciA/PSAkKHByZWZpeCkvc2hhcmUvZG9jL2dpdC1kb2MKK2luZm9kaXIgPz0gJChwcmVmaXgpL3NoYXJlL2luZm8KK3BkZmRpciA/PSAkKHByZWZpeCkvc2hhcmUvZG9jL2dpdC1kb2MKK21hbmRpciA/PSAkKHByZWZpeCkvc2hhcmUvbWFuCittYW4xZGlyID0gJChtYW5kaXIpL21hbjEKK21hbjVkaXIgPSAkKG1hbmRpcikvbWFuNQorbWFuN2RpciA9ICQobWFuZGlyKS9tYW43CisjIERFU1RESVIgPQogCiBBU0NJSURPQyA9IGFzY2lpZG9jCiBBU0NJSURPQ19FWFRSQSA9CiBNQU5QQUdFX1hTTCA9IG1hbnBhZ2Utbm9ybWFsLnhzbAogWE1MVE8gPSB4bWx0bwogWE1MVE9fRVhUUkEgPQotSU5TVEFMTD89aW5zdGFsbAorSU5TVEFMTCA/PSBpbnN0YWxsCiBSTSA/PSBybSAtZgogTUFOX1JFUE8gPSAuLi8uLi9naXQtbWFucGFnZXMKIEhUTUxfUkVQTyA9IC4uLy4uL2dpdC1odG1sZG9jcwogCi1pbmZvZGlyPz0kKHByZWZpeCkvc2hhcmUvaW5mbwotTUFLRUlORk89bWFrZWluZm8KLUlOU1RBTExfSU5GTz1pbnN0YWxsLWluZm8KLURPQ0JPT0syWF9URVhJPWRvY2Jvb2syeC10ZXhpCi1EQkxBVEVYPWRibGF0ZXgKK01BS0VJTkZPID0gbWFrZWluZm8KK0lOU1RBTExfSU5GTyA9IGluc3RhbGwtaW5mbworRE9DQk9PSzJYX1RFWEkgPSBkb2Nib29rMngtdGV4aQorREJMQVRFWCA9IGRibGF0ZXgKIGlmbmRlZiBQRVJMX1BBVEgKIAlQRVJMX1BBVEggPSAvdXNyL2Jpbi9wZXJsCiBlbmRpZgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC4xLnR4dAppbmRleCA4MDZhOTY1Li5iZTY4NTI0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC4xLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC4xLnR4dApAQCAtMTQsNyArMTQsNyBAQAogICAgbm90IGV4Y2x1ZGUgdGhlbSBhbmQgdHJpZWQgdG8gYXBwbHkgZnVubnkgcGF0Y2hlcyBvbmx5IHRvIGZhaWwuCiAKICAqICJnaXQgYmxhbWUiIHN0YXJ0ZWQgbWlzc2luZyBxdWl0ZSBhIGZldyBjaGFuZ2VzIGZyb20gdGhlIG9yaWdpbgotICAgc2luY2Ugd2Ugc3RvcHBlZCB1c2luZyB0aGUgZGlmZiBtaW5pbWFsaXphdGlvbiBieSBkZWZhdWx0IGluIHYxLjcuMgorICAgc2luY2Ugd2Ugc3RvcHBlZCB1c2luZyB0aGUgZGlmZiBtaW5pbWl6YXRpb24gYnkgZGVmYXVsdCBpbiB2MS43LjIKICAgIGVyYS4KIAogICogV2hlbiBQQVRIIGNvbnRhaW5zIGFuIHVucmVhZGFibGUgZGlyZWN0b3J5LCBhbGlhcyBleHBhbnNpb24gY29kZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuNC50eHQKaW5kZXggY2YzZjQ1NS4uNzc5NmRmMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS40LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy41LjQudHh0CkBAIC01LDcgKzUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICogVGhlIHNpbmdsZS1rZXkgbW9kZSBvZiAiZ2l0IGFkZCAtcCIgd2FzIGVhc2lseSBmb29sZWQgaW50byB0aGlua2luZwotICAgdGhhdCBpdCB3YXMgdG9sZCB0byBhZGQgZXZlcnRoaW5nICgnYScpIHdoZW4gdXAtYXJyb3cgd2FzIHByZXNzZWQgYnkKKyAgIHRoYXQgaXQgd2FzIHRvbGQgdG8gYWRkIGV2ZXJ5dGhpbmcgKCdhJykgd2hlbiB1cC1hcnJvdyB3YXMgcHJlc3NlZCBieQogICAgbWlzdGFrZS4KIAogICogU2V0dGluZyBhIGdpdCBjb21tYW5kIHRoYXQgdXNlcyBjdXN0b20gY29uZmlndXJhdGlvbiB2aWEgIi1jIHZhcj12YWwiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC4yLnR4dAppbmRleCBlNzRmNGVmLi5iOWM2NmFhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguMi50eHQKQEAgLTEyLDExICsxMiwxMSBAQAogICogVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBwYXJzZXIgdXNlZCBmb3Igc2l6ZXMgKGUuZy4gYmlnRmlsZVRocmVzaG9sZCkKICAgIGRpZCBub3QgY29ycmVjdGx5IGludGVycHJldCAnZycgc3VmZml4LgogCi0gKiBUaGUgcmVwbGFjZW1lbnQgaW1wbGVtZW50aW9uIGZvciBzbnByaW50ZiB1c2VkIG9uIHBsYXRmb3JtcyB3aXRoCisgKiBUaGUgcmVwbGFjZW1lbnQgaW1wbGVtZW50YXRpb24gZm9yIHNucHJpbnRmIHVzZWQgb24gcGxhdGZvcm1zIHdpdGgKICAgIG5hdGl2ZSBzbnByaW50ZiB0aGF0IGlzIGJyb2tlbiBkaWQgbm90IHVzZSB2YV9jb3B5IGNvcnJlY3RseS4KIAogICogTEYtdG8tQ1JMRiBzdHJlYW1pbmcgZmlsdGVyIHJlcGxhY2VkIGFsbCBMRiB3aXRoIENSTEYsIHdoaWNoIG1pZ2h0Ci0gICBiZSB0ZWNoaW5pY2FsbHkgY29ycmVjdCBidXQgbm90IGZyaWVuZGx5IHRvIHBlb3BsZSB3aG8gYXJlIHRyeWluZworICAgYmUgdGVjaG5pY2FsbHkgY29ycmVjdCBidXQgbm90IGZyaWVuZGx5IHRvIHBlb3BsZSB3aG8gYXJlIHRyeWluZwogICAgdG8gcmVjb3ZlciBmcm9tIGVhcmxpZXIgbWlzdGFrZXMgb2YgdXNpbmcgQ1JMRiBpbiB0aGUgcmVwb3NpdG9yeQogICAgZGF0YSBpbiB0aGUgZmlyc3QgcGxhY2UuIEl0IG5vdyByZWZyYWlucyBmcm9tIGRvaW5nIHNvIGZvciBMRiB0aGF0CiAgICBmb2xsb3dzIGEgQ1IuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjgudHh0CmluZGV4IGI0ZDkwYmIuLjI0OTMxMTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjgudHh0CkBAIC05LDcgKzksNyBAQAogICogVXBkYXRlcyB0byBiYXNoIGNvbXBsZXRpb24gc2NyaXB0cy4KIAogICogVGhlIGJ1aWxkIHByb2NlZHVyZSBoYXMgYmVlbiB0YXVnaHQgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgY29tcHV0ZWQKLSAgIGRlcGVuZGVuY3kgYXV0b21hdGljYWxseSB3aGVuIHRoZSBjb21wbGllciBzdXBwb3J0cyBpdC4KKyAgIGRlcGVuZGVuY3kgYXV0b21hdGljYWxseSB3aGVuIHRoZSBjb21waWxlciBzdXBwb3J0cyBpdC4KIAogICogVGhlIGRhdGUgcGFyc2VyIG5vdyBhY2NlcHRzIHRpbWV6b25lIGRlc2lnbmF0b3JzIHRoYXQgbGFjayBtaW51dGVzCiAgICBwYXJ0IGFuZCBhbHNvIGhhcyBhIGNvbG9uIGJldHdlZW4gImhoOm1tIi4KQEAgLTMxLDcgKzMxLDcgQEAKICAqIFZhcmlhbnRzIG9mICJnaXQgY2hlcnJ5LXBpY2siIGFuZCAiZ2l0IHJldmVydCIgdGhhdCB0YWtlIG11bHRpcGxlCiAgICBjb21taXRzIGxlYXJuZWQgdG8gIi0tY29udGludWUiIGFuZCAiLS1hYm9ydCIuCiAKLSAqICJnaXQgZGFlbW9uIiBnaXZlcyBtb3JlIGh1bWFuIHJlYWRibGUgZXJyb3IgbWVzc2FnZXMgdG8gY2xpZW50cworICogImdpdCBkYWVtb24iIGdpdmVzIG1vcmUgaHVtYW4gcmVhZGFibGUgZXJyb3IgbWVzc2FnZXMgdG8gY2xpZW50cwogICAgdXNpbmcgRVJSIHBhY2tldHMgd2hlbiBhcHByb3ByaWF0ZS4KIAogICogRXJyb3JzIGF0IHRoZSBuZXR3b3JrIGxheWVyIGlzIGxvZ2dlZCBieSAiZ2l0IGRhZW1vbiIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4yLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMi4xLnR4dAppbmRleCAxMzU0YWQwLi43NjlhNmZjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4yLjEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjIuMS50eHQKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgIGNvbW1vbiBwcmVmaXggYW5kIHN1ZmZpeCBiZXR3ZWVuIHRoZSB0d28gZmlsZW5hbWVzIG92ZXJsYXBwZWQuCiAKICAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIsIHdoZW4gcmVjdXJzZWQgaW50byBzdWItc3VibW9kdWxlcywgZGlkIG5vdAotICAgYWNjY3VtdWxhdGUgdGhlIHByZWZpeCBwYXRocy4KKyAgIGFjY3VtdWxhdGUgdGhlIHByZWZpeCBwYXRocy4KIAogICogImdpdCBhbSAkbWFpbGRpci8iIGFwcGxpZWQgbWVzc2FnZXMgaW4gYW4gdW5leHBlY3RlZCBvcmRlcjsgc29ydAogICAgZmlsZW5hbWVzIHJlYWQgZnJvbSB0aGUgbWFpbGRpci8gaW4gYSB3YXkgdGhhdCBpcyBtb3JlIGxpa2VseSB0bwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMi4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjIuMi50eHQKaW5kZXggZGFiNDgzMS4uNzA4ZGYxYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMi4yLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4yLjIudHh0CkBAIC01OCw0ICs1OCw0IEBACiAgICBjb25mbGljdHMgaGF2ZSBiZWVuIGFwcGxpZWQuCiAKICAqICJnaXQgYnVuZGxlIiBkaWQgbm90IGxpa2UgYSBidW5kbGUgY3JlYXRlZCB1c2luZyBhIGNvbW1pdCB3aXRob3V0Ci0gICBhbnkgbWVzc2FnZSBhcyBpdHMgb25lIG9mIHRoZSBwcmVyZXF1aXN0ZXMuCisgICBhbnkgbWVzc2FnZSBhcyBpdHMgb25lIG9mIHRoZSBwcmVyZXF1aXNpdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMy4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjMuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMzZWExOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjMuMS50eHQKQEAgLTAsMCArMSwxNCBAQAorR2l0IHYxLjguMy4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBXaGVuICRIT01FIGlzIG1pc2NvbmZpZ3VyZWQgdG8gcG9pbnQgYXQgYW4gdW5yZWFkYWJsZSBkaXJlY3RvcnksIHdlCisgICB1c2VkIHRvIGNvbXBsYWluIGFuZCBkaWUuIFRoZSBjaGVjayBoYXMgYmVlbiBsb29zZW5lZC4KKworICogSGFuZGxpbmcgb2YgbmVnYXRpdmUgZXhjbHVkZSBwYXR0ZXJuIGZvciBkaXJlY3RvcmllcyAiIWRpciIgd2FzCisgICBicm9rZW4gaW4gdGhlIHVwZGF0ZSB0byB2MS44LjMuCisKK0Fsc28gY29udGFpbnMgYSBoYW5kZnVsIG9mIHRyaXZpYWwgY29kZSBjbGVhbi11cHMsIGRvY3VtZW50YXRpb24KK3VwZGF0ZXMsIHVwZGF0ZXMgdG8gdGhlIHRlc3Qgc3VpdGUsIGV0Yy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjMuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4zLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YWUxNDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4zLjIudHh0CkBAIC0wLDAgKzEsNTkgQEAKK0dpdCB2MS44LjMuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjMuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQ2xvbmluZyB3aXRoICJnaXQgY2xvbmUgLS1kZXB0aCBOIiB3aGlsZSBmZXRjaC5mc2Nrb2JqZWN0cyAob3IKKyAgIHRyYW5zZmVyLmZzY2tvYmplY3RzKSBpcyBzZXQgdG8gdHJ1ZSBkaWQgbm90IHRlbGwgdGhlIGN1dC1vZmYKKyAgIHBvaW50cyBvZiB0aGUgc2hhbGxvdyBoaXN0b3J5IHRvIHRoZSBwcm9jZXNzIHRoYXQgdmFsaWRhdGVzIHRoZQorICAgb2JqZWN0cyBhbmQgdGhlIGhpc3RvcnkgcmVjZWl2ZWQsIGNhdXNpbmcgdGhlIHZhbGlkYXRpb24gdG8gZmFpbC4KKworICogImdpdCBjaGVja291dCBmb28iIERXSU1zIHRoZSBpbnRlbmRlZCAidXBzdHJlYW0iIGFuZCB0dXJucyBpdCBpbnRvCisgICAiZ2l0IGNoZWNrb3V0IC10IC1iIGZvbyByZW1vdGVzL29yaWdpbi9mb28iLiBUaGlzIGNvZGVwYXRoIGhhcyBiZWVuCisgICB1cGRhdGVkIHRvIGNvcnJlY3RseSB0YWtlIGV4aXN0aW5nIHJlbW90ZSBkZWZpbml0aW9ucyBpbnRvIGFjY291bnQuCisKKyAqICJnaXQgZmV0Y2giIGludG8gYSBzaGFsbG93IHJlcG9zaXRvcnkgZnJvbSBhIHJlcG9zaXRvcnkgdGhhdCBkb2VzCisgICBub3Qga25vdyBhYm91dCB0aGUgc2hhbGxvdyBib3VuZGFyeSBjb21taXRzIChlLmcuIGEgZGlmZmVyZW50IGZvcmsKKyAgIGZyb20gdGhlIHJlcG9zaXRvcnkgdGhlIGN1cnJlbnQgc2hhbGxvdyByZXBvc2l0b3J5IHdhcyBjbG9uZWQgZnJvbSkKKyAgIGRpZCBub3Qgd29yayBjb3JyZWN0bHkuCisKKyAqICJnaXQgc3VidHJlZSIgKGluIGNvbnRyaWIvKSBoYWQgb25lIGNvZGVwYXRoIHdpdGggbG9vc2UgZXJyb3IKKyAgIGNoZWNrcyB0byBsb3NlIGRhdGEgYXQgdGhlIHJlbW90ZSBzaWRlLgorCisgKiAiZ2l0IGxvZyAtLWFuY2VzdHJ5LXBhdGggQS4uLkIiIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZCwgYXMgaXQgZGlkCisgICBub3QgcGF5IGF0dGVudGlvbiB0byB0aGUgZmFjdCB0aGF0IHRoZSBtZXJnZSBiYXNlIGJldHdlZW4gQSBhbmQgQgorICAgd2FzIHRoZSBib3R0b20gb2YgdGhlIHJhbmdlIGJlaW5nIHNwZWNpZmllZC4KKworICogImdpdCBkaWZmIC1jIC1wIiB3YXMgbm90IHNob3dpbmcgYSBkZWxldGVkIGxpbmUgZnJvbSBhIGh1bmsgd2hlbgorICAgYW5vdGhlciBodW5rIGltbWVkaWF0ZWx5IGJlZ2lucyB3aGVyZSB0aGUgZWFybGllciBvbmUgZW5kcy4KKworICogImdpdCBtZXJnZSBAey0xfX4yMiIgd2FzIHJld3JpdHRlbiB0byAiZ2l0IG1lcmdlIGZyb3R6QHsxfX4yMiIKKyAgIGluY29ycmVjdGx5IHdoZW4geW91ciBwcmV2aW91cyBicmFuY2ggd2FzICJmcm90eiIgKGl0IHNob3VsZCBiZQorICAgcmV3cml0dGVuIHRvICJnaXQgbWVyZ2UgZnJvdHp+MjIiIGluc3RlYWQpLgorCisgKiAiZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgLW0gJyciIHNob3VsZCBub3Qgc3RhcnQgYW4KKyAgIGVkaXRvci4KKworICogImdpdCBwdXNoIC0tW25vLV12ZXJpZnkiIHdhcyBub3QgZG9jdW1lbnRlZC4KKworICogQW4gZW50cnkgZm9yICJmaWxlOi8vIiBzY2hlbWUgaW4gdGhlIGVudW1lcmF0aW9uIG9mIFVSTCB0eXBlcyBHaXQKKyAgIGNhbiB0YWtlIGluIHRoZSBIVE1MIGRvY3VtZW50YXRpb24gd2FzIG1hZGUgaW50byBhIGNsaWNrYWJsZSBsaW5rCisgICBieSBtaXN0YWtlLgorCisgKiB6c2ggcHJvbXB0IHNjcmlwdCB0aGF0IGJvcnJvd2VkIGZyb20gYmFzaCBwcm9tcHQgc2NyaXB0IGRpZCBub3QKKyAgIHdvcmsgZHVlIHRvIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBhcnJheSB2YXJpYWJsZSBub3RhdGlvbiBiZXR3ZWVuCisgICB0aGVzZSB0d28gc2hlbGxzLgorCisgKiBUaGUgYmFzaCBwcm9tcHQgY29kZSAoaW4gY29udHJpYi8pIGRpc3BsYXllZCB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoCisgICBiZWluZyByZWJhc2VkIHdoZW4gInJlYmFzZSAtaS8tbS8tcCIgbW9kZXMgYXJlIGluIHVzZSwgYnV0IG5vdCB0aGUKKyAgIHBsYWluIHZhbmlsbGEgInJlYmFzZSIuCisKKyAqICJnaXQgcHVzaCAkdGhlcmUgSEVBRDpicmFuY2giIGRpZCBub3QgcmVzb2x2ZSBIRUFEIGVhcmx5IGVub3VnaCwgc28KKyAgIGl0IHdhcyBlYXN5IHRvIGZsaXAgaXQgYXJvdW5kIHdoaWxlIHB1c2ggaXMgc3RpbGwgZ29pbmcgb24gYW5kIHB1c2gKKyAgIG91dCBhIGJyYW5jaCB0aGF0IHRoZSB1c2VyIGRpZCBub3Qgb3JpZ2luYWxseSBpbnRlbmRlZCB3aGVuIHRoZQorICAgY29tbWFuZCB3YXMgc3RhcnRlZC4KKworICogImRpZmZ0b29sIC0tZGlyLWRpZmYiIGRpZCBub3QgY29weSBiYWNrIGNoYW5nZXMgbWFkZSBieSB0aGUKKyAgIGVuZC11c2VyIGluIHRoZSBkaWZmIHRvb2wgYmFja2VuZCB0byB0aGUgd29ya2luZyB0cmVlIGluIHNvbWUKKyAgIGNhc2VzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMy4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjMuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJhNGY0ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjMuMy50eHQKQEAgLTAsMCArMSw0NyBAQAorR2l0IHYxLjguMy4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguMy4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGFwcGx5IiBwYXJzZWQgcGF0Y2hlcyB0aGF0IGFkZCBuZXcgZmlsZXMsIGdlbmVyYXRlZCBieSBwcm9ncmFtcworICAgb3RoZXIgdGhhbiBHaXQsIGluY29ycmVjdGx5LiAgVGhpcyBpcyBhbiBvbGQgYnJlYWthZ2UgaW4gdjEuNy4xMS4KKworICogT2xkZXIgY1VSTCB3YW50ZWQgcGllY2Ugb2YgbWVtb3J5IHdlIGNhbGwgaXQgd2l0aCB0byBiZSBzdGFibGUsIGJ1dAorICAgd2UgdXBkYXRlZCB0aGUgYXV0aCBtYXRlcmlhbCBhZnRlciBoYW5kaW5nIGl0IHRvIGEgY2FsbC4KKworICogImdpdCBwdWxsIiBpbnRvIG5vdGhpbmcgdHJhc2hlZCAibG9jYWwgY2hhbmdlcyIgdGhhdCB3ZXJlIGluIHRoZQorICAgaW5kZXguCisKKyAqIE1hbnkgImdpdCBzdWJtb2R1bGUiIG9wZXJhdGlvbnMgZGlkIG5vdCB3b3JrIG9uIGEgc3VibW9kdWxlIGF0IGEKKyAgIHBhdGggd2hvc2UgbmFtZSBpcyBub3QgaW4gQVNDSUkuCisKKyAqICJjaGVycnktcGljayIgaGFkIGEgc21hbGwgbGVhayBpbiBpdHMgZXJyb3IgY29kZXBhdGguCisKKyAqIExvZ2ljIHVzZWQgYnkgZ2l0LXNlbmQtZW1haWwgdG8gc3VwcHJlc3MgY2MgbWlzaGFuZGxlZCBuYW1lcyBsaWtlCisgICAiQSBVLiBUaG9yIiA8YXV0aG9yQGV4YW1wbGUueHo+LCB3aGVyZSB0aGUgaHVtYW4gcmVhZGFibGUgcGFydAorICAgbmVlZHMgdG8gYmUgcXVvdGVkICh0aGUgdXNlciBpbnB1dCBtYXkgbm90IGhhdmUgdGhlIGRvdWJsZSBxdW90ZXMKKyAgIGFyb3VuZCB0aGUgbmFtZSwgYW5kIGNvbXBhcmlzb24gd2FzIGRvbmUgYmV0d2VlbiBxdW90ZWQgYW5kCisgICB1bnF1b3RlZCBzdHJpbmdzKS4gIEl0IGFsc28gbWlzaGFuZGxlZCBuYW1lcyB0aGF0IG5lZWQgUkZDMjA0NworICAgcXVvdGluZy4KKworICogImdpdHdlYiIgZm9yZ290IHRvIGNsZWFyIGEgZ2xvYmFsIHZhcmlhYmxlICRzZWFyY2hfcmVnZXhwIHVwb24gZWFjaAorICAgcmVxdWVzdCwgbWlzdGFrZW5seSBjYXJyeWluZyBvdmVyIHRoZSBwcmV2aW91cyBzZWFyY2ggdG8gYSBuZXcgb25lCisgICB3aGVuIHVzZWQgYXMgYSBwZXJzaXN0ZW50IENHSS4KKworICogVGhlIHdpbGRtYXRjaCBlbmdpbmUgZGlkIG5vdCBob25vciBXTV9DQVNFRk9MRCBvcHRpb24gY29ycmVjdGx5LgorCisgKiAiZ2l0IGxvZyAtYyAtLWZvbGxvdyAkcGF0aCIgc2VnZmF1bHRlZCB1cG9uIGhpdHRpbmcgdGhlIGNvbW1pdCB0aGF0CisgICByZW5hbWVkIHRoZSAkcGF0aCBiZWluZyBmb2xsb3dlZC4KKworICogV2hlbiBhIHJlZmxvZyBub3RhdGlvbiBpcyB1c2VkIGZvciBpbXBsaWNpdCAiY3VycmVudCBicmFuY2giLAorICAgZS5nLiAiZ2l0IGxvZyBAe3V9Iiwgd2UgZGlkIG5vdCBzYXkgd2hpY2ggYnJhbmNoIGFuZCB3b3JzZSBzYWlkCisgICAiYnJhbmNoICcnIiBpbiB0aGUgZXJyb3IgbWVzc2FnZXMuCisKKyAqIE1hYyBPUyBYIGRvZXMgbm90IGxpa2UgdG8gd3JpdGUoMikgbW9yZSB0aGFuIElOVF9NQVggbnVtYmVyIG9mCisgICBieXRlczsgd29yayBpdCBhcm91bmQgYnkgY2hvcHBpbmcgd3JpdGUoMikgaW50byBzbWFsbGVyIHBpZWNlcy4KKworICogTmV3ZXIgTWFjT1MgWCBlbmNvdXJhZ2VzIHRoZSBwcm9ncmFtcyB0byBjb21waWxlIGFuZCBsaW5rIHdpdGgKKyAgIHRoZWlyIENvbW1vbkNyeXB0bywgbm90IHdpdGggT3BlblNTTC4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjMuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4zLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZjEwNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4zLjQudHh0CkBAIC0wLDAgKzEsMjAgQEAKK0dpdCB2MS44LjMuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHVwZGF0ZSBpcyBtb3N0bHkgdG8gcHJvcGFnYXRlIGRvY3VtZW50YXRpb24gZml4ZXMgYW5kIHRlc3QKK3VwZGF0ZXMgZnJvbSB0aGUgbWFzdGVyIGZyb250IGJhY2sgdG8gdGhlIG1haW50ZW5hbmNlIHRyYWNrLgorCitGaXhlcyBzaW5jZSB2MS44LjMuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGJpc2VjdCBsb2cgbGlzdGVkIGluY29ycmVjdCBjb21taXRzIHdoZW4gYmlzZWN0aW9uIGVuZHMgd2l0aAorICAgb25seSBza2lwcGVkIG9uZXMuCisKKyAqIFRoZSB0ZXN0IGNvdmVyYWdlIGZyYW1ld29yayB3YXMgbGVmdCBicm9rZW4gZm9yIHNvbWUgdGltZS4KKworICogVGhlIHRlc3Qgc3VpdGUgZm9yIEhUVFAgdHJhbnNwb3J0IGRpZCBub3QgcnVuIHdpdGggQXBhY2hlIDIuNC4KKworICogImdpdCBkaWZmIiB1c2VkIHRvIGZhaWwgd2hlbiBjb3JlLnNhZmVjcmxmIGlzIHNldCBhbmQgdGhlIHdvcmtpbmcKKyAgIHRyZWUgY29udGVudHMgaGFkIG1peGVkIENSTEYvTEYgbGluZSBlbmRpbmdzLiBDb21taXR0aW5nIHN1Y2ggYQorICAgY29udGVudCBtdXN0IGJlIHByb2hpYml0ZWQsIGJ1dCAiZ2l0IGRpZmYiIHNob3VsZCBoZWxwIHRoZSB1c2VyIHRvCisgICBsb2NhdGUgYW5kIGZpeCBzdWNoIHByb2JsZW1zIHdpdGhvdXQgZmFpbGluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ1OGFjNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQudHh0CkBAIC0wLDAgKzEsNDgwIEBACitHaXQgdjEuOC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGVzIChmb3IgR2l0IDIuMCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuICJnaXQgcHVzaCBbJHRoZXJlXSIgZG9lcyBub3Qgc2F5IHdoYXQgdG8gcHVzaCwgd2UgaGF2ZSB1c2VkIHRoZQordHJhZGl0aW9uYWwgIm1hdGNoaW5nIiBzZW1hbnRpY3Mgc28gZmFyIChhbGwgeW91ciBicmFuY2hlcyB3ZXJlIHNlbnQKK3RvIHRoZSByZW1vdGUgYXMgbG9uZyBhcyB0aGVyZSBhbHJlYWR5IGFyZSBicmFuY2hlcyBvZiB0aGUgc2FtZSBuYW1lCitvdmVyIHRoZXJlKS4gIEluIEdpdCAyLjAsIHRoZSBkZWZhdWx0IHdpbGwgY2hhbmdlIHRvIHRoZSAic2ltcGxlIgorc2VtYW50aWNzIHRoYXQgcHVzaGVzOgorCisgLSBvbmx5IHRoZSBjdXJyZW50IGJyYW5jaCB0byB0aGUgYnJhbmNoIHdpdGggdGhlIHNhbWUgbmFtZSwgYW5kIG9ubHkKKyAgIHdoZW4gdGhlIGN1cnJlbnQgYnJhbmNoIGlzIHNldCB0byBpbnRlZ3JhdGUgd2l0aCB0aGF0IHJlbW90ZQorICAgYnJhbmNoLCBpZiB5b3UgYXJlIHB1c2hpbmcgdG8gdGhlIHNhbWUgcmVtb3RlIGFzIHlvdSBmZXRjaCBmcm9tOyBvcgorCisgLSBvbmx5IHRoZSBjdXJyZW50IGJyYW5jaCB0byB0aGUgYnJhbmNoIHdpdGggdGhlIHNhbWUgbmFtZSwgaWYgeW91CisgICBhcmUgcHVzaGluZyB0byBhIHJlbW90ZSB0aGF0IGlzIG5vdCB3aGVyZSB5b3UgdXN1YWxseSBmZXRjaCBmcm9tLgorCitVc2UgdGhlIHVzZXIgcHJlZmVyZW5jZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICJwdXNoLmRlZmF1bHQiIHRvCitjaGFuZ2UgdGhpcy4gIElmIHlvdSBhcmUgYW4gb2xkLXRpbWVyIHdobyBpcyB1c2VkIHRvIHRoZSAibWF0Y2hpbmciCitzZW1hbnRpY3MsIHlvdSBjYW4gc2V0IHRoZSB2YXJpYWJsZSB0byAibWF0Y2hpbmciIHRvIGtlZXAgdGhlCit0cmFkaXRpb25hbCBiZWhhdmlvdXIuICBJZiB5b3Ugd2FudCB0byBsaXZlIGluIHRoZSBmdXR1cmUgZWFybHksIHlvdQorY2FuIHNldCBpdCB0byAic2ltcGxlIiB0b2RheSB3aXRob3V0IHdhaXRpbmcgZm9yIEdpdCAyLjAuCisKK1doZW4gImdpdCBhZGQgLXUiIChhbmQgImdpdCBhZGQgLUEiKSBpcyBydW4gaW5zaWRlIGEgc3ViZGlyZWN0b3J5IGFuZAorZG9lcyBub3Qgc3BlY2lmeSB3aGljaCBwYXRocyB0byBhZGQgb24gdGhlIGNvbW1hbmQgbGluZSwgaXQKK3dpbGwgb3BlcmF0ZSBvbiB0aGUgZW50aXJlIHRyZWUgaW4gR2l0IDIuMCBmb3IgY29uc2lzdGVuY3kKK3dpdGggImdpdCBjb21taXQgLWEiIGFuZCBvdGhlciBjb21tYW5kcy4gIFRoZXJlIHdpbGwgYmUgbm8KK21lY2hhbmlzbSB0byBtYWtlIHBsYWluICJnaXQgYWRkIC11IiBiZWhhdmUgbGlrZSAiZ2l0IGFkZCAtdSAuIi4KK0N1cnJlbnQgdXNlcnMgb2YgImdpdCBhZGQgLXUiICh3aXRob3V0IGEgcGF0aHNwZWMpIHNob3VsZCBzdGFydAordHJhaW5pbmcgdGhlaXIgZmluZ2VycyB0byBleHBsaWNpdGx5IHNheSAiZ2l0IGFkZCAtdSAuIgorYmVmb3JlIEdpdCAyLjAgY29tZXMuICBBIHdhcm5pbmcgaXMgaXNzdWVkIHdoZW4gdGhlc2UgY29tbWFuZHMgYXJlCitydW4gd2l0aG91dCBhIHBhdGhzcGVjIGFuZCB3aGVuIHlvdSBoYXZlIGxvY2FsIGNoYW5nZXMgb3V0c2lkZSB0aGUKK2N1cnJlbnQgZGlyZWN0b3J5LCBiZWNhdXNlIHRoZSBiZWhhdmlvdXIgaW4gR2l0IDIuMCB3aWxsIGJlIGRpZmZlcmVudAorZnJvbSB0b2RheSdzIHZlcnNpb24gaW4gc3VjaCBhIHNpdHVhdGlvbi4KKworSW4gR2l0IDIuMCwgImdpdCBhZGQgPHBhdGg+IiB3aWxsIGJlaGF2ZSBhcyAiZ2l0IGFkZCAtQSA8cGF0aD4iLCBzbwordGhhdCAiZ2l0IGFkZCBkaXIvIiB3aWxsIG5vdGljZSBwYXRocyB5b3UgcmVtb3ZlZCBmcm9tIHRoZSBkaXJlY3RvcnkKK2FuZCByZWNvcmQgdGhlIHJlbW92YWwuICBWZXJzaW9ucyBiZWZvcmUgR2l0IDIuMCwgaW5jbHVkaW5nIHRoaXMKK3JlbGVhc2UsIHdpbGwga2VlcCBpZ25vcmluZyByZW1vdmFscywgYnV0IHRoZSB1c2VycyB3aG8gcmVseSBvbiB0aGlzCitiZWhhdmlvdXIgYXJlIGVuY291cmFnZWQgdG8gc3RhcnQgdXNpbmcgImdpdCBhZGQgLS1pZ25vcmUtcmVtb3ZhbCA8cGF0aD4iCitub3cgYmVmb3JlIDIuMCBpcyByZWxlYXNlZC4KKworCitVcGRhdGVzIHNpbmNlIHYxLjguMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yZWlnbiBpbnRlcmZhY2VzLCBzdWJzeXN0ZW1zIGFuZCBwb3J0cy4KKworICogImdpdCByZWJhc2UgLWkiIG5vdyBob25vcnMgLS1zdHJhdGVneSBhbmQgLVggb3B0aW9ucy4KKworICogR2l0LWd1aSBoYXMgYmVlbiB1cGRhdGVkIHRvIGl0cyAwLjE4LjAgdmVyc2lvbi4KKworICogTWVkaWFXaWtpIHJlbW90ZSBoZWxwZXIgKGluIGNvbnRyaWIvKSBoYXMgYmVlbiB1cGRhdGVkIHRvIHVzZSB0aGUKKyAgIGNyZWRlbnRpYWwgaGVscGVyIGludGVyZmFjZSBmcm9tIEdpdC5wbS4KKworICogVXBkYXRlIGJ1aWxkIGZvciBDeWd3aW4gMS5bNTddLiAgVG9yc3RlbiBCw7ZnZXJzaGF1c2VuIHJlcG9ydHMgdGhhdAorICAgdGhpcyBpcyBmaW5lIHdpdGggQ3lnd2luIDEuNyAoJGdtYW5lLzIyNTgyNCkgc28gbGV0J3MgdHJ5IG1vdmluZyBpdAorICAgYWhlYWQuCisKKyAqIFRoZSBjcmVkZW50aWFsIGhlbHBlciB0byB0YWxrIHRvIGtleWNoYWluIG9uIE9TIFggKGluIGNvbnRyaWIvKSBoYXMKKyAgIGJlZW4gdXBkYXRlZCB0byBraWNrIGluIG5vdCBqdXN0IHdoZW4gdGFsa2luZyBodHRwL2h0dHBzIGJ1dCBhbHNvCisgICBpbWFwKHMpIGFuZCBzbXRwLgorCisgKiBSZW1vdGUgdHJhbnNwb3J0IGhlbHBlciBoYXMgYmVlbiB1cGRhdGVkIHRvIHJlcG9ydCBlcnJvcnMgYW5kCisgICBtYWludGFpbiByZWYgaGllcmFyY2h5IHVzZWQgdG8ga2VlcCB0cmFjayBvZiBpdHMgb3duIHN0YXRlIGJldHRlci4KKworICogV2l0aCAiZXhwb3J0IiByZW1vdGUtaGVscGVyIHByb3RvY29sLCAoMSkgYSBwdXNoIHRoYXQgdHJpZXMgdG8KKyAgIHVwZGF0ZSBhIHJlbW90ZSByZWYgd2hvc2UgbmFtZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcHVzaGluZyBzaWRlCisgICBkb2VzIG5vdCB3b3JrIHlldCwgYW5kICgyKSB0aGUgaGVscGVyIG1heSBub3Qga25vdyBob3cgdG8gZG8KKyAgIC0tZHJ5LXJ1bjsgdGhlc2UgcHJvYmxlbWF0aWMgY2FzZXMgYXJlIGRpc2FibGVkIGZvciBub3cuCisKKyAqIGdpdC1yZW1vdGUtaGcvYnpyIChpbiBjb250cmliLykgdXBkYXRlcy4KKworICogZ2l0LXJlbW90ZS1tdyAoaW4gY29udHJpYi8pIGhpbnRzIHVzZXJzIHRvIGNoZWNrIHRoZSBjZXJ0aWZpY2F0ZSwKKyAgIHdoZW4gaHR0cHM6Ly8gY29ubmVjdGlvbiBmYWlsZWQuCisKKyAqIGdpdC1yZW1vdGUtbXcgKGluIGNvbnRyaWIvKSBhZGRzIGEgY29tbWFuZCB0byBhbGxvdyBwcmV2aWV3aW5nIHRoZQorICAgY29udGVudHMgbG9jYWxseSBiZWZvcmUgcHVzaGluZyBpdCBvdXQsIHdoZW4gd29ya2luZyB3aXRoIGEKKyAgIE1lZGlhV2lraSByZW1vdGUuCisKKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqICJnaXQgY2xlYW4iIGNvbW1hbmQgbGVhcm5lZCBhbiBpbnRlcmFjdGl2ZSBtb2RlLgorCisgKiBUaGUgIi0taGVhZCIgb3B0aW9uIHRvICJnaXQgc2hvdy1yZWYiIHdhcyBvbmx5IHRvIGFkZCAiSEVBRCIgdG8gdGhlCisgICBsaXN0IG9mIGNhbmRpZGF0ZSByZWZzIHRvIGJlIGZpbHRlcmVkIGJ5IHRoZSB1c3VhbCBydWxlcworICAgKGUuZy4gIi0taGVhZHMiIHRoYXQgb25seSBzaG93IHJlZnMgdW5kZXIgcmVmcy9oZWFkcykuICBUaGUgbWVhbmluZworICAgb2YgdGhlIG9wdGlvbiBoYXMgYmVlbiBjaGFuZ2VkIHRvIGFsd2F5cyBzaG93ICJIRUFEIiByZWdhcmRsZXNzIG9mCisgICB3aGF0IGZpbHRlcmluZyB3aWxsIGJlIGFwcGxpZWQgdG8gYW55IG90aGVyIHJlZi4KKworICAgVGhpcyBpcyBhIGJhY2t3YXJkIGluY29tcGF0aWJsZSBjaGFuZ2UgYW5kIG1pZ2h0IGNhdXNlIGJyZWFrYWdlcyB0bworICAgcGVvcGxlJ3MgZXhpc3Rpbmcgc2NyaXB0cy4KKworICogImdpdCBzaG93IC1zIiB3YXMgbGVzcyBkaXNjb3ZlcmFibGUgdGhhbiBpdCBzaG91bGQgaGF2ZSBiZWVuLiAgSXQKKyAgIG5vdyBoYXMgYSBuYXR1cmFsIHN5bm9ueW0gImdpdCBzaG93IC0tbm8tcGF0Y2giLgorCisgKiAiZ2l0IGNoZWNrLW1haWxtYXAiIGlzIGEgbmV3IGNvbW1hbmQgdGhhdCBsZXRzIHlvdSBtYXAgdXNlcm5hbWVzCisgICBhbmQgZS1tYWlsIGFkZHJlc3NlcyB0aHJvdWdoIHRoZSBtYWlsbWFwIG1lY2hhbmlzbSwganVzdCBsaWtlIG1hbnkKKyAgIGJ1aWx0LWluIGNvbW1hbmRzIGRvLgorCisgKiAiZ2l0IG5hbWUtcmV2IiBsZWFybmVkIHRvIG5hbWUgYW4gYW5ub3RhdGVkIHRhZyBvYmplY3QgYmFjayB0byBpdHMKKyAgIHRhZ25hbWU7ICJnaXQgbmFtZS1yZXYgJChnaXQgcmV2LXBhcnNlIHYxLjAuMCkiIGdpdmVzICJ0YWdzL3YxLjAuMCIsCisgICBmb3IgZXhhbXBsZS4KKworICogImdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrPTxmb3JtYXQ+IiBpcyBhZGRlZCwgcHJpbWFyaWx5IHRvIGFsbG93CisgICBvbi1kaXNrIGZvb3RwcmludCBvZiBvYmplY3RzIGluIHBhY2tmaWxlcyAob2Z0ZW4gdGhleSBhcmUgYSBsb3QKKyAgIHNtYWxsZXIgdGhhbiB0aGVpciB0cnVlIHNpemUsIHdoZW4gZXhwcmVzc2VkIGFzIGRlbHRhcykgdG8gYmUKKyAgIHJlcG9ydGVkLgorCisgKiAiZ2l0IHJlYmFzZSBbLWldIiB1c2VkIHRvIGxlYXZlIGp1c3QgInJlYmFzZSIgYXMgaXRzIHJlZmxvZyBtZXNzYWdlcworICAgZm9yIHNvbWUgb3BlcmF0aW9ucy4gVGhleSBoYXZlIGJlZW4gcmV3b3JkZWQgdG8gYmUgbW9yZSBpbmZvcm1hdGl2ZS4KKworICogSW4gYWRkaXRpb24gdG8gdGhlIGNob2ljZSBmcm9tICJyZWJhc2UsIG1lcmdlLCBvciBjaGVja291dC1kZXRhY2giLAorICAgInN1Ym1vZHVsZSB1cGRhdGUiIGNhbiBhbGxvdyBhIGN1c3RvbSBjb21tYW5kIHRvIGJlIHVzZWQgaW4gdG8KKyAgIHVwZGF0ZSB0aGUgd29ya2luZyB0cmVlIG9mIHN1Ym1vZHVsZXMgdmlhIHRoZSAic3VibW9kdWxlLioudXBkYXRlIgorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIiBjYW4gb3B0aW9uYWxseSBjbG9uZSB0aGUgc3VibW9kdWxlCisgICByZXBvc2l0b3JpZXMgc2hhbGxvd2x5LgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgbGVhcm5lZCAiLS1mcm9tWz13aG9tXSIgb3B0aW9uLCB3aGljaCBzZXRzIHRoZQorICAgIkZyb206ICIgaGVhZGVyIHRvIHRoZSBzcGVjaWZpZWQgcGVyc29uIChvciB0aGUgcGVyc29uIHdobyBydW5zIHRoZQorICAgY29tbWFuZCwgaWYgIj13aG9tIiBwYXJ0IGlzIG1pc3NpbmcpIGFuZCBtb3ZlIHRoZSBvcmlnaW5hbCBhdXRob3IKKyAgIGluZm9ybWF0aW9uIHRvIGFuIGluLWJvZHkgRnJvbTogaGVhZGVyIGFzIG5lY2Vzc2FyeS4KKworICogVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgIm1lcmdlLmZmIiB3YXMgY2xlYXJ5IGEgdHJpLXN0YXRlIHRvCisgICBjaG9vc2Ugb25lIGZyb20gImZhdm9yIGZhc3QtZm9yd2FyZCB3aGVuIHBvc3NpYmxlIiwgImFsd2F5cyBjcmVhdGUKKyAgIGEgbWVyZ2UgZXZlbiB3aGVuIHRoZSBoaXN0b3J5IGNvdWxkIGZhc3QtZm9yd2FyZCIgYW5kICJkbyBub3QKKyAgIGNyZWF0ZSBhbnkgbWVyZ2UsIG9ubHkgdXBkYXRlIHdoZW4gdGhlIGhpc3RvcnkgZmFzdC1mb3J3YXJkcyIsIGJ1dAorICAgdGhlIGNvbW1hbmQgbGluZSBwYXJzZXIgZGlkIG5vdCBpbXBsZW1lbnQgdGhlIHVzdWFsIGNvbnZlbnRpb24gb2YKKyAgICJsYXN0IG9uZSB3aW5zLCBhbmQgY29tbWFuZCBsaW5lIG92ZXJyaWRlcyB0aGUgY29uZmlndXJhdGlvbiIKKyAgIGNvcnJlY3RseS4KKworICogImdpdHdlYiIgbGVhcm5lZCB0byBvcHRpb25hbGx5IHBsYWNlIGV4dHJhIGxpbmtzIHRoYXQgcG9pbnQgYXQgdGhlCisgICBsZXZlbHMgaGlnaGVyIHRoYW4gdGhlIEdpdHdlYiBwYWdlcyB0aGVtc2VsdmVzIGluIHRoZSBicmVhZGNydW1icywKKyAgIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgYXMgcGFydCBvZiBhIGxhcmdlciBpbnN0YWxsYXRpb24uCisKKyAqICJnaXQgbG9nIC0tZm9ybWF0PSIgbm93IGhvbm9ycyBpMThuLmxvZ291dHB1dGVuY29kaW5nIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlLgorCisgKiBUaGUgInB1c2guZGVmYXVsdD1zaW1wbGUiIG1vZGUgb2YgImdpdCBwdXNoIiBoYXMgYmVlbiB1cGRhdGVkIHRvCisgICBiZWhhdmUgbGlrZSAiY3VycmVudCIgd2l0aG91dCByZXF1aXJpbmcgYSByZW1vdGUgdHJhY2tpbmcKKyAgIGluZm9ybWF0aW9uLCB3aGVuIHlvdSBwdXNoIHRvIGEgcmVtb3RlIHRoYXQgaXMgZGlmZmVyZW50IGZyb20gd2hlcmUKKyAgIHlvdSBmZXRjaCBmcm9tIChpLmUuIGEgdHJpYW5ndWxhciB3b3JrZmxvdykuCisKKyAqIEhhdmluZyBtdWx0aXBsZSAiZml4dXAhIiBvbiBhIGxpbmUgaW4gdGhlIHJlYmFzZSBpbnN0cnVjdGlvbiBzaGVldAorICAgZGlkIG5vdCB3b3JrIHZlcnkgd2VsbCB3aXRoICJnaXQgcmViYXNlIC1pIC0tYXV0b3NxdWFzaCIuCisKKyAqICJnaXQgbG9nIiBsZWFybmVkIHRoZSAiLS1hdXRob3ItZGF0ZS1vcmRlciIgb3B0aW9uLCB3aXRoIHdoaWNoIHRoZQorICAgb3V0cHV0IGlzIHRvcG9sb2dpY2FsbHkgc29ydGVkIGFuZCBjb21taXRzIGluIHBhcmFsbGVsIGhpc3RvcmllcworICAgYXJlIHNob3duIGludGVybWl4ZWQgdG9nZXRoZXIgYmFzZWQgb24gdGhlIGF1dGhvciB0aW1lc3RhbXAuCisKKyAqIFZhcmlvdXMgc3ViY29tbWFuZHMgb2YgImdpdCBzdWJtb2R1bGUiIHJlZnVzZWQgdG8gcnVuIGZyb20gYW55d2hlcmUKKyAgIG90aGVyIHRoYW4gdGhlIHRvcCBvZiB0aGUgd29ya2luZyB0cmVlIG9mIHRoZSBzdXBlcnByb2plY3QsIGJ1dAorICAgdGhleSBoYXZlIGJlZW4gdGF1Z2h0IHRvIGxldCB5b3UgcnVuIGZyb20gYSBzdWJkaXJlY3RvcnkuCisKKyAqICJnaXQgZGlmZiIgbGVhcm5lZCBhIG1vZGUgdGhhdCBpZ25vcmVzIGh1bmtzIHdob3NlIGNoYW5nZSBjb25zaXN0cworICAgb25seSBvZiBhZGRpdGlvbnMgYW5kIHJlbW92YWxzIG9mIGJsYW5rIGxpbmVzLCB3aGljaCBpcyB0aGUgc2FtZSBhcworICAgImRpZmYgLUIiIChpZ25vcmUgYmxhbmsgbGluZXMpIG9mIEdOVSBkaWZmLgorCisgKiAiZ2l0IHJtIiBnaXZlcyBhIHNpbmdsZSBtZXNzYWdlIGZvbGxvd2VkIGJ5IGxpc3Qgb2YgcGF0aHMgdG8gcmVwb3J0CisgICBtdWx0aXBsZSBwYXRocyB0aGF0IGNhbm5vdCBiZSByZW1vdmVkLgorCisgKiAiZ2l0IHJlYmFzZSIgY2FuIGJlIHRvbGQgd2l0aCAiOi9sb29rIGZvciB0aGlzIHN0cmluZyIgc3ludGF4IGNvbW1pdHMKKyAgIHRvIHJlcGxheSB0aGUgY2hhbmdlcyBvbnRvIGFuZCB3aGVyZSB0aGUgd29yayB0byBiZSByZXBsYXllZCBiZWdpbnMuCisKKyAqIE1hbnkgdHV0b3JpYWxzIHRlYWNoIHVzZXJzIHRvIHNldCAiY29sb3IudWkiIHRvICJhdXRvIiBhcyB0aGUgZmlyc3QKKyAgIHRoaW5nIGFmdGVyIHlvdSBzZXQgInVzZXIubmFtZS9lbWFpbCIgdG8gaW50cm9kdWNlIHlvdXJzZWx2ZXMgdG8KKyAgIEdpdC4gIE5vdyB0aGUgdmFyaWFibGUgZGVmYXVsdHMgdG8gImF1dG8iLgorCisgKiBPbiBDeWd3aW4sICJjeWdzdGFydCIgaXMgbm93IHJlY29nbmlzZWQgYXMgYSBwb3NzaWJsZSB3YXkgdG8gc3RhcnQKKyAgIGEgd2ViIGJyb3dzZXIgKHVzZWQgaW4gImhlbHAgLXciIGFuZCAiaW5zdGF3ZWIiIGFtb25nIG90aGVycykuCisKKyAqICJnaXQgc3RhdHVzIiBsZWFybmVkIHN0YXR1cy5icmFuY2ggYW5kIHN0YXR1cy5zaG9ydCBjb25maWd1cmF0aW9uCisgICB2YXJpYWJsZXMgdG8gdXNlIC0tYnJhbmNoIGFuZCAtLXNob3J0IG9wdGlvbnMgYnkgZGVmYXVsdCAob3ZlcnJpZGUKKyAgIHdpdGggLS1uby1icmFuY2ggYW5kIC0tbm8tc2hvcnQgb3B0aW9ucyBmcm9tIHRoZSBjb21tYW5kIGxpbmUpLgorCisgKiAiZ2l0IGNtZCA8bmFtZT4iLCB3aGVuIDxuYW1lPiBoYXBwZW5zIHRvIGJlIGEgNDAtaGV4IHN0cmluZywKKyAgIGRpcmVjdGx5IHVzZXMgdGhlIDQwLWhleCBzdHJpbmcgYXMgYW4gb2JqZWN0IG5hbWUsIGV2ZW4gaWYgYSByZWYKKyAgICJyZWZzLzxzb21lIGhpZXJhcmNoeT4vPG5hbWU+IiBleGlzdHMuICBUaGlzIGRpc2FtYmlndWF0aW9uIG9yZGVyCisgICBpcyB1bmxpa2VseSB0byBjaGFuZ2UsIGJ1dCB3ZSBzaG91bGQgd2FybiBhYm91dCB0aGUgYW1iaWd1aXR5IGp1c3QKKyAgIGxpa2Ugd2Ugd2FybiB3aGVuIG1vcmUgdGhhbiBvbmUgcmVmcy8gaGllcmFjaGllcyBzaGFyZSB0aGUgc2FtZQorICAgbmFtZS4KKworICogImdpdCByZWJhc2UiIGxlYXJuZWQgIi0tW25vLV1hdXRvc3Rhc2giIG9wdGlvbiB0byBzYXZlIGxvY2FsCisgICBjaGFuZ2VzIGluc3RlYWQgb2YgcmVmdXNpbmcgdG8gcnVuICh0byB3aGljaCBwZW9wbGUncyBub3JtYWwKKyAgIHJlc3BvbnNlIHdhcyB0byBzdGFzaCB0aGVtIGFuZCByZS1ydW4pLiAgVGhpcyBpbnRyb2R1Y2VkIGEgY29ybmVyCisgICBjYXNlIGJyZWFrYWdlIHRvICJnaXQgYW0gLS1hYm9ydCIgYnV0IGl0IGhhcyBiZWVuIGZpeGVkLgorCisgKiBJbnN0ZWFkIG9mIHR5cGluZyBmb3VyIGNhcGl0YWwgbGV0dGVycyAiSEVBRCIsIHlvdSBjYW4gc2F5ICJAIiBub3csCisgICBlLmcuICJnaXQgbG9nIEAiLgorCisgKiAiY2hlY2staWdub3JlIiAobmV3IGZlYXR1cmUgc2luY2UgMS44LjIpIGhhcyBiZWVuIHVwZGF0ZWQgdG8gd29yaworICAgbW9yZSBsaWtlICJjaGVjay1hdHRyIiBvdmVyIGJpZGktcGlwZXMuCisKKyAqICJnaXQgZGVzY3JpYmUiIGxlYXJuZWQgIi0tZmlyc3QtcGFyZW50IiBvcHRpb24gdG8gbGltaXQgaXRzIGNsb3Nlc3QKKyAgIHRhZ2dlZCBjb21taXQgc2VhcmNoIHRvIHRoZSBmaXJzdC1wYXJlbnQgY2hhaW4uCisKKyAqICJnaXQgbWVyZ2UgZm9vIiB0aGF0IG1pZ2h0IGhhdmUgbWVhbnQgImdpdCBtZXJnZSBvcmlnaW4vZm9vIiBpcworICAgZGlhZ25vc2VkIHdpdGggYSBtb3JlIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2UuCisKKyAqICJnaXQgbG9nIC1MPGxpbmU+LDxyYW5nZT46PGZpbGVuYW1lPiIgaGFzIGJlZW4gYWRkZWQuICBUaGlzIG1heQorICAgc3RpbGwgaGF2ZSBsZWFrcyBhbmQgcm91Z2ggZWRnZXMsIHRob3VnaC4KKworICogV2UgdXNlZCB0aGUgYXBwcm94aWRhdGUoKSBwYXJzZXIgZm9yICItLWV4cGlyZT08dGltZXN0YW1wPiIgb3B0aW9ucworICAgb2YgdmFyaW91cyBjb21tYW5kcywgYnV0IGl0IGlzIGJldHRlciB0byB0cmVhdCAtLWV4cGlyZT1hbGwgYW5kCisgICAtLWV4cGlyZT1ub3cgYSBiaXQgbW9yZSBzcGVjaWFsbHkgdGhhbiB1c2luZyB0aGUgY3VycmVudCB0aW1lc3RhbXAuCisgICAiZ2l0IGdjIiBhbmQgImdpdCByZWZsb2ciIGhhdmUgYmVlbiB1cGRhdGVkIHdpdGggYSBuZXcgcGFyc2luZworICAgZnVuY3Rpb24gZm9yIGV4cGlyeSBkYXRlcy4KKworICogVXBkYXRlcyB0byBjb21wbGV0aW9uIChib3RoIGJhc2ggYW5kIHpzaCkgaGVscGVycy4KKworICogVGhlIGJlaGF2aW91ciBvZiB0aGUgIi0tY2hhaW4tcmVwbHktdG8iIG9wdGlvbiBvZiAiZ2l0IHNlbmQtZW1haWwiCisgICBoYXZlIGNoYW5nZWQgYXQgMS43LjAsIGFuZCB3ZSBhZGRlZCBhIHdhcm5pbmcvYWR2aWNlIG1lc3NhZ2UgdG8KKyAgIGhlbHAgdXNlcnMgYWRqdXN0IHRvIHRoZSBuZXcgYmVoYXZpb3VyIGJhY2sgdGhlbiwgYnV0IHdlIGtlcHQgaXQKKyAgIGFyb3VuZCBmb3IgdG9vIGxvbmcuICBUaGUgbWVzc2FnZSBoYXMgZmluYWxseSBiZWVuIHJlbW92ZWQuCisKKyAqICJnaXQgZmV0Y2ggb3JpZ2luIG1hc3RlciIgdW5saWtlICJnaXQgZmV0Y2ggb3JpZ2luIiBvciAiZ2l0IGZldGNoIgorICAgZGlkIG5vdCB1cGRhdGUgInJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIjsgdGhpcyB3YXMgYW4gZWFybHkKKyAgIGRlc2lnbiBkZWNpc2lvbiB0byBrZWVwIHRoZSB1cGRhdGUgb2YgcmVtb3RlIHRyYWNraW5nIGJyYW5jaGVzCisgICBwcmVkaWN0YWJsZSwgYnV0IGluIHByYWN0aWNlIGl0IHR1cm5zIG91dCB0aGF0IHBlb3BsZSBmaW5kIGl0IG1vcmUKKyAgIGNvbnZlbmllbnQgdG8gb3Bwb3J0dW5pc3RpY2FsbHkgdXBkYXRlIHRoZW0gd2hlbmV2ZXIgd2UgaGF2ZSBhCisgICBjaGFuY2UsIGFuZCB3ZSBoYXZlIGJlZW4gdXBkYXRpbmcgdGhlbSB3aGVuIHdlIHJ1biAiZ2l0IHB1c2giIHdoaWNoCisgICBhbHJlYWR5IGJyZWFrcyB0aGUgb3JpZ2luYWwgInByZWRpY3RhYmlsaXR5IiBhbnl3YXkuCisKKyAqIFRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNvcmUuY2hlY2tzdGF0IHdhcyBhZHZlcnRpc2VkIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBidXQgdGhlIGNvZGUgZXhwZWN0ZWQgY29yZS5zdGF0aW5mbyBpbnN0ZWFkLgorICAgRm9yIG5vdywgd2UgYWNjZXB0IGJvdGggY29yZS5jaGVja3N0YXQgYW5kIGNvcmUuc3RhdGluZm8sIGJ1dCB0aGUKKyAgIGxhdHRlciB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGxvbmdlciB0ZXJtLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgZXRjLgorCisgKiBUaGUgZnVuY3Rpb24gYXR0cmlidXRlcyBleHRlbnNpb25zIGFyZSB1c2VkIHRvIGNhdGNoIG1pc3Rha2VzIGluCisgICB1c2Ugb2Ygb3VyIG93biB2YXJpYWRpYyBmdW5jdGlvbnMgdGhhdCB1c2UgTlVMTCBzZW50aW5lbCBhdCB0aGUgZW5kCisgICAoaS5lLiBsaWtlIGV4ZWNsKDMpKSBhbmQgZm9ybWF0IHN0cmluZ3MgKGkuZS4gbGlrZSBwcmludGYoMykpLgorCisgKiBUaGUgY29kZSB0byBhbGxvdyBjb25maWd1cmF0aW9uIGRhdGEgdG8gYmUgcmVhZCBmcm9tIGluLXRyZWUgYmxvYgorICAgb2JqZWN0cyBpcyBpbi4gIFRoaXMgbWF5IGhlbHAgd29ya2luZyBpbiBhIGJhcmUgcmVwb3NpdG9yeSBhbmQKKyAgIHN1Ym1vZHVsZSB1cGRhdGVzLgorCisgKiBGZXRjaGluZyBiZXR3ZWVuIHJlcG9zaXRvcmllcyB3aXRoIG1hbnkgcmVmcyBlbXBsb3llZCBPKG5eMikKKyAgIGFsZ29yaXRobSB0byBtYXRjaCB1cCB0aGUgY29tbW9uIG9iamVjdHMsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIG9yaWdpbmFsIHdheSB0byBzcGVjaWZ5IHJlbW90ZSByZXBvc2l0b3J5IHVzaW5nIC5naXQvYnJhbmNoZXMvCisgICB1c2VkIHRvIGhhdmUgYSBuaWZ0eSBmZWF0dXJlLiAgVGhlIGNvZGUgdG8gc3VwcG9ydCB0aGUgZmVhdHVyZSB3YXMKKyAgIHN0aWxsIGluIGEgZnVuY3Rpb24gYnV0IHRoZSBjYWxsZXIgd2FzIGNoYW5nZWQgbm90IHRvIGNhbGwgaXQgNQorICAgeWVhcnMgYWdvLCBicmVha2luZyB0aGF0IGZlYXR1cmUgYW5kIGxlYXZpbmcgdGhlIHN1cHBvcnRpbmcgY29kZQorICAgdW5yZWFjaGFibGUuICBUaGUgZGVhZCBjb2RlIGhhcyBiZWVuIHJlbW92ZWQuCisKKyAqICJnaXQgcGFjay1yZWZzIiB0aGF0IHJhY2VzIHdpdGggbmV3IHJlZiBjcmVhdGlvbiBvciBkZWxldGlvbiBoYXZlCisgICBiZWVuIHN1c2NlcHRpYmxlIHRvIGxvc3NhZ2Ugb2YgcmVmcyB1bmRlciByaWdodCBjb25kaXRpb25zLCB3aGljaAorICAgaGFzIGJlZW4gdGlnaHRlbmVkIHVwLgorCisgKiBXZSByZWFkIGxvb3NlIGFuZCBwYWNrZWQgcmVyZmVyZW5jZXMgaW4gdHdvIHN0ZXBzLCBidXQgYWZ0ZXIKKyAgIGRlY2lkaW5nIHRvIHJlYWQgYSBsb29zZSByZWYgYnV0IGJlZm9yZSBhY3R1YWxseSBvcGVuaW5nIGl0IHRvIHJlYWQKKyAgIGl0LCBhbm90aGVyIHByb2Nlc3MgcmFjaW5nIHdpdGggdXMgY2FuIHVubGluayBpdCwgd2hpY2ggd291bGQgY2F1c2UKKyAgIHVzIHRvIGJhcmYuICBUaGUgY29kZXBhdGggaGFzIGJlZW4gdXBkYXRlZCB0byByZXRyeSB3aGVuIHN1Y2ggYQorICAgcmFjZSBpcyBkZXRlY3RlZCwgaW5zdGVhZCBvZiBvdXRyaWdodCBmYWlsaW5nLgorCisgKiBVc2VzIG9mIHRoZSBwbGF0Zm9ybSBmbm1hdGNoKDMpIGZ1bmN0aW9uIChtYW55IHBsYWNlcyBpbiB0aGUgY29kZSwKKyAgIG1hdGNoaW5nIHBhdGhzcGVjLCAuZ2l0aWdub3JlIGFuZCAuZ2l0YXR0cmlidXRlcyB0byBuYW1lIGEgZmV3KQorICAgaGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggd2lsZG1hdGNoLCBhbGxvd2luZyAiZm9vLyoqL2JhciIgdGhhdCB3b3VsZAorICAgbWF0Y2ggZm9vL2JhciwgZm9vL2EvYmFyLCBmb28vYS9iL2JhciwgZXRjLgorCisgKiBNZW1vcnkgb3duZXJzaGlwIGFuZCBsaWZldGltZSBydWxlcyBmb3Igd2hhdCBmb3ItZWFjaC1yZWYgZmVlZHMgdG8KKyAgIGl0cyBjYWxsYmFja3MgaGF2ZSBiZWVuIGNsYXJpZmllZCAoaW4gc2hvcnQsICJ5b3UgZG8gbm90IG93biBpdCwgc28KKyAgIG1ha2UgYSBjb3B5IGlmIHlvdSB3YW50IHRvIGtlZXAgaXQiKS4KKworICogVGhlIHJldmlzaW9uIHRyYXZlcnNhbCBsb2dpYyB0byBpbXByb3ZlIGN1bGxpbmcgb2YgaXJyZWxldmFudAorICAgcGFyZW50cyB3aGlsZSB0cmF2ZXJzaW5nIGEgbWVyZ3kgaGlzdG9yeSBoYXMgYmVlbiB1cGRhdGVkLgorCisgKiBTb21lIGxlYWtzIGluIHVucGFjay10cmVlcyAodXNlZCBpbiBtZXJnZSwgY2hlcnJ5LXBpY2sgYW5kIG90aGVyCisgICBjb2RlcGF0aHMpIGhhdmUgYmVlbiBwbHVnZ2VkLgorCisgKiBUaGUgY29kZXBhdGggdG8gcmVhZCBmcm9tIG1hcmtzIGZpbGVzIGluIGZhc3QtaW1wb3J0L2V4cG9ydCBkaWQgbm90CisgICBoYXZlIHRvIGFjY2VwdCBhbnl0aGluZyBidXQgNDAtaGV4IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QKKyAgIG5hbWUuICBGdXJ0aGVyLCBmYXN0LWV4cG9ydCBkaWQgbm90IG5lZWQgZnVsbCBpbi1jb3JlIG9iamVjdAorICAgcmVwcmVzZW50YXRpb24gdG8gaGF2ZSBwYXJzZWQgd2VuIHJlYWRpbmcgZnJvbSB0aGVtLiAgVGhlc2UKKyAgIGNvZGVwYXRocyBoYXZlIGJlZW4gb3B0aW1pemVkIGJ5IHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlc2UgYWNjZXNzCisgICBwYXR0ZXJucy4KKworICogT2JqZWN0IGxvb2t1cCBsb2dpYywgd2hlbiB0aGUgb2JqZWN0IGhhc2h0YWJsZSBzdGFydHMgdG8gYmVjb21lCisgICBjcm93ZGVkLCBoYXMgYmVlbiBvcHRpbWl6ZWQuCisKKyAqIFdoZW4gVEVTVF9PVVRQVVRfRElSRUNUT1JZIHNldHRpbmcgaXMgdXNlZCwgaXQgd2FzIGhhbmRsZWQgc29tZXdoYXQKKyAgIGluY29uc2lzdGVudGx5IGJldHdlZW4gdGhlIHRlc3QgZnJhbWV3b3JrIGFuZCB0L01ha2VmaWxlLCBhbmQgbG9naWMKKyAgIHRvIHN1bW1hcml6ZSB0aGUgcmVzdWx0cyBsb29rZWQgYXQgYSB3cm9uZyBwbGFjZS4KKworICogImdpdCBjbG9uZSIgdXNlcyBhIGxpZ2h0ZXItd2VpZ2h0IGltcGxlbWVudGF0aW9uIHdoZW4gbWFraW5nIHN1cmUKKyAgIHRoYXQgdGhlIGhpc3RvcnkgYmVoaW5kIHJlZnMgYXJlIGNvbXBsZXRlLgorCisgKiBNYW55IHdhcm5pbmdzIGZyb20gc3BhcnNlIHNvdXJjZSBjaGVja2VyIGluIGNvbXBhdC8gYXJlYSBoYXMgYmVlbgorICAgc3F1ZWxjaGVkLgorCisgKiBUaGUgY29kZSB0byByZWFkaW5nIGFuZCB1cGRhdGluZyBwYWNrZWQtcmVmcyBmaWxlIGhhcyBiZWVuIHVwZGF0ZWQsCisgICBjb3JyZWN0aW5nIGNvcm5lciBjYXNlIGJ1Z3MuCisKKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjEuOC4zCistLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2MS44LjMgaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHJlbGVhc2Ugbm90ZXMgdG8gdGhlbSBmb3IKK2RldGFpbHMpLgorCisgKiBOZXdlciBOZXQ6OlNNVFA6OlNTTCBtb2R1bGUgZG9lcyBub3Qgd2FudCB0aGUgdXNlciBwcm9ncmFtcyB0byB1c2UKKyAgIHRoZSBkZWZhdWx0IGJlaGF2aW91ciB0byBsZXQgc2VydmVyIGNlcnRpZmljYXRlIGdvIHdpdGhvdXQKKyAgIHZlcmlmaWNhdGlvbiwgc28gYnkgZGVmYXVsdCBlbmFibGUgdGhlIHZlcmlmaWNhdGlvbiB3aXRoIGEKKyAgIG1lY2hhbmlzbSB0byB0dXJuIGl0IG9mZiBpZiBuZWVkZWQuCisgICAobWVyZ2UgMzUwMzViYiByci9zZW5kLWVtYWlsLXNzbC12ZXJpZnkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaGVuICJnaXQiIGlzIHNwYXduZWQgaW4gc3VjaCBhIHdheSB0aGF0IGFueSBvZiB0aGUgbG93IDMgZmlsZQorICAgZGVzY3JpcHRvcnMgaXMgY2xvc2VkLCBvdXIgZmlyc3Qgb3BlbigpIG1heSB5aWVsZCBmaWxlIGRlc2NyaXB0b3IgMiwKKyAgIGFuZCB3cml0aW5nIGVycm9yIG1lc3NhZ2UgdG8gaXQgd291bGQgc2NyZXcgdGhpbmdzIHVwIGluIGEgYmlnIHdheS4KKyAgIChtZXJnZSBhMTFjMzk2IHRyL3Byb3RlY3QtbG93LTMtZmRzIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIG1haWxtYXAgbWVjaGFuaXNtIHVubmVjZXNzYXJpbHkgZG93bmNhc2VkIHRoZSBlLW1haWwgYWRkcmVzc2VzCisgICBpbiB0aGUgb3V0cHV0LCBhbmQgYWxzbyBpZ25vcmVkIHRoZSBodW1hbiBuYW1lIHdoZW4gaXQgaXMgYSBzaW5nbGUKKyAgIGNoYXJhY3RlciBuYW1lLgorICAgKG1lcmdlIGJkMjM3OTQgamMvbWFpbG1hcC1jYXNlLWluc2Vuc2l0aXZpdHkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBJbiB0d28gcGxhY2VzIHdlIGRpZCBub3QgY2hlY2sgcmV0dXJuIHZhbHVlIChleHBlY3RlZCB0byBiZSBhIGZpbGUKKyAgIGRlc2NyaXB0b3IpIGNvcnJlY3RseS4KKyAgIChtZXJnZSBhNzdmMTA2IHRyL2ZkLWdvdGNoYS1maXhlcyBsYXRlciB0byBtYWludCkuCisKKyAqIExvZ2ljIHRvIGF1dG8tZGV0ZWN0IGNoYXJhY3RlciBlbmNvZGluZ3MgaW4gdGhlIGNvbW1pdCBsb2cgbWVzc2FnZQorICAgZGlkIG5vdCByZWplY3Qgb3ZlcmxvbmcgYW5kIGludmFsaWQgVVRGLTggY2hhcmFjdGVycy4KKyAgIChtZXJnZSA4MTA1MGFjIGJjL2NvbW1pdC1pbnZhbGlkLXV0ZjggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBQYXNzIHBvcnQgbnVtYmVyIGFzIGEgc2VwYXJhdGUgYXJndW1lbnQgd2hlbiAic2VuZC1lbWFpbCIgaW5pdGlhbGl6ZXMKKyAgIE5ldDo6U01UUCwgaW5zdGVhZCBvZiBhcyBhIHBhcnQgb2YgdGhlIGhvc3RuYW1lLCBpLmUuIGhvc3Q6cG9ydC4KKyAgIFRoaXMgYWxsb3dzIEdTU0FQSSBjb2RlcGF0aCB0byBtYXRjaCB3aXRoIHRoZSBob3N0bmFtZSBnaXZlbi4KKyAgIChtZXJnZSAxYTc0MWJmIGJjL3NlbmQtZW1haWwtdXNlLXBvcnQtYXMtc2VwYXJhdGUtcGFyYW0gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRpZmYiIHJlZnVzZWQgdG8gZXZlbiBzaG93IGRpZmZlcmVuY2Ugd2hlbiBjb3JlLnNhZmVjcmxmIGlzCisgICBzZXQgdG8gdHJ1ZSAoaS5lLiBlcnJvciBvdXQpIGFuZCB0aGVyZSBhcmUgb2ZmZW5kaW5nIGxpbmVzIGluIHRoZQorICAgd29ya2luZyB0cmVlIGZpbGVzLgorICAgKG1lcmdlIDU0MzBiYjIgamMvbWFpbnQtZGlmZi1jb3JlLXNhZmVjcmxmIGxhdGVyIHRvIG1haW50KS4KKworICogQSB0ZXN0IHRoYXQgc2hvdWxkIGhhdmUgZmFpbGVkIGJ1dCBkaWRuJ3QgcmV2ZWFsZWQgYSBidWcgdGhhdCBuZWVkcworICAgdG8gYmUgY29ycmVjdGVkLgorICAgKG1lcmdlIDk0ZDc1ZDEgamMvdDE1MTItZml4IGxhdGVyIHRvIG1haW50KS4KKworICogQW4gb3ZlcmxvbmcgcGF0aCB0byBhIC5naXQgZGlyZWN0b3J5IG1heSBoYXZlIG92ZXJmbG93biB0aGUKKyAgIHRlbXBvcmFyeSBwYXRoIGJ1ZmZlciB1c2VkIHRvIGNyZWF0ZSBhIG5hbWUgZm9yIGxvY2tmaWxlcy4KKyAgIChtZXJnZSAyZmJkNGY5IG1oL21haW50LWxvY2tmaWxlLW92ZXJmbG93IGxhdGVyIHRvIG1haW50KS4KKworICogSW52b2NhdGlvbnMgb2YgImdpdCBjaGVja291dCIgdXNlZCBpbnRlcm5hbGx5IGJ5ICJnaXQgcmViYXNlIiB3ZXJlCisgICBjb3VudGVkIGFzICJjaGVja291dCIsIGFuZCBhZmZlY3RlZCBsYXRlciAiZ2l0IGNoZWNrb3V0IC0iIHRvIHRoZQorICAgdGhlIHVzZXIgdG8gYW4gdW5leHBlY3RlZCBwbGFjZS4KKyAgIChtZXJnZSAzYmVkMjkxIHJyL3JlYmFzZS1jaGVja291dC1yZWZsb2cgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHN0YXNoIHNhdmUiLCB3aGVuIHlvdXIgbG9jYWwgY2hhbmdlIHR1cm5zIGEgdHJhY2tlZCBmaWxlIGludG8KKyAgIGEgZGlyZWN0b3J5LCBoYXMgdG8gcmVtb3ZlIGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5IGluIG9yZGVyIHRvCisgICByZXZlcnQgeW91ciB3b3JraW5nIHRyZWUgdG8gYSBwcmlzdGluZSBzdGF0ZS4gIFRoaXMgd2lsbCBsb3NlCisgICB1bnRyYWNrZWQgZmlsZXMgaW4gc3VjaCBhIGRpcmVjdG9yeSwgYW5kIHRoZSBjb21tYW5kIG5vdyByZXF1aXJlcworICAgeW91IHRvICItLWZvcmNlIiBpdC4KKworICogVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY29sdW1uLnVpIHdhcyBwb29ybHkgZG9jdW1lbnRlZC4KKyAgIChtZXJnZSA1ZTYyY2MxIHJyL2NvbHVtbi1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IG5hbWUtcmV2IC0tcmVmcz10YWdzL3YqIiB3ZXJlIGZvcmJpZGRlbiwgd2hpY2ggd2FzIGEgYml0CisgICBpbmNvbnZlbmllbnQgKHlvdSBoYWQgdG8gZ2l2ZSBhIHBhdHRlcm4gdG8gbWF0Y2ggcmVmcyBmdWxseSwgbGlrZQorICAgLS1yZWZzPXJlZnMvdGFncy92KikuCisgICAobWVyZ2UgOThjNWM0YSBuay9uYW1lLXJldi1hYmJyZXZpYXRlZC1yZWZzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBhcHBseSIgcGFyc2VkIHBhdGNoZXMgdGhhdCBhZGQgbmV3IGZpbGVzLCBnZW5lcmF0ZWQgYnkKKyAgIHByb2dyYW1zIG90aGVyIHRoYW4gR2l0LCBpbmNvcnJlY3RseS4gIFRoaXMgaXMgYW4gb2xkIGJyZWFrYWdlIGluCisgICB2MS43LjExIGFuZCB3aWxsIG5lZWQgdG8gYmUgbWVyZ2VkIGRvd24gdG8gdGhlIG1haW50YW5hbmNlIHRyYWNrcy4KKworICogT2xkZXIgY1VSTCB3YW50ZWQgcGllY2Ugb2YgbWVtb3J5IHdlIGNhbGwgaXQgd2l0aCB0byBiZSBzdGFibGUsIGJ1dAorICAgd2UgdXBkYXRlZCB0aGUgYXV0aCBtYXRlcmlhbCBhZnRlciBoYW5kaW5nIGl0IHRvIGEgY2FsbC4KKworICogImdpdCBwdWxsIiBpbnRvIG5vdGhpbmcgdHJhc2hlZCAibG9jYWwgY2hhbmdlcyIgdGhhdCB3ZXJlIGluIHRoZQorICAgaW5kZXgsIGFuZCB0aGlzIGF2b2lkcyBpdC4KKworICogTWFueSAiZ2l0IHN1Ym1vZHVsZSIgb3BlcmF0aW9ucyBkbyBub3Qgd29yayBvbiBhIHN1Ym1vZHVsZSBhdCBhCisgICBwYXRoIHdob3NlIG5hbWUgaXMgbm90IGluIEFTQ0lJLgorCisgKiAiY2hlcnJ5LXBpY2siIGhhZCBhIHNtYWxsIGxlYWsgaW4gYW4gZXJyb3IgY29kZXBhdGguCisKKyAqIExvZ2ljIHVzZWQgYnkgZ2l0LXNlbmQtZW1haWwgdG8gc3VwcHJlc3MgY2MgbWlzaGFuZGxlZCBuYW1lcyBsaWtlCisgICAiQSBVLiBUaG9yIiA8YXV0aG9yQGV4YW1wbGUueHo+LCB3aGVyZSB0aGUgaHVtYW4gcmVhZGFibGUgcGFydAorICAgbmVlZHMgdG8gYmUgcXVvdGVkICh0aGUgdXNlciBpbnB1dCBtYXkgbm90IGhhdmUgdGhlIGRvdWJsZSBxdW90ZXMKKyAgIGFyb3VuZCB0aGUgbmFtZSwgYW5kIGNvbXBhcmlzb24gd2FzIGRvbmUgYmV0d2VlbiBxdW90ZWQgYW5kCisgICB1bnF1b3RlZCBzdHJpbmdzKS4gIEl0IGFsc28gbWlzaGFuZGxlZCBuYW1lcyB0aGF0IG5lZWQgUkZDMjA0NworICAgcXVvdGluZy4KKworICogQ2FsbCB0byBkaXNjYXJkX2NhY2hlL2Rpc2NhcmRfaW5kZXggKHVzZWQgd2hlbiB3ZSB1c2UgZGlmZmVyZW50CisgICBjb250ZW50cyBvZiB0aGUgaW5kZXggaW4tY29yZSwgaW4gbWFueSBvcGVyYXRpb25zIGxpa2UgY29tbWl0LAorICAgYXBwbHksIGFuZCBtZXJnZSkgdXNlZCB0byBsZWFrIG1lbW9yeSB0aGF0IGhlbGQgdGhlIGFycmF5IG9mIGluZGV4CisgICBlbnRyaWVzLCB3aGljaCBoYXMgYmVlbiBwbHVnZ2VkLgorICAgKG1lcmdlIGEwZmM0ZGIgcnMvZGlzY2FyZC1pbmRleC1kaXNjYXJkLWFycmF5IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdHdlYiIgZm9yZ290IHRvIGNsZWFyIGEgZ2xvYmFsIHZhcmlhYmxlICRzZWFyY2hfcmVnZXhwIHVwb24gZWFjaAorICAgcmVxdWVzdCwgbWlzdGFrZW5seSBjYXJyeWluZyBvdmVyIHRoZSBwcmV2aW91cyBzZWFyY2ggdG8gYSBuZXcgb25lCisgICB3aGVuIHVzZWQgYXMgYSBwZXJzaXN0ZW50IENHSS4KKworICogVGhlIHdpbGRtYXRjaCBlbmdpbmUgZGlkIG5vdCBob25vciBXTV9DQVNFRk9MRCBvcHRpb24gY29ycmVjdGx5LgorCisgKiAiZ2l0IGxvZyAtYyAtLWZvbGxvdyAkcGF0aCIgc2VnZmF1bHRlZCB1cG9uIGhpdHRpbmcgdGhlIGNvbW1pdCB0aGF0CisgICByZW5hbWVkIHRoZSAkcGF0aCBiZWluZyBmb2xsb3dlZC4KKworICogV2hlbiBhIHJlZmxvZyBub3RhdGlvbiBpcyB1c2VkIGZvciBpbXBsaWNpdCAiY3VycmVudCBicmFuY2giLCB3ZQorICAgZGlkIG5vdCBzYXkgd2hpY2ggYnJhbmNoIGFuZCB3b3JzZSBzYWlkICJicmFuY2ggJyciLgorCisgKiAiZGlmZnRvb2wgLS1kaXItZGlmZiIgZGlkIG5vdCBjb3B5IGJhY2sgY2hhbmdlcyBtYWRlIGJ5IHRoZQorICAgZW5kLXVzZXIgaW4gdGhlIGRpZmYgdG9vbCBiYWNrZW5kIHRvIHRoZSB3b3JraW5nIHRyZWUgaW4gc29tZQorICAgY2FzZXMuCisKKyAqICJnaXQgcHVzaCAkdGhlcmUgSEVBRDpicmFuY2giIGRpZCBub3QgcmVzb2x2ZSBIRUFEIGVhcmx5IGVub3VnaCwgc28KKyAgIGl0IHdhcyBlYXN5IHRvIGZsaXAgaXQgYXJvdW5kIHdoaWxlIHB1c2ggaXMgc3RpbGwgZ29pbmcgb24gYW5kIHB1c2gKKyAgIG91dCBhIGJyYW5jaCB0aGF0IHRoZSB1c2VyIGRpZCBub3Qgb3JpZ2luYWxseSBpbnRlbmRlZCB3aGVuIHRoZQorICAgY29tbWFuZCB3YXMgc3RhcnRlZC4KKworICogVGhlIGJhc2ggcHJvbXB0IGNvZGUgKGluIGNvbnRyaWIvKSBkaXNwbGF5ZWQgdGhlIG5hbWUgb2YgdGhlIGJyYW5jaAorICAgYmVpbmcgcmViYXNlZCB3aGVuICJyZWJhc2UgLWkvLW0vLXAiIG1vZGVzIGFyZSBpbiB1c2UsIGJ1dCBub3QgdGhlCisgICBwbGFpbiB2YW5pbGxhICJyZWJhc2UiLgorCisgKiBIYW5kbGluZyBvZiBuZWdhdGl2ZSBleGNsdWRlIHBhdHRlcm4gZm9yIGRpcmVjdG9yaWVzICIhZGlyIiB3YXMKKyAgIGJyb2tlbiBpbiB0aGUgdXBkYXRlIHRvIHYxLjguMy4KKworICogenNoIHByb21wdCBzY3JpcHQgdGhhdCBib3Jyb3dlZCBmcm9tIGJhc2ggcHJvbXB0IHNjcmlwdCBkaWQgbm90CisgICB3b3JrIGR1ZSB0byBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gYXJyYXkgdmFyaWFibGUgbm90YXRpb24gYmV0d2VlbgorICAgdGhlc2UgdHdvIHNoZWxscy4KKworICogQW4gZW50cnkgZm9yICJmaWxlOi8vIiBzY2hlbWUgaW4gdGhlIGVudW1lcmF0aW9uIG9mIFVSTCB0eXBlcyBHaXQKKyAgIGNhbiB0YWtlIGluIHRoZSBIVE1MIGRvY3VtZW50YXRpb24gd2FzIG1hZGUgaW50byBhIGNsaWNrYWJsZSBsaW5rCisgICBieSBtaXN0YWtlLgorCisgKiAiZ2l0IHB1c2ggLS1bbm8tXXZlcmlmeSIgd2FzIG5vdCBkb2N1bWVudGVkLgorCisgKiBTdG9wIGluc3RhbGxpbmcgdGhlIGdpdC1yZW1vdGUtdGVzdHB5IHNjcmlwdCB0aGF0IGlzIG9ubHkgdXNlZCBmb3IKKyAgIHRlc3RpbmcuCisKKyAqICJnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHktbWVzc2FnZSAtbSAnJyIgc2hvdWxkIG5vdCBzdGFydCBhbgorICAgZWRpdG9yLgorCisgKiAiZ2l0IG1lcmdlIEB7LTF9fjIyIiB3YXMgcmV3cml0dGVuIHRvICJnaXQgbWVyZ2UgZnJvdHpAezF9fjIyIgorICAgaW5jb3JyZWN0bHkgd2hlbiB5b3VyIHByZXZpb3VzIGJyYW5jaCB3YXMgImZyb3R6IiAoaXQgc2hvdWxkIGJlCisgICByZXdyaXR0ZW4gdG8gImdpdCBtZXJnZSBmcm90en4yMiIgaW5zdGVhZCkuCisKKyAqICJnaXQgZGlmZiAtYyAtcCIgd2FzIG5vdCBzaG93aW5nIGEgZGVsZXRlZCBsaW5lIGZyb20gYSBodW5rIHdoZW4KKyAgIGFub3RoZXIgaHVuayBpbW1lZGlhdGVseSBiZWdpbnMgd2hlcmUgdGhlIGVhcmxpZXIgb25lIGVuZHMuCisKKyAqICJnaXQgbG9nIC0tYW5jZXN0cnktcGF0aCBBLi4uQiIgZGlkIG5vdCB3b3JrIGFzIGV4cGVjdGVkLCBhcyBpdCBkaWQKKyAgIG5vdCBwYXkgYXR0ZW50aW9uIHRvIHRoZSBmYWN0IHRoYXQgdGhlIG1lcmdlIGJhc2UgYmV0d2VlbiBBIGFuZCBCCisgICB3YXMgdGhlIGJvdHRvbSBvZiB0aGUgcmFuZ2UgYmVpbmcgc3BlY2lmaWVkLgorCisgKiBNYWMgT1MgWCBkb2VzIG5vdCBsaWtlIHRvIHdyaXRlKDIpIG1vcmUgdGhhbiBJTlRfTUFYIG51bWJlciBvZgorICAgYnl0ZXM7IHdvcmsgaXQgYXJvdW5kIGJ5IGNob3BwaW5nIHdyaXRlKDIpIGludG8gc21hbGxlciBwaWVjZXMuCisKKyAqIE5ld2VyIE1hY09TIFggZW5jb3VyYWdlcyB0aGUgcHJvZ3JhbXMgdG8gY29tcGlsZSBhbmQgbGluayB3aXRoCisgICB0aGVpciBDb21tb25DcnlwdG8sIG5vdCB3aXRoIE9wZW5TU0wuCisKKyAqICJnaXQgY2xvbmUgZm9vL2JhcjpiYXoiIGNhbm5vdCBiZSBhIHJlcXVlc3QgdG8gY2xvbmUgZnJvbSBhIHJlbW90ZQorICAgb3ZlciBnaXQtb3Zlci1zc2ggc3BlY2lmaWVkIGluIHRoZSBzY3Agc3R5bGUuICBUaGlzIGNhc2UgaXMgbm93CisgICBkZXRlY3RlZCBhbmQgY2xvbmVzIGZyb20gYSBsb2NhbCByZXBvc2l0b3J5IGF0ICJmb28vYmFyOmJheiIuCisKKyAqIFdoZW4gJEhPTUUgaXMgbWlzY29uZmlndXJlZCB0byBwb2ludCBhdCBhbiB1bnJlYWRhYmxlIGRpcmVjdG9yeSwgd2UKKyAgIHVzZWQgdG8gY29tcGxhaW4gYW5kIGRpZS4gTG9vc2VuIHRoZSBjaGVjay4KKworICogImdpdCBzdWJ0cmVlIiAoaW4gY29udHJpYi8pIGhhZCBvbmUgY29kZXBhdGggd2l0aCBsb29zZSBlcnJvcgorICAgY2hlY2tzIHRvIGxvc2UgZGF0YSBhdCB0aGUgcmVtb3RlIHNpZGUuCisKKyAqICJnaXQgZmV0Y2giIGludG8gYSBzaGFsbG93IHJlcG9zaXRvcnkgZnJvbSBhIHJlcG9zaXRvcnkgdGhhdCBkb2VzCisgICBub3Qga25vdyBhYm91dCB0aGUgc2hhbGxvdyBib3VuZGFyeSBjb21taXRzIChlLmcuIGEgZGlmZmVyZW50IGZvcmsKKyAgIGZyb20gdGhlIHJlcG9zaXRvcnkgdGhlIGN1cnJlbnQgc2hhbGxvdyByZXBvc2l0b3J5IHdhcyBjbG9uZWQgZnJvbSkKKyAgIGRpZCBub3Qgd29yayBjb3JyZWN0bHkuCisKKyAqICJnaXQgY2hlY2tvdXQgZm9vIiBEV0lNcyB0aGUgaW50ZW5kZWQgInVwc3RyZWFtIiBhbmQgdHVybnMgaXQgaW50bworICAgImdpdCBjaGVja291dCAtdCAtYiBmb28gcmVtb3Rlcy9vcmlnaW4vZm9vIi4gVGhpcyBjb2RlcGF0aCBoYXMgYmVlbgorICAgdXBkYXRlZCB0byBjb3JyZWN0bHkgdGFrZSBleGlzdGluZyByZW1vdGUgZGVmaW5pdGlvbnMgaW50byBhY2NvdW50LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibGFtZS1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vYmxhbWUtb3B0aW9ucy50eHQKaW5kZXggYjBkMzFkZi4uNGU1NWIxNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ibGFtZS1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2JsYW1lLW9wdGlvbnMudHh0CkBAIC0xMCwyNyArMTAsMTQgQEAKIAlJbmNsdWRlIGFkZGl0aW9uYWwgc3RhdGlzdGljcyBhdCB0aGUgZW5kIG9mIGJsYW1lIG91dHB1dC4KIAogLUwgPHN0YXJ0Piw8ZW5kPjo6Ci0JQW5ub3RhdGUgb25seSB0aGUgZ2l2ZW4gbGluZSByYW5nZS4gIDxzdGFydD4gYW5kIDxlbmQ+IGNhbiB0YWtlCi0Jb25lIG9mIHRoZXNlIGZvcm1zOgorLUwgOjxyZWdleD46OgorCUFubm90YXRlIG9ubHkgdGhlIGdpdmVuIGxpbmUgcmFuZ2UuICA8c3RhcnQ+IGFuZCA8ZW5kPiBhcmUgb3B0aW9uYWwuCisJYGAtTCA8c3RhcnQ+Jycgb3IgYGAtTCA8c3RhcnQ+LCcnIHNwYW5zIGZyb20gPHN0YXJ0PiB0byBlbmQgb2YgZmlsZS4KKwlgYC1MICw8ZW5kPicnIHNwYW5zIGZyb20gc3RhcnQgb2YgZmlsZSB0byA8ZW5kPi4KKysKKzxzdGFydD4gYW5kIDxlbmQ+IGNhbiB0YWtlIG9uZSBvZiB0aGVzZSBmb3JtczoKIAotCS0gbnVtYmVyCi0rCi1JZiA8c3RhcnQ+IG9yIDxlbmQ+IGlzIGEgbnVtYmVyLCBpdCBzcGVjaWZpZXMgYW4KLWFic29sdXRlIGxpbmUgbnVtYmVyIChsaW5lcyBjb3VudCBmcm9tIDEpLgotKwotCi0tIC9yZWdleC8KLSsKLVRoaXMgZm9ybSB3aWxsIHVzZSB0aGUgZmlyc3QgbGluZSBtYXRjaGluZyB0aGUgZ2l2ZW4KLVBPU0lYIHJlZ2V4LiAgSWYgPGVuZD4gaXMgYSByZWdleCwgaXQgd2lsbCBzZWFyY2gKLXN0YXJ0aW5nIGF0IHRoZSBsaW5lIGdpdmVuIGJ5IDxzdGFydD4uCi0rCi0KLS0gK29mZnNldCBvciAtb2Zmc2V0Ci0rCi1UaGlzIGlzIG9ubHkgdmFsaWQgZm9yIDxlbmQ+IGFuZCB3aWxsIHNwZWNpZnkgYSBudW1iZXIKLW9mIGxpbmVzIGJlZm9yZSBvciBhZnRlciB0aGUgbGluZSBnaXZlbiBieSA8c3RhcnQ+LgotKworaW5jbHVkZTo6bGluZS1yYW5nZS1mb3JtYXQudHh0W10KIAogLWw6OgogCVNob3cgbG9uZyByZXYgKERlZmF1bHQ6IG9mZikuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQKaW5kZXggNmU1M2ZjNS4uZTBiOTIzZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb25maWcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnLnR4dApAQCAtMTk5LDYgKzE5OSw5IEBACiAJYW1Xb3JrRGlyOjoKIAkJQWR2aWNlIHRoYXQgc2hvd3MgdGhlIGxvY2F0aW9uIG9mIHRoZSBwYXRjaCBmaWxlIHdoZW4KIAkJbGlua2dpdDpnaXQtYW1bMV0gZmFpbHMgdG8gYXBwbHkgaXQuCisJcm1IaW50czo6CisJCUluIGNhc2Ugb2YgZmFpbHVyZSBpbiB0aGUgb3V0cHV0IG9mIGxpbmtnaXQ6Z2l0LXJtWzFdLAorCQlzaG93IGRpcmVjdGlvbnMgb24gaG93IHRvIHByb2NlZWQgZnJvbSB0aGUgY3VycmVudCBzdGF0ZS4KIC0tCiAKIGNvcmUuZmlsZU1vZGU6OgpAQCAtODc2LDE2ICs4NzksMTcgQEAKIAogY29sb3IuaW50ZXJhY3RpdmU6OgogCVdoZW4gc2V0IHRvIGBhbHdheXNgLCBhbHdheXMgdXNlIGNvbG9ycyBmb3IgaW50ZXJhY3RpdmUgcHJvbXB0cwotCWFuZCBkaXNwbGF5cyAoc3VjaCBhcyB0aG9zZSB1c2VkIGJ5ICJnaXQtYWRkIC0taW50ZXJhY3RpdmUiKS4KLQlXaGVuIGZhbHNlIChvciBgbmV2ZXJgKSwgbmV2ZXIuICBXaGVuIHNldCB0byBgdHJ1ZWAgb3IgYGF1dG9gLCB1c2UKLQljb2xvcnMgb25seSB3aGVuIHRoZSBvdXRwdXQgaXMgdG8gdGhlIHRlcm1pbmFsLiBEZWZhdWx0cyB0byBmYWxzZS4KKwlhbmQgZGlzcGxheXMgKHN1Y2ggYXMgdGhvc2UgdXNlZCBieSAiZ2l0LWFkZCAtLWludGVyYWN0aXZlIiBhbmQKKwkiZ2l0LWNsZWFuIC0taW50ZXJhY3RpdmUiKS4gV2hlbiBmYWxzZSAob3IgYG5ldmVyYCksIG5ldmVyLgorCVdoZW4gc2V0IHRvIGB0cnVlYCBvciBgYXV0b2AsIHVzZSBjb2xvcnMgb25seSB3aGVuIHRoZSBvdXRwdXQgaXMKKwl0byB0aGUgdGVybWluYWwuIERlZmF1bHRzIHRvIGZhbHNlLgogCiBjb2xvci5pbnRlcmFjdGl2ZS48c2xvdD46OgotCVVzZSBjdXN0b21pemVkIGNvbG9yIGZvciAnZ2l0IGFkZCAtLWludGVyYWN0aXZlJwotCW91dHB1dC4gYDxzbG90PmAgbWF5IGJlIGBwcm9tcHRgLCBgaGVhZGVyYCwgYGhlbHBgIG9yIGBlcnJvcmAsIGZvcgotCWZvdXIgZGlzdGluY3QgdHlwZXMgb2Ygbm9ybWFsIG91dHB1dCBmcm9tIGludGVyYWN0aXZlCi0JY29tbWFuZHMuICBUaGUgdmFsdWVzIG9mIHRoZXNlIHZhcmlhYmxlcyBtYXkgYmUgc3BlY2lmaWVkIGFzCi0JaW4gY29sb3IuYnJhbmNoLjxzbG90Pi4KKwlVc2UgY3VzdG9taXplZCBjb2xvciBmb3IgJ2dpdCBhZGQgLS1pbnRlcmFjdGl2ZScgYW5kICdnaXQgY2xlYW4KKwktLWludGVyYWN0aXZlJyBvdXRwdXQuIGA8c2xvdD5gIG1heSBiZSBgcHJvbXB0YCwgYGhlYWRlcmAsIGBoZWxwYAorCW9yIGBlcnJvcmAsIGZvciBmb3VyIGRpc3RpbmN0IHR5cGVzIG9mIG5vcm1hbCBvdXRwdXQgZnJvbQorCWludGVyYWN0aXZlIGNvbW1hbmRzLiAgVGhlIHZhbHVlcyBvZiB0aGVzZSB2YXJpYWJsZXMgbWF5IGJlCisJc3BlY2lmaWVkIGFzIGluIGNvbG9yLmJyYW5jaC48c2xvdD4uCiAKIGNvbG9yLnBhZ2VyOjoKIAlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgY29sb3JlZCBvdXRwdXQgd2hlbiB0aGUgcGFnZXIgaXMgaW4KQEAgLTkxOSwxNyArOTIzLDIxIEBACiAJYXMgYGNvbG9yLmRpZmZgIGFuZCBgY29sb3IuZ3JlcGAgdGhhdCBjb250cm9sIHRoZSB1c2Ugb2YgY29sb3IKIAlwZXIgY29tbWFuZCBmYW1pbHkuIEl0cyBzY29wZSB3aWxsIGV4cGFuZCBhcyBtb3JlIGNvbW1hbmRzIGxlYXJuCiAJY29uZmlndXJhdGlvbiB0byBzZXQgYSBkZWZhdWx0IGZvciB0aGUgYC0tY29sb3JgIG9wdGlvbi4gIFNldCBpdAotCXRvIGBhbHdheXNgIGlmIHlvdSB3YW50IGFsbCBvdXRwdXQgbm90IGludGVuZGVkIGZvciBtYWNoaW5lCi0JY29uc3VtcHRpb24gdG8gdXNlIGNvbG9yLCB0byBgdHJ1ZWAgb3IgYGF1dG9gIGlmIHlvdSB3YW50IHN1Y2gKLQlvdXRwdXQgdG8gdXNlIGNvbG9yIHdoZW4gd3JpdHRlbiB0byB0aGUgdGVybWluYWwsIG9yIHRvIGBmYWxzZWAgb3IKLQlgbmV2ZXJgIGlmIHlvdSBwcmVmZXIgR2l0IGNvbW1hbmRzIG5vdCB0byB1c2UgY29sb3IgdW5sZXNzIGVuYWJsZWQKLQlleHBsaWNpdGx5IHdpdGggc29tZSBvdGhlciBjb25maWd1cmF0aW9uIG9yIHRoZSBgLS1jb2xvcmAgb3B0aW9uLgorCXRvIGBmYWxzZWAgb3IgYG5ldmVyYCBpZiB5b3UgcHJlZmVyIEdpdCBjb21tYW5kcyBub3QgdG8gdXNlCisJY29sb3IgdW5sZXNzIGVuYWJsZWQgZXhwbGljaXRseSB3aXRoIHNvbWUgb3RoZXIgY29uZmlndXJhdGlvbgorCW9yIHRoZSBgLS1jb2xvcmAgb3B0aW9uLiBTZXQgaXQgdG8gYGFsd2F5c2AgaWYgeW91IHdhbnQgYWxsCisJb3V0cHV0IG5vdCBpbnRlbmRlZCBmb3IgbWFjaGluZSBjb25zdW1wdGlvbiB0byB1c2UgY29sb3IsIHRvCisJYHRydWVgIG9yIGBhdXRvYCAodGhpcyBpcyB0aGUgZGVmYXVsdCBzaW5jZSBHaXQgMS44LjQpIGlmIHlvdQorCXdhbnQgc3VjaCBvdXRwdXQgdG8gdXNlIGNvbG9yIHdoZW4gd3JpdHRlbiB0byB0aGUgdGVybWluYWwuCiAKIGNvbHVtbi51aTo6CiAJU3BlY2lmeSB3aGV0aGVyIHN1cHBvcnRlZCBjb21tYW5kcyBzaG91bGQgb3V0cHV0IGluIGNvbHVtbnMuCiAJVGhpcyB2YXJpYWJsZSBjb25zaXN0cyBvZiBhIGxpc3Qgb2YgdG9rZW5zIHNlcGFyYXRlZCBieSBzcGFjZXMKIAlvciBjb21tYXM6CiArCitUaGVzZSBvcHRpb25zIGNvbnRyb2wgd2hlbiB0aGUgZmVhdHVyZSBzaG91bGQgYmUgZW5hYmxlZAorKGRlZmF1bHRzIHRvICduZXZlcicpOgorKwogLS0KIGBhbHdheXNgOzsKIAlhbHdheXMgc2hvdyBpbiBjb2x1bW5zCkBAIC05MzcsMjQgKzk0NSwzOSBAQAogCW5ldmVyIHNob3cgaW4gY29sdW1ucwogYGF1dG9gOzsKIAlzaG93IGluIGNvbHVtbnMgaWYgdGhlIG91dHB1dCBpcyB0byB0aGUgdGVybWluYWwKKy0tCisrCitUaGVzZSBvcHRpb25zIGNvbnRyb2wgbGF5b3V0IChkZWZhdWx0cyB0byAnY29sdW1uJykuICBTZXR0aW5nIGFueQorb2YgdGhlc2UgaW1wbGllcyAnYWx3YXlzJyBpZiBub25lIG9mICdhbHdheXMnLCAnbmV2ZXInLCBvciAnYXV0bycgYXJlCitzcGVjaWZpZWQuCisrCistLQogYGNvbHVtbmA7OwotCWZpbGwgY29sdW1ucyBiZWZvcmUgcm93cyAoZGVmYXVsdCkKKwlmaWxsIGNvbHVtbnMgYmVmb3JlIHJvd3MKIGByb3dgOzsKIAlmaWxsIHJvd3MgYmVmb3JlIGNvbHVtbnMKIGBwbGFpbmA7OwogCXNob3cgaW4gb25lIGNvbHVtbgorLS0KKysKK0ZpbmFsbHksIHRoZXNlIG9wdGlvbnMgY2FuIGJlIGNvbWJpbmVkIHdpdGggYSBsYXlvdXQgb3B0aW9uIChkZWZhdWx0cwordG8gJ25vZGVuc2UnKToKKysKKy0tCiBgZGVuc2VgOzsKIAltYWtlIHVuZXF1YWwgc2l6ZSBjb2x1bW5zIHRvIHV0aWxpemUgbW9yZSBzcGFjZQogYG5vZGVuc2VgOzsKIAltYWtlIGVxdWFsIHNpemUgY29sdW1ucwogLS0KLSsKLVRoaXMgb3B0aW9uIGRlZmF1bHRzIHRvICduZXZlcicuCiAKIGNvbHVtbi5icmFuY2g6OgogCVNwZWNpZnkgd2hldGhlciB0byBvdXRwdXQgYnJhbmNoIGxpc3RpbmcgaW4gYGdpdCBicmFuY2hgIGluIGNvbHVtbnMuCiAJU2VlIGBjb2x1bW4udWlgIGZvciBkZXRhaWxzLgogCitjb2x1bW4uY2xlYW46OgorCVNwZWNpZnkgdGhlIGxheW91dCB3aGVuIGxpc3QgaXRlbXMgaW4gYGdpdCBjbGVhbiAtaWAsIHdoaWNoIGFsd2F5cworCXNob3dzIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBpbiBjb2x1bW5zLiBTZWUgYGNvbHVtbi51aWAgZm9yIGRldGFpbHMuCisKIGNvbHVtbi5zdGF0dXM6OgogCVNwZWNpZnkgd2hldGhlciB0byBvdXRwdXQgdW50cmFja2VkIGZpbGVzIGluIGBnaXQgc3RhdHVzYCBpbiBjb2x1bW5zLgogCVNlZSBgY29sdW1uLnVpYCBmb3IgZGV0YWlscy4KQEAgLTE4MjYsMzkgKzE4NDksNTkgQEAKIAlUaGUgZGVmYXVsdCBtZXJnZSBzdHJhdGVneSB0byB1c2Ugd2hlbiBwdWxsaW5nIGEgc2luZ2xlIGJyYW5jaC4KIAogcHVzaC5kZWZhdWx0OjoKLQlEZWZpbmVzIHRoZSBhY3Rpb24gYGdpdCBwdXNoYCBzaG91bGQgdGFrZSBpZiBubyByZWZzcGVjIGlzIGdpdmVuCi0Jb24gdGhlIGNvbW1hbmQgbGluZSwgbm8gcmVmc3BlYyBpcyBjb25maWd1cmVkIGluIHRoZSByZW1vdGUsIGFuZAotCW5vIHJlZnNwZWMgaXMgaW1wbGllZCBieSBhbnkgb2YgdGhlIG9wdGlvbnMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQKLQlsaW5lLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgorCURlZmluZXMgdGhlIGFjdGlvbiBgZ2l0IHB1c2hgIHNob3VsZCB0YWtlIGlmIG5vIHJlZnNwZWMgaXMKKwlleHBsaWNpdGx5IGdpdmVuLiAgRGlmZmVyZW50IHZhbHVlcyBhcmUgd2VsbC1zdWl0ZWQgZm9yCisJc3BlY2lmaWMgd29ya2Zsb3dzOyBmb3IgaW5zdGFuY2UsIGluIGEgcHVyZWx5IGNlbnRyYWwgd29ya2Zsb3cKKwkoaS5lLiB0aGUgZmV0Y2ggc291cmNlIGlzIGVxdWFsIHRvIHRoZSBwdXNoIGRlc3RpbmF0aW9uKSwKKwlgdXBzdHJlYW1gIGlzIHByb2JhYmx5IHdoYXQgeW91IHdhbnQuICBQb3NzaWJsZSB2YWx1ZXMgYXJlOgogKwogLS0KLSogYG5vdGhpbmdgIC0gZG8gbm90IHB1c2ggYW55dGhpbmcuCi0qIGBtYXRjaGluZ2AgLSBwdXNoIGFsbCBicmFuY2hlcyBoYXZpbmcgdGhlIHNhbWUgbmFtZSBpbiBib3RoIGVuZHMuCi0gIFRoaXMgaXMgZm9yIHRob3NlIHdobyBwcmVwYXJlIGFsbCB0aGUgYnJhbmNoZXMgaW50byBhIHB1Ymxpc2hhYmxlCi0gIHNoYXBlIGFuZCB0aGVuIHB1c2ggdGhlbSBvdXQgd2l0aCBhIHNpbmdsZSBjb21tYW5kLiAgSXQgaXMgbm90Ci0gIGFwcHJvcHJpYXRlIGZvciBwdXNoaW5nIGludG8gYSByZXBvc2l0b3J5IHNoYXJlZCBieSBtdWx0aXBsZSB1c2VycywKLSAgc2luY2UgbG9jYWxseSBzdGFsbGVkIGJyYW5jaGVzIHdpbGwgYXR0ZW1wdCBhIG5vbi1mYXN0IGZvcndhcmQgcHVzaAotICBpZiBvdGhlciB1c2VycyB1cGRhdGVkIHRoZSBicmFuY2guCi0gICsKLSAgVGhpcyBpcyBjdXJyZW50bHkgdGhlIGRlZmF1bHQsIGJ1dCBHaXQgMi4wIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0Ci0gIHRvIGBzaW1wbGVgLgotKiBgdXBzdHJlYW1gIC0gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggdG8gaXRzIHVwc3RyZWFtIGJyYW5jaAotICAoYHRyYWNraW5nYCBpcyBhIGRlcHJlY2F0ZWQgc3lub255bSBmb3IgdGhpcykuCi0gIFdpdGggdGhpcywgYGdpdCBwdXNoYCB3aWxsIHVwZGF0ZSB0aGUgc2FtZSByZW1vdGUgcmVmIGFzIHRoZSBvbmUgd2hpY2gKLSAgaXMgbWVyZ2VkIGJ5IGBnaXQgcHVsbGAsIG1ha2luZyBgcHVzaGAgYW5kIGBwdWxsYCBzeW1tZXRyaWNhbC4KLSAgU2VlICJicmFuY2guPG5hbWU+Lm1lcmdlIiBmb3IgaG93IHRvIGNvbmZpZ3VyZSB0aGUgdXBzdHJlYW0gYnJhbmNoLgotKiBgc2ltcGxlYCAtIGxpa2UgYHVwc3RyZWFtYCwgYnV0IHJlZnVzZXMgdG8gcHVzaCBpZiB0aGUgdXBzdHJlYW0KLSAgYnJhbmNoJ3MgbmFtZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbG9jYWwgb25lLiBUaGlzIGlzIHRoZSBzYWZlc3QKLSAgb3B0aW9uIGFuZCBpcyB3ZWxsLXN1aXRlZCBmb3IgYmVnaW5uZXJzLiBJdCB3aWxsIGJlY29tZSB0aGUgZGVmYXVsdAotICBpbiBHaXQgMi4wLgotKiBgY3VycmVudGAgLSBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCB0byBhIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lLgotLS0KKworKiBgbm90aGluZ2AgLSBkbyBub3QgcHVzaCBhbnl0aGluZyAoZXJyb3Igb3V0KSB1bmxlc3MgYSByZWZzcGVjIGlzCisgIGV4cGxpY2l0bHkgZ2l2ZW4uIFRoaXMgaXMgcHJpbWFyaWx5IG1lYW50IGZvciBwZW9wbGUgd2hvIHdhbnQgdG8KKyAgYXZvaWQgbWlzdGFrZXMgYnkgYWx3YXlzIGJlaW5nIGV4cGxpY2l0LgorCisqIGBjdXJyZW50YCAtIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHVwZGF0ZSBhIGJyYW5jaCB3aXRoIHRoZSBzYW1lCisgIG5hbWUgb24gdGhlIHJlY2VpdmluZyBlbmQuICBXb3JrcyBpbiBib3RoIGNlbnRyYWwgYW5kIG5vbi1jZW50cmFsCisgIHdvcmtmbG93cy4KKworKiBgdXBzdHJlYW1gIC0gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYmFjayB0byB0aGUgYnJhbmNoIHdob3NlCisgIGNoYW5nZXMgYXJlIHVzdWFsbHkgaW50ZWdyYXRlZCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCAod2hpY2ggaXMKKyAgY2FsbGVkIGBAe3Vwc3RyZWFtfWApLiAgVGhpcyBtb2RlIG9ubHkgbWFrZXMgc2Vuc2UgaWYgeW91IGFyZQorICBwdXNoaW5nIHRvIHRoZSBzYW1lIHJlcG9zaXRvcnkgeW91IHdvdWxkIG5vcm1hbGx5IHB1bGwgZnJvbQorICAoaS5lLiBjZW50cmFsIHdvcmtmbG93KS4KKworKiBgc2ltcGxlYCAtIGluIGNlbnRyYWxpemVkIHdvcmtmbG93LCB3b3JrIGxpa2UgYHVwc3RyZWFtYCB3aXRoIGFuCisgIGFkZGVkIHNhZmV0eSB0byByZWZ1c2UgdG8gcHVzaCBpZiB0aGUgdXBzdHJlYW0gYnJhbmNoJ3MgbmFtZSBpcworICBkaWZmZXJlbnQgZnJvbSB0aGUgbG9jYWwgb25lLgogKwotVGhlIGBzaW1wbGVgLCBgY3VycmVudGAgYW5kIGB1cHN0cmVhbWAgbW9kZXMgYXJlIGZvciB0aG9zZSB3aG8gd2FudCB0bwotcHVzaCBvdXQgYSBzaW5nbGUgYnJhbmNoIGFmdGVyIGZpbmlzaGluZyB3b3JrLCBldmVuIHdoZW4gdGhlIG90aGVyCi1icmFuY2hlcyBhcmUgbm90IHlldCByZWFkeSB0byBiZSBwdXNoZWQgb3V0LiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aAotb3RoZXIgcGVvcGxlIHRvIHB1c2ggaW50byB0aGUgc2FtZSBzaGFyZWQgcmVwb3NpdG9yeSwgeW91IHdvdWxkIHdhbnQKLXRvIHVzZSBvbmUgb2YgdGhlc2UuCitXaGVuIHB1c2hpbmcgdG8gYSByZW1vdGUgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcmVtb3RlIHlvdSBub3JtYWxseQorcHVsbCBmcm9tLCB3b3JrIGFzIGBjdXJyZW50YC4gIFRoaXMgaXMgdGhlIHNhZmVzdCBvcHRpb24gYW5kIGlzIHN1aXRlZAorZm9yIGJlZ2lubmVycy4KKysKK1RoaXMgbW9kZSB3aWxsIGJlY29tZSB0aGUgZGVmYXVsdCBpbiBHaXQgMi4wLgorCisqIGBtYXRjaGluZ2AgLSBwdXNoIGFsbCBicmFuY2hlcyBoYXZpbmcgdGhlIHNhbWUgbmFtZSBvbiBib3RoIGVuZHMuCisgIFRoaXMgbWFrZXMgdGhlIHJlcG9zaXRvcnkgeW91IGFyZSBwdXNoaW5nIHRvIHJlbWVtYmVyIHRoZSBzZXQgb2YKKyAgYnJhbmNoZXMgdGhhdCB3aWxsIGJlIHB1c2hlZCBvdXQgKGUuZy4gaWYgeW91IGFsd2F5cyBwdXNoICdtYWludCcKKyAgYW5kICdtYXN0ZXInIHRoZXJlIGFuZCBubyBvdGhlciBicmFuY2hlcywgdGhlIHJlcG9zaXRvcnkgeW91IHB1c2gKKyAgdG8gd2lsbCBoYXZlIHRoZXNlIHR3byBicmFuY2hlcywgYW5kIHlvdXIgbG9jYWwgJ21haW50JyBhbmQKKyAgJ21hc3Rlcicgd2lsbCBiZSBwdXNoZWQgdGhlcmUpLgorKworVG8gdXNlIHRoaXMgbW9kZSBlZmZlY3RpdmVseSwgeW91IGhhdmUgdG8gbWFrZSBzdXJlIF9hbGxfIHRoZQorYnJhbmNoZXMgeW91IHdvdWxkIHB1c2ggb3V0IGFyZSByZWFkeSB0byBiZSBwdXNoZWQgb3V0IGJlZm9yZQorcnVubmluZyAnZ2l0IHB1c2gnLCBhcyB0aGUgd2hvbGUgcG9pbnQgb2YgdGhpcyBtb2RlIGlzIHRvIGFsbG93IHlvdQordG8gcHVzaCBhbGwgb2YgdGhlIGJyYW5jaGVzIGluIG9uZSBnby4gIElmIHlvdSB1c3VhbGx5IGZpbmlzaCB3b3JrCitvbiBvbmx5IG9uZSBicmFuY2ggYW5kIHB1c2ggb3V0IHRoZSByZXN1bHQsIHdoaWxlIG90aGVyIGJyYW5jaGVzIGFyZQordW5maW5pc2hlZCwgdGhpcyBtb2RlIGlzIG5vdCBmb3IgeW91LiAgQWxzbyB0aGlzIG1vZGUgaXMgbm90CitzdWl0YWJsZSBmb3IgcHVzaGluZyBpbnRvIGEgc2hhcmVkIGNlbnRyYWwgcmVwb3NpdG9yeSwgYXMgb3RoZXIKK3Blb3BsZSBtYXkgYWRkIG5ldyBicmFuY2hlcyB0aGVyZSwgb3IgdXBkYXRlIHRoZSB0aXAgb2YgZXhpc3RpbmcKK2JyYW5jaGVzIG91dHNpZGUgeW91ciBjb250cm9sLgorKworVGhpcyBpcyBjdXJyZW50bHkgdGhlIGRlZmF1bHQsIGJ1dCBHaXQgMi4wIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0Cit0byBgc2ltcGxlYC4KKworLS0KIAogcmViYXNlLnN0YXQ6OgogCVdoZXRoZXIgdG8gc2hvdyBhIGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSBzaW5jZSB0aGUgbGFzdApAQCAtMTg2Nyw2ICsxOTEwLDE0IEBACiByZWJhc2UuYXV0b3NxdWFzaDo6CiAJSWYgc2V0IHRvIHRydWUgZW5hYmxlICctLWF1dG9zcXVhc2gnIG9wdGlvbiBieSBkZWZhdWx0LgogCityZWJhc2UuYXV0b3N0YXNoOjoKKwlXaGVuIHNldCB0byB0cnVlLCBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIHRlbXBvcmFyeSBzdGFzaAorCWJlZm9yZSB0aGUgb3BlcmF0aW9uIGJlZ2lucywgYW5kIGFwcGx5IGl0IGFmdGVyIHRoZSBvcGVyYXRpb24KKwllbmRzLiAgVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gcnVuIHJlYmFzZSBvbiBhIGRpcnR5IHdvcmt0cmVlLgorCUhvd2V2ZXIsIHVzZSB3aXRoIGNhcmU6IHRoZSBmaW5hbCBzdGFzaCBhcHBsaWNhdGlvbiBhZnRlciBhCisJc3VjY2Vzc2Z1bCByZWJhc2UgbWlnaHQgcmVzdWx0IGluIG5vbi10cml2aWFsIGNvbmZsaWN0cy4KKwlEZWZhdWx0cyB0byBmYWxzZS4KKwogcmVjZWl2ZS5hdXRvZ2M6OgogCUJ5IGRlZmF1bHQsIGdpdC1yZWNlaXZlLXBhY2sgd2lsbCBydW4gImdpdC1nYyAtLWF1dG8iIGFmdGVyCiAJcmVjZWl2aW5nIGRhdGEgZnJvbSBnaXQtcHVzaCBhbmQgdXBkYXRpbmcgcmVmcy4gIFlvdSBjYW4gc3RvcApAQCAtMjAyMiw2ICsyMDczLDEwIEBACiBzZW5kZW1haWwuc210cHNzbDo6CiAJRGVwcmVjYXRlZCBhbGlhcyBmb3IgJ3NlbmRlbWFpbC5zbXRwZW5jcnlwdGlvbiA9IHNzbCcuCiAKK3NlbmRlbWFpbC5zbXRwc3NsY2VydHBhdGg6OgorCVBhdGggdG8gY2EtY2VydGlmaWNhdGVzIChlaXRoZXIgYSBkaXJlY3Rvcnkgb3IgYSBzaW5nbGUgZmlsZSkuCisJU2V0IGl0IHRvIGFuIGVtcHR5IHN0cmluZyB0byBkaXNhYmxlIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbi4KKwogc2VuZGVtYWlsLjxpZGVudGl0eT4uKjo6CiAJSWRlbnRpdHktc3BlY2lmaWMgdmVyc2lvbnMgb2YgdGhlICdzZW5kZW1haWwuKicgcGFyYW1ldGVycwogCWZvdW5kIGJlbG93LCB0YWtpbmcgcHJlY2VkZW5jZSBvdmVyIHRob3NlIHdoZW4gdGhlIHRoaXMKQEAgLTIwNjYsNiArMjEyMSwxNCBAQAogCXJlbGF0aXZlIHRvIHRoZSByZXBvc2l0b3J5IHJvb3QgKHRoaXMgd2FzIHRoZSBkZWZhdWx0IGZvciBHaXQKIAlwcmlvciB0byB2MS41LjQpLgogCitzdGF0dXMuc2hvcnQ6OgorCVNldCB0byB0cnVlIHRvIGVuYWJsZSAtLXNob3J0IGJ5IGRlZmF1bHQgaW4gbGlua2dpdDpnaXQtc3RhdHVzWzFdLgorCVRoZSBvcHRpb24gLS1uby1zaG9ydCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhpcyB2YXJpYWJsZS4KKworc3RhdHVzLmJyYW5jaDo6CisJU2V0IHRvIHRydWUgdG8gZW5hYmxlIC0tYnJhbmNoIGJ5IGRlZmF1bHQgaW4gbGlua2dpdDpnaXQtc3RhdHVzWzFdLgorCVRoZSBvcHRpb24gLS1uby1icmFuY2ggdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoaXMgdmFyaWFibGUuCisKIHN0YXR1cy5zaG93VW50cmFja2VkRmlsZXM6OgogCUJ5IGRlZmF1bHQsIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBhbmQgbGlua2dpdDpnaXQtY29tbWl0WzFdIHNob3cKIAlmaWxlcyB3aGljaCBhcmUgbm90IGN1cnJlbnRseSB0cmFja2VkIGJ5IEdpdC4gRGlyZWN0b3JpZXMgd2hpY2gKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGlmZi1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vZGlmZi1vcHRpb25zLnR4dAppbmRleCAxMDQ1NzlkLi5iYmVkMmNkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RpZmYtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kaWZmLW9wdGlvbnMudHh0CkBAIC0yNiw2ICsyNiwxMSBAQAogCXtnaXQtZGlmZj8gVGhpcyBpcyB0aGUgZGVmYXVsdC59CiBlbmRpZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCiAKKy1zOjoKKy0tbm8tcGF0Y2g6OgorCVN1cHByZXNzIGRpZmYgb3V0cHV0LiBVc2VmdWwgZm9yIGNvbW1hbmRzIGxpa2UgYGdpdCBzaG93YCB0aGF0CisJc2hvdyB0aGUgcGF0Y2ggYnkgZGVmYXVsdCwgb3IgdG8gY2FuY2VsIHRoZSBlZmZlY3Qgb2YgYC0tcGF0Y2hgLgorCiAtVTxuPjo6CiAtLXVuaWZpZWQ9PG4+OjoKIAlHZW5lcmF0ZSBkaWZmcyB3aXRoIDxuPiBsaW5lcyBvZiBjb250ZXh0IGluc3RlYWQgb2YKQEAgLTMzMyw3ICszMzgsNyBAQAogCWEgZnJhY3Rpb24sIHdpdGggYSBkZWNpbWFsIHBvaW50IGJlZm9yZSBpdC4gIEkuZS4sIGAtTTVgIGJlY29tZXMKIAkwLjUsIGFuZCBpcyB0aHVzIHRoZSBzYW1lIGFzIGAtTTUwJWAuICBTaW1pbGFybHksIGAtTTA1YCBpcwogCXRoZSBzYW1lIGFzIGAtTTUlYC4gIFRvIGxpbWl0IGRldGVjdGlvbiB0byBleGFjdCByZW5hbWVzLCB1c2UKLQlgLU0xMDAlYC4KKwlgLU0xMDAlYC4gIFRoZSBkZWZhdWx0IHNpbWlsYXJpdHkgaW5kZXggaXMgNTAlLgogCiAtQ1s8bj5dOjoKIC0tZmluZC1jb3BpZXNbPTxuPl06OgpAQCAtMzgzLDE0ICszODgsMzYgQEAKIAl0aGF0IG1hdGNoZXMgb3RoZXIgY3JpdGVyaWEsIG5vdGhpbmcgaXMgc2VsZWN0ZWQuCiAKIC1TPHN0cmluZz46OgotCUxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgaW50cm9kdWNlIG9yIHJlbW92ZSBhbiBpbnN0YW5jZSBvZgotCTxzdHJpbmc+LiBOb3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgc3RyaW5nIHNpbXBseQotCWFwcGVhcmluZyBpbiBkaWZmIG91dHB1dDsgc2VlIHRoZSAncGlja2F4ZScgZW50cnkgaW4KLQlsaW5rZ2l0OmdpdGRpZmZjb3JlWzddIGZvciBtb3JlIGRldGFpbHMuCisJTG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZgorCXRoZSBzcGVjaWZpZWQgc3RyaW5nIChpLmUuIGFkZGl0aW9uL2RlbGV0aW9uKSBpbiBhIGZpbGUuCisJSW50ZW5kZWQgZm9yIHRoZSBzY3JpcHRlcidzIHVzZS4KKysKK0l0IGlzIHVzZWZ1bCB3aGVuIHlvdSdyZSBsb29raW5nIGZvciBhbiBleGFjdCBibG9jayBvZiBjb2RlIChsaWtlIGEKK3N0cnVjdCksIGFuZCB3YW50IHRvIGtub3cgdGhlIGhpc3Rvcnkgb2YgdGhhdCBibG9jayBzaW5jZSBpdCBmaXJzdAorY2FtZSBpbnRvIGJlaW5nOiB1c2UgdGhlIGZlYXR1cmUgaXRlcmF0aXZlbHkgdG8gZmVlZCB0aGUgaW50ZXJlc3RpbmcKK2Jsb2NrIGluIHRoZSBwcmVpbWFnZSBiYWNrIGludG8gYC1TYCwgYW5kIGtlZXAgZ29pbmcgdW50aWwgeW91IGdldCB0aGUKK3ZlcnkgZmlyc3QgdmVyc2lvbiBvZiB0aGUgYmxvY2suCiAKIC1HPHJlZ2V4Pjo6Ci0JTG9vayBmb3IgZGlmZmVyZW5jZXMgd2hvc2UgYWRkZWQgb3IgcmVtb3ZlZCBsaW5lIG1hdGNoZXMKLQl0aGUgZ2l2ZW4gPHJlZ2V4Pi4KKwlMb29rIGZvciBkaWZmZXJlbmNlcyB3aG9zZSBwYXRjaCB0ZXh0IGNvbnRhaW5zIGFkZGVkL3JlbW92ZWQKKwlsaW5lcyB0aGF0IG1hdGNoIDxyZWdleD4uCisrCitUbyBpbGx1c3RyYXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYC1TPHJlZ2V4PiAtLXBpY2theGUtcmVnZXhgIGFuZAorYC1HPHJlZ2V4PmAsIGNvbnNpZGVyIGEgY29tbWl0IHdpdGggdGhlIGZvbGxvd2luZyBkaWZmIGluIHRoZSBzYW1lCitmaWxlOgorKworLS0tLQorKyAgICByZXR1cm4gIXJlZ2V4ZWMocmVnZXhwLCB0d28tPnB0ciwgMSwgJnJlZ21hdGNoLCAwKTsKKy4uLgorLSAgICBoaXQgPSAhcmVnZXhlYyhyZWdleHAsIG1mMi5wdHIsIDEsICZyZWdtYXRjaCwgMCk7CistLS0tCisrCitXaGlsZSBgZ2l0IGxvZyAtRyJyZWdleGVjXChyZWdleHAiYCB3aWxsIHNob3cgdGhpcyBjb21taXQsIGBnaXQgbG9nCistUyJyZWdleGVjXChyZWdleHAiIC0tcGlja2F4ZS1yZWdleGAgd2lsbCBub3QgKGJlY2F1c2UgdGhlIG51bWJlciBvZgorb2NjdXJyZW5jZXMgb2YgdGhhdCBzdHJpbmcgZGlkIG5vdCBjaGFuZ2UpLgorKworU2VlIHRoZSAncGlja2F4ZScgZW50cnkgaW4gbGlua2dpdDpnaXRkaWZmY29yZVs3XSBmb3IgbW9yZQoraW5mb3JtYXRpb24uCiAKIC0tcGlja2F4ZS1hbGw6OgogCVdoZW4gYC1TYCBvciBgLUdgIGZpbmRzIGEgY2hhbmdlLCBzaG93IGFsbCB0aGUgY2hhbmdlcyBpbiB0aGF0CkBAIC0zOTgsOCArNDI1LDggQEAKIAlpbiA8c3RyaW5nPi4KIAogLS1waWNrYXhlLXJlZ2V4OjoKLQlNYWtlIHRoZSA8c3RyaW5nPiBub3QgYSBwbGFpbiBzdHJpbmcgYnV0IGFuIGV4dGVuZGVkIFBPU0lYCi0JcmVnZXggdG8gbWF0Y2guCisJVHJlYXQgdGhlIDxzdHJpbmc+IGdpdmVuIHRvIGAtU2AgYXMgYW4gZXh0ZW5kZWQgUE9TSVggcmVndWxhcgorCWV4cHJlc3Npb24gdG8gbWF0Y2guCiBlbmRpZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCiAKIC1PPG9yZGVyZmlsZT46OgpAQCAtNDM5LDYgKzQ2Niw5IEBACiAJZGlmZmVyZW5jZXMgZXZlbiBpZiBvbmUgbGluZSBoYXMgd2hpdGVzcGFjZSB3aGVyZSB0aGUgb3RoZXIKIAlsaW5lIGhhcyBub25lLgogCistLWlnbm9yZS1ibGFuay1saW5lczo6CisJSWdub3JlIGNoYW5nZXMgd2hvc2UgbGluZXMgYXJlIGFsbCBibGFuay4KKwogLS1pbnRlci1odW5rLWNvbnRleHQ9PGxpbmVzPjo6CiAJU2hvdyB0aGUgY29udGV4dCBiZXR3ZWVuIGRpZmYgaHVua3MsIHVwIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyCiAJb2YgbGluZXMsIHRoZXJlYnkgZnVzaW5nIGh1bmtzIHRoYXQgYXJlIGNsb3NlIHRvIGVhY2ggb3RoZXIuCkBAIC00ODAsNyArNTEwLDcgQEAKIAogLS1pZ25vcmUtc3VibW9kdWxlc1s9PHdoZW4+XTo6CiAJSWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcyBpbiB0aGUgZGlmZiBnZW5lcmF0aW9uLiA8d2hlbj4gY2FuIGJlCi0JZWl0aGVyICJub25lIiwgInVudHJhY2tlZCIsICJkaXJ0eSIgb3IgImFsbCIsIHdoaWNoIGlzIHRoZSBkZWZhdWx0CisJZWl0aGVyICJub25lIiwgInVudHJhY2tlZCIsICJkaXJ0eSIgb3IgImFsbCIsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LgogCVVzaW5nICJub25lIiB3aWxsIGNvbnNpZGVyIHRoZSBzdWJtb2R1bGUgbW9kaWZpZWQgd2hlbiBpdCBlaXRoZXIgY29udGFpbnMKIAl1bnRyYWNrZWQgb3IgbW9kaWZpZWQgZmlsZXMgb3IgaXRzIEhFQUQgZGlmZmVycyBmcm9tIHRoZSBjb21taXQgcmVjb3JkZWQKIAlpbiB0aGUgc3VwZXJwcm9qZWN0IGFuZCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBhbnkgc2V0dGluZ3Mgb2YgdGhlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZldGNoLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9mZXRjaC1vcHRpb25zLnR4dAppbmRleCA5Y2I2NDk2Li5iYTFmZTQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZldGNoLW9wdGlvbnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmV0Y2gtb3B0aW9ucy50eHQKQEAgLTYxLDcgKzYxLDcgQEAKIGlmbmRlZjo6Z2l0LXB1bGxbXQogLXQ6OgogLS10YWdzOjoKLQlUaGlzIGlzIGEgc2hvcnQtaGFuZCBmb3IgZ2l2aW5nICJyZWZzL3RhZ3MvKjpyZWZzL3RhZ3MvKiIKKwlUaGlzIGlzIGEgc2hvcnQtaGFuZCBmb3IgZ2l2aW5nIGByZWZzL3RhZ3MvKjpyZWZzL3RhZ3MvKmAKIAlyZWZzcGVjIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgdG8gYXNrIGFsbCB0YWdzIHRvIGJlIGZldGNoZWQKIAlhbmQgc3RvcmVkIGxvY2FsbHkuICBCZWNhdXNlIHRoaXMgYWN0cyBhcyBhbiBleHBsaWNpdAogCXJlZnNwZWMsIHRoZSBkZWZhdWx0IHJlZnNwZWNzIChjb25maWd1cmVkIHdpdGggdGhlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQKaW5kZXggNWJiZTdiNi4uNTRkODQ2MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYW0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWFtLnR4dApAQCAtMTMyLDcgKzEzMiw3IEBACiAtLXJlc29sdmVtc2c9PG1zZz46OgogCVdoZW4gYSBwYXRjaCBmYWlsdXJlIG9jY3VycywgPG1zZz4gd2lsbCBiZSBwcmludGVkCiAJdG8gdGhlIHNjcmVlbiBiZWZvcmUgZXhpdGluZy4gIFRoaXMgb3ZlcnJpZGVzIHRoZQotCXN0YW5kYXJkIG1lc3NhZ2UgaW5mb3JtaW5nIHlvdSB0byB1c2UgYC0tcmVzb2x2ZWRgCisJc3RhbmRhcmQgbWVzc2FnZSBpbmZvcm1pbmcgeW91IHRvIHVzZSBgLS1jb250aW51ZWAKIAlvciBgLS1za2lwYCB0byBoYW5kbGUgdGhlIGZhaWx1cmUuICBUaGlzIGlzIHNvbGVseQogCWZvciBpbnRlcm5hbCB1c2UgYmV0d2VlbiAnZ2l0IHJlYmFzZScgYW5kICdnaXQgYW0nLgogCkBAIC0xNzYsNyArMTc2LDcgQEAKIAogLiBoYW5kIHJlc29sdmUgdGhlIGNvbmZsaWN0IGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSwgYW5kIHVwZGF0ZQogICB0aGUgaW5kZXggZmlsZSB0byBicmluZyBpdCBpbnRvIGEgc3RhdGUgdGhhdCB0aGUgcGF0Y2ggc2hvdWxkCi0gIGhhdmUgcHJvZHVjZWQuICBUaGVuIHJ1biB0aGUgY29tbWFuZCB3aXRoIHRoZSAnLS1yZXNvbHZlZCcgb3B0aW9uLgorICBoYXZlIHByb2R1Y2VkLiAgVGhlbiBydW4gdGhlIGNvbW1hbmQgd2l0aCB0aGUgJy0tY29udGludWUnIG9wdGlvbi4KIAogVGhlIGNvbW1hbmQgcmVmdXNlcyB0byBwcm9jZXNzIG5ldyBtYWlsYm94ZXMgdW50aWwgdGhlIGN1cnJlbnQKIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgc28gaWYgeW91IGRlY2lkZSB0byBzdGFydCBvdmVyIGZyb20gc2NyYXRjaCwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC1sazIwMDkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LWxrMjAwOS50eHQKaW5kZXggMGVlZDNlMy4uYWZlYjg2YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LWxrMjAwOS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LWxrMjAwOS50eHQKQEAgLTEzMjAsNyArMTMyMCw3IEBACiA7LSkKIF9fX19fX19fX19fX18KIAotQWNrbm93bGVkZ2VtZW50cworQWNrbm93bGVkZ21lbnRzCiAtLS0tLS0tLS0tLS0tLS0tCiAKIE1hbnkgdGhhbmtzIHRvIEp1bmlvIEhhbWFubyBmb3IgaGlzIGhlbHAgaW4gcmV2aWV3aW5nIHRoaXMgcGFwZXIsIGZvcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYmxhbWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYmxhbWUudHh0CmluZGV4IDlhMDVjMmIuLjZjZWE3ZjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWJsYW1lLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ibGFtZS50eHQKQEAgLTgsOSArOCw5IEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdnaXQgYmxhbWUnIFstY10gWy1iXSBbLWxdIFstLXJvb3RdIFstdF0gWy1mXSBbLW5dIFstc10gWy1lXSBbLXBdIFstd10gWy0taW5jcmVtZW50YWxdIFstTCBuLG1dCi0JICAgIFstUyA8cmV2cy1maWxlPl0gWy1NXSBbLUNdIFstQ10gWy1DXSBbLS1zaW5jZT08ZGF0ZT5dIFstLWFiYnJldj08bj5dCi0JICAgIFs8cmV2PiB8IC0tY29udGVudHMgPGZpbGU+IHwgLS1yZXZlcnNlIDxyZXY+XSBbLS1dIDxmaWxlPgorJ2dpdCBibGFtZScgWy1jXSBbLWJdIFstbF0gWy0tcm9vdF0gWy10XSBbLWZdIFstbl0gWy1zXSBbLWVdIFstcF0gWy13XSBbLS1pbmNyZW1lbnRhbF0KKwkgICAgWy1MIG4sbSB8IC1MIDpmbl0gWy1TIDxyZXZzLWZpbGU+XSBbLU1dIFstQ10gWy1DXSBbLUNdIFstLXNpbmNlPTxkYXRlPl0KKwkgICAgWy0tYWJicmV2PTxuPl0gWzxyZXY+IHwgLS1jb250ZW50cyA8ZmlsZT4gfCAtLXJldmVyc2UgPHJldj5dIFstLV0gPGZpbGU+CiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2F0LWZpbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2F0LWZpbGUudHh0CmluZGV4IDMwZDU4NWEuLjNkZGVjMGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNhdC1maWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jYXQtZmlsZS50eHQKQEAgLTU4LDEyICs1OCwxNiBAQAogCXRvIGFwcGx5IHRoZSBmaWx0ZXIgdG8gdGhlIGNvbnRlbnQgcmVjb3JkZWQgaW4gdGhlIGluZGV4IGF0IDxwYXRoPi4KIAogLS1iYXRjaDo6Ci0JUHJpbnQgdGhlIFNIQS0xLCB0eXBlLCBzaXplLCBhbmQgY29udGVudHMgb2YgZWFjaCBvYmplY3QgcHJvdmlkZWQgb24KLQlzdGRpbi4gTWF5IG5vdCBiZSBjb21iaW5lZCB3aXRoIGFueSBvdGhlciBvcHRpb25zIG9yIGFyZ3VtZW50cy4KKy0tYmF0Y2g9PGZvcm1hdD46OgorCVByaW50IG9iamVjdCBpbmZvcm1hdGlvbiBhbmQgY29udGVudHMgZm9yIGVhY2ggb2JqZWN0IHByb3ZpZGVkCisJb24gc3RkaW4uICBNYXkgbm90IGJlIGNvbWJpbmVkIHdpdGggYW55IG90aGVyIG9wdGlvbnMgb3IgYXJndW1lbnRzLgorCVNlZSB0aGUgc2VjdGlvbiBgQkFUQ0ggT1VUUFVUYCBiZWxvdyBmb3IgZGV0YWlscy4KIAogLS1iYXRjaC1jaGVjazo6Ci0JUHJpbnQgdGhlIFNIQS0xLCB0eXBlLCBhbmQgc2l6ZSBvZiBlYWNoIG9iamVjdCBwcm92aWRlZCBvbiBzdGRpbi4gTWF5IG5vdAotCWJlIGNvbWJpbmVkIHdpdGggYW55IG90aGVyIG9wdGlvbnMgb3IgYXJndW1lbnRzLgorLS1iYXRjaC1jaGVjaz08Zm9ybWF0Pjo6CisJUHJpbnQgb2JqZWN0IGluZm9ybWF0aW9uIGZvciBlYWNoIG9iamVjdCBwcm92aWRlZCBvbiBzdGRpbi4gIE1heQorCW5vdCBiZSBjb21iaW5lZCB3aXRoIGFueSBvdGhlciBvcHRpb25zIG9yIGFyZ3VtZW50cy4gIFNlZSB0aGUKKwlzZWN0aW9uIGBCQVRDSCBPVVRQVVRgIGJlbG93IGZvciBkZXRhaWxzLgogCiBPVVRQVVQKIC0tLS0tLQpAQCAtNzgsMjggKzgyLDgxIEBACiBJZiA8dHlwZT4gaXMgc3BlY2lmaWVkLCB0aGUgcmF3ICh0aG91Z2ggdW5jb21wcmVzc2VkKSBjb250ZW50cyBvZiB0aGUgPG9iamVjdD4KIHdpbGwgYmUgcmV0dXJuZWQuCiAKLUlmICctLWJhdGNoJyBpcyBzcGVjaWZpZWQsIG91dHB1dCBvZiB0aGUgZm9sbG93aW5nIGZvcm0gaXMgcHJpbnRlZCBmb3IgZWFjaAotb2JqZWN0IHNwZWNpZmllZCBvbiBzdGRpbjoKK0JBVENIIE9VVFBVVAorLS0tLS0tLS0tLS0tCisKK0lmIGAtLWJhdGNoYCBvciBgLS1iYXRjaC1jaGVja2AgaXMgZ2l2ZW4sIGBjYXQtZmlsZWAgd2lsbCByZWFkIG9iamVjdHMKK2Zyb20gc3RkaW4sIG9uZSBwZXIgbGluZSwgYW5kIHByaW50IGluZm9ybWF0aW9uIGFib3V0IHRoZW0uCisKK0VhY2ggbGluZSBpcyBzcGxpdCBhdCB0aGUgZmlyc3Qgd2hpdGVzcGFjZSBib3VuZGFyeS4gQWxsIGNoYXJhY3RlcnMKK2JlZm9yZSB0aGF0IHdoaXRlc3BhY2UgYXJlIGNvbnNpZGVyZWQgYXMgYSB3aG9sZSBvYmplY3QgbmFtZSwgYW5kIGFyZQorcGFyc2VkIGFzIGlmIGdpdmVuIHRvIGxpbmtnaXQ6Z2l0LXJldi1wYXJzZVsxXS4gQ2hhcmFjdGVycyBhZnRlciB0aGF0Cit3aGl0ZXNwYWNlIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyB0aGUgYCUocmVzdClgIGF0b20gKHNlZSBiZWxvdykuCisKK1lvdSBjYW4gc3BlY2lmeSB0aGUgaW5mb3JtYXRpb24gc2hvd24gZm9yIGVhY2ggb2JqZWN0IGJ5IHVzaW5nIGEgY3VzdG9tCitgPGZvcm1hdD5gLiBUaGUgYDxmb3JtYXQ+YCBpcyBjb3BpZWQgbGl0ZXJhbGx5IHRvIHN0ZG91dCBmb3IgZWFjaAorb2JqZWN0LCB3aXRoIHBsYWNlaG9sZGVycyBvZiB0aGUgZm9ybSBgJShhdG9tKWAgZXhwYW5kZWQsIGZvbGxvd2VkIGJ5IGEKK25ld2xpbmUuIFRoZSBhdmFpbGFibGUgYXRvbXMgYXJlOgorCitgb2JqZWN0bmFtZWA6OgorCVRoZSA0MC1oZXggb2JqZWN0IG5hbWUgb2YgdGhlIG9iamVjdC4KKworYG9iamVjdHR5cGVgOjoKKwlUaGUgdHlwZSBvZiBvZiB0aGUgb2JqZWN0ICh0aGUgc2FtZSBhcyBgY2F0LWZpbGUgLXRgIHJlcG9ydHMpLgorCitgb2JqZWN0c2l6ZWA6OgorCVRoZSBzaXplLCBpbiBieXRlcywgb2YgdGhlIG9iamVjdCAodGhlIHNhbWUgYXMgYGNhdC1maWxlIC1zYAorCXJlcG9ydHMpLgorCitgb2JqZWN0c2l6ZTpkaXNrYDo6CisJVGhlIHNpemUsIGluIGJ5dGVzLCB0aGF0IHRoZSBvYmplY3QgdGFrZXMgdXAgb24gZGlzay4gU2VlIHRoZQorCW5vdGUgYWJvdXQgb24tZGlzayBzaXplcyBpbiB0aGUgYENBVkVBVFNgIHNlY3Rpb24gYmVsb3cuCisKK2ByZXN0YDo6CisJVGhlIHRleHQgKGlmIGFueSkgZm91bmQgYWZ0ZXIgdGhlIGZpcnN0IHJ1biBvZiB3aGl0ZXNwYWNlIG9uIHRoZQorCWlucHV0IGxpbmUgKGkuZS4sIHRoZSAicmVzdCIgb2YgdGhlIGxpbmUpLgorCitJZiBubyBmb3JtYXQgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBmb3JtYXQgaXMgYCUob2JqZWN0bmFtZSkKKyUob2JqZWN0dHlwZSkgJShvYmplY3RzaXplKWAuCisKK0lmIGAtLWJhdGNoYCBpcyBzcGVjaWZpZWQsIHRoZSBvYmplY3QgaW5mb3JtYXRpb24gaXMgZm9sbG93ZWQgYnkgdGhlCitvYmplY3QgY29udGVudHMgKGNvbnNpc3Rpbmcgb2YgYCUob2JqZWN0c2l6ZSlgIGJ5dGVzKSwgZm9sbG93ZWQgYnkgYQorbmV3bGluZS4KKworRm9yIGV4YW1wbGUsIGAtLWJhdGNoYCB3aXRob3V0IGEgY3VzdG9tIGZvcm1hdCB3b3VsZCBwcm9kdWNlOgogCiAtLS0tLS0tLS0tLS0KIDxzaGExPiBTUCA8dHlwZT4gU1AgPHNpemU+IExGCiA8Y29udGVudHM+IExGCiAtLS0tLS0tLS0tLS0KIAotSWYgJy0tYmF0Y2gtY2hlY2snIGlzIHNwZWNpZmllZCwgb3V0cHV0IG9mIHRoZSBmb2xsb3dpbmcgZm9ybSBpcyBwcmludGVkIGZvcgotZWFjaCBvYmplY3Qgc3BlY2lmaWVkIG9uIHN0ZGluOgorV2hlcmVhcyBgLS1iYXRjaC1jaGVjaz0nJShvYmplY3RuYW1lKSAlKG9iamVjdHR5cGUpJ2Agd291bGQgcHJvZHVjZToKIAogLS0tLS0tLS0tLS0tCi08c2hhMT4gU1AgPHR5cGU+IFNQIDxzaXplPiBMRgorPHNoYTE+IFNQIDx0eXBlPiBMRgogLS0tLS0tLS0tLS0tCiAKLUZvciBib3RoICctLWJhdGNoJyBhbmQgJy0tYmF0Y2gtY2hlY2snLCBvdXRwdXQgb2YgdGhlIGZvbGxvd2luZyBmb3JtIGlzIHByaW50ZWQKLWZvciBlYWNoIG9iamVjdCBzcGVjaWZpZWQgb24gc3RkaW4gdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgcmVwb3NpdG9yeToKK0lmIGEgbmFtZSBpcyBzcGVjaWZpZWQgb24gc3RkaW4gdGhhdCBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYW4gb2JqZWN0IGluCit0aGUgcmVwb3NpdG9yeSwgdGhlbiBgY2F0LWZpbGVgIHdpbGwgaWdub3JlIGFueSBjdXN0b20gZm9ybWF0IGFuZCBwcmludDoKIAogLS0tLS0tLS0tLS0tCiA8b2JqZWN0PiBTUCBtaXNzaW5nIExGCiAtLS0tLS0tLS0tLS0KIAorCitDQVZFQVRTCistLS0tLS0tCisKK05vdGUgdGhhdCB0aGUgc2l6ZXMgb2Ygb2JqZWN0cyBvbiBkaXNrIGFyZSByZXBvcnRlZCBhY2N1cmF0ZWx5LCBidXQgY2FyZQorc2hvdWxkIGJlIHRha2VuIGluIGRyYXdpbmcgY29uY2x1c2lvbnMgYWJvdXQgd2hpY2ggcmVmcyBvciBvYmplY3RzIGFyZQorcmVzcG9uc2libGUgZm9yIGRpc2sgdXNhZ2UuIFRoZSBzaXplIG9mIGEgcGFja2VkIG5vbi1kZWx0YSBvYmplY3QgbWF5IGJlCittdWNoIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIG9iamVjdHMgd2hpY2ggZGVsdGEgYWdhaW5zdCBpdCwgYnV0IHRoZQorY2hvaWNlIG9mIHdoaWNoIG9iamVjdCBpcyB0aGUgYmFzZSBhbmQgd2hpY2ggaXMgdGhlIGRlbHRhIGlzIGFyYml0cmFyeQorYW5kIGlzIHN1YmplY3QgdG8gY2hhbmdlIGR1cmluZyBhIHJlcGFjay4gTm90ZSBhbHNvIHRoYXQgbXVsdGlwbGUgY29waWVzCitvZiBhbiBvYmplY3QgbWF5IGJlIHByZXNlbnQgaW4gdGhlIG9iamVjdCBkYXRhYmFzZTsgaW4gdGhpcyBjYXNlLCBpdCBpcwordW5kZWZpbmVkIHdoaWNoIGNvcHkncyBzaXplIHdpbGwgYmUgcmVwb3J0ZWQuCisKKwogR0lUCiAtLS0KIFBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1hdHRyLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLWF0dHIudHh0CmluZGV4IDVhYmRiYWEuLmE3YmU4MGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLWF0dHIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLWF0dHIudHh0CkBAIC01Niw2ICs1NiwxMSBAQAogJ3NldCc7OwkJd2hlbiB0aGUgYXR0cmlidXRlIGlzIGRlZmluZWQgYXMgdHJ1ZS4KIDx2YWx1ZT47Owl3aGVuIGEgdmFsdWUgaGFzIGJlZW4gYXNzaWduZWQgdG8gdGhlIGF0dHJpYnV0ZS4KIAorQnVmZmVyaW5nIGhhcHBlbnMgYXMgZG9jdW1lbnRlZCB1bmRlciB0aGUgYEdJVF9GTFVTSGAgb3B0aW9uIGluCitsaW5rZ2l0OmdpdFsxXS4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGF2b2lkaW5nIGRlYWRsb2NrcworY2F1c2VkIGJ5IG92ZXJmaWxsaW5nIGFuIGlucHV0IGJ1ZmZlciBvciByZWFkaW5nIGZyb20gYW4gZW1wdHkgb3V0cHV0CitidWZmZXIuCisKIEVYQU1QTEVTCiAtLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1pZ25vcmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2staWdub3JlLnR4dAppbmRleCA4NTRlNGQwLi5kMmRmNDg3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1pZ25vcmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLWlnbm9yZS50eHQKQEAgLTM5LDYgKzM5LDEyIEBACiAJYmVsb3cpLiAgSWYgYC0tc3RkaW5gIGlzIGFsc28gZ2l2ZW4sIGlucHV0IHBhdGhzIGFyZSBzZXBhcmF0ZWQKIAl3aXRoIGEgTlVMIGNoYXJhY3RlciBpbnN0ZWFkIG9mIGEgbGluZWZlZWQgY2hhcmFjdGVyLgogCistbiwgLS1ub24tbWF0Y2hpbmc6OgorCVNob3cgZ2l2ZW4gcGF0aHMgd2hpY2ggZG9uJ3QgbWF0Y2ggYW55IHBhdHRlcm4uCSBUaGlzIG9ubHkKKwltYWtlcyBzZW5zZSB3aGVuIGAtLXZlcmJvc2VgIGlzIGVuYWJsZWQsIG90aGVyd2lzZSBpdCB3b3VsZAorCW5vdCBiZSBwb3NzaWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHBhdGhzIHdoaWNoIG1hdGNoIGEKKwlwYXR0ZXJuIGFuZCB0aG9zZSB3aGljaCBkb24ndC4KKwogT1VUUFVUCiAtLS0tLS0KIApAQCAtNjUsNiArNzEsMjAgQEAKIAogPHNvdXJjZT4gPE5VTEw+IDxsaW5lbnVtPiA8TlVMTD4gPHBhdHRlcm4+IDxOVUxMPiA8cGF0aG5hbWU+IDxOVUxMPgogCitJZiBgLW5gIG9yIGAtLW5vbi1tYXRjaGluZ2AgYXJlIHNwZWNpZmllZCwgbm9uLW1hdGNoaW5nIHBhdGhuYW1lcyB3aWxsCithbHNvIGJlIG91dHB1dCwgaW4gd2hpY2ggY2FzZSBhbGwgZmllbGRzIGluIGVhY2ggb3V0cHV0IHJlY29yZCBleGNlcHQKK2ZvciA8cGF0aG5hbWU+IHdpbGwgYmUgZW1wdHkuICBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiBydW5uaW5nCitub24taW50ZXJhY3RpdmVseSwgc28gdGhhdCBmaWxlcyBjYW4gYmUgaW5jcmVtZW50YWxseSBzdHJlYW1lZCB0bworU1RESU4gb2YgYSBsb25nLXJ1bm5pbmcgY2hlY2staWdub3JlIHByb2Nlc3MsIGFuZCBmb3IgZWFjaCBvZiB0aGVzZQorZmlsZXMsIFNURE9VVCB3aWxsIGluZGljYXRlIHdoZXRoZXIgdGhhdCBmaWxlIG1hdGNoZWQgYSBwYXR0ZXJuIG9yCitub3QuICAoV2l0aG91dCB0aGlzIG9wdGlvbiwgaXQgd291bGQgYmUgaW1wb3NzaWJsZSB0byB0ZWxsIHdoZXRoZXIgdGhlCithYnNlbmNlIG9mIG91dHB1dCBmb3IgYSBnaXZlbiBmaWxlIG1lYW50IHRoYXQgaXQgZGlkbid0IG1hdGNoIGFueQorcGF0dGVybiwgb3IgdGhhdCB0aGUgb3V0cHV0IGhhZG4ndCBiZWVuIGdlbmVyYXRlZCB5ZXQuKQorCitCdWZmZXJpbmcgaGFwcGVucyBhcyBkb2N1bWVudGVkIHVuZGVyIHRoZSBgR0lUX0ZMVVNIYCBvcHRpb24gaW4KK2xpbmtnaXQ6Z2l0WzFdLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgYXZvaWRpbmcgZGVhZGxvY2tzCitjYXVzZWQgYnkgb3ZlcmZpbGxpbmcgYW4gaW5wdXQgYnVmZmVyIG9yIHJlYWRpbmcgZnJvbSBhbiBlbXB0eSBvdXRwdXQKK2J1ZmZlci4KIAogRVhJVCBTVEFUVVMKIC0tLS0tLS0tLS0tCkBAIC04Miw3ICsxMDIsNyBAQAogLS0tLS0tLS0KIGxpbmtnaXQ6Z2l0aWdub3JlWzVdCiBsaW5rZ2l0OmdpdGNvbmZpZ1s1XQotbGlua2dpdDpnaXQtbHMtZmlsZXNbNV0KK2xpbmtnaXQ6Z2l0LWxzLWZpbGVzWzFdCiAKIEdJVAogLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1tYWlsbWFwLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLW1haWxtYXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MDI4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1tYWlsbWFwLnR4dApAQCAtMCwwICsxLDQ3IEBACitnaXQtY2hlY2stbWFpbG1hcCgxKQorPT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNoZWNrLW1haWxtYXAgLSBTaG93IGNhbm9uaWNhbCBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzIG9mIGNvbnRhY3RzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNoZWNrLW1haWxtYXAnIFtvcHRpb25zXSA8Y29udGFjdD4uLi4KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworRm9yIGVhY2ggYGBOYW1lICQkPHVzZXJAaG9zdD4kJCcnIG9yIGBgJCQ8dXNlckBob3N0PiQkJycgZnJvbSB0aGUgY29tbWFuZC1saW5lCitvciBzdGFuZGFyZCBpbnB1dCAod2hlbiB1c2luZyBgLS1zdGRpbmApLCBsb29rIHVwIHRoZSBwZXJzb24ncyBjYW5vbmljYWwgbmFtZQorYW5kIGVtYWlsIGFkZHJlc3MgKHNlZSAiTWFwcGluZyBBdXRob3JzIiBiZWxvdykuIElmIGZvdW5kLCBwcmludCB0aGVtOworb3RoZXJ3aXNlIHByaW50IHRoZSBpbnB1dCBhcy1pcy4KKworCitPUFRJT05TCistLS0tLS0tCistLXN0ZGluOjoKKwlSZWFkIGNvbnRhY3RzLCBvbmUgcGVyIGxpbmUsIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IGFmdGVyIGV4aGF1c3RpbmcKKwljb250YWN0cyBwcm92aWRlZCBvbiB0aGUgY29tbWFuZC1saW5lLgorCisKK09VVFBVVAorLS0tLS0tCisKK0ZvciBlYWNoIGNvbnRhY3QsIGEgc2luZ2xlIGxpbmUgaXMgb3V0cHV0LCB0ZXJtaW5hdGVkIGJ5IGEgbmV3bGluZS4gIElmIHRoZQorbmFtZSBpcyBwcm92aWRlZCBvciBrbm93biB0byB0aGUgJ21haWxtYXAnLCBgYE5hbWUgJCQ8dXNlckBob3N0PiQkJycgaXMKK3ByaW50ZWQ7IG90aGVyd2lzZSBvbmx5IGBgJCQ8dXNlckBob3N0PiQkJycgaXMgcHJpbnRlZC4KKworCitNQVBQSU5HIEFVVEhPUlMKKy0tLS0tLS0tLS0tLS0tLQorCitpbmNsdWRlOjptYWlsbWFwLnR4dFtdCisKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1yZWYtZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0CmluZGV4IGE0OWJlMWIuLmZjMDI5NTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0CkBAIC01NCw2ICs1NCw4IEBACiAKIC4gVGhleSBjYW5ub3QgY29udGFpbiBhIHNlcXVlbmNlIGBAe2AuCiAKKy4gVGhleSBjYW5ub3QgYmUgdGhlIHNpbmdsZSBjaGFyYWN0ZXIgYEBgLgorCiAuIFRoZXkgY2Fubm90IGNvbnRhaW4gYSBgXGAuCiAKIFRoZXNlIHJ1bGVzIG1ha2UgaXQgZWFzeSBmb3Igc2hlbGwgc2NyaXB0IGJhc2VkIHRvb2xzIHRvIHBhcnNlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC50eHQKaW5kZXggMjNhOTQxMy4uY2ExMThhYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LnR4dApAQCAtMTMxLDkgKzEzMSw5IEBACiAJIi0tdHJhY2siIGluIGxpbmtnaXQ6Z2l0LWJyYW5jaFsxXSBmb3IgZGV0YWlscy4KICsKIElmIG5vICctYicgb3B0aW9uIGlzIGdpdmVuLCB0aGUgbmFtZSBvZiB0aGUgbmV3IGJyYW5jaCB3aWxsIGJlCi1kZXJpdmVkIGZyb20gdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2guICBJZiAicmVtb3Rlcy8iIG9yICJyZWZzL3JlbW90ZXMvIgotaXMgcHJlZml4ZWQgaXQgaXMgc3RyaXBwZWQgYXdheSwgYW5kIHRoZW4gdGhlIHBhcnQgdXAgdG8gdGhlCi1uZXh0IHNsYXNoICh3aGljaCB3b3VsZCBiZSB0aGUgbmlja25hbWUgb2YgdGhlIHJlbW90ZSkgaXMgcmVtb3ZlZC4KK2Rlcml2ZWQgZnJvbSB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCwgYnkgbG9va2luZyBhdCB0aGUgbG9jYWwgcGFydCBvZgordGhlIHJlZnNwZWMgY29uZmlndXJlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgcmVtb3RlLCBhbmQgdGhlbiBzdHJpcHBpbmcKK3RoZSBpbml0aWFsIHBhcnQgdXAgdG8gdGhlICIqIi4KIFRoaXMgd291bGQgdGVsbCB1cyB0byB1c2UgImhhY2siIGFzIHRoZSBsb2NhbCBicmFuY2ggd2hlbiBicmFuY2hpbmcKIG9mZiBvZiAib3JpZ2luL2hhY2siIChvciAicmVtb3Rlcy9vcmlnaW4vaGFjayIsIG9yIGV2ZW4KICJyZWZzL3JlbW90ZXMvb3JpZ2luL2hhY2siKS4gIElmIHRoZSBnaXZlbiBuYW1lIGhhcyBubyBzbGFzaCwgb3IgdGhlIGFib3ZlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jbGVhbi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jbGVhbi50eHQKaW5kZXggYmRjM2FiOC4uNzVmYjU0MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY2xlYW4udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNsZWFuLnR4dApAQCAtOCw3ICs4LDcgQEAKIFNZTk9QU0lTCiAtLS0tLS0tLQogW3ZlcnNlXQotJ2dpdCBjbGVhbicgWy1kXSBbLWZdIFstbl0gWy1xXSBbLWUgPHBhdHRlcm4+XSBbLXggfCAtWF0gWy0tXSA8cGF0aD4uLi4KKydnaXQgY2xlYW4nIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPHBhdHRlcm4+XSBbLXggfCAtWF0gWy0tXSA8cGF0aD4uLi4KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC0zNCw3ICszNCwxMyBAQAogLWY6OgogLS1mb3JjZTo6CiAJSWYgdGhlIEdpdCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNsZWFuLnJlcXVpcmVGb3JjZSBpcyBub3Qgc2V0Ci0JdG8gZmFsc2UsICdnaXQgY2xlYW4nIHdpbGwgcmVmdXNlIHRvIHJ1biB1bmxlc3MgZ2l2ZW4gLWYgb3IgLW4uCisJdG8gZmFsc2UsICdnaXQgY2xlYW4nIHdpbGwgcmVmdXNlIHRvIHJ1biB1bmxlc3MgZ2l2ZW4gLWYsIC1uIG9yCisJLWkuCisKKy1pOjoKKy0taW50ZXJhY3RpdmU6OgorCVNob3cgd2hhdCB3b3VsZCBiZSBkb25lIGFuZCBjbGVhbiBmaWxlcyBpbnRlcmFjdGl2ZWx5LiBTZWUKKwlgYEludGVyYWN0aXZlIG1vZGUnJyBmb3IgZGV0YWlscy4KIAogLW46OgogLS1kcnktcnVuOjoKQEAgLTYzLDYgKzY5LDY3IEBACiAJUmVtb3ZlIG9ubHkgZmlsZXMgaWdub3JlZCBieSBHaXQuICBUaGlzIG1heSBiZSB1c2VmdWwgdG8gcmVidWlsZAogCWV2ZXJ5dGhpbmcgZnJvbSBzY3JhdGNoLCBidXQga2VlcCBtYW51YWxseSBjcmVhdGVkIGZpbGVzLgogCitJbnRlcmFjdGl2ZSBtb2RlCistLS0tLS0tLS0tLS0tLS0tCitXaGVuIHRoZSBjb21tYW5kIGVudGVycyB0aGUgaW50ZXJhY3RpdmUgbW9kZSwgaXQgc2hvd3MgdGhlCitmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gYmUgY2xlYW5lZCwgYW5kIGdvZXMgaW50byBpdHMKK2ludGVyYWN0aXZlIGNvbW1hbmQgbG9vcC4KKworVGhlIGNvbW1hbmQgbG9vcCBzaG93cyB0aGUgbGlzdCBvZiBzdWJjb21tYW5kcyBhdmFpbGFibGUsIGFuZAorZ2l2ZXMgYSBwcm9tcHQgIldoYXQgbm93PiAiLiAgSW4gZ2VuZXJhbCwgd2hlbiB0aGUgcHJvbXB0IGVuZHMKK3dpdGggYSBzaW5nbGUgJz4nLCB5b3UgY2FuIHBpY2sgb25seSBvbmUgb2YgdGhlIGNob2ljZXMgZ2l2ZW4KK2FuZCB0eXBlIHJldHVybiwgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyAgICAqKiogQ29tbWFuZHMgKioqCisJMTogY2xlYW4gICAgICAgICAgICAgICAgMjogZmlsdGVyIGJ5IHBhdHRlcm4gICAgMzogc2VsZWN0IGJ5IG51bWJlcnMKKwk0OiBhc2sgZWFjaCAgICAgICAgICAgICA1OiBxdWl0ICAgICAgICAgICAgICAgICA2OiBoZWxwCisgICAgV2hhdCBub3c+IDEKKy0tLS0tLS0tLS0tLQorCitZb3UgYWxzbyBjb3VsZCBzYXkgYGNgIG9yIGBjbGVhbmAgYWJvdmUgYXMgbG9uZyBhcyB0aGUgY2hvaWNlIGlzIHVuaXF1ZS4KKworVGhlIG1haW4gY29tbWFuZCBsb29wIGhhcyA2IHN1YmNvbW1hbmRzLgorCitjbGVhbjo6CisKKyAgIFN0YXJ0IGNsZWFuaW5nIGZpbGVzIGFuZCBkaXJlY3RvcmllcywgYW5kIHRoZW4gcXVpdC4KKworZmlsdGVyIGJ5IHBhdHRlcm46OgorCisgICBUaGlzIHNob3dzIHRoZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gYmUgZGVsZXRlZCBhbmQgaXNzdWVzIGFuCisgICAiSW5wdXQgaWdub3JlIHBhdHRlcm5zPj4iIHByb21wdC4gWW91IGNhbiBpbnB1dCBzcGFjZS1zZXBlcmF0ZWQKKyAgIHBhdHRlcm5zIHRvIGV4Y2x1ZGUgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGZyb20gZGVsZXRpb24uCisgICBFLmcuICIqLmMgKi5oIiB3aWxsIGV4Y2x1ZGVzIGZpbGVzIGVuZCB3aXRoICIuYyIgYW5kICIuaCIgZnJvbQorICAgZGVsZXRpb24uIFdoZW4geW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB0aGUgZmlsdGVyZWQgcmVzdWx0LCBwcmVzcworICAgRU5URVIgKGVtcHR5KSBiYWNrIHRvIHRoZSBtYWluIG1lbnUuCisKK3NlbGVjdCBieSBudW1iZXJzOjoKKworICAgVGhpcyBzaG93cyB0aGUgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGJlIGRlbGV0ZWQgYW5kIGlzc3VlcyBhbgorICAgIlNlbGVjdCBpdGVtcyB0byBkZWxldGU+PiIgcHJvbXB0LiBXaGVuIHRoZSBwcm9tcHQgZW5kcyB3aXRoIGRvdWJsZQorICAgJz4+JyBsaWtlIHRoaXMsIHlvdSBjYW4gbWFrZSBtb3JlIHRoYW4gb25lIHNlbGVjdGlvbiwgY29uY2F0ZW5hdGVkCisgICB3aXRoIHdoaXRlc3BhY2Ugb3IgY29tbWEuICBBbHNvIHlvdSBjYW4gc2F5IHJhbmdlcy4gIEUuZy4gIjItNSA3LDkiCisgICB0byBjaG9vc2UgMiwzLDQsNSw3LDkgZnJvbSB0aGUgbGlzdC4gIElmIHRoZSBzZWNvbmQgbnVtYmVyIGluIGEKKyAgIHJhbmdlIGlzIG9taXR0ZWQsIGFsbCByZW1haW5pbmcgcGF0Y2hlcyBhcmUgdGFrZW4uICBFLmcuICI3LSIgdG8KKyAgIGNob29zZSA3LDgsOSBmcm9tIHRoZSBsaXN0LiAgWW91IGNhbiBzYXkgJyonIHRvIGNob29zZSBldmVyeXRoaW5nLgorICAgQWxzbyB3aGVuIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggdGhlIGZpbHRlcmVkIHJlc3VsdCwgcHJlc3MgRU5URVIKKyAgIChlbXB0eSkgYmFjayB0byB0aGUgbWFpbiBtZW51LgorCithc2sgZWFjaDo6CisKKyAgVGhpcyB3aWxsIHN0YXJ0IHRvIGNsZWFuLCBhbmQgeW91IG11c3QgY29uZmlybSBvbmUgYnkgb25lIGluIG9yZGVyCisgIHRvIGRlbGV0ZSBpdGVtcy4gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGFjdGlvbiBpcyBub3QgYXMgZWZmaWNpZW50CisgIGFzIHRoZSBhYm92ZSB0d28gYWN0aW9ucy4KKworcXVpdDo6CisKKyAgVGhpcyBsZXRzIHlvdSBxdWl0IHdpdGhvdXQgZG8gY2xlYW5pbmcuCisKK2hlbHA6OgorCisgIFNob3cgYnJpZWYgdXNhZ2Ugb2YgaW50ZXJhY3RpdmUgZ2l0LWNsZWFuLgorCiBTRUUgQUxTTwogLS0tLS0tLS0KIGxpbmtnaXQ6Z2l0aWdub3JlWzVdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS50eHQKaW5kZXggYTA3MjdkNy4uNDUwZjE1OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY2xvbmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNsb25lLnR4dApAQCAtMjM5LDggKzIzOSw4IEBACiAqIENsb25lIGZyb20gdXBzdHJlYW06CiArCiAtLS0tLS0tLS0tLS0KLSQgZ2l0IGNsb25lIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vLi4uL2xpbnV4LTIuNiBteTIuNgotJCBjZCBteTIuNgorJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS8uLi4vbGludXguZ2l0IG15LWxpbnV4CiskIGNkIG15LWxpbnV4CiAkIG1ha2UKIC0tLS0tLS0tLS0tLQogCkBAIC0yNTcsMTAgKzI1NywxMCBAQAogKiBDbG9uZSBmcm9tIHVwc3RyZWFtIHdoaWxlIGJvcnJvd2luZyBmcm9tIGFuIGV4aXN0aW5nIGxvY2FsIGRpcmVjdG9yeToKICsKIC0tLS0tLS0tLS0tLQotJCBnaXQgY2xvbmUgLS1yZWZlcmVuY2UgbXkyLjYgXAotCWdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vLi4uL2xpbnV4LTIuNyBcCi0JbXkyLjcKLSQgY2QgbXkyLjcKKyQgZ2l0IGNsb25lIC0tcmVmZXJlbmNlIC9naXQvbGludXguZ2l0IFwKKwlnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtLy4uLi9saW51eC5naXQgXAorCW15LWxpbnV4CiskIGNkIG15LWxpbnV4CiAtLS0tLS0tLS0tLS0KIAogCkBAIC0yNzEsMTMgKzI3MSw2IEBACiAtLS0tLS0tLS0tLS0KIAogCi0qIENyZWF0ZSBhIHJlcG9zaXRvcnkgb24gdGhlIGtlcm5lbC5vcmcgbWFjaGluZSB0aGF0IGJvcnJvd3MgZnJvbSBMaW51czoKLSsKLS0tLS0tLS0tLS0tLQotJCBnaXQgY2xvbmUgLS1iYXJlIC1sIC1zIC9wdWIvc2NtLy4uLi90b3J2YWxkcy9saW51eC0yLjYuZ2l0IFwKLSAgICAvcHViL3NjbS8uLi4vbWUvc3Vic3lzLTIuNi5naXQKLS0tLS0tLS0tLS0tLQotCiBHSVQKIC0tLQogUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNvbmZpZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb25maWcudHh0CmluZGV4IGQ4OGE2ZmMuLjM0YjA4OTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNvbmZpZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY29uZmlnLnR4dApAQCAtODIsNyArODIsNyBAQAogLS1nZXQ6OgogCUdldCB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4ga2V5IChvcHRpb25hbGx5IGZpbHRlcmVkIGJ5IGEgcmVnZXgKIAltYXRjaGluZyB0aGUgdmFsdWUpLiBSZXR1cm5zIGVycm9yIGNvZGUgMSBpZiB0aGUga2V5IHdhcyBub3QKLQlmb3VuZCBhbmQgZXJyb3IgY29kZSAyIGlmIG11bHRpcGxlIGtleSB2YWx1ZXMgd2VyZSBmb3VuZC4KKwlmb3VuZCBhbmQgdGhlIGxhc3QgdmFsdWUgaWYgbXVsdGlwbGUga2V5IHZhbHVlcyB3ZXJlIGZvdW5kLgogCiAtLWdldC1hbGw6OgogCUxpa2UgZ2V0LCBidXQgZG9lcyBub3QgZmFpbCBpZiB0aGUgbnVtYmVyIG9mIHZhbHVlcyBmb3IgdGhlIGtleQpAQCAtMTE0LDEwICsxMTQsMjYgQEAKICsKIFNlZSBhbHNvIDw8RklMRVM+Pi4KIAorLS1sb2NhbDo6CisJRm9yIHdyaXRpbmcgb3B0aW9uczogd3JpdGUgdG8gdGhlIHJlcG9zaXRvcnkgLmdpdC9jb25maWcgZmlsZS4KKwlUaGlzIGlzCXRoZSBkZWZhdWx0IGJlaGF2aW9yLgorKworRm9yIHJlYWRpbmcgb3B0aW9uczogcmVhZCBvbmx5IGZyb20gdGhlIHJlcG9zaXRvcnkgLmdpdC9jb25maWcgcmF0aGVyIHRoYW4KK2Zyb20gYWxsIGF2YWlsYWJsZSBmaWxlcy4KKysKK1NlZSBhbHNvIDw8RklMRVM+Pi4KKwogLWYgY29uZmlnLWZpbGU6OgogLS1maWxlIGNvbmZpZy1maWxlOjoKIAlVc2UgdGhlIGdpdmVuIGNvbmZpZyBmaWxlIGluc3RlYWQgb2YgdGhlIG9uZSBzcGVjaWZpZWQgYnkgR0lUX0NPTkZJRy4KIAorLS1ibG9iIGJsb2I6OgorCVNpbWlsYXIgdG8gJy0tZmlsZScgYnV0IHVzZSB0aGUgZ2l2ZW4gYmxvYiBpbnN0ZWFkIG9mIGEgZmlsZS4gRS5nLgorCXlvdSBjYW4gdXNlICdtYXN0ZXI6LmdpdG1vZHVsZXMnIHRvIHJlYWQgdmFsdWVzIGZyb20gdGhlIGZpbGUKKwknLmdpdG1vZHVsZXMnIGluIHRoZSBtYXN0ZXIgYnJhbmNoLiBTZWUgIlNQRUNJRllJTkcgUkVWSVNJT05TIgorCXNlY3Rpb24gaW4gbGlua2dpdDpnaXRyZXZpc2lvbnNbN10gZm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0IG9mCisJd2F5cyB0byBzcGVsbCBibG9iIG5hbWVzLgorCiAtLXJlbW92ZS1zZWN0aW9uOjoKIAlSZW1vdmUgdGhlIGdpdmVuIHNlY3Rpb24gZnJvbSB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgogCkBAIC0xOTcsMTIgKzIxMyw4IEBACiBJZiBub3Qgc2V0IGV4cGxpY2l0bHkgd2l0aCAnLS1maWxlJywgdGhlcmUgYXJlIGZvdXIgZmlsZXMgd2hlcmUKICdnaXQgY29uZmlnJyB3aWxsIHNlYXJjaCBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zOgogCi0kR0lUX0RJUi9jb25maWc6OgotCVJlcG9zaXRvcnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlLgotCi1+Ly5naXRjb25maWc6OgotCVVzZXItc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlLiBBbHNvIGNhbGxlZCAiZ2xvYmFsIgotCWNvbmZpZ3VyYXRpb24gZmlsZS4KKyQocHJlZml4KS9ldGMvZ2l0Y29uZmlnOjoKKwlTeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUuCiAKICRYREdfQ09ORklHX0hPTUUvZ2l0L2NvbmZpZzo6CiAJU2Vjb25kIHVzZXItc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlLiBJZiAkWERHX0NPTkZJR19IT01FIGlzIG5vdCBzZXQKQEAgLTIxMiw4ICsyMjQsMTIgQEAKIAl5b3Ugc29tZXRpbWVzIHVzZSBvbGRlciB2ZXJzaW9ucyBvZiBHaXQsIGFzIHN1cHBvcnQgZm9yIHRoaXMKIAlmaWxlIHdhcyBhZGRlZCBmYWlybHkgcmVjZW50bHkuCiAKLSQocHJlZml4KS9ldGMvZ2l0Y29uZmlnOjoKLQlTeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUuCit+Ly5naXRjb25maWc6OgorCVVzZXItc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlLiBBbHNvIGNhbGxlZCAiZ2xvYmFsIgorCWNvbmZpZ3VyYXRpb24gZmlsZS4KKworJEdJVF9ESVIvY29uZmlnOjoKKwlSZXBvc2l0b3J5IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZS4KIAogSWYgbm8gZnVydGhlciBvcHRpb25zIGFyZSBnaXZlbiwgYWxsIHJlYWRpbmcgb3B0aW9ucyB3aWxsIHJlYWQgYWxsIG9mIHRoZXNlCiBmaWxlcyB0aGF0IGFyZSBhdmFpbGFibGUuIElmIHRoZSBnbG9iYWwgb3IgdGhlIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24KQEAgLTIyMSw2ICsyMzcsMTAgQEAKIGZpbGUgaXMgbm90IGF2YWlsYWJsZSBvciByZWFkYWJsZSwgJ2dpdCBjb25maWcnIHdpbGwgZXhpdCB3aXRoIGEgbm9uLXplcm8KIGVycm9yIGNvZGUuIEhvd2V2ZXIsIGluIG5laXRoZXIgY2FzZSB3aWxsIGFuIGVycm9yIG1lc3NhZ2UgYmUgaXNzdWVkLgogCitUaGUgZmlsZXMgYXJlIHJlYWQgaW4gdGhlIG9yZGVyIGdpdmVuIGFib3ZlLCB3aXRoIGxhc3QgdmFsdWUgZm91bmQgdGFraW5nCitwcmVjZWRlbmNlIG92ZXIgdmFsdWVzIHJlYWQgZWFybGllci4gIFdoZW4gbXVsdGlwbGUgdmFsdWVzIGFyZSB0YWtlbiB0aGVuIGFsbAordmFsdWVzIG9mIGEga2V5IGZyb20gYWxsIGZpbGVzIHdpbGwgYmUgdXNlZC4KKwogQWxsIHdyaXRpbmcgb3B0aW9ucyB3aWxsIHBlciBkZWZhdWx0IHdyaXRlIHRvIHRoZSByZXBvc2l0b3J5IHNwZWNpZmljCiBjb25maWd1cmF0aW9uIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGFsc28gYWZmZWN0cyBvcHRpb25zIGxpa2UgJy0tcmVwbGFjZS1hbGwnCiBhbmQgJy0tdW5zZXQnLiAqJ2dpdCBjb25maWcnIHdpbGwgb25seSBldmVyIGNoYW5nZSBvbmUgZmlsZSBhdCBhIHRpbWUqLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGVzY3JpYmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZGVzY3JpYmUudHh0CmluZGV4IDI4ZTVlYzAuLjk0MzljZDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWRlc2NyaWJlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kZXNjcmliZS50eHQKQEAgLTg4LDYgKzg4LDExIEBACiAtLWFsd2F5czo6CiAJU2hvdyB1bmlxdWVseSBhYmJyZXZpYXRlZCBjb21taXQgb2JqZWN0IGFzIGZhbGxiYWNrLgogCistLWZpcnN0LXBhcmVudDo6CisJRm9sbG93IG9ubHkgdGhlIGZpcnN0IHBhcmVudCBjb21taXQgdXBvbiBzZWVpbmcgYSBtZXJnZSBjb21taXQuCisJVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byBub3QgbWF0Y2ggdGFncyBvbiBicmFuY2hlcyBtZXJnZWQKKwlpbiB0aGUgaGlzdG9yeSBvZiB0aGUgdGFyZ2V0IGNvbW1pdC4KKwogRVhBTVBMRVMKIC0tLS0tLS0tCiAKQEAgLTE0OSw3ICsxNTQsOSBAQAogSWYgYW4gZXhhY3QgbWF0Y2ggd2FzIG5vdCBmb3VuZCwgJ2dpdCBkZXNjcmliZScgd2lsbCB3YWxrIGJhY2sKIHRocm91Z2ggdGhlIGNvbW1pdCBoaXN0b3J5IHRvIGxvY2F0ZSBhbiBhbmNlc3RvciBjb21taXQgd2hpY2gKIGhhcyBiZWVuIHRhZ2dlZC4gIFRoZSBhbmNlc3RvcidzIHRhZyB3aWxsIGJlIG91dHB1dCBhbG9uZyB3aXRoIGFuCi1hYmJyZXZpYXRpb24gb2YgdGhlIGlucHV0IGNvbW1pdHRpc2gncyBTSEEtMS4KK2FiYnJldmlhdGlvbiBvZiB0aGUgaW5wdXQgY29tbWl0dGlzaCdzIFNIQS0xLiBJZiAnLS1maXJzdC1wYXJlbnQnIHdhcworc3BlY2lmaWVkIHRoZW4gdGhlIHdhbGsgd2lsbCBvbmx5IGNvbnNpZGVyIHRoZSBmaXJzdCBwYXJlbnQgb2YgZWFjaAorY29tbWl0LgogCiBJZiBtdWx0aXBsZSB0YWdzIHdlcmUgZm91bmQgZHVyaW5nIHRoZSB3YWxrIHRoZW4gdGhlIHRhZyB3aGljaAogaGFzIHRoZSBmZXdlc3QgY29tbWl0cyBkaWZmZXJlbnQgZnJvbSB0aGUgaW5wdXQgY29tbWl0dGlzaCB3aWxsIGJlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtaW5kZXgudHh0CmluZGV4IGMwYjdjNTguLmE4NmNmNjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtaW5kZXgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtaW5kZXgudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtZGlmZi1pbmRleCAtIENvbXBhcmVzIGNvbnRlbnQgYW5kIG1vZGUgb2YgYmxvYnMgYmV0d2VlbiB0aGUgaW5kZXggYW5kIHJlcG9zaXRvcnkKK2dpdC1kaWZmLWluZGV4IC0gQ29tcGFyZSBhIHRyZWUgdG8gdGhlIHdvcmtpbmcgdHJlZSBvciBpbmRleAogCiAKIFNZTk9QU0lTCkBAIC0xMywxMSArMTMsMTEgQEAKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1Db21wYXJlcyB0aGUgY29udGVudCBhbmQgbW9kZSBvZiB0aGUgYmxvYnMgZm91bmQgdmlhIGEgdHJlZQotb2JqZWN0IHdpdGggdGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQgaW5kZXggYW5kLCBvcHRpb25hbGx5Ci1pZ25vcmluZyB0aGUgc3RhdCBzdGF0ZSBvZiB0aGUgZmlsZSBvbiBkaXNrLiAgV2hlbiBwYXRocyBhcmUKLXNwZWNpZmllZCwgY29tcGFyZXMgb25seSB0aG9zZSBuYW1lZCBwYXRocy4gIE90aGVyd2lzZSBhbGwKLWVudHJpZXMgaW4gdGhlIGluZGV4IGFyZSBjb21wYXJlZC4KK0NvbXBhcmVzIHRoZSBjb250ZW50IGFuZCBtb2RlIG9mIHRoZSBibG9icyBmb3VuZCBpbiBhIHRyZWUgb2JqZWN0Cit3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHRyYWNrZWQgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSwgb3Igd2l0aCB0aGUKK2NvcnJlc3BvbmRpbmcgcGF0aHMgaW4gdGhlIGluZGV4LiAgV2hlbiA8cGF0aD4gYXJndW1lbnRzIGFyZSBwcmVzZW50LAorY29tcGFyZXMgb25seSBwYXRocyBtYXRjaGluZyB0aG9zZSBwYXR0ZXJucy4gIE90aGVyd2lzZSBhbGwgdHJhY2tlZAorZmlsZXMgYXJlIGNvbXBhcmVkLgogCiBPUFRJT05TCiAtLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYudHh0CmluZGV4IGE3YjQ2MjAuLjc4ZDZkNTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYudHh0CkBAIC0xOCw4ICsxOCw4IEBACiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KIFNob3cgY2hhbmdlcyBiZXR3ZWVuIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCBvciBhIHRyZWUsIGNoYW5nZXMKLWJldHdlZW4gdGhlIGluZGV4IGFuZCBhIHRyZWUsIGNoYW5nZXMgYmV0d2VlbiB0d28gdHJlZXMsIG9yIGNoYW5nZXMKLWJldHdlZW4gdHdvIGZpbGVzIG9uIGRpc2suCitiZXR3ZWVuIHRoZSBpbmRleCBhbmQgYSB0cmVlLCBjaGFuZ2VzIGJldHdlZW4gdHdvIHRyZWVzLCBjaGFuZ2VzIGJldHdlZW4KK3R3byBibG9iIG9iamVjdHMsIG9yIGNoYW5nZXMgYmV0d2VlbiB0d28gZmlsZXMgb24gZGlzay4KIAogJ2dpdCBkaWZmJyBbLS1vcHRpb25zXSBbLS1dIFs8cGF0aD4uLi5dOjoKIApAQCAtNTYsMTEgKzU2LDYgQEAKIAlUaGlzIGlzIHRvIHZpZXcgdGhlIGNoYW5nZXMgYmV0d2VlbiB0d28gYXJiaXRyYXJ5CiAJPGNvbW1pdD4uCiAKLSdnaXQgZGlmZicgW29wdGlvbnNdIDxibG9iPiA8YmxvYj46OgotCi0JVGhpcyBmb3JtIGlzIHRvIHZpZXcgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHJhdwotCWNvbnRlbnRzIG9mIHR3byBibG9iIG9iamVjdHMuCi0KICdnaXQgZGlmZicgWy0tb3B0aW9uc10gPGNvbW1pdD4uLjxjb21taXQ+IFstLV0gWzxwYXRoPi4uLl06OgogCiAJVGhpcyBpcyBzeW5vbnltb3VzIHRvIHRoZSBwcmV2aW91cyBmb3JtLiAgSWYgPGNvbW1pdD4gb24KQEAgLTg3LDYgKzgyLDExIEBACiAiPGNvbW1pdD5cLi4uPGNvbW1pdD4iKSBkbyBub3QgbWVhbiBhIHJhbmdlIGFzIGRlZmluZWQgaW4gdGhlCiAiU1BFQ0lGWUlORyBSQU5HRVMiIHNlY3Rpb24gaW4gbGlua2dpdDpnaXRyZXZpc2lvbnNbN10uCiAKKydnaXQgZGlmZicgW29wdGlvbnNdIDxibG9iPiA8YmxvYj46OgorCisJVGhpcyBmb3JtIGlzIHRvIHZpZXcgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHJhdworCWNvbnRlbnRzIG9mIHR3byBibG9iIG9iamVjdHMuCisKIE9QVElPTlMKIC0tLS0tLS0KIDpnaXQtZGlmZjogMQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1leHBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1leHBvcnQudHh0CmluZGV4IGVmYjAzODAuLjg1ZjFmMzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtZXhwb3J0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mYXN0LWV4cG9ydC50eHQKQEAgLTE0MSw3ICsxNDEsNyBAQAogLS0tLS0tLS0tLS0KIAogU2luY2UgJ2dpdCBmYXN0LWltcG9ydCcgY2Fubm90IHRhZyB0cmVlcywgeW91IHdpbGwgbm90IGJlCi1hYmxlIHRvIGV4cG9ydCB0aGUgbGludXgtMi42LmdpdCByZXBvc2l0b3J5IGNvbXBsZXRlbHksIGFzIGl0IGNvbnRhaW5zCithYmxlIHRvIGV4cG9ydCB0aGUgbGludXguZ2l0IHJlcG9zaXRvcnkgY29tcGxldGVseSwgYXMgaXQgY29udGFpbnMKIGEgdGFnIHJlZmVyZW5jaW5nIGEgdHJlZSBpbnN0ZWFkIG9mIGEgY29tbWl0LgogCiBHSVQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0CmluZGV4IDM5MTE4NzcuLmUzOTQyNzYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dApAQCAtMTg3LDYgKzE4NywyMSBAQAogCVRoZSBuZWdhdGVkIGZvcm0gYC0tbm8tY2NgIGRpc2NhcmRzIGFsbCBgQ2M6YCBoZWFkZXJzIGFkZGVkIHNvCiAJZmFyIChmcm9tIGNvbmZpZyBvciBjb21tYW5kIGxpbmUpLgogCistLWZyb206OgorLS1mcm9tPTxpZGVudD46OgorCVVzZSBgaWRlbnRgIGluIHRoZSBgRnJvbTpgIGhlYWRlciBvZiBlYWNoIGNvbW1pdCBlbWFpbC4gSWYgdGhlCisJYXV0aG9yIGlkZW50IG9mIHRoZSBjb21taXQgaXMgbm90IHRleHR1YWxseSBpZGVudGljYWwgdG8gdGhlCisJcHJvdmlkZWQgYGlkZW50YCwgcGxhY2UgYSBgRnJvbTpgIGhlYWRlciBpbiB0aGUgYm9keSBvZiB0aGUKKwltZXNzYWdlIHdpdGggdGhlIG9yaWdpbmFsIGF1dGhvci4gSWYgbm8gYGlkZW50YCBpcyBnaXZlbiwgdXNlCisJdGhlIGNvbW1pdHRlciBpZGVudC4KKysKK05vdGUgdGhhdCB0aGlzIG9wdGlvbiBpcyBvbmx5IHVzZWZ1bCBpZiB5b3UgYXJlIGFjdHVhbGx5IHNlbmRpbmcgdGhlCitlbWFpbHMgYW5kIHdhbnQgdG8gaWRlbnRpZnkgeW91cnNlbGYgYXMgdGhlIHNlbmRlciwgYnV0IHJldGFpbiB0aGUKK29yaWdpbmFsIGF1dGhvciAoYW5kIGBnaXQgYW1gIHdpbGwgY29ycmVjdGx5IHBpY2sgdXAgdGhlIGluLWJvZHkKK2hlYWRlcikuIE5vdGUgYWxzbyB0aGF0IGBnaXQgc2VuZC1lbWFpbGAgYWxyZWFkeSBoYW5kbGVzIHRoaXMKK3RyYW5zZm9ybWF0aW9uIGZvciB5b3UsIGFuZCB0aGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgaWYgeW91IGFyZQorZmVlZGluZyB0aGUgcmVzdWx0IHRvIGBnaXQgc2VuZC1lbWFpbGAuCisKIC0tYWRkLWhlYWRlcj08aGVhZGVyPjo6CiAJQWRkIGFuIGFyYml0cmFyeSBoZWFkZXIgdG8gdGhlIGVtYWlsIGhlYWRlcnMuICBUaGlzIGlzIGluIGFkZGl0aW9uCiAJdG8gYW55IGNvbmZpZ3VyZWQgaGVhZGVycywgYW5kIG1heSBiZSB1c2VkIG11bHRpcGxlIHRpbWVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZ2MudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZ2MudHh0CmluZGV4IGIzNzBiMDIuLjI0MDJlZDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWdjLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1nYy50eHQKQEAgLTYyLDggKzYyLDkgQEAKIAogLS1wcnVuZT08ZGF0ZT46OgogCVBydW5lIGxvb3NlIG9iamVjdHMgb2xkZXIgdGhhbiBkYXRlIChkZWZhdWx0IGlzIDIgd2Vla3MgYWdvLAotCW92ZXJyaWRhYmxlIGJ5IHRoZSBjb25maWcgdmFyaWFibGUgYGdjLnBydW5lRXhwaXJlYCkuICBUaGlzCi0Jb3B0aW9uIGlzIG9uIGJ5IGRlZmF1bHQuCisJb3ZlcnJpZGFibGUgYnkgdGhlIGNvbmZpZyB2YXJpYWJsZSBgZ2MucHJ1bmVFeHBpcmVgKS4KKwktLXBydW5lPWFsbCBwcnVuZXMgbG9vc2Ugb2JqZWN0cyByZWdhcmRsZXNzIG9mIHRoZWlyIGFnZS4KKwktLXBydW5lIGlzIG9uIGJ5IGRlZmF1bHQuCiAKIC0tbm8tcHJ1bmU6OgogCURvIG5vdCBwcnVuZSBhbnkgbG9vc2Ugb2JqZWN0cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWluZGV4LXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaW5kZXgtcGFjay50eHQKaW5kZXggYmRlOGVlYy4uN2E0ZTA1NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtaW5kZXgtcGFjay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaW5kZXgtcGFjay50eHQKQEAgLTc0LDYgKzc0LDkgQEAKIC0tc3RyaWN0OjoKIAlEaWUsIGlmIHRoZSBwYWNrIGNvbnRhaW5zIGJyb2tlbiBvYmplY3RzIG9yIGxpbmtzLgogCistLWNoZWNrLXNlbGYtY29udGFpbmVkLWFuZC1jb25uZWN0ZWQ6OgorCURpZSBpZiB0aGUgcGFjayBjb250YWlucyBicm9rZW4gbGlua3MuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KKwogLS10aHJlYWRzPTxuPjo6CiAJU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdGhyZWFkcyB0byBzcGF3biB3aGVuIHJlc29sdmluZwogCWRlbHRhcy4gVGhpcyByZXF1aXJlcyB0aGF0IGluZGV4LXBhY2sgYmUgY29tcGlsZWQgd2l0aApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbG9nLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxvZy50eHQKaW5kZXggYTk3NjUzNC4uYWMyNjk0ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbG9nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1sb2cudHh0CkBAIC02Miw2ICs2MiwxOSBAQAogCU5vdGUgdGhhdCBvbmx5IG1lc3NhZ2UgaXMgY29uc2lkZXJlZCwgaWYgYWxzbyBhIGRpZmYgaXMgc2hvd24KIAlpdHMgc2l6ZSBpcyBub3QgaW5jbHVkZWQuCiAKKy1MIDxzdGFydD4sPGVuZD46PGZpbGU+LCAtTCA6PHJlZ2V4Pjo8ZmlsZT46OgorCisJVHJhY2UgdGhlIGV2b2x1dGlvbiBvZiB0aGUgbGluZSByYW5nZSBnaXZlbiBieSAiPHN0YXJ0Piw8ZW5kPiIKKwkob3IgdGhlIGZ1bmNuYW1lIHJlZ2V4IDxyZWdleD4pIHdpdGhpbiB0aGUgPGZpbGU+LiAgWW91IG1heQorCW5vdCBnaXZlIGFueSBwYXRoc3BlYyBsaW1pdGVycy4gIFRoaXMgaXMgY3VycmVudGx5IGxpbWl0ZWQgdG8KKwlhIHdhbGsgc3RhcnRpbmcgZnJvbSBhIHNpbmdsZSByZXZpc2lvbiwgaS5lLiwgeW91IG1heSBvbmx5CisJZ2l2ZSB6ZXJvIG9yIG9uZSBwb3NpdGl2ZSByZXZpc2lvbiBhcmd1bWVudHMuCisJWW91IGNhbiBzcGVjaWZ5IHRoaXMgb3B0aW9uIG1vcmUgdGhhbiBvbmNlLgorKworPHN0YXJ0PiBhbmQgPGVuZD4gY2FuIHRha2Ugb25lIG9mIHRoZXNlIGZvcm1zOgorCitpbmNsdWRlOjpsaW5lLXJhbmdlLWZvcm1hdC50eHRbXQorCiA8cmV2aXNpb24gcmFuZ2U+OjoKIAlTaG93IG9ubHkgY29tbWl0cyBpbiB0aGUgc3BlY2lmaWVkIHJldmlzaW9uIHJhbmdlLiAgV2hlbiBubwogCTxyZXZpc2lvbiByYW5nZT4gaXMgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBgSEVBRGAgKGkuZS4gdGhlCkBAIC04NCw3ICs5Nyw3IEBACiAKIGluY2x1ZGU6OnByZXR0eS1mb3JtYXRzLnR4dFtdCiAKLUNvbW1vbiBkaWZmIG9wdGlvbnMKK0NPTU1PTiBESUZGIE9QVElPTlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAogOmdpdC1sb2c6IDEKQEAgLTkyLDcgKzEwNSw3IEBACiAKIGluY2x1ZGU6OmRpZmYtZ2VuZXJhdGUtcGF0Y2gudHh0W10KIAotRXhhbXBsZXMKK0VYQU1QTEVTCiAtLS0tLS0tLQogYGdpdCBsb2cgLS1uby1tZXJnZXNgOjoKIApAQCAtMTE1LDkgKzEyOCw5IEBACiAJaW4gdGhlICJyZWxlYXNlIiBicmFuY2gsIGFsb25nIHdpdGggdGhlIGxpc3Qgb2YgcGF0aHMKIAllYWNoIGNvbW1pdCBtb2RpZmllcy4KIAotYGdpdCBsb2cgLS1mb2xsb3cgYnVpbHRpbi1yZXYtbGlzdC5jYDo6CitgZ2l0IGxvZyAtLWZvbGxvdyBidWlsdGluL3Jldi1saXN0LmNgOjoKIAotCVNob3dzIHRoZSBjb21taXRzIHRoYXQgY2hhbmdlZCBidWlsdGluLXJldi1saXN0LmMsIGluY2x1ZGluZworCVNob3dzIHRoZSBjb21taXRzIHRoYXQgY2hhbmdlZCBidWlsdGluL3Jldi1saXN0LmMsIGluY2x1ZGluZwogCXRob3NlIGNvbW1pdHMgdGhhdCBvY2N1cnJlZCBiZWZvcmUgdGhlIGZpbGUgd2FzIGdpdmVuIGl0cwogCXByZXNlbnQgbmFtZS4KIApAQCAtMTQwLDE1ICsxNTMsMjAgQEAKIAlUaGlzIG1ha2VzIHNlbnNlIG9ubHkgd2hlbiBmb2xsb3dpbmcgYSBzdHJpY3QgcG9saWN5IG9mIG1lcmdpbmcgYWxsCiAJdG9waWMgYnJhbmNoZXMgd2hlbiBzdGF5aW5nIG9uIGEgc2luZ2xlIGludGVncmF0aW9uIGJyYW5jaC4KIAorYGdpdCBsb2cgLUwgJy9pbnQgbWFpbi8nLC9efS86bWFpbi5jYDo6CisKKwlTaG93cyBob3cgdGhlIGZ1bmN0aW9uIGBtYWluKClgIGluIHRoZSBmaWxlICdtYWluLmMnIGV2b2x2ZWQKKwlvdmVyIHRpbWUuCisKIGBnaXQgbG9nIC0zYDo6CiAJTGltaXRzIHRoZSBudW1iZXIgb2YgY29tbWl0cyB0byBzaG93IHRvIDMuCiAKLURpc2N1c3Npb24KK0RJU0NVU1NJT04KIC0tLS0tLS0tLS0KIAogaW5jbHVkZTo6aTE4bi50eHRbXQogCi1Db25maWd1cmF0aW9uCitDT05GSUdVUkFUSU9OCiAtLS0tLS0tLS0tLS0tCiAKIFNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0gZm9yIGNvcmUgdmFyaWFibGVzIGFuZCBsaW5rZ2l0OmdpdC1kaWZmWzFdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1scy1yZW1vdGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtcmVtb3RlLnR4dAppbmRleCA3NzRkZTVlLi4yZTIyOTE1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1scy1yZW1vdGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLXJlbW90ZS50eHQKQEAgLTQ4LDkgKzQ4LDkgQEAKIAlleGl0IHdpdGhvdXQgdGFsa2luZyB0byB0aGUgcmVtb3RlLgogCiA8cmVwb3NpdG9yeT46OgotCUxvY2F0aW9uIG9mIHRoZSByZXBvc2l0b3J5LiAgVGhlIHNob3J0aGFuZCBkZWZpbmVkIGluCi0JJEdJVF9ESVIvYnJhbmNoZXMvIGNhbiBiZSB1c2VkLiBVc2UgIi4iIChkb3QpIHRvIGxpc3QgcmVmZXJlbmNlcyBpbgotCXRoZSBsb2NhbCByZXBvc2l0b3J5LgorCVRoZSAicmVtb3RlIiByZXBvc2l0b3J5IHRvIHF1ZXJ5LiAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlCisJZWl0aGVyIGEgVVJMIG9yIHRoZSBuYW1lIG9mIGEgcmVtb3RlIChzZWUgdGhlIEdJVCBVUkxTIGFuZAorCVJFTU9URVMgc2VjdGlvbnMgb2YgbGlua2dpdDpnaXQtZmV0Y2hbMV0pLgogCiA8cmVmcz4uLi46OgogCVdoZW4gdW5zcGVjaWZpZWQsIGFsbCByZWZlcmVuY2VzLCBhZnRlciBmaWx0ZXJpbmcgZG9uZQpAQCAtNzAsOSArNzAsOCBAQAogCSQgZ2l0IGxzLXJlbW90ZSBodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NjbS9naXQvZ2l0LmdpdCBtYXN0ZXIgcHUgcmMKIAk1ZmU5NzhhNTM4MWYxZmJhZDI2YTgwZTY4MmRkZDJhNDAxOTY2NzQwCXJlZnMvaGVhZHMvbWFzdGVyCiAJYzc4MWE4NGI1MjA0ZmIyOTRjOWNjYzc5ZjhiM2JhY2VlYjMyYzA2MQlyZWZzL2hlYWRzL3B1Ci0JYjFkMDk2ZjI5MjZjNGUzN2M5YzBiNmE3YmYyMTE5YmVkYWEyNzdjYglyZWZzL2hlYWRzL3JjCi0JJCBlY2hvIGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0ID4uZ2l0L2JyYW5jaGVzL3B1YmxpYwotCSQgZ2l0IGxzLXJlbW90ZSAtLXRhZ3MgcHVibGljIHZcKgorCSQgZ2l0IHJlbW90ZSBhZGQga29yZyBodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NjbS9naXQvZ2l0LmdpdAorCSQgZ2l0IGxzLXJlbW90ZSAtLXRhZ3Mga29yZyB2XCoKIAlkNjYwMmVjNTE5NGM4N2IwZmM4NzEwM2NhNGQ2NzI1MWM3NmYyMzNhCXJlZnMvdGFncy92MC45OQogCWYyNWEyNjVhMzQyYWVkNjA0MWFiMGNjNDg0MjI0ZDljYTU0YjZmNDEJcmVmcy90YWdzL3YwLjk5LjEKIAljNWRiNTQ1NmFlM2IwODczZmM2NTljMTlmYWZkZGUyMjMxM2NjNDQxCXJlZnMvdGFncy92MC45OS4yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS50eHQKaW5kZXggNjdjYTk5Yy4uOGM3ZjJmNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dApAQCAtNTYsOCArNTYsOCBAQAogd2FzIHN0YXJ0ZWQpLCAnZ2l0IG1lcmdlIC0tYWJvcnQnIHdpbGwgaW4gc29tZSBjYXNlcyBiZSB1bmFibGUgdG8KIHJlY29uc3RydWN0IHRoZSBvcmlnaW5hbCAocHJlLW1lcmdlKSBjaGFuZ2VzLiBUaGVyZWZvcmU6CiAKLSpXYXJuaW5nKjogUnVubmluZyAnZ2l0IG1lcmdlJyB3aXRoIHVuY29tbWl0dGVkIGNoYW5nZXMgaXMKLWRpc2NvdXJhZ2VkOiB3aGlsZSBwb3NzaWJsZSwgaXQgbGVhdmVzIHlvdSBpbiBhIHN0YXRlIHRoYXQgaXMgaGFyZCB0bworKldhcm5pbmcqOiBSdW5uaW5nICdnaXQgbWVyZ2UnIHdpdGggbm9uLXRyaXZpYWwgdW5jb21taXR0ZWQgY2hhbmdlcyBpcworZGlzY291cmFnZWQ6IHdoaWxlIHBvc3NpYmxlLCBpdCBtYXkgbGVhdmUgeW91IGluIGEgc3RhdGUgdGhhdCBpcyBoYXJkIHRvCiBiYWNrIG91dCBvZiBpbiB0aGUgY2FzZSBvZiBhIGNvbmZsaWN0LgogCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW5hbWUtcmV2LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW5hbWUtcmV2LnR4dAppbmRleCBhZDFkMTQ2Li4xNWIwMGUwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1uYW1lLXJldi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbmFtZS1yZXYudHh0CkBAIC0yNSwxNCArMjUsMTcgQEAKIAlEbyBub3QgdXNlIGJyYW5jaCBuYW1lcywgYnV0IG9ubHkgdGFncyB0byBuYW1lIHRoZSBjb21taXRzCiAKIC0tcmVmcz08cGF0dGVybj46OgotCU9ubHkgdXNlIHJlZnMgd2hvc2UgbmFtZXMgbWF0Y2ggYSBnaXZlbiBzaGVsbCBwYXR0ZXJuLgorCU9ubHkgdXNlIHJlZnMgd2hvc2UgbmFtZXMgbWF0Y2ggYSBnaXZlbiBzaGVsbCBwYXR0ZXJuLiAgVGhlIHBhdHRlcm4KKwljYW4gYmUgb25lIG9mIGJyYW5jaCBuYW1lLCB0YWcgbmFtZSBvciBmdWxseSBxdWFsaWZpZWQgcmVmIG5hbWUuCiAKIC0tYWxsOjoKIAlMaXN0IGFsbCBjb21taXRzIHJlYWNoYWJsZSBmcm9tIGFsbCByZWZzCiAKIC0tc3RkaW46OgotCVJlYWQgZnJvbSBzdGRpbiwgYXBwZW5kICIoPHJldl9uYW1lPikiIHRvIGFsbCBzaGExJ3Mgb2YgbmFtZWFibGUKLQljb21taXRzLCBhbmQgcGFzcyB0byBzdGRvdXQKKwlUcmFuc2Zvcm0gc3RkaW4gYnkgc3Vic3RpdHV0aW5nIGFsbCB0aGUgNDAtY2hhcmFjdGVyIFNIQS0xCisJaGV4ZXMgKHNheSAkaGV4KSB3aXRoICIkaGV4ICgkcmV2X25hbWUpIi4gIFdoZW4gdXNlZCB3aXRoCisJLS1uYW1lLW9ubHksIHN1YnN0aXR1dGUgd2l0aCAiJHJldl9uYW1lIiwgb21pdHRpbmcgJGhleAorCWFsdG9nZXRoZXIuICBJbnRlbmRlZCBmb3IgdGhlIHNjcmlwdGVyJ3MgdXNlLgogCiAtLW5hbWUtb25seTo6CiAJSW5zdGVhZCBvZiBwcmludGluZyBib3RoIHRoZSBTSEEtMSBhbmQgdGhlIG5hbWUsIHByaW50IG9ubHkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXA0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXA0LnR4dAppbmRleCBjNTc5ZmJjLi44Y2JhMTZkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wNC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcDQudHh0CkBAIC0xNzYsMTMgKzE3NiwxNiBAQAogVGhlc2Ugb3B0aW9ucyBjYW4gYmUgdXNlZCBpbiB0aGUgaW5pdGlhbCAnY2xvbmUnIGFzIHdlbGwgYXMgaW4KIHN1YnNlcXVlbnQgJ3N5bmMnIG9wZXJhdGlvbnMuCiAKLS0tYnJhbmNoIDxicmFuY2g+OjoKLQlJbXBvcnQgY2hhbmdlcyBpbnRvIGdpdmVuIGJyYW5jaC4gIElmIHRoZSBicmFuY2ggc3RhcnRzIHdpdGgKLQkncmVmcy8nLCBpdCB3aWxsIGJlIHVzZWQgYXMgaXMuICBPdGhlcndpc2UgaWYgaXQgZG9lcyBub3Qgc3RhcnQKLQl3aXRoICdwNC8nLCB0aGF0IHByZWZpeCBpcyBhZGRlZC4gIFRoZSBicmFuY2ggaXMgYXNzdW1lZCB0bwotCW5hbWUgYSByZW1vdGUgdHJhY2tpbmcsIGJ1dCB0aGlzIGNhbiBiZSBtb2RpZmllZCB1c2luZwotCSctLWltcG9ydC1sb2NhbCcsIG9yIGJ5IGdpdmluZyBhIGZ1bGwgcmVmIG5hbWUuICBUaGUgZGVmYXVsdAotCWJyYW5jaCBpcyAnbWFzdGVyJy4KKy0tYnJhbmNoIDxyZWY+OjoKKwlJbXBvcnQgY2hhbmdlcyBpbnRvIDxyZWY+IGluc3RlYWQgb2YgcmVmcy9yZW1vdGVzL3A0L21hc3Rlci4KKwlJZiA8cmVmPiBzdGFydHMgd2l0aCByZWZzLywgaXQgaXMgdXNlZCBhcyBpcy4gIE90aGVyd2lzZSwgaWYKKwlpdCBkb2VzIG5vdCBzdGFydCB3aXRoIHA0LywgdGhhdCBwcmVmaXggaXMgYWRkZWQuCisrCitCeSBkZWZhdWx0IGEgPHJlZj4gbm90IHN0YXJ0aW5nIHdpdGggcmVmcy8gaXMgdHJlYXRlZCBhcyB0aGUKK25hbWUgb2YgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICh1bmRlciByZWZzL3JlbW90ZXMvKS4gIFRoaXMKK2JlaGF2aW9yIGNhbiBiZSBtb2RpZmllZCB1c2luZyB0aGUgLS1pbXBvcnQtbG9jYWwgb3B0aW9uLgorKworVGhlIGRlZmF1bHQgPHJlZj4gaXMgIm1hc3RlciIuCiArCiBUaGlzIGV4YW1wbGUgaW1wb3J0cyBhIG5ldyByZW1vdGUgInA0L3Byb2oyIiBpbnRvIGFuIGV4aXN0aW5nCiBHaXQgcmVwb3NpdG9yeToKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stcmVmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLXJlZnMudHh0CmluZGV4IGYxMzE2NzcuLjE1NDA4MWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stcmVmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1yZWZzLnR4dApAQCAtMzMsOCArMzMsOCBAQAogYCRHSVRfRElSL3JlZnNgIGRpcmVjdG9yeSBoaWVyYXJjaHkuCiAKIEEgcmVjb21tZW5kZWQgcHJhY3RpY2UgdG8gZGVhbCB3aXRoIGEgcmVwb3NpdG9yeSB3aXRoIHRvbyBtYW55Ci1yZWZzIGlzIHRvIHBhY2sgaXRzIHJlZnMgd2l0aCBgLS1hbGwgLS1wcnVuZWAgb25jZSwgYW5kCi1vY2Nhc2lvbmFsbHkgcnVuIGBnaXQgcGFjay1yZWZzIC0tcHJ1bmVgLiAgVGFncyBhcmUgYnkKK3JlZnMgaXMgdG8gcGFjayBpdHMgcmVmcyB3aXRoIGAtLWFsbGAgb25jZSwgYW5kCitvY2Nhc2lvbmFsbHkgcnVuIGBnaXQgcGFjay1yZWZzYC4gIFRhZ3MgYXJlIGJ5CiBkZWZpbml0aW9uIHN0YXRpb25hcnkgYW5kIGFyZSBub3QgZXhwZWN0ZWQgdG8gY2hhbmdlLiAgQnJhbmNoCiBoZWFkcyB3aWxsIGJlIHBhY2tlZCB3aXRoIHRoZSBpbml0aWFsIGBwYWNrLXJlZnMgLS1hbGxgLCBidXQKIG9ubHkgdGhlIGN1cnJlbnRseSBhY3RpdmUgYnJhbmNoIGhlYWRzIHdpbGwgYmVjb21lIHVucGFja2VkLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUudHh0CmluZGV4IDgwZDAxYjAuLmJmODI0MTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXBydW5lLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wcnVuZS50eHQKQEAgLTU5LDcgKzU5LDcgQEAKIGAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzYDoKIAogLS0tLS0tLS0tLS0tCi0kIGdpdCBwcnVuZSAkKGNkIC4uL2Fub3RoZXIgJiYgJChnaXQgcmV2LXBhcnNlIC0tYWxsKSkKKyQgZ2l0IHBydW5lICQoY2QgLi4vYW5vdGhlciAmJiBnaXQgcmV2LXBhcnNlIC0tYWxsKQogLS0tLS0tLS0tLS0tCiAKIE5vdGVzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wdWxsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXB1bGwudHh0CmluZGV4IDI0YWIwN2EuLjZlZjhkNTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXB1bGwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXB1bGwudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtcHVsbCAtIEZldGNoIGZyb20gYW5kIG1lcmdlIHdpdGggYW5vdGhlciByZXBvc2l0b3J5IG9yIGEgbG9jYWwgYnJhbmNoCitnaXQtcHVsbCAtIEZldGNoIGZyb20gYW5kIGludGVncmF0ZSB3aXRoIGFub3RoZXIgcmVwb3NpdG9yeSBvciBhIGxvY2FsIGJyYW5jaAogCiAKIFNZTk9QU0lTCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wdXNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXB1c2gudHh0CmluZGV4IGQ1MTQ4MTMuLmY3ZGZlNDggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXB1c2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXB1c2gudHh0CkBAIC0xMSw3ICsxMSw3IEBACiBbdmVyc2VdCiAnZ2l0IHB1c2gnIFstLWFsbCB8IC0tbWlycm9yIHwgLS10YWdzXSBbLS1mb2xsb3ctdGFnc10gWy1uIHwgLS1kcnktcnVuXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+XQogCSAgIFstLXJlcG89PHJlcG9zaXRvcnk+XSBbLWYgfCAtLWZvcmNlXSBbLS1wcnVuZV0gWy12IHwgLS12ZXJib3NlXSBbLXUgfCAtLXNldC11cHN0cmVhbV0KLQkgICBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXQorCSAgIFstLW5vLXZlcmlmeV0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC0xMzYsNiArMTM2LDE1IEBACiAJbm90IGFuIGFuY2VzdG9yIG9mIHRoZSBsb2NhbCByZWYgdXNlZCB0byBvdmVyd3JpdGUgaXQuCiAJVGhpcyBmbGFnIGRpc2FibGVzIHRoZSBjaGVjay4gIFRoaXMgY2FuIGNhdXNlIHRoZQogCXJlbW90ZSByZXBvc2l0b3J5IHRvIGxvc2UgY29tbWl0czsgdXNlIGl0IHdpdGggY2FyZS4KKwlOb3RlIHRoYXQgYC0tZm9yY2VgIGFwcGxpZXMgdG8gYWxsIHRoZSByZWZzIHRoYXQgYXJlIHB1c2hlZCwKKwloZW5jZSB1c2luZyBpdCB3aXRoIGBwdXNoLmRlZmF1bHRgIHNldCB0byBgbWF0Y2hpbmdgIG9yIHdpdGgKKwltdWx0aXBsZSBwdXNoIGRlc3RpbmF0aW9ucyBjb25maWd1cmVkIHdpdGggYHJlbW90ZS4qLnB1c2hgCisJbWF5IG92ZXJ3cml0ZSByZWZzIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgYnJhbmNoIChpbmNsdWRpbmcKKwlsb2NhbCByZWZzIHRoYXQgYXJlIHN0cmljdGx5IGJlaGluZCB0aGVpciByZW1vdGUgY291bnRlcnBhcnQpLgorCVRvIGZvcmNlIGEgcHVzaCB0byBvbmx5IG9uZSBicmFuY2gsIHVzZSBhIGArYCBpbiBmcm9udCBvZiB0aGUKKwlyZWZzcGVjIHRvIHB1c2gJKGUuZyBgZ2l0IHB1c2ggb3JpZ2luICttYXN0ZXJgIHRvIGZvcmNlIGEgcHVzaAorCXRvIHRoZSBgbWFzdGVyYAlicmFuY2gpLiBTZWUgdGhlIGA8cmVmc3BlYz4uLi5gIHNlY3Rpb24gYWJvdmUKKwlmb3IgZGV0YWlscy4KIAogLS1yZXBvPTxyZXBvc2l0b3J5Pjo6CiAJVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCBpZiBubyA8cmVwb3NpdG9yeT4gYXJndW1lbnQgaXMKQEAgLTE5NSw2ICsyMDQsMTEgQEAKIAliZSBwdXNoZWQuIElmIG9uLWRlbWFuZCB3YXMgbm90IGFibGUgdG8gcHVzaCBhbGwgbmVjZXNzYXJ5CiAJcmV2aXNpb25zIGl0IHdpbGwgYWxzbyBiZSBhYm9ydGVkIGFuZCBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzLgogCistLVtuby1ddmVyaWZ5OjoKKwlUb2dnbGUgdGhlIHByZS1wdXNoIGhvb2sgKHNlZSBsaW5rZ2l0OmdpdGhvb2tzWzVdKS4gIFRoZQorCWRlZmF1bHQgaXMgXC0tdmVyaWZ5LCBnaXZpbmcgdGhlIGhvb2sgYSBjaGFuY2UgdG8gcHJldmVudCB0aGUKKwlwdXNoLiAgV2l0aCBcLS1uby12ZXJpZnksIHRoZSBob29rIGlzIGJ5cGFzc2VkIGNvbXBsZXRlbHkuCisKIAogaW5jbHVkZTo6dXJscy1yZW1vdGVzLnR4dFtdCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlYmFzZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWJhc2UudHh0CmluZGV4IGFjYTg0MDUuLjZiMmUxYzggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJlYmFzZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dApAQCAtMjA4LDYgKzIwOCw5IEBACiByZWJhc2UuYXV0b3NxdWFzaDo6CiAJSWYgc2V0IHRvIHRydWUgZW5hYmxlICctLWF1dG9zcXVhc2gnIG9wdGlvbiBieSBkZWZhdWx0LgogCityZWJhc2UuYXV0b3N0YXNoOjoKKwlJZiBzZXQgdG8gdHJ1ZSBlbmFibGUgJy0tYXV0b3N0YXNoJyBvcHRpb24gYnkgZGVmYXVsdC4KKwogT1BUSU9OUwogLS0tLS0tLQogLS1vbnRvIDxuZXdiYXNlPjo6CkBAIC0zODYsNyArMzg5LDkgQEAKIAl0aGUgc2FtZSAuLi4sIGF1dG9tYXRpY2FsbHkgbW9kaWZ5IHRoZSB0b2RvIGxpc3Qgb2YgcmViYXNlIC1pCiAJc28gdGhhdCB0aGUgY29tbWl0IG1hcmtlZCBmb3Igc3F1YXNoaW5nIGNvbWVzIHJpZ2h0IGFmdGVyIHRoZQogCWNvbW1pdCB0byBiZSBtb2RpZmllZCwgYW5kIGNoYW5nZSB0aGUgYWN0aW9uIG9mIHRoZSBtb3ZlZAotCWNvbW1pdCBmcm9tIGBwaWNrYCB0byBgc3F1YXNoYCAob3IgYGZpeHVwYCkuCisJY29tbWl0IGZyb20gYHBpY2tgIHRvIGBzcXVhc2hgIChvciBgZml4dXBgKS4gIElnbm9yZXMgc3Vic2VxdWVudAorCSJmaXh1cCEgIiBvciAic3F1YXNoISAiIGFmdGVyIHRoZSBmaXJzdCwgaW4gY2FzZSB5b3UgcmVmZXJyZWQgdG8gYW4KKwllYXJsaWVyIGZpeHVwL3NxdWFzaCB3aXRoIGBnaXQgY29tbWl0IC0tZml4dXAvLS1zcXVhc2hgLgogKwogVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCB3aGVuIHRoZSAnLS1pbnRlcmFjdGl2ZScgb3B0aW9uIGlzIHVzZWQuCiArCkBAIC0zOTQsNiArMzk5LDEzIEBACiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGByZWJhc2UuYXV0b3NxdWFzaGAsIHRoaXMgb3B0aW9uIGNhbiBiZQogdXNlZCB0byBvdmVycmlkZSBhbmQgZGlzYWJsZSB0aGlzIHNldHRpbmcuCiAKKy0tW25vLV1hdXRvc3Rhc2g6OgorCUF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgdGVtcG9yYXJ5IHN0YXNoIGJlZm9yZSB0aGUgb3BlcmF0aW9uCisJYmVnaW5zLCBhbmQgYXBwbHkgaXQgYWZ0ZXIgdGhlIG9wZXJhdGlvbiBlbmRzLiAgVGhpcyBtZWFucworCXRoYXQgeW91IGNhbiBydW4gcmViYXNlIG9uIGEgZGlydHkgd29ya3RyZWUuICBIb3dldmVyLCB1c2UKKwl3aXRoIGNhcmU6IHRoZSBmaW5hbCBzdGFzaCBhcHBsaWNhdGlvbiBhZnRlciBhIHN1Y2Nlc3NmdWwKKwlyZWJhc2UgbWlnaHQgcmVzdWx0IGluIG5vbi10cml2aWFsIGNvbmZsaWN0cy4KKwogLS1uby1mZjo6CiAJV2l0aCAtLWludGVyYWN0aXZlLCBjaGVycnktcGljayBhbGwgcmViYXNlZCBjb21taXRzIGluc3RlYWQgb2YKIAlmYXN0LWZvcndhcmRpbmcgb3ZlciB0aGUgdW5jaGFuZ2VkIG9uZXMuICBUaGlzIGVuc3VyZXMgdGhhdCB0aGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlZmxvZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWZsb2cudHh0CmluZGV4IGZiODY5N2UuLjcwNzkxYjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJlZmxvZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVmbG9nLnR4dApAQCAtNjcsMTQgKzY3LDE5IEBACiAtLWV4cGlyZT08dGltZT46OgogCUVudHJpZXMgb2xkZXIgdGhhbiB0aGlzIHRpbWUgYXJlIHBydW5lZC4gIFdpdGhvdXQgdGhlCiAJb3B0aW9uIGl0IGlzIHRha2VuIGZyb20gY29uZmlndXJhdGlvbiBgZ2MucmVmbG9nRXhwaXJlYCwKLQl3aGljaCBpbiB0dXJuIGRlZmF1bHRzIHRvIDkwIGRheXMuCisJd2hpY2ggaW4gdHVybiBkZWZhdWx0cyB0byA5MCBkYXlzLiAgLS1leHBpcmU9YWxsIHBydW5lcworCWVudHJpZXMgcmVnYXJkbGVzcyBvZiB0aGVpciBhZ2U7IC0tZXhwaXJlPW5ldmVyIHR1cm5zIG9mZgorCXBydW5pbmcgb2YgcmVhY2hhYmxlIGVudHJpZXMgKGJ1dCBzZWUgLS1leHBpcmUtdW5yZWFjaGFibGUpLgogCiAtLWV4cGlyZS11bnJlYWNoYWJsZT08dGltZT46OgogCUVudHJpZXMgb2xkZXIgdGhhbiB0aGlzIHRpbWUgYW5kIG5vdCByZWFjaGFibGUgZnJvbQogCXRoZSBjdXJyZW50IHRpcCBvZiB0aGUgYnJhbmNoIGFyZSBwcnVuZWQuICBXaXRob3V0IHRoZQogCW9wdGlvbiBpdCBpcyB0YWtlbiBmcm9tIGNvbmZpZ3VyYXRpb24KIAlgZ2MucmVmbG9nRXhwaXJlVW5yZWFjaGFibGVgLCB3aGljaCBpbiB0dXJuIGRlZmF1bHRzIHRvCi0JMzAgZGF5cy4KKwkzMCBkYXlzLiAgLS1leHBpcmUtdW5yZWFjaGFibGU9YWxsIHBydW5lcyB1bnJlYWNoYWJsZQorCWVudHJpZXMgcmVnYXJkbGVzcyBvZiB0aGVpciBhZ2U7IC0tZXhwaXJlLXVucmVhY2hhYmxlPW5ldmVyCisJdHVybnMgb2ZmIGVhcmx5IHBydW5pbmcgb2YgdW5yZWFjaGFibGUgZW50cmllcyAoYnV0IHNlZQorCS0tZXhwaXJlKS4KIAogLS1hbGw6OgogCUluc3RlYWQgb2YgbGlzdGluZyA8cmVmcz4gZXhwbGljaXRseSwgcHJ1bmUgYWxsIHJlZnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLnR4dAppbmRleCA1ODFiYjRjLi45YzNlM2JmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS50eHQKQEAgLTE4NywxOCArMTg3LDI1IEBACiAkIGdpdCByZW1vdGUKIG9yaWdpbgogJCBnaXQgYnJhbmNoIC1yCi1vcmlnaW4vbWFzdGVyCi0kIGdpdCByZW1vdGUgYWRkIGxpbnV4LW5mcyBnaXQ6Ly9saW51eC1uZnMub3JnL3B1Yi9saW51eC9uZnMtMi42LmdpdAorICBvcmlnaW4vSEVBRCAtPiBvcmlnaW4vbWFzdGVyCisgIG9yaWdpbi9tYXN0ZXIKKyQgZ2l0IHJlbW90ZSBhZGQgc3RhZ2luZyBnaXQ6Ly9naXQua2VybmVsLm9yZy8uLi4vZ3JlZ2toL3N0YWdpbmcuZ2l0CiAkIGdpdCByZW1vdGUKLWxpbnV4LW5mcwogb3JpZ2luCi0kIGdpdCBmZXRjaAotKiByZWZzL3JlbW90ZXMvbGludXgtbmZzL21hc3Rlcjogc3RvcmluZyBicmFuY2ggJ21hc3RlcicgLi4uCi0gIGNvbW1pdDogYmY4MWI0Ngorc3RhZ2luZworJCBnaXQgZmV0Y2ggc3RhZ2luZworLi4uCitGcm9tIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9ncmVna2gvc3RhZ2luZworICogW25ldyBicmFuY2hdICAgICAgbWFzdGVyICAgICAtPiBzdGFnaW5nL21hc3RlcgorICogW25ldyBicmFuY2hdICAgICAgc3RhZ2luZy1saW51cyAtPiBzdGFnaW5nL3N0YWdpbmctbGludXMKKyAqIFtuZXcgYnJhbmNoXSAgICAgIHN0YWdpbmctbmV4dCAtPiBzdGFnaW5nL3N0YWdpbmctbmV4dAogJCBnaXQgYnJhbmNoIC1yCi1vcmlnaW4vbWFzdGVyCi1saW51eC1uZnMvbWFzdGVyCi0kIGdpdCBjaGVja291dCAtYiBuZnMgbGludXgtbmZzL21hc3RlcgorICBvcmlnaW4vSEVBRCAtPiBvcmlnaW4vbWFzdGVyCisgIG9yaWdpbi9tYXN0ZXIKKyAgc3RhZ2luZy9tYXN0ZXIKKyAgc3RhZ2luZy9zdGFnaW5nLWxpbnVzCisgIHN0YWdpbmcvc3RhZ2luZy1uZXh0CiskIGdpdCBjaGVja291dCAtYiBzdGFnaW5nIHN0YWdpbmcvbWFzdGVyCiAuLi4KIC0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXNldC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXNldC50eHQKaW5kZXggYTQwNGI0Ny4uZjQ0NWNiMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmVzZXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlc2V0LnR4dApAQCAtOSw3ICs5LDcgQEAKIC0tLS0tLS0tCiBbdmVyc2VdCiAnZ2l0IHJlc2V0JyBbLXFdIFs8dHJlZS1pc2g+XSBbLS1dIDxwYXRocz4uLi4KLSdnaXQgcmVzZXQnICgtLXBhdGNoIHwgLXApIFs8dHJlZS1zaD5dIFstLV0gWzxwYXRocz4uLi5dCisnZ2l0IHJlc2V0JyAoLS1wYXRjaCB8IC1wKSBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzPi4uLl0KICdnaXQgcmVzZXQnIFstLXNvZnQgfCAtLW1peGVkIHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dCiAKIERFU0NSSVBUSU9OCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtcGFyc2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmV2LXBhcnNlLnR4dAppbmRleCA5NDdkNjJmLi4yYjEyNmMwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtcGFyc2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJldi1wYXJzZS50eHQKQEAgLTU5LDYgKzU5LDIyIEBACiAJSWYgdGhlcmUgaXMgbm8gcGFyYW1ldGVyIGdpdmVuIGJ5IHRoZSB1c2VyLCB1c2UgYDxhcmc+YAogCWluc3RlYWQuCiAKKy0tcHJlZml4IDxhcmc+OjoKKwlCZWhhdmUgYXMgaWYgJ2dpdCByZXYtcGFyc2UnIHdhcyBpbnZva2VkIGZyb20gdGhlIGA8YXJnPmAKKwlzdWJkaXJlY3Rvcnkgb2YgdGhlIHdvcmtpbmcgdHJlZS4gIEFueSByZWxhdGl2ZSBmaWxlbmFtZXMgYXJlCisJcmVzb2x2ZWQgYXMgaWYgdGhleSBhcmUgcHJlZml4ZWQgYnkgYDxhcmc+YCBhbmQgd2lsbCBiZSBwcmludGVkCisJaW4gdGhhdCBmb3JtLgorKworVGhpcyBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IGFyZ3VtZW50cyB0byBhIGNvbW1hbmQgcnVuIGluIGEgc3ViZGlyZWN0b3J5CitzbyB0aGF0IHRoZXkgY2FuIHN0aWxsIGJlIHVzZWQgYWZ0ZXIgbW92aW5nIHRvIHRoZSB0b3AtbGV2ZWwgb2YgdGhlCityZXBvc2l0b3J5LiAgRm9yIGV4YW1wbGU6CisrCistLS0tCitwcmVmaXg9JChnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXgpCitjZCAiJChnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCkiCitldmFsICJzZXQgLS0gJChnaXQgcmV2LXBhcnNlIC0tc3EgLS1wcmVmaXggIiRwcmVmaXgiICIkQCIpIgorLS0tLQorCiAtLXZlcmlmeTo6CiAJVmVyaWZ5IHRoYXQgZXhhY3RseSBvbmUgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCBhbmQgdGhhdCBpdAogCWNhbiBiZSB0dXJuZWQgaW50byBhIHJhdyAyMC1ieXRlIFNIQS0xIHRoYXQgY2FuIGJlIHVzZWQgdG8KQEAgLTY3LDcgKzgzLDcgQEAKICsKIElmIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBvdXRwdXQgYWN0dWFsbHkgbmFtZXMgYW4gb2JqZWN0IGluCiB5b3VyIG9iamVjdCBkYXRhYmFzZSBhbmQvb3IgY2FuIGJlIHVzZWQgYXMgYSBzcGVjaWZpYyB0eXBlIG9mIG9iamVjdAoteW91IHJlcXVpcmUsIHlvdSBjYW4gYWRkICJee3R5cGV9IiBwZWVsaW5nIG9wZXJhdG9yIHRvIHRoZSBwYXJtZXRlci4KK3lvdSByZXF1aXJlLCB5b3UgY2FuIGFkZCAiXnt0eXBlfSIgcGVlbGluZyBvcGVyYXRvciB0byB0aGUgcGFyYW1ldGVyLgogRm9yIGV4YW1wbGUsIGBnaXQgcmV2LXBhcnNlICIkVkFSXntjb21taXR9ImAgd2lsbCBtYWtlIHN1cmUgYCRWQVJgCiBuYW1lcyBhbiBleGlzdGluZyBvYmplY3QgdGhhdCBpcyBhIGNvbW1pdC1pc2ggKGkuZS4gYSBjb21taXQsIG9yIGFuCiBhbm5vdGF0ZWQgdGFnIHRoYXQgcG9pbnRzIGF0IGEgY29tbWl0KS4gIFRvIG1ha2Ugc3VyZSB0aGF0IGAkVkFSYApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLWVtYWlsLnR4dAppbmRleCA0MGE5YTlhLi5mMGU1N2E1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLWVtYWlsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLWVtYWlsLnR4dApAQCAtMTk4LDYgKzE5OCwxMiBAQAogLS1zbXRwLXNzbDo6CiAJTGVnYWN5IGFsaWFzIGZvciAnLS1zbXRwLWVuY3J5cHRpb24gc3NsJy4KIAorLS1zbXRwLXNzbC1jZXJ0LXBhdGg6OgorCVBhdGggdG8gY2EtY2VydGlmaWNhdGVzIChlaXRoZXIgYSBkaXJlY3Rvcnkgb3IgYSBzaW5nbGUgZmlsZSkuCisJU2V0IGl0IHRvIGFuIGVtcHR5IHN0cmluZyB0byBkaXNhYmxlIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbi4KKwlEZWZhdWx0cyB0byB0aGUgdmFsdWUgc2V0IHRvIHRoZSAnc2VuZGVtYWlsLnNtdHBzc2xjZXJ0cGF0aCcKKwljb25maWd1cmF0aW9uIHZhcmlhYmxlLCBpZiBzZXQsIG9yIGAvZXRjL3NzbC9jZXJ0c2Agb3RoZXJ3aXNlLgorCiAtLXNtdHAtdXNlcj08dXNlcj46OgogCVVzZXJuYW1lIGZvciBTTVRQLUFVVEguIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mICdzZW5kZW1haWwuc210cHVzZXInOwogCWlmIGEgdXNlcm5hbWUgaXMgbm90IHNwZWNpZmllZCAod2l0aCAnLS1zbXRwLXVzZXInIG9yICdzZW5kZW1haWwuc210cHVzZXInKSwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctcmVmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctcmVmLnR4dAppbmRleCBkZTRkMzUyLi5iMGEzMDliIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LXJlZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1yZWYudHh0CkBAIC0yMSw2ICsyMSw4IEBACiBkZXJlZmVyZW5jZWQgaW50byBvYmplY3QgSURzLiBBZGRpdGlvbmFsbHksIGl0IGNhbiBiZSB1c2VkIHRvIHRlc3Qgd2hldGhlciBhCiBwYXJ0aWN1bGFyIHJlZiBleGlzdHMuCiAKK0J5IGRlZmF1bHQsIHNob3dzIHRoZSB0YWdzLCBoZWFkcywgYW5kIHJlbW90ZSByZWZzLgorCiBUaGUgLS1leGNsdWRlLWV4aXN0aW5nIGZvcm0gaXMgYSBmaWx0ZXIgdGhhdCBkb2VzIHRoZSBpbnZlcnNlLCBpdCBzaG93cyB0aGUKIHJlZnMgZnJvbSBzdGRpbiB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBsb2NhbCByZXBvc2l0b3J5LgogCkBAIC0zMiwxNCArMzQsMTQgQEAKIAogLS1oZWFkOjoKIAotCVNob3cgdGhlIEhFQUQgcmVmZXJlbmNlLgorCVNob3cgdGhlIEhFQUQgcmVmZXJlbmNlLCBldmVuIGlmIGl0IHdvdWxkIG5vcm1hbGx5IGJlIGZpbHRlcmVkIG91dC4KIAogLS10YWdzOjoKIC0taGVhZHM6OgogCi0JTGltaXQgdG8gb25seSAicmVmcy9oZWFkcyIgYW5kICJyZWZzL3RhZ3MiLCByZXNwZWN0aXZlbHkuICBUaGVzZQotCW9wdGlvbnMgYXJlIG5vdCBtdXR1YWxseSBleGNsdXNpdmU7IHdoZW4gZ2l2ZW4gYm90aCwgcmVmZXJlbmNlcyBzdG9yZWQKLQlpbiAicmVmcy9oZWFkcyIgYW5kICJyZWZzL3RhZ3MiIGFyZSBkaXNwbGF5ZWQuCisJTGltaXQgdG8gInJlZnMvaGVhZHMiIGFuZCAicmVmcy90YWdzIiwgcmVzcGVjdGl2ZWx5LiAgVGhlc2Ugb3B0aW9ucworCWFyZSBub3QgbXV0dWFsbHkgZXhjbHVzaXZlOyB3aGVuIGdpdmVuIGJvdGgsIHJlZmVyZW5jZXMgc3RvcmVkIGluCisJInJlZnMvaGVhZHMiIGFuZCAicmVmcy90YWdzIiBhcmUgZGlzcGxheWVkLgogCiAtZDo6CiAtLWRlcmVmZXJlbmNlOjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3cudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy50eHQKaW5kZXggYWU0ZWRjYy4uNGU2MTdlNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy50eHQKQEAgLTQ1LDYgKzQ1LDE1IEBACiBpbmNsdWRlOjpwcmV0dHktZm9ybWF0cy50eHRbXQogCiAKK0NPTU1PTiBESUZGIE9QVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworOmdpdC1sb2c6IDEKK2luY2x1ZGU6OmRpZmYtb3B0aW9ucy50eHRbXQorCitpbmNsdWRlOjpkaWZmLWdlbmVyYXRlLXBhdGNoLnR4dFtdCisKKwogRVhBTVBMRVMKIC0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN0YXNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN0YXNoLnR4dAppbmRleCA3MTFmZmUxLi43YzhiNjQ4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zdGFzaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3Rhc2gudHh0CkBAIC0xMywxMCArMTMsMTIgQEAKICdnaXQgc3Rhc2gnIGRyb3AgWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XQogJ2dpdCBzdGFzaCcgKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dCiAnZ2l0IHN0YXNoJyBicmFuY2ggPGJyYW5jaG5hbWU+IFs8c3Rhc2g+XQotJ2dpdCBzdGFzaCcgW3NhdmUgWy0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdCi0JICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbPG1lc3NhZ2U+XV0KKydnaXQgc3Rhc2gnIFtzYXZlIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XQorCSAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1mfC0tZm9yY2VdCisJICAgICBbPG1lc3NhZ2U+XV0KICdnaXQgc3Rhc2gnIGNsZWFyCi0nZ2l0IHN0YXNoJyBjcmVhdGUKKydnaXQgc3Rhc2gnIGNyZWF0ZSBbPG1lc3NhZ2U+XQorJ2dpdCBzdGFzaCcgc3RvcmUgWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dIFstcXwtLXF1aWV0XSA8Y29tbWl0PgogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTQzLDcgKzQ1LDcgQEAKIE9QVElPTlMKIC0tLS0tLS0KIAotc2F2ZSBbLXB8LS1wYXRjaF0gWy0tW25vLV1rZWVwLWluZGV4XSBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLXF8LS1xdWlldF0gWzxtZXNzYWdlPl06Ogorc2F2ZSBbLXB8LS1wYXRjaF0gWy0tW25vLV1rZWVwLWluZGV4XSBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLXF8LS1xdWlldF0gWy1mfC0tZm9yY2VdIFs8bWVzc2FnZT5dOjoKIAogCVNhdmUgeW91ciBsb2NhbCBtb2RpZmljYXRpb25zIHRvIGEgbmV3ICdzdGFzaCcsIGFuZCBydW4gYGdpdCByZXNldAogCS0taGFyZGAgdG8gcmV2ZXJ0IHRoZW0uICBUaGUgPG1lc3NhZ2U+IHBhcnQgaXMgb3B0aW9uYWwgYW5kIGdpdmVzCkBAIC03MCw2ICs3MiwxMyBAQAogKwogVGhlIGAtLXBhdGNoYCBvcHRpb24gaW1wbGllcyBgLS1rZWVwLWluZGV4YC4gIFlvdSBjYW4gdXNlCiBgLS1uby1rZWVwLWluZGV4YCB0byBvdmVycmlkZSB0aGlzLgorKworSW4gc29tZSBjYXNlcywgc2F2aW5nIGEgc3Rhc2ggY291bGQgbWVhbiBpcnJldHJpZXZhYmx5IHJlbW92aW5nIHNvbWUKK2RhdGEgLSBpZiBhIGRpcmVjdG9yeSB3aXRoIHVudHJhY2tlZCBmaWxlcyByZXBsYWNlcyBhIHRyYWNrZWQgZmlsZSBvZgordGhlIHNhbWUgbmFtZSwgdGhlIG5ldyB1bnRyYWNrZWQgZmlsZXMgYXJlIG5vdCBzYXZlZCAoZXhjZXB0IGluIGNhc2UKK29mIGAtLWluY2x1ZGUtdW50cmFja2VkYCkgYnV0IHRoZSBvcmlnaW5hbCB0cmFja2VkIGZpbGUgc2hhbGwgYmUgcmVzdG9yZWQuCitCeSBkZWZhdWx0LCBgc3Rhc2ggc2F2ZWAgd2lsbCBhYm9ydCBpbiBzdWNoIGEgY2FzZTsgYC0tZm9yY2VgIHdpbGwgYWxsb3cKK2l0IHRvIHJlbW92ZSB0aGUgdW50cmFja2VkIGZpbGVzLgogCiBsaXN0IFs8b3B0aW9ucz5dOjoKIApAQCAtMTUxLDcgKzE2MCwxNSBAQAogCiAJQ3JlYXRlIGEgc3Rhc2ggKHdoaWNoIGlzIGEgcmVndWxhciBjb21taXQgb2JqZWN0KSBhbmQgcmV0dXJuIGl0cwogCW9iamVjdCBuYW1lLCB3aXRob3V0IHN0b3JpbmcgaXQgYW55d2hlcmUgaW4gdGhlIHJlZiBuYW1lc3BhY2UuCisJVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VmdWwgZm9yIHNjcmlwdHMuICBJdCBpcyBwcm9iYWJseSBub3QKKwl0aGUgY29tbWFuZCB5b3Ugd2FudCB0byB1c2U7IHNlZSAic2F2ZSIgYWJvdmUuCiAKK3N0b3JlOjoKKworCVN0b3JlIGEgZ2l2ZW4gc3Rhc2ggY3JlYXRlZCB2aWEgJ2dpdCBzdGFzaCBjcmVhdGUnICh3aGljaCBpcyBhCisJZGFuZ2xpbmcgbWVyZ2UgY29tbWl0KSBpbiB0aGUgc3Rhc2ggcmVmLCB1cGRhdGluZyB0aGUgc3Rhc2gKKwlyZWZsb2cuICBUaGlzIGlzIGludGVuZGVkIHRvIGJlIHVzZWZ1bCBmb3Igc2NyaXB0cy4gIEl0IGlzCisJcHJvYmFibHkgbm90IHRoZSBjb21tYW5kIHlvdSB3YW50IHRvIHVzZTsgc2VlICJzYXZlIiBhYm92ZS4KIAogRElTQ1VTU0lPTgogLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3VibW9kdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN1Ym1vZHVsZS50eHQKaW5kZXggZTU3NjcxMy4uYmZlZjhhMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc3VibW9kdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdWJtb2R1bGUudHh0CkBAIC0xMCwxMiArMTAsMTIgQEAKIC0tLS0tLS0tCiBbdmVyc2VdCiAnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIGFkZCBbLWIgPGJyYW5jaD5dIFstZnwtLWZvcmNlXSBbLS1uYW1lIDxuYW1lPl0KLQkgICAgICBbLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+XSBbLS1dIDxyZXBvc2l0b3J5PiBbPHBhdGg+XQorCSAgICAgIFstLXJlZmVyZW5jZSA8cmVwb3NpdG9yeT5dIFstLWRlcHRoIDxkZXB0aD5dIFstLV0gPHJlcG9zaXRvcnk+IFs8cGF0aD5dCiAnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIHN0YXR1cyBbLS1jYWNoZWRdIFstLXJlY3Vyc2l2ZV0gWy0tXSBbPHBhdGg+Li4uXQogJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBpbml0IFstLV0gWzxwYXRoPi4uLl0KICdnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gZGVpbml0IFstZnwtLWZvcmNlXSBbLS1dIDxwYXRoPi4uLgogJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSB1cGRhdGUgWy0taW5pdF0gWy0tcmVtb3RlXSBbLU58LS1uby1mZXRjaF0KLQkgICAgICBbLWZ8LS1mb3JjZV0gWy0tcmViYXNlXSBbLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+XQorCSAgICAgIFstZnwtLWZvcmNlXSBbLS1yZWJhc2VdIFstLXJlZmVyZW5jZSA8cmVwb3NpdG9yeT5dIFstLWRlcHRoIDxkZXB0aD5dCiAJICAgICAgWy0tbWVyZ2VdIFstLXJlY3Vyc2l2ZV0gWy0tXSBbPHBhdGg+Li4uXQogJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBzdW1tYXJ5IFstLWNhY2hlZHwtLWZpbGVzXSBbKC1ufC0tc3VtbWFyeS1saW1pdCkgPG4+XQogCSAgICAgIFtjb21taXRdIFstLV0gWzxwYXRoPi4uLl0KQEAgLTE1OSw3ICsxNTksOSBAQAogCVRoaXMgd2lsbCBtYWtlIHRoZSBzdWJtb2R1bGVzIEhFQUQgYmUgZGV0YWNoZWQgdW5sZXNzIGAtLXJlYmFzZWAgb3IKIAlgLS1tZXJnZWAgaXMgc3BlY2lmaWVkIG9yIHRoZSBrZXkgYHN1Ym1vZHVsZS4kbmFtZS51cGRhdGVgIGlzIHNldCB0bwogCWByZWJhc2VgLCBgbWVyZ2VgIG9yIGBub25lYC4gYG5vbmVgIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNwZWNpZnlpbmcKLQlgLS1jaGVja291dGAuCisJYC0tY2hlY2tvdXRgLiBTZXR0aW5nIHRoZSBrZXkgYHN1Ym1vZHVsZS4kbmFtZS51cGRhdGVgIHRvIGAhY29tbWFuZGAKKwl3aWxsIGNhdXNlIGBjb21tYW5kYCB0byBiZSBydW4uIGBjb21tYW5kYCBjYW4gYmUgYW55IGFyYml0cmFyeSBzaGVsbAorCWNvbW1hbmQgdGhhdCB0YWtlcyBhIHNpbmdsZSBhcmd1bWVudCwgbmFtZWx5IHRoZSBzaGExIHRvIHVwZGF0ZSB0by4KICsKIElmIHRoZSBzdWJtb2R1bGUgaXMgbm90IHlldCBpbml0aWFsaXplZCwgYW5kIHlvdSBqdXN0IHdhbnQgdG8gdXNlIHRoZQogc2V0dGluZyBhcyBzdG9yZWQgaW4gLmdpdG1vZHVsZXMsIHlvdSBjYW4gYXV0b21hdGljYWxseSBpbml0aWFsaXplIHRoZQpAQCAtMjYyLDcgKzI2NCw3IEBACiAtLXJlbW90ZTo6CiAJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHVwZGF0ZSBjb21tYW5kLiAgSW5zdGVhZCBvZiB1c2luZwogCXRoZSBzdXBlcnByb2plY3QncyByZWNvcmRlZCBTSEEtMSB0byB1cGRhdGUgdGhlIHN1Ym1vZHVsZSwgdXNlIHRoZQotCXN0YXR1cyBvZiB0aGUgc3VibW9kdWxlJ3MgcmVtb3RlIHRyYWNraW5nIGJyYW5jaC4gIFRoZSByZW1vdGUgdXNlZAorCXN0YXR1cyBvZiB0aGUgc3VibW9kdWxlJ3MgcmVtb3RlLXRyYWNraW5nIGJyYW5jaC4gIFRoZSByZW1vdGUgdXNlZAogCWlzIGJyYW5jaCdzIHJlbW90ZSAoYGJyYW5jaC48bmFtZT4ucmVtb3RlYCksIGRlZmF1bHRpbmcgdG8gYG9yaWdpbmAuCiAJVGhlIHJlbW90ZSBicmFuY2ggdXNlZCBkZWZhdWx0cyB0byBgbWFzdGVyYCwgYnV0IHRoZSBicmFuY2ggbmFtZSBtYXkKIAliZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgdGhlIGBzdWJtb2R1bGUuPG5hbWU+LmJyYW5jaGAgb3B0aW9uIGluCkBAIC0zMjgsNiArMzMwLDEyIEBACiAJb25seSBpbiB0aGUgc3VibW9kdWxlcyBvZiB0aGUgY3VycmVudCByZXBvLCBidXQgYWxzbwogCWluIGFueSBuZXN0ZWQgc3VibW9kdWxlcyBpbnNpZGUgdGhvc2Ugc3VibW9kdWxlcyAoYW5kIHNvIG9uKS4KIAorLS1kZXB0aDo6CisJVGhpcyBvcHRpb24gaXMgdmFsaWQgZm9yIGFkZCBhbmQgdXBkYXRlIGNvbW1hbmRzLiBDcmVhdGUgYSAnc2hhbGxvdycKKwljbG9uZSB3aXRoIGEgaGlzdG9yeSB0cnVuY2F0ZWQgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgcmV2aXNpb25zLgorCVNlZSBsaW5rZ2l0OmdpdC1jbG9uZVsxXQorCisKIDxwYXRoPi4uLjo6CiAJUGF0aHMgdG8gc3VibW9kdWxlKHMpLiBXaGVuIHNwZWNpZmllZCB0aGlzIHdpbGwgcmVzdHJpY3QgdGhlIGNvbW1hbmQKIAl0byBvbmx5IG9wZXJhdGUgb24gdGhlIHN1Ym1vZHVsZXMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBwYXRocy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXdlYi0tYnJvd3NlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXdlYi0tYnJvd3NlLnR4dAppbmRleCBiYTc5Y2I0Li41YWVjNGVjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC13ZWItLWJyb3dzZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtd2ViLS1icm93c2UudHh0CkBAIC0zNCw2ICszNCw3IEBACiAqIGRpbGxvCiAqIG9wZW4gKHRoaXMgaXMgdGhlIGRlZmF1bHQgdW5kZXIgTWFjIE9TIFggR1VJKQogKiBzdGFydCAodGhpcyBpcyB0aGUgZGVmYXVsdCB1bmRlciBNaW5HVykKKyogY3lnc3RhcnQgKHRoaXMgaXMgdGhlIGRlZmF1bHQgdW5kZXIgQ3lnd2luKQogCiBDdXN0b20gY29tbWFuZHMgbWF5IGFsc28gYmUgc3BlY2lmaWVkLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC50eHQKaW5kZXggOWUzMDJiMC4uM2JkZDU2ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LnR4dApAQCAtNDMsMTIgKzQzLDIxIEBACiBicmFuY2ggb2YgdGhlIGBnaXQuZ2l0YCByZXBvc2l0b3J5LgogRG9jdW1lbnRhdGlvbiBmb3Igb2xkZXIgcmVsZWFzZXMgYXJlIGF2YWlsYWJsZSBoZXJlOgogCisqIGxpbms6djEuOC4zLjQvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjguMy40XQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMS44LjMuNC50eHRbMS44LjMuNF0sCisgIGxpbms6UmVsTm90ZXMvMS44LjMuMy50eHRbMS44LjMuM10sCisgIGxpbms6UmVsTm90ZXMvMS44LjMuMi50eHRbMS44LjMuMl0sCisgIGxpbms6UmVsTm90ZXMvMS44LjMuMS50eHRbMS44LjMuMV0sCisgIGxpbms6UmVsTm90ZXMvMS44LjMudHh0WzEuOC4zXS4KKwogKiBsaW5rOnYxLjguMi4zL2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS44LjIuM10KIAogKiByZWxlYXNlIG5vdGVzIGZvcgotICBsaW5rOlJlbE5vdGVzLzEuOC4yLjMudHh0WzEuOC4yLjNdLgotICBsaW5rOlJlbE5vdGVzLzEuOC4yLjIudHh0WzEuOC4yLjJdLgotICBsaW5rOlJlbE5vdGVzLzEuOC4yLjEudHh0WzEuOC4yLjFdLgorICBsaW5rOlJlbE5vdGVzLzEuOC4yLjMudHh0WzEuOC4yLjNdLAorICBsaW5rOlJlbE5vdGVzLzEuOC4yLjIudHh0WzEuOC4yLjJdLAorICBsaW5rOlJlbE5vdGVzLzEuOC4yLjEudHh0WzEuOC4yLjFdLAogICBsaW5rOlJlbE5vdGVzLzEuOC4yLnR4dFsxLjguMl0uCiAKICogbGluazp2MS44LjEuNi9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuOC4xLjZdCkBAIC02NzcsOSArNjg2LDcgQEAKIAlUaGUgJy0tZ2l0LWRpcicgY29tbWFuZC1saW5lIG9wdGlvbiBhbHNvIHNldHMgdGhpcyB2YWx1ZS4KIAogJ0dJVF9XT1JLX1RSRUUnOjoKLQlTZXQgdGhlIHBhdGggdG8gdGhlIHdvcmtpbmcgdHJlZS4gIFRoZSB2YWx1ZSB3aWxsIG5vdCBiZQotCXVzZWQgaW4gY29tYmluYXRpb24gd2l0aCByZXBvc2l0b3JpZXMgZm91bmQgYXV0b21hdGljYWxseSBpbgotCWEgLmdpdCBkaXJlY3RvcnkgKGkuZS4gJEdJVF9ESVIgaXMgbm90IHNldCkuCisJU2V0IHRoZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSB3b3JraW5nIHRyZWUuCiAJVGhpcyBjYW4gYWxzbyBiZSBjb250cm9sbGVkIGJ5IHRoZSAnLS13b3JrLXRyZWUnIGNvbW1hbmQgbGluZQogCW9wdGlvbiBhbmQgdGhlIGNvcmUud29ya3RyZWUgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KIApAQCAtODExLDggKzgxOCw5IEBACiAnR0lUX0ZMVVNIJzo6CiAJSWYgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgdG8gIjEiLCB0aGVuIGNvbW1hbmRzIHN1Y2gKIAlhcyAnZ2l0IGJsYW1lJyAoaW4gaW5jcmVtZW50YWwgbW9kZSksICdnaXQgcmV2LWxpc3QnLCAnZ2l0IGxvZycsCi0JYW5kICdnaXQgd2hhdGNoYW5nZWQnIHdpbGwgZm9yY2UgYSBmbHVzaCBvZiB0aGUgb3V0cHV0IHN0cmVhbQotCWFmdGVyIGVhY2ggY29tbWl0LW9yaWVudGVkIHJlY29yZCBoYXZlIGJlZW4gZmx1c2hlZC4gICBJZiB0aGlzCisJJ2dpdCBjaGVjay1hdHRyJywgJ2dpdCBjaGVjay1pZ25vcmUnLCBhbmQgJ2dpdCB3aGF0Y2hhbmdlZCcgd2lsbAorCWZvcmNlIGEgZmx1c2ggb2YgdGhlIG91dHB1dCBzdHJlYW0gYWZ0ZXIgZWFjaCByZWNvcmQgaGF2ZSBiZWVuCisJZmx1c2hlZC4gSWYgdGhpcwogCXZhcmlhYmxlIGlzIHNldCB0byAiMCIsIHRoZSBvdXRwdXQgb2YgdGhlc2UgY29tbWFuZHMgd2lsbCBiZSBkb25lCiAJdXNpbmcgY29tcGxldGVseSBidWZmZXJlZCBJL08uICAgSWYgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcwogCW5vdCBzZXQsIEdpdCB3aWxsIGNob29zZSBidWZmZXJlZCBvciByZWNvcmQtb3JpZW50ZWQgZmx1c2hpbmcKQEAgLTgzMiw2ICs4NDAsMTkgQEAKIAlhcyBhIGZpbGUgcGF0aCBhbmQgd2lsbCB0cnkgdG8gd3JpdGUgdGhlIHRyYWNlIG1lc3NhZ2VzCiAJaW50byBpdC4KIAorJ0dJVF9UUkFDRV9QQUNLX0FDQ0VTUyc6OgorCUlmIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIGEgcGF0aCwgYSBmaWxlIHdpbGwgYmUgY3JlYXRlZCBhdAorCXRoZSBnaXZlbiBwYXRoIGxvZ2dpbmcgYWxsIGFjY2Vzc2VzIHRvIGFueSBwYWNrcy4gRm9yIGVhY2gKKwlhY2Nlc3MsIHRoZSBwYWNrIGZpbGUgbmFtZSBhbmQgYW4gb2Zmc2V0IGluIHRoZSBwYWNrIGlzCisJcmVjb3JkZWQuIFRoaXMgbWF5IGJlIGhlbHBmdWwgZm9yIHRyb3VibGVzaG9vdGluZyBzb21lCisJcGFjay1yZWxhdGVkIHBlcmZvcm1hbmNlIHByb2JsZW1zLgorCisnR0lUX1RSQUNFX1BBQ0tFVCc6OgorCUlmIHRoaXMgdmFyaWFibGUgaXMgc2V0LCBpdCBzaG93cyBhIHRyYWNlIG9mIGFsbCBwYWNrZXRzCisJY29taW5nIGluIG9yIG91dCBvZiBhIGdpdmVuIHByb2dyYW0uIFRoaXMgY2FuIGhlbHAgd2l0aAorCWRlYnVnZ2luZyBvYmplY3QgbmVnb3RpYXRpb24gb3Igb3RoZXIgcHJvdG9jb2wgaXNzdWVzLiBUcmFjaW5nCisJaXMgdHVybmVkIG9mZiBhdCBhIHBhY2tldCBzdGFydGluZyB3aXRoICJQQUNLIi4KKwogR0lUX0xJVEVSQUxfUEFUSFNQRUNTOjoKIAlTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gYDFgIHdpbGwgY2F1c2UgR2l0IHRvIHRyZWF0IGFsbAogCXBhdGhzcGVjcyBsaXRlcmFsbHksIHJhdGhlciB0aGFuIGFzIGdsb2IgcGF0dGVybnMuIEZvciBleGFtcGxlLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRkaWZmY29yZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGRpZmZjb3JlLnR4dAppbmRleCA1NjhkNzU3Li5jOGIzZTUxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdGRpZmZjb3JlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGRpZmZjb3JlLnR4dApAQCAtMjIyLDI2ICsyMjIsMzUgQEAKIGRpZmZjb3JlLXBpY2theGU6IEZvciBEZXRlY3RpbmcgQWRkaXRpb24vRGVsZXRpb24gb2YgU3BlY2lmaWVkIFN0cmluZwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdXNlZCB0byBmaW5kIGZpbGVwYWlycyB0aGF0IHJlcHJlc2VudAotY2hhbmdlcyB0aGF0IHRvdWNoIGEgc3BlY2lmaWVkIHN0cmluZywgYW5kIGlzIGNvbnRyb2xsZWQgYnkgdGhlCi0tUyBvcHRpb24gYW5kIHRoZSBgLS1waWNrYXhlLWFsbGAgb3B0aW9uIHRvIHRoZSAnZ2l0IGRpZmYtKicKLWNvbW1hbmRzLgorVGhpcyB0cmFuc2Zvcm1hdGlvbiBsaW1pdHMgdGhlIHNldCBvZiBmaWxlcGFpcnMgdG8gdGhvc2UgdGhhdCBjaGFuZ2UKK3NwZWNpZmllZCBzdHJpbmdzIGJldHdlZW4gdGhlIHByZWltYWdlIGFuZCB0aGUgcG9zdGltYWdlIGluIGEgY2VydGFpbgord2F5LiAgLVM8YmxvY2sgb2YgdGV4dD4gYW5kIC1HPHJlZ3VsYXIgZXhwcmVzc2lvbj4gb3B0aW9ucyBhcmUgdXNlZCB0bworc3BlY2lmeSBkaWZmZXJlbnQgd2F5cyB0aGVzZSBzdHJpbmdzIGFyZSBzb3VnaHQuCiAKLVdoZW4gZGlmZmNvcmUtcGlja2F4ZSBpcyBpbiB1c2UsIGl0IGNoZWNrcyBpZiB0aGVyZSBhcmUKLWZpbGVwYWlycyB3aG9zZSAicmVzdWx0IiBzaWRlIGFuZCB3aG9zZSAib3JpZ2luIiBzaWRlIGhhdmUKLWRpZmZlcmVudCBudW1iZXIgb2Ygc3BlY2lmaWVkIHN0cmluZy4gIFN1Y2ggYSBmaWxlcGFpciByZXByZXNlbnRzCi0idGhlIHN0cmluZyBhcHBlYXJlZCBpbiB0aGlzIGNoYW5nZXNldCIuICBJdCBhbHNvIGNoZWNrcyBmb3IgdGhlCi1vcHBvc2l0ZSBjYXNlIHRoYXQgbG9zZXMgdGhlIHNwZWNpZmllZCBzdHJpbmcuCisiLVM8YmxvY2sgb2YgdGV4dD4iIGRldGVjdHMgZmlsZXBhaXJzIHdob3NlIHByZWltYWdlIGFuZCBwb3N0aW1hZ2UKK2hhdmUgZGlmZmVyZW50IG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkIGJsb2NrIG9mIHRleHQuCitCeSBkZWZpbml0aW9uLCBpdCB3aWxsIG5vdCBkZXRlY3QgaW4tZmlsZSBtb3Zlcy4gIEFsc28sIHdoZW4gYQorY2hhbmdlc2V0IG1vdmVzIGEgZmlsZSB3aG9sZXNhbGUgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGludGVyZXN0aW5nCitzdHJpbmcsIGRpZmZjb3JlLXJlbmFtZSBraWNrcyBpbiBhcyB1c3VhbCwgYW5kIGAtU2Agb21pdHMgdGhlIGZpbGVwYWlyCisoc2luY2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGF0IHN0cmluZyBkaWRuJ3QgY2hhbmdlIGluIHRoYXQKK3JlbmFtZS1kZXRlY3RlZCBmaWxlcGFpcikuICBXaGVuIHVzZWQgd2l0aCBgLS1waWNrYXhlLXJlZ2V4YCwgdHJlYXQKK3RoZSA8YmxvY2sgb2YgdGV4dD4gYXMgYW4gZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoLAoraW5zdGVhZCBvZiBhIGxpdGVyYWwgc3RyaW5nLgogCi1XaGVuIGAtLXBpY2theGUtYWxsYCBpcyBub3QgaW4gZWZmZWN0LCBkaWZmY29yZS1waWNrYXhlIGxlYXZlcwotb25seSBzdWNoIGZpbGVwYWlycyB0aGF0IHRvdWNoIHRoZSBzcGVjaWZpZWQgc3RyaW5nIGluIGl0cwotb3V0cHV0LiAgV2hlbiBgLS1waWNrYXhlLWFsbGAgaXMgdXNlZCwgZGlmZmNvcmUtcGlja2F4ZSBsZWF2ZXMgYWxsCi1maWxlcGFpcnMgaW50YWN0IGlmIHRoZXJlIGlzIHN1Y2ggYSBmaWxlcGFpciwgb3IgbWFrZXMgdGhlCi1vdXRwdXQgZW1wdHkgb3RoZXJ3aXNlLiAgVGhlIGxhdHRlciBiZWhhdmlvdXIgaXMgZGVzaWduZWQgdG8KLW1ha2UgcmV2aWV3aW5nIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBjb250ZXh0IG9mIHRoZSB3aG9sZQorIi1HPHJlZ3VsYXIgZXhwcmVzc2lvbj4iIChtbmVtb25pYzogZ3JlcCkgZGV0ZWN0cyBmaWxlcGFpcnMgd2hvc2UKK3RleHR1YWwgZGlmZiBoYXMgYW4gYWRkZWQgb3IgYSBkZWxldGVkIGxpbmUgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbgorcmVndWxhciBleHByZXNzaW9uLiAgVGhpcyBtZWFucyB0aGF0IGl0IHdpbGwgZGV0ZWN0IGluLWZpbGUgKG9yIHdoYXQKK3JlbmFtZS1kZXRlY3Rpb24gY29uc2lkZXJzIHRoZSBzYW1lIGZpbGUpIG1vdmVzLCB3aGljaCBpcyBub2lzZS4gIFRoZQoraW1wbGVtZW50YXRpb24gcnVucyBkaWZmIHR3aWNlIGFuZCBncmVwcywgYW5kIHRoaXMgY2FuIGJlIHF1aXRlCitleHBlbnNpdmUuCisKK1doZW4gYC1TYCBvciBgLUdgIGFyZSB1c2VkIHdpdGhvdXQgYC0tcGlja2F4ZS1hbGxgLCBvbmx5IGZpbGVwYWlycwordGhhdCBtYXRjaCB0aGVpciByZXNwZWN0aXZlIGNyaXRlcmlvbiBhcmUga2VwdCBpbiB0aGUgb3V0cHV0LiAgV2hlbgorYC0tcGlja2F4ZS1hbGxgIGlzIHVzZWQsIGlmIGV2ZW4gb25lIGZpbGVwYWlyIG1hdGNoZXMgdGhlaXIgcmVzcGVjdGl2ZQorY3JpdGVyaW9uIGluIGEgY2hhbmdlc2V0LCB0aGUgZW50aXJlIGNoYW5nZXNldCBpcyBrZXB0LiAgVGhpcyBiZWhhdmlvcgoraXMgZGVzaWduZWQgdG8gbWFrZSByZXZpZXdpbmcgY2hhbmdlcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgd2hvbGUKIGNoYW5nZXNldCBlYXNpZXIuCiAKLQogZGlmZmNvcmUtb3JkZXI6IEZvciBTb3J0aW5nIHRoZSBPdXRwdXQgQmFzZWQgb24gRmlsZW5hbWVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRyZW1vdGUtaGVscGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdHJlbW90ZS1oZWxwZXJzLnR4dAppbmRleCBkYTc0NjQxLi4wODI3ZjY5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdHJlbW90ZS1oZWxwZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdHJlbW90ZS1oZWxwZXJzLnR4dApAQCAtMTU5LDExICsxNTksMTEgQEAKIAljYXJyaWVkIG91dC4KIAogJ3JlZnNwZWMnIDxyZWZzcGVjPjo6Ci0JVGhpcyBtb2RpZmllcyB0aGUgJ2ltcG9ydCcgY2FwYWJpbGl0eSwgYWxsb3dpbmcgdGhlIHByb2R1Y2VkCi0JZmFzdC1pbXBvcnQgc3RyZWFtIHRvIG1vZGlmeSByZWZzIGluIGEgcHJpdmF0ZSBuYW1lc3BhY2UKLQlpbnN0ZWFkIG9mIHdyaXRpbmcgdG8gcmVmcy9oZWFkcyBvciByZWZzL3JlbW90ZXMgZGlyZWN0bHkuCisJRm9yIHJlbW90ZSBoZWxwZXJzIHRoYXQgaW1wbGVtZW50ICdpbXBvcnQnIG9yICdleHBvcnQnLCB0aGlzIGNhcGFiaWxpdHkKKwlhbGxvd3MgdGhlIHJlZnMgdG8gYmUgY29uc3RyYWluZWQgdG8gYSBwcml2YXRlIG5hbWVzcGFjZSwgaW5zdGVhZCBvZgorCXdyaXRpbmcgdG8gcmVmcy9oZWFkcyBvciByZWZzL3JlbW90ZXMgZGlyZWN0bHkuCiAJSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbGwgaW1wb3J0ZXJzIHByb3ZpZGluZyB0aGUgJ2ltcG9ydCcKLQljYXBhYmlsaXR5IHVzZSB0aGlzLgorCWNhcGFiaWxpdHkgdXNlIHRoaXMuIEl0J3MgbWFuZGF0b3J5IGZvciAnZXhwb3J0Jy4KICsKIEEgaGVscGVyIGFkdmVydGlzaW5nIHRoZSBjYXBhYmlsaXR5CiBgcmVmc3BlYyByZWZzL2hlYWRzLyo6cmVmcy9zdm4vb3JpZ2luL2JyYW5jaGVzLypgCkBAIC0xNzQsOCArMTc0LDggQEAKIFRoaXMgY2FwYWJpbGl0eSBjYW4gYmUgYWR2ZXJ0aXNlZCBtdWx0aXBsZSB0aW1lcy4gIFRoZSBmaXJzdAogYXBwbGljYWJsZSByZWZzcGVjIHRha2VzIHByZWNlZGVuY2UuICBUaGUgbGVmdC1oYW5kIG9mIHJlZnNwZWNzCiBhZHZlcnRpc2VkIHdpdGggdGhpcyBjYXBhYmlsaXR5IG11c3QgY292ZXIgYWxsIHJlZnMgcmVwb3J0ZWQgYnkKLXRoZSBsaXN0IGNvbW1hbmQuICBJZiBhIGhlbHBlciBkb2VzIG5vdCBuZWVkIGEgc3BlY2lmaWMgJ3JlZnNwZWMnCi1jYXBhYmlsaXR5IHRoZW4gaXQgc2hvdWxkIGFkdmVydGlzZSBgcmVmc3BlYyAqOipgLgordGhlIGxpc3QgY29tbWFuZC4gIElmIG5vICdyZWZzcGVjJyBjYXBhYmlsaXR5IGlzIGFkdmVydGlzZWQsCit0aGVyZSBpcyBhbiBpbXBsaWVkIGByZWZzcGVjICo6KmAuCiAKICdiaWRpLWltcG9ydCc6OgogCVRoaXMgbW9kaWZpZXMgdGhlICdpbXBvcnQnIGNhcGFiaWxpdHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdHJlcG9zaXRvcnktbGF5b3V0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0cmVwb3NpdG9yeS1sYXlvdXQudHh0CmluZGV4IGQ2ZjMzOTMuLmFhMDM4ODIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0cmVwb3NpdG9yeS1sYXlvdXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0cmVwb3NpdG9yeS1sYXlvdXQudHh0CkBAIC0yMTEsNiArMjExLDkgQEAKIAlhbmQgbWFpbnRhaW5lZCBieSBzaGFsbG93IGNsb25lIG1lY2hhbmlzbS4gIFNlZSBgLS1kZXB0aGAKIAlvcHRpb24gdG8gbGlua2dpdDpnaXQtY2xvbmVbMV0gYW5kIGxpbmtnaXQ6Z2l0LWZldGNoWzFdLgogCittb2R1bGVzOjoKKwlDb250YWlucyB0aGUgZ2l0LXJlcG9zaXRvcmllcyBvZiB0aGUgc3VibW9kdWxlcy4KKwogU0VFIEFMU08KIC0tLS0tLS0tCiBsaW5rZ2l0OmdpdC1pbml0WzFdLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXR3ZWIuY29uZi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdHdlYi5jb25mLnR4dAppbmRleCBlYTA1MjZlLi4zMDVkYjYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdHdlYi5jb25mLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdHdlYi5jb25mLnR4dApAQCAtMzM2LDggKzMzNiwyNiBAQAogCXVzZWQgYXMgdGhlIGZpcnN0IGNvbXBvbmVudCBvZiBnaXR3ZWIncyAiYnJlYWRjcnVtYiB0cmFpbCI6CiAJYDxob21lIGxpbms+IC8gPHByb2plY3Q+IC8gPGFjdGlvbj5gLiAgQ2FuIGJlIHNldCBhdCBidWlsZCB0aW1lIHVzaW5nCiAJdGhlIGBHSVRXRUJfSE9NRV9MSU5LX1NUUmAgdmFyaWFibGUuICBCeSBkZWZhdWx0IGl0IGlzIHNldCB0byAicHJvamVjdHMiLAotCWFzIHRoaXMgbGluayBsZWFkcyB0byB0aGUgbGlzdCBvZiBwcm9qZWN0cy4gIE90aGVyIHBvcHVsYXIgY2hvaWNlIGl0IHRvCi0Jc2V0IGl0IHRvIHRoZSBuYW1lIG9mIHNpdGUuCisJYXMgdGhpcyBsaW5rIGxlYWRzIHRvIHRoZSBsaXN0IG9mIHByb2plY3RzLiAgQW5vdGhlciBwb3B1bGFyIGNob2ljZSBpcyB0bworCXNldCBpdCB0byB0aGUgbmFtZSBvZiBzaXRlLiAgTm90ZSB0aGF0IGl0IGlzIHRyZWF0ZWQgYXMgcmF3IEhUTUwgc28gaXQKKwlzaG91bGQgbm90IGJlIHNldCBmcm9tIHVudHJ1c3RlZCBzb3VyY2VzLgorCitAZXh0cmFfYnJlYWRjcnVtYnM6OgorCUFkZGl0aW9uYWwgbGlua3MgdG8gYmUgYWRkZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBicmVhZGNydW1iIHRyYWlsIGJlZm9yZQorCXRoZSBob21lIGxpbmssIHRvIHBhZ2VzIHRoYXQgYXJlIGxvZ2ljYWxseSAiYWJvdmUiIHRoZSBnaXR3ZWIgcHJvamVjdHMKKwlsaXN0LCBzdWNoIGFzIHRoZSBvcmdhbml6YXRpb24gYW5kIGRlcGFydG1lbnQgd2hpY2ggaG9zdCB0aGUgZ2l0d2ViCisJc2VydmVyLiBFYWNoIGVsZW1lbnQgb2YgdGhlIGxpc3QgaXMgYSByZWZlcmVuY2UgdG8gYW4gYXJyYXksIGluIHdoaWNoCisJZWxlbWVudCAwIGlzIHRoZSBsaW5rIHRleHQgKGVxdWl2YWxlbnQgdG8gYCRob21lX2xpbmtfc3RyYCkgYW5kIGVsZW1lbnQKKwkxIGlzIHRoZSB0YXJnZXQgVVJMIChlcXVpdmFsZW50IHRvIGAkaG9tZV9saW5rYCkuCisrCitGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzZXR0aW5nIHByb2R1Y2VzIGEgYnJlYWRjcnVtYiB0cmFpbCBsaWtlCisiaG9tZSAvIGRldiAvIHByb2plY3RzIC8gLi4uIiB3aGVyZSAicHJvamVjdHMiIGlzIHRoZSBob21lIGxpbmsuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgb3VyIEBleHRyYV9icmVhZGNydW1icyA9ICgKKyAgICAgIFsgJ2hvbWUnID0+ICdodHRwczovL3d3dy5leGFtcGxlLm9yZy8nIF0sCisgICAgICBbICdkZXYnICA9PiAnaHR0cHM6Ly9kZXYuZXhhbXBsZS5vcmcvJyBdLAorICAgICk7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICRsb2dvX3VybDo6CiAkbG9nb19sYWJlbDo6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdHdlYi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdHdlYi50eHQKaW5kZXggNDA5NjlmMS4uY2NhMTRiOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXR3ZWIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0d2ViLnR4dApAQCAtNTA0LDcgKzUwNCw3IEBACiAKIFRoZSBhYm92ZSBjb25maWd1cmF0aW9uIGV4cGVjdHMgeW91ciBwdWJsaWMgcmVwb3NpdG9yaWVzIHRvIGxpdmUgdW5kZXIKICcvcHViL2dpdCcgYW5kIHdpbGwgc2VydmUgdGhlbSBhcyBgaHR0cDovL2dpdC5kb21haW4ub3JnL2Rpci11bmRlci1wdWItZ2l0YCwKLWJvdGggYXMgY2xvbmVhYmxlIEdpdCBVUkwgYW5kIGFzIGJyb3dzZWFibGUgZ2l0d2ViIGludGVyZmFjZS4gIElmIHlvdSB0aGVuCitib3RoIGFzIGNsb25hYmxlIEdpdCBVUkwgYW5kIGFzIGJyb3dzZWFibGUgZ2l0d2ViIGludGVyZmFjZS4gIElmIHlvdSB0aGVuCiBzdGFydCB5b3VyIGxpbmtnaXQ6Z2l0LWRhZW1vblsxXSB3aXRoIGAtLWJhc2UtcGF0aD0vcHViL2dpdCAtLWV4cG9ydC1hbGxgCiB0aGVuIHlvdSBjYW4gZXZlbiB1c2UgdGhlIGBnaXQ6Ly9gIFVSTCB3aXRoIGV4YWN0bHkgdGhlIHNhbWUgcGF0aC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9nbG9zc2FyeS1jb250ZW50LnR4dCBiL0RvY3VtZW50YXRpb24vZ2xvc3NhcnktY29udGVudC50eHQKaW5kZXggNjhhMThlMS4uZGJhNTA2MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9nbG9zc2FyeS1jb250ZW50LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dsb3NzYXJ5LWNvbnRlbnQudHh0CkBAIC0xMTMsNyArMTEzLDcgQEAKIHdoaWxlIHRoZSBIRUFEIGlzIGRldGFjaGVkLiBUaGV5IHVwZGF0ZSB0aGUgSEVBRCB0byBwb2ludCBhdCB0aGUgdGlwCiBvZiB0aGUgdXBkYXRlZCBoaXN0b3J5IHdpdGhvdXQgYWZmZWN0aW5nIGFueSBicmFuY2guICBDb21tYW5kcyB0aGF0CiB1cGRhdGUgb3IgaW5xdWlyZSBpbmZvcm1hdGlvbiBfYWJvdXRfIHRoZSBjdXJyZW50IGJyYW5jaCAoZS5nLiBgZ2l0Ci1icmFuY2ggLS1zZXQtdXBzdHJlYW0tdG9gIHRoYXQgc2V0cyB3aGF0IHJlbW90ZSB0cmFja2luZyBicmFuY2ggdGhlCiticmFuY2ggLS1zZXQtdXBzdHJlYW0tdG9gIHRoYXQgc2V0cyB3aGF0IHJlbW90ZS10cmFja2luZyBicmFuY2ggdGhlCiBjdXJyZW50IGJyYW5jaCBpbnRlZ3JhdGVzIHdpdGgpIG9idmlvdXNseSBkbyBub3Qgd29yaywgYXMgdGhlcmUgaXMgbm8KIChyZWFsKSBjdXJyZW50IGJyYW5jaCB0byBhc2sgYWJvdXQgaW4gdGhpcyBzdGF0ZS4KIApAQCAtMjY3LDcgKzI2Nyw3IEBACiAJVGhlIGRlZmF1bHQgdXBzdHJlYW0gPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4uIE1vc3QgcHJvamVjdHMgaGF2ZQogCWF0IGxlYXN0IG9uZSB1cHN0cmVhbSBwcm9qZWN0IHdoaWNoIHRoZXkgdHJhY2suIEJ5IGRlZmF1bHQKIAknb3JpZ2luJyBpcyB1c2VkIGZvciB0aGF0IHB1cnBvc2UuIE5ldyB1cHN0cmVhbSB1cGRhdGVzCi0Jd2lsbCBiZSBmZXRjaGVkIGludG8gcmVtb3RlIDw8ZGVmX3JlbW90ZV90cmFja2luZ19icmFuY2gscmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzPj4gbmFtZWQKKwl3aWxsIGJlIGZldGNoZWQgaW50byA8PGRlZl9yZW1vdGVfdHJhY2tpbmdfYnJhbmNoLHJlbW90ZS10cmFja2luZyBicmFuY2hlcz4+IG5hbWVkCiAJb3JpZ2luL25hbWUtb2YtdXBzdHJlYW0tYnJhbmNoLCB3aGljaCB5b3UgY2FuIHNlZSB1c2luZwogCWBnaXQgYnJhbmNoIC1yYC4KIApAQCAtNDAwLDEyICs0MDAsMTMgQEAKIAk8PGRlZl9yZWYscmVmPj4gYW5kIGxvY2FsIHJlZi4KIAogW1tkZWZfcmVtb3RlX3RyYWNraW5nX2JyYW5jaF1dcmVtb3RlLXRyYWNraW5nIGJyYW5jaDo6Ci0JQSByZWd1bGFyIEdpdCA8PGRlZl9icmFuY2gsYnJhbmNoPj4gdGhhdCBpcyB1c2VkIHRvIGZvbGxvdyBjaGFuZ2VzIGZyb20KLQlhbm90aGVyIDw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+LiBBIHJlbW90ZS10cmFja2luZwotCWJyYW5jaCBzaG91bGQgbm90IGNvbnRhaW4gZGlyZWN0IG1vZGlmaWNhdGlvbnMgb3IgaGF2ZSBsb2NhbCBjb21taXRzCi0JbWFkZSB0byBpdC4gQSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGNhbiB1c3VhbGx5IGJlCi0JaWRlbnRpZmllZCBhcyB0aGUgcmlnaHQtaGFuZC1zaWRlIDw8ZGVmX3JlZixyZWY+PiBpbiBhIFB1bGw6Ci0JPDxkZWZfcmVmc3BlYyxyZWZzcGVjPj4uCisJQSA8PGRlZl9yZWYscmVmPj4gdGhhdCBpcyB1c2VkIHRvIGZvbGxvdyBjaGFuZ2VzIGZyb20gYW5vdGhlcgorCTw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+LiBJdCB0eXBpY2FsbHkgbG9va3MgbGlrZQorCSdyZWZzL3JlbW90ZXMvZm9vL2JhcicgKGluZGljYXRpbmcgdGhhdCBpdCB0cmFja3MgYSBicmFuY2ggbmFtZWQKKwknYmFyJyBpbiBhIHJlbW90ZSBuYW1lZCAnZm9vJyksIGFuZCBtYXRjaGVzIHRoZSByaWdodC1oYW5kLXNpZGUgb2YKKwlhIGNvbmZpZ3VyZWQgZmV0Y2ggPDxkZWZfcmVmc3BlYyxyZWZzcGVjPj4uIEEgcmVtb3RlLXRyYWNraW5nCisJYnJhbmNoIHNob3VsZCBub3QgY29udGFpbiBkaXJlY3QgbW9kaWZpY2F0aW9ucyBvciBoYXZlIGxvY2FsCisJY29tbWl0cyBtYWRlIHRvIGl0LgogCiBbW2RlZl9yZXBvc2l0b3J5XV1yZXBvc2l0b3J5OjoKIAlBIGNvbGxlY3Rpb24gb2YgPDxkZWZfcmVmLHJlZnM+PiB0b2dldGhlciB3aXRoIGFuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3JldmVydC1icmFuY2gtcmViYXNlLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vcmV2ZXJ0LWJyYW5jaC1yZWJhc2UudHh0CmluZGV4IDg0ZGQ4MzkuLjBkNTQxOWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaG93dG8vcmV2ZXJ0LWJyYW5jaC1yZWJhc2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vcmV2ZXJ0LWJyYW5jaC1yZWJhc2UudHh0CkBAIC0xMiw3ICsxMiw3IEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBPbmUgb2YgdGhlIGNoYW5nZXMgSSBwdWxsZWQgaW50byB0aGUgJ21hc3RlcicgYnJhbmNoIHR1cm5zIG91dCB0bwotYnJlYWsgYnVpbGRpbmcgR2l0IHdpdGggR0NDIDIuOTUuICBXaGlsZSB0aGV5IHdlcmUgd2VsbCBpbnRlbnRpb25lZAorYnJlYWsgYnVpbGRpbmcgR2l0IHdpdGggR0NDIDIuOTUuICBXaGlsZSB0aGV5IHdlcmUgd2VsbC1pbnRlbnRpb25lZAogcG9ydGFiaWxpdHkgZml4ZXMsIGtlZXBpbmcgdGhpbmdzIHdvcmtpbmcgd2l0aCBnY2MtMi45NSB3YXMgYWxzbwogaW1wb3J0YW50LiAgSGVyZSBpcyB3aGF0IEkgZGlkIHRvIHJldmVydCB0aGUgY2hhbmdlIGluIHRoZSAnbWFzdGVyJwogYnJhbmNoIGFuZCB0byBhZGp1c3QgdGhlICdwdScgYnJhbmNoLCB1c2luZyBjb3JlIEdpdCB0b29scyBhbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGluZS1yYW5nZS1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi9saW5lLXJhbmdlLWZvcm1hdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U3Y2U3MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbGluZS1yYW5nZS1mb3JtYXQudHh0CkBAIC0wLDAgKzEsMjUgQEAKKy0gbnVtYmVyCisrCitJZiA8c3RhcnQ+IG9yIDxlbmQ+IGlzIGEgbnVtYmVyLCBpdCBzcGVjaWZpZXMgYW4KK2Fic29sdXRlIGxpbmUgbnVtYmVyIChsaW5lcyBjb3VudCBmcm9tIDEpLgorKworCistIC9yZWdleC8KKysKK1RoaXMgZm9ybSB3aWxsIHVzZSB0aGUgZmlyc3QgbGluZSBtYXRjaGluZyB0aGUgZ2l2ZW4KK1BPU0lYIHJlZ2V4LiAgSWYgPGVuZD4gaXMgYSByZWdleCwgaXQgd2lsbCBzZWFyY2gKK3N0YXJ0aW5nIGF0IHRoZSBsaW5lIGdpdmVuIGJ5IDxzdGFydD4uCisrCisKKy0gK29mZnNldCBvciAtb2Zmc2V0CisrCitUaGlzIGlzIG9ubHkgdmFsaWQgZm9yIDxlbmQ+IGFuZCB3aWxsIHNwZWNpZnkgYSBudW1iZXIKK29mIGxpbmVzIGJlZm9yZSBvciBhZnRlciB0aGUgbGluZSBnaXZlbiBieSA8c3RhcnQ+LgorKworCistIDpyZWdleAorKworSWYgdGhlIG9wdGlvbidzIGFyZ3VtZW50IGlzIG9mIHRoZSBmb3JtIDpyZWdleCwgaXQgZGVub3RlcyB0aGUgcmFuZ2UKK2Zyb20gdGhlIGZpcnN0IGZ1bmNuYW1lIGxpbmUgdGhhdCBtYXRjaGVzIDxyZWdleD4sIHVwIHRvIHRoZSBuZXh0CitmdW5jbmFtZSBsaW5lLgorKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZXJnZS1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vbWVyZ2Utb3B0aW9ucy50eHQKaW5kZXggMmFkY2NmOC4uYWZiYThkNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tZXJnZS1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21lcmdlLW9wdGlvbnMudHh0CkBAIC04LDEyICs4LDEzIEBACiBpbnNwZWN0IGFuZCBmdXJ0aGVyIHR3ZWFrIHRoZSBtZXJnZSByZXN1bHQgYmVmb3JlIGNvbW1pdHRpbmcuCiAKIC0tZWRpdDo6CistZTo6CiAtLW5vLWVkaXQ6OgogCUludm9rZSBhbiBlZGl0b3IgYmVmb3JlIGNvbW1pdHRpbmcgc3VjY2Vzc2Z1bCBtZWNoYW5pY2FsIG1lcmdlIHRvCiAJZnVydGhlciBlZGl0IHRoZSBhdXRvLWdlbmVyYXRlZCBtZXJnZSBtZXNzYWdlLCBzbyB0aGF0IHRoZSB1c2VyCiAJY2FuIGV4cGxhaW4gYW5kIGp1c3RpZnkgdGhlIG1lcmdlLiBUaGUgYC0tbm8tZWRpdGAgb3B0aW9uIGNhbiBiZQogCXVzZWQgdG8gYWNjZXB0IHRoZSBhdXRvLWdlbmVyYXRlZCBtZXNzYWdlICh0aGlzIGlzIGdlbmVyYWxseQotCWRpc2NvdXJhZ2VkKS4gVGhlIGAtLWVkaXRgIG9wdGlvbiBpcyBzdGlsbCB1c2VmdWwgaWYgeW91IGFyZQorCWRpc2NvdXJhZ2VkKS4gVGhlIGAtLWVkaXRgIChvciBgLWVgKSBvcHRpb24gaXMgc3RpbGwgdXNlZnVsIGlmIHlvdSBhcmUKIAlnaXZpbmcgYSBkcmFmdCBtZXNzYWdlIHdpdGggdGhlIGAtbWAgb3B0aW9uIGZyb20gdGhlIGNvbW1hbmQgbGluZQogCWFuZCB3YW50IHRvIGVkaXQgaXQgaW4gdGhlIGVkaXRvci4KICsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHVsbC1mZXRjaC1wYXJhbS50eHQgYi9Eb2N1bWVudGF0aW9uL3B1bGwtZmV0Y2gtcGFyYW0udHh0CmluZGV4IDk0YTlkMzIuLjE4Y2ZmYzIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcHVsbC1mZXRjaC1wYXJhbS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wdWxsLWZldGNoLXBhcmFtLnR4dApAQCAtNjgsNiArNjgsMTEgQEAKICsKICogYHRhZyA8dGFnPmAgbWVhbnMgdGhlIHNhbWUgYXMgYHJlZnMvdGFncy88dGFnPjpyZWZzL3RhZ3MvPHRhZz5gOwogICBpdCByZXF1ZXN0cyBmZXRjaGluZyBldmVyeXRoaW5nIHVwIHRvIHRoZSBnaXZlbiB0YWcuCi0qIEEgcGFyYW1ldGVyIDxyZWY+IHdpdGhvdXQgYSBjb2xvbiBpcyBlcXVpdmFsZW50IHRvCi0gIDxyZWY+OiB3aGVuIHB1bGxpbmcvZmV0Y2hpbmcsIHNvIGl0IG1lcmdlcyA8cmVmPiBpbnRvIHRoZSBjdXJyZW50Ci0gIGJyYW5jaCB3aXRob3V0IHN0b3JpbmcgdGhlIHJlbW90ZSBicmFuY2ggYW55d2hlcmUgbG9jYWxseQoraWZuZGVmOjpnaXQtcHVsbFtdCisqIEEgcGFyYW1ldGVyIDxyZWY+IHdpdGhvdXQgYSBjb2xvbiBmZXRjaGVzIHRoYXQgcmVmIGludG8gRkVUQ0hfSEVBRCwKK2VuZGlmOjpnaXQtcHVsbFtdCitpZmRlZjo6Z2l0LXB1bGxbXQorKiBBIHBhcmFtZXRlciA8cmVmPiB3aXRob3V0IGEgY29sb24gbWVyZ2VzIDxyZWY+IGludG8gdGhlIGN1cnJlbnQKKyAgYnJhbmNoLAorZW5kaWY6OmdpdC1wdWxsW10KKyAgYW5kIHVwZGF0ZXMgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyAoaWYgYW55KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0CmluZGV4IDNiZGJmNWUuLjI3ZjhkZTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dApAQCAtMjcxLDggKzI3MSw4IEBACiAKIC0tYm91bmRhcnk6OgogCi0JT3V0cHV0IHVuaW50ZXJlc3RpbmcgY29tbWl0cyBhdCB0aGUgYm91bmRhcnksIHdoaWNoIGFyZSB1c3VhbGx5Ci0Jbm90IHNob3duLgorCU91dHB1dCBleGNsdWRlZCBib3VuZGFyeSBjb21taXRzLiBCb3VuZGFyeSBjb21taXRzIGFyZQorCXByZWZpeGVkIHdpdGggYC1gLgogCiAtLQogCkBAIC0zNDIsMTMgKzM0MiwxMyBAQAogaWxsdXN0cmF0ZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBzaW1wbGlmaWNhdGlvbiBzZXR0aW5ncy4gIFdlIGFzc3VtZQogdGhhdCB5b3UgYXJlIGZpbHRlcmluZyBmb3IgYSBmaWxlIGBmb29gIGluIHRoaXMgY29tbWl0IGdyYXBoOgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgIC4tQS0tLU0tLS1OLS0tTy0tLVAKLQkgLyAgICAgLyAgIC8gICAvICAgLwotCUkgICAgIEIgICBDICAgRCAgIEUKLQkgXCAgIC8gICAvICAgLyAgIC8KLQkgIGAtLS0tLS0tLS0tLS0tJworCSAgLi1BLS0tTS0tLU4tLS1PLS0tUC0tLVEKKwkgLyAgICAgLyAgIC8gICAvICAgLyAgIC8KKwlJICAgICBCICAgQyAgIEQgICBFICAgWQorCSBcICAgLyAgIC8gICAvICAgLyAgIC8KKwkgIGAtLS0tLS0tLS0tLS0tJyAgIFgKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgaG9yaXpvbnRhbCBsaW5lIG9mIGhpc3RvcnkgQS0tLVAgaXMgdGFrZW4gdG8gYmUgdGhlIGZpcnN0IHBhcmVudCBvZgorVGhlIGhvcml6b250YWwgbGluZSBvZiBoaXN0b3J5IEEtLS1RIGlzIHRha2VuIHRvIGJlIHRoZSBmaXJzdCBwYXJlbnQgb2YKIGVhY2ggbWVyZ2UuICBUaGUgY29tbWl0cyBhcmU6CiAKICogYElgIGlzIHRoZSBpbml0aWFsIGNvbW1pdCwgaW4gd2hpY2ggYGZvb2AgZXhpc3RzIHdpdGggY29udGVudHMKQEAgLTM2Nyw4ICszNjcsMTEgQEAKICAgYE5gIGFuZCBgRGAgdG8gImZvb2JhcmJheiI7IGkuZS4sIGl0IGlzIG5vdCBUUkVFU0FNRSB0byBhbnkgcGFyZW50LgogCiAqIGBFYCBjaGFuZ2VzIGBxdXV4YCB0byAieHl6enkiLCBhbmQgaXRzIG1lcmdlIGBQYCBjb21iaW5lcyB0aGUKLSAgc3RyaW5ncyB0byAicXV1eCB4eXp6eSIuICBEZXNwaXRlIGFwcGVhcmluZyBpbnRlcmVzdGluZywgYFBgIGlzCi0gIFRSRUVTQU1FIHRvIGFsbCBwYXJlbnRzLgorICBzdHJpbmdzIHRvICJxdXV4IHh5enp5Ii4gIGBQYCBpcyBUUkVFU0FNRSB0byBgT2AsIGJ1dCBub3QgdG8gYEVgLgorCisqIGBYYCBpcyBhbiBpbmRlcGVuZGVudCByb290IGNvbW1pdCB0aGF0IGFkZGVkIGEgbmV3IGZpbGUgYHNpZGVgLCBhbmQgYFlgCisgIG1vZGlmaWVkIGl0LiBgWWAgaXMgVFJFRVNBTUUgdG8gYFhgLiBJdHMgbWVyZ2UgYFFgIGFkZGVkIGBzaWRlYCB0byBgUGAsIGFuZAorICBgUWAgaXMgVFJFRVNBTUUgdG8gYFBgLCBidXQgbm90IHRvIGBZYC4KIAogJ3Jldi1saXN0JyB3YWxrcyBiYWNrd2FyZHMgdGhyb3VnaCBoaXN0b3J5LCBpbmNsdWRpbmcgb3IgZXhjbHVkaW5nCiBjb21taXRzIGJhc2VkIG9uIHdoZXRoZXIgJ1wtLWZ1bGwtaGlzdG9yeScgYW5kL29yIHBhcmVudCByZXdyaXRpbmcKQEAgLTQxMCwxMCArNDEzLDEwIEBACiAJdGhlIGV4YW1wbGUsIHdlIGdldAogKwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlJICBBICBCICBOICBEICBPCisJSSAgQSAgQiAgTiAgRCAgTyAgUCAgUQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICsKLWBQYCBhbmQgYE1gIHdlcmUgZXhjbHVkZWQgYmVjYXVzZSB0aGV5IGFyZSBUUkVFU0FNRSB0byBhIHBhcmVudC4gIGBFYCwKK2BNYCB3YXMgZXhjbHVkZWQgYmVjYXVzZSBpdCBpcyBUUkVFU0FNRSB0byBib3RoIHBhcmVudHMuICBgRWAsCiBgQ2AgYW5kIGBCYCB3ZXJlIGFsbCB3YWxrZWQsIGJ1dCBvbmx5IGBCYCB3YXMgIVRSRUVTQU1FLCBzbyB0aGUgb3RoZXJzCiBkbyBub3QgYXBwZWFyLgogKwpAQCAtNDMxLDcgKzQzNCw3IEBACiB0aGVtc2VsdmVzLiAgVGhpcyByZXN1bHRzIGluCiArCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAgLi1BLS0tTS0tLU4tLS1PLS0tUAorCSAgLi1BLS0tTS0tLU4tLS1PLS0tUC0tLVEKIAkgLyAgICAgLyAgIC8gICAvICAgLwogCUkgICAgIEIgICAvICAgRCAgIC8KIAkgXCAgIC8gICAvICAgLyAgIC8KQEAgLTQ0MSw3ICs0NDQsNyBAQAogQ29tcGFyZSB0byAnXC0tZnVsbC1oaXN0b3J5JyB3aXRob3V0IHJld3JpdGluZyBhYm92ZS4gIE5vdGUgdGhhdCBgRWAKIHdhcyBwcnVuZWQgYXdheSBiZWNhdXNlIGl0IGlzIFRSRUVTQU1FLCBidXQgdGhlIHBhcmVudCBsaXN0IG9mIFAgd2FzCiByZXdyaXR0ZW4gdG8gY29udGFpbiBgRWAncyBwYXJlbnQgYElgLiAgVGhlIHNhbWUgaGFwcGVuZWQgZm9yIGBDYCBhbmQKLWBOYC4gIE5vdGUgYWxzbyB0aGF0IGBQYCB3YXMgaW5jbHVkZWQgZGVzcGl0ZSBiZWluZyBUUkVFU0FNRS4KK2BOYCwgYW5kIGBYYCwgYFlgIGFuZCBgUWAuCiAKIEluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBzZXR0aW5ncywgeW91IGNhbiBjaGFuZ2Ugd2hldGhlciBUUkVFU0FNRQogYWZmZWN0cyBpbmNsdXNpb246CkBAIC00NzEsOCArNDc0LDkgQEAKICogU2V0IGBDJ2AgdG8gYENgLgogKwogKiBSZXBsYWNlIGVhY2ggcGFyZW50IGBQYCBvZiBgQydgIHdpdGggaXRzIHNpbXBsaWZpY2F0aW9uIGBQJ2AuICBJbgotICB0aGUgcHJvY2VzcywgZHJvcCBwYXJlbnRzIHRoYXQgYXJlIGFuY2VzdG9ycyBvZiBvdGhlciBwYXJlbnRzLCBhbmQKLSAgcmVtb3ZlIGR1cGxpY2F0ZXMuCisgIHRoZSBwcm9jZXNzLCBkcm9wIHBhcmVudHMgdGhhdCBhcmUgYW5jZXN0b3JzIG9mIG90aGVyIHBhcmVudHMgb3IgdGhhdCBhcmUKKyAgcm9vdCBjb21taXRzIFRSRUVTQU1FIHRvIGFuIGVtcHR5IHRyZWUsIGFuZCByZW1vdmUgZHVwbGljYXRlcywgYnV0IHRha2UgY2FyZQorICB0byBuZXZlciBkcm9wIGFsbCBwYXJlbnRzIHRoYXQgd2UgYXJlIFRSRUVTQU1FIHRvLgogKwogKiBJZiBhZnRlciB0aGlzIHBhcmVudCByZXdyaXRpbmcsIGBDJ2AgaXMgYSByb290IG9yIG1lcmdlIGNvbW1pdCAoaGFzCiAgIHplcm8gb3IgPjEgcGFyZW50cyksIGEgYm91bmRhcnkgY29tbWl0LCBvciAhVFJFRVNBTUUsIGl0IHJlbWFpbnMuCkBAIC00OTAsNyArNDk0LDcgQEAKIAkgIGAtLS0tLS0tLS0nCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKwotTm90ZSB0aGUgbWFqb3IgZGlmZmVyZW5jZXMgaW4gYE5gIGFuZCBgUGAgb3ZlciAnLS1mdWxsLWhpc3RvcnknOgorTm90ZSB0aGUgbWFqb3IgZGlmZmVyZW5jZXMgaW4gYE5gLCBgUGAgYW5kIGBRYCBvdmVyICctLWZ1bGwtaGlzdG9yeSc6CiArCiAtLQogKiBgTmAncyBwYXJlbnQgbGlzdCBoYWQgYElgIHJlbW92ZWQsIGJlY2F1c2UgaXQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlCkBAIC00OTgsNiArNTAyLDEwIEBACiArCiAqIGBQYCdzIHBhcmVudCBsaXN0IHNpbWlsYXJseSBoYWQgYElgIHJlbW92ZWQuICBgUGAgd2FzIHRoZW4KICAgcmVtb3ZlZCBjb21wbGV0ZWx5LCBiZWNhdXNlIGl0IGhhZCBvbmUgcGFyZW50IGFuZCBpcyBUUkVFU0FNRS4KKysKKyogYFFgJ3MgcGFyZW50IGxpc3QgaGFkIGBZYCBzaW1wbGlmaWVkIHRvIGBYYC4gYFhgIHdhcyB0aGVuIHJlbW92ZWQsIGJlY2F1c2UgaXQKKyAgd2FzIGEgVFJFRVNBTUUgcm9vdC4gYFFgIHdhcyB0aGVuIHJlbW92ZWQgY29tcGxldGVseSwgYmVjYXVzZSBpdCBoYWQgb25lCisgIHBhcmVudCBhbmQgaXMgVFJFRVNBTUUuCiAtLQogCiBGaW5hbGx5LCB0aGVyZSBpcyBhIGZpZnRoIHNpbXBsaWZpY2F0aW9uIG1vZGUgYXZhaWxhYmxlOgpAQCAtNjE3LDYgKzYyNSwxMCBAQAogCVNob3cgbm8gcGFyZW50cyBiZWZvcmUgYWxsIG9mIGl0cyBjaGlsZHJlbiBhcmUgc2hvd24sIGJ1dAogCW90aGVyd2lzZSBzaG93IGNvbW1pdHMgaW4gdGhlIGNvbW1pdCB0aW1lc3RhbXAgb3JkZXIuCiAKKy0tYXV0aG9yLWRhdGUtb3JkZXI6OgorCVNob3cgbm8gcGFyZW50cyBiZWZvcmUgYWxsIG9mIGl0cyBjaGlsZHJlbiBhcmUgc2hvd24sIGJ1dAorCW90aGVyd2lzZSBzaG93IGNvbW1pdHMgaW4gdGhlIGF1dGhvciB0aW1lc3RhbXAgb3JkZXIuCisKIC0tdG9wby1vcmRlcjo6CiAJU2hvdyBubyBwYXJlbnRzIGJlZm9yZSBhbGwgb2YgaXRzIGNoaWxkcmVuIGFyZSBzaG93biwgYW5kCiAJYXZvaWQgc2hvd2luZyBjb21taXRzIG9uIG11bHRpcGxlIGxpbmVzIG9mIGhpc3RvcnkKQEAgLTgzNyw3ICs4NDksNCBAQAogLXQ6OgogCiAJU2hvdyB0aGUgdHJlZSBvYmplY3RzIGluIHRoZSBkaWZmIG91dHB1dC4gVGhpcyBpbXBsaWVzICctcicuCi0KLS1zOjoKLQlTdXBwcmVzcyBkaWZmIG91dHB1dC4KIGVuZGlmOjpnaXQtcmV2LWxpc3RbXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9yZXZpc2lvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9yZXZpc2lvbnMudHh0CmluZGV4IGQ0NzdiM2YuLjA5ODk2YTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcmV2aXNpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3JldmlzaW9ucy50eHQKQEAgLTU4LDYgKzU4LDkgQEAKIFdoaWxlIHRoZSByZWYgbmFtZSBlbmNvZGluZyBpcyB1bnNwZWNpZmllZCwgVVRGLTggaXMgcHJlZmVycmVkIGFzCiBzb21lIG91dHB1dCBwcm9jZXNzaW5nIG1heSBhc3N1bWUgcmVmIG5hbWVzIGluIFVURi04LgogCisnQCc6OgorICAnQCcgYWxvbmUgaXMgYSBzaG9ydGN1dCBmb3IgJ0hFQUQnLgorCiAnPHJlZm5hbWU+QFx7PGRhdGU+XH0nLCBlLmcuICdtYXN0ZXJAXHt5ZXN0ZXJkYXlcfScsICdIRUFEQFx7NSBtaW51dGVzIGFnb1x9Jzo6CiAgIEEgcmVmIGZvbGxvd2VkIGJ5IHRoZSBzdWZmaXggJ0AnIHdpdGggYSBkYXRlIHNwZWNpZmljYXRpb24KICAgZW5jbG9zZWQgaW4gYSBicmFjZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWJ1aWx0aW4udHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWJ1aWx0aW4udHh0CmluZGV4IDRhNDIyOGIuLmYzYzEzNTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1idWlsdGluLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktYnVpbHRpbi50eHQKQEAgLTM5LDcgKzM5LDcgQEAKIAlvbiBiYXJlIHJlcG9zaXRvcmllcy4KIAlUaGlzIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiBgUlVOX1NFVFVQYCBpcyBhbHNvIHNldC4KIAotLiBBZGQgYGJ1aWx0aW4tZm9vLm9gIHRvIGBCVUlMVElOX09CSlNgIGluIGBNYWtlZmlsZWAuCisuIEFkZCBgYnVpbHRpbi9mb28ub2AgdG8gYEJVSUxUSU5fT0JKU2AgaW4gYE1ha2VmaWxlYC4KIAogQWRkaXRpb25hbGx5LCBpZiBgZm9vYCBpcyBhIG5ldyBjb21tYW5kLCB0aGVyZSBhcmUgMyBtb3JlIHRoaW5ncyB0byBkbzoKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXBhcnNlLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXBhcnNlLW9wdGlvbnMudHh0CmluZGV4IDMyZGRjMWMuLjBiZTJiNTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1wYXJzZS1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcGFyc2Utb3B0aW9ucy50eHQKQEAgLTQxLDYgKzQxLDggQEAKICogQm9vbGVhbiBsb25nIG9wdGlvbnMgY2FuIGJlICduZWdhdGVkJyAob3IgJ3Vuc2V0JykgYnkgcHJlcGVuZGluZwogICBgbm8tYCwgZS5nLiBgLS1uby1hYmJyZXZgIGluc3RlYWQgb2YgYC0tYWJicmV2YC4gQ29udmVyc2VseSwKICAgb3B0aW9ucyB0aGF0IGJlZ2luIHdpdGggYG5vLWAgY2FuIGJlICduZWdhdGVkJyBieSByZW1vdmluZyBpdC4KKyAgT3RoZXIgbG9uZyBvcHRpb25zIGNhbiBiZSB1bnNldCAoZS5nLiwgc2V0IHN0cmluZyB0byBOVUxMLCBzZXQKKyAgaW50ZWdlciB0byAwKSBieSBwcmVwZW5kaW5nIGBuby1gLgogCiAqIE9wdGlvbnMgYW5kIG5vbi1vcHRpb24gYXJndW1lbnRzIGNhbiBjbGVhcmx5IGJlIHNlcGFyYXRlZCB1c2luZyB0aGUgYC0tYAogICBvcHRpb24sIGUuZy4gYC1hIC1iIC0tb3B0aW9uIC0tIC0tdGhpcy1pcy1hLWZpbGVgIGluZGljYXRlcyB0aGF0CkBAIC0xNzQsNiArMTc2LDEwIEBACiAJSW50cm9kdWNlIGFuIG9wdGlvbiB3aXRoIGRhdGUgYXJndW1lbnQsIHNlZSBgYXBwcm94aWRhdGUoKWAuCiAJVGhlIHRpbWVzdGFtcCBpcyBwdXQgaW50byBgaW50X3ZhcmAuCiAKK2BPUFRfRVhQSVJZX0RBVEUoc2hvcnQsIGxvbmcsICZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlJbnRyb2R1Y2UgYW4gb3B0aW9uIHdpdGggZXhwaXJ5IGRhdGUgYXJndW1lbnQsIHNlZSBgcGFyc2VfZXhwaXJ5X2RhdGUoKWAuCisJVGhlIHRpbWVzdGFtcCBpcyBwdXQgaW50byBgaW50X3ZhcmAuCisKIGBPUFRfQ0FMTEJBQ0soc2hvcnQsIGxvbmcsICZ2YXIsIGFyZ19zdHIsIGRlc2NyaXB0aW9uLCBmdW5jX3B0cilgOjoKIAlJbnRyb2R1Y2UgYW4gb3B0aW9uIHdpdGggYXJndW1lbnQuCiAJVGhlIGFyZ3VtZW50IHdpbGwgYmUgZmVkIGludG8gdGhlIGZ1bmN0aW9uIGdpdmVuIGJ5IGBmdW5jX3B0cmAKQEAgLTI2OSwxMCArMjc1LDEwIEBACiAtLS0tLS0tLQogCiBTZWUgYHRlc3QtcGFyc2Utb3B0aW9ucy5jYCBhbmQKLWBidWlsdGluLWFkZC5jYCwKLWBidWlsdGluLWNsb25lLmNgLAotYGJ1aWx0aW4tY29tbWl0LmNgLAotYGJ1aWx0aW4tZmV0Y2guY2AsCi1gYnVpbHRpbi1mc2NrLmNgLAotYGJ1aWx0aW4tcm0uY2AKK2BidWlsdGluL2FkZC5jYCwKK2BidWlsdGluL2Nsb25lLmNgLAorYGJ1aWx0aW4vY29tbWl0LmNgLAorYGJ1aWx0aW4vZmV0Y2guY2AsCitgYnVpbHRpbi9mc2NrLmNgLAorYGJ1aWx0aW4vcm0uY2AKIGZvciByZWFsLXdvcmxkIGV4YW1wbGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvaW5kZXgtZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2luZGV4LWZvcm1hdC50eHQKaW5kZXggMDgxMDI1MS4uZjM1MmE5YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvaW5kZXgtZm9ybWF0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9pbmRleC1mb3JtYXQudHh0CkBAIC0xNzUsNyArMTc1LDcgQEAKIAogICBBIGNvbmZsaWN0IGlzIHJlcHJlc2VudGVkIGluIHRoZSBpbmRleCBhcyBhIHNldCBvZiBoaWdoZXIgc3RhZ2UgZW50cmllcy4KICAgV2hlbiBhIGNvbmZsaWN0IGlzIHJlc29sdmVkIChlLmcuIHdpdGggImdpdCBhZGQgcGF0aCIpLCB0aGVzZSBoaWdoZXIKLSAgc3RhZ2UgZW50cmllcyB3aWxsIGJlIHJlbW92ZWQgYW5kIGEgc3RhZ2UtMCBlbnRyeSB3aXRoIHByb3BlciByZXNvbHV0b24KKyAgc3RhZ2UgZW50cmllcyB3aWxsIGJlIHJlbW92ZWQgYW5kIGEgc3RhZ2UtMCBlbnRyeSB3aXRoIHByb3BlciByZXNvbHV0aW9uCiAgIGlzIGFkZGVkLgogCiAgIFdoZW4gdGhlc2UgaGlnaGVyIHN0YWdlIGVudHJpZXMgYXJlIHJlbW92ZWQsIHRoZXkgYXJlIHNhdmVkIGluIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1wcm90b2NvbC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLXByb3RvY29sLnR4dAppbmRleCBmMWE1MWVkLi5iODk4ZTk3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLXByb3RvY29sLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLXByb3RvY29sLnR4dApAQCAtMjI4LDggKzIyOCw3IEBACiBUaGUgY2xpZW50IE1VU1Qgd3JpdGUgYWxsIG9iai1pZHMgd2hpY2ggaXQgb25seSBoYXMgc2hhbGxvdyBjb3BpZXMKIG9mIChtZWFuaW5nIHRoYXQgaXQgZG9lcyBub3QgaGF2ZSB0aGUgcGFyZW50cyBvZiBhIGNvbW1pdCkgYXMKICdzaGFsbG93JyBsaW5lcyBzbyB0aGF0IHRoZSBzZXJ2ZXIgaXMgYXdhcmUgb2YgdGhlIGxpbWl0YXRpb25zIG9mCi10aGUgY2xpZW50J3MgaGlzdG9yeS4gQ2xpZW50cyBNVVNUIE5PVCBtZW50aW9uIGFuIG9iai1pZCB3aGljaAotaXQgZG9lcyBub3Qga25vdyBleGlzdHMgb24gdGhlIHNlcnZlci4KK3RoZSBjbGllbnQncyBoaXN0b3J5LgogCiBUaGUgY2xpZW50IG5vdyBzZW5kcyB0aGUgbWF4aW11bSBjb21taXQgaGlzdG9yeSBkZXB0aCBpdCB3YW50cyBmb3IKIHRoaXMgdHJhbnNhY3Rpb24sIHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgY29tbWl0cyBpdCB3YW50cyBmcm9tIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmFjeS1naXQudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmFjeS1naXQudHh0CmluZGV4IDZkYzgyY2EuLjI0MmEwNDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3JhY3ktZ2l0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yYWN5LWdpdC50eHQKQEAgLTQ2LDcgKzQ2LDcgQEAKIG9uLWRpc2sgdGltZXN0YW1wcywgcmVzdWx0aW5nIGluIG1lYW5pbmdsZXNzIGNoYW5nZXMgd2hlbiBhbgogaW5vZGUgaXMgZXZpY3RlZCBmcm9tIHRoZSBpbm9kZSBjYWNoZS4gIFNlZSBjb21taXQgOGNlMTNiMAogb2YgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RnbHgvaGlzdG9yeS5naXQKLShbUEFUQ0hdIFN5bmMgaW4gY29yZSB0aW1lIGdyYW51YWxpdHkgd2l0aCBmaWxlc3lzdGVtcywKKyhbUEFUQ0hdIFN5bmMgaW4gY29yZSB0aW1lIGdyYW51bGFyaXR5IHdpdGggZmlsZXN5c3RlbXMsCiAyMDA1LTAxLTA0KS4KIAogUmFjeSBHaXQKQEAgLTEzNSw5ICsxMzUsOSBAQAogICAkIGdpdCBscy1maWxlcyB8IGdpdCB1cGRhdGUtaW5kZXggLS1zdGRpbgogICAkIHRvdWNoIC1yIC5kYXRlc3RhbXAgLmdpdC9pbmRleAogCi1UaGlzIHdpbGwgbWFrZSBhbGwgaW5kZXggZW50cmllcyByYWNpbHkgY2xlYW4uICBUaGUgbGludXgtMi42Ci1wcm9qZWN0LCBmb3IgZXhhbXBsZSwgdGhlcmUgYXJlIG92ZXIgMjAsMDAwIGZpbGVzIGluIHRoZSB3b3JraW5nCi10cmVlLiAgT24gbXkgQXRobG9uIDY0IFgyIDM4MDArLCBhZnRlciB0aGUgYWJvdmU6CitUaGlzIHdpbGwgbWFrZSBhbGwgaW5kZXggZW50cmllcyByYWNpbHkgY2xlYW4uICBUaGUgbGludXggcHJvamVjdCwgZm9yCitleGFtcGxlLCB0aGVyZSBhcmUgb3ZlciAyMCwwMDAgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZS4gIE9uIG15CitBdGhsb24gNjQgWDIgMzgwMCssIGFmdGVyIHRoZSBhYm92ZToKIAogICAkIC91c3IvYmluL3RpbWUgZ2l0IGRpZmYtZmlsZXMKICAgMS42OHVzZXIgMC41NHN5c3RlbSAwOjAyLjIyZWxhcHNlZCAxMDAlQ1BVICgwYXZndGV4dCswYXZnZGF0YSAwbWF4cmVzaWRlbnQpawpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91cmxzLnR4dCBiL0RvY3VtZW50YXRpb24vdXJscy50eHQKaW5kZXggM2NhMTIyZi4uOWNjYjI0NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91cmxzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3VybHMudHh0CkBAIC0xMSw2ICsxMSw5IEBACiBhbmQgcHVzaGluZywgYnV0IHRoZXNlIGFyZSBpbmVmZmljaWVudCBhbmQgZGVwcmVjYXRlZDsgZG8gbm90IHVzZQogdGhlbSkuCiAKK1RoZSBuYXRpdmUgdHJhbnNwb3J0IChpLmUuIGdpdDovLyBVUkwpIGRvZXMgbm8gYXV0aGVudGljYXRpb24gYW5kCitzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24gb24gdW5zZWN1cmVkIG5ldHdvcmtzLgorCiBUaGUgZm9sbG93aW5nIHN5bnRheGVzIG1heSBiZSB1c2VkIHdpdGggdGhlbToKIAogLSBzc2g6Ly97c3RhcnRzYn11c2VyQHtlbmRzYn1ob3N0Lnh6e3N0YXJ0c2J9OnBvcnR7ZW5kc2J9L3BhdGgvdG8vcmVwby5naXQvCkBAIC0yMyw2ICsyNiwxMiBAQAogCiAtIHtzdGFydHNifXVzZXJAe2VuZHNifWhvc3QueHo6cGF0aC90by9yZXBvLmdpdC8KIAorVGhpcyBzeW50YXggaXMgb25seSByZWNvZ25pemVkIGlmIHRoZXJlIGFyZSBubyBzbGFzaGVzIGJlZm9yZSB0aGUKK2ZpcnN0IGNvbG9uLiBUaGlzIGhlbHBzIGRpZmZlcmVudGlhdGUgYSBsb2NhbCBwYXRoIHRoYXQgY29udGFpbnMgYQorY29sb24uIEZvciBleGFtcGxlIHRoZSBsb2NhbCBwYXRoIGBmb286YmFyYCBjb3VsZCBiZSBzcGVjaWZpZWQgYXMgYW4KK2Fic29sdXRlIHBhdGggb3IgYC4vZm9vOmJhcmAgdG8gYXZvaWQgYmVpbmcgbWlzaW50ZXJwcmV0ZWQgYXMgYW4gc3NoCit1cmwuCisKIFRoZSBzc2ggYW5kIGdpdCBwcm90b2NvbHMgYWRkaXRpb25hbGx5IHN1cHBvcnQgfnVzZXJuYW1lIGV4cGFuc2lvbjoKIAogLSBzc2g6Ly97c3RhcnRzYn11c2VyQHtlbmRzYn1ob3N0Lnh6e3N0YXJ0c2J9OnBvcnR7ZW5kc2J9L357c3RhcnRzYn11c2Vye2VuZHNifS9wYXRoL3RvL3JlcG8uZ2l0LwpAQCAtMzMsNyArNDIsNyBAQAogc3ludGF4ZXMgbWF5IGJlIHVzZWQ6CiAKIC0gL3BhdGgvdG8vcmVwby5naXQvCi0tIGZpbGU6Ly8vcGF0aC90by9yZXBvLmdpdC8KKy0gXGZpbGU6Ly8vcGF0aC90by9yZXBvLmdpdC8KIAogaWZuZGVmOjpnaXQtY2xvbmVbXQogVGhlc2UgdHdvIHN5bnRheGVzIGFyZSBtb3N0bHkgZXF1aXZhbGVudCwgZXhjZXB0IHdoZW4gY2xvbmluZywgd2hlbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2VyLW1hbnVhbC50eHQgYi9Eb2N1bWVudGF0aW9uL3VzZXItbWFudWFsLnR4dAppbmRleCBlODMxY2MyLi5mZTcyM2U0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzZXItbWFudWFsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3VzZXItbWFudWFsLnR4dApAQCAtNTcsMTcgKzU3LDE3IEBACiBwcm9qZWN0IGluIG1pbmQsIGhlcmUgYXJlIHNvbWUgaW50ZXJlc3RpbmcgZXhhbXBsZXM6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSMgR2l0IGl0c2VsZiAoYXBwcm94LiAxME1CIGRvd25sb2FkKToKKwkjIEdpdCBpdHNlbGYgKGFwcHJveC4gNDBNQiBkb3dubG9hZCk6CiAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0Ci0JIyB0aGUgTGludXgga2VybmVsIChhcHByb3guIDE1ME1CIGRvd25sb2FkKToKLSQgZ2l0IGNsb25lIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90b3J2YWxkcy9saW51eC0yLjYuZ2l0CisJIyB0aGUgTGludXgga2VybmVsIChhcHByb3guIDY0ME1CIGRvd25sb2FkKToKKyQgZ2l0IGNsb25lIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90b3J2YWxkcy9saW51eC5naXQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGUgaW5pdGlhbCBjbG9uZSBtYXkgYmUgdGltZS1jb25zdW1pbmcgZm9yIGEgbGFyZ2UgcHJvamVjdCwgYnV0IHlvdQogd2lsbCBvbmx5IG5lZWQgdG8gY2xvbmUgb25jZS4KIAotVGhlIGNsb25lIGNvbW1hbmQgY3JlYXRlcyBhIG5ldyBkaXJlY3RvcnkgbmFtZWQgYWZ0ZXIgdGhlIHByb2plY3QgKGBnaXRgCi1vciBgbGludXgtMi42YCBpbiB0aGUgZXhhbXBsZXMgYWJvdmUpLiAgQWZ0ZXIgeW91IGNkIGludG8gdGhpcworVGhlIGNsb25lIGNvbW1hbmQgY3JlYXRlcyBhIG5ldyBkaXJlY3RvcnkgbmFtZWQgYWZ0ZXIgdGhlIHByb2plY3QKKyhgZ2l0YCBvciBgbGludXhgIGluIHRoZSBleGFtcGxlcyBhYm92ZSkuICBBZnRlciB5b3UgY2QgaW50byB0aGlzCiBkaXJlY3RvcnksIHlvdSB3aWxsIHNlZSB0aGF0IGl0IGNvbnRhaW5zIGEgY29weSBvZiB0aGUgcHJvamVjdCBmaWxlcywKIGNhbGxlZCB0aGUgPDxkZWZfd29ya2luZ190cmVlLHdvcmtpbmcgdHJlZT4+LCB0b2dldGhlciB3aXRoIGEgc3BlY2lhbAogdG9wLWxldmVsIGRpcmVjdG9yeSBuYW1lZCBgLmdpdGAsIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24KQEAgLTQzMSwxOSArNDMxLDI1IEBACiBjbG9uZWQgZnJvbSwgdXNpbmcgbGlua2dpdDpnaXQtcmVtb3RlWzFdOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0kIGdpdCByZW1vdGUgYWRkIGxpbnV4LW5mcyBnaXQ6Ly9saW51eC1uZnMub3JnL3B1Yi9uZnMtMi42LmdpdAotJCBnaXQgZmV0Y2ggbGludXgtbmZzCi0qIHJlZnMvcmVtb3Rlcy9saW51eC1uZnMvbWFzdGVyOiBzdG9yaW5nIGJyYW5jaCAnbWFzdGVyJyAuLi4KLSAgY29tbWl0OiBiZjgxYjQ2CiskIGdpdCByZW1vdGUgYWRkIHN0YWdpbmcgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvLi4uL2dyZWdraC9zdGFnaW5nLmdpdAorJCBnaXQgZmV0Y2ggc3RhZ2luZworLi4uCitGcm9tIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9ncmVna2gvc3RhZ2luZworICogW25ldyBicmFuY2hdICAgICAgbWFzdGVyICAgICAtPiBzdGFnaW5nL21hc3RlcgorICogW25ldyBicmFuY2hdICAgICAgc3RhZ2luZy1saW51cyAtPiBzdGFnaW5nL3N0YWdpbmctbGludXMKKyAqIFtuZXcgYnJhbmNoXSAgICAgIHN0YWdpbmctbmV4dCAtPiBzdGFnaW5nL3N0YWdpbmctbmV4dAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBOZXcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIHdpbGwgYmUgc3RvcmVkIHVuZGVyIHRoZSBzaG9ydGhhbmQgbmFtZQotdGhhdCB5b3UgZ2F2ZSBgZ2l0IHJlbW90ZSBhZGRgLCBpbiB0aGlzIGNhc2UgYGxpbnV4LW5mc2A6Cit0aGF0IHlvdSBnYXZlIGBnaXQgcmVtb3RlIGFkZGAsIGluIHRoaXMgY2FzZSBgc3RhZ2luZ2A6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICQgZ2l0IGJyYW5jaCAtcgotbGludXgtbmZzL21hc3Rlcgotb3JpZ2luL21hc3RlcgorICBvcmlnaW4vSEVBRCAtPiBvcmlnaW4vbWFzdGVyCisgIG9yaWdpbi9tYXN0ZXIKKyAgc3RhZ2luZy9tYXN0ZXIKKyAgc3RhZ2luZy9zdGFnaW5nLWxpbnVzCisgIHN0YWdpbmcvc3RhZ2luZy1uZXh0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIElmIHlvdSBydW4gYGdpdCBmZXRjaCA8cmVtb3RlPmAgbGF0ZXIsIHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMKQEAgLTQ1NSw5ICs0NjEsOSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogJCBjYXQgLmdpdC9jb25maWcKIC4uLgotW3JlbW90ZSAibGludXgtbmZzIl0KLQl1cmwgPSBnaXQ6Ly9saW51eC1uZnMub3JnL3B1Yi9uZnMtMi42LmdpdAotCWZldGNoID0gK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbGludXgtbmZzLyoKK1tyZW1vdGUgInN0YWdpbmciXQorCXVybCA9IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9ncmVna2gvc3RhZ2luZy5naXQKKwlmZXRjaCA9ICtyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL3N0YWdpbmcvKgogLi4uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTE4MzUsNyArMTg0MSw3IEBACiByZXNvbHV0aW9uLCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IGNvbW1pdCwganVzdCBydW4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCBnaXQgYW0gLS1yZXNvbHZlZAorJCBnaXQgYW0gLS1jb250aW51ZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBhbmQgR2l0IHdpbGwgY3JlYXRlIHRoZSBjb21taXQgZm9yIHlvdSBhbmQgY29udGludWUgYXBwbHlpbmcgdGhlCkBAIC0yMTU2LDcgKzIxNjIsNyBAQAogdHJlZToKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LTIuNi5naXQgd29yaworJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LmdpdCB3b3JrCiAkIGNkIHdvcmsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMjE5OCw3ICsyMjA0LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICQgY2F0ID4+IC5naXQvY29uZmlnIDw8RU9GCiBbcmVtb3RlICJteXRyZWUiXQotCXVybCA9ICBtYXN0ZXIua2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FlZ2wvbGludXgtMi42LmdpdAorCXVybCA9ICBtYXN0ZXIua2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FlZ2wvbGludXguZ2l0CiAJcHVzaCA9IHJlbGVhc2UKIAlwdXNoID0gdGVzdAogRU9GCkBAIC00MjU2LDE1ICs0MjYyLDE2IEBACiBOb3dhZGF5cywgYGdpdCBsb2dgIGlzIGEgYnVpbHRpbiwgd2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBfY29udGFpbmVkXyBpbiB0aGUKIGNvbW1hbmQgYGdpdGAuICBUaGUgc291cmNlIHNpZGUgb2YgYSBidWlsdGluIGlzCiAKLS0gYSBmdW5jdGlvbiBjYWxsZWQgYGNtZF88YmxhPmAsIHR5cGljYWxseSBkZWZpbmVkIGluIGBidWlsdGluLTxibGE+LmNgLAotICBhbmQgZGVjbGFyZWQgaW4gYGJ1aWx0aW4uaGAsCistIGEgZnVuY3Rpb24gY2FsbGVkIGBjbWRfPGJsYT5gLCB0eXBpY2FsbHkgZGVmaW5lZCBpbiBgYnVpbHRpbi88YmxhLmM+YAorICAobm90ZSB0aGF0IG9sZGVyIHZlcnNpb25zIG9mIEdpdCB1c2VkIHRvIGhhdmUgaXQgaW4gYGJ1aWx0aW4tPGJsYT4uY2AKKyAgaW5zdGVhZCksIGFuZCBkZWNsYXJlZCBpbiBgYnVpbHRpbi5oYC4KIAogLSBhbiBlbnRyeSBpbiB0aGUgYGNvbW1hbmRzW11gIGFycmF5IGluIGBnaXQuY2AsIGFuZAogCiAtIGFuIGVudHJ5IGluIGBCVUlMVElOX09CSkVDVFNgIGluIHRoZSBgTWFrZWZpbGVgLgogCiBTb21ldGltZXMsIG1vcmUgdGhhbiBvbmUgYnVpbHRpbiBpcyBjb250YWluZWQgaW4gb25lIHNvdXJjZSBmaWxlLiAgRm9yCi1leGFtcGxlLCBgY21kX3doYXRjaGFuZ2VkKClgIGFuZCBgY21kX2xvZygpYCBib3RoIHJlc2lkZSBpbiBgYnVpbHRpbi1sb2cuY2AsCitleGFtcGxlLCBgY21kX3doYXRjaGFuZ2VkKClgIGFuZCBgY21kX2xvZygpYCBib3RoIHJlc2lkZSBpbiBgYnVpbHRpbi9sb2cuY2AsCiBzaW5jZSB0aGV5IHNoYXJlIHF1aXRlIGEgYml0IG9mIGNvZGUuICBJbiB0aGF0IGNhc2UsIHRoZSBjb21tYW5kcyB3aGljaCBhcmUKIF9ub3RfIG5hbWVkIGxpa2UgdGhlIGAuY2AgZmlsZSBpbiB3aGljaCB0aGV5IGxpdmUgaGF2ZSB0byBiZSBsaXN0ZWQgaW4KIGBCVUlMVF9JTlNgIGluIHRoZSBgTWFrZWZpbGVgLgpAQCAtNDI4NywxMCArNDI5NCwxMCBAQAogLSBpcyBwbHVtYmluZywgYW5kCiAKIC0gd2FzIGFyb3VuZCBldmVuIGluIHRoZSBpbml0aWFsIGNvbW1pdCAoaXQgbGl0ZXJhbGx5IHdlbnQgb25seSB0aHJvdWdoCi0gIHNvbWUgMjAgcmV2aXNpb25zIGFzIGBjYXQtZmlsZS5jYCwgd2FzIHJlbmFtZWQgdG8gYGJ1aWx0aW4tY2F0LWZpbGUuY2AKKyAgc29tZSAyMCByZXZpc2lvbnMgYXMgYGNhdC1maWxlLmNgLCB3YXMgcmVuYW1lZCB0byBgYnVpbHRpbi9jYXQtZmlsZS5jYAogICB3aGVuIG1hZGUgYSBidWlsdGluLCBhbmQgdGhlbiBzYXcgbGVzcyB0aGFuIDEwIHZlcnNpb25zKS4KIAotU28sIGxvb2sgaW50byBgYnVpbHRpbi1jYXQtZmlsZS5jYCwgc2VhcmNoIGZvciBgY21kX2NhdF9maWxlKClgIGFuZCBsb29rIHdoYXQKK1NvLCBsb29rIGludG8gYGJ1aWx0aW4vY2F0LWZpbGUuY2AsIHNlYXJjaCBmb3IgYGNtZF9jYXRfZmlsZSgpYCBhbmQgbG9vayB3aGF0CiBpdCBkb2VzLgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQzNjYsNyArNDM3Myw3IEBACiBidWlsdGluOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0kIGdpdCBsb2cgLS1uby1tZXJnZXMgLS1kaWZmLWZpbHRlcj1BIGJ1aWx0aW4tKi5jCiskIGdpdCBsb2cgLS1uby1tZXJnZXMgLS1kaWZmLWZpbHRlcj1BIGJ1aWx0aW4vKi5jCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFlvdSBzZWUsIEdpdCBpcyBhY3R1YWxseSB0aGUgYmVzdCB0b29sIHRvIGZpbmQgb3V0IGFib3V0IHRoZSBzb3VyY2Ugb2YgR2l0CkBAIC00NjY4LDUgKzQ2NzUsNSBAQAogQWx0ZXJuYXRlcywgY2xvbmUgLXJlZmVyZW5jZSwgZXRjLgogCiBNb3JlIG9uIHJlY292ZXJ5IGZyb20gcmVwb3NpdG9yeSBjb3JydXB0aW9uLiAgU2VlOgotCWh0dHA6Ly9tYXJjLnRoZWFpbXNncm91cC5jb20vP2w9Z2l0Jm09MTE3MjYzODY0ODIwNzk5Jnc9MgotCWh0dHA6Ly9tYXJjLnRoZWFpbXNncm91cC5jb20vP2w9Z2l0Jm09MTE3MTQ3ODU1NTAzNzk4Jnc9MgorCWh0dHA6Ly9tYXJjLmluZm8vP2w9Z2l0Jm09MTE3MjYzODY0ODIwNzk5Jnc9MgorCWh0dHA6Ly9tYXJjLmluZm8vP2w9Z2l0Jm09MTE3MTQ3ODU1NTAzNzk4Jnc9MgpkaWZmIC0tZ2l0IGEvR0lULVZFUlNJT04tR0VOIGIvR0lULVZFUlNJT04tR0VOCmluZGV4IGFhODdkYmYuLmI0ZDRlNTAgMTAwNzU1Ci0tLSBhL0dJVC1WRVJTSU9OLUdFTgorKysgYi9HSVQtVkVSU0lPTi1HRU4KQEAgLTEsNyArMSw3IEBACiAjIS9iaW4vc2gKIAogR1ZGPUdJVC1WRVJTSU9OLUZJTEUKLURFRl9WRVI9djEuOC4zLXJjMworREVGX1ZFUj12MS44LjMuR0lUCiAKIExGPScKICcKQEAgLTExLDcgKzExLDcgQEAKIGlmIHRlc3QgLWYgdmVyc2lvbgogdGhlbgogCVZOPSQoY2F0IHZlcnNpb24pIHx8IFZOPSIkREVGX1ZFUiIKLWVsaWYgdGVzdCAtZCAuZ2l0IC1vIC1mIC5naXQgJiYKK2VsaWYgdGVzdCAtZCAke0dJVF9ESVI6LS5naXR9IC1vIC1mIC5naXQgJiYKIAlWTj0kKGdpdCBkZXNjcmliZSAtLW1hdGNoICJ2WzAtOV0qIiAtLWFiYnJldj03IEhFQUQgMj4vZGV2L251bGwpICYmCiAJY2FzZSAiJFZOIiBpbgogCSokTEYqKSAoZXhpdCAxKSA7OwpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCAwZjkzMWEyLi5lZjQ0MmViIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtNjksNiArNjksOSBAQAogIyBEZWZpbmUgTk9fTVNHRk1UX0VYVEVOREVEX09QVElPTlMgaWYgeW91ciBpbXBsZW1lbnRhdGlvbiBvZiBtc2dmbXQKICMgZG9lc24ndCBzdXBwb3J0IEdOVSBleHRlbnNpb25zIGxpa2UgLS1jaGVjayBhbmQgLS1zdGF0aXN0aWNzCiAjCisjIERlZmluZSBORUVEU19DTElQUEVEX1dSSVRFIGlmIHlvdXIgd3JpdGUoMikgY2Fubm90IHdyaXRlIG1vcmUgdGhhbgorIyBJTlRfTUFYIGJ5dGVzIGF0IG9uY2UgKGUuZy4gTWFjT1MgWCkuCisjCiAjIERlZmluZSBIQVZFX1BBVEhTX0ggaWYgeW91IGhhdmUgcGF0aHMuaCBhbmQgd2FudCB0byB1c2UgdGhlIGRlZmF1bHQgUEFUSAogIyBpdCBzcGVjaWZpZXMuCiAjCkBAIC0xMDYsNyArMTA5LDcgQEAKICMgRGVmaW5lIE5PX0ZOTUFUQ0hfQ0FTRUZPTEQgaWYgeW91ciBmbm1hdGNoIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSB0aGUKICMgRk5NX0NBU0VGT0xEIEdOVSBleHRlbnNpb24uCiAjCi0jIERlZmluZSBVU0VfV0lMRE1BVENIIGlmIHlvdSB3YW50IHRvIHVzZSBHaXQncyB3aWxkbWF0Y2gKKyMgRGVmaW5lIE5PX1dJTERNQVRDSCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gdXNlIEdpdCdzIHdpbGRtYXRjaAogIyBpbXBsZW1lbnRhdGlvbiBhcyBmbm1hdGNoCiAjCiAjIERlZmluZSBOT19HRUNPU19JTl9QV0VOVCBpZiB5b3UgZG9uJ3QgaGF2ZSBwd19nZWNvcyBpbiBzdHJ1Y3QgcGFzc3dkCkBAIC0xMzcsNiArMTQwLDEwIEBACiAjIHNwZWNpZnkgeW91ciBvd24gKG9yIERhcndpblBvcnQncykgaW5jbHVkZSBkaXJlY3RvcmllcyBhbmQKICMgbGlicmFyeSBkaXJlY3RvcmllcyBieSBkZWZpbmluZyBDRkxBR1MgYW5kIExERkxBR1MgYXBwcm9wcmlhdGVseS4KICMKKyMgRGVmaW5lIE5PX0FQUExFX0NPTU1PTl9DUllQVE8gaWYgeW91IGFyZSBidWlsZGluZyBvbiBEYXJ3aW4vTWFjIE9TIFgKKyMgYW5kIGRvIG5vdCB3YW50IHRvIHVzZSBBcHBsZSdzIENvbW1vbkNyeXB0byBsaWJyYXJ5LiAgVGhpcyBhbGxvd3MgeW91CisjIHRvIHByb3ZpZGUgeW91ciBvd24gT3BlblNTTCBsaWJyYXJ5LCBmb3IgZXhhbXBsZSBmcm9tIE1hY1BvcnRzLgorIwogIyBEZWZpbmUgQkxLX1NIQTEgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gbWFrZSB1c2Ugb2YgdGhlIGJ1bmRsZWQKICMgb3B0aW1pemVkIEMgU0hBMSByb3V0aW5lLgogIwpAQCAtMjkwLDEwICsyOTcsNiBAQAogIwogIyBEZWZpbmUgTk9fUkVHRVggaWYgeW91IGhhdmUgbm8gb3IgaW5mZXJpb3IgcmVnZXggc3VwcG9ydCBpbiB5b3VyIEMgbGlicmFyeS4KICMKLSMgRGVmaW5lIENZR1dJTl9WMTVfV0lOMzJBUEkgaWYgeW91IGFyZSB1c2luZyBDeWd3aW4gdjEuNy54IGJ1dCBhcmUgbm90Ci0jIHVzaW5nIHRoZSBjdXJyZW50IHczMmFwaSBwYWNrYWdlcy4gVGhlIHJlY29tbWVuZGVkIGFwcHJvYWNoLCBob3dldmVyLAotIyBpcyB0byB1cGRhdGUgeW91ciBpbnN0YWxsYXRpb24gaWYgY29tcGlsYXRpb24gZXJyb3JzIG9jY3VyLgotIwogIyBEZWZpbmUgSEFWRV9ERVZfVFRZIGlmIHlvdXIgc3lzdGVtIGNhbiBvcGVuIC9kZXYvdHR5IHRvIGludGVyYWN0IHdpdGggdGhlCiAjIHVzZXIuCiAjCkBAIC00NjAsNiArNDYzLDcgQEAKIFNDUklQVF9TSCArPSBnaXQtcHVsbC5zaAogU0NSSVBUX1NIICs9IGdpdC1xdWlsdGltcG9ydC5zaAogU0NSSVBUX1NIICs9IGdpdC1yZWJhc2Uuc2gKK1NDUklQVF9TSCArPSBnaXQtcmVtb3RlLXRlc3RnaXQuc2gKIFNDUklQVF9TSCArPSBnaXQtcmVwYWNrLnNoCiBTQ1JJUFRfU0ggKz0gZ2l0LXJlcXVlc3QtcHVsbC5zaAogU0NSSVBUX1NIICs9IGdpdC1zdGFzaC5zaApAQCAtNDg3LDExICs0OTEsMTggQEAKIFNDUklQVF9QWVRIT04gKz0gZ2l0LXJlbW90ZS10ZXN0cHkucHkKIFNDUklQVF9QWVRIT04gKz0gZ2l0LXA0LnB5CiAKK05PX0lOU1RBTEwgKz0gZ2l0LXJlbW90ZS10ZXN0Z2l0CitOT19JTlNUQUxMICs9IGdpdC1yZW1vdGUtdGVzdHB5CisKICMgR2VuZXJhdGVkIGZpbGVzIGZvciBzY3JpcHRzCiBTQ1JJUFRfU0hfR0VOID0gJChwYXRzdWJzdCAlLnNoLCUsJChTQ1JJUFRfU0gpKQogU0NSSVBUX1BFUkxfR0VOID0gJChwYXRzdWJzdCAlLnBlcmwsJSwkKFNDUklQVF9QRVJMKSkKIFNDUklQVF9QWVRIT05fR0VOID0gJChwYXRzdWJzdCAlLnB5LCUsJChTQ1JJUFRfUFlUSE9OKSkKIAorU0NSSVBUX1NIX0lOUyA9ICQoZmlsdGVyLW91dCAkKE5PX0lOU1RBTEwpLCQoU0NSSVBUX1NIX0dFTikpCitTQ1JJUFRfUEVSTF9JTlMgPSAkKGZpbHRlci1vdXQgJChOT19JTlNUQUxMKSwkKFNDUklQVF9QRVJMX0dFTikpCitTQ1JJUFRfUFlUSE9OX0lOUyA9ICQoZmlsdGVyLW91dCAkKE5PX0lOU1RBTEwpLCQoU0NSSVBUX1BZVEhPTl9HRU4pKQorCiAjIEluZGl2aWR1YWwgcnVsZXMgdG8gYWxsb3cgZS5nLgogIyAibWFrZSAtQyAuLi8uLiBTQ1JJUFRfUEVSTD1jb250cmliL2Zvby9iYXIucGVybCBidWlsZC1wZXJsLXNjcmlwdCIKICMgZnJvbSBzdWJkaXJlY3RvcmllcyBsaWtlIGNvbnRyaWIvKi8KQEAgLTUwMSwxMiArNTEyLDEyIEBACiBidWlsZC1weXRob24tc2NyaXB0OiAkKFNDUklQVF9QWVRIT05fR0VOKQogCiAuUEhPTlk6IGluc3RhbGwtcGVybC1zY3JpcHQgaW5zdGFsbC1zaC1zY3JpcHQgaW5zdGFsbC1weXRob24tc2NyaXB0Ci1pbnN0YWxsLXNoLXNjcmlwdDogJChTQ1JJUFRfU0hfR0VOKQotCSQoSU5TVEFMTCkgJChTQ1JJUFRfU0hfR0VOKSAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScKLWluc3RhbGwtcGVybC1zY3JpcHQ6ICQoU0NSSVBUX1BFUkxfR0VOKQotCSQoSU5TVEFMTCkgJChTQ1JJUFRfUEVSTF9HRU4pICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJwotaW5zdGFsbC1weXRob24tc2NyaXB0OiAkKFNDUklQVF9QWVRIT05fR0VOKQotCSQoSU5TVEFMTCkgJChTQ1JJUFRfUFlUSE9OX0dFTikgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCitpbnN0YWxsLXNoLXNjcmlwdDogJChTQ1JJUFRfU0hfSU5TKQorCSQoSU5TVEFMTCkgJF4gJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCitpbnN0YWxsLXBlcmwtc2NyaXB0OiAkKFNDUklQVF9QRVJMX0lOUykKKwkkKElOU1RBTEwpICReICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJworaW5zdGFsbC1weXRob24tc2NyaXB0OiAkKFNDUklQVF9QWVRIT05fSU5TKQorCSQoSU5TVEFMTCkgJF4gJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCiAKIC5QSE9OWTogY2xlYW4tcGVybC1zY3JpcHQgY2xlYW4tc2gtc2NyaXB0IGNsZWFuLXB5dGhvbi1zY3JpcHQKIGNsZWFuLXNoLXNjcmlwdDoKQEAgLTUxNiw5ICs1MjcsOSBAQAogY2xlYW4tcHl0aG9uLXNjcmlwdDoKIAkkKFJNKSAkKFNDUklQVF9QWVRIT05fR0VOKQogCi1TQ1JJUFRTID0gJChTQ1JJUFRfU0hfR0VOKSBcCi0JICAkKFNDUklQVF9QRVJMX0dFTikgXAotCSAgJChTQ1JJUFRfUFlUSE9OX0dFTikgXAorU0NSSVBUUyA9ICQoU0NSSVBUX1NIX0lOUykgXAorCSAgJChTQ1JJUFRfUEVSTF9JTlMpIFwKKwkgICQoU0NSSVBUX1BZVEhPTl9JTlMpIFwKIAkgIGdpdC1pbnN0YXdlYgogCiBFVEFHU19UQVJHRVQgPSBUQUdTCkBAIC01NTgsNiArNTY5LDggQEAKIFRFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtbWt0ZW1wCiBURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LXBhcnNlLW9wdGlvbnMKIFRFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtcGF0aC11dGlscworVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1wcmlvLXF1ZXVlCitURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LXJlYWQtY2FjaGUKIFRFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtcmVnZXgKIFRFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtcmV2aXNpb24td2Fsa2luZwogVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1ydW4tY29tbWFuZApAQCAtNjczLDYgKzY4Niw4IEBACiBMSUJfSCArPSBodHRwLmgKIExJQl9IICs9IGt3c2V0LmgKIExJQl9IICs9IGxldmVuc2h0ZWluLmgKK0xJQl9IICs9IGxpbmUtbG9nLmgKK0xJQl9IICs9IGxpbmUtcmFuZ2UuaAogTElCX0ggKz0gbGlzdC1vYmplY3RzLmgKIExJQl9IICs9IGxsLW1lcmdlLmgKIExJQl9IICs9IGxvZy10cmVlLmgKQEAgLTY4MiwxNSArNjk3LDE2IEBACiBMSUJfSCArPSBtZXJnZXNvcnQuaAogTElCX0ggKz0gbm90ZXMtY2FjaGUuaAogTElCX0ggKz0gbm90ZXMtbWVyZ2UuaAorTElCX0ggKz0gbm90ZXMtdXRpbHMuaAogTElCX0ggKz0gbm90ZXMuaAogTElCX0ggKz0gb2JqZWN0LmgKLUxJQl9IICs9IHBhY2stcmVmcy5oCiBMSUJfSCArPSBwYWNrLXJldmluZGV4LmgKIExJQl9IICs9IHBhY2suaAogTElCX0ggKz0gcGFyc2Utb3B0aW9ucy5oCiBMSUJfSCArPSBwYXRjaC1pZHMuaAogTElCX0ggKz0gcGF0aHNwZWMuaAogTElCX0ggKz0gcGt0LWxpbmUuaAorTElCX0ggKz0gcHJpby1xdWV1ZS5oCiBMSUJfSCArPSBwcm9ncmVzcy5oCiBMSUJfSCArPSBwcm9tcHQuaAogTElCX0ggKz0gcXVvdGUuaApAQCAtODAxLDYgKzgxNyw4IEBACiBMSUJfT0JKUyArPSBpZGVudC5vCiBMSUJfT0JKUyArPSBrd3NldC5vCiBMSUJfT0JKUyArPSBsZXZlbnNodGVpbi5vCitMSUJfT0JKUyArPSBsaW5lLWxvZy5vCitMSUJfT0JKUyArPSBsaW5lLXJhbmdlLm8KIExJQl9PQkpTICs9IGxpc3Qtb2JqZWN0cy5vCiBMSUJfT0JKUyArPSBsbC1tZXJnZS5vCiBMSUJfT0JKUyArPSBsb2NrZmlsZS5vCkBAIC04MTUsOSArODMzLDkgQEAKIExJQl9PQkpTICs9IG5vdGVzLm8KIExJQl9PQkpTICs9IG5vdGVzLWNhY2hlLm8KIExJQl9PQkpTICs9IG5vdGVzLW1lcmdlLm8KK0xJQl9PQkpTICs9IG5vdGVzLXV0aWxzLm8KIExJQl9PQkpTICs9IG9iamVjdC5vCiBMSUJfT0JKUyArPSBwYWNrLWNoZWNrLm8KLUxJQl9PQkpTICs9IHBhY2stcmVmcy5vCiBMSUJfT0JKUyArPSBwYWNrLXJldmluZGV4Lm8KIExJQl9PQkpTICs9IHBhY2std3JpdGUubwogTElCX09CSlMgKz0gcGFnZXIubwpAQCAtODMwLDYgKzg0OCw3IEBACiBMSUJfT0JKUyArPSBwa3QtbGluZS5vCiBMSUJfT0JKUyArPSBwcmVsb2FkLWluZGV4Lm8KIExJQl9PQkpTICs9IHByZXR0eS5vCitMSUJfT0JKUyArPSBwcmlvLXF1ZXVlLm8KIExJQl9PQkpTICs9IHByb2dyZXNzLm8KIExJQl9PQkpTICs9IHByb21wdC5vCiBMSUJfT0JKUyArPSBxdW90ZS5vCkBAIC04OTMsNiArOTEyLDcgQEAKIEJVSUxUSU5fT0JKUyArPSBidWlsdGluL2NhdC1maWxlLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluL2NoZWNrLWF0dHIubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vY2hlY2staWdub3JlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2NoZWNrLW1haWxtYXAubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vY2hlY2stcmVmLWZvcm1hdC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jaGVja291dC1pbmRleC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jaGVja291dC5vCkBAIC0xMDU0LDYgKzEwNzQsMTEgQEAKIAkJCUJBU0lDX0xERkxBR1MgKz0gLUwvb3B0L2xvY2FsL2xpYgogCQllbmRpZgogCWVuZGlmCisJaWZuZGVmIE5PX0FQUExFX0NPTU1PTl9DUllQVE8KKwkJQVBQTEVfQ09NTU9OX0NSWVBUTyA9IFllc1BsZWFzZQorCQlDT01QQVRfQ0ZMQUdTICs9IC1EQVBQTEVfQ09NTU9OX0NSWVBUTworCWVuZGlmCisJTk9fUkVHRVggPSBZZXNQbGVhc2UKIAlQVEhSRUFEX0xJQlMgPQogZW5kaWYKIApAQCAtMTI2MSw3ICsxMjg2LDcgQEAKIAlDT01QQVRfT0JKUyArPSBjb21wYXQvZm5tYXRjaC9mbm1hdGNoLm8KIGVuZGlmCiBlbmRpZgotaWZkZWYgVVNFX1dJTERNQVRDSAoraWZuZGVmIE5PX1dJTERNQVRDSAogCUNPTVBBVF9DRkxBR1MgKz0gLURVU0VfV0lMRE1BVENICiBlbmRpZgogaWZkZWYgTk9fU0VURU5WCkBAIC0xMzg4LDEwICsxNDEzLDE2IEBACiAJTElCX09CSlMgKz0gcHBjL3NoYTEubyBwcGMvc2hhMXBwYy5vCiAJTElCX0ggKz0gcHBjL3NoYTEuaAogZWxzZQoraWZkZWYgQVBQTEVfQ09NTU9OX0NSWVBUTworCUNPTVBBVF9DRkxBR1MgKz0gLURDT01NT05fRElHRVNUX0ZPUl9PUEVOU1NMCisJU0hBMV9IRUFERVIgPSA8Q29tbW9uQ3J5cHRvL0NvbW1vbkRpZ2VzdC5oPgorZWxzZQogCVNIQTFfSEVBREVSID0gPG9wZW5zc2wvc2hhLmg+CiAJRVhUTElCUyArPSAkKExJQl80X0NSWVBUTykKIGVuZGlmCiBlbmRpZgorZW5kaWYKKwogaWZkZWYgTk9fUEVSTF9NQUtFTUFLRVIKIAlleHBvcnQgTk9fUEVSTF9NQUtFTUFLRVIKIGVuZGlmCkBAIC0xNDQ5LDkgKzE0ODAsNiBAQAogCUNPTVBBVF9DRkxBR1MgKz0gLUljb21wYXQvcmVnZXgKIAlDT01QQVRfT0JKUyArPSBjb21wYXQvcmVnZXgvcmVnZXgubwogZW5kaWYKLWlmZGVmIENZR1dJTl9WMTVfV0lOMzJBUEkKLQlDT01QQVRfQ0ZMQUdTICs9IC1EQ1lHV0lOX1YxNV9XSU4zMkFQSQotZW5kaWYKIAogaWZkZWYgVVNFX05FRF9BTExPQ0FUT1IKICAgICAgICBDT01QQVRfQ0ZMQUdTICs9IC1JY29tcGF0L25lZG1hbGxvYwpAQCAtMTQ2Niw2ICsxNDk0LDExIEBACiAJTVNHRk1UICs9IC0tY2hlY2sgLS1zdGF0aXN0aWNzCiBlbmRpZgogCitpZmRlZiBORUVEU19DTElQUEVEX1dSSVRFCisJQkFTSUNfQ0ZMQUdTICs9IC1ETkVFRFNfQ0xJUFBFRF9XUklURQorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9jbGlwcGVkLXdyaXRlLm8KK2VuZGlmCisKIGlmbmVxICgsJChYRExfRkFTVF9IQVNIKSkKIAlCQVNJQ19DRkxBR1MgKz0gLURYRExfRkFTVF9IQVNICiBlbmRpZgpAQCAtMTUwMyw2ICsxNTM2LDcgQEAKIAlRVUlFVF9NU0dGTVQgICA9IEBlY2hvICcgICAnIE1TR0ZNVCAkQDsKIAlRVUlFVF9HQ09WICAgICA9IEBlY2hvICcgICAnIEdDT1YgJEA7CiAJUVVJRVRfU1AgICAgICAgPSBAZWNobyAnICAgJyBTUCAkPDsKKwlRVUlFVF9SQyAgICAgICA9IEBlY2hvICcgICAnIFJDICRAOwogCVFVSUVUX1NVQkRJUjAgID0gK0BzdWJkaXI9CiAJUVVJRVRfU1VCRElSMSAgPSA7JChOT19TVUJESVIpIGVjaG8gJyAgICcgU1VCRElSICQkc3ViZGlyOyBcCiAJCQkgJChNQUtFKSAkKFBSSU5UX0RJUikgLUMgJCRzdWJkaXIKQEAgLTE2NDUsNyArMTY3OSw3IEBACiBzaGVsbF9jb21wYXRpYmlsaXR5X3Rlc3Q6IHBsZWFzZV9zZXRfU0hFTExfUEFUSF90b19hX21vcmVfbW9kZXJuX3NoZWxsCiAKIHN0cmlwOiAkKFBST0dSQU1TKSBnaXQkWAotCSQoU1RSSVApICQoU1RSSVBfT1BUUykgJChQUk9HUkFNUykgZ2l0JFgKKwkkKFNUUklQKSAkKFNUUklQX09QVFMpICReCiAKICMjIyBUYXJnZXQtc3BlY2lmaWMgZmxhZ3MgYW5kIGRlcGVuZGVuY2llcwogCkBAIC0xNzA1LDkgKzE3MzksOSBAQAogCiAkKEJVSUxUX0lOUyk6IGdpdCRYCiAJJChRVUlFVF9CVUlMVF9JTikkKFJNKSAkQCAmJiBcCi0JbG4gZ2l0JFggJEAgMj4vZGV2L251bGwgfHwgXAotCWxuIC1zIGdpdCRYICRAIDI+L2Rldi9udWxsIHx8IFwKLQljcCBnaXQkWCAkQAorCWxuICQ8ICRAIDI+L2Rldi9udWxsIHx8IFwKKwlsbiAtcyAkPCAkQCAyPi9kZXYvbnVsbCB8fCBcCisJY3AgJDwgJEAKIAogY29tbW9uLWNtZHMuaDogLi9nZW5lcmF0ZS1jbWRsaXN0LnNoIGNvbW1hbmQtbGlzdC50eHQKIApAQCAtMTc0OCw2ICsxNzgyLDExIEBACiAJJChRVUlFVF9HRU4pJChjbWRfbXVuZ2Vfc2NyaXB0KSAmJiBcCiAJbXYgJEArICRACiAKK2dpdC5yZXM6IGdpdC5yYyBHSVQtVkVSU0lPTi1GSUxFCisJJChRVUlFVF9SQykkKFJDKSBcCisJICAkKGpvaW4gLURNQUpPUj0gLURNSU5PUj0gLURQQVRDSD0sICQod29yZGxpc3QgMSwzLCQoc3Vic3QgLSwgLCQoc3Vic3QgLiwgLCQoR0lUX1ZFUlNJT04pKSkpKSBcCisJICAtREdJVF9WRVJTSU9OPSJcXFwiJChHSVRfVkVSU0lPTilcXFwiIiAkPCAtbyAkQAorCiBpZm5kZWYgTk9fUEVSTAogJChwYXRzdWJzdCAlLnBlcmwsJSwkKFNDUklQVF9QRVJMKSk6IHBlcmwvcGVybC5tYWsKIApAQCAtMTc3Miw3ICsxODExLDcgQEAKIAkgICAgLWUgJwl4JyBcCiAJICAgIC1lICd9JyBcCiAJICAgIC1lICdzL0BAR0lUX1ZFUlNJT05AQC8kKEdJVF9WRVJTSU9OKS9nJyBcCi0JICAgICRALnBlcmwgPiRAKyAmJiBcCisJICAgICQ8ID4kQCsgJiYgXAogCWNobW9kICt4ICRAKyAmJiBcCiAJbXYgJEArICRACiAKQEAgLTE3OTYsOCArMTgzNSw4IEBACiBlbmRpZiAjIE5PX1BFUkwKIAogaWZuZGVmIE5PX1BZVEhPTgotJChwYXRzdWJzdCAlLnB5LCUsJChTQ1JJUFRfUFlUSE9OKSk6IEdJVC1DRkxBR1MgR0lULVBSRUZJWCBHSVQtUFlUSE9OLVZBUlMKLSQocGF0c3Vic3QgJS5weSwlLCQoU0NSSVBUX1BZVEhPTikpOiAlIDogJS5weQorJChTQ1JJUFRfUFlUSE9OX0dFTik6IEdJVC1DRkxBR1MgR0lULVBSRUZJWCBHSVQtUFlUSE9OLVZBUlMKKyQoU0NSSVBUX1BZVEhPTl9HRU4pOiAlIDogJS5weQogCSQoUVVJRVRfR0VOKSQoUk0pICRAICRAKyAmJiBcCiAJSU5TVExJQkRJUj1gTUFLRUZMQUdTPSAkKE1BS0UpIC1DIGdpdF9yZW1vdGVfaGVscGVycyAtcyBcCiAJCS0tbm8tcHJpbnQtZGlyZWN0b3J5IHByZWZpeD0nJChwcmVmaXhfU1EpJyBERVNURElSPSckKERFU1RESVJfU1EpJyBcCkBAIC0xODA1LDExICsxODQ0LDExIEBACiAJc2VkIC1lICcxc3wjIS4qcHl0aG9ufCMhJChQWVRIT05fUEFUSF9TUSl8JyBcCiAJICAgIC1lICdzfFwob3NcLmdldGVudigiR0lUUFlUSE9OTElCIlwpW14pXSopfFwxLCJAQElOU1RMSUJESVJAQCIpfCcgXAogCSAgICAtZSAnc3xAQElOU1RMSUJESVJAQHwnIiQkSU5TVExJQkRJUiInfGcnIFwKLQkgICAgJEAucHkgPiRAKyAmJiBcCisJICAgICQ8ID4kQCsgJiYgXAogCWNobW9kICt4ICRAKyAmJiBcCiAJbXYgJEArICRACiBlbHNlICMgTk9fUFlUSE9OCi0kKHBhdHN1YnN0ICUucHksJSwkKFNDUklQVF9QWVRIT04pKTogJSA6IHVuaW1wbGVtZW50ZWQuc2gKKyQoU0NSSVBUX1BZVEhPTl9HRU4pOiAlIDogdW5pbXBsZW1lbnRlZC5zaAogCSQoUVVJRVRfR0VOKSQoUk0pICRAICRAKyAmJiBcCiAJc2VkIC1lICcxc3wjIS4qL3NofCMhJChTSEVMTF9QQVRIX1NRKXwnIFwKIAkgICAgLWUgJ3N8QEBSRUFTT05AQHxOT19QWVRIT049JChOT19QWVRIT04pfGcnIFwKQEAgLTIwMDQsNiArMjA0Myw3IEBACiBpZmRlZiBVU0VfTkVEX0FMTE9DQVRPUgogY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2Muc3AgY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MubzogRVhUUkFfQ1BQRkxBR1MgPSBcCiAJLUROREVCVUcgLURPVkVSUklERV9TVFJEVVAgLURSRVBMQUNFX1NZU1RFTV9BTExPQ0FUT1IKK2NvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLnNwOiBTUEFSU0VfRkxBR1MgKz0gLVduby1ub24tcG9pbnRlci1udWxsCiBlbmRpZgogCiBnaXQtJSRYOiAlLm8gR0lULUxERkxBR1MgJChHSVRMSUJTKQpAQCAtMjAzNSwxMyArMjA3NSwxMyBAQAogCQkkKExJQlMpICQoQ1VSTF9MSUJDVVJMKSAkKEVYUEFUX0xJQkVYUEFUKQogCiAkKExJQl9GSUxFKTogJChMSUJfT0JKUykKLQkkKFFVSUVUX0FSKSQoUk0pICRAICYmICQoQVIpIHJjcyAkQCAkKExJQl9PQkpTKQorCSQoUVVJRVRfQVIpJChSTSkgJEAgJiYgJChBUikgcmNzICRAICReCiAKICQoWERJRkZfTElCKTogJChYRElGRl9PQkpTKQotCSQoUVVJRVRfQVIpJChSTSkgJEAgJiYgJChBUikgcmNzICRAICQoWERJRkZfT0JKUykKKwkkKFFVSUVUX0FSKSQoUk0pICRAICYmICQoQVIpIHJjcyAkQCAkXgogCiAkKFZDU1NWTl9MSUIpOiAkKFZDU1NWTl9PQkpTKQotCSQoUVVJRVRfQVIpJChSTSkgJEAgJiYgJChBUikgcmNzICRAICQoVkNTU1ZOX09CSlMpCisJJChRVUlFVF9BUikkKFJNKSAkQCAmJiAkKEFSKSByY3MgJEAgJF4KIAogZXhwb3J0IERFRkFVTFRfRURJVE9SIERFRkFVTFRfUEFHRVIKIApAQCAtMjE1OSw2ICsyMTk5LDkgQEAKIAlAZWNobyBOT19QRVJMPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoTk9fUEVSTCkpKSdcJyA+PiRACiAJQGVjaG8gTk9fUFlUSE9OPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoTk9fUFlUSE9OKSkpJ1wnID4+JEAKIAlAZWNobyBOT19VTklYX1NPQ0tFVFM9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChOT19VTklYX1NPQ0tFVFMpKSknXCcgPj4kQAoraWZkZWYgVEVTVF9PVVRQVVRfRElSRUNUT1JZCisJQGVjaG8gVEVTVF9PVVRQVVRfRElSRUNUT1JZPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoVEVTVF9PVVRQVVRfRElSRUNUT1JZKSkpJ1wnID4+JEAKK2VuZGlmCiBpZmRlZiBHSVRfVEVTVF9PUFRTCiAJQGVjaG8gR0lUX1RFU1RfT1BUUz1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKEdJVF9URVNUX09QVFMpKSknXCcgPj4kQAogZW5kaWYKQEAgLTIxOTgsNiArMjI0MSw3IEBACiB0ZXN0X2JpbmRpcl9wcm9ncmFtcyA6PSAkKHBhdHN1YnN0ICUsYmluLXdyYXBwZXJzLyUsJChCSU5ESVJfUFJPR1JBTVNfTkVFRF9YKSAkKEJJTkRJUl9QUk9HUkFNU19OT19YKSAkKFRFU1RfUFJPR1JBTVNfTkVFRF9YKSkKIAogYWxsOjogJChURVNUX1BST0dSQU1TKSAkKHRlc3RfYmluZGlyX3Byb2dyYW1zKQorYWxsOjogJChOT19JTlNUQUxMKQogCiBiaW4td3JhcHBlcnMvJTogd3JhcC1mb3ItYmluLnNoCiAJQG1rZGlyIC1wIGJpbi13cmFwcGVycwpAQCAtMjI2Miw5ICsyMzA2LDYgQEAKIAkJZXhpdCAxOyBcCiAJZmkKIAotcmVtb3ZlLWRhc2hlczoKLQkuL2ZpeHVwLWJ1aWx0aW5zICQoQlVJTFRfSU5TKSAkKFBST0dSQU1TKSAkKFNDUklQVFMpCi0KICMjIyBJbnN0YWxsYXRpb24gcnVsZXMKIAogaWZuZXEgKCQoZmlsdGVyIC8lLCQoZmlyc3R3b3JkICQodGVtcGxhdGVfZGlyKSkpLCkKQEAgLTI0NDMsMTEgKzI0ODQsMTEgQEAKIAkkKFJNKSAkKGFkZHN1ZmZpeCAqLmdjZGEsJChhZGRwcmVmaXggJChQUk9GSUxFX0RJUikvLCAkKG9iamVjdF9kaXJzKSkpCiAJJChSTSkgJChhZGRzdWZmaXggKi5nY25vLCQoYWRkcHJlZml4ICQoUFJPRklMRV9ESVIpLywgJChvYmplY3RfZGlycykpKQogCi1jbGVhbjogcHJvZmlsZS1jbGVhbgotCSQoUk0pICoubyBibG9jay1zaGExLyoubyBwcGMvKi5vIGNvbXBhdC8qLm8gY29tcGF0LyovKi5vIHhkaWZmLyoubyB2Y3Mtc3ZuLyoubyBcCitjbGVhbjogcHJvZmlsZS1jbGVhbiBjb3ZlcmFnZS1jbGVhbgorCSQoUk0pICoubyAqLnJlcyBibG9jay1zaGExLyoubyBwcGMvKi5vIGNvbXBhdC8qLm8gY29tcGF0LyovKi5vIHhkaWZmLyoubyB2Y3Mtc3ZuLyoubyBcCiAJCWJ1aWx0aW4vKi5vICQoTElCX0ZJTEUpICQoWERJRkZfTElCKSAkKFZDU1NWTl9MSUIpCiAJJChSTSkgJChBTExfUFJPR1JBTVMpICQoU0NSSVBUX0xJQikgJChCVUlMVF9JTlMpIGdpdCRYCi0JJChSTSkgJChURVNUX1BST0dSQU1TKQorCSQoUk0pICQoVEVTVF9QUk9HUkFNUykgJChOT19JTlNUQUxMKQogCSQoUk0pIC1yIGJpbi13cmFwcGVycyAkKGRlcF9kaXJzKQogCSQoUk0pIC1yIHBvL2J1aWxkLwogCSQoUk0pICouc3BlYyAqLnB5YyAqLnB5byAqLyoucHljICovKi5weW8gY29tbW9uLWNtZHMuaCAkKEVUQUdTX1RBUkdFVCkgdGFncyBjc2NvcGUqCkBAIC0yNTI0LDI5ICsyNTY1LDM0IEBACiAKICMjIyBUZXN0IHN1aXRlIGNvdmVyYWdlIHRlc3RpbmcKICMKLS5QSE9OWTogY292ZXJhZ2UgY292ZXJhZ2UtY2xlYW4gY292ZXJhZ2UtYnVpbGQgY292ZXJhZ2UtcmVwb3J0CisuUEhPTlk6IGNvdmVyYWdlIGNvdmVyYWdlLWNsZWFuIGNvdmVyYWdlLWNvbXBpbGUgY292ZXJhZ2UtdGVzdCBjb3ZlcmFnZS1yZXBvcnQKKy5QSE9OWTogY292ZXJhZ2UtY2xlYW4tcmVzdWx0cwogCiBjb3ZlcmFnZToKLQkkKE1BS0UpIGNvdmVyYWdlLWJ1aWxkCi0JJChNQUtFKSBjb3ZlcmFnZS1yZXBvcnQKKwkkKE1BS0UpIGNvdmVyYWdlLXRlc3QKKwkkKE1BS0UpIGNvdmVyYWdlLXVudGVzdGVkLWZ1bmN0aW9ucwogCiBvYmplY3RfZGlycyA6PSAkKHNvcnQgJChkaXIgJChPQkpFQ1RTKSkpCi1jb3ZlcmFnZS1jbGVhbjoKK2NvdmVyYWdlLWNsZWFuLXJlc3VsdHM6CiAJJChSTSkgJChhZGRzdWZmaXggKi5nY292LCQob2JqZWN0X2RpcnMpKQogCSQoUk0pICQoYWRkc3VmZml4ICouZ2NkYSwkKG9iamVjdF9kaXJzKSkKLQkkKFJNKSAkKGFkZHN1ZmZpeCAqLmdjbm8sJChvYmplY3RfZGlycykpCiAJJChSTSkgY292ZXJhZ2UtdW50ZXN0ZWQtZnVuY3Rpb25zCiAJJChSTSkgLXIgY292ZXJfZGIvCiAJJChSTSkgLXIgY292ZXJfZGJfaHRtbC8KIAorY292ZXJhZ2UtY2xlYW46IGNvdmVyYWdlLWNsZWFuLXJlc3VsdHMKKwkkKFJNKSAkKGFkZHN1ZmZpeCAqLmdjbm8sJChvYmplY3RfZGlycykpCisKIENPVkVSQUdFX0NGTEFHUyA9ICQoQ0ZMQUdTKSAtTzAgLWZ0ZXN0LWNvdmVyYWdlIC1mcHJvZmlsZS1hcmNzCiBDT1ZFUkFHRV9MREZMQUdTID0gJChDRkxBR1MpICAtTzAgLWxnY292CiBHQ09WRkxBR1MgPSAtLXByZXNlcnZlLXBhdGhzIC0tYnJhbmNoLXByb2JhYmlsaXRpZXMgLS1hbGwtYmxvY2tzCiAKLWNvdmVyYWdlLWJ1aWxkOiBjb3ZlcmFnZS1jbGVhbgorY292ZXJhZ2UtY29tcGlsZToKIAkkKE1BS0UpIENGTEFHUz0iJChDT1ZFUkFHRV9DRkxBR1MpIiBMREZMQUdTPSIkKENPVkVSQUdFX0xERkxBR1MpIiBhbGwKKworY292ZXJhZ2UtdGVzdDogY292ZXJhZ2UtY2xlYW4tcmVzdWx0cyBjb3ZlcmFnZS1jb21waWxlCiAJJChNQUtFKSBDRkxBR1M9IiQoQ09WRVJBR0VfQ0ZMQUdTKSIgTERGTEFHUz0iJChDT1ZFUkFHRV9MREZMQUdTKSIgXAotCQktajEgdGVzdAorCQlERUZBVUxUX1RFU1RfVEFSR0VUPXRlc3QgLWoxIHRlc3QKIAogY292ZXJhZ2UtcmVwb3J0OgogCSQoUVVJRVRfR0NPVilmb3IgZGlyIGluICQob2JqZWN0X2RpcnMpOyBkbyBcCmRpZmYgLS1naXQgYS9SZWxOb3RlcyBiL1JlbE5vdGVzCmluZGV4IDgwYjdlMzguLmZjZTk5ZmIgMTIwMDAwCi0tLSBhL1JlbE5vdGVzCisrKyBiL1JlbE5vdGVzCkBAIC0xICsxIEBACi1Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4zLnR4dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQudHh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYWJzcGF0aC5jIGIvYWJzcGF0aC5jCmluZGV4IDQwY2RjNDYuLjY0YWRiZTIgMTAwNjQ0Ci0tLSBhL2Fic3BhdGguYworKysgYi9hYnNwYXRoLmMKQEAgLTIxNiw3ICsyMTYsNyBAQAogY29uc3QgY2hhciAqcHJlZml4X2ZpbGVuYW1lKGNvbnN0IGNoYXIgKnBmeCwgaW50IHBmeF9sZW4sIGNvbnN0IGNoYXIgKmFyZykKIHsKIAlzdGF0aWMgY2hhciBwYXRoW1BBVEhfTUFYXTsKLSNpZm5kZWYgV0lOMzIKKyNpZm5kZWYgR0lUX1dJTkRPV1NfTkFUSVZFCiAJaWYgKCFwZnhfbGVuIHx8IGlzX2Fic29sdXRlX3BhdGgoYXJnKSkKIAkJcmV0dXJuIGFyZzsKIAltZW1jcHkocGF0aCwgcGZ4LCBwZnhfbGVuKTsKZGlmZiAtLWdpdCBhL2FkdmljZS5jIGIvYWR2aWNlLmMKaW5kZXggYThkZWVlNi4uMmE1MjA5OCAxMDA2NDQKLS0tIGEvYWR2aWNlLmMKKysrIGIvYWR2aWNlLmMKQEAgLTE0LDYgKzE0LDggQEAKIGludCBhZHZpY2VfaW1wbGljaXRfaWRlbnRpdHkgPSAxOwogaW50IGFkdmljZV9kZXRhY2hlZF9oZWFkID0gMTsKIGludCBhZHZpY2Vfc2V0X3Vwc3RyZWFtX2ZhaWx1cmUgPSAxOworaW50IGFkdmljZV9vYmplY3RfbmFtZV93YXJuaW5nID0gMTsKK2ludCBhZHZpY2Vfcm1faGludHMgPSAxOwogCiBzdGF0aWMgc3RydWN0IHsKIAljb25zdCBjaGFyICpuYW1lOwpAQCAtMzMsNiArMzUsOCBAQAogCXsgImltcGxpY2l0aWRlbnRpdHkiLCAmYWR2aWNlX2ltcGxpY2l0X2lkZW50aXR5IH0sCiAJeyAiZGV0YWNoZWRoZWFkIiwgJmFkdmljZV9kZXRhY2hlZF9oZWFkIH0sCiAJeyAic2V0dXBzdHJlYW1mYWlsdXJlIiwgJmFkdmljZV9zZXRfdXBzdHJlYW1fZmFpbHVyZSB9LAorCXsgIm9iamVjdF9uYW1lX3dhcm5pbmciLCAmYWR2aWNlX29iamVjdF9uYW1lX3dhcm5pbmcgfSwKKwl7ICJybWhpbnRzIiwgJmFkdmljZV9ybV9oaW50cyB9LAogCiAJLyogbWFrZSB0aGlzIGFuIGFsaWFzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCiAJeyAicHVzaG5vbmZhc3Rmb3J3YXJkIiwgJmFkdmljZV9wdXNoX3VwZGF0ZV9yZWplY3RlZCB9CmRpZmYgLS1naXQgYS9hZHZpY2UuaCBiL2FkdmljZS5oCmluZGV4IDk0Y2FhMzIuLjA4ZmJjOGUgMTAwNjQ0Ci0tLSBhL2FkdmljZS5oCisrKyBiL2FkdmljZS5oCkBAIC0xNyw4ICsxNywxMSBAQAogZXh0ZXJuIGludCBhZHZpY2VfaW1wbGljaXRfaWRlbnRpdHk7CiBleHRlcm4gaW50IGFkdmljZV9kZXRhY2hlZF9oZWFkOwogZXh0ZXJuIGludCBhZHZpY2Vfc2V0X3Vwc3RyZWFtX2ZhaWx1cmU7CitleHRlcm4gaW50IGFkdmljZV9vYmplY3RfbmFtZV93YXJuaW5nOworZXh0ZXJuIGludCBhZHZpY2Vfcm1faGludHM7CiAKIGludCBnaXRfZGVmYXVsdF9hZHZpY2VfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpOworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKIHZvaWQgYWR2aXNlKGNvbnN0IGNoYXIgKmFkdmljZSwgLi4uKTsKIGludCBlcnJvcl9yZXNvbHZlX2NvbmZsaWN0KGNvbnN0IGNoYXIgKm1lKTsKIGV4dGVybiB2b2lkIE5PUkVUVVJOIGRpZV9yZXNvbHZlX2NvbmZsaWN0KGNvbnN0IGNoYXIgKm1lKTsKZGlmZiAtLWdpdCBhL2FyY2hpdmUtemlwLmMgYi9hcmNoaXZlLXppcC5jCmluZGV4IGIyYzRmZTAuLjRiZGUwMTkgMTAwNjQ0Ci0tLSBhL2FyY2hpdmUtemlwLmMKKysrIGIvYXJjaGl2ZS16aXAuYwpAQCAtMjMyLDcgKzIzMiw2IEBACiAJCXNpemUgPSAwOwogCQljb21wcmVzc2VkX3NpemUgPSAwOwogCQlidWZmZXIgPSBOVUxMOwotCQlzaXplID0gMDsKIAl9IGVsc2UgaWYgKFNfSVNSRUcobW9kZSkgfHwgU19JU0xOSyhtb2RlKSkgewogCQllbnVtIG9iamVjdF90eXBlIHR5cGUgPSBzaGExX29iamVjdF9pbmZvKHNoYTEsICZzaXplKTsKIApkaWZmIC0tZ2l0IGEvYXJndi1hcnJheS5oIGIvYXJndi1hcnJheS5oCmluZGV4IDQwMjQ4ZDQuLjg1YmE0MzggMTAwNjQ0Ci0tLSBhL2FyZ3YtYXJyYXkuaAorKysgYi9hcmd2LWFycmF5LmgKQEAgLTE1LDYgKzE1LDcgQEAKIHZvaWQgYXJndl9hcnJheV9wdXNoKHN0cnVjdCBhcmd2X2FycmF5ICosIGNvbnN0IGNoYXIgKik7CiBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwyLDMpKSkKIHZvaWQgYXJndl9hcnJheV9wdXNoZihzdHJ1Y3QgYXJndl9hcnJheSAqLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CitMQVNUX0FSR19NVVNUX0JFX05VTEwKIHZvaWQgYXJndl9hcnJheV9wdXNobChzdHJ1Y3QgYXJndl9hcnJheSAqLCAuLi4pOwogdm9pZCBhcmd2X2FycmF5X3BvcChzdHJ1Y3QgYXJndl9hcnJheSAqKTsKIHZvaWQgYXJndl9hcnJheV9jbGVhcihzdHJ1Y3QgYXJndl9hcnJheSAqKTsKZGlmZiAtLWdpdCBhL2Jpc2VjdC5jIGIvYmlzZWN0LmMKaW5kZXggMzc0ZDllMi4uNzFjMTk1OCAxMDA2NDQKLS0tIGEvYmlzZWN0LmMKKysrIGIvYmlzZWN0LmMKQEAgLTE1LDcgKzE1LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2hhMV9hcnJheSBnb29kX3JldnM7CiBzdGF0aWMgc3RydWN0IHNoYTFfYXJyYXkgc2tpcHBlZF9yZXZzOwogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqY3VycmVudF9iYWRfc2hhMTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpjdXJyZW50X2JhZF9zaGExOwogCiBzdGF0aWMgY29uc3QgY2hhciAqYXJndl9jaGVja291dFtdID0geyJjaGVja291dCIsICItcSIsIE5VTEwsICItLSIsIE5VTEx9Owogc3RhdGljIGNvbnN0IGNoYXIgKmFyZ3Zfc2hvd19icmFuY2hbXSA9IHsic2hvdy1icmFuY2giLCBOVUxMLCBOVUxMfTsKQEAgLTQwNCw3ICs0MDQsOCBAQAogCQkJaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQogewogCWlmICghc3RyY21wKHJlZm5hbWUsICJiYWQiKSkgewotCQljdXJyZW50X2JhZF9zaGExID0gc2hhMTsKKwkJY3VycmVudF9iYWRfc2hhMSA9IHhtYWxsb2MoMjApOworCQloYXNoY3B5KGN1cnJlbnRfYmFkX3NoYTEsIHNoYTEpOwogCX0gZWxzZSBpZiAoIXByZWZpeGNtcChyZWZuYW1lLCAiZ29vZC0iKSkgewogCQlzaGExX2FycmF5X2FwcGVuZCgmZ29vZF9yZXZzLCBzaGExKTsKIAl9IGVsc2UgaWYgKCFwcmVmaXhjbXAocmVmbmFtZSwgInNraXAtIikpIHsKZGlmZiAtLWdpdCBhL2JyYW5jaC5jIGIvYnJhbmNoLmMKaW5kZXggOTdjNzJiZi4uYzVjNjk4NCAxMDA2NDQKLS0tIGEvYnJhbmNoLmMKKysrIGIvYnJhbmNoLmMKQEAgLTE5Nyw2ICsxOTcsMjEgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCBjaGVja190cmFja2luZ19icmFuY2goc3RydWN0IHJlbW90ZSAqcmVtb3RlLCB2b2lkICpjYl9kYXRhKQoreworCWNoYXIgKnRyYWNraW5nX2JyYW5jaCA9IGNiX2RhdGE7CisJc3RydWN0IHJlZnNwZWMgcXVlcnk7CisJbWVtc2V0KCZxdWVyeSwgMCwgc2l6ZW9mKHN0cnVjdCByZWZzcGVjKSk7CisJcXVlcnkuZHN0ID0gdHJhY2tpbmdfYnJhbmNoOworCXJldHVybiAhKHJlbW90ZV9maW5kX3RyYWNraW5nKHJlbW90ZSwgJnF1ZXJ5KSB8fAorCQkgcHJlZml4Y21wKHF1ZXJ5LnNyYywgInJlZnMvaGVhZHMvIikpOworfQorCitzdGF0aWMgaW50IHZhbGlkYXRlX3JlbW90ZV90cmFja2luZ19icmFuY2goY2hhciAqcmVmKQoreworCXJldHVybiAhZm9yX2VhY2hfcmVtb3RlKGNoZWNrX3RyYWNraW5nX2JyYW5jaCwgcmVmKTsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIgdXBzdHJlYW1fbm90X2JyYW5jaFtdID0KIE5fKCJDYW5ub3Qgc2V0dXAgdHJhY2tpbmcgaW5mb3JtYXRpb247IHN0YXJ0aW5nIHBvaW50ICclcycgaXMgbm90IGEgYnJhbmNoLiIpOwogc3RhdGljIGNvbnN0IGNoYXIgdXBzdHJlYW1fbWlzc2luZ1tdID0KQEAgLTI1OSw3ICsyNzQsNyBAQAogCWNhc2UgMToKIAkJLyogVW5pcXVlIGNvbXBsZXRpb24gLS0gZ29vZCwgb25seSBpZiBpdCBpcyBhIHJlYWwgYnJhbmNoICovCiAJCWlmIChwcmVmaXhjbXAocmVhbF9yZWYsICJyZWZzL2hlYWRzLyIpICYmCi0JCSAgICBwcmVmaXhjbXAocmVhbF9yZWYsICJyZWZzL3JlbW90ZXMvIikpIHsKKwkJICAgIHZhbGlkYXRlX3JlbW90ZV90cmFja2luZ19icmFuY2gocmVhbF9yZWYpKSB7CiAJCQlpZiAoZXhwbGljaXRfdHJhY2tpbmcpCiAJCQkJZGllKF8odXBzdHJlYW1fbm90X2JyYW5jaCksIHN0YXJ0X25hbWUpOwogCQkJZWxzZQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi5oIGIvYnVpbHRpbi5oCmluZGV4IGZhZWY1NTkuLjhhZmEyZGUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4uaAorKysgYi9idWlsdGluLmgKQEAgLTUsMTMgKzUsMTUgQEAKICNpbmNsdWRlICJzdHJidWYuaCIKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgImNvbW1pdC5oIgotI2luY2x1ZGUgIm5vdGVzLmgiCiAKICNkZWZpbmUgREVGQVVMVF9NRVJHRV9MT0dfTEVOIDIwCiAKIGV4dGVybiBjb25zdCBjaGFyIGdpdF91c2FnZV9zdHJpbmdbXTsKIGV4dGVybiBjb25zdCBjaGFyIGdpdF9tb3JlX2luZm9fc3RyaW5nW107CiAKKyNkZWZpbmUgUFJVTkVfUEFDS0VEX0RSWV9SVU4gMDEKKyNkZWZpbmUgUFJVTkVfUEFDS0VEX1ZFUkJPU0UgMDIKKwogZXh0ZXJuIHZvaWQgcHJ1bmVfcGFja2VkX29iamVjdHMoaW50KTsKIAogc3RydWN0IGZtdF9tZXJnZV9tc2dfb3B0cyB7CkBAIC0yMywyMSArMjUsNiBAQAogZXh0ZXJuIGludCBmbXRfbWVyZ2VfbXNnKHN0cnVjdCBzdHJidWYgKmluLCBzdHJ1Y3Qgc3RyYnVmICpvdXQsCiAJCQkgc3RydWN0IGZtdF9tZXJnZV9tc2dfb3B0cyAqKTsKIAotc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnIHsKLQlzdHJ1Y3Qgbm90ZXNfdHJlZSAqKnRyZWVzOwotCWNvbnN0IGNoYXIgKmNtZDsKLQlpbnQgZW5hYmxlZDsKLQljb21iaW5lX25vdGVzX2ZuIGNvbWJpbmU7Ci0Jc3RydWN0IHN0cmluZ19saXN0ICpyZWZzOwotCWludCByZWZzX2Zyb21fZW52OwotCWludCBtb2RlX2Zyb21fZW52OwotfTsKLQotc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnICppbml0X2NvcHlfbm90ZXNfZm9yX3Jld3JpdGUoY29uc3QgY2hhciAqY21kKTsKLWludCBjb3B5X25vdGVfZm9yX3Jld3JpdGUoc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnICpjLAotCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tX29iaiwgY29uc3QgdW5zaWduZWQgY2hhciAqdG9fb2JqKTsKLXZvaWQgZmluaXNoX2NvcHlfbm90ZXNfZm9yX3Jld3JpdGUoc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnICpjKTsKLQogZXh0ZXJuIGludCB0ZXh0Y29udl9vYmplY3QoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbW9kZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IHNoYTFfdmFsaWQsIGNoYXIgKipidWYsIHVuc2lnbmVkIGxvbmcgKmJ1Zl9zaXplKTsKIAogZXh0ZXJuIGludCBjbWRfYWRkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKQEAgLTUzLDYgKzQwLDcgQEAKIGV4dGVybiBpbnQgY21kX2NoZWNrb3V0X2luZGV4KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX2NoZWNrX2F0dHIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfY2hlY2tfaWdub3JlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2NoZWNrX21haWxtYXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfY2hlY2tfcmVmX2Zvcm1hdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9jaGVycnkoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfY2hlcnJ5X3BpY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9hZGQuYyBiL2J1aWx0aW4vYWRkLmMKaW5kZXggZjQ1ZDlkNC4uODI2NmE5YyAxMDA2NDQKLS0tIGEvYnVpbHRpbi9hZGQuYworKysgYi9idWlsdGluL2FkZC5jCkBAIC0zNDMsNiArMzQzLDcgQEAKIAogCWFyZ2MgPSBzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldiwgTlVMTCk7CiAJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1BBVENIOworCXJldi5kaWZmb3B0LnVzZV9jb2xvciA9IDA7CiAJRElGRl9PUFRfU0VUKCZyZXYuZGlmZm9wdCwgSUdOT1JFX0RJUlRZX1NVQk1PRFVMRVMpOwogCW91dCA9IG9wZW4oZmlsZSwgT19DUkVBVCB8IE9fV1JPTkxZLCAwNjY2KTsKIAlpZiAob3V0IDwgMCkKZGlmZiAtLWdpdCBhL2J1aWx0aW4vYXBwbHkuYyBiL2J1aWx0aW4vYXBwbHkuYwppbmRleCAzMGVlZmMzLi41MDkxMmM5IDEwMDY0NAotLS0gYS9idWlsdGluL2FwcGx5LmMKKysrIGIvYnVpbHRpbi9hcHBseS5jCkBAIC00NzMsNyArNDczLDcgQEAKIAogCS8qCiAJICogUHJvcG9zZWQgIm5ldy1zdHlsZSIgR05VIHBhdGNoL2RpZmYgZm9ybWF0OyBzZWUKLQkgKiBodHRwOi8vbWFyYy50aGVhaW1zZ3JvdXAuY29tLz9sPWdpdCZtPTExMjkyNzMxNjQwODY5MCZ3PTIKKwkgKiBodHRwOi8vbWFyYy5pbmZvLz9sPWdpdCZtPTExMjkyNzMxNjQwODY5MCZ3PTIKIAkgKi8KIAlpZiAodW5xdW90ZV9jX3N0eWxlKCZuYW1lLCBsaW5lLCBOVUxMKSkgewogCQlzdHJidWZfcmVsZWFzZSgmbmFtZSk7CkBAIC03MjIsNyArNzIyLDcgQEAKIAogc3RhdGljIGNoYXIgKmZpbmRfbmFtZV90cmFkaXRpb25hbChjb25zdCBjaGFyICpsaW5lLCBjaGFyICpkZWYsIGludCBwX3ZhbHVlKQogewotCXNpemVfdCBsZW4gPSBzdHJsZW4obGluZSk7CisJc2l6ZV90IGxlbjsKIAlzaXplX3QgZGF0ZV9sZW47CiAKIAlpZiAoKmxpbmUgPT0gJyInKSB7CkBAIC05MDYsNyArOTA2LDcgQEAKIAkJCXBhdGNoLT5vbGRfbmFtZSA9IG5hbWU7CiAJCX0gZWxzZSB7CiAJCQlwYXRjaC0+b2xkX25hbWUgPSBuYW1lOwotCQkJcGF0Y2gtPm5ld19uYW1lID0geHN0cmR1cChuYW1lKTsKKwkJCXBhdGNoLT5uZXdfbmFtZSA9IG51bGxfc3RyZHVwKG5hbWUpOwogCQl9CiAJfQogCWlmICghbmFtZSkKQEAgLTI5OTksNyArMjk5OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmVhZF9maWxlX29yX2dpdGxpbmsoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0cmJ1ZiAqYnVmKQorc3RhdGljIGludCByZWFkX2ZpbGVfb3JfZ2l0bGluayhjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RyYnVmICpidWYpCiB7CiAJaWYgKCFjZSkKIAkJcmV0dXJuIDA7CkBAIC0zMTE3LDcgKzMxMTcsNyBAQAogCXJldHVybiBwcmV2aW91czsKIH0KIAotc3RhdGljIGludCB2ZXJpZnlfaW5kZXhfbWF0Y2goc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0KQorc3RhdGljIGludCB2ZXJpZnlfaW5kZXhfbWF0Y2goY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0KQogewogCWlmIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpIHsKIAkJaWYgKCFTX0lTRElSKHN0LT5zdF9tb2RlKSkKQEAgLTMxMzAsNyArMzEzMCw3IEBACiAjZGVmaW5lIFNVQk1PRFVMRV9QQVRDSF9XSVRIT1VUX0lOREVYIDEKIAogc3RhdGljIGludCBsb2FkX3BhdGNoX3RhcmdldChzdHJ1Y3Qgc3RyYnVmICpidWYsCi0JCQkgICAgIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCiAJCQkgICAgIHN0cnVjdCBzdGF0ICpzdCwKIAkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgICAgdW5zaWduZWQgZXhwZWN0ZWRfbW9kZSkKQEAgLTMxNjAsNyArMzE2MCw4IEBACiAgKiB3ZSByZWFkIGZyb20gdGhlIHJlc3VsdCBvZiBhIHByZXZpb3VzIGRpZmYuCiAgKi8KIHN0YXRpYyBpbnQgbG9hZF9wcmVpbWFnZShzdHJ1Y3QgaW1hZ2UgKmltYWdlLAotCQkJIHN0cnVjdCBwYXRjaCAqcGF0Y2gsIHN0cnVjdCBzdGF0ICpzdCwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKKwkJCSBzdHJ1Y3QgcGF0Y2ggKnBhdGNoLCBzdHJ1Y3Qgc3RhdCAqc3QsCisJCQkgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKIHsKIAlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwogCXNpemVfdCBsZW47CkBAIC0zMjczLDcgKzMyNzQsNyBAQAogfQogCiBzdGF0aWMgaW50IHRyeV90aHJlZXdheShzdHJ1Y3QgaW1hZ2UgKmltYWdlLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoLAotCQkJc3RydWN0IHN0YXQgKnN0LCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQorCQkJc3RydWN0IHN0YXQgKnN0LCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQogewogCXVuc2lnbmVkIGNoYXIgcHJlX3NoYTFbMjBdLCBwb3N0X3NoYTFbMjBdLCBvdXJfc2hhMVsyMF07CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKQEAgLTMzNDMsNyArMzM0NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXBwbHlfZGF0YShzdHJ1Y3QgcGF0Y2ggKnBhdGNoLCBzdHJ1Y3Qgc3RhdCAqc3QsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCitzdGF0aWMgaW50IGFwcGx5X2RhdGEoc3RydWN0IHBhdGNoICpwYXRjaCwgc3RydWN0IHN0YXQgKnN0LCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQogewogCXN0cnVjdCBpbWFnZSBpbWFnZTsKIApAQCAtMzUyNSw3ICszNTI2LDcgQEAKIAkJb2tfaWZfZXhpc3RzID0gMDsKIAogCWlmIChuZXdfbmFtZSAmJgotCSAgICAoKDAgPCBwYXRjaC0+aXNfbmV3KSB8ICgwIDwgcGF0Y2gtPmlzX3JlbmFtZSkgfCBwYXRjaC0+aXNfY29weSkpIHsKKwkgICAgKCgwIDwgcGF0Y2gtPmlzX25ldykgfHwgcGF0Y2gtPmlzX3JlbmFtZSB8fCBwYXRjaC0+aXNfY29weSkpIHsKIAkJaW50IGVyciA9IGNoZWNrX3RvX2NyZWF0ZShuZXdfbmFtZSwgb2tfaWZfZXhpc3RzKTsKIAogCQlpZiAoZXJyICYmIHRocmVld2F5KSB7CkBAIC0zODQ3LDcgKzM4NDgsNyBAQAogCQljb25zdCBjaGFyICpzID0gYnVmOwogCiAJCWlmIChnZXRfc2hhMV9oZXgocyArIHN0cmxlbigiU3VicHJvamVjdCBjb21taXQgIiksIGNlLT5zaGExKSkKLQkJCWRpZShfKCJjb3JydXB0IHBhdGNoIGZvciBzdWJwcm9qZWN0ICVzIiksIHBhdGgpOworCQkJZGllKF8oImNvcnJ1cHQgcGF0Y2ggZm9yIHN1Ym1vZHVsZSAlcyIpLCBwYXRoKTsKIAl9IGVsc2UgewogCQlpZiAoIWNhY2hlZCkgewogCQkJaWYgKGxzdGF0KHBhdGgsICZzdCkgPCAwKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9ibGFtZS5jIGIvYnVpbHRpbi9ibGFtZS5jCmluZGV4IDU3YTQ4N2UuLjA3OWRjZDMgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vYmxhbWUuYworKysgYi9idWlsdGluL2JsYW1lLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCiAjaW5jbHVkZSAidXRmOC5oIgogI2luY2x1ZGUgInVzZXJkaWZmLmgiCisjaW5jbHVkZSAibGluZS1yYW5nZS5oIgogCiBzdGF0aWMgY2hhciBibGFtZV91c2FnZVtdID0gTl8oImdpdCBibGFtZSBbb3B0aW9uc10gW3Jldi1vcHRzXSBbcmV2XSBbLS1dIGZpbGUiKTsKIApAQCAtNTY2LDExICs1NjcsMTYgQEAKIAlkc3QtPnNjb3JlID0gMDsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKm50aF9saW5lKHN0cnVjdCBzY29yZWJvYXJkICpzYiwgaW50IGxubykKK3N0YXRpYyBjb25zdCBjaGFyICpudGhfbGluZShzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsIGxvbmcgbG5vKQogewogCXJldHVybiBzYi0+ZmluYWxfYnVmICsgc2ItPmxpbmVub1tsbm9dOwogfQogCitzdGF0aWMgY29uc3QgY2hhciAqbnRoX2xpbmVfY2Iodm9pZCAqZGF0YSwgbG9uZyBsbm8pCit7CisJcmV0dXJuIG50aF9saW5lKChzdHJ1Y3Qgc2NvcmVib2FyZCAqKWRhdGEsIGxubyk7Cit9CisKIC8qCiAgKiBJdCBpcyBrbm93biB0aGF0IGxpbmVzIGJldHdlZW4gdGxubyB0byBzYW1lIGNhbWUgZnJvbSBwYXJlbnQsIGFuZCBlCiAgKiBoYXMgYW4gb3ZlcmxhcCB3aXRoIHRoYXQgcmFuZ2UuICBpdCBhbHNvIGlzIGtub3duIHRoYXQgcGFyZW50J3MKQEAgLTE5MzIsODMgKzE5MzgsNiBAQAogfQogCiAvKgotICogUGFyc2luZyBvZiAoY29tbWEgc2VwYXJhdGVkKSBvbmUgaXRlbSBpbiB0aGUgLUwgb3B0aW9uCi0gKi8KLXN0YXRpYyBjb25zdCBjaGFyICpwYXJzZV9sb2MoY29uc3QgY2hhciAqc3BlYywKLQkJCSAgICAgc3RydWN0IHNjb3JlYm9hcmQgKnNiLCBsb25nIGxubywKLQkJCSAgICAgbG9uZyBiZWdpbiwgbG9uZyAqcmV0KQotewotCWNoYXIgKnRlcm07Ci0JY29uc3QgY2hhciAqbGluZTsKLQlsb25nIG51bTsKLQlpbnQgcmVnX2Vycm9yOwotCXJlZ2V4X3QgcmVnZXhwOwotCXJlZ21hdGNoX3QgbWF0Y2hbMV07Ci0KLQkvKiBBbGxvdyAiLUwgPHNvbWV0aGluZz4sKzIwIiB0byBtZWFuIHN0YXJ0aW5nIGF0IDxzb21ldGhpbmc+Ci0JICogZm9yIDIwIGxpbmVzLCBvciAiLUwgPHNvbWV0aGluZz4sLTUiIGZvciA1IGxpbmVzIGVuZGluZyBhdAotCSAqIDxzb21ldGhpbmc+LgotCSAqLwotCWlmICgxIDwgYmVnaW4gJiYgKHNwZWNbMF0gPT0gJysnIHx8IHNwZWNbMF0gPT0gJy0nKSkgewotCQludW0gPSBzdHJ0b2woc3BlYyArIDEsICZ0ZXJtLCAxMCk7Ci0JCWlmICh0ZXJtICE9IHNwZWMgKyAxKSB7Ci0JCQlpZiAoc3BlY1swXSA9PSAnLScpCi0JCQkJbnVtID0gMCAtIG51bTsKLQkJCWlmICgwIDwgbnVtKQotCQkJCSpyZXQgPSBiZWdpbiArIG51bSAtIDI7Ci0JCQllbHNlIGlmICghbnVtKQotCQkJCSpyZXQgPSBiZWdpbjsKLQkJCWVsc2UKLQkJCQkqcmV0ID0gYmVnaW4gKyBudW07Ci0JCQlyZXR1cm4gdGVybTsKLQkJfQotCQlyZXR1cm4gc3BlYzsKLQl9Ci0JbnVtID0gc3RydG9sKHNwZWMsICZ0ZXJtLCAxMCk7Ci0JaWYgKHRlcm0gIT0gc3BlYykgewotCQkqcmV0ID0gbnVtOwotCQlyZXR1cm4gdGVybTsKLQl9Ci0JaWYgKHNwZWNbMF0gIT0gJy8nKQotCQlyZXR1cm4gc3BlYzsKLQotCS8qIGl0IGNvdWxkIGJlIGEgcmVnZXhwIG9mIGZvcm0gLy4uLi8gKi8KLQlmb3IgKHRlcm0gPSAoY2hhciAqKSBzcGVjICsgMTsgKnRlcm0gJiYgKnRlcm0gIT0gJy8nOyB0ZXJtKyspIHsKLQkJaWYgKCp0ZXJtID09ICdcXCcpCi0JCQl0ZXJtKys7Ci0JfQotCWlmICgqdGVybSAhPSAnLycpCi0JCXJldHVybiBzcGVjOwotCi0JLyogdHJ5IFtzcGVjKzEgLi4gdGVybS0xXSBhcyByZWdleHAgKi8KLQkqdGVybSA9IDA7Ci0JYmVnaW4tLTsgLyogaW5wdXQgaXMgaW4gaHVtYW4gdGVybXMgKi8KLQlsaW5lID0gbnRoX2xpbmUoc2IsIGJlZ2luKTsKLQotCWlmICghKHJlZ19lcnJvciA9IHJlZ2NvbXAoJnJlZ2V4cCwgc3BlYyArIDEsIFJFR19ORVdMSU5FKSkgJiYKLQkgICAgIShyZWdfZXJyb3IgPSByZWdleGVjKCZyZWdleHAsIGxpbmUsIDEsIG1hdGNoLCAwKSkpIHsKLQkJY29uc3QgY2hhciAqY3AgPSBsaW5lICsgbWF0Y2hbMF0ucm1fc287Ci0JCWNvbnN0IGNoYXIgKm5saW5lOwotCi0JCXdoaWxlIChiZWdpbisrIDwgbG5vKSB7Ci0JCQlubGluZSA9IG50aF9saW5lKHNiLCBiZWdpbik7Ci0JCQlpZiAobGluZSA8PSBjcCAmJiBjcCA8IG5saW5lKQotCQkJCWJyZWFrOwotCQkJbGluZSA9IG5saW5lOwotCQl9Ci0JCSpyZXQgPSBiZWdpbjsKLQkJcmVnZnJlZSgmcmVnZXhwKTsKLQkJKnRlcm0rKyA9ICcvJzsKLQkJcmV0dXJuIHRlcm07Ci0JfQotCWVsc2UgewotCQljaGFyIGVycmJ1ZlsxMDI0XTsKLQkJcmVnZXJyb3IocmVnX2Vycm9yLCAmcmVnZXhwLCBlcnJidWYsIDEwMjQpOwotCQlkaWUoIi1MIHBhcmFtZXRlciAnJXMnOiAlcyIsIHNwZWMgKyAxLCBlcnJidWYpOwotCX0KLX0KLQotLyoKICAqIFBhcnNpbmcgb2YgLUwgb3B0aW9uCiAgKi8KIHN0YXRpYyB2b2lkIHByZXBhcmVfYmxhbWVfcmFuZ2Uoc3RydWN0IHNjb3JlYm9hcmQgKnNiLApAQCAtMjAxNiwxNSArMTk0NSw3IEBACiAJCQkJbG9uZyBsbm8sCiAJCQkJbG9uZyAqYm90dG9tLCBsb25nICp0b3ApCiB7Ci0JY29uc3QgY2hhciAqdGVybTsKLQotCXRlcm0gPSBwYXJzZV9sb2MoYm90dG9tdG9wLCBzYiwgbG5vLCAxLCBib3R0b20pOwotCWlmICgqdGVybSA9PSAnLCcpIHsKLQkJdGVybSA9IHBhcnNlX2xvYyh0ZXJtICsgMSwgc2IsIGxubywgKmJvdHRvbSArIDEsIHRvcCk7Ci0JCWlmICgqdGVybSkKLQkJCXVzYWdlKGJsYW1lX3VzYWdlKTsKLQl9Ci0JaWYgKCp0ZXJtKQorCWlmIChwYXJzZV9yYW5nZV9hcmcoYm90dG9tdG9wLCBudGhfbGluZV9jYiwgc2IsIGxubywgYm90dG9tLCB0b3AsIHNiLT5wYXRoKSkKIAkJdXNhZ2UoYmxhbWVfdXNhZ2UpOwogfQogCkBAIC0yNTc0LDEwICsyNDk1LDYgQEAKIAlib3R0b20gPSB0b3AgPSAwOwogCWlmIChib3R0b210b3ApCiAJCXByZXBhcmVfYmxhbWVfcmFuZ2UoJnNiLCBib3R0b210b3AsIGxubywgJmJvdHRvbSwgJnRvcCk7Ci0JaWYgKGJvdHRvbSAmJiB0b3AgJiYgdG9wIDwgYm90dG9tKSB7Ci0JCWxvbmcgdG1wOwotCQl0bXAgPSB0b3A7IHRvcCA9IGJvdHRvbTsgYm90dG9tID0gdG1wOwotCX0KIAlpZiAoYm90dG9tIDwgMSkKIAkJYm90dG9tID0gMTsKIAlpZiAodG9wIDwgMSkKZGlmZiAtLWdpdCBhL2J1aWx0aW4vY2F0LWZpbGUuYyBiL2J1aWx0aW4vY2F0LWZpbGUuYwppbmRleCAwNDVjZWU3Li4xNjNjZTZjIDEwMDY0NAotLS0gYS9idWlsdGluL2NhdC1maWxlLmMKKysrIGIvYnVpbHRpbi9jYXQtZmlsZS5jCkBAIC0xMyw5ICsxMyw2IEBACiAjaW5jbHVkZSAidXNlcmRpZmYuaCIKICNpbmNsdWRlICJzdHJlYW1pbmcuaCIKIAotI2RlZmluZSBCQVRDSCAxCi0jZGVmaW5lIEJBVENIX0NIRUNLIDIKLQogc3RhdGljIGludCBjYXRfb25lX2ZpbGUoaW50IG9wdCwgY29uc3QgY2hhciAqZXhwX3R5cGUsIGNvbnN0IGNoYXIgKm9ial9uYW1lKQogewogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CkBAIC0xMTcsNTQgKzExNCwxODQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBiYXRjaF9vbmVfb2JqZWN0KGNvbnN0IGNoYXIgKm9ial9uYW1lLCBpbnQgcHJpbnRfY29udGVudHMpCi17CitzdHJ1Y3QgZXhwYW5kX2RhdGEgewogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Ci0JZW51bSBvYmplY3RfdHlwZSB0eXBlID0gMDsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CiAJdW5zaWduZWQgbG9uZyBzaXplOwotCXZvaWQgKmNvbnRlbnRzID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGRpc2tfc2l6ZTsKKwljb25zdCBjaGFyICpyZXN0OworCisJLyoKKwkgKiBJZiBtYXJrX3F1ZXJ5IGlzIHRydWUsIHdlIGRvIG5vdCBleHBhbmQgYW55dGhpbmcsIGJ1dCByYXRoZXIKKwkgKiBqdXN0IG1hcmsgdGhlIG9iamVjdF9pbmZvIHdpdGggaXRlbXMgd2Ugd2lzaCB0byBxdWVyeS4KKwkgKi8KKwlpbnQgbWFya19xdWVyeTsKKworCS8qCisJICogQWZ0ZXIgYSBtYXJrX3F1ZXJ5IHJ1biwgdGhpcyBvYmplY3RfaW5mbyBpcyBzZXQgdXAgdG8gYmUKKwkgKiBwYXNzZWQgdG8gc2hhMV9vYmplY3RfaW5mb19leHRlbmRlZC4gSXQgd2lsbCBwb2ludCB0byB0aGUgZGF0YQorCSAqIGVsZW1lbnRzIGFib3ZlLCBzbyB5b3UgY2FuIHJldHJpZXZlIHRoZSByZXNwb25zZSBmcm9tIHRoZXJlLgorCSAqLworCXN0cnVjdCBvYmplY3RfaW5mbyBpbmZvOworfTsKKworc3RhdGljIGludCBpc19hdG9tKGNvbnN0IGNoYXIgKmF0b20sIGNvbnN0IGNoYXIgKnMsIGludCBzbGVuKQoreworCWludCBhbGVuID0gc3RybGVuKGF0b20pOworCXJldHVybiBhbGVuID09IHNsZW4gJiYgIW1lbWNtcChhdG9tLCBzLCBhbGVuKTsKK30KKworc3RhdGljIHZvaWQgZXhwYW5kX2F0b20oc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmF0b20sIGludCBsZW4sCisJCQl2b2lkICp2ZGF0YSkKK3sKKwlzdHJ1Y3QgZXhwYW5kX2RhdGEgKmRhdGEgPSB2ZGF0YTsKKworCWlmIChpc19hdG9tKCJvYmplY3RuYW1lIiwgYXRvbSwgbGVuKSkgeworCQlpZiAoIWRhdGEtPm1hcmtfcXVlcnkpCisJCQlzdHJidWZfYWRkc3RyKHNiLCBzaGExX3RvX2hleChkYXRhLT5zaGExKSk7CisJfSBlbHNlIGlmIChpc19hdG9tKCJvYmplY3R0eXBlIiwgYXRvbSwgbGVuKSkgeworCQlpZiAoZGF0YS0+bWFya19xdWVyeSkKKwkJCWRhdGEtPmluZm8udHlwZXAgPSAmZGF0YS0+dHlwZTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZHN0cihzYiwgdHlwZW5hbWUoZGF0YS0+dHlwZSkpOworCX0gZWxzZSBpZiAoaXNfYXRvbSgib2JqZWN0c2l6ZSIsIGF0b20sIGxlbikpIHsKKwkJaWYgKGRhdGEtPm1hcmtfcXVlcnkpCisJCQlkYXRhLT5pbmZvLnNpemVwID0gJmRhdGEtPnNpemU7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKHNiLCAiJWx1IiwgZGF0YS0+c2l6ZSk7CisJfSBlbHNlIGlmIChpc19hdG9tKCJvYmplY3RzaXplOmRpc2siLCBhdG9tLCBsZW4pKSB7CisJCWlmIChkYXRhLT5tYXJrX3F1ZXJ5KQorCQkJZGF0YS0+aW5mby5kaXNrX3NpemVwID0gJmRhdGEtPmRpc2tfc2l6ZTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGYoc2IsICIlbHUiLCBkYXRhLT5kaXNrX3NpemUpOworCX0gZWxzZSBpZiAoaXNfYXRvbSgicmVzdCIsIGF0b20sIGxlbikpIHsKKwkJaWYgKCFkYXRhLT5tYXJrX3F1ZXJ5ICYmIGRhdGEtPnJlc3QpCisJCQlzdHJidWZfYWRkc3RyKHNiLCBkYXRhLT5yZXN0KTsKKwl9IGVsc2UKKwkJZGllKCJ1bmtub3duIGZvcm1hdCBlbGVtZW50OiAlLipzIiwgbGVuLCBhdG9tKTsKK30KKworc3RhdGljIHNpemVfdCBleHBhbmRfZm9ybWF0KHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpzdGFydCwgdm9pZCAqZGF0YSkKK3sKKwljb25zdCBjaGFyICplbmQ7CisKKwlpZiAoKnN0YXJ0ICE9ICcoJykKKwkJcmV0dXJuIDA7CisJZW5kID0gc3RyY2hyKHN0YXJ0ICsgMSwgJyknKTsKKwlpZiAoIWVuZCkKKwkJZGllKCJmb3JtYXQgZWxlbWVudCAnJXMnIGRvZXMgbm90IGVuZCBpbiAnKSciLCBzdGFydCk7CisKKwlleHBhbmRfYXRvbShzYiwgc3RhcnQgKyAxLCBlbmQgLSBzdGFydCAtIDEsIGRhdGEpOworCisJcmV0dXJuIGVuZCAtIHN0YXJ0ICsgMTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfb2JqZWN0X29yX2RpZShpbnQgZmQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJZW51bSBvYmplY3RfdHlwZSB0eXBlLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYgKHR5cGUgPT0gT0JKX0JMT0IpIHsKKwkJaWYgKHN0cmVhbV9ibG9iX3RvX2ZkKGZkLCBzaGExLCBOVUxMLCAwKSA8IDApCisJCQlkaWUoInVuYWJsZSB0byBzdHJlYW0gJXMgdG8gc3Rkb3V0Iiwgc2hhMV90b19oZXgoc2hhMSkpOworCX0KKwllbHNlIHsKKwkJZW51bSBvYmplY3RfdHlwZSBydHlwZTsKKwkJdW5zaWduZWQgbG9uZyByc2l6ZTsKKwkJdm9pZCAqY29udGVudHM7CisKKwkJY29udGVudHMgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmcnR5cGUsICZyc2l6ZSk7CisJCWlmICghY29udGVudHMpCisJCQlkaWUoIm9iamVjdCAlcyBkaXNhcHBlYXJlZCIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJaWYgKHJ0eXBlICE9IHR5cGUpCisJCQlkaWUoIm9iamVjdCAlcyBjaGFuZ2VkIHR5cGUhPyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJaWYgKHJzaXplICE9IHNpemUpCisJCQlkaWUoIm9iamVjdCAlcyBjaGFuZ2Ugc2l6ZSE/Iiwgc2hhMV90b19oZXgoc2hhMSkpOworCisJCXdyaXRlX29yX2RpZShmZCwgY29udGVudHMsIHNpemUpOworCQlmcmVlKGNvbnRlbnRzKTsKKwl9Cit9CisKK3N0cnVjdCBiYXRjaF9vcHRpb25zIHsKKwlpbnQgZW5hYmxlZDsKKwlpbnQgcHJpbnRfY29udGVudHM7CisJY29uc3QgY2hhciAqZm9ybWF0OworfTsKKworc3RhdGljIGludCBiYXRjaF9vbmVfb2JqZWN0KGNvbnN0IGNoYXIgKm9ial9uYW1lLCBzdHJ1Y3QgYmF0Y2hfb3B0aW9ucyAqb3B0LAorCQkJICAgIHN0cnVjdCBleHBhbmRfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwogCiAJaWYgKCFvYmpfbmFtZSkKIAkgICByZXR1cm4gMTsKIAotCWlmIChnZXRfc2hhMShvYmpfbmFtZSwgc2hhMSkpIHsKKwlpZiAoZ2V0X3NoYTEob2JqX25hbWUsIGRhdGEtPnNoYTEpKSB7CiAJCXByaW50ZigiJXMgbWlzc2luZ1xuIiwgb2JqX25hbWUpOwogCQlmZmx1c2goc3Rkb3V0KTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKHByaW50X2NvbnRlbnRzID09IEJBVENIKQotCQljb250ZW50cyA9IHJlYWRfc2hhMV9maWxlKHNoYTEsICZ0eXBlLCAmc2l6ZSk7Ci0JZWxzZQotCQl0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCAmc2l6ZSk7Ci0KLQlpZiAodHlwZSA8PSAwKSB7CisJaWYgKHNoYTFfb2JqZWN0X2luZm9fZXh0ZW5kZWQoZGF0YS0+c2hhMSwgJmRhdGEtPmluZm8pIDwgMCkgewogCQlwcmludGYoIiVzIG1pc3NpbmdcbiIsIG9ial9uYW1lKTsKIAkJZmZsdXNoKHN0ZG91dCk7Ci0JCWlmIChwcmludF9jb250ZW50cyA9PSBCQVRDSCkKLQkJCWZyZWUoY29udGVudHMpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlwcmludGYoIiVzICVzICVsdVxuIiwgc2hhMV90b19oZXgoc2hhMSksIHR5cGVuYW1lKHR5cGUpLCBzaXplKTsKLQlmZmx1c2goc3Rkb3V0KTsKKwlzdHJidWZfZXhwYW5kKCZidWYsIG9wdC0+Zm9ybWF0LCBleHBhbmRfZm9ybWF0LCBkYXRhKTsKKwlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CisJd3JpdGVfb3JfZGllKDEsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOwogCi0JaWYgKHByaW50X2NvbnRlbnRzID09IEJBVENIKSB7Ci0JCXdyaXRlX29yX2RpZSgxLCBjb250ZW50cywgc2l6ZSk7Ci0JCXByaW50ZigiXG4iKTsKLQkJZmZsdXNoKHN0ZG91dCk7Ci0JCWZyZWUoY29udGVudHMpOworCWlmIChvcHQtPnByaW50X2NvbnRlbnRzKSB7CisJCXByaW50X29iamVjdF9vcl9kaWUoMSwgZGF0YS0+c2hhMSwgZGF0YS0+dHlwZSwgZGF0YS0+c2l6ZSk7CisJCXdyaXRlX29yX2RpZSgxLCAiXG4iLCAxKTsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBiYXRjaF9vYmplY3RzKGludCBwcmludF9jb250ZW50cykKK3N0YXRpYyBpbnQgYmF0Y2hfb2JqZWN0cyhzdHJ1Y3QgYmF0Y2hfb3B0aW9ucyAqb3B0KQogewogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGV4cGFuZF9kYXRhIGRhdGE7CisKKwlpZiAoIW9wdC0+Zm9ybWF0KQorCQlvcHQtPmZvcm1hdCA9ICIlKG9iamVjdG5hbWUpICUob2JqZWN0dHlwZSkgJShvYmplY3RzaXplKSI7CisKKwkvKgorCSAqIEV4cGFuZCBvbmNlIHdpdGggb3VyIHNwZWNpYWwgbWFya19xdWVyeSBmbGFnLCB3aGljaCB3aWxsIHByaW1lIHRoZQorCSAqIG9iamVjdF9pbmZvIHRvIGJlIGhhbmRlZCB0byBzaGExX29iamVjdF9pbmZvX2V4dGVuZGVkIGZvciBlYWNoCisJICogb2JqZWN0LgorCSAqLworCW1lbXNldCgmZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKKwlkYXRhLm1hcmtfcXVlcnkgPSAxOworCXN0cmJ1Zl9leHBhbmQoJmJ1Ziwgb3B0LT5mb3JtYXQsIGV4cGFuZF9mb3JtYXQsICZkYXRhKTsKKwlkYXRhLm1hcmtfcXVlcnkgPSAwOworCisJLyoKKwkgKiBXZSBhcmUgZ29pbmcgdG8gY2FsbCBnZXRfc2hhMSBvbiBhIHBvdGVudGlhbGx5IHZlcnkgbGFyZ2UgbnVtYmVyIG9mCisJICogb2JqZWN0cy4gSW4gbW9zdCBsYXJnZSBjYXNlcywgdGhlc2Ugd2lsbCBiZSBhY3R1YWwgb2JqZWN0IHNoYTFzLiBUaGUKKwkgKiBjb3N0IHRvIGRvdWJsZS1jaGVjayB0aGF0IGVhY2ggb25lIGlzIG5vdCBhbHNvIGEgcmVmIChqdXN0IHNvIHdlIGNhbgorCSAqIHdhcm4pIGVuZHMgdXAgZHdhcmZpbmcgdGhlIGFjdHVhbCBjb3N0IG9mIHRoZSBvYmplY3QgbG9va3VwcworCSAqIHRoZW1zZWx2ZXMuIFdlIGNhbiB3b3JrIGFyb3VuZCBpdCBieSBqdXN0IHR1cm5pbmcgb2ZmIHRoZSB3YXJuaW5nLgorCSAqLworCXdhcm5fb25fb2JqZWN0X3JlZm5hbWVfYW1iaWd1aXR5ID0gMDsKIAogCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmYnVmLCBzdGRpbiwgJ1xuJykgIT0gRU9GKSB7Ci0JCWludCBlcnJvciA9IGJhdGNoX29uZV9vYmplY3QoYnVmLmJ1ZiwgcHJpbnRfY29udGVudHMpOworCQljaGFyICpwOworCQlpbnQgZXJyb3I7CisKKwkJLyoKKwkJICogU3BsaXQgYXQgZmlyc3Qgd2hpdGVzcGFjZSwgdHlpbmcgb2ZmIHRoZSBiZWdpbm5pbmcgb2YgdGhlCisJCSAqIHN0cmluZyBhbmQgc2F2aW5nIHRoZSByZW1haW5kZXIgKG9yIE5VTEwpIGluIGRhdGEucmVzdC4KKwkJICovCisJCXAgPSBzdHJwYnJrKGJ1Zi5idWYsICIgXHQiKTsKKwkJaWYgKHApIHsKKwkJCXdoaWxlICgqcCAmJiBzdHJjaHIoIiBcdCIsICpwKSkKKwkJCQkqcCsrID0gJ1wwJzsKKwkJfQorCQlkYXRhLnJlc3QgPSBwOworCisJCWVycm9yID0gYmF0Y2hfb25lX29iamVjdChidWYuYnVmLCBvcHQsICZkYXRhKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTE4NiwxMCArMzEzLDI5IEBACiAJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKK3N0YXRpYyBpbnQgYmF0Y2hfb3B0aW9uX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkgY29uc3QgY2hhciAqYXJnLAorCQkJCSBpbnQgdW5zZXQpCit7CisJc3RydWN0IGJhdGNoX29wdGlvbnMgKmJvID0gb3B0LT52YWx1ZTsKKworCWlmICh1bnNldCkgeworCQltZW1zZXQoYm8sIDAsIHNpemVvZigqYm8pKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYm8tPmVuYWJsZWQgPSAxOworCWJvLT5wcmludF9jb250ZW50cyA9ICFzdHJjbXAob3B0LT5sb25nX25hbWUsICJiYXRjaCIpOworCWJvLT5mb3JtYXQgPSBhcmc7CisKKwlyZXR1cm4gMDsKK30KKwogaW50IGNtZF9jYXRfZmlsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKLQlpbnQgb3B0ID0gMCwgYmF0Y2ggPSAwOworCWludCBvcHQgPSAwOwogCWNvbnN0IGNoYXIgKmV4cF90eXBlID0gTlVMTCwgKm9ial9uYW1lID0gTlVMTDsKKwlzdHJ1Y3QgYmF0Y2hfb3B0aW9ucyBiYXRjaCA9IHswfTsKIAogCWNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewogCQlPUFRfR1JPVVAoTl8oIjx0eXBlPiBjYW4gYmUgb25lIG9mOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIpKSwKQEAgLTIwMCwxMiArMzQ2LDEyIEBACiAJCU9QVF9TRVRfSU5UKCdwJywgTlVMTCwgJm9wdCwgTl8oInByZXR0eS1wcmludCBvYmplY3QncyBjb250ZW50IiksICdwJyksCiAJCU9QVF9TRVRfSU5UKDAsICJ0ZXh0Y29udiIsICZvcHQsCiAJCQkgICAgTl8oImZvciBibG9iIG9iamVjdHMsIHJ1biB0ZXh0Y29udiBvbiBvYmplY3QncyBjb250ZW50IiksICdjJyksCi0JCU9QVF9TRVRfSU5UKDAsICJiYXRjaCIsICZiYXRjaCwKLQkJCSAgICBOXygic2hvdyBpbmZvIGFuZCBjb250ZW50IG9mIG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IiksCi0JCQkgICAgQkFUQ0gpLAotCQlPUFRfU0VUX0lOVCgwLCAiYmF0Y2gtY2hlY2siLCAmYmF0Y2gsCi0JCQkgICAgTl8oInNob3cgaW5mbyBhYm91dCBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIpLAotCQkJICAgIEJBVENIX0NIRUNLKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJiYXRjaCIsICZiYXRjaCwgImZvcm1hdCIsCisJCQlOXygic2hvdyBpbmZvIGFuZCBjb250ZW50IG9mIG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IiksCisJCQlQQVJTRV9PUFRfT1BUQVJHLCBiYXRjaF9vcHRpb25fY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJiYXRjaC1jaGVjayIsICZiYXRjaCwgImZvcm1hdCIsCisJCQlOXygic2hvdyBpbmZvIGFib3V0IG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IiksCisJCQlQQVJTRV9PUFRfT1BUQVJHLCBiYXRjaF9vcHRpb25fY2FsbGJhY2sgfSwKIAkJT1BUX0VORCgpCiAJfTsKIApAQCAtMjIyLDE5ICszNjgsMTkgQEAKIAkJZWxzZQogCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGNhdF9maWxlX3VzYWdlLCBvcHRpb25zKTsKIAl9Ci0JaWYgKCFvcHQgJiYgIWJhdGNoKSB7CisJaWYgKCFvcHQgJiYgIWJhdGNoLmVuYWJsZWQpIHsKIAkJaWYgKGFyZ2MgPT0gMikgewogCQkJZXhwX3R5cGUgPSBhcmd2WzBdOwogCQkJb2JqX25hbWUgPSBhcmd2WzFdOwogCQl9IGVsc2UKIAkJCXVzYWdlX3dpdGhfb3B0aW9ucyhjYXRfZmlsZV91c2FnZSwgb3B0aW9ucyk7CiAJfQotCWlmIChiYXRjaCAmJiAob3B0IHx8IGFyZ2MpKSB7CisJaWYgKGJhdGNoLmVuYWJsZWQgJiYgKG9wdCB8fCBhcmdjKSkgewogCQl1c2FnZV93aXRoX29wdGlvbnMoY2F0X2ZpbGVfdXNhZ2UsIG9wdGlvbnMpOwogCX0KIAotCWlmIChiYXRjaCkKLQkJcmV0dXJuIGJhdGNoX29iamVjdHMoYmF0Y2gpOworCWlmIChiYXRjaC5lbmFibGVkKQorCQlyZXR1cm4gYmF0Y2hfb2JqZWN0cygmYmF0Y2gpOwogCiAJcmV0dXJuIGNhdF9vbmVfZmlsZShvcHQsIGV4cF90eXBlLCBvYmpfbmFtZSk7CiB9CmRpZmYgLS1naXQgYS9idWlsdGluL2NoZWNrLWlnbm9yZS5jIGIvYnVpbHRpbi9jaGVjay1pZ25vcmUuYwppbmRleCA4NTRhODhhLi40YThmYzcwIDEwMDY0NAotLS0gYS9idWlsdGluL2NoZWNrLWlnbm9yZS5jCisrKyBiL2J1aWx0aW4vY2hlY2staWdub3JlLmMKQEAgLTUsNyArNSw3IEBACiAjaW5jbHVkZSAicGF0aHNwZWMuaCIKICNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCiAKLXN0YXRpYyBpbnQgcXVpZXQsIHZlcmJvc2UsIHN0ZGluX3BhdGhzOworc3RhdGljIGludCBxdWlldCwgdmVyYm9zZSwgc3RkaW5fcGF0aHMsIHNob3dfbm9uX21hdGNoaW5nOwogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjaGVja19pZ25vcmVfdXNhZ2VbXSA9IHsKICJnaXQgY2hlY2staWdub3JlIFtvcHRpb25zXSBwYXRobmFtZS4uLiIsCiAiZ2l0IGNoZWNrLWlnbm9yZSBbb3B0aW9uc10gLS1zdGRpbiA8IDxsaXN0LW9mLXBhdGhzPiIsCkBAIC0yMiwyMSArMjIsMjggQEAKIAkJICAgIE5fKCJyZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiIpKSwKIAlPUFRfQk9PTEVBTigneicsIE5VTEwsICZudWxsX3Rlcm1fbGluZSwKIAkJICAgIE5fKCJpbnB1dCBwYXRocyBhcmUgdGVybWluYXRlZCBieSBhIG51bGwgY2hhcmFjdGVyIikpLAorCU9QVF9CT09MRUFOKCduJywgIm5vbi1tYXRjaGluZyIsICZzaG93X25vbl9tYXRjaGluZywKKwkJICAgIE5fKCJzaG93IG5vbi1tYXRjaGluZyBpbnB1dCBwYXRocyIpKSwKIAlPUFRfRU5EKCkKIH07CiAKIHN0YXRpYyB2b2lkIG91dHB1dF9leGNsdWRlKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBleGNsdWRlICpleGNsdWRlKQogewotCWNoYXIgKmJhbmcgID0gZXhjbHVkZS0+ZmxhZ3MgJiBFWENfRkxBR19ORUdBVElWRSAgPyAiISIgOiAiIjsKLQljaGFyICpzbGFzaCA9IGV4Y2x1ZGUtPmZsYWdzICYgRVhDX0ZMQUdfTVVTVEJFRElSID8gIi8iIDogIiI7CisJY2hhciAqYmFuZyAgPSAoZXhjbHVkZSAmJiBleGNsdWRlLT5mbGFncyAmIEVYQ19GTEFHX05FR0FUSVZFKSAgPyAiISIgOiAiIjsKKwljaGFyICpzbGFzaCA9IChleGNsdWRlICYmIGV4Y2x1ZGUtPmZsYWdzICYgRVhDX0ZMQUdfTVVTVEJFRElSKSA/ICIvIiA6ICIiOwogCWlmICghbnVsbF90ZXJtX2xpbmUpIHsKIAkJaWYgKCF2ZXJib3NlKSB7CiAJCQl3cml0ZV9uYW1lX3F1b3RlZChwYXRoLCBzdGRvdXQsICdcbicpOwogCQl9IGVsc2UgewotCQkJcXVvdGVfY19zdHlsZShleGNsdWRlLT5lbC0+c3JjLCBOVUxMLCBzdGRvdXQsIDApOwotCQkJcHJpbnRmKCI6JWQ6JXMlcyVzXHQiLAotCQkJICAgICAgIGV4Y2x1ZGUtPnNyY3BvcywKLQkJCSAgICAgICBiYW5nLCBleGNsdWRlLT5wYXR0ZXJuLCBzbGFzaCk7CisJCQlpZiAoZXhjbHVkZSkgeworCQkJCXF1b3RlX2Nfc3R5bGUoZXhjbHVkZS0+ZWwtPnNyYywgTlVMTCwgc3Rkb3V0LCAwKTsKKwkJCQlwcmludGYoIjolZDolcyVzJXNcdCIsCisJCQkJICAgICAgIGV4Y2x1ZGUtPnNyY3BvcywKKwkJCQkgICAgICAgYmFuZywgZXhjbHVkZS0+cGF0dGVybiwgc2xhc2gpOworCQkJfQorCQkJZWxzZSB7CisJCQkJcHJpbnRmKCI6Olx0Iik7CisJCQl9CiAJCQlxdW90ZV9jX3N0eWxlKHBhdGgsIE5VTEwsIHN0ZG91dCwgMCk7CiAJCQlmcHV0YygnXG4nLCBzdGRvdXQpOwogCQl9CkBAIC00NCwzMCArNTEsMjYgQEAKIAkJaWYgKCF2ZXJib3NlKSB7CiAJCQlwcmludGYoIiVzJWMiLCBwYXRoLCAnXDAnKTsKIAkJfSBlbHNlIHsKLQkJCXByaW50ZigiJXMlYyVkJWMlcyVzJXMlYyVzJWMiLAotCQkJICAgICAgIGV4Y2x1ZGUtPmVsLT5zcmMsICdcMCcsCi0JCQkgICAgICAgZXhjbHVkZS0+c3JjcG9zLCAnXDAnLAotCQkJICAgICAgIGJhbmcsIGV4Y2x1ZGUtPnBhdHRlcm4sIHNsYXNoLCAnXDAnLAotCQkJICAgICAgIHBhdGgsICdcMCcpOworCQkJaWYgKGV4Y2x1ZGUpCisJCQkJcHJpbnRmKCIlcyVjJWQlYyVzJXMlcyVjJXMlYyIsCisJCQkJICAgICAgIGV4Y2x1ZGUtPmVsLT5zcmMsICdcMCcsCisJCQkJICAgICAgIGV4Y2x1ZGUtPnNyY3BvcywgJ1wwJywKKwkJCQkgICAgICAgYmFuZywgZXhjbHVkZS0+cGF0dGVybiwgc2xhc2gsICdcMCcsCisJCQkJICAgICAgIHBhdGgsICdcMCcpOworCQkJZWxzZQorCQkJCXByaW50ZigiJWMlYyVjJXMlYyIsICdcMCcsICdcMCcsICdcMCcsIHBhdGgsICdcMCcpOwogCQl9CiAJfQogfQogCi1zdGF0aWMgaW50IGNoZWNrX2lnbm9yZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKipwYXRoc3BlYykKK3N0YXRpYyBpbnQgY2hlY2tfaWdub3JlKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQljb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKipwYXRoc3BlYykKIHsKLQlzdHJ1Y3QgZGlyX3N0cnVjdCBkaXI7CiAJY29uc3QgY2hhciAqcGF0aCwgKmZ1bGxfcGF0aDsKIAljaGFyICpzZWVuOwogCWludCBudW1faWdub3JlZCA9IDAsIGR0eXBlID0gRFRfVU5LTk9XTiwgaTsKIAlzdHJ1Y3QgZXhjbHVkZSAqZXhjbHVkZTsKIAotCS8qIHJlYWRfY2FjaGUoKSBpcyBvbmx5IG5lY2Vzc2FyeSBzbyB3ZSBjYW4gd2F0Y2ggb3V0IGZvciBzdWJtb2R1bGVzLiAqLwotCWlmIChyZWFkX2NhY2hlKCkgPCAwKQotCQlkaWUoXygiaW5kZXggZmlsZSBjb3JydXB0IikpOwotCi0JbWVtc2V0KCZkaXIsIDAsIHNpemVvZihkaXIpKTsKLQlzZXR1cF9zdGFuZGFyZF9leGNsdWRlcygmZGlyKTsKLQogCWlmICghcGF0aHNwZWMgfHwgISpwYXRoc3BlYykgewogCQlpZiAoIXF1aWV0KQogCQkJZnByaW50ZihzdGRlcnIsICJubyBwYXRoc3BlYyBnaXZlbi5cbiIpOwpAQCAtODYsMjggKzg5LDI2IEBACiAJCQkJCT8gc3RybGVuKHByZWZpeCkgOiAwLCBwYXRoKTsKIAkJZnVsbF9wYXRoID0gY2hlY2tfcGF0aF9mb3JfZ2l0bGluayhmdWxsX3BhdGgpOwogCQlkaWVfaWZfcGF0aF9iZXlvbmRfc3ltbGluayhmdWxsX3BhdGgsIHByZWZpeCk7CisJCWV4Y2x1ZGUgPSBOVUxMOwogCQlpZiAoIXNlZW5baV0pIHsKLQkJCWV4Y2x1ZGUgPSBsYXN0X2V4Y2x1ZGVfbWF0Y2hpbmcoJmRpciwgZnVsbF9wYXRoLCAmZHR5cGUpOwotCQkJaWYgKGV4Y2x1ZGUpIHsKLQkJCQlpZiAoIXF1aWV0KQotCQkJCQlvdXRwdXRfZXhjbHVkZShwYXRoLCBleGNsdWRlKTsKLQkJCQludW1faWdub3JlZCsrOwotCQkJfQorCQkJZXhjbHVkZSA9IGxhc3RfZXhjbHVkZV9tYXRjaGluZyhkaXIsIGZ1bGxfcGF0aCwgJmR0eXBlKTsKIAkJfQorCQlpZiAoIXF1aWV0ICYmIChleGNsdWRlIHx8IHNob3dfbm9uX21hdGNoaW5nKSkKKwkJCW91dHB1dF9leGNsdWRlKHBhdGgsIGV4Y2x1ZGUpOworCQlpZiAoZXhjbHVkZSkKKwkJCW51bV9pZ25vcmVkKys7CiAJfQogCWZyZWUoc2Vlbik7Ci0JY2xlYXJfZGlyZWN0b3J5KCZkaXIpOwogCiAJcmV0dXJuIG51bV9pZ25vcmVkOwogfQogCi1zdGF0aWMgaW50IGNoZWNrX2lnbm9yZV9zdGRpbl9wYXRocyhjb25zdCBjaGFyICpwcmVmaXgpCitzdGF0aWMgaW50IGNoZWNrX2lnbm9yZV9zdGRpbl9wYXRocyhzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJc3RydWN0IHN0cmJ1ZiBidWYsIG5idWY7Ci0JY2hhciAqKnBhdGhzcGVjID0gTlVMTDsKLQlzaXplX3QgbnIgPSAwLCBhbGxvYyA9IDA7CisJY2hhciAqcGF0aHNwZWNbMl0gPSB7IE5VTEwsIE5VTEwgfTsKIAlpbnQgbGluZV90ZXJtaW5hdGlvbiA9IG51bGxfdGVybV9saW5lID8gMCA6ICdcbic7Ci0JaW50IG51bV9pZ25vcmVkOworCWludCBudW1faWdub3JlZCA9IDA7CiAKIAlzdHJidWZfaW5pdCgmYnVmLCAwKTsKIAlzdHJidWZfaW5pdCgmbmJ1ZiwgMCk7CkBAIC0xMTgsMjMgKzExOSwxOSBAQAogCQkJCWRpZSgibGluZSBpcyBiYWRseSBxdW90ZWQiKTsKIAkJCXN0cmJ1Zl9zd2FwKCZidWYsICZuYnVmKTsKIAkJfQotCQlBTExPQ19HUk9XKHBhdGhzcGVjLCBuciArIDEsIGFsbG9jKTsKLQkJcGF0aHNwZWNbbnJdID0geGNhbGxvYyhzdHJsZW4oYnVmLmJ1ZikgKyAxLCBzaXplb2YoKmJ1Zi5idWYpKTsKLQkJc3RyY3B5KHBhdGhzcGVjW25yKytdLCBidWYuYnVmKTsKKwkJcGF0aHNwZWNbMF0gPSBidWYuYnVmOworCQludW1faWdub3JlZCArPSBjaGVja19pZ25vcmUoZGlyLCBwcmVmaXgsIChjb25zdCBjaGFyICoqKXBhdGhzcGVjKTsKKwkJbWF5YmVfZmx1c2hfb3JfZGllKHN0ZG91dCwgImNoZWNrLWlnbm9yZSB0byBzdGRvdXQiKTsKIAl9Ci0JQUxMT0NfR1JPVyhwYXRoc3BlYywgbnIgKyAxLCBhbGxvYyk7Ci0JcGF0aHNwZWNbbnJdID0gTlVMTDsKLQludW1faWdub3JlZCA9IGNoZWNrX2lnbm9yZShwcmVmaXgsIChjb25zdCBjaGFyICoqKXBhdGhzcGVjKTsKLQltYXliZV9mbHVzaF9vcl9kaWUoc3Rkb3V0LCAiYXR0cmlidXRlIHRvIHN0ZG91dCIpOwogCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOwogCXN0cmJ1Zl9yZWxlYXNlKCZuYnVmKTsKLQlmcmVlKHBhdGhzcGVjKTsKIAlyZXR1cm4gbnVtX2lnbm9yZWQ7CiB9CiAKIGludCBjbWRfY2hlY2tfaWdub3JlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewogCWludCBudW1faWdub3JlZDsKKwlzdHJ1Y3QgZGlyX3N0cnVjdCBkaXI7CiAKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAKQEAgLTE1NiwxMyArMTUzLDI0IEBACiAJCWlmICh2ZXJib3NlKQogCQkJZGllKF8oImNhbm5vdCBoYXZlIGJvdGggLS1xdWlldCBhbmQgLS12ZXJib3NlIikpOwogCX0KKwlpZiAoc2hvd19ub25fbWF0Y2hpbmcgJiYgIXZlcmJvc2UpCisJCWRpZShfKCItLW5vbi1tYXRjaGluZyBpcyBvbmx5IHZhbGlkIHdpdGggLS12ZXJib3NlIikpOworCisJLyogcmVhZF9jYWNoZSgpIGlzIG9ubHkgbmVjZXNzYXJ5IHNvIHdlIGNhbiB3YXRjaCBvdXQgZm9yIHN1Ym1vZHVsZXMuICovCisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCWRpZShfKCJpbmRleCBmaWxlIGNvcnJ1cHQiKSk7CisKKwltZW1zZXQoJmRpciwgMCwgc2l6ZW9mKGRpcikpOworCXNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKCZkaXIpOwogCiAJaWYgKHN0ZGluX3BhdGhzKSB7Ci0JCW51bV9pZ25vcmVkID0gY2hlY2tfaWdub3JlX3N0ZGluX3BhdGhzKHByZWZpeCk7CisJCW51bV9pZ25vcmVkID0gY2hlY2tfaWdub3JlX3N0ZGluX3BhdGhzKCZkaXIsIHByZWZpeCk7CiAJfSBlbHNlIHsKLQkJbnVtX2lnbm9yZWQgPSBjaGVja19pZ25vcmUocHJlZml4LCBhcmd2KTsKKwkJbnVtX2lnbm9yZWQgPSBjaGVja19pZ25vcmUoJmRpciwgcHJlZml4LCBhcmd2KTsKIAkJbWF5YmVfZmx1c2hfb3JfZGllKHN0ZG91dCwgImlnbm9yZSB0byBzdGRvdXQiKTsKIAl9CiAKKwljbGVhcl9kaXJlY3RvcnkoJmRpcik7CisKIAlyZXR1cm4gIW51bV9pZ25vcmVkOwogfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jaGVjay1tYWlsbWFwLmMgYi9idWlsdGluL2NoZWNrLW1haWxtYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjRkODA5Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9jaGVjay1tYWlsbWFwLmMKQEAgLTAsMCArMSw2NiBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJtYWlsbWFwLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKK3N0YXRpYyBpbnQgdXNlX3N0ZGluOworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjaGVja19tYWlsbWFwX3VzYWdlW10gPSB7CitOXygiZ2l0IGNoZWNrLW1haWxtYXAgW29wdGlvbnNdIDxjb250YWN0Pi4uLiIpLAorTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gY2hlY2tfbWFpbG1hcF9vcHRpb25zW10gPSB7CisJT1BUX0JPT0woMCwgInN0ZGluIiwgJnVzZV9zdGRpbiwgTl8oImFsc28gcmVhZCBjb250YWN0cyBmcm9tIHN0ZGluIikpLAorCU9QVF9FTkQoKQorfTsKKworc3RhdGljIHZvaWQgY2hlY2tfbWFpbG1hcChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1haWxtYXAsIGNvbnN0IGNoYXIgKmNvbnRhY3QpCit7CisJY29uc3QgY2hhciAqbmFtZSwgKm1haWw7CisJc2l6ZV90IG5hbWVsZW4sIG1haWxsZW47CisJc3RydWN0IGlkZW50X3NwbGl0IGlkZW50OworCisJaWYgKHNwbGl0X2lkZW50X2xpbmUoJmlkZW50LCBjb250YWN0LCBzdHJsZW4oY29udGFjdCkpKQorCQlkaWUoXygidW5hYmxlIHRvIHBhcnNlIGNvbnRhY3Q6ICVzIiksIGNvbnRhY3QpOworCisJbmFtZSA9IGlkZW50Lm5hbWVfYmVnaW47CisJbmFtZWxlbiA9IGlkZW50Lm5hbWVfZW5kIC0gaWRlbnQubmFtZV9iZWdpbjsKKwltYWlsID0gaWRlbnQubWFpbF9iZWdpbjsKKwltYWlsbGVuID0gaWRlbnQubWFpbF9lbmQgLSBpZGVudC5tYWlsX2JlZ2luOworCisJbWFwX3VzZXIobWFpbG1hcCwgJm1haWwsICZtYWlsbGVuLCAmbmFtZSwgJm5hbWVsZW4pOworCisJaWYgKG5hbWVsZW4pCisJCXByaW50ZigiJS4qcyAiLCAoaW50KW5hbWVsZW4sIG5hbWUpOworCXByaW50ZigiPCUuKnM+XG4iLCAoaW50KW1haWxsZW4sIG1haWwpOworfQorCitpbnQgY21kX2NoZWNrX21haWxtYXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisJc3RydWN0IHN0cmluZ19saXN0IG1haWxtYXAgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgY2hlY2tfbWFpbG1hcF9vcHRpb25zLAorCQkJICAgICBjaGVja19tYWlsbWFwX3VzYWdlLCAwKTsKKwlpZiAoYXJnYyA9PSAwICYmICF1c2Vfc3RkaW4pCisJCWRpZShfKCJubyBjb250YWN0cyBzcGVjaWZpZWQiKSk7CisKKwlyZWFkX21haWxtYXAoJm1haWxtYXAsIE5VTEwpOworCisJZm9yIChpID0gMDsgaSA8IGFyZ2M7ICsraSkKKwkJY2hlY2tfbWFpbG1hcCgmbWFpbG1hcCwgYXJndltpXSk7CisJbWF5YmVfZmx1c2hfb3JfZGllKHN0ZG91dCwgInN0ZG91dCIpOworCisJaWYgKHVzZV9zdGRpbikgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmJ1Ziwgc3RkaW4sICdcbicpICE9IEVPRikgeworCQkJY2hlY2tfbWFpbG1hcCgmbWFpbG1hcCwgYnVmLmJ1Zik7CisJCQltYXliZV9mbHVzaF9vcl9kaWUoc3Rkb3V0LCAic3Rkb3V0Iik7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJfQorCisJY2xlYXJfbWFpbG1hcCgmbWFpbG1hcCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NoZWNrb3V0LmMgYi9idWlsdGluL2NoZWNrb3V0LmMKaW5kZXggODFiNDQxOS4uNzAyNTkzOCAxMDA2NDQKLS0tIGEvYnVpbHRpbi9jaGVja291dC5jCisrKyBiL2J1aWx0aW4vY2hlY2tvdXQuYwpAQCAtOTcsNyArOTcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNraXBfc2FtZV9uYW1lKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCBwb3MpCitzdGF0aWMgaW50IHNraXBfc2FtZV9uYW1lKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCBwb3MpCiB7CiAJd2hpbGUgKCsrcG9zIDwgYWN0aXZlX25yICYmCiAJICAgICAgICFzdHJjbXAoYWN0aXZlX2NhY2hlW3Bvc10tPm5hbWUsIGNlLT5uYW1lKSkKQEAgLTEwNSw3ICsxMDUsNyBAQAogCXJldHVybiBwb3M7CiB9CiAKLXN0YXRpYyBpbnQgY2hlY2tfc3RhZ2UoaW50IHN0YWdlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBpbnQgcG9zKQorc3RhdGljIGludCBjaGVja19zdGFnZShpbnQgc3RhZ2UsIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCBwb3MpCiB7CiAJd2hpbGUgKHBvcyA8IGFjdGl2ZV9uciAmJgogCSAgICAgICAhc3RyY21wKGFjdGl2ZV9jYWNoZVtwb3NdLT5uYW1lLCBjZS0+bmFtZSkpIHsKQEAgLTExOSw3ICsxMTksNyBAQAogCQlyZXR1cm4gZXJyb3IoXygicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgdGhlaXIgdmVyc2lvbiIpLCBjZS0+bmFtZSk7CiB9CiAKLXN0YXRpYyBpbnQgY2hlY2tfc3RhZ2VzKHVuc2lnbmVkIHN0YWdlcywgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IHBvcykKK3N0YXRpYyBpbnQgY2hlY2tfc3RhZ2VzKHVuc2lnbmVkIHN0YWdlcywgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IHBvcykKIHsKIAl1bnNpZ25lZCBzZWVuID0gMDsKIAljb25zdCBjaGFyICpuYW1lID0gY2UtPm5hbWU7CkBAIC0zMjEsNyArMzIxLDcgQEAKIAogCS8qIEFueSB1bm1lcmdlZCBwYXRocz8gKi8KIAlmb3IgKHBvcyA9IDA7IHBvcyA8IGFjdGl2ZV9ucjsgcG9zKyspIHsKLQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW3Bvc107CiAJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9NQVRDSEVEKSB7CiAJCQlpZiAoIWNlX3N0YWdlKGNlKSkKIAkJCQljb250aW51ZTsKQEAgLTU4Nyw3ICs1ODcsNyBAQAogCQkJCSAgIHN0cnVjdCBicmFuY2hfaW5mbyAqbmV3KQogewogCXN0cnVjdCBzdHJidWYgbXNnID0gU1RSQlVGX0lOSVQ7Ci0JY29uc3QgY2hhciAqb2xkX2Rlc2M7CisJY29uc3QgY2hhciAqb2xkX2Rlc2MsICpyZWZsb2dfbXNnOwogCWlmIChvcHRzLT5uZXdfYnJhbmNoKSB7CiAJCWlmIChvcHRzLT5uZXdfb3JwaGFuX2JyYW5jaCkgewogCQkJaWYgKG9wdHMtPm5ld19icmFuY2hfbG9nICYmICFsb2dfYWxsX3JlZl91cGRhdGVzKSB7CkBAIC02MjAsOCArNjIwLDEzIEBACiAJb2xkX2Rlc2MgPSBvbGQtPm5hbWU7CiAJaWYgKCFvbGRfZGVzYyAmJiBvbGQtPmNvbW1pdCkKIAkJb2xkX2Rlc2MgPSBzaGExX3RvX2hleChvbGQtPmNvbW1pdC0+b2JqZWN0LnNoYTEpOwotCXN0cmJ1Zl9hZGRmKCZtc2csICJjaGVja291dDogbW92aW5nIGZyb20gJXMgdG8gJXMiLAotCQkgICAgb2xkX2Rlc2MgPyBvbGRfZGVzYyA6ICIoaW52YWxpZCkiLCBuZXctPm5hbWUpOworCisJcmVmbG9nX21zZyA9IGdldGVudigiR0lUX1JFRkxPR19BQ1RJT04iKTsKKwlpZiAoIXJlZmxvZ19tc2cpCisJCXN0cmJ1Zl9hZGRmKCZtc2csICJjaGVja291dDogbW92aW5nIGZyb20gJXMgdG8gJXMiLAorCQkJb2xkX2Rlc2MgPyBvbGRfZGVzYyA6ICIoaW52YWxpZCkiLCBuZXctPm5hbWUpOworCWVsc2UKKwkJc3RyYnVmX2luc2VydCgmbXNnLCAwLCByZWZsb2dfbXNnLCBzdHJsZW4ocmVmbG9nX21zZykpOwogCiAJaWYgKCFzdHJjbXAobmV3LT5uYW1lLCAiSEVBRCIpICYmICFuZXctPnBhdGggJiYgIW9wdHMtPmZvcmNlX2RldGFjaCkgewogCQkvKiBOb3RoaW5nIHRvIGRvLiAqLwpAQCAtODI1LDM4ICs4MzAsNDMgQEAKIH0KIAogc3RydWN0IHRyYWNraW5nX25hbWVfZGF0YSB7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQljaGFyICpyZW1vdGU7CisJLyogY29uc3QgKi8gY2hhciAqc3JjX3JlZjsKKwljaGFyICpkc3RfcmVmOworCXVuc2lnbmVkIGNoYXIgKmRzdF9zaGExOwogCWludCB1bmlxdWU7CiB9OwogCi1zdGF0aWMgaW50IGNoZWNrX3RyYWNraW5nX25hbWUoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKLQkJCSAgICAgICBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCitzdGF0aWMgaW50IGNoZWNrX3RyYWNraW5nX25hbWUoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCB2b2lkICpjYl9kYXRhKQogewogCXN0cnVjdCB0cmFja2luZ19uYW1lX2RhdGEgKmNiID0gY2JfZGF0YTsKLQljb25zdCBjaGFyICpzbGFzaDsKLQotCWlmIChwcmVmaXhjbXAocmVmbmFtZSwgInJlZnMvcmVtb3Rlcy8iKSkKKwlzdHJ1Y3QgcmVmc3BlYyBxdWVyeTsKKwltZW1zZXQoJnF1ZXJ5LCAwLCBzaXplb2Yoc3RydWN0IHJlZnNwZWMpKTsKKwlxdWVyeS5zcmMgPSBjYi0+c3JjX3JlZjsKKwlpZiAocmVtb3RlX2ZpbmRfdHJhY2tpbmcocmVtb3RlLCAmcXVlcnkpIHx8CisJICAgIGdldF9zaGExKHF1ZXJ5LmRzdCwgY2ItPmRzdF9zaGExKSkgeworCQlmcmVlKHF1ZXJ5LmRzdCk7CiAJCXJldHVybiAwOwotCXNsYXNoID0gc3RyY2hyKHJlZm5hbWUgKyAxMywgJy8nKTsKLQlpZiAoIXNsYXNoIHx8IHN0cmNtcChzbGFzaCArIDEsIGNiLT5uYW1lKSkKLQkJcmV0dXJuIDA7Ci0JaWYgKGNiLT5yZW1vdGUpIHsKKwl9CisJaWYgKGNiLT5kc3RfcmVmKSB7CisJCWZyZWUocXVlcnkuZHN0KTsKIAkJY2ItPnVuaXF1ZSA9IDA7CiAJCXJldHVybiAwOwogCX0KLQljYi0+cmVtb3RlID0geHN0cmR1cChyZWZuYW1lKTsKKwljYi0+ZHN0X3JlZiA9IHF1ZXJ5LmRzdDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKnVuaXF1ZV90cmFja2luZ19uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgY29uc3QgY2hhciAqdW5pcXVlX3RyYWNraW5nX25hbWUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKLQlzdHJ1Y3QgdHJhY2tpbmdfbmFtZV9kYXRhIGNiX2RhdGEgPSB7IE5VTEwsIE5VTEwsIDEgfTsKLQljYl9kYXRhLm5hbWUgPSBuYW1lOwotCWZvcl9lYWNoX3JlZihjaGVja190cmFja2luZ19uYW1lLCAmY2JfZGF0YSk7CisJc3RydWN0IHRyYWNraW5nX25hbWVfZGF0YSBjYl9kYXRhID0geyBOVUxMLCBOVUxMLCBOVUxMLCAxIH07CisJY2hhciBzcmNfcmVmW1BBVEhfTUFYXTsKKwlzbnByaW50ZihzcmNfcmVmLCBQQVRIX01BWCwgInJlZnMvaGVhZHMvJXMiLCBuYW1lKTsKKwljYl9kYXRhLnNyY19yZWYgPSBzcmNfcmVmOworCWNiX2RhdGEuZHN0X3NoYTEgPSBzaGExOworCWZvcl9lYWNoX3JlbW90ZShjaGVja190cmFja2luZ19uYW1lLCAmY2JfZGF0YSk7CiAJaWYgKGNiX2RhdGEudW5pcXVlKQotCQlyZXR1cm4gY2JfZGF0YS5yZW1vdGU7Ci0JZnJlZShjYl9kYXRhLnJlbW90ZSk7CisJCXJldHVybiBjYl9kYXRhLmRzdF9yZWY7CisJZnJlZShjYl9kYXRhLmRzdF9yZWYpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC05MTksOCArOTI5LDggQEAKIAkJaWYgKGR3aW1fbmV3X2xvY2FsX2JyYW5jaF9vayAmJgogCQkgICAgIWNoZWNrX2ZpbGVuYW1lKE5VTEwsIGFyZykgJiYKIAkJICAgIGFyZ2MgPT0gMSkgewotCQkJY29uc3QgY2hhciAqcmVtb3RlID0gdW5pcXVlX3RyYWNraW5nX25hbWUoYXJnKTsKLQkJCWlmICghcmVtb3RlIHx8IGdldF9zaGExKHJlbW90ZSwgcmV2KSkKKwkJCWNvbnN0IGNoYXIgKnJlbW90ZSA9IHVuaXF1ZV90cmFja2luZ19uYW1lKGFyZywgcmV2KTsKKwkJCWlmICghcmVtb3RlKQogCQkJCXJldHVybiBhcmdjb3VudDsKIAkJCSpuZXdfYnJhbmNoID0gYXJnOwogCQkJYXJnID0gcmVtb3RlOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jbGVhbi5jIGIvYnVpbHRpbi9jbGVhbi5jCmluZGV4IDA0ZTM5NmIuLmRiYTgzODcgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vY2xlYW4uYworKysgYi9idWlsdGluL2NsZWFuLmMKQEAgLTEzLDExICsxMywxNiBAQAogI2luY2x1ZGUgInJlZnMuaCIKICNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgogI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAiY29sdW1uLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKIAogc3RhdGljIGludCBmb3JjZSA9IC0xOyAvKiB1bnNldCAqLworc3RhdGljIGludCBpbnRlcmFjdGl2ZTsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZGVsX2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29sb3B0czsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJ1aWx0aW5fY2xlYW5fdXNhZ2VbXSA9IHsKLQlOXygiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLW5dIFstcV0gWy1lIDxwYXR0ZXJuPl0gWy14IHwgLVhdIFstLV0gPHBhdGhzPi4uLiIpLAorCU5fKCJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dIDxwYXRocz4uLi4iKSwKIAlOVUxMCiB9OwogCkBAIC0yNywxMSArMzIsMTEyIEBACiBzdGF0aWMgY29uc3QgY2hhciAqbXNnX3dvdWxkX3NraXBfZ2l0X2RpciA9IE5fKCJXb3VsZCBza2lwIHJlcG9zaXRvcnkgJXNcbiIpOwogc3RhdGljIGNvbnN0IGNoYXIgKm1zZ193YXJuX3JlbW92ZV9mYWlsZWQgPSBOXygiZmFpbGVkIHRvIHJlbW92ZSAlcyIpOwogCitzdGF0aWMgaW50IGNsZWFuX3VzZV9jb2xvciA9IC0xOworc3RhdGljIGNoYXIgY2xlYW5fY29sb3JzW11bQ09MT1JfTUFYTEVOXSA9IHsKKwlHSVRfQ09MT1JfUkVTRVQsCisJR0lUX0NPTE9SX05PUk1BTCwJLyogUExBSU4gKi8KKwlHSVRfQ09MT1JfQk9MRF9CTFVFLAkvKiBQUk9NUFQgKi8KKwlHSVRfQ09MT1JfQk9MRCwJCS8qIEhFQURFUiAqLworCUdJVF9DT0xPUl9CT0xEX1JFRCwJLyogSEVMUCAqLworCUdJVF9DT0xPUl9CT0xEX1JFRCwJLyogRVJST1IgKi8KK307CitlbnVtIGNvbG9yX2NsZWFuIHsKKwlDTEVBTl9DT0xPUl9SRVNFVCA9IDAsCisJQ0xFQU5fQ09MT1JfUExBSU4gPSAxLAorCUNMRUFOX0NPTE9SX1BST01QVCA9IDIsCisJQ0xFQU5fQ09MT1JfSEVBREVSID0gMywKKwlDTEVBTl9DT0xPUl9IRUxQID0gNCwKKwlDTEVBTl9DT0xPUl9FUlJPUiA9IDUsCit9OworCisjZGVmaW5lIE1FTlVfT1BUU19TSU5HTEVUT04JCTAxCisjZGVmaW5lIE1FTlVfT1BUU19JTU1FRElBVEUJCTAyCisjZGVmaW5lIE1FTlVfT1BUU19MSVNUX09OTFkJCTA0CisKK3N0cnVjdCBtZW51X29wdHMgeworCWNvbnN0IGNoYXIgKmhlYWRlcjsKKwljb25zdCBjaGFyICpwcm9tcHQ7CisJaW50IGZsYWdzOworfTsKKworI2RlZmluZSBNRU5VX1JFVFVSTl9OT19MT09QCQkxMAorCitzdHJ1Y3QgbWVudV9pdGVtIHsKKwljaGFyIGhvdGtleTsKKwljb25zdCBjaGFyICp0aXRsZTsKKwlpbnQgc2VsZWN0ZWQ7CisJaW50ICgqZm4pKCk7Cit9OworCitlbnVtIG1lbnVfc3R1ZmZfdHlwZSB7CisJTUVOVV9TVFVGRl9UWVBFX1NUUklOR19MSVNUID0gMSwKKwlNRU5VX1NUVUZGX1RZUEVfTUVOVV9JVEVNCit9OworCitzdHJ1Y3QgbWVudV9zdHVmZiB7CisJZW51bSBtZW51X3N0dWZmX3R5cGUgdHlwZTsKKwlpbnQgbnI7CisJdm9pZCAqc3R1ZmY7Cit9OworCitzdGF0aWMgaW50IHBhcnNlX2NsZWFuX2NvbG9yX3Nsb3QoY29uc3QgY2hhciAqdmFyKQoreworCWlmICghc3RyY2FzZWNtcCh2YXIsICJyZXNldCIpKQorCQlyZXR1cm4gQ0xFQU5fQ09MT1JfUkVTRVQ7CisJaWYgKCFzdHJjYXNlY21wKHZhciwgInBsYWluIikpCisJCXJldHVybiBDTEVBTl9DT0xPUl9QTEFJTjsKKwlpZiAoIXN0cmNhc2VjbXAodmFyLCAicHJvbXB0IikpCisJCXJldHVybiBDTEVBTl9DT0xPUl9QUk9NUFQ7CisJaWYgKCFzdHJjYXNlY21wKHZhciwgImhlYWRlciIpKQorCQlyZXR1cm4gQ0xFQU5fQ09MT1JfSEVBREVSOworCWlmICghc3RyY2FzZWNtcCh2YXIsICJoZWxwIikpCisJCXJldHVybiBDTEVBTl9DT0xPUl9IRUxQOworCWlmICghc3RyY2FzZWNtcCh2YXIsICJlcnJvciIpKQorCQlyZXR1cm4gQ0xFQU5fQ09MT1JfRVJST1I7CisJcmV0dXJuIC0xOworfQorCiBzdGF0aWMgaW50IGdpdF9jbGVhbl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCiB7Ci0JaWYgKCFzdHJjbXAodmFyLCAiY2xlYW4ucmVxdWlyZWZvcmNlIikpCisJaWYgKCFwcmVmaXhjbXAodmFyLCAiY29sdW1uLiIpKQorCQlyZXR1cm4gZ2l0X2NvbHVtbl9jb25maWcodmFyLCB2YWx1ZSwgImNsZWFuIiwgJmNvbG9wdHMpOworCisJLyogaG9ub3JzIHRoZSBjb2xvci5pbnRlcmFjdGl2ZSogY29uZmlnIHZhcmlhYmxlcyB3aGljaCBhbHNvCisJICAgYXBwbGllZCBpbiBnaXQtYWRkLS1pbnRlcmFjdGl2ZSBhbmQgZ2l0LXN0YXNoICovCisJaWYgKCFzdHJjbXAodmFyLCAiY29sb3IuaW50ZXJhY3RpdmUiKSkgeworCQljbGVhbl91c2VfY29sb3IgPSBnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghcHJlZml4Y21wKHZhciwgImNvbG9yLmludGVyYWN0aXZlLiIpKSB7CisJCWludCBzbG90ID0gcGFyc2VfY2xlYW5fY29sb3Jfc2xvdCh2YXIgKworCQkJCQkJICBzdHJsZW4oImNvbG9yLmludGVyYWN0aXZlLiIpKTsKKwkJaWYgKHNsb3QgPCAwKQorCQkJcmV0dXJuIDA7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJY29sb3JfcGFyc2UodmFsdWUsIHZhciwgY2xlYW5fY29sb3JzW3Nsb3RdKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY2xlYW4ucmVxdWlyZWZvcmNlIikpIHsKIAkJZm9yY2UgPSAhZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOwotCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBpbnNwZWN0IHRoZSBjb2xvci51aSBjb25maWcgdmFyaWFibGUgYW5kIG90aGVycyAqLworCXJldHVybiBnaXRfY29sb3JfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY2xlYW5fZ2V0X2NvbG9yKGVudW0gY29sb3JfY2xlYW4gaXgpCit7CisJaWYgKHdhbnRfY29sb3IoY2xlYW5fdXNlX2NvbG9yKSkKKwkJcmV0dXJuIGNsZWFuX2NvbG9yc1tpeF07CisJcmV0dXJuICIiOworfQorCitzdGF0aWMgdm9pZCBjbGVhbl9wcmludF9jb2xvcihlbnVtIGNvbG9yX2NsZWFuIGl4KQoreworCXByaW50ZigiJXMiLCBjbGVhbl9nZXRfY29sb3IoaXgpKTsKIH0KIAogc3RhdGljIGludCBleGNsdWRlX2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCkBAIC01Niw3ICsxNjIsNyBAQAogCWlmICgoZm9yY2VfZmxhZyAmIFJFTU9WRV9ESVJfS0VFUF9ORVNURURfR0lUKSAmJgogCQkJIXJlc29sdmVfZ2l0bGlua19yZWYocGF0aC0+YnVmLCAiSEVBRCIsIHN1Ym1vZHVsZV9oZWFkKSkgewogCQlpZiAoIXF1aWV0KSB7Ci0JCQlxdW90ZV9wYXRoX3JlbGF0aXZlKHBhdGgtPmJ1Ziwgc3RybGVuKHBhdGgtPmJ1ZiksICZxdW90ZWQsIHByZWZpeCk7CisJCQlxdW90ZV9wYXRoX3JlbGF0aXZlKHBhdGgtPmJ1ZiwgcHJlZml4LCAmcXVvdGVkKTsKIAkJCXByaW50ZihkcnlfcnVuID8gIF8obXNnX3dvdWxkX3NraXBfZ2l0X2RpcikgOiBfKG1zZ19za2lwX2dpdF9kaXIpLAogCQkJCQlxdW90ZWQuYnVmKTsKIAkJfQpAQCAtNzAsNyArMTc2LDcgQEAKIAkJLyogYW4gZW1wdHkgZGlyIGNvdWxkIGJlIHJlbW92ZWQgZXZlbiBpZiBpdCBpcyB1bnJlYWRibGUgKi8KIAkJcmVzID0gZHJ5X3J1biA/IDAgOiBybWRpcihwYXRoLT5idWYpOwogCQlpZiAocmVzKSB7Ci0JCQlxdW90ZV9wYXRoX3JlbGF0aXZlKHBhdGgtPmJ1Ziwgc3RybGVuKHBhdGgtPmJ1ZiksICZxdW90ZWQsIHByZWZpeCk7CisJCQlxdW90ZV9wYXRoX3JlbGF0aXZlKHBhdGgtPmJ1ZiwgcHJlZml4LCAmcXVvdGVkKTsKIAkJCXdhcm5pbmcoXyhtc2dfd2Fybl9yZW1vdmVfZmFpbGVkKSwgcXVvdGVkLmJ1Zik7CiAJCQkqZGlyX2dvbmUgPSAwOwogCQl9CkBAIC05NCw3ICsyMDAsNyBAQAogCQkJaWYgKHJlbW92ZV9kaXJzKHBhdGgsIHByZWZpeCwgZm9yY2VfZmxhZywgZHJ5X3J1biwgcXVpZXQsICZnb25lKSkKIAkJCQlyZXQgPSAxOwogCQkJaWYgKGdvbmUpIHsKLQkJCQlxdW90ZV9wYXRoX3JlbGF0aXZlKHBhdGgtPmJ1Ziwgc3RybGVuKHBhdGgtPmJ1ZiksICZxdW90ZWQsIHByZWZpeCk7CisJCQkJcXVvdGVfcGF0aF9yZWxhdGl2ZShwYXRoLT5idWYsIHByZWZpeCwgJnF1b3RlZCk7CiAJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZkZWxzLCBxdW90ZWQuYnVmKTsKIAkJCX0gZWxzZQogCQkJCSpkaXJfZ29uZSA9IDA7CkBAIC0xMDIsMTAgKzIwOCwxMCBAQAogCQl9IGVsc2UgewogCQkJcmVzID0gZHJ5X3J1biA/IDAgOiB1bmxpbmsocGF0aC0+YnVmKTsKIAkJCWlmICghcmVzKSB7Ci0JCQkJcXVvdGVfcGF0aF9yZWxhdGl2ZShwYXRoLT5idWYsIHN0cmxlbihwYXRoLT5idWYpLCAmcXVvdGVkLCBwcmVmaXgpOworCQkJCXF1b3RlX3BhdGhfcmVsYXRpdmUocGF0aC0+YnVmLCBwcmVmaXgsICZxdW90ZWQpOwogCQkJCXN0cmluZ19saXN0X2FwcGVuZCgmZGVscywgcXVvdGVkLmJ1Zik7CiAJCQl9IGVsc2UgewotCQkJCXF1b3RlX3BhdGhfcmVsYXRpdmUocGF0aC0+YnVmLCBzdHJsZW4ocGF0aC0+YnVmKSwgJnF1b3RlZCwgcHJlZml4KTsKKwkJCQlxdW90ZV9wYXRoX3JlbGF0aXZlKHBhdGgtPmJ1ZiwgcHJlZml4LCAmcXVvdGVkKTsKIAkJCQl3YXJuaW5nKF8obXNnX3dhcm5fcmVtb3ZlX2ZhaWxlZCksIHF1b3RlZC5idWYpOwogCQkJCSpkaXJfZ29uZSA9IDA7CiAJCQkJcmV0ID0gMTsKQEAgLTEyNyw3ICsyMzMsNyBAQAogCQlpZiAoIXJlcykKIAkJCSpkaXJfZ29uZSA9IDE7CiAJCWVsc2UgewotCQkJcXVvdGVfcGF0aF9yZWxhdGl2ZShwYXRoLT5idWYsIHN0cmxlbihwYXRoLT5idWYpLCAmcXVvdGVkLCBwcmVmaXgpOworCQkJcXVvdGVfcGF0aF9yZWxhdGl2ZShwYXRoLT5idWYsIHByZWZpeCwgJnF1b3RlZCk7CiAJCQl3YXJuaW5nKF8obXNnX3dhcm5fcmVtb3ZlX2ZhaWxlZCksIHF1b3RlZC5idWYpOwogCQkJKmRpcl9nb25lID0gMDsKIAkJCXJldCA9IDE7CkBAIC0xNDIsMjQgKzI0OCw2MDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBwcmV0dHlfcHJpbnRfZGVscyh2b2lkKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpxbmFtZTsKKwlzdHJ1Y3QgY29sdW1uX29wdGlvbnMgY29wdHM7CisKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZkZWxfbGlzdCkgeworCQlxbmFtZSA9IHF1b3RlX3BhdGhfcmVsYXRpdmUoaXRlbS0+c3RyaW5nLCBOVUxMLCAmYnVmKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZsaXN0LCBxbmFtZSk7CisJfQorCisJLyoKKwkgKiBhbHdheXMgZW5hYmxlIGNvbHVtbiBkaXNwbGF5LCB3ZSBvbmx5IGNvbnN1bHQgY29sdW1uLioKKwkgKiBhYm91dCBsYXlvdXQgc3RyYXRlZ3kgYW5kIHN0dWZmCisJICovCisJY29sb3B0cyA9IChjb2xvcHRzICYgfkNPTF9FTkFCTEVfTUFTSykgfCBDT0xfRU5BQkxFRDsKKwltZW1zZXQoJmNvcHRzLCAwLCBzaXplb2YoY29wdHMpKTsKKwljb3B0cy5pbmRlbnQgPSAiICAiOworCWNvcHRzLnBhZGRpbmcgPSAyOworCXByaW50X2NvbHVtbnMoJmxpc3QsIGNvbG9wdHMsICZjb3B0cyk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QsIDApOworfQorCitzdGF0aWMgdm9pZCBwcmV0dHlfcHJpbnRfbWVudXMoc3RydWN0IHN0cmluZ19saXN0ICptZW51X2xpc3QpCit7CisJdW5zaWduZWQgaW50IGxvY2FsX2NvbG9wdHMgPSAwOworCXN0cnVjdCBjb2x1bW5fb3B0aW9ucyBjb3B0czsKKworCWxvY2FsX2NvbG9wdHMgPSBDT0xfRU5BQkxFRCB8IENPTF9ST1c7CisJbWVtc2V0KCZjb3B0cywgMCwgc2l6ZW9mKGNvcHRzKSk7CisJY29wdHMuaW5kZW50ID0gIiAgIjsKKwljb3B0cy5wYWRkaW5nID0gMjsKKwlwcmludF9jb2x1bW5zKG1lbnVfbGlzdCwgbG9jYWxfY29sb3B0cywgJmNvcHRzKTsKK30KKworc3RhdGljIHZvaWQgcHJvbXB0X2hlbHBfY21kKGludCBzaW5nbGV0b24pCit7CisJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfSEVMUCk7CisJcHJpbnRmX2xuKHNpbmdsZXRvbiA/CisJCSAgXygiUHJvbXB0IGhlbHA6XG4iCisJCSAgICAiMSAgICAgICAgICAtIHNlbGVjdCBhIG51bWJlcmVkIGl0ZW1cbiIKKwkJICAgICJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorCQkgICAgIiAgICAgICAgICAgLSAoZW1wdHkpIHNlbGVjdCBub3RoaW5nIikgOgorCQkgIF8oIlByb21wdCBoZWxwOlxuIgorCQkgICAgIjEgICAgICAgICAgLSBzZWxlY3QgYSBzaW5nbGUgaXRlbVxuIgorCQkgICAgIjMtNSAgICAgICAgLSBzZWxlY3QgYSByYW5nZSBvZiBpdGVtc1xuIgorCQkgICAgIjItMyw2LTkgICAgLSBzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzXG4iCisJCSAgICAiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKwkJICAgICItLi4uICAgICAgIC0gdW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zXG4iCisJCSAgICAiKiAgICAgICAgICAtIGNob29zZSBhbGwgaXRlbXNcbiIKKwkJICAgICIgICAgICAgICAgIC0gKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nIikpOworCWNsZWFuX3ByaW50X2NvbG9yKENMRUFOX0NPTE9SX1JFU0VUKTsKK30KKworLyoKKyAqIGRpc3BsYXkgbWVudSBzdHVmZiB3aXRoIG51bWJlciBwcmVmaXggYW5kIGhvdGtleSBoaWdobGlnaHQKKyAqLworc3RhdGljIHZvaWQgcHJpbnRfaGlnaGxpZ2h0X21lbnVfc3R1ZmYoc3RydWN0IG1lbnVfc3R1ZmYgKnN0dWZmLCBpbnQgKipjaG9zZW4pCit7CisJc3RydWN0IHN0cmluZ19saXN0IG1lbnVfbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBzdHJidWYgbWVudSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IG1lbnVfaXRlbSAqbWVudV9pdGVtOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzdHJpbmdfbGlzdF9pdGVtOworCWludCBpOworCisJc3dpdGNoIChzdHVmZi0+dHlwZSkgeworCWRlZmF1bHQ6CisJCWRpZSgiQmFkIHR5cGUgb2YgbWVudV9zdGFmZiB3aGVuIHByaW50IG1lbnUiKTsKKwljYXNlIE1FTlVfU1RVRkZfVFlQRV9NRU5VX0lURU06CisJCW1lbnVfaXRlbSA9IChzdHJ1Y3QgbWVudV9pdGVtICopc3R1ZmYtPnN0dWZmOworCQlmb3IgKGkgPSAwOyBpIDwgc3R1ZmYtPm5yOyBpKyssIG1lbnVfaXRlbSsrKSB7CisJCQljb25zdCBjaGFyICpwOworCQkJaW50IGhpZ2hsaWdodGVkID0gMDsKKworCQkJcCA9IG1lbnVfaXRlbS0+dGl0bGU7CisJCQlpZiAoKCpjaG9zZW4pW2ldIDwgMCkKKwkJCQkoKmNob3NlbilbaV0gPSBtZW51X2l0ZW0tPnNlbGVjdGVkID8gMSA6IDA7CisJCQlzdHJidWZfYWRkZigmbWVudSwgIiVzJTJkOiAiLCAoKmNob3NlbilbaV0gPyAiKiIgOiAiICIsIGkrMSk7CisJCQlmb3IgKDsgKnA7IHArKykgeworCQkJCWlmICghaGlnaGxpZ2h0ZWQgJiYgKnAgPT0gbWVudV9pdGVtLT5ob3RrZXkpIHsKKwkJCQkJc3RyYnVmX2FkZHN0cigmbWVudSwgY2xlYW5fZ2V0X2NvbG9yKENMRUFOX0NPTE9SX1BST01QVCkpOworCQkJCQlzdHJidWZfYWRkY2goJm1lbnUsICpwKTsKKwkJCQkJc3RyYnVmX2FkZHN0cigmbWVudSwgY2xlYW5fZ2V0X2NvbG9yKENMRUFOX0NPTE9SX1JFU0VUKSk7CisJCQkJCWhpZ2hsaWdodGVkID0gMTsKKwkJCQl9IGVsc2UgeworCQkJCQlzdHJidWZfYWRkY2goJm1lbnUsICpwKTsKKwkJCQl9CisJCQl9CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJm1lbnVfbGlzdCwgbWVudS5idWYpOworCQkJc3RyYnVmX3Jlc2V0KCZtZW51KTsKKwkJfQorCQlicmVhazsKKwljYXNlIE1FTlVfU1RVRkZfVFlQRV9TVFJJTkdfTElTVDoKKwkJaSA9IDA7CisJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oc3RyaW5nX2xpc3RfaXRlbSwgKHN0cnVjdCBzdHJpbmdfbGlzdCAqKXN0dWZmLT5zdHVmZikgeworCQkJaWYgKCgqY2hvc2VuKVtpXSA8IDApCisJCQkJKCpjaG9zZW4pW2ldID0gMDsKKwkJCXN0cmJ1Zl9hZGRmKCZtZW51LCAiJXMlMmQ6ICVzIiwKKwkJCQkgICAgKCpjaG9zZW4pW2ldID8gIioiIDogIiAiLCBpKzEsIHN0cmluZ19saXN0X2l0ZW0tPnN0cmluZyk7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJm1lbnVfbGlzdCwgbWVudS5idWYpOworCQkJc3RyYnVmX3Jlc2V0KCZtZW51KTsKKwkJCWkrKzsKKwkJfQorCQlicmVhazsKKwl9CisKKwlwcmV0dHlfcHJpbnRfbWVudXMoJm1lbnVfbGlzdCk7CisKKwlzdHJidWZfcmVsZWFzZSgmbWVudSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyaW5nX2xpc3RfY2xlYXIoJm1lbnVfbGlzdCwgMCk7Cit9CisKKy8qCisgKiBQYXJzZSB1c2VyIGlucHV0LCBhbmQgcmV0dXJuIGNob2ljZShzKSBmb3IgbWVudSAobWVudV9zdHVmZikuCisgKgorICogSW5wdXQKKyAqICAgICAoZm9yIHNpbmdsZSBjaG9pY2UpCisgKiAgICAgICAgIDEgICAgICAgICAgLSBzZWxlY3QgYSBudW1iZXJlZCBpdGVtCisgKiAgICAgICAgIGZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiBtZW51IHRpdGxlCisgKiAgICAgICAgICAgICAgICAgICAgLSAoZW1wdHkpIHNlbGVjdCBub3RoaW5nCisgKgorICogICAgIChmb3IgbXVsdGlwbGUgY2hvaWNlKQorICogICAgICAgICAxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW0KKyAqICAgICAgICAgMy01ICAgICAgICAtIHNlbGVjdCBhIHJhbmdlIG9mIGl0ZW1zCisgKiAgICAgICAgIDItMyw2LTkgICAgLSBzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzCisgKiAgICAgICAgIGZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiBtZW51IHRpdGxlCisgKiAgICAgICAgIC0uLi4gICAgICAgLSB1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXMKKyAqICAgICAgICAgKiAgICAgICAgICAtIGNob29zZSBhbGwgaXRlbXMKKyAqICAgICAgICAgICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZworICoKKyAqIFRoZSBwYXJzZSByZXN1bHQgd2lsbCBiZSBzYXZlZCBpbiBhcnJheSAqKmNob3NlbiwgYW5kCisgKiByZXR1cm4gbnVtYmVyIG9mIHRvdGFsIHNlbGVjdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfY2hvaWNlKHN0cnVjdCBtZW51X3N0dWZmICptZW51X3N0dWZmLAorCQkJaW50IGlzX3NpbmdsZSwKKwkJCXN0cnVjdCBzdHJidWYgaW5wdXQsCisJCQlpbnQgKipjaG9zZW4pCit7CisJc3RydWN0IHN0cmJ1ZiAqKmNob2ljZV9saXN0LCAqKnB0cjsKKwlzdHJ1Y3QgbWVudV9pdGVtICptZW51X2l0ZW07CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnN0cmluZ19saXN0X2l0ZW07CisJaW50IG5yID0gMDsKKwlpbnQgaTsKKworCWlmIChpc19zaW5nbGUpIHsKKwkJY2hvaWNlX2xpc3QgPSBzdHJidWZfc3BsaXRfbWF4KCZpbnB1dCwgJ1xuJywgMCk7CisJfSBlbHNlIHsKKwkJY2hhciAqcCA9IGlucHV0LmJ1ZjsKKwkJZG8geworCQkJaWYgKCpwID09ICcsJykKKwkJCQkqcCA9ICcgJzsKKwkJfSB3aGlsZSAoKnArKyk7CisJCWNob2ljZV9saXN0ID0gc3RyYnVmX3NwbGl0X21heCgmaW5wdXQsICcgJywgMCk7CisJfQorCisJZm9yIChwdHIgPSBjaG9pY2VfbGlzdDsgKnB0cjsgcHRyKyspIHsKKwkJY2hhciAqcDsKKwkJaW50IGNob29zZSA9IDE7CisJCWludCBib3R0b20gPSAwLCB0b3AgPSAwOworCQlpbnQgaXNfcmFuZ2UsIGlzX251bWJlcjsKKworCQlzdHJidWZfdHJpbSgqcHRyKTsKKwkJaWYgKCEoKnB0ciktPmxlbikKKwkJCWNvbnRpbnVlOworCisJCS8qIElucHV0IHRoYXQgYmVnaW5zIHdpdGggJy0nOyB1bmNob29zZSAqLworCQlpZiAoKigqcHRyKS0+YnVmID09ICctJykgeworCQkJY2hvb3NlID0gMDsKKwkJCXN0cmJ1Zl9yZW1vdmUoKCpwdHIpLCAwLCAxKTsKKwkJfQorCisJCWlzX3JhbmdlID0gMDsKKwkJaXNfbnVtYmVyID0gMTsKKwkJZm9yIChwID0gKCpwdHIpLT5idWY7ICpwOyBwKyspIHsKKwkJCWlmICgnLScgPT0gKnApIHsKKwkJCQlpZiAoIWlzX3JhbmdlKSB7CisJCQkJCWlzX3JhbmdlID0gMTsKKwkJCQkJaXNfbnVtYmVyID0gMDsKKwkJCQl9IGVsc2UgeworCQkJCQlpc19udW1iZXIgPSAwOworCQkJCQlpc19yYW5nZSA9IDA7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoIWlzZGlnaXQoKnApKSB7CisJCQkJaXNfbnVtYmVyID0gMDsKKwkJCQlpc19yYW5nZSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoaXNfbnVtYmVyKSB7CisJCQlib3R0b20gPSBhdG9pKCgqcHRyKS0+YnVmKTsKKwkJCXRvcCA9IGJvdHRvbTsKKwkJfSBlbHNlIGlmIChpc19yYW5nZSkgeworCQkJYm90dG9tID0gYXRvaSgoKnB0ciktPmJ1Zik7CisJCQkvKiBhIHJhbmdlIGNhbiBiZSBzcGVjaWZpZWQgbGlrZSA1LTcgb3IgNS0gKi8KKwkJCWlmICghKihzdHJjaHIoKCpwdHIpLT5idWYsICctJykgKyAxKSkKKwkJCQl0b3AgPSBtZW51X3N0dWZmLT5ucjsKKwkJCWVsc2UKKwkJCQl0b3AgPSBhdG9pKHN0cmNocigoKnB0ciktPmJ1ZiwgJy0nKSArIDEpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoKCpwdHIpLT5idWYsICIqIikpIHsKKwkJCWJvdHRvbSA9IDE7CisJCQl0b3AgPSBtZW51X3N0dWZmLT5ucjsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAobWVudV9zdHVmZi0+dHlwZSkgeworCQkJZGVmYXVsdDoKKwkJCQlkaWUoIkJhZCB0eXBlIG9mIG1lbnVfc3R1ZmYgd2hlbiBwYXJzZSBjaG9pY2UiKTsKKwkJCWNhc2UgTUVOVV9TVFVGRl9UWVBFX01FTlVfSVRFTToKKwkJCQltZW51X2l0ZW0gPSAoc3RydWN0IG1lbnVfaXRlbSAqKW1lbnVfc3R1ZmYtPnN0dWZmOworCQkJCWZvciAoaSA9IDA7IGkgPCBtZW51X3N0dWZmLT5ucjsgaSsrLCBtZW51X2l0ZW0rKykgeworCQkJCQlpZiAoKCgqcHRyKS0+bGVuID09IDEgJiYKKwkJCQkJICAgICAqKCpwdHIpLT5idWYgPT0gbWVudV9pdGVtLT5ob3RrZXkpIHx8CisJCQkJCSAgICAhc3RyY2FzZWNtcCgoKnB0ciktPmJ1ZiwgbWVudV9pdGVtLT50aXRsZSkpIHsKKwkJCQkJCWJvdHRvbSA9IGkgKyAxOworCQkJCQkJdG9wID0gYm90dG9tOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIE1FTlVfU1RVRkZfVFlQRV9TVFJJTkdfTElTVDoKKwkJCQlzdHJpbmdfbGlzdF9pdGVtID0gKChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKiltZW51X3N0dWZmLT5zdHVmZiktPml0ZW1zOworCQkJCWZvciAoaSA9IDA7IGkgPCBtZW51X3N0dWZmLT5ucjsgaSsrLCBzdHJpbmdfbGlzdF9pdGVtKyspIHsKKwkJCQkJaWYgKCFzdHJjYXNlY21wKCgqcHRyKS0+YnVmLCBzdHJpbmdfbGlzdF9pdGVtLT5zdHJpbmcpKSB7CisJCQkJCQlib3R0b20gPSBpICsgMTsKKwkJCQkJCXRvcCA9IGJvdHRvbTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKHRvcCA8PSAwIHx8IGJvdHRvbSA8PSAwIHx8IHRvcCA+IG1lbnVfc3R1ZmYtPm5yIHx8IGJvdHRvbSA+IHRvcCB8fAorCQkgICAgKGlzX3NpbmdsZSAmJiBib3R0b20gIT0gdG9wKSkgeworCQkJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfRVJST1IpOworCQkJcHJpbnRmX2xuKF8oIkh1aCAoJXMpPyIpLCAoKnB0ciktPmJ1Zik7CisJCQljbGVhbl9wcmludF9jb2xvcihDTEVBTl9DT0xPUl9SRVNFVCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWZvciAoaSA9IGJvdHRvbTsgaSA8PSB0b3A7IGkrKykKKwkJCSgqY2hvc2VuKVtpLTFdID0gY2hvb3NlOworCX0KKworCXN0cmJ1Zl9saXN0X2ZyZWUoY2hvaWNlX2xpc3QpOworCisJZm9yIChpID0gMDsgaSA8IG1lbnVfc3R1ZmYtPm5yOyBpKyspCisJCW5yICs9ICgqY2hvc2VuKVtpXTsKKwlyZXR1cm4gbnI7Cit9CisKKy8qCisgKiBJbXBsZW1lbnQgYSBnaXQtYWRkLWludGVyYWN0aXZlIGNvbXBhdGlibGUgVUksIHdoaWNoIGlzIGJvcnJvd2VkCisgKiBmcm9tIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwuCisgKgorICogUmV0dXJuIHZhbHVlOgorICoKKyAqICAgLSBSZXR1cm4gYW4gYXJyYXkgb2YgaW50ZWdlcnMKKyAqICAgLSAsIGFuZCBpdCBpcyB1cCB0byB5b3UgdG8gZnJlZSB0aGUgYWxsb2NhdGVkIG1lbW9yeS4KKyAqICAgLSBUaGUgYXJyYXkgZW5kcyB3aXRoIEVPRi4KKyAqICAgLSBJZiB1c2VyIHByZXNzZWQgQ1RSTC1EIChpLmUuIEVPRiksIG5vIHNlbGVjdGlvbiByZXR1cm5lZC4KKyAqLworc3RhdGljIGludCAqbGlzdF9hbmRfY2hvb3NlKHN0cnVjdCBtZW51X29wdHMgKm9wdHMsIHN0cnVjdCBtZW51X3N0dWZmICpzdHVmZikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGNob2ljZSA9IFNUUkJVRl9JTklUOworCWludCAqY2hvc2VuLCAqcmVzdWx0OworCWludCBuciA9IDA7CisJaW50IGVvZiA9IDA7CisJaW50IGk7CisKKwljaG9zZW4gPSB4bWFsbG9jKHNpemVvZihpbnQpICogc3R1ZmYtPm5yKTsKKwkvKiBzZXQgY2hvc2VuIGFzIHVuaW5pdGlhbGl6ZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3R1ZmYtPm5yOyBpKyspCisJCWNob3NlbltpXSA9IC0xOworCisJZm9yICg7OykgeworCQlpZiAob3B0cy0+aGVhZGVyKSB7CisJCQlwcmludGZfbG4oIiVzJXMlcyIsCisJCQkJICBjbGVhbl9nZXRfY29sb3IoQ0xFQU5fQ09MT1JfSEVBREVSKSwKKwkJCQkgIF8ob3B0cy0+aGVhZGVyKSwKKwkJCQkgIGNsZWFuX2dldF9jb2xvcihDTEVBTl9DT0xPUl9SRVNFVCkpOworCQl9CisKKwkJLyogY2hvc2VuIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYnkgcHJpbnRfaGlnaGxpZ2h0X21lbnVfc3R1ZmYgKi8KKwkJcHJpbnRfaGlnaGxpZ2h0X21lbnVfc3R1ZmYoc3R1ZmYsICZjaG9zZW4pOworCisJCWlmIChvcHRzLT5mbGFncyAmIE1FTlVfT1BUU19MSVNUX09OTFkpCisJCQlicmVhazsKKworCQlpZiAob3B0cy0+cHJvbXB0KSB7CisJCQlwcmludGYoIiVzJXMlcyVzIiwKKwkJCSAgICAgICBjbGVhbl9nZXRfY29sb3IoQ0xFQU5fQ09MT1JfUFJPTVBUKSwKKwkJCSAgICAgICBfKG9wdHMtPnByb21wdCksCisJCQkgICAgICAgb3B0cy0+ZmxhZ3MgJiBNRU5VX09QVFNfU0lOR0xFVE9OID8gIj4gIiA6ICI+PiAiLAorCQkJICAgICAgIGNsZWFuX2dldF9jb2xvcihDTEVBTl9DT0xPUl9SRVNFVCkpOworCQl9CisKKwkJaWYgKHN0cmJ1Zl9nZXRsaW5lKCZjaG9pY2UsIHN0ZGluLCAnXG4nKSAhPSBFT0YpIHsKKwkJCXN0cmJ1Zl90cmltKCZjaG9pY2UpOworCQl9IGVsc2UgeworCQkJZW9mID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogaGVscCBmb3IgcHJvbXB0ICovCisJCWlmICghc3RyY21wKGNob2ljZS5idWYsICI/IikpIHsKKwkJCXByb21wdF9oZWxwX2NtZChvcHRzLT5mbGFncyAmIE1FTlVfT1BUU19TSU5HTEVUT04pOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBmb3IgYSBtdWx0aXBsZS1jaG9pY2UgbWVudSwgcHJlc3MgRU5URVIgKGVtcHR5KSB3aWxsIHJldHVybiBiYWNrICovCisJCWlmICghKG9wdHMtPmZsYWdzICYgTUVOVV9PUFRTX1NJTkdMRVRPTikgJiYgIWNob2ljZS5sZW4pCisJCQlicmVhazsKKworCQluciA9IHBhcnNlX2Nob2ljZShzdHVmZiwKKwkJCQkgIG9wdHMtPmZsYWdzICYgTUVOVV9PUFRTX1NJTkdMRVRPTiwKKwkJCQkgIGNob2ljZSwKKwkJCQkgICZjaG9zZW4pOworCisJCWlmIChvcHRzLT5mbGFncyAmIE1FTlVfT1BUU19TSU5HTEVUT04pIHsKKwkJCWlmIChucikKKwkJCQlicmVhazsKKwkJfSBlbHNlIGlmIChvcHRzLT5mbGFncyAmIE1FTlVfT1BUU19JTU1FRElBVEUpIHsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGVvZikgeworCQlyZXN1bHQgPSB4bWFsbG9jKHNpemVvZihpbnQpKTsKKwkJKnJlc3VsdCA9IEVPRjsKKwl9IGVsc2UgeworCQlpbnQgaiA9IDA7CisKKwkJLyoKKwkJICogcmVjYWxjdWxhdGUgbnIsIGlmIHJldHVybiBiYWNrIGZyb20gbWVudSBkaXJlY3RseSB3aXRoCisJCSAqIGRlZmF1bHQgc2VsZWN0aW9ucy4KKwkJICovCisJCWlmICghbnIpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBzdHVmZi0+bnI7IGkrKykKKwkJCQluciArPSBjaG9zZW5baV07CisJCX0KKworCQlyZXN1bHQgPSB4bWFsbG9jKHNpemVvZihpbnQpICogKG5yICsgMSkpOworCQltZW1zZXQocmVzdWx0LCAwLCBzaXplb2YoaW50KSAqIChuciArIDEpKTsKKwkJZm9yIChpID0gMDsgaSA8IHN0dWZmLT5uciAmJiBqIDwgbnI7IGkrKykgeworCQkJaWYgKGNob3NlbltpXSkKKwkJCQlyZXN1bHRbaisrXSA9IGk7CisJCX0KKwkJcmVzdWx0W2pdID0gRU9GOworCX0KKworCWZyZWUoY2hvc2VuKTsKKwlzdHJidWZfcmVsZWFzZSgmY2hvaWNlKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGNsZWFuX2NtZCh2b2lkKQoreworCXJldHVybiBNRU5VX1JFVFVSTl9OT19MT09QOworfQorCitzdGF0aWMgaW50IGZpbHRlcl9ieV9wYXR0ZXJuc19jbWQodm9pZCkKK3sKKwlzdHJ1Y3QgZGlyX3N0cnVjdCBkaXI7CisJc3RydWN0IHN0cmJ1ZiBjb25maXJtID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiAqKmlnbm9yZV9saXN0OworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCXN0cnVjdCBleGNsdWRlX2xpc3QgKmVsOworCWludCBjaGFuZ2VkID0gLTEsIGk7CisKKwlmb3IgKDs7KSB7CisJCWlmICghZGVsX2xpc3QubnIpCisJCQlicmVhazsKKworCQlpZiAoY2hhbmdlZCkKKwkJCXByZXR0eV9wcmludF9kZWxzKCk7CisKKwkJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfUFJPTVBUKTsKKwkJcHJpbnRmKF8oIklucHV0IGlnbm9yZSBwYXR0ZXJucz4+ICIpKTsKKwkJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfUkVTRVQpOworCQlpZiAoc3RyYnVmX2dldGxpbmUoJmNvbmZpcm0sIHN0ZGluLCAnXG4nKSAhPSBFT0YpCisJCQlzdHJidWZfdHJpbSgmY29uZmlybSk7CisJCWVsc2UKKwkJCXB1dGNoYXIoJ1xuJyk7CisKKwkJLyogcXVpdCBmaWx0ZXJfYnlfcGF0dGVybiBtb2RlIGlmIHByZXNzIEVOVEVSIG9yIEN0cmwtRCAqLworCQlpZiAoIWNvbmZpcm0ubGVuKQorCQkJYnJlYWs7CisKKwkJbWVtc2V0KCZkaXIsIDAsIHNpemVvZihkaXIpKTsKKwkJZWwgPSBhZGRfZXhjbHVkZV9saXN0KCZkaXIsIEVYQ19DTURMLCAibWFudWFsIGV4Y2x1ZGUiKTsKKwkJaWdub3JlX2xpc3QgPSBzdHJidWZfc3BsaXRfbWF4KCZjb25maXJtLCAnICcsIDApOworCisJCWZvciAoaSA9IDA7IGlnbm9yZV9saXN0W2ldOyBpKyspIHsKKwkJCXN0cmJ1Zl90cmltKGlnbm9yZV9saXN0W2ldKTsKKwkJCWlmICghaWdub3JlX2xpc3RbaV0tPmxlbikKKwkJCQljb250aW51ZTsKKworCQkJYWRkX2V4Y2x1ZGUoaWdub3JlX2xpc3RbaV0tPmJ1ZiwgIiIsIDAsIGVsLCAtKGkrMSkpOworCQl9CisKKwkJY2hhbmdlZCA9IDA7CisJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgJmRlbF9saXN0KSB7CisJCQlpbnQgZHR5cGUgPSBEVF9VTktOT1dOOworCisJCQlpZiAoaXNfZXhjbHVkZWQoJmRpciwgaXRlbS0+c3RyaW5nLCAmZHR5cGUpKSB7CisJCQkJKml0ZW0tPnN0cmluZyA9ICdcMCc7CisJCQkJY2hhbmdlZCsrOworCQkJfQorCQl9CisKKwkJaWYgKGNoYW5nZWQpIHsKKwkJCXN0cmluZ19saXN0X3JlbW92ZV9lbXB0eV9pdGVtcygmZGVsX2xpc3QsIDApOworCQl9IGVsc2UgeworCQkJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfRVJST1IpOworCQkJcHJpbnRmX2xuKF8oIldBUk5JTkc6IENhbm5vdCBmaW5kIGl0ZW1zIG1hdGNoZWQgYnk6ICVzIiksIGNvbmZpcm0uYnVmKTsKKwkJCWNsZWFuX3ByaW50X2NvbG9yKENMRUFOX0NPTE9SX1JFU0VUKTsKKwkJfQorCisJCXN0cmJ1Zl9saXN0X2ZyZWUoaWdub3JlX2xpc3QpOworCQljbGVhcl9kaXJlY3RvcnkoJmRpcik7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmNvbmZpcm0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlbGVjdF9ieV9udW1iZXJzX2NtZCh2b2lkKQoreworCXN0cnVjdCBtZW51X29wdHMgbWVudV9vcHRzOworCXN0cnVjdCBtZW51X3N0dWZmIG1lbnVfc3R1ZmY7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW1zOworCWludCAqY2hvc2VuOworCWludCBpLCBqOworCisJbWVudV9vcHRzLmhlYWRlciA9IE5VTEw7CisJbWVudV9vcHRzLnByb21wdCA9IE5fKCJTZWxlY3QgaXRlbXMgdG8gZGVsZXRlIik7CisJbWVudV9vcHRzLmZsYWdzID0gMDsKKworCW1lbnVfc3R1ZmYudHlwZSA9IE1FTlVfU1RVRkZfVFlQRV9TVFJJTkdfTElTVDsKKwltZW51X3N0dWZmLnN0dWZmID0gJmRlbF9saXN0OworCW1lbnVfc3R1ZmYubnIgPSBkZWxfbGlzdC5ucjsKKworCWNob3NlbiA9IGxpc3RfYW5kX2Nob29zZSgmbWVudV9vcHRzLCAmbWVudV9zdHVmZik7CisJaXRlbXMgPSBkZWxfbGlzdC5pdGVtczsKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGRlbF9saXN0Lm5yOyBpKyspIHsKKwkJaWYgKGkgPCBjaG9zZW5bal0pIHsKKwkJCSooaXRlbXNbaV0uc3RyaW5nKSA9ICdcMCc7CisJCX0gZWxzZSBpZiAoaSA9PSBjaG9zZW5bal0pIHsKKwkJCS8qIGRlbGV0ZSBzZWxlY3RlZCBpdGVtICovCisJCQlqKys7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCS8qIGVuZCBvZiBjaG9zZW4gKGNob3NlbltqXSA9PSBFT0YpLCB3b24ndCBkZWxldGUgKi8KKwkJCSooaXRlbXNbaV0uc3RyaW5nKSA9ICdcMCc7CisJCX0KKwl9CisKKwlzdHJpbmdfbGlzdF9yZW1vdmVfZW1wdHlfaXRlbXMoJmRlbF9saXN0LCAwKTsKKworCWZyZWUoY2hvc2VuKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhc2tfZWFjaF9jbWQodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGNvbmZpcm0gPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCWNvbnN0IGNoYXIgKnFuYW1lOworCWludCBjaGFuZ2VkID0gMCwgZW9mID0gMDsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgJmRlbF9saXN0KSB7CisJCS8qIEN0cmwtRCBzaG91bGQgc3RvcCByZW1vdmluZyBmaWxlcyAqLworCQlpZiAoIWVvZikgeworCQkJcW5hbWUgPSBxdW90ZV9wYXRoX3JlbGF0aXZlKGl0ZW0tPnN0cmluZywgTlVMTCwgJmJ1Zik7CisJCQlwcmludGYoXygicmVtb3ZlICVzPyAiKSwgcW5hbWUpOworCQkJaWYgKHN0cmJ1Zl9nZXRsaW5lKCZjb25maXJtLCBzdGRpbiwgJ1xuJykgIT0gRU9GKSB7CisJCQkJc3RyYnVmX3RyaW0oJmNvbmZpcm0pOworCQkJfSBlbHNlIHsKKwkJCQlwdXRjaGFyKCdcbicpOworCQkJCWVvZiA9IDE7CisJCQl9CisJCX0KKwkJaWYgKCFjb25maXJtLmxlbiB8fCBzdHJuY2FzZWNtcChjb25maXJtLmJ1ZiwgInllcyIsIGNvbmZpcm0ubGVuKSkgeworCQkJKml0ZW0tPnN0cmluZyA9ICdcMCc7CisJCQljaGFuZ2VkKys7CisJCX0KKwl9CisKKwlpZiAoY2hhbmdlZCkKKwkJc3RyaW5nX2xpc3RfcmVtb3ZlX2VtcHR5X2l0ZW1zKCZkZWxfbGlzdCwgMCk7CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmY29uZmlybSk7CisJcmV0dXJuIE1FTlVfUkVUVVJOX05PX0xPT1A7Cit9CisKK3N0YXRpYyBpbnQgcXVpdF9jbWQodm9pZCkKK3sKKwlzdHJpbmdfbGlzdF9jbGVhcigmZGVsX2xpc3QsIDApOworCXByaW50Zl9sbihfKCJCeWUuIikpOworCXJldHVybiBNRU5VX1JFVFVSTl9OT19MT09QOworfQorCitzdGF0aWMgaW50IGhlbHBfY21kKHZvaWQpCit7CisJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfSEVMUCk7CisJcHJpbnRmX2xuKF8oCisJCSAgICAiY2xlYW4gICAgICAgICAgICAgICAtIHN0YXJ0IGNsZWFuaW5nXG4iCisJCSAgICAiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIGV4Y2x1ZGUgaXRlbXMgZnJvbSBkZWxldGlvblxuIgorCQkgICAgInNlbGVjdCBieSBudW1iZXJzICAgLSBzZWxlY3QgaXRlbXMgdG8gYmUgZGVsZXRlZCBieSBudW1iZXJzXG4iCisJCSAgICAiYXNrIGVhY2ggICAgICAgICAgICAtIGNvbmZpcm0gZWFjaCBkZWxldGlvbiAobGlrZSBcInJtIC1pXCIpXG4iCisJCSAgICAicXVpdCAgICAgICAgICAgICAgICAtIHN0b3AgY2xlYW5pbmdcbiIKKwkJICAgICJoZWxwICAgICAgICAgICAgICAgIC0gdGhpcyBzY3JlZW5cbiIKKwkJICAgICI/ICAgICAgICAgICAgICAgICAgIC0gaGVscCBmb3IgcHJvbXB0IHNlbGVjdGlvbiIKKwkJICAgKSk7CisJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfUkVTRVQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbnRlcmFjdGl2ZV9tYWluX2xvb3Aodm9pZCkKK3sKKwl3aGlsZSAoZGVsX2xpc3QubnIpIHsKKwkJc3RydWN0IG1lbnVfb3B0cyBtZW51X29wdHM7CisJCXN0cnVjdCBtZW51X3N0dWZmIG1lbnVfc3R1ZmY7CisJCXN0cnVjdCBtZW51X2l0ZW0gbWVudXNbXSA9IHsKKwkJCXsnYycsICJjbGVhbiIsCQkJMCwgY2xlYW5fY21kfSwKKwkJCXsnZicsICJmaWx0ZXIgYnkgcGF0dGVybiIsCTAsIGZpbHRlcl9ieV9wYXR0ZXJuc19jbWR9LAorCQkJeydzJywgInNlbGVjdCBieSBudW1iZXJzIiwJMCwgc2VsZWN0X2J5X251bWJlcnNfY21kfSwKKwkJCXsnYScsICJhc2sgZWFjaCIsCQkwLCBhc2tfZWFjaF9jbWR9LAorCQkJeydxJywgInF1aXQiLAkJCTAsIHF1aXRfY21kfSwKKwkJCXsnaCcsICJoZWxwIiwJCQkwLCBoZWxwX2NtZH0sCisJCX07CisJCWludCAqY2hvc2VuOworCisJCW1lbnVfb3B0cy5oZWFkZXIgPSBOXygiKioqIENvbW1hbmRzICoqKiIpOworCQltZW51X29wdHMucHJvbXB0ID0gTl8oIldoYXQgbm93Iik7CisJCW1lbnVfb3B0cy5mbGFncyA9IE1FTlVfT1BUU19TSU5HTEVUT047CisKKwkJbWVudV9zdHVmZi50eXBlID0gTUVOVV9TVFVGRl9UWVBFX01FTlVfSVRFTTsKKwkJbWVudV9zdHVmZi5zdHVmZiA9IG1lbnVzOworCQltZW51X3N0dWZmLm5yID0gc2l6ZW9mKG1lbnVzKSAvIHNpemVvZihzdHJ1Y3QgbWVudV9pdGVtKTsKKworCQljbGVhbl9wcmludF9jb2xvcihDTEVBTl9DT0xPUl9IRUFERVIpOworCQlwcmludGZfbG4oUV8oIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW06IiwKKwkJCSAgICAgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW1zOiIsCisJCQkgICAgIGRlbF9saXN0Lm5yKSk7CisJCWNsZWFuX3ByaW50X2NvbG9yKENMRUFOX0NPTE9SX1JFU0VUKTsKKworCQlwcmV0dHlfcHJpbnRfZGVscygpOworCisJCWNob3NlbiA9IGxpc3RfYW5kX2Nob29zZSgmbWVudV9vcHRzLCAmbWVudV9zdHVmZik7CisKKwkJaWYgKCpjaG9zZW4gIT0gRU9GKSB7CisJCQlpbnQgcmV0OworCQkJcmV0ID0gbWVudXNbKmNob3Nlbl0uZm4oKTsKKwkJCWlmIChyZXQgIT0gTUVOVV9SRVRVUk5fTk9fTE9PUCkgeworCQkJCWZyZWUoY2hvc2VuKTsKKwkJCQljaG9zZW4gPSBOVUxMOworCQkJCWlmICghZGVsX2xpc3QubnIpIHsKKwkJCQkJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfRVJST1IpOworCQkJCQlwcmludGZfbG4oXygiTm8gbW9yZSBmaWxlcyB0byBjbGVhbiwgZXhpdGluZy4iKSk7CisJCQkJCWNsZWFuX3ByaW50X2NvbG9yKENMRUFOX0NPTE9SX1JFU0VUKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWNvbnRpbnVlOworCQkJfQorCQl9IGVsc2UgeworCQkJcXVpdF9jbWQoKTsKKwkJfQorCisJCWZyZWUoY2hvc2VuKTsKKwkJY2hvc2VuID0gTlVMTDsKKwkJYnJlYWs7CisJfQorfQorCiBpbnQgY21kX2NsZWFuKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewogCWludCBpLCByZXM7CiAJaW50IGRyeV9ydW4gPSAwLCByZW1vdmVfZGlyZWN0b3JpZXMgPSAwLCBxdWlldCA9IDAsIGlnbm9yZWQgPSAwOwogCWludCBpZ25vcmVkX29ubHkgPSAwLCBjb25maWdfc2V0ID0gMCwgZXJyb3JzID0gMCwgZ29uZSA9IDE7CiAJaW50IHJtX2ZsYWdzID0gUkVNT1ZFX0RJUl9LRUVQX05FU1RFRF9HSVQ7Ci0Jc3RydWN0IHN0cmJ1ZiBkaXJlY3RvcnkgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGFic19wYXRoID0gU1RSQlVGX0lOSVQ7CiAJc3RydWN0IGRpcl9zdHJ1Y3QgZGlyOwogCXN0YXRpYyBjb25zdCBjaGFyICoqcGF0aHNwZWM7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXhjbHVkZV9saXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKIAlzdHJ1Y3QgZXhjbHVkZV9saXN0ICplbDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKIAljb25zdCBjaGFyICpxbmFtZTsKIAljaGFyICpzZWVuID0gTlVMTDsKIAlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKIAkJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJkbyBub3QgcHJpbnQgbmFtZXMgb2YgZmlsZXMgcmVtb3ZlZCIpKSwKIAkJT1BUX19EUllfUlVOKCZkcnlfcnVuLCBOXygiZHJ5IHJ1biIpKSwKIAkJT1BUX19GT1JDRSgmZm9yY2UsIE5fKCJmb3JjZSIpKSwKKwkJT1BUX0JPT0woJ2knLCAiaW50ZXJhY3RpdmUiLCAmaW50ZXJhY3RpdmUsIE5fKCJpbnRlcmFjdGl2ZSBjbGVhbmluZyIpKSwKIAkJT1BUX0JPT0xFQU4oJ2QnLCBOVUxMLCAmcmVtb3ZlX2RpcmVjdG9yaWVzLAogCQkJCU5fKCJyZW1vdmUgd2hvbGUgZGlyZWN0b3JpZXMiKSksCiAJCXsgT1BUSU9OX0NBTExCQUNLLCAnZScsICJleGNsdWRlIiwgJmV4Y2x1ZGVfbGlzdCwgTl8oInBhdHRlcm4iKSwKQEAgLTE4NiwxMiArODc3LDEyIEBACiAJaWYgKGlnbm9yZWQgJiYgaWdub3JlZF9vbmx5KQogCQlkaWUoXygiLXggYW5kIC1YIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIikpOwogCi0JaWYgKCFkcnlfcnVuICYmICFmb3JjZSkgeworCWlmICghaW50ZXJhY3RpdmUgJiYgIWRyeV9ydW4gJiYgIWZvcmNlKSB7CiAJCWlmIChjb25maWdfc2V0KQotCQkJZGllKF8oImNsZWFuLnJlcXVpcmVGb3JjZSBzZXQgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtbiBub3IgLWYgZ2l2ZW47ICIKKwkJCWRpZShfKCJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uIG5vciAtZiBnaXZlbjsgIgogCQkJCSAgInJlZnVzaW5nIHRvIGNsZWFuIikpOwogCQllbHNlCi0JCQlkaWUoXygiY2xlYW4ucmVxdWlyZUZvcmNlIGRlZmF1bHRzIHRvIHRydWUgYW5kIG5laXRoZXIgLW4gbm9yIC1mIGdpdmVuOyAiCisJCQlkaWUoXygiY2xlYW4ucmVxdWlyZUZvcmNlIGRlZmF1bHRzIHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uIG5vciAtZiBnaXZlbjsgIgogCQkJCSAgInJlZnVzaW5nIHRvIGNsZWFuIikpOwogCX0KIApAQCAtMjIxLDggKzkxMiw5IEBACiAJCXN0cnVjdCBkaXJfZW50cnkgKmVudCA9IGRpci5lbnRyaWVzW2ldOwogCQlpbnQgbGVuLCBwb3M7CiAJCWludCBtYXRjaGVzID0gMDsKLQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKIAkJc3RydWN0IHN0YXQgc3Q7CisJCWNvbnN0IGNoYXIgKnJlbDsKIAogCQkvKgogCQkgKiBSZW1vdmUgdGhlICcvJyBhdCB0aGUgZW5kIHRoYXQgZGlyZWN0b3J5CkBAIC0yNDIsMTMgKzkzNCw4IEBACiAJCQkJY29udGludWU7IC8qIFl1cCwgdGhpcyBvbmUgZXhpc3RzIHVubWVyZ2VkICovCiAJCX0KIAotCQkvKgotCQkgKiB3ZSBtaWdodCBoYXZlIHJlbW92ZWQgdGhpcyBhcyBwYXJ0IG9mIGVhcmxpZXIKLQkJICogcmVjdXJzaXZlIGRpcmVjdG9yeSByZW1vdmFsLCBzbyBsc3RhdCgpIGhlcmUgY291bGQKLQkJICogZmFpbCB3aXRoIEVOT0VOVC4KLQkJICovCiAJCWlmIChsc3RhdChlbnQtPm5hbWUsICZzdCkpCi0JCQljb250aW51ZTsKKwkJCWRpZV9lcnJubygiQ2Fubm90IGxzdGF0ICclcyciLCBlbnQtPm5hbWUpOwogCiAJCWlmIChwYXRoc3BlYykgewogCQkJbWVtc2V0KHNlZW4sIDAsIGFyZ2MgPiAwID8gYXJnYyA6IDEpOwpAQCAtMjU3LDMzICs5NDQsNjIgQEAKIAkJfQogCiAJCWlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7Ci0JCQlzdHJidWZfYWRkc3RyKCZkaXJlY3RvcnksIGVudC0+bmFtZSk7CiAJCQlpZiAocmVtb3ZlX2RpcmVjdG9yaWVzIHx8IChtYXRjaGVzID09IE1BVENIRURfRVhBQ1RMWSkpIHsKLQkJCQlpZiAocmVtb3ZlX2RpcnMoJmRpcmVjdG9yeSwgcHJlZml4LCBybV9mbGFncywgZHJ5X3J1biwgcXVpZXQsICZnb25lKSkKLQkJCQkJZXJyb3JzKys7Ci0JCQkJaWYgKGdvbmUgJiYgIXF1aWV0KSB7Ci0JCQkJCXFuYW1lID0gcXVvdGVfcGF0aF9yZWxhdGl2ZShkaXJlY3RvcnkuYnVmLCBkaXJlY3RvcnkubGVuLCAmYnVmLCBwcmVmaXgpOwotCQkJCQlwcmludGYoZHJ5X3J1biA/IF8obXNnX3dvdWxkX3JlbW92ZSkgOiBfKG1zZ19yZW1vdmUpLCBxbmFtZSk7Ci0JCQkJfQorCQkJCXJlbCA9IHJlbGF0aXZlX3BhdGgoZW50LT5uYW1lLCBwcmVmaXgsICZidWYpOworCQkJCXN0cmluZ19saXN0X2FwcGVuZCgmZGVsX2xpc3QsIHJlbCk7CiAJCQl9Ci0JCQlzdHJidWZfcmVzZXQoJmRpcmVjdG9yeSk7CiAJCX0gZWxzZSB7CiAJCQlpZiAocGF0aHNwZWMgJiYgIW1hdGNoZXMpCiAJCQkJY29udGludWU7Ci0JCQlyZXMgPSBkcnlfcnVuID8gMCA6IHVubGluayhlbnQtPm5hbWUpOworCQkJcmVsID0gcmVsYXRpdmVfcGF0aChlbnQtPm5hbWUsIHByZWZpeCwgJmJ1Zik7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmRlbF9saXN0LCByZWwpOworCQl9CisJfQorCisJaWYgKGludGVyYWN0aXZlICYmIGRlbF9saXN0Lm5yID4gMCkKKwkJaW50ZXJhY3RpdmVfbWFpbl9sb29wKCk7CisKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZkZWxfbGlzdCkgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKworCQlpZiAocHJlZml4KQorCQkJc3RyYnVmX2FkZHN0cigmYWJzX3BhdGgsIHByZWZpeCk7CisKKwkJc3RyYnVmX2FkZHN0cigmYWJzX3BhdGgsIGl0ZW0tPnN0cmluZyk7CisKKwkJLyoKKwkJICogd2UgbWlnaHQgaGF2ZSByZW1vdmVkIHRoaXMgYXMgcGFydCBvZiBlYXJsaWVyCisJCSAqIHJlY3Vyc2l2ZSBkaXJlY3RvcnkgcmVtb3ZhbCwgc28gbHN0YXQoKSBoZXJlIGNvdWxkCisJCSAqIGZhaWwgd2l0aCBFTk9FTlQuCisJCSAqLworCQlpZiAobHN0YXQoYWJzX3BhdGguYnVmLCAmc3QpKQorCQkJY29udGludWU7CisKKwkJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJCWlmIChyZW1vdmVfZGlycygmYWJzX3BhdGgsIHByZWZpeCwgcm1fZmxhZ3MsIGRyeV9ydW4sIHF1aWV0LCAmZ29uZSkpCisJCQkJZXJyb3JzKys7CisJCQlpZiAoZ29uZSAmJiAhcXVpZXQpIHsKKwkJCQlxbmFtZSA9IHF1b3RlX3BhdGhfcmVsYXRpdmUoaXRlbS0+c3RyaW5nLCBOVUxMLCAmYnVmKTsKKwkJCQlwcmludGYoZHJ5X3J1biA/IF8obXNnX3dvdWxkX3JlbW92ZSkgOiBfKG1zZ19yZW1vdmUpLCBxbmFtZSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlyZXMgPSBkcnlfcnVuID8gMCA6IHVubGluayhhYnNfcGF0aC5idWYpOwogCQkJaWYgKHJlcykgewotCQkJCXFuYW1lID0gcXVvdGVfcGF0aF9yZWxhdGl2ZShlbnQtPm5hbWUsIC0xLCAmYnVmLCBwcmVmaXgpOworCQkJCXFuYW1lID0gcXVvdGVfcGF0aF9yZWxhdGl2ZShpdGVtLT5zdHJpbmcsIE5VTEwsICZidWYpOwogCQkJCXdhcm5pbmcoXyhtc2dfd2Fybl9yZW1vdmVfZmFpbGVkKSwgcW5hbWUpOwogCQkJCWVycm9ycysrOwogCQkJfSBlbHNlIGlmICghcXVpZXQpIHsKLQkJCQlxbmFtZSA9IHF1b3RlX3BhdGhfcmVsYXRpdmUoZW50LT5uYW1lLCAtMSwgJmJ1ZiwgcHJlZml4KTsKKwkJCQlxbmFtZSA9IHF1b3RlX3BhdGhfcmVsYXRpdmUoaXRlbS0+c3RyaW5nLCBOVUxMLCAmYnVmKTsKIAkJCQlwcmludGYoZHJ5X3J1biA/IF8obXNnX3dvdWxkX3JlbW92ZSkgOiBfKG1zZ19yZW1vdmUpLCBxbmFtZSk7CiAJCQl9CiAJCX0KKwkJc3RyYnVmX3Jlc2V0KCZhYnNfcGF0aCk7CiAJfQogCWZyZWUoc2Vlbik7CiAKLQlzdHJidWZfcmVsZWFzZSgmZGlyZWN0b3J5KTsKKwlzdHJidWZfcmVsZWFzZSgmYWJzX3BhdGgpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXN0cmluZ19saXN0X2NsZWFyKCZkZWxfbGlzdCwgMCk7CiAJc3RyaW5nX2xpc3RfY2xlYXIoJmV4Y2x1ZGVfbGlzdCwgMCk7CiAJcmV0dXJuIChlcnJvcnMgIT0gMCk7CiB9CmRpZmYgLS1naXQgYS9idWlsdGluL2Nsb25lLmMgYi9idWlsdGluL2Nsb25lLmMKaW5kZXggMDM1YWI2NC4uNDMwMzA3YiAxMDA2NDQKLS0tIGEvYnVpbHRpbi9jbG9uZS5jCisrKyBiL2J1aWx0aW4vY2xvbmUuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogI2luY2x1ZGUgInN0cmJ1Zi5oIgogI2luY2x1ZGUgImRpci5oIgotI2luY2x1ZGUgInBhY2stcmVmcy5oIgogI2luY2x1ZGUgInNpZ2NoYWluLmgiCiAjaW5jbHVkZSAiYnJhbmNoLmgiCiAjaW5jbHVkZSAicmVtb3RlLmgiCkBAIC00OTQsMTMgKzQ5MywxNiBAQAogewogCWNvbnN0IHN0cnVjdCByZWYgKnI7CiAKKwlsb2NrX3BhY2tlZF9yZWZzKExPQ0tfRElFX09OX0VSUk9SKTsKKwogCWZvciAociA9IGxvY2FsX3JlZnM7IHI7IHIgPSByLT5uZXh0KSB7CiAJCWlmICghci0+cGVlcl9yZWYpCiAJCQljb250aW51ZTsKIAkJYWRkX3BhY2tlZF9yZWYoci0+cGVlcl9yZWYtPm5hbWUsIHItPm9sZF9zaGExKTsKIAl9CiAKLQlwYWNrX3JlZnMoUEFDS19SRUZTX0FMTCk7CisJaWYgKGNvbW1pdF9wYWNrZWRfcmVmcygpKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBvdmVyd3JpdGUgb2xkIHJlZi1wYWNrIGZpbGUiKTsKIH0KIAogc3RhdGljIHZvaWQgd3JpdGVfZm9sbG93dGFncyhjb25zdCBzdHJ1Y3QgcmVmICpyZWZzLCBjb25zdCBjaGFyICptc2cpCkBAIC01NDIsMTIgKzU0NCwyMSBAQAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCByZWYgKm1hcHBlZF9yZWZzLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9oZWFkX3BvaW50c19hdCwKIAkJCSAgICAgICBjb25zdCBjaGFyICpicmFuY2hfdG9wLAotCQkJICAgICAgIGNvbnN0IGNoYXIgKm1zZykKKwkJCSAgICAgICBjb25zdCBjaGFyICptc2csCisJCQkgICAgICAgc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJICAgICAgIGludCBjaGVja19jb25uZWN0aXZpdHkpCiB7CiAJY29uc3Qgc3RydWN0IHJlZiAqcm0gPSBtYXBwZWRfcmVmczsKIAotCWlmIChjaGVja19ldmVyeXRoaW5nX2Nvbm5lY3RlZChpdGVyYXRlX3JlZl9tYXAsIDAsICZybSkpCi0JCWRpZShfKCJyZW1vdGUgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0cyIpKTsKKwlpZiAoY2hlY2tfY29ubmVjdGl2aXR5KSB7CisJCWlmICgwIDw9IG9wdGlvbl92ZXJib3NpdHkpCisJCQlwcmludGYoXygiQ2hlY2tpbmcgY29ubmVjdGl2aXR5Li4uICIpKTsKKwkJaWYgKGNoZWNrX2V2ZXJ5dGhpbmdfY29ubmVjdGVkX3dpdGhfdHJhbnNwb3J0KGl0ZXJhdGVfcmVmX21hcCwKKwkJCQkJCQkgICAgICAwLCAmcm0sIHRyYW5zcG9ydCkpCisJCQlkaWUoXygicmVtb3RlIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHMiKSk7CisJCWlmICgwIDw9IG9wdGlvbl92ZXJib3NpdHkpCisJCQlwcmludGYoXygiZG9uZVxuIikpOworCX0KIAogCWlmIChyZWZzKSB7CiAJCXdyaXRlX3JlbW90ZV9yZWZzKG1hcHBlZF9yZWZzKTsKQEAgLTY5Myw3ICs3MDQsNyBAQAogCQkJLyoKIAkJCSAqIG90aGVyd2lzZSwgdGhlIG5leHQgImdpdCBmZXRjaCIgd2lsbAogCQkJICogc2ltcGx5IGZldGNoIGZyb20gSEVBRCB3aXRob3V0IHVwZGF0aW5nCi0JCQkgKiBhbnkgcmVtb3RlIHRyYWNraW5nIGJyYW5jaCwgd2hpY2ggaXMgd2hhdAorCQkJICogYW55IHJlbW90ZS10cmFja2luZyBicmFuY2gsIHdoaWNoIGlzIHdoYXQKIAkJCSAqIHdlIHdhbnQuCiAJCQkgKi8KIAkJfSBlbHNlIHsKQEAgLTc4Myw2ICs3OTQsOCBAQAogCWlzX2xvY2FsID0gb3B0aW9uX2xvY2FsICE9IDAgJiYgcGF0aCAmJiAhaXNfYnVuZGxlOwogCWlmIChpc19sb2NhbCAmJiBvcHRpb25fZGVwdGgpCiAJCXdhcm5pbmcoXygiLS1kZXB0aCBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iKSk7CisJaWYgKG9wdGlvbl9sb2NhbCA+IDAgJiYgIWlzX2xvY2FsKQorCQl3YXJuaW5nKF8oIi0tbG9jYWwgaXMgaWdub3JlZCIpKTsKIAogCWlmIChhcmdjID09IDIpCiAJCWRpciA9IHhzdHJkdXAoYXJndlsxXSk7CkBAIC04ODksNiArOTAyLDkgQEAKIAkJaWYgKG9wdGlvbl91cGxvYWRfcGFjaykKIAkJCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX1VQTE9BRFBBQ0ssCiAJCQkJCSAgICAgb3B0aW9uX3VwbG9hZF9wYWNrKTsKKworCQlpZiAodHJhbnNwb3J0LT5zbWFydF9vcHRpb25zICYmICFvcHRpb25fZGVwdGgpCisJCQl0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMtPmNoZWNrX3NlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgPSAxOwogCX0KIAogCXJlZnMgPSB0cmFuc3BvcnRfZ2V0X3JlbW90ZV9yZWZzKHRyYW5zcG9ydCk7CkBAIC05NTAsNyArOTY2LDcgQEAKIAkJdHJhbnNwb3J0X2ZldGNoX3JlZnModHJhbnNwb3J0LCBtYXBwZWRfcmVmcyk7CiAKIAl1cGRhdGVfcmVtb3RlX3JlZnMocmVmcywgbWFwcGVkX3JlZnMsIHJlbW90ZV9oZWFkX3BvaW50c19hdCwKLQkJCSAgIGJyYW5jaF90b3AuYnVmLCByZWZsb2dfbXNnLmJ1Zik7CisJCQkgICBicmFuY2hfdG9wLmJ1ZiwgcmVmbG9nX21zZy5idWYsIHRyYW5zcG9ydCwgIWlzX2xvY2FsKTsKIAogCXVwZGF0ZV9oZWFkKG91cl9oZWFkX3BvaW50c19hdCwgcmVtb3RlX2hlYWQsIHJlZmxvZ19tc2cuYnVmKTsKIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jb21taXQuYyBiL2J1aWx0aW4vY29tbWl0LmMKaW5kZXggZDJmMzBkOS4uMDAzYmQ3ZCAxMDA2NDQKLS0tIGEvYnVpbHRpbi9jb21taXQuYworKysgYi9idWlsdGluL2NvbW1pdC5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgogI2luY2x1ZGUgImNvbHVtbi5oIgogI2luY2x1ZGUgInNlcXVlbmNlci5oIgorI2luY2x1ZGUgIm5vdGVzLXV0aWxzLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9jb21taXRfdXNhZ2VbXSA9IHsKIAlOXygiZ2l0IGNvbW1pdCBbb3B0aW9uc10gWy0tXSA8cGF0aHNwZWM+Li4uIiksCkBAIC0xMDcsMjMgKzEwOCwyNyBAQAogCiBzdGF0aWMgZW51bSBjb21taXRfd2hlbmNlIHdoZW5jZTsKIHN0YXRpYyBpbnQgdXNlX2VkaXRvciA9IDEsIGluY2x1ZGVfc3RhdHVzID0gMTsKLXN0YXRpYyBpbnQgc2hvd19pZ25vcmVkX2luX3N0YXR1czsKK3N0YXRpYyBpbnQgc2hvd19pZ25vcmVkX2luX3N0YXR1cywgaGF2ZV9vcHRpb25fbTsKIHN0YXRpYyBjb25zdCBjaGFyICpvbmx5X2luY2x1ZGVfYXNzdW1lZDsKIHN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIG1lc3NhZ2UgPSBTVFJCVUZfSU5JVDsKIAotc3RhdGljIGVudW0geworc3RhdGljIGVudW0gc3RhdHVzX2Zvcm1hdCB7CiAJU1RBVFVTX0ZPUk1BVF9OT05FID0gMCwKIAlTVEFUVVNfRk9STUFUX0xPTkcsCiAJU1RBVFVTX0ZPUk1BVF9TSE9SVCwKLQlTVEFUVVNfRk9STUFUX1BPUkNFTEFJTgotfSBzdGF0dXNfZm9ybWF0OworCVNUQVRVU19GT1JNQVRfUE9SQ0VMQUlOLAorCisJU1RBVFVTX0ZPUk1BVF9VTlNQRUNJRklFRAorfSBzdGF0dXNfZm9ybWF0ID0gU1RBVFVTX0ZPUk1BVF9VTlNQRUNJRklFRDsKIAogc3RhdGljIGludCBvcHRfcGFyc2VfbShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQogewogCXN0cnVjdCBzdHJidWYgKmJ1ZiA9IG9wdC0+dmFsdWU7Ci0JaWYgKHVuc2V0KQorCWlmICh1bnNldCkgeworCQloYXZlX29wdGlvbl9tID0gMDsKIAkJc3RyYnVmX3NldGxlbihidWYsIDApOwotCWVsc2UgeworCX0gZWxzZSB7CisJCWhhdmVfb3B0aW9uX20gPSAxOwogCQlpZiAoYnVmLT5sZW4pCiAJCQlzdHJidWZfYWRkY2goYnVmLCAnXG4nKTsKIAkJc3RyYnVmX2FkZHN0cihidWYsIGFyZyk7CkBAIC0yMDIsNyArMjA3LDcgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKLQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKIAkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CiAKIAkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1VQREFURSkKQEAgLTQ1Nyw2ICs0NjIsOSBAQAogCWNhc2UgU1RBVFVTX0ZPUk1BVF9QT1JDRUxBSU46CiAJCXd0X3BvcmNlbGFpbl9wcmludChzKTsKIAkJYnJlYWs7CisJY2FzZSBTVEFUVVNfRk9STUFUX1VOU1BFQ0lGSUVEOgorCQlkaWUoIkJVRzogZmluYWxpemVfZGVmZXJyZWRfY29uZmlnKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQiKTsKKwkJYnJlYWs7CiAJY2FzZSBTVEFUVVNfRk9STUFUX05PTkU6CiAJY2FzZSBTVEFUVVNfRk9STUFUX0xPTkc6CiAJCXd0X3N0YXR1c19wcmludChzKTsKQEAgLTUyNiw3ICs1MzQsNiBAQAogCQkJCQkobGIgLSBzdHJsZW4oIiAiKSAtCiAJCQkJCSAoYSArIHN0cmxlbigiXG5hdXRob3IgIikpKSk7CiAJCWVtYWlsID0geG1lbWR1cHoobGIgKyBzdHJsZW4oIjwiKSwgcmIgLSAobGIgKyBzdHJsZW4oIjwiKSkpOwotCQlkYXRlID0geG1lbWR1cHoocmIgKyBzdHJsZW4oIj4gIiksIGVvbCAtIChyYiArIHN0cmxlbigiPiAiKSkpOwogCQlsZW4gPSBlb2wgLSAocmIgKyBzdHJsZW4oIj4gIikpOwogCQlkYXRlID0geG1hbGxvYyhsZW4gKyAyKTsKIAkJKmRhdGUgPSAnQCc7CkBAIC05NTgsNiArOTY1LDQyIEBACiAJcmV0dXJuIGxvZ21zZ19yZWVuY29kZShjb21taXQsIE5VTEwsIG91dF9lbmMpOwogfQogCisvKgorICogRW51bWVyYXRlIHdoYXQgbmVlZHMgdG8gYmUgcHJvcGFnYXRlZCB3aGVuIC0tcG9yY2VsYWluCisgKiBpcyBub3QgaW4gZWZmZWN0IGhlcmUuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3RhdHVzX2RlZmVycmVkX2NvbmZpZyB7CisJZW51bSBzdGF0dXNfZm9ybWF0IHN0YXR1c19mb3JtYXQ7CisJaW50IHNob3dfYnJhbmNoOworfSBzdGF0dXNfZGVmZXJyZWRfY29uZmlnID0geworCVNUQVRVU19GT1JNQVRfVU5TUEVDSUZJRUQsCisJLTEgLyogdW5zcGVjaWZpZWQgKi8KK307CisKK3N0YXRpYyB2b2lkIGZpbmFsaXplX2RlZmVycmVkX2NvbmZpZyhzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCWludCB1c2VfZGVmZXJyZWRfY29uZmlnID0gKHN0YXR1c19mb3JtYXQgIT0gU1RBVFVTX0ZPUk1BVF9QT1JDRUxBSU4gJiYKKwkJCQkgICAhcy0+bnVsbF90ZXJtaW5hdGlvbik7CisKKwlpZiAocy0+bnVsbF90ZXJtaW5hdGlvbikgeworCQlpZiAoc3RhdHVzX2Zvcm1hdCA9PSBTVEFUVVNfRk9STUFUX05PTkUgfHwKKwkJICAgIHN0YXR1c19mb3JtYXQgPT0gU1RBVFVTX0ZPUk1BVF9VTlNQRUNJRklFRCkKKwkJCXN0YXR1c19mb3JtYXQgPSBTVEFUVVNfRk9STUFUX1BPUkNFTEFJTjsKKwkJZWxzZSBpZiAoc3RhdHVzX2Zvcm1hdCA9PSBTVEFUVVNfRk9STUFUX0xPTkcpCisJCQlkaWUoXygiLS1sb25nIGFuZCAteiBhcmUgaW5jb21wYXRpYmxlIikpOworCX0KKworCWlmICh1c2VfZGVmZXJyZWRfY29uZmlnICYmIHN0YXR1c19mb3JtYXQgPT0gU1RBVFVTX0ZPUk1BVF9VTlNQRUNJRklFRCkKKwkJc3RhdHVzX2Zvcm1hdCA9IHN0YXR1c19kZWZlcnJlZF9jb25maWcuc3RhdHVzX2Zvcm1hdDsKKwlpZiAoc3RhdHVzX2Zvcm1hdCA9PSBTVEFUVVNfRk9STUFUX1VOU1BFQ0lGSUVEKQorCQlzdGF0dXNfZm9ybWF0ID0gU1RBVFVTX0ZPUk1BVF9OT05FOworCisJaWYgKHVzZV9kZWZlcnJlZF9jb25maWcgJiYgcy0+c2hvd19icmFuY2ggPCAwKQorCQlzLT5zaG93X2JyYW5jaCA9IHN0YXR1c19kZWZlcnJlZF9jb25maWcuc2hvd19icmFuY2g7CisJaWYgKHMtPnNob3dfYnJhbmNoIDwgMCkKKwkJcy0+c2hvd19icmFuY2ggPSAwOworfQorCiBzdGF0aWMgaW50IHBhcnNlX2FuZF92YWxpZGF0ZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10sCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucywKIAkJCQkgICAgICBjb25zdCBjaGFyICogY29uc3QgdXNhZ2VbXSwKQEAgLTk2OCw2ICsxMDExLDcgQEAKIAlpbnQgZiA9IDA7CiAKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIHVzYWdlLCAwKTsKKwlmaW5hbGl6ZV9kZWZlcnJlZF9jb25maWcocyk7CiAKIAlpZiAoZm9yY2VfYXV0aG9yICYmICFzdHJjaHIoZm9yY2VfYXV0aG9yLCAnPicpKQogCQlmb3JjZV9hdXRob3IgPSBmaW5kX2F1dGhvcl9ieV9uaWNrbmFtZShmb3JjZV9hdXRob3IpOwpAQCAtOTc1LDcgKzEwMTksNyBAQAogCWlmIChmb3JjZV9hdXRob3IgJiYgcmVuZXdfYXV0aG9yc2hpcCkKIAkJZGllKF8oIlVzaW5nIGJvdGggLS1yZXNldC1hdXRob3IgYW5kIC0tYXV0aG9yIGRvZXMgbm90IG1ha2Ugc2Vuc2UiKSk7CiAKLQlpZiAobG9nZmlsZSB8fCBtZXNzYWdlLmxlbiB8fCB1c2VfbWVzc2FnZSB8fCBmaXh1cF9tZXNzYWdlKQorCWlmIChsb2dmaWxlIHx8IGhhdmVfb3B0aW9uX20gfHwgdXNlX21lc3NhZ2UgfHwgZml4dXBfbWVzc2FnZSkKIAkJdXNlX2VkaXRvciA9IDA7CiAJaWYgKDAgPD0gZWRpdF9mbGFnKQogCQl1c2VfZWRpdG9yID0gZWRpdF9mbGFnOwpAQCAtMTA1MiwxMiArMTA5Niw2IEBACiAJaWYgKGFsbCAmJiBhcmdjID4gMCkKIAkJZGllKF8oIlBhdGhzIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZS4iKSk7CiAKLQlpZiAocy0+bnVsbF90ZXJtaW5hdGlvbikgewotCQlpZiAoc3RhdHVzX2Zvcm1hdCA9PSBTVEFUVVNfRk9STUFUX05PTkUpCi0JCQlzdGF0dXNfZm9ybWF0ID0gU1RBVFVTX0ZPUk1BVF9QT1JDRUxBSU47Ci0JCWVsc2UgaWYgKHN0YXR1c19mb3JtYXQgPT0gU1RBVFVTX0ZPUk1BVF9MT05HKQotCQkJZGllKF8oIi0tbG9uZyBhbmQgLXogYXJlIGluY29tcGF0aWJsZSIpKTsKLQl9CiAJaWYgKHN0YXR1c19mb3JtYXQgIT0gU1RBVFVTX0ZPUk1BVF9OT05FKQogCQlkcnlfcnVuID0gMTsKIApAQCAtMTExMCw2ICsxMTQ4LDE3IEBACiAJCQlzLT5zdWJtb2R1bGVfc3VtbWFyeSA9IC0xOwogCQlyZXR1cm4gMDsKIAl9CisJaWYgKCFzdHJjbXAoaywgInN0YXR1cy5zaG9ydCIpKSB7CisJCWlmIChnaXRfY29uZmlnX2Jvb2woaywgdikpCisJCQlzdGF0dXNfZGVmZXJyZWRfY29uZmlnLnN0YXR1c19mb3JtYXQgPSBTVEFUVVNfRk9STUFUX1NIT1JUOworCQllbHNlCisJCQlzdGF0dXNfZGVmZXJyZWRfY29uZmlnLnN0YXR1c19mb3JtYXQgPSBTVEFUVVNfRk9STUFUX05PTkU7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAic3RhdHVzLmJyYW5jaCIpKSB7CisJCXN0YXR1c19kZWZlcnJlZF9jb25maWcuc2hvd19icmFuY2ggPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJCXJldHVybiAwOworCX0KIAlpZiAoIXN0cmNtcChrLCAic3RhdHVzLmNvbG9yIikgfHwgIXN0cmNtcChrLCAiY29sb3Iuc3RhdHVzIikpIHsKIAkJcy0+dXNlX2NvbG9yID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2woaywgdik7CiAJCXJldHVybiAwOwpAQCAtMTE1Miw4ICsxMjAxLDggQEAKIAkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygiYmUgdmVyYm9zZSIpKSwKIAkJT1BUX1NFVF9JTlQoJ3MnLCAic2hvcnQiLCAmc3RhdHVzX2Zvcm1hdCwKIAkJCSAgICBOXygic2hvdyBzdGF0dXMgY29uY2lzZWx5IiksIFNUQVRVU19GT1JNQVRfU0hPUlQpLAotCQlPUFRfQk9PTEVBTignYicsICJicmFuY2giLCAmcy5zaG93X2JyYW5jaCwKLQkJCSAgICBOXygic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iKSksCisJCU9QVF9CT09MKCdiJywgImJyYW5jaCIsICZzLnNob3dfYnJhbmNoLAorCQkJIE5fKCJzaG93IGJyYW5jaCBpbmZvcm1hdGlvbiIpKSwKIAkJT1BUX1NFVF9JTlQoMCwgInBvcmNlbGFpbiIsICZzdGF0dXNfZm9ybWF0LAogCQkJICAgIE5fKCJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIpLAogCQkJICAgIFNUQVRVU19GT1JNQVRfUE9SQ0VMQUlOKSwKQEAgLTExODYsMTMgKzEyMzUsNyBAQAogCQkJICAgICBidWlsdGluX3N0YXR1c19vcHRpb25zLAogCQkJICAgICBidWlsdGluX3N0YXR1c191c2FnZSwgMCk7CiAJZmluYWxpemVfY29sb3B0cygmcy5jb2xvcHRzLCAtMSk7Ci0KLQlpZiAocy5udWxsX3Rlcm1pbmF0aW9uKSB7Ci0JCWlmIChzdGF0dXNfZm9ybWF0ID09IFNUQVRVU19GT1JNQVRfTk9ORSkKLQkJCXN0YXR1c19mb3JtYXQgPSBTVEFUVVNfRk9STUFUX1BPUkNFTEFJTjsKLQkJZWxzZSBpZiAoc3RhdHVzX2Zvcm1hdCA9PSBTVEFUVVNfRk9STUFUX0xPTkcpCi0JCQlkaWUoXygiLS1sb25nIGFuZCAteiBhcmUgaW5jb21wYXRpYmxlIikpOwotCX0KKwlmaW5hbGl6ZV9kZWZlcnJlZF9jb25maWcoJnMpOwogCiAJaGFuZGxlX3VudHJhY2tlZF9maWxlc19hcmcoJnMpOwogCWlmIChzaG93X2lnbm9yZWRfaW5fc3RhdHVzKQpAQCAtMTIyMSw2ICsxMjY0LDkgQEAKIAljYXNlIFNUQVRVU19GT1JNQVRfUE9SQ0VMQUlOOgogCQl3dF9wb3JjZWxhaW5fcHJpbnQoJnMpOwogCQlicmVhazsKKwljYXNlIFNUQVRVU19GT1JNQVRfVU5TUEVDSUZJRUQ6CisJCWRpZSgiQlVHOiBmaW5hbGl6ZV9kZWZlcnJlZF9jb25maWcoKSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCIpOworCQlicmVhazsKIAljYXNlIFNUQVRVU19GT1JNQVRfTk9ORToKIAljYXNlIFNUQVRVU19GT1JNQVRfTE9ORzoKIAkJcy52ZXJib3NlID0gdmVyYm9zZTsKQEAgLTEzODksNyArMTQzNSw3IEBACiAJCU9QVF9CT09MRUFOKDAsICJkcnktcnVuIiwgJmRyeV9ydW4sIE5fKCJzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIikpLAogCQlPUFRfU0VUX0lOVCgwLCAic2hvcnQiLCAmc3RhdHVzX2Zvcm1hdCwgTl8oInNob3cgc3RhdHVzIGNvbmNpc2VseSIpLAogCQkJICAgIFNUQVRVU19GT1JNQVRfU0hPUlQpLAotCQlPUFRfQk9PTEVBTigwLCAiYnJhbmNoIiwgJnMuc2hvd19icmFuY2gsIE5fKCJzaG93IGJyYW5jaCBpbmZvcm1hdGlvbiIpKSwKKwkJT1BUX0JPT0woMCwgImJyYW5jaCIsICZzLnNob3dfYnJhbmNoLCBOXygic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iKSksCiAJCU9QVF9TRVRfSU5UKDAsICJwb3JjZWxhaW4iLCAmc3RhdHVzX2Zvcm1hdCwKIAkJCSAgICBOXygibWFjaGluZS1yZWFkYWJsZSBvdXRwdXQiKSwgU1RBVFVTX0ZPUk1BVF9QT1JDRUxBSU4pLAogCQlPUFRfU0VUX0lOVCgwLCAibG9uZyIsICZzdGF0dXNfZm9ybWF0LApAQCAtMTQzMCw2ICsxNDc2LDcgQEAKIAl3dF9zdGF0dXNfcHJlcGFyZSgmcyk7CiAJZ2l0bW9kdWxlc19jb25maWcoKTsKIAlnaXRfY29uZmlnKGdpdF9jb21taXRfY29uZmlnLCAmcyk7CisJc3RhdHVzX2Zvcm1hdCA9IFNUQVRVU19GT1JNQVRfTk9ORTsgLyogSWdub3JlIHN0YXR1cy5zaG9ydCAqLwogCWRldGVybWluZV93aGVuY2UoJnMpOwogCXMuY29sb3B0cyA9IDA7CiAKQEAgLTE1OTEsNyArMTYzOCw3IEBACiAJCWlmIChjZmcpIHsKIAkJCS8qIHdlIGFyZSBhbWVuZGluZywgc28gY3VycmVudF9oZWFkIGlzIG5vdCBOVUxMICovCiAJCQljb3B5X25vdGVfZm9yX3Jld3JpdGUoY2ZnLCBjdXJyZW50X2hlYWQtPm9iamVjdC5zaGExLCBzaGExKTsKLQkJCWZpbmlzaF9jb3B5X25vdGVzX2Zvcl9yZXdyaXRlKGNmZyk7CisJCQlmaW5pc2hfY29weV9ub3Rlc19mb3JfcmV3cml0ZShjZmcsICJOb3RlcyBhZGRlZCBieSAnZ2l0IGNvbW1pdCAtLWFtZW5kJyIpOwogCQl9CiAJCXJ1bl9yZXdyaXRlX2hvb2soY3VycmVudF9oZWFkLT5vYmplY3Quc2hhMSwgc2hhMSk7CiAJfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jb25maWcuYyBiL2J1aWx0aW4vY29uZmlnLmMKaW5kZXggMzNjOWJmOS4uNDAxMGM0MyAxMDA2NDQKLS0tIGEvYnVpbHRpbi9jb25maWcuYworKysgYi9idWlsdGluL2NvbmZpZy5jCkBAIC0yMSw2ICsyMSw3IEBACiAKIHN0YXRpYyBpbnQgdXNlX2dsb2JhbF9jb25maWcsIHVzZV9zeXN0ZW1fY29uZmlnLCB1c2VfbG9jYWxfY29uZmlnOwogc3RhdGljIGNvbnN0IGNoYXIgKmdpdmVuX2NvbmZpZ19maWxlOworc3RhdGljIGNvbnN0IGNoYXIgKmdpdmVuX2NvbmZpZ19ibG9iOwogc3RhdGljIGludCBhY3Rpb25zLCB0eXBlczsKIHN0YXRpYyBjb25zdCBjaGFyICpnZXRfY29sb3Jfc2xvdCwgKmdldF9jb2xvcmJvb2xfc2xvdDsKIHN0YXRpYyBpbnQgZW5kX251bGw7CkBAIC01Myw2ICs1NCw3IEBACiAJT1BUX0JPT0xFQU4oMCwgInN5c3RlbSIsICZ1c2Vfc3lzdGVtX2NvbmZpZywgTl8oInVzZSBzeXN0ZW0gY29uZmlnIGZpbGUiKSksCiAJT1BUX0JPT0xFQU4oMCwgImxvY2FsIiwgJnVzZV9sb2NhbF9jb25maWcsIE5fKCJ1c2UgcmVwb3NpdG9yeSBjb25maWcgZmlsZSIpKSwKIAlPUFRfU1RSSU5HKCdmJywgImZpbGUiLCAmZ2l2ZW5fY29uZmlnX2ZpbGUsIE5fKCJmaWxlIiksIE5fKCJ1c2UgZ2l2ZW4gY29uZmlnIGZpbGUiKSksCisJT1BUX1NUUklORygwLCAiYmxvYiIsICZnaXZlbl9jb25maWdfYmxvYiwgTl8oImJsb2ItaWQiKSwgTl8oInJlYWQgY29uZmlnIGZyb20gZ2l2ZW4gYmxvYiBvYmplY3QiKSksCiAJT1BUX0dST1VQKE5fKCJBY3Rpb24iKSksCiAJT1BUX0JJVCgwLCAiZ2V0IiwgJmFjdGlvbnMsIE5fKCJnZXQgdmFsdWU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIpLCBBQ1RJT05fR0VUKSwKIAlPUFRfQklUKDAsICJnZXQtYWxsIiwgJmFjdGlvbnMsIE5fKCJnZXQgYWxsIHZhbHVlczoga2V5IFt2YWx1ZS1yZWdleF0iKSwgQUNUSU9OX0dFVF9BTEwpLApAQCAtMjE4LDcgKzIyMCw4IEBACiAJfQogCiAJZ2l0X2NvbmZpZ193aXRoX29wdGlvbnMoY29sbGVjdF9jb25maWcsICZ2YWx1ZXMsCi0JCQkJZ2l2ZW5fY29uZmlnX2ZpbGUsIHJlc3BlY3RfaW5jbHVkZXMpOworCQkJCWdpdmVuX2NvbmZpZ19maWxlLCBnaXZlbl9jb25maWdfYmxvYiwKKwkJCQlyZXNwZWN0X2luY2x1ZGVzKTsKIAogCXJldCA9ICF2YWx1ZXMubnI7CiAKQEAgLTMwMiw3ICszMDUsOCBAQAogCWdldF9jb2xvcl9mb3VuZCA9IDA7CiAJcGFyc2VkX2NvbG9yWzBdID0gJ1wwJzsKIAlnaXRfY29uZmlnX3dpdGhfb3B0aW9ucyhnaXRfZ2V0X2NvbG9yX2NvbmZpZywgTlVMTCwKLQkJCQlnaXZlbl9jb25maWdfZmlsZSwgcmVzcGVjdF9pbmNsdWRlcyk7CisJCQkJZ2l2ZW5fY29uZmlnX2ZpbGUsIGdpdmVuX2NvbmZpZ19ibG9iLAorCQkJCXJlc3BlY3RfaW5jbHVkZXMpOwogCiAJaWYgKCFnZXRfY29sb3JfZm91bmQgJiYgZGVmX2NvbG9yKQogCQljb2xvcl9wYXJzZShkZWZfY29sb3IsICJjb21tYW5kIGxpbmUiLCBwYXJzZWRfY29sb3IpOwpAQCAtMzI5LDggKzMzMywxMCBAQAogewogCWdldF9jb2xvcmJvb2xfZm91bmQgPSAtMTsKIAlnZXRfZGlmZl9jb2xvcl9mb3VuZCA9IC0xOworCWdldF9jb2xvcl91aV9mb3VuZCA9IC0xOwogCWdpdF9jb25maWdfd2l0aF9vcHRpb25zKGdpdF9nZXRfY29sb3Jib29sX2NvbmZpZywgTlVMTCwKLQkJCQlnaXZlbl9jb25maWdfZmlsZSwgcmVzcGVjdF9pbmNsdWRlcyk7CisJCQkJZ2l2ZW5fY29uZmlnX2ZpbGUsIGdpdmVuX2NvbmZpZ19ibG9iLAorCQkJCXJlc3BlY3RfaW5jbHVkZXMpOwogCiAJaWYgKGdldF9jb2xvcmJvb2xfZm91bmQgPCAwKSB7CiAJCWlmICghc3RyY21wKGdldF9jb2xvcmJvb2xfc2xvdCwgImNvbG9yLmRpZmYiKSkKQEAgLTMzOSw2ICszNDUsMTAgQEAKIAkJCWdldF9jb2xvcmJvb2xfZm91bmQgPSBnZXRfY29sb3JfdWlfZm91bmQ7CiAJfQogCisJaWYgKGdldF9jb2xvcmJvb2xfZm91bmQgPCAwKQorCQkvKiBkZWZhdWx0IHZhbHVlIGlmIG5vbmUgZm91bmQgaW4gY29uZmlnICovCisJCWdldF9jb2xvcmJvb2xfZm91bmQgPSBHSVRfQ09MT1JfQVVUTzsKKwogCWdldF9jb2xvcmJvb2xfZm91bmQgPSB3YW50X2NvbG9yKGdldF9jb2xvcmJvb2xfZm91bmQpOwogCiAJaWYgKHByaW50KSB7CkBAIC0zNDgsNiArMzU4LDEyIEBACiAJCXJldHVybiBnZXRfY29sb3Jib29sX2ZvdW5kID8gMCA6IDE7CiB9CiAKK3N0YXRpYyB2b2lkIGNoZWNrX2Jsb2Jfd3JpdGUodm9pZCkKK3sKKwlpZiAoZ2l2ZW5fY29uZmlnX2Jsb2IpCisJCWRpZSgid3JpdGluZyBjb25maWcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIpOworfQorCiBpbnQgY21kX2NvbmZpZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAlpbnQgbm9uZ2l0ID0gIXN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5OwpAQCAtMzU5LDcgKzM3NSw4IEBACiAJCQkgICAgIGJ1aWx0aW5fY29uZmlnX3VzYWdlLAogCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKIAotCWlmICh1c2VfZ2xvYmFsX2NvbmZpZyArIHVzZV9zeXN0ZW1fY29uZmlnICsgdXNlX2xvY2FsX2NvbmZpZyArICEhZ2l2ZW5fY29uZmlnX2ZpbGUgPiAxKSB7CisJaWYgKHVzZV9nbG9iYWxfY29uZmlnICsgdXNlX3N5c3RlbV9jb25maWcgKyB1c2VfbG9jYWxfY29uZmlnICsKKwkgICAgISFnaXZlbl9jb25maWdfZmlsZSArICEhZ2l2ZW5fY29uZmlnX2Jsb2IgPiAxKSB7CiAJCWVycm9yKCJvbmx5IG9uZSBjb25maWcgZmlsZSBhdCBhIHRpbWUuIik7CiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2NvbmZpZ191c2FnZSwgYnVpbHRpbl9jb25maWdfb3B0aW9ucyk7CiAJfQpAQCAtMzc5LDggKzM5Niw4IEBACiAJCQkgKi8KIAkJCWRpZSgiJEhPTUUgbm90IHNldCIpOwogCi0JCWlmIChhY2Nlc3Nfb3Jfd2Fybih1c2VyX2NvbmZpZywgUl9PSykgJiYKLQkJICAgIHhkZ19jb25maWcgJiYgIWFjY2Vzc19vcl93YXJuKHhkZ19jb25maWcsIFJfT0spKQorCQlpZiAoYWNjZXNzX29yX3dhcm4odXNlcl9jb25maWcsIFJfT0ssIDApICYmCisJCSAgICB4ZGdfY29uZmlnICYmICFhY2Nlc3Nfb3Jfd2Fybih4ZGdfY29uZmlnLCBSX09LLCAwKSkKIAkJCWdpdmVuX2NvbmZpZ19maWxlID0geGRnX2NvbmZpZzsKIAkJZWxzZQogCQkJZ2l2ZW5fY29uZmlnX2ZpbGUgPSB1c2VyX2NvbmZpZzsKQEAgLTQzOCw2ICs0NTUsNyBAQAogCQljaGVja19hcmdjKGFyZ2MsIDAsIDApOwogCQlpZiAoZ2l0X2NvbmZpZ193aXRoX29wdGlvbnMoc2hvd19hbGxfY29uZmlnLCBOVUxMLAogCQkJCQkgICAgZ2l2ZW5fY29uZmlnX2ZpbGUsCisJCQkJCSAgICBnaXZlbl9jb25maWdfYmxvYiwKIAkJCQkJICAgIHJlc3BlY3RfaW5jbHVkZXMpIDwgMCkgewogCQkJaWYgKGdpdmVuX2NvbmZpZ19maWxlKQogCQkJCWRpZV9lcnJubygidW5hYmxlIHRvIHJlYWQgY29uZmlnIGZpbGUgJyVzJyIsCkBAIC00NTAsNiArNDY4LDggQEAKIAkJY2hlY2tfYXJnYyhhcmdjLCAwLCAwKTsKIAkJaWYgKCFnaXZlbl9jb25maWdfZmlsZSAmJiBub25naXQpCiAJCQlkaWUoIm5vdCBpbiBhIGdpdCBkaXJlY3RvcnkiKTsKKwkJaWYgKGdpdmVuX2NvbmZpZ19ibG9iKQorCQkJZGllKCJlZGl0aW5nIGJsb2JzIGlzIG5vdCBzdXBwb3J0ZWQiKTsKIAkJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCQlsYXVuY2hfZWRpdG9yKGdpdmVuX2NvbmZpZ19maWxlID8KIAkJCSAgICAgIGdpdmVuX2NvbmZpZ19maWxlIDogZ2l0X3BhdGgoImNvbmZpZyIpLApAQCAtNDU3LDYgKzQ3Nyw3IEBACiAJfQogCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX1NFVCkgewogCQlpbnQgcmV0OworCQljaGVja19ibG9iX3dyaXRlKCk7CiAJCWNoZWNrX2FyZ2MoYXJnYywgMiwgMik7CiAJCXZhbHVlID0gbm9ybWFsaXplX3ZhbHVlKGFyZ3ZbMF0sIGFyZ3ZbMV0pOwogCQlyZXQgPSBnaXRfY29uZmlnX3NldF9pbl9maWxlKGdpdmVuX2NvbmZpZ19maWxlLCBhcmd2WzBdLCB2YWx1ZSk7CkBAIC00NjYsMTggKzQ4NywyMSBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAllbHNlIGlmIChhY3Rpb25zID09IEFDVElPTl9TRVRfQUxMKSB7CisJCWNoZWNrX2Jsb2Jfd3JpdGUoKTsKIAkJY2hlY2tfYXJnYyhhcmdjLCAyLCAzKTsKIAkJdmFsdWUgPSBub3JtYWxpemVfdmFsdWUoYXJndlswXSwgYXJndlsxXSk7CiAJCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlKGdpdmVuX2NvbmZpZ19maWxlLAogCQkJCQkJICAgICAgIGFyZ3ZbMF0sIHZhbHVlLCBhcmd2WzJdLCAwKTsKIAl9CiAJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fQUREKSB7CisJCWNoZWNrX2Jsb2Jfd3JpdGUoKTsKIAkJY2hlY2tfYXJnYyhhcmdjLCAyLCAyKTsKIAkJdmFsdWUgPSBub3JtYWxpemVfdmFsdWUoYXJndlswXSwgYXJndlsxXSk7CiAJCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlKGdpdmVuX2NvbmZpZ19maWxlLAogCQkJCQkJICAgICAgIGFyZ3ZbMF0sIHZhbHVlLCAiXiQiLCAwKTsKIAl9CiAJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fUkVQTEFDRV9BTEwpIHsKKwkJY2hlY2tfYmxvYl93cml0ZSgpOwogCQljaGVja19hcmdjKGFyZ2MsIDIsIDMpOwogCQl2YWx1ZSA9IG5vcm1hbGl6ZV92YWx1ZShhcmd2WzBdLCBhcmd2WzFdKTsKIAkJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGUoZ2l2ZW5fY29uZmlnX2ZpbGUsCkBAIC01MDAsNiArNTI0LDcgQEAKIAkJcmV0dXJuIGdldF92YWx1ZShhcmd2WzBdLCBhcmd2WzFdKTsKIAl9CiAJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fVU5TRVQpIHsKKwkJY2hlY2tfYmxvYl93cml0ZSgpOwogCQljaGVja19hcmdjKGFyZ2MsIDEsIDIpOwogCQlpZiAoYXJnYyA9PSAyKQogCQkJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGUoZ2l2ZW5fY29uZmlnX2ZpbGUsCkBAIC01MDksMTIgKzUzNCwxNCBAQAogCQkJCQkJICAgICAgYXJndlswXSwgTlVMTCk7CiAJfQogCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX1VOU0VUX0FMTCkgeworCQljaGVja19ibG9iX3dyaXRlKCk7CiAJCWNoZWNrX2FyZ2MoYXJnYywgMSwgMik7CiAJCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlKGdpdmVuX2NvbmZpZ19maWxlLAogCQkJCQkJICAgICAgIGFyZ3ZbMF0sIE5VTEwsIGFyZ3ZbMV0sIDEpOwogCX0KIAllbHNlIGlmIChhY3Rpb25zID09IEFDVElPTl9SRU5BTUVfU0VDVElPTikgewogCQlpbnQgcmV0OworCQljaGVja19ibG9iX3dyaXRlKCk7CiAJCWNoZWNrX2FyZ2MoYXJnYywgMiwgMik7CiAJCXJldCA9IGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb25faW5fZmlsZShnaXZlbl9jb25maWdfZmlsZSwKIAkJCQkJCQlhcmd2WzBdLCBhcmd2WzFdKTsKQEAgLTUyNSw2ICs1NTIsNyBAQAogCX0KIAllbHNlIGlmIChhY3Rpb25zID09IEFDVElPTl9SRU1PVkVfU0VDVElPTikgewogCQlpbnQgcmV0OworCQljaGVja19ibG9iX3dyaXRlKCk7CiAJCWNoZWNrX2FyZ2MoYXJnYywgMSwgMSk7CiAJCXJldCA9IGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb25faW5fZmlsZShnaXZlbl9jb25maWdfZmlsZSwKIAkJCQkJCQlhcmd2WzBdLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vZGVzY3JpYmUuYyBiL2J1aWx0aW4vZGVzY3JpYmUuYwppbmRleCA2NjM2YTY4Li43ZDczNzIyIDEwMDY0NAotLS0gYS9idWlsdGluL2Rlc2NyaWJlLmMKKysrIGIvYnVpbHRpbi9kZXNjcmliZS5jCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKICNpbmNsdWRlICJkaWZmLmgiCiAjaW5jbHVkZSAiaGFzaC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKIAogI2RlZmluZSBTRUVOCQkoMXU8PDApCiAjZGVmaW5lIE1BWF9UQUdTCShGTEFHX0JJVFMgLSAxKQpAQCAtMjEsNiArMjIsNyBAQAogc3RhdGljIGludCBhbGw7CS8qIEFueSB2YWxpZCByZWYgY2FuIGJlIHVzZWQgKi8KIHN0YXRpYyBpbnQgdGFnczsJLyogQWxsb3cgbGlnaHR3ZWlnaHQgdGFncyAqLwogc3RhdGljIGludCBsb25nZm9ybWF0Oworc3RhdGljIGludCBmaXJzdF9wYXJlbnQ7CiBzdGF0aWMgaW50IGFiYnJldiA9IC0xOyAvKiB1bnNwZWNpZmllZCAqLwogc3RhdGljIGludCBtYXhfY2FuZGlkYXRlcyA9IDEwOwogc3RhdGljIHN0cnVjdCBoYXNoX3RhYmxlIG5hbWVzOwpAQCAtNDIsNyArNDQsNyBAQAogCXVuc2lnbmVkIHByaW86MjsgLyogYW5ub3RhdGVkIHRhZyA9IDIsIHRhZyA9IDEsIGhlYWQgPSAwICovCiAJdW5zaWduZWQgbmFtZV9jaGVja2VkOjE7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKLQljb25zdCBjaGFyICpwYXRoOworCWNoYXIgKnBhdGg7CiB9Owogc3RhdGljIGNvbnN0IGNoYXIgKnByaW9fbmFtZXNbXSA9IHsKIAkiaGVhZCIsICJsaWdodHdlaWdodCIsICJhbm5vdGF0ZWQiLApAQCAtMTI2LDEyICsxMjgsMTQgQEAKIAkJCX0gZWxzZSB7CiAJCQkJZS0+bmV4dCA9IE5VTEw7CiAJCQl9CisJCQllLT5wYXRoID0gTlVMTDsKIAkJfQogCQllLT50YWcgPSB0YWc7CiAJCWUtPnByaW8gPSBwcmlvOwogCQllLT5uYW1lX2NoZWNrZWQgPSAwOwogCQloYXNoY3B5KGUtPnNoYTEsIHNoYTEpOwotCQllLT5wYXRoID0gcGF0aDsKKwkJZnJlZShlLT5wYXRoKTsKKwkJZS0+cGF0aCA9IHhzdHJkdXAocGF0aCk7CiAJfQogfQogCkBAIC0zMzYsNiArMzQwLDkgQEAKIAkJCQljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShwLCAmbGlzdCk7CiAJCQlwLT5vYmplY3QuZmxhZ3MgfD0gYy0+b2JqZWN0LmZsYWdzOwogCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisKKwkJCWlmIChmaXJzdF9wYXJlbnQpCisJCQkJYnJlYWs7CiAJCX0KIAl9CiAKQEAgLTQwNCw2ICs0MTEsNyBAQAogCQlPUFRfQk9PTEVBTigwLCAiYWxsIiwgICAgICAgICZhbGwsIE5fKCJ1c2UgYW55IHJlZiIpKSwKIAkJT1BUX0JPT0xFQU4oMCwgInRhZ3MiLCAgICAgICAmdGFncywgTl8oInVzZSBhbnkgdGFnLCBldmVuIHVuYW5ub3RhdGVkIikpLAogCQlPUFRfQk9PTEVBTigwLCAibG9uZyIsICAgICAgICZsb25nZm9ybWF0LCBOXygiYWx3YXlzIHVzZSBsb25nIGZvcm1hdCIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgImZpcnN0LXBhcmVudCIsICZmaXJzdF9wYXJlbnQsIE5fKCJvbmx5IGZvbGxvdyBmaXJzdCBwYXJlbnQiKSksCiAJCU9QVF9fQUJCUkVWKCZhYmJyZXYpLAogCQlPUFRfU0VUX0lOVCgwLCAiZXhhY3QtbWF0Y2giLCAmbWF4X2NhbmRpZGF0ZXMsCiAJCQkgICAgTl8oIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiKSwgMCksCkBAIC00MzUsMjQgKzQ0MywyNCBAQAogCQlkaWUoXygiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiKSk7CiAKIAlpZiAoY29udGFpbnMpIHsKLQkJY29uc3QgY2hhciAqKmFyZ3MgPSB4bWFsbG9jKCg3ICsgYXJnYykgKiBzaXplb2YoY2hhciAqKSk7Ci0JCWludCBpID0gMDsKLQkJYXJnc1tpKytdID0gIm5hbWUtcmV2IjsKLQkJYXJnc1tpKytdID0gIi0tbmFtZS1vbmx5IjsKLQkJYXJnc1tpKytdID0gIi0tbm8tdW5kZWZpbmVkIjsKKwkJc3RydWN0IGFyZ3ZfYXJyYXkgYXJnczsKKworCQlhcmd2X2FycmF5X2luaXQoJmFyZ3MpOworCQlhcmd2X2FycmF5X3B1c2hsKCZhcmdzLCAibmFtZS1yZXYiLAorCQkJCSAiLS1wZWVsLXRhZyIsICItLW5hbWUtb25seSIsICItLW5vLXVuZGVmaW5lZCIsCisJCQkJIE5VTEwpOwogCQlpZiAoYWx3YXlzKQotCQkJYXJnc1tpKytdID0gIi0tYWx3YXlzIjsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tYWx3YXlzIik7CiAJCWlmICghYWxsKSB7Ci0JCQlhcmdzW2krK10gPSAiLS10YWdzIjsKLQkJCWlmIChwYXR0ZXJuKSB7Ci0JCQkJY2hhciAqcyA9IHhtYWxsb2Moc3RybGVuKCItLXJlZnM9cmVmcy90YWdzLyIpICsgc3RybGVuKHBhdHRlcm4pICsgMSk7Ci0JCQkJc3ByaW50ZihzLCAiLS1yZWZzPXJlZnMvdGFncy8lcyIsIHBhdHRlcm4pOwotCQkJCWFyZ3NbaSsrXSA9IHM7Ci0JCQl9CisJCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLXRhZ3MiKTsKKwkJCWlmIChwYXR0ZXJuKQorCQkJCWFyZ3ZfYXJyYXlfcHVzaGYoJmFyZ3MsICItLXJlZnM9cmVmcy90YWdzLyVzIiwgcGF0dGVybik7CiAJCX0KLQkJbWVtY3B5KGFyZ3MgKyBpLCBhcmd2LCBhcmdjICogc2l6ZW9mKGNoYXIgKikpOwotCQlhcmdzW2kgKyBhcmdjXSA9IE5VTEw7Ci0JCXJldHVybiBjbWRfbmFtZV9yZXYoaSArIGFyZ2MsIGFyZ3MsIHByZWZpeCk7CisJCXdoaWxlICgqYXJndikgeworCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAqYXJndik7CisJCQlhcmd2Kys7CisJCX0KKwkJcmV0dXJuIGNtZF9uYW1lX3JldihhcmdzLmFyZ2MsIGFyZ3MuYXJndiwgcHJlZml4KTsKIAl9CiAKIAlpbml0X2hhc2goJm5hbWVzKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vZGlmZi5jIGIvYnVpbHRpbi9kaWZmLmMKaW5kZXggOGMyYWY2Yy4uOWZjMjczZCAxMDA2NDQKLS0tIGEvYnVpbHRpbi9kaWZmLmMKKysrIGIvYnVpbHRpbi9kaWZmLmMKQEAgLTE1Myw3ICsxNTMsOCBAQAogCiBzdGF0aWMgaW50IGJ1aWx0aW5fZGlmZl90cmVlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKIAkJCSAgICAgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAotCQkJICAgICBzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICplbnQpCisJCQkgICAgIHN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKmVudDAsCisJCQkgICAgIHN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKmVudDEpCiB7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqKHNoYTFbMl0pOwogCWludCBzd2FwID0gMDsKQEAgLTE2MSwxMyArMTYyLDE0IEBACiAJaWYgKGFyZ2MgPiAxKQogCQl1c2FnZShidWlsdGluX2RpZmZfdXNhZ2UpOwogCi0JLyogV2Ugc2F3IHR3byB0cmVlcywgZW50WzBdIGFuZCBlbnRbMV0uCi0JICogaWYgZW50WzFdIGlzIHVuaW50ZXJlc3RpbmcsIHRoZXkgYXJlIHN3YXBwZWQKKwkvKgorCSAqIFdlIHNhdyB0d28gdHJlZXMsIGVudDAgYW5kIGVudDEuICBJZiBlbnQxIGlzIHVuaW50ZXJlc3RpbmcsCisJICogc3dhcCB0aGVtLgogCSAqLwotCWlmIChlbnRbMV0uaXRlbS0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCWlmIChlbnQxLT5pdGVtLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpCiAJCXN3YXAgPSAxOwotCXNoYTFbc3dhcF0gPSBlbnRbMF0uaXRlbS0+c2hhMTsKLQlzaGExWzEtc3dhcF0gPSBlbnRbMV0uaXRlbS0+c2hhMTsKKwlzaGExW3N3YXBdID0gZW50MC0+aXRlbS0+c2hhMTsKKwlzaGExWzEtc3dhcF0gPSBlbnQxLT5pdGVtLT5zaGExOwogCWRpZmZfdHJlZV9zaGExKHNoYTFbMF0sIHNoYTFbMV0sICIiLCAmcmV2cy0+ZGlmZm9wdCk7CiAJbG9nX3RyZWVfZGlmZl9mbHVzaChyZXZzKTsKIAlyZXR1cm4gMDsKQEAgLTI1MSw4ICsyNTMsOCBAQAogewogCWludCBpOwogCXN0cnVjdCByZXZfaW5mbyByZXY7Ci0Jc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSBlbnRbMTAwXTsKLQlpbnQgZW50cyA9IDAsIGJsb2JzID0gMCwgcGF0aHMgPSAwOworCXN0cnVjdCBvYmplY3RfYXJyYXkgZW50ID0gT0JKRUNUX0FSUkFZX0lOSVQ7CisJaW50IGJsb2JzID0gMCwgcGF0aHMgPSAwOwogCWNvbnN0IGNoYXIgKnBhdGggPSBOVUxMOwogCXN0cnVjdCBibG9iaW5mbyBibG9iWzJdOwogCWludCBub25naXQ7CkBAIC0zMzcsOSArMzM5LDkgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgcmV2LnBlbmRpbmcubnI7IGkrKykgewotCQlzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICpsaXN0ID0gcmV2LnBlbmRpbmcub2JqZWN0cytpOwotCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBsaXN0LT5pdGVtOwotCQljb25zdCBjaGFyICpuYW1lID0gbGlzdC0+bmFtZTsKKwkJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqZW50cnkgPSAmcmV2LnBlbmRpbmcub2JqZWN0c1tpXTsKKwkJc3RydWN0IG9iamVjdCAqb2JqID0gZW50cnktPml0ZW07CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBlbnRyeS0+bmFtZTsKIAkJaW50IGZsYWdzID0gKG9iai0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKTsKIAkJaWYgKCFvYmotPnBhcnNlZCkKIAkJCW9iaiA9IHBhcnNlX29iamVjdChvYmotPnNoYTEpOwpAQCAtMzQ4LDI3ICszNTAsMjEgQEAKIAkJCWRpZShfKCJpbnZhbGlkIG9iamVjdCAnJXMnIGdpdmVuLiIpLCBuYW1lKTsKIAkJaWYgKG9iai0+dHlwZSA9PSBPQkpfQ09NTUlUKQogCQkJb2JqID0gJigoc3RydWN0IGNvbW1pdCAqKW9iaiktPnRyZWUtPm9iamVjdDsKKwogCQlpZiAob2JqLT50eXBlID09IE9CSl9UUkVFKSB7Ci0JCQlpZiAoQVJSQVlfU0laRShlbnQpIDw9IGVudHMpCi0JCQkJZGllKF8oIm1vcmUgdGhhbiAlZCB0cmVlcyBnaXZlbjogJyVzJyIpLAotCQkJCSAgICAoaW50KSBBUlJBWV9TSVpFKGVudCksIG5hbWUpOwogCQkJb2JqLT5mbGFncyB8PSBmbGFnczsKLQkJCWVudFtlbnRzXS5pdGVtID0gb2JqOwotCQkJZW50W2VudHNdLm5hbWUgPSBuYW1lOwotCQkJZW50cysrOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKG9iai0+dHlwZSA9PSBPQkpfQkxPQikgeworCQkJYWRkX29iamVjdF9hcnJheShvYmosIG5hbWUsICZlbnQpOworCQl9IGVsc2UgaWYgKG9iai0+dHlwZSA9PSBPQkpfQkxPQikgewogCQkJaWYgKDIgPD0gYmxvYnMpCiAJCQkJZGllKF8oIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciKSwgbmFtZSk7CiAJCQloYXNoY3B5KGJsb2JbYmxvYnNdLnNoYTEsIG9iai0+c2hhMSk7CiAJCQlibG9iW2Jsb2JzXS5uYW1lID0gbmFtZTsKLQkJCWJsb2JbYmxvYnNdLm1vZGUgPSBsaXN0LT5tb2RlOworCQkJYmxvYltibG9ic10ubW9kZSA9IGVudHJ5LT5tb2RlOwogCQkJYmxvYnMrKzsKLQkJCWNvbnRpbnVlOwogCisJCX0gZWxzZSB7CisJCQlkaWUoXygidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIpLCBuYW1lKTsKIAkJfQotCQlkaWUoXygidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIpLCBuYW1lKTsKIAl9CiAJaWYgKHJldi5wcnVuZV9kYXRhLm5yKSB7CiAJCWlmICghcGF0aCkKQEAgLTM3OSw3ICszNzUsNyBAQAogCS8qCiAJICogTm93LCBkbyB0aGUgYXJndW1lbnRzIGxvb2sgcmVhc29uYWJsZT8KIAkgKi8KLQlpZiAoIWVudHMpIHsKKwlpZiAoIWVudC5ucikgewogCQlzd2l0Y2ggKGJsb2JzKSB7CiAJCWNhc2UgMDoKIAkJCXJlc3VsdCA9IGJ1aWx0aW5fZGlmZl9maWxlcygmcmV2LCBhcmdjLCBhcmd2KTsKQEAgLTQwMCwyMyArMzk2LDI2IEBACiAJfQogCWVsc2UgaWYgKGJsb2JzKQogCQl1c2FnZShidWlsdGluX2RpZmZfdXNhZ2UpOwotCWVsc2UgaWYgKGVudHMgPT0gMSkKKwllbHNlIGlmIChlbnQubnIgPT0gMSkKIAkJcmVzdWx0ID0gYnVpbHRpbl9kaWZmX2luZGV4KCZyZXYsIGFyZ2MsIGFyZ3YpOwotCWVsc2UgaWYgKGVudHMgPT0gMikKLQkJcmVzdWx0ID0gYnVpbHRpbl9kaWZmX3RyZWUoJnJldiwgYXJnYywgYXJndiwgZW50KTsKLQllbHNlIGlmIChlbnRbMF0uaXRlbS0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB7CisJZWxzZSBpZiAoZW50Lm5yID09IDIpCisJCXJlc3VsdCA9IGJ1aWx0aW5fZGlmZl90cmVlKCZyZXYsIGFyZ2MsIGFyZ3YsCisJCQkJCSAgICZlbnQub2JqZWN0c1swXSwgJmVudC5vYmplY3RzWzFdKTsKKwllbHNlIGlmIChlbnQub2JqZWN0c1swXS5pdGVtLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpIHsKIAkJLyoKIAkJICogZGlmZiBBLi4uQiB3aGVyZSB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgbWVyZ2UgYmFzZQotCQkgKiBiZXR3ZWVuIEEgYW5kIEIuICBXZSBoYXZlIGVudFswXSA9PSBtZXJnZS1iYXNlLAotCQkgKiBlbnRbZW50cy0yXSA9PSBBLCBhbmQgZW50W2VudHMtMV0gPT0gQi4gIFNob3cgZGlmZgotCQkgKiBiZXR3ZWVuIHRoZSBiYXNlIGFuZCBCLiAgTm90ZSB0aGF0IHdlIHBpY2sgb25lCi0JCSAqIG1lcmdlIGJhc2UgYXQgcmFuZG9tIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lLgorCQkgKiBiZXR3ZWVuIEEgYW5kIEIuICBXZSBoYXZlIGVudC5vYmplY3RzWzBdID09CisJCSAqIG1lcmdlLWJhc2UsIGVudC5vYmplY3RzW2VudHMtMl0gPT0gQSwgYW5kCisJCSAqIGVudC5vYmplY3RzW2VudHMtMV0gPT0gQi4gIFNob3cgZGlmZiBiZXR3ZWVuIHRoZQorCQkgKiBiYXNlIGFuZCBCLiAgTm90ZSB0aGF0IHdlIHBpY2sgb25lIG1lcmdlIGJhc2UgYXQKKwkJICogcmFuZG9tIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lLgogCQkgKi8KLQkJZW50WzFdID0gZW50W2VudHMtMV07Ci0JCXJlc3VsdCA9IGJ1aWx0aW5fZGlmZl90cmVlKCZyZXYsIGFyZ2MsIGFyZ3YsIGVudCk7CisJCXJlc3VsdCA9IGJ1aWx0aW5fZGlmZl90cmVlKCZyZXYsIGFyZ2MsIGFyZ3YsCisJCQkJCSAgICZlbnQub2JqZWN0c1swXSwKKwkJCQkJICAgJmVudC5vYmplY3RzW2VudC5uci0xXSk7CiAJfSBlbHNlCiAJCXJlc3VsdCA9IGJ1aWx0aW5fZGlmZl9jb21iaW5lZCgmcmV2LCBhcmdjLCBhcmd2LAotCQkJCQkgICAgICAgZW50LCBlbnRzKTsKKwkJCQkJICAgICAgIGVudC5vYmplY3RzLCBlbnQubnIpOwogCXJlc3VsdCA9IGRpZmZfcmVzdWx0X2NvZGUoJnJldi5kaWZmb3B0LCByZXN1bHQpOwogCWlmICgxIDwgcmV2LmRpZmZvcHQuc2tpcF9zdGF0X3VubWF0Y2gpCiAJCXJlZnJlc2hfaW5kZXhfcXVpZXRseSgpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9mYXN0LWV4cG9ydC5jIGIvYnVpbHRpbi9mYXN0LWV4cG9ydC5jCmluZGV4IGQ2MGQ2NzUuLmQxZDY4ZTkgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vZmFzdC1leHBvcnQuYworKysgYi9idWlsdGluL2Zhc3QtZXhwb3J0LmMKQEAgLTYxMyw2ICs2MTMsOCBAQAogCQljaGFyICpsaW5lX2VuZCwgKm1hcmtfZW5kOwogCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOwogCiAJCWxpbmVfZW5kID0gc3RyY2hyKGxpbmUsICdcbicpOwogCQlpZiAobGluZVswXSAhPSAnOicgfHwgIWxpbmVfZW5kKQpAQCAtNjIxLDIzICs2MjMsMjkgQEAKIAogCQltYXJrID0gc3RydG91bWF4KGxpbmUgKyAxLCAmbWFya19lbmQsIDEwKTsKIAkJaWYgKCFtYXJrIHx8IG1hcmtfZW5kID09IGxpbmUgKyAxCi0JCQl8fCAqbWFya19lbmQgIT0gJyAnIHx8IGdldF9zaGExKG1hcmtfZW5kICsgMSwgc2hhMSkpCisJCQl8fCAqbWFya19lbmQgIT0gJyAnIHx8IGdldF9zaGExX2hleChtYXJrX2VuZCArIDEsIHNoYTEpKQogCQkJZGllKCJjb3JydXB0IG1hcmsgbGluZTogJXMiLCBsaW5lKTsKIAogCQlpZiAobGFzdF9pZG51bSA8IG1hcmspCiAJCQlsYXN0X2lkbnVtID0gbWFyazsKIAotCQlvYmplY3QgPSBwYXJzZV9vYmplY3Qoc2hhMSk7Ci0JCWlmICghb2JqZWN0KQorCQl0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKTsKKwkJaWYgKHR5cGUgPCAwKQorCQkJZGllKCJvYmplY3Qgbm90IGZvdW5kOiAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKworCQlpZiAodHlwZSAhPSBPQkpfQ09NTUlUKQorCQkJLyogb25seSBjb21taXRzICovCiAJCQljb250aW51ZTsKIAorCQljb21taXQgPSBsb29rdXBfY29tbWl0KHNoYTEpOworCQlpZiAoIWNvbW1pdCkKKwkJCWRpZSgibm90IGEgY29tbWl0PyBjYW4ndCBoYXBwZW46ICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCisJCW9iamVjdCA9ICZjb21taXQtPm9iamVjdDsKKwogCQlpZiAob2JqZWN0LT5mbGFncyAmIFNIT1dOKQogCQkJZXJyb3IoIk9iamVjdCAlcyBhbHJlYWR5IGhhcyBhIG1hcmsiLCBzaGExX3RvX2hleChzaGExKSk7CiAKLQkJaWYgKG9iamVjdC0+dHlwZSAhPSBPQkpfQ09NTUlUKQotCQkJLyogb25seSBjb21taXRzICovCi0JCQljb250aW51ZTsKLQogCQltYXJrX29iamVjdChvYmplY3QsIG1hcmspOwogCiAJCW9iamVjdC0+ZmxhZ3MgfD0gU0hPV047CmRpZmYgLS1naXQgYS9idWlsdGluL2ZldGNoLmMgYi9idWlsdGluL2ZldGNoLmMKaW5kZXggNGI2YjFkZi4uZDc4NGIyZSAxMDA2NDQKLS0tIGEvYnVpbHRpbi9mZXRjaC5jCisrKyBiL2J1aWx0aW4vZmV0Y2guYwpAQCAtMTE5LDcgKzExOSw3IEBACiAKIAkJZm9yIChybSA9ICpoZWFkOyBybTsgcm0gPSBybS0+bmV4dCkgewogCQkJaWYgKGJyYW5jaF9tZXJnZV9tYXRjaGVzKGJyYW5jaCwgaSwgcm0tPm5hbWUpKSB7Ci0JCQkJcm0tPm1lcmdlID0gMTsKKwkJCQlybS0+ZmV0Y2hfaGVhZF9zdGF0dXMgPSBGRVRDSF9IRUFEX01FUkdFOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0xNDAsNyArMTQwLDcgQEAKIAkJcmVmc3BlYy5zcmMgPSBicmFuY2gtPm1lcmdlW2ldLT5zcmM7CiAJCWdldF9mZXRjaF9tYXAocmVtb3RlX3JlZnMsICZyZWZzcGVjLCB0YWlsLCAxKTsKIAkJZm9yIChybSA9ICpvbGRfdGFpbDsgcm07IHJtID0gcm0tPm5leHQpCi0JCQlybS0+bWVyZ2UgPSAxOworCQkJcm0tPmZldGNoX2hlYWRfc3RhdHVzID0gRkVUQ0hfSEVBRF9NRVJHRTsKIAl9CiB9CiAKQEAgLTE2MCw2ICsxNjAsOCBAQAogCWNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzID0gdHJhbnNwb3J0X2dldF9yZW1vdGVfcmVmcyh0cmFuc3BvcnQpOwogCiAJaWYgKHJlZl9jb3VudCB8fCB0YWdzID09IFRBR1NfU0VUKSB7CisJCXN0cnVjdCByZWYgKipvbGRfdGFpbDsKKwogCQlmb3IgKGkgPSAwOyBpIDwgcmVmX2NvdW50OyBpKyspIHsKIAkJCWdldF9mZXRjaF9tYXAocmVtb3RlX3JlZnMsICZyZWZzW2ldLCAmdGFpbCwgMCk7CiAJCQlpZiAocmVmc1tpXS5kc3QgJiYgcmVmc1tpXS5kc3RbMF0pCkBAIC0xNjcsOSArMTY5LDIzIEBACiAJCX0KIAkJLyogTWVyZ2UgZXZlcnl0aGluZyBvbiB0aGUgY29tbWFuZCBsaW5lLCBidXQgbm90IC0tdGFncyAqLwogCQlmb3IgKHJtID0gcmVmX21hcDsgcm07IHJtID0gcm0tPm5leHQpCi0JCQlybS0+bWVyZ2UgPSAxOworCQkJcm0tPmZldGNoX2hlYWRfc3RhdHVzID0gRkVUQ0hfSEVBRF9NRVJHRTsKIAkJaWYgKHRhZ3MgPT0gVEFHU19TRVQpCiAJCQlnZXRfZmV0Y2hfbWFwKHJlbW90ZV9yZWZzLCB0YWdfcmVmc3BlYywgJnRhaWwsIDApOworCisJCS8qCisJCSAqIEZvciBhbnkgcmVmcyB0aGF0IHdlIGhhcHBlbiB0byBiZSBmZXRjaGluZyB2aWEgY29tbWFuZC1saW5lCisJCSAqIGFyZ3VtZW50cywgdGFrZSB0aGUgb3Bwb3J0dW5pdHkgdG8gdXBkYXRlIHRoZWlyIGNvbmZpZ3VyZWQKKwkJICogY291bnRlcnBhcnRzLiBIb3dldmVyLCB3ZSBkbyBub3Qgd2FudCB0byBtZW50aW9uIHRoZXNlCisJCSAqIGVudHJpZXMgaW4gRkVUQ0hfSEVBRCBhdCBhbGwsIGFzIHRoZXkgd291bGQgc2ltcGx5IGJlCisJCSAqIGR1cGxpY2F0ZXMgb2YgZXhpc3RpbmcgZW50cmllcy4KKwkJICovCisJCW9sZF90YWlsID0gdGFpbDsKKwkJZm9yIChpID0gMDsgaSA8IHRyYW5zcG9ydC0+cmVtb3RlLT5mZXRjaF9yZWZzcGVjX25yOyBpKyspCisJCQlnZXRfZmV0Y2hfbWFwKHJlZl9tYXAsICZ0cmFuc3BvcnQtPnJlbW90ZS0+ZmV0Y2hbaV0sCisJCQkJICAgICAgJnRhaWwsIDEpOworCQlmb3IgKHJtID0gKm9sZF90YWlsOyBybTsgcm0gPSBybS0+bmV4dCkKKwkJCXJtLT5mZXRjaF9oZWFkX3N0YXR1cyA9IEZFVENIX0hFQURfSUdOT1JFOwogCX0gZWxzZSB7CiAJCS8qIFVzZSB0aGUgZGVmYXVsdHMgKi8KIAkJc3RydWN0IHJlbW90ZSAqcmVtb3RlID0gdHJhbnNwb3J0LT5yZW1vdGU7CkBAIC0xODYsNyArMjAyLDcgQEAKIAkJCQkJKmF1dG90YWdzID0gMTsKIAkJCQlpZiAoIWkgJiYgIWhhc19tZXJnZSAmJiByZWZfbWFwICYmCiAJCQkJICAgICFyZW1vdGUtPmZldGNoWzBdLnBhdHRlcm4pCi0JCQkJCXJlZl9tYXAtPm1lcmdlID0gMTsKKwkJCQkJcmVmX21hcC0+ZmV0Y2hfaGVhZF9zdGF0dXMgPSBGRVRDSF9IRUFEX01FUkdFOwogCQkJfQogCQkJLyoKIAkJCSAqIGlmIHRoZSByZW1vdGUgd2UncmUgZmV0Y2hpbmcgZnJvbSBpcyB0aGUgc2FtZQpAQCAtMjAyLDcgKzIxOCw3IEBACiAJCQlyZWZfbWFwID0gZ2V0X3JlbW90ZV9yZWYocmVtb3RlX3JlZnMsICJIRUFEIik7CiAJCQlpZiAoIXJlZl9tYXApCiAJCQkJZGllKF8oIkNvdWxkbid0IGZpbmQgcmVtb3RlIHJlZiBIRUFEIikpOwotCQkJcmVmX21hcC0+bWVyZ2UgPSAxOworCQkJcmVmX21hcC0+ZmV0Y2hfaGVhZF9zdGF0dXMgPSBGRVRDSF9IRUFEX01FUkdFOwogCQkJdGFpbCA9ICZyZWZfbWFwLT5uZXh0OwogCQl9CiAJfQpAQCAtMzg5LDcgKzQwNSw3IEBACiAJY29uc3QgY2hhciAqd2hhdCwgKmtpbmQ7CiAJc3RydWN0IHJlZiAqcm07CiAJY2hhciAqdXJsLCAqZmlsZW5hbWUgPSBkcnlfcnVuID8gIi9kZXYvbnVsbCIgOiBnaXRfcGF0aCgiRkVUQ0hfSEVBRCIpOwotCWludCB3YW50X21lcmdlOworCWludCB3YW50X3N0YXR1czsKIAogCWZwID0gZm9wZW4oZmlsZW5hbWUsICJhIik7CiAJaWYgKCFmcCkKQEAgLTQwNywxOSArNDIzLDIyIEBACiAJfQogCiAJLyoKLQkgKiBUaGUgZmlyc3QgcGFzcyB3cml0ZXMgb2JqZWN0cyB0byBiZSBtZXJnZWQgYW5kIHRoZW4gdGhlCi0JICogc2Vjb25kIHBhc3Mgd3JpdGVzIHRoZSByZXN0LCBpbiBvcmRlciB0byBhbGxvdyB1c2luZwotCSAqIEZFVENIX0hFQUQgYXMgYSByZWZuYW1lIHRvIHJlZmVyIHRvIHRoZSByZWYgdG8gYmUgbWVyZ2VkLgorCSAqIFdlIGRvIGEgcGFzcyBmb3IgZWFjaCBmZXRjaF9oZWFkX3N0YXR1cyB0eXBlIGluIHRoZWlyIGVudW0gb3JkZXIsIHNvCisJICogbWVyZ2VkIGVudHJpZXMgYXJlIHdyaXR0ZW4gYmVmb3JlIG5vdC1mb3ItbWVyZ2UuIFRoYXQgbGV0cyByZWFkZXJzCisJICogdXNlIEZFVENIX0hFQUQgYXMgYSByZWZuYW1lIHRvIHJlZmVyIHRvIHRoZSByZWYgdG8gYmUgbWVyZ2VkLgogCSAqLwotCWZvciAod2FudF9tZXJnZSA9IDE7IDAgPD0gd2FudF9tZXJnZTsgd2FudF9tZXJnZS0tKSB7CisJZm9yICh3YW50X3N0YXR1cyA9IEZFVENIX0hFQURfTUVSR0U7CisJICAgICB3YW50X3N0YXR1cyA8PSBGRVRDSF9IRUFEX0lHTk9SRTsKKwkgICAgIHdhbnRfc3RhdHVzKyspIHsKIAkJZm9yIChybSA9IHJlZl9tYXA7IHJtOyBybSA9IHJtLT5uZXh0KSB7CiAJCQlzdHJ1Y3QgcmVmICpyZWYgPSBOVUxMOworCQkJY29uc3QgY2hhciAqbWVyZ2Vfc3RhdHVzX21hcmtlciA9ICIiOwogCiAJCQljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkocm0tPm9sZF9zaGExLCAxKTsKIAkJCWlmICghY29tbWl0KQotCQkJCXJtLT5tZXJnZSA9IDA7CisJCQkJcm0tPmZldGNoX2hlYWRfc3RhdHVzID0gRkVUQ0hfSEVBRF9OT1RfRk9SX01FUkdFOwogCi0JCQlpZiAocm0tPm1lcmdlICE9IHdhbnRfbWVyZ2UpCisJCQlpZiAocm0tPmZldGNoX2hlYWRfc3RhdHVzICE9IHdhbnRfc3RhdHVzKQogCQkJCWNvbnRpbnVlOwogCiAJCQlpZiAocm0tPnBlZXJfcmVmKSB7CkBAIC00NjUsMTYgKzQ4NCwyNiBAQAogCQkJCQlzdHJidWZfYWRkZigmbm90ZSwgIiVzICIsIGtpbmQpOwogCQkJCXN0cmJ1Zl9hZGRmKCZub3RlLCAiJyVzJyBvZiAiLCB3aGF0KTsKIAkJCX0KLQkJCWZwcmludGYoZnAsICIlc1x0JXNcdCVzIiwKLQkJCQlzaGExX3RvX2hleChybS0+b2xkX3NoYTEpLAotCQkJCXJtLT5tZXJnZSA/ICIiIDogIm5vdC1mb3ItbWVyZ2UiLAotCQkJCW5vdGUuYnVmKTsKLQkJCWZvciAoaSA9IDA7IGkgPCB1cmxfbGVuOyArK2kpCi0JCQkJaWYgKCdcbicgPT0gdXJsW2ldKQotCQkJCQlmcHV0cygiXFxuIiwgZnApOwotCQkJCWVsc2UKLQkJCQkJZnB1dGModXJsW2ldLCBmcCk7Ci0JCQlmcHV0YygnXG4nLCBmcCk7CisJCQlzd2l0Y2ggKHJtLT5mZXRjaF9oZWFkX3N0YXR1cykgeworCQkJY2FzZSBGRVRDSF9IRUFEX05PVF9GT1JfTUVSR0U6CisJCQkJbWVyZ2Vfc3RhdHVzX21hcmtlciA9ICJub3QtZm9yLW1lcmdlIjsKKwkJCQkvKiBmYWxsLXRocm91Z2ggKi8KKwkJCWNhc2UgRkVUQ0hfSEVBRF9NRVJHRToKKwkJCQlmcHJpbnRmKGZwLCAiJXNcdCVzXHQlcyIsCisJCQkJCXNoYTFfdG9faGV4KHJtLT5vbGRfc2hhMSksCisJCQkJCW1lcmdlX3N0YXR1c19tYXJrZXIsCisJCQkJCW5vdGUuYnVmKTsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgdXJsX2xlbjsgKytpKQorCQkJCQlpZiAoJ1xuJyA9PSB1cmxbaV0pCisJCQkJCQlmcHV0cygiXFxuIiwgZnApOworCQkJCQllbHNlCisJCQkJCQlmcHV0Yyh1cmxbaV0sIGZwKTsKKwkJCQlmcHV0YygnXG4nLCBmcCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCS8qIGRvIG5vdCB3cml0ZSBhbnl0aGluZyB0byBGRVRDSF9IRUFEICovCisJCQkJYnJlYWs7CisJCQl9CiAKIAkJCXN0cmJ1Zl9yZXNldCgmbm90ZSk7CiAJCQlpZiAocmVmKSB7CkBAIC01NzEsNyArNjAwLDggQEAKIHsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QgPSAoc3RydWN0IHN0cmluZ19saXN0ICopY2JkYXRhOwogCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KGxpc3QsIHJlZm5hbWUpOwotCWl0ZW0tPnV0aWwgPSAodm9pZCAqKXNoYTE7CisJaXRlbS0+dXRpbCA9IHhtYWxsb2MoMjApOworCWhhc2hjcHkoaXRlbS0+dXRpbCwgc2hhMSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU5MCw3ICs2MjAsNyBAQAogCQkJc3RydWN0IHJlZiAqKmhlYWQsCiAJCQlzdHJ1Y3QgcmVmICoqKnRhaWwpCiB7Ci0Jc3RydWN0IHN0cmluZ19saXN0IGV4aXN0aW5nX3JlZnMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdCBleGlzdGluZ19yZWZzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CiAJc3RydWN0IHN0cmluZ19saXN0IHJlbW90ZV9yZWZzID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKIAljb25zdCBzdHJ1Y3QgcmVmICpyZWY7CiAJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0gPSBOVUxMOwpAQCAtNjM2LDcgKzY2Niw3IEBACiAJCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQoJnJlbW90ZV9yZWZzLCByZWYtPm5hbWUpOwogCQlpdGVtLT51dGlsID0gKHZvaWQgKilyZWYtPm9sZF9zaGExOwogCX0KLQlzdHJpbmdfbGlzdF9jbGVhcigmZXhpc3RpbmdfcmVmcywgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmV4aXN0aW5nX3JlZnMsIDEpOwogCiAJLyoKIAkgKiBXZSBtYXkgaGF2ZSBhIGZpbmFsIGxpZ2h0d2VpZ2h0IHRhZyB0aGF0IG5lZWRzIHRvIGJlCkBAIC02OTMsMTEgKzcyMywxMSBAQAogc3RhdGljIGludCBkb19mZXRjaChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCiAJCSAgICBzdHJ1Y3QgcmVmc3BlYyAqcmVmcywgaW50IHJlZl9jb3VudCkKIHsKLQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXhpc3RpbmdfcmVmcyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7Ci0Jc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnBlZXJfaXRlbSA9IE5VTEw7CisJc3RydWN0IHN0cmluZ19saXN0IGV4aXN0aW5nX3JlZnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKIAlzdHJ1Y3QgcmVmICpyZWZfbWFwOwogCXN0cnVjdCByZWYgKnJtOwogCWludCBhdXRvdGFncyA9ICh0cmFuc3BvcnQtPnJlbW90ZS0+ZmV0Y2hfdGFncyA9PSAxKTsKKwlpbnQgcmV0Y29kZSA9IDA7CiAKIAlmb3JfZWFjaF9yZWYoYWRkX2V4aXN0aW5nLCAmZXhpc3RpbmdfcmVmcyk7CiAKQEAgLTcxMyw5ICs3NDMsOSBAQAogCiAJLyogaWYgbm90IGFwcGVuZGluZywgdHJ1bmNhdGUgRkVUQ0hfSEVBRCAqLwogCWlmICghYXBwZW5kICYmICFkcnlfcnVuKSB7Ci0JCWludCBlcnJjb2RlID0gdHJ1bmNhdGVfZmV0Y2hfaGVhZCgpOwotCQlpZiAoZXJyY29kZSkKLQkJCXJldHVybiBlcnJjb2RlOworCQlyZXRjb2RlID0gdHJ1bmNhdGVfZmV0Y2hfaGVhZCgpOworCQlpZiAocmV0Y29kZSkKKwkJCWdvdG8gY2xlYW51cDsKIAl9CiAKIAlyZWZfbWFwID0gZ2V0X3JlZl9tYXAodHJhbnNwb3J0LCByZWZzLCByZWZfY291bnQsIHRhZ3MsICZhdXRvdGFncyk7CkBAIC03MjQsOCArNzU0LDkgQEAKIAogCWZvciAocm0gPSByZWZfbWFwOyBybTsgcm0gPSBybS0+bmV4dCkgewogCQlpZiAocm0tPnBlZXJfcmVmKSB7Ci0JCQlwZWVyX2l0ZW0gPSBzdHJpbmdfbGlzdF9sb29rdXAoJmV4aXN0aW5nX3JlZnMsCi0JCQkJCQkgICAgICAgcm0tPnBlZXJfcmVmLT5uYW1lKTsKKwkJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpwZWVyX2l0ZW0gPQorCQkJCXN0cmluZ19saXN0X2xvb2t1cCgmZXhpc3RpbmdfcmVmcywKKwkJCQkJCSAgIHJtLT5wZWVyX3JlZi0+bmFtZSk7CiAJCQlpZiAocGVlcl9pdGVtKQogCQkJCWhhc2hjcHkocm0tPnBlZXJfcmVmLT5vbGRfc2hhMSwKIAkJCQkJcGVlcl9pdGVtLT51dGlsKTsKQEAgLTczNiw3ICs3NjcsOCBAQAogCQl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9GT0xMT1dUQUdTLCAiMSIpOwogCWlmIChmZXRjaF9yZWZzKHRyYW5zcG9ydCwgcmVmX21hcCkpIHsKIAkJZnJlZV9yZWZzKHJlZl9tYXApOwotCQlyZXR1cm4gMTsKKwkJcmV0Y29kZSA9IDE7CisJCWdvdG8gY2xlYW51cDsKIAl9CiAJaWYgKHBydW5lKSB7CiAJCS8qIElmIC0tdGFncyB3YXMgc3BlY2lmaWVkLCBwcmV0ZW5kIHRoZSB1c2VyIGdhdmUgdXMgdGhlIGNhbm9uaWNhbCB0YWdzIHJlZnNwZWMgKi8KQEAgLTc3OSw3ICs4MTEsOSBAQAogCQlmcmVlX3JlZnMocmVmX21hcCk7CiAJfQogCi0JcmV0dXJuIDA7CisgY2xlYW51cDoKKwlzdHJpbmdfbGlzdF9jbGVhcigmZXhpc3RpbmdfcmVmcywgMSk7CisJcmV0dXJuIHJldGNvZGU7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9vcHRpb24oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCmRpZmYgLS1naXQgYS9idWlsdGluL2ZzY2suYyBiL2J1aWx0aW4vZnNjay5jCmluZGV4IGJiOWEyY2QuLjk5MDliNmQgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vZnNjay5jCisrKyBiL2J1aWx0aW4vZnNjay5jCkBAIC0xMTIsNyArMTEyLDcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JYWRkX29iamVjdF9hcnJheShvYmosICh2b2lkICopIHBhcmVudCwgJnBlbmRpbmcpOworCWFkZF9vYmplY3RfYXJyYXkob2JqLCBOVUxMLCAmcGVuZGluZyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4vZ3JlcC5jIGIvYnVpbHRpbi9ncmVwLmMKaW5kZXggMTU5ZTY1ZC4uZDNiM2IxZCAxMDA2NDQKLS0tIGEvYnVpbHRpbi9ncmVwLmMKKysrIGIvYnVpbHRpbi9ncmVwLmMKQEAgLTI4Niw4ICsyODYsNyBAQAogCXN0cnVjdCBzdHJidWYgcGF0aGJ1ZiA9IFNUUkJVRl9JTklUOwogCiAJaWYgKG9wdC0+cmVsYXRpdmUgJiYgb3B0LT5wcmVmaXhfbGVuZ3RoKSB7Ci0JCXF1b3RlX3BhdGhfcmVsYXRpdmUoZmlsZW5hbWUgKyB0cmVlX25hbWVfbGVuLCAtMSwgJnBhdGhidWYsCi0JCQkJICAgIG9wdC0+cHJlZml4KTsKKwkJcXVvdGVfcGF0aF9yZWxhdGl2ZShmaWxlbmFtZSArIHRyZWVfbmFtZV9sZW4sIG9wdC0+cHJlZml4LCAmcGF0aGJ1Zik7CiAJCXN0cmJ1Zl9pbnNlcnQoJnBhdGhidWYsIDAsIGZpbGVuYW1lLCB0cmVlX25hbWVfbGVuKTsKIAl9IGVsc2UgewogCQlzdHJidWZfYWRkc3RyKCZwYXRoYnVmLCBmaWxlbmFtZSk7CkBAIC0zMTgsNyArMzE3LDcgQEAKIAlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwogCiAJaWYgKG9wdC0+cmVsYXRpdmUgJiYgb3B0LT5wcmVmaXhfbGVuZ3RoKQotCQlxdW90ZV9wYXRoX3JlbGF0aXZlKGZpbGVuYW1lLCAtMSwgJmJ1Ziwgb3B0LT5wcmVmaXgpOworCQlxdW90ZV9wYXRoX3JlbGF0aXZlKGZpbGVuYW1lLCBvcHQtPnByZWZpeCwgJmJ1Zik7CiAJZWxzZQogCQlzdHJidWZfYWRkc3RyKCZidWYsIGZpbGVuYW1lKTsKIApAQCAtMzc2LDcgKzM3NSw3IEBACiAJcmVhZF9jYWNoZSgpOwogCiAJZm9yIChuciA9IDA7IG5yIDwgYWN0aXZlX25yOyBucisrKSB7Ci0JCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbbnJdOworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW25yXTsKIAkJaWYgKCFTX0lTUkVHKGNlLT5jZV9tb2RlKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoIW1hdGNoX3BhdGhzcGVjX2RlcHRoKHBhdGhzcGVjLCBjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSksIDAsIE5VTEwpKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9oZWxwLmMgYi9idWlsdGluL2hlbHAuYwppbmRleCAwNjI5NTdmLi5mMWUyMzZiIDEwMDY0NAotLS0gYS9idWlsdGluL2hlbHAuYworKysgYi9idWlsdGluL2hlbHAuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBidWlsdGluLWhlbHAuYwotICoKICAqIEJ1aWx0aW4gaGVscCBjb21tYW5kCiAgKi8KICNpbmNsdWRlICJjYWNoZS5oIgpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9pbmRleC1wYWNrLmMgYi9idWlsdGluL2luZGV4LXBhY2suYwppbmRleCA3OWRmZTQ3Li45YzFjZmFjIDEwMDY0NAotLS0gYS9idWlsdGluL2luZGV4LXBhY2suYworKysgYi9idWlsdGluL2luZGV4LXBhY2suYwpAQCAtNzcsOCArNzcsMTAgQEAKIAogc3RhdGljIGludCBmcm9tX3N0ZGluOwogc3RhdGljIGludCBzdHJpY3Q7CitzdGF0aWMgaW50IGRvX2ZzY2tfb2JqZWN0Owogc3RhdGljIGludCB2ZXJib3NlOwogc3RhdGljIGludCBzaG93X3N0YXQ7CitzdGF0aWMgaW50IGNoZWNrX3NlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQ7CiAKIHN0YXRpYyBzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzOwogCkBAIC0xODcsMTMgKzE4OSwxMyBAQAogCiAvKiBUaGUgY29udGVudCBvZiBlYWNoIGxpbmtlZCBvYmplY3QgbXVzdCBoYXZlIGJlZW4gY2hlY2tlZAogICAgb3IgaXQgbXVzdCBiZSBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIG9iamVjdCBkYXRhYmFzZSAqLwotc3RhdGljIHZvaWQgY2hlY2tfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaikKK3N0YXRpYyB1bnNpZ25lZCBjaGVja19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqKQogewogCWlmICghb2JqKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJaWYgKCEob2JqLT5mbGFncyAmIEZMQUdfTElOSykpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAlpZiAoIShvYmotPmZsYWdzICYgRkxBR19DSEVDS0VEKSkgewogCQl1bnNpZ25lZCBsb25nIHNpemU7CkBAIC0yMDEsMTcgKzIwMywyMCBAQAogCQlpZiAodHlwZSAhPSBvYmotPnR5cGUgfHwgdHlwZSA8PSAwKQogCQkJZGllKF8oIm9iamVjdCBvZiB1bmV4cGVjdGVkIHR5cGUiKSk7CiAJCW9iai0+ZmxhZ3MgfD0gRkxBR19DSEVDS0VEOwotCQlyZXR1cm47CisJCXJldHVybiAxOwogCX0KKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjaGVja19vYmplY3RzKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgY2hlY2tfb2JqZWN0cyh2b2lkKQogewotCXVuc2lnbmVkIGksIG1heDsKKwl1bnNpZ25lZCBpLCBtYXgsIGZvcmVpZ25fbnIgPSAwOwogCiAJbWF4ID0gZ2V0X21heF9vYmplY3RfaW5kZXgoKTsKIAlmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspCi0JCWNoZWNrX29iamVjdChnZXRfaW5kZXhlZF9vYmplY3QoaSkpOworCQlmb3JlaWduX25yICs9IGNoZWNrX29iamVjdChnZXRfaW5kZXhlZF9vYmplY3QoaSkpOworCXJldHVybiBmb3JlaWduX25yOwogfQogCiAKQEAgLTc0Nyw4ICs3NTIsNyBAQAogCQkJaW50IGVhdGVuOwogCQkJdm9pZCAqYnVmID0gKHZvaWQgKikgZGF0YTsKIAotCQkJaWYgKCFidWYpCi0JCQkJYnVmID0gbmV3X2RhdGEgPSBnZXRfZGF0YV9mcm9tX3BhY2sob2JqX2VudHJ5KTsKKwkJCWFzc2VydChkYXRhICYmICJkYXRhIGNhbiBvbmx5IGJlIE5VTEwgZm9yIGxhcmdlIF9ibG9ic18iKTsKIAogCQkJLyoKIAkJCSAqIHdlIGRvIG5vdCBuZWVkIHRvIGZyZWUgdGhlIG1lbW9yeSBoZXJlLCBhcyB0aGUKQEAgLTc1Nyw3ICs3NjEsOCBAQAogCQkJb2JqID0gcGFyc2Vfb2JqZWN0X2J1ZmZlcihzaGExLCB0eXBlLCBzaXplLCBidWYsICZlYXRlbik7CiAJCQlpZiAoIW9iaikKIAkJCQlkaWUoXygiaW52YWxpZCAlcyIpLCB0eXBlbmFtZSh0eXBlKSk7Ci0JCQlpZiAoZnNja19vYmplY3Qob2JqLCAxLCBmc2NrX2Vycm9yX2Z1bmN0aW9uKSkKKwkJCWlmIChkb19mc2NrX29iamVjdCAmJgorCQkJICAgIGZzY2tfb2JqZWN0KG9iaiwgMSwgZnNja19lcnJvcl9mdW5jdGlvbikpCiAJCQkJZGllKF8oIkVycm9yIGluIG9iamVjdCIpKTsKIAkJCWlmIChmc2NrX3dhbGsob2JqLCBtYXJrX2xpbmssIE5VTEwpKQogCQkJCWRpZShfKCJOb3QgYWxsIGNoaWxkIG9iamVjdHMgb2YgJXMgYXJlIHJlYWNoYWJsZSIpLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKQEAgLTE0OTEsNiArMTQ5Niw3IEBACiAJc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqaWR4X29iamVjdHM7CiAJc3RydWN0IHBhY2tfaWR4X29wdGlvbiBvcHRzOwogCXVuc2lnbmVkIGNoYXIgcGFja19zaGExWzIwXTsKKwl1bnNpZ25lZCBmb3JlaWduX25yID0gMTsJLyogemVybyBpcyBhICJnb29kIiB2YWx1ZSwgYXNzdW1lIGJhZCAqLwogCiAJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQogCQl1c2FnZShpbmRleF9wYWNrX3VzYWdlKTsKQEAgLTE1MTIsNiArMTUxOCwxMCBAQAogCQkJCWZpeF90aGluX3BhY2sgPSAxOwogCQkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc3RyaWN0IikpIHsKIAkJCQlzdHJpY3QgPSAxOworCQkJCWRvX2ZzY2tfb2JqZWN0ID0gMTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWNoZWNrLXNlbGYtY29udGFpbmVkLWFuZC1jb25uZWN0ZWQiKSkgeworCQkJCXN0cmljdCA9IDE7CisJCQkJY2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCA9IDE7CiAJCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS12ZXJpZnkiKSkgewogCQkJCXZlcmlmeSA9IDE7CiAJCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS12ZXJpZnktc3RhdCIpKSB7CkBAIC0xNjI1LDcgKzE2MzUsNyBAQAogCWNvbmNsdWRlX3BhY2soZml4X3RoaW5fcGFjaywgY3Vycl9wYWNrLCBwYWNrX3NoYTEpOwogCWZyZWUoZGVsdGFzKTsKIAlpZiAoc3RyaWN0KQotCQljaGVja19vYmplY3RzKCk7CisJCWZvcmVpZ25fbnIgPSBjaGVja19vYmplY3RzKCk7CiAKIAlpZiAoc2hvd19zdGF0KQogCQlzaG93X3BhY2tfaW5mbyhzdGF0X29ubHkpOwpAQCAtMTY1MSw1ICsxNjYxLDExIEBACiAJaWYgKGluZGV4X25hbWUgPT0gTlVMTCkKIAkJZnJlZSgodm9pZCAqKSBjdXJyX2luZGV4KTsKIAorCS8qCisJICogTGV0IHRoZSBjYWxsZXIga25vdyB0aGlzIHBhY2sgaXMgbm90IHNlbGYgY29udGFpbmVkCisJICovCisJaWYgKGNoZWNrX3NlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgJiYgZm9yZWlnbl9ucikKKwkJcmV0dXJuIDE7CisKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbG9nLmMgYi9idWlsdGluL2xvZy5jCmluZGV4IDZlNTZhNTAuLjI2MjVmOTggMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vbG9nLmMKKysrIGIvYnVpbHRpbi9sb2cuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgInJlbW90ZS5oIgogI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCiAjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImxpbmUtbG9nLmgiCiAjaW5jbHVkZSAiYnJhbmNoLmgiCiAjaW5jbHVkZSAic3RyZWFtaW5nLmgiCiAjaW5jbHVkZSAidmVyc2lvbi5oIgpAQCAtNDIsNiArNDMsMTIgQEAKIAlOVUxMCiB9OwogCitzdHJ1Y3QgbGluZV9vcHRfY2FsbGJhY2tfZGF0YSB7CisJc3RydWN0IHJldl9pbmZvICpyZXY7CisJY29uc3QgY2hhciAqcHJlZml4OworCXN0cnVjdCBzdHJpbmdfbGlzdCBhcmdzOworfTsKKwogc3RhdGljIGludCBwYXJzZV9kZWNvcmF0aW9uX3N0eWxlKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCiB7CiAJc3dpdGNoIChnaXRfY29uZmlnX21heWJlX2Jvb2wodmFyLCB2YWx1ZSkpIHsKQEAgLTc2LDYgKzgzLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbG9nX2xpbmVfcmFuZ2VfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9uLCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgbGluZV9vcHRfY2FsbGJhY2tfZGF0YSAqZGF0YSA9IG9wdGlvbi0+dmFsdWU7CisKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC0xOworCisJZGF0YS0+cmV2LT5saW5lX2xldmVsX3RyYXZlcnNlID0gMTsKKwlzdHJpbmdfbGlzdF9hcHBlbmQoJmRhdGEtPmFyZ3MsIGFyZyk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgY21kX2xvZ19pbml0X2RlZmF1bHRzKHN0cnVjdCByZXZfaW5mbyAqcmV2KQogewogCWlmIChmbXRfcHJldHR5KQpAQCAtOTgsNiArMTE4LDcgQEAKIHsKIAlzdHJ1Y3QgdXNlcmZvcm1hdF93YW50IHc7CiAJaW50IHF1aWV0ID0gMCwgc291cmNlID0gMCwgbWFpbG1hcCA9IDA7CisJc3RhdGljIHN0cnVjdCBsaW5lX29wdF9jYWxsYmFja19kYXRhIGxpbmVfY2IgPSB7TlVMTCwgTlVMTCwgU1RSSU5HX0xJU1RfSU5JVF9EVVB9OwogCiAJY29uc3Qgc3RydWN0IG9wdGlvbiBidWlsdGluX2xvZ19vcHRpb25zW10gPSB7CiAJCU9QVF9CT09MKDAsICJxdWlldCIsICZxdWlldCwgTl8oInN1cHByZXNzIGRpZmYgb3V0cHV0IikpLApAQCAtMTA1LDkgKzEyNiwxNSBAQAogCQlPUFRfQk9PTCgwLCAidXNlLW1haWxtYXAiLCAmbWFpbG1hcCwgTl8oIlVzZSBtYWlsIG1hcCBmaWxlIikpLAogCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImRlY29yYXRlIiwgTlVMTCwgTlVMTCwgTl8oImRlY29yYXRlIG9wdGlvbnMiKSwKIAkJICBQQVJTRV9PUFRfT1BUQVJHLCBkZWNvcmF0ZV9jYWxsYmFja30sCisJCU9QVF9DQUxMQkFDSygnTCcsIE5VTEwsICZsaW5lX2NiLCAibixtOmZpbGUiLAorCQkJICAgICAiUHJvY2VzcyBsaW5lIHJhbmdlIG4sbSBpbiBmaWxlLCBjb3VudGluZyBmcm9tIDEiLAorCQkJICAgICBsb2dfbGluZV9yYW5nZV9jYWxsYmFjayksCiAJCU9QVF9FTkQoKQogCX07CiAKKwlsaW5lX2NiLnJldiA9IHJldjsKKwlsaW5lX2NiLnByZWZpeCA9IHByZWZpeDsKKwogCW1haWxtYXAgPSB1c2VfbWFpbG1hcF9jb25maWc7CiAJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LAogCQkJICAgICBidWlsdGluX2xvZ19vcHRpb25zLCBidWlsdGluX2xvZ191c2FnZSwKQEAgLTE2MSw2ICsxODgsMTAgQEAKIAkJcmV2LT5zaG93X2RlY29yYXRpb25zID0gMTsKIAkJbG9hZF9yZWZfZGVjb3JhdGlvbnMoZGVjb3JhdGlvbl9zdHlsZSk7CiAJfQorCisJaWYgKHJldi0+bGluZV9sZXZlbF90cmF2ZXJzZSkKKwkJbGluZV9sb2dfaW5pdChyZXYsIGxpbmVfY2IucHJlZml4LCAmbGluZV9jYi5hcmdzKTsKKwogCXNldHVwX3BhZ2VyKCk7CiB9CiAKQEAgLTIwNiw3ICsyMzcsNyBAQAogCWludCBpID0gcmV2cy0+ZWFybHlfb3V0cHV0OwogCWludCBzaG93X2hlYWRlciA9IDE7CiAKLQlzb3J0X2luX3RvcG9sb2dpY2FsX29yZGVyKCZsaXN0LCByZXZzLT5saWZvKTsKKwlzb3J0X2luX3RvcG9sb2dpY2FsX29yZGVyKCZsaXN0LCByZXZzLT5zb3J0X29yZGVyKTsKIAl3aGlsZSAobGlzdCAmJiBpKSB7CiAJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxpc3QtPml0ZW07CiAJCXN3aXRjaCAoc2ltcGxpZnlfY29tbWl0KHJldnMsIGNvbW1pdCkpIHsKQEAgLTEwODEsNiArMTExMiwyMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGZyb21fY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwljaGFyICoqZnJvbSA9IG9wdC0+dmFsdWU7CisKKwlmcmVlKCpmcm9tKTsKKworCWlmICh1bnNldCkKKwkJKmZyb20gPSBOVUxMOworCWVsc2UgaWYgKGFyZykKKwkJKmZyb20gPSB4c3RyZHVwKGFyZyk7CisJZWxzZQorCQkqZnJvbSA9IHhzdHJkdXAoZ2l0X2NvbW1pdHRlcl9pbmZvKElERU5UX05PX0RBVEUpKTsKKwlyZXR1cm4gMDsKK30KKwogaW50IGNtZF9mb3JtYXRfcGF0Y2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJc3RydWN0IGNvbW1pdCAqY29tbWl0OwpAQCAtMTEwMyw2ICsxMTQ5LDcgQEAKIAlpbnQgcXVpZXQgPSAwOwogCWludCByZXJvbGxfY291bnQgPSAtMTsKIAljaGFyICpicmFuY2hfbmFtZSA9IE5VTEw7CisJY2hhciAqZnJvbSA9IE5VTEw7CiAJY29uc3Qgc3RydWN0IG9wdGlvbiBidWlsdGluX2Zvcm1hdF9wYXRjaF9vcHRpb25zW10gPSB7CiAJCXsgT1BUSU9OX0NBTExCQUNLLCAnbicsICJudW1iZXJlZCIsICZudW1iZXJlZCwgTlVMTCwKIAkJCSAgICBOXygidXNlIFtQQVRDSCBuL21dIGV2ZW4gd2l0aCBhIHNpbmdsZSBwYXRjaCIpLApAQCAtMTE0Niw2ICsxMTkzLDkgQEAKIAkJCSAgICAwLCB0b19jYWxsYmFjayB9LAogCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImNjIiwgTlVMTCwgTl8oImVtYWlsIiksIE5fKCJhZGQgQ2M6IGhlYWRlciIpLAogCQkJICAgIDAsIGNjX2NhbGxiYWNrIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiZnJvbSIsICZmcm9tLCBOXygiaWRlbnQiKSwKKwkJCSAgICBOXygic2V0IEZyb20gYWRkcmVzcyB0byA8aWRlbnQ+IChvciBjb21taXR0ZXIgaWRlbnQgaWYgYWJzZW50KSIpLAorCQkJICAgIFBBUlNFX09QVF9PUFRBUkcsIGZyb21fY2FsbGJhY2sgfSwKIAkJT1BUX1NUUklORygwLCAiaW4tcmVwbHktdG8iLCAmaW5fcmVwbHlfdG8sIE5fKCJtZXNzYWdlLWlkIiksCiAJCQkgICAgTl8oIm1ha2UgZmlyc3QgbWFpbCBhIHJlcGx5IHRvIDxtZXNzYWdlLWlkPiIpKSwKIAkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJhdHRhY2giLCAmcmV2LCBOXygiYm91bmRhcnkiKSwKQEAgLTEyMzMsNiArMTI4MywxMSBAQAogCiAJcmV2LmV4dHJhX2hlYWRlcnMgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOwogCisJaWYgKGZyb20pIHsKKwkJaWYgKHNwbGl0X2lkZW50X2xpbmUoJnJldi5mcm9tX2lkZW50LCBmcm9tLCBzdHJsZW4oZnJvbSkpKQorCQkJZGllKF8oImludmFsaWQgaWRlbnQgbGluZTogJXMiKSwgZnJvbSk7CisJfQorCiAJaWYgKHN0YXJ0X251bWJlciA8IDApCiAJCXN0YXJ0X251bWJlciA9IDE7CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4vbHMtZmlsZXMuYyBiL2J1aWx0aW4vbHMtZmlsZXMuYwppbmRleCAyMjAyMDcyLi41Y2YzZTMxIDEwMDY0NAotLS0gYS9idWlsdGluL2xzLWZpbGVzLmMKKysrIGIvYnVpbHRpbi9scy1maWxlcy5jCkBAIC00NiwxMCArNDYsMTQgQEAKIHN0YXRpYyBjb25zdCBjaGFyICp0YWdfc2tpcF93b3JrdHJlZSA9ICIiOwogc3RhdGljIGNvbnN0IGNoYXIgKnRhZ19yZXNvbHZlX3VuZG8gPSAiIjsKIAotc3RhdGljIHZvaWQgd3JpdGVfbmFtZShjb25zdCBjaGFyKiBuYW1lLCBzaXplX3QgbGVuKQorc3RhdGljIHZvaWQgd3JpdGVfbmFtZShjb25zdCBjaGFyICpuYW1lKQogewotCXdyaXRlX25hbWVfcXVvdGVkX3JlbGF0aXZlKG5hbWUsIGxlbiwgcHJlZml4LCBwcmVmaXhfbGVuLCBzdGRvdXQsCi0JCQlsaW5lX3Rlcm1pbmF0b3IpOworCS8qCisJICogV2l0aCAiLS1mdWxsLW5hbWUiLCBwcmVmaXhfbGVuPTA7IHRoaXMgY2FsbGVyIG5lZWRzIHRvIHBhc3MKKwkgKiBhbiBlbXB0eSBzdHJpbmcgaW4gdGhhdCBjYXNlIChhIE5VTEwgaXMgZ29vZCBmb3IgIiIpLgorCSAqLworCXdyaXRlX25hbWVfcXVvdGVkX3JlbGF0aXZlKG5hbWUsIHByZWZpeF9sZW4gPyBwcmVmaXggOiBOVUxMLAorCQkJCSAgIHN0ZG91dCwgbGluZV90ZXJtaW5hdG9yKTsKIH0KIAogc3RhdGljIHZvaWQgc2hvd19kaXJfZW50cnkoY29uc3QgY2hhciAqdGFnLCBzdHJ1Y3QgZGlyX2VudHJ5ICplbnQpCkBAIC02Myw3ICs2Nyw3IEBACiAJCXJldHVybjsKIAogCWZwdXRzKHRhZywgc3Rkb3V0KTsKLQl3cml0ZV9uYW1lKGVudC0+bmFtZSwgZW50LT5sZW4pOworCXdyaXRlX25hbWUoZW50LT5uYW1lKTsKIH0KIAogc3RhdGljIHZvaWQgc2hvd19vdGhlcl9maWxlcyhzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyKQpAQCAtMTI3LDcgKzEzMSw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzaG93X2NlX2VudHJ5KGNvbnN0IGNoYXIgKnRhZywgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3N0YXRpYyB2b2lkIHNob3dfY2VfZW50cnkoY29uc3QgY2hhciAqdGFnLCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQogewogCWludCBsZW4gPSBtYXhfcHJlZml4X2xlbjsKIApAQCAtMTYzLDEzICsxNjcsMTUgQEAKIAkJICAgICAgIGZpbmRfdW5pcXVlX2FiYnJldihjZS0+c2hhMSxhYmJyZXYpLAogCQkgICAgICAgY2Vfc3RhZ2UoY2UpKTsKIAl9Ci0Jd3JpdGVfbmFtZShjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSkpOworCXdyaXRlX25hbWUoY2UtPm5hbWUpOwogCWlmIChkZWJ1Z19tb2RlKSB7Ci0JCXByaW50ZigiICBjdGltZTogJWQ6JWRcbiIsIGNlLT5jZV9jdGltZS5zZWMsIGNlLT5jZV9jdGltZS5uc2VjKTsKLQkJcHJpbnRmKCIgIG10aW1lOiAlZDolZFxuIiwgY2UtPmNlX210aW1lLnNlYywgY2UtPmNlX210aW1lLm5zZWMpOwotCQlwcmludGYoIiAgZGV2OiAlZFx0aW5vOiAlZFxuIiwgY2UtPmNlX2RldiwgY2UtPmNlX2lubyk7Ci0JCXByaW50ZigiICB1aWQ6ICVkXHRnaWQ6ICVkXG4iLCBjZS0+Y2VfdWlkLCBjZS0+Y2VfZ2lkKTsKLQkJcHJpbnRmKCIgIHNpemU6ICVkXHRmbGFnczogJXhcbiIsIGNlLT5jZV9zaXplLCBjZS0+Y2VfZmxhZ3MpOworCQljb25zdCBzdHJ1Y3Qgc3RhdF9kYXRhICpzZCA9ICZjZS0+Y2Vfc3RhdF9kYXRhOworCisJCXByaW50ZigiICBjdGltZTogJWQ6JWRcbiIsIHNkLT5zZF9jdGltZS5zZWMsIHNkLT5zZF9jdGltZS5uc2VjKTsKKwkJcHJpbnRmKCIgIG10aW1lOiAlZDolZFxuIiwgc2QtPnNkX210aW1lLnNlYywgc2QtPnNkX210aW1lLm5zZWMpOworCQlwcmludGYoIiAgZGV2OiAlZFx0aW5vOiAlZFxuIiwgc2QtPnNkX2Rldiwgc2QtPnNkX2lubyk7CisJCXByaW50ZigiICB1aWQ6ICVkXHRnaWQ6ICVkXG4iLCBzZC0+c2RfdWlkLCBzZC0+c2RfZ2lkKTsKKwkJcHJpbnRmKCIgIHNpemU6ICVkXHRmbGFnczogJXhcbiIsIHNkLT5zZF9zaXplLCBjZS0+Y2VfZmxhZ3MpOwogCX0KIH0KIApAQCAtMTk2LDEyICsyMDIsMTIgQEAKIAkJCXByaW50ZigiJXMlMDZvICVzICVkXHQiLCB0YWdfcmVzb2x2ZV91bmRvLCB1aS0+bW9kZVtpXSwKIAkJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYodWktPnNoYTFbaV0sIGFiYnJldiksCiAJCQkgICAgICAgaSArIDEpOwotCQkJd3JpdGVfbmFtZShwYXRoLCBsZW4pOworCQkJd3JpdGVfbmFtZShwYXRoKTsKIAkJfQogCX0KIH0KIAotc3RhdGljIGludCBjZV9leGNsdWRlZChzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQorc3RhdGljIGludCBjZV9leGNsdWRlZChzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQogewogCWludCBkdHlwZSA9IGNlX3RvX2R0eXBlKGNlKTsKIAlyZXR1cm4gaXNfZXhjbHVkZWQoZGlyLCBjZS0+bmFtZSwgJmR0eXBlKTsKQEAgLTIxOSw5ICsyMjUsOSBAQAogCQlpZiAoc2hvd19raWxsZWQpCiAJCQlzaG93X2tpbGxlZF9maWxlcyhkaXIpOwogCX0KLQlpZiAoc2hvd19jYWNoZWQgfCBzaG93X3N0YWdlKSB7CisJaWYgKHNob3dfY2FjaGVkIHx8IHNob3dfc3RhZ2UpIHsKIAkJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7Ci0JCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOworCQkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKIAkJCWlmICgoZGlyLT5mbGFncyAmIERJUl9TSE9XX0lHTk9SRUQpICYmCiAJCQkgICAgIWNlX2V4Y2x1ZGVkKGRpciwgY2UpKQogCQkJCWNvbnRpbnVlOwpAQCAtMjMzLDkgKzIzOSw5IEBACiAJCQkJKGNlX3NraXBfd29ya3RyZWUoY2UpID8gdGFnX3NraXBfd29ya3RyZWUgOiB0YWdfY2FjaGVkKSwgY2UpOwogCQl9CiAJfQotCWlmIChzaG93X2RlbGV0ZWQgfCBzaG93X21vZGlmaWVkKSB7CisJaWYgKHNob3dfZGVsZXRlZCB8fCBzaG93X21vZGlmaWVkKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgewotCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CiAJCQlzdHJ1Y3Qgc3RhdCBzdDsKIAkJCWludCBlcnI7CiAJCQlpZiAoKGRpci0+ZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEKSAmJgpAQCAtMjcxLDcgKzI3Nyw3IEBACiAJbGFzdCA9IGFjdGl2ZV9ucjsKIAl3aGlsZSAobGFzdCA+IGZpcnN0KSB7CiAJCWludCBuZXh0ID0gKGxhc3QgKyBmaXJzdCkgPj4gMTsKLQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtuZXh0XTsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtuZXh0XTsKIAkJaWYgKCFzdHJuY21wKGNlLT5uYW1lLCBwcmVmaXgsIG1heF9wcmVmaXhfbGVuKSkgewogCQkJZmlyc3QgPSBuZXh0KzE7CiAJCQljb250aW51ZTsKQEAgLTM4OSw3ICszOTUsNyBAQAogCQlpZiAoZm91bmRfZHVwKQogCQkJY29udGludWU7CiAKLQkJbmFtZSA9IHF1b3RlX3BhdGhfcmVsYXRpdmUocGF0aHNwZWNbbnVtXSwgLTEsICZzYiwgcHJlZml4KTsKKwkJbmFtZSA9IHF1b3RlX3BhdGhfcmVsYXRpdmUocGF0aHNwZWNbbnVtXSwgcHJlZml4LCAmc2IpOwogCQllcnJvcigicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlKHMpIGtub3duIHRvIGdpdC4iLAogCQkgICAgICBuYW1lKTsKIAkJZXJyb3JzKys7CkBAIC01NzEsOCArNTc3LDggQEAKIAkJZGllKCJscy1maWxlcyAtLWlnbm9yZWQgbmVlZHMgc29tZSBleGNsdWRlIHBhdHRlcm4iKTsKIAogCS8qIFdpdGggbm8gZmxhZ3MsIHdlIGRlZmF1bHQgdG8gc2hvd2luZyB0aGUgY2FjaGVkIGZpbGVzICovCi0JaWYgKCEoc2hvd19zdGFnZSB8IHNob3dfZGVsZXRlZCB8IHNob3dfb3RoZXJzIHwgc2hvd191bm1lcmdlZCB8Ci0JICAgICAgc2hvd19raWxsZWQgfCBzaG93X21vZGlmaWVkIHwgc2hvd19yZXNvbHZlX3VuZG8pKQorCWlmICghKHNob3dfc3RhZ2UgfHwgc2hvd19kZWxldGVkIHx8IHNob3dfb3RoZXJzIHx8IHNob3dfdW5tZXJnZWQgfHwKKwkgICAgICBzaG93X2tpbGxlZCB8fCBzaG93X21vZGlmaWVkIHx8IHNob3dfcmVzb2x2ZV91bmRvKSkKIAkJc2hvd19jYWNoZWQgPSAxOwogCiAJaWYgKG1heF9wcmVmaXgpCmRpZmYgLS1naXQgYS9idWlsdGluL21lcmdlLWJhc2UuYyBiL2J1aWx0aW4vbWVyZ2UtYmFzZS5jCmluZGV4IDFiYzc5OTEuLjBjNGNkMmYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vbWVyZ2UtYmFzZS5jCisrKyBiL2J1aWx0aW4vbWVyZ2UtYmFzZS5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIG1lcmdlX2Jhc2VfdXNhZ2UsIDApOwogCWlmICghb2N0b3B1cyAmJiAhcmVkdWNlICYmIGFyZ2MgPCAyKQogCQl1c2FnZV93aXRoX29wdGlvbnMobWVyZ2VfYmFzZV91c2FnZSwgb3B0aW9ucyk7Ci0JaWYgKGlzX2FuY2VzdG9yICYmIChzaG93X2FsbCB8IG9jdG9wdXMgfCByZWR1Y2UpKQorCWlmIChpc19hbmNlc3RvciAmJiAoc2hvd19hbGwgfHwgb2N0b3B1cyB8fCByZWR1Y2UpKQogCQlkaWUoIi0taXMtYW5jZXN0b3IgY2Fubm90IGJlIHVzZWQgd2l0aCBvdGhlciBvcHRpb25zIik7CiAJaWYgKGlzX2FuY2VzdG9yKQogCQlyZXR1cm4gaGFuZGxlX2lzX2FuY2VzdG9yKGFyZ2MsIGFyZ3YpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tZXJnZS1pbmRleC5jIGIvYnVpbHRpbi9tZXJnZS1pbmRleC5jCmluZGV4IGJlNWU1MTQuLmI0MTZkOTIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vbWVyZ2UtaW5kZXguYworKysgYi9idWlsdGluL21lcmdlLWluZGV4LmMKQEAgLTE2LDcgKzE2LDcgQEAKIAkJZGllKCJnaXQgbWVyZ2UtaW5kZXg6ICVzIG5vdCBpbiB0aGUgY2FjaGUiLCBwYXRoKTsKIAlmb3VuZCA9IDA7CiAJZG8gewotCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKIAkJaW50IHN0YWdlID0gY2Vfc3RhZ2UoY2UpOwogCiAJCWlmIChzdHJjbXAoY2UtPm5hbWUsIHBhdGgpKQpAQCAtNTgsNyArNTgsNyBAQAogewogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgewotCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOwogCQlpZiAoIWNlX3N0YWdlKGNlKSkKIAkJCWNvbnRpbnVlOwogCQlpICs9IG1lcmdlX2VudHJ5KGksIGNlLT5uYW1lKS0xOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tZXJnZS5jIGIvYnVpbHRpbi9tZXJnZS5jCmluZGV4IDNlMmRhYTMuLjM0YTYxNjYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vbWVyZ2UuYworKysgYi9idWlsdGluL21lcmdlLmMKQEAgLTQ3LDggKzQ3LDggQEAKIH07CiAKIHN0YXRpYyBpbnQgc2hvd19kaWZmc3RhdCA9IDEsIHNob3J0bG9nX2xlbiA9IC0xLCBzcXVhc2g7Ci1zdGF0aWMgaW50IG9wdGlvbl9jb21taXQgPSAxLCBhbGxvd19mYXN0X2ZvcndhcmQgPSAxOwotc3RhdGljIGludCBmYXN0X2ZvcndhcmRfb25seSwgb3B0aW9uX2VkaXQgPSAtMTsKK3N0YXRpYyBpbnQgb3B0aW9uX2NvbW1pdCA9IDE7CitzdGF0aWMgaW50IG9wdGlvbl9lZGl0ID0gLTE7CiBzdGF0aWMgaW50IGFsbG93X3RyaXZpYWwgPSAxLCBoYXZlX21lc3NhZ2UsIHZlcmlmeV9zaWduYXR1cmVzOwogc3RhdGljIGludCBvdmVyd3JpdGVfaWdub3JlID0gMTsKIHN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIG1lcmdlX21zZyA9IFNUUkJVRl9JTklUOwpAQCAtNzYsNiArNzYsMTQgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKnB1bGxfdHdvaGVhZCwgKnB1bGxfb2N0b3B1czsKIAorZW51bSBmZl90eXBlIHsKKwlGRl9OTywKKwlGRl9BTExPVywKKwlGRl9PTkxZCit9OworCitzdGF0aWMgZW51bSBmZl90eXBlIGZhc3RfZm9yd2FyZCA9IEZGX0FMTE9XOworCiBzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9tZXNzYWdlKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKIAkJCQljb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKIHsKQEAgLTE3OCw2ICsxODYsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBvcHRpb25fcGFyc2VfZmZfb25seShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWZhc3RfZm9yd2FyZCA9IEZGX09OTFk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fbWVyZ2Vfb3B0aW9uc1tdID0gewogCXsgT1BUSU9OX0NBTExCQUNLLCAnbicsIE5VTEwsIE5VTEwsIE5VTEwsCiAJCU5fKCJkbyBub3Qgc2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIiksCkBAIC0xOTQsMTAgKzIwOSwxMCBAQAogCQlOXygicGVyZm9ybSBhIGNvbW1pdCBpZiB0aGUgbWVyZ2Ugc3VjY2VlZHMgKGRlZmF1bHQpIikpLAogCU9QVF9CT09MKCdlJywgImVkaXQiLCAmb3B0aW9uX2VkaXQsCiAJCU5fKCJlZGl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmciKSksCi0JT1BUX0JPT0xFQU4oMCwgImZmIiwgJmFsbG93X2Zhc3RfZm9yd2FyZCwKLQkJTl8oImFsbG93IGZhc3QtZm9yd2FyZCAoZGVmYXVsdCkiKSksCi0JT1BUX0JPT0xFQU4oMCwgImZmLW9ubHkiLCAmZmFzdF9mb3J3YXJkX29ubHksCi0JCU5fKCJhYm9ydCBpZiBmYXN0LWZvcndhcmQgaXMgbm90IHBvc3NpYmxlIikpLAorCU9QVF9TRVRfSU5UKDAsICJmZiIsICZmYXN0X2ZvcndhcmQsIE5fKCJhbGxvdyBmYXN0LWZvcndhcmQgKGRlZmF1bHQpIiksIEZGX0FMTE9XKSwKKwl7IE9QVElPTl9DQUxMQkFDSywgMCwgImZmLW9ubHkiLCBOVUxMLCBOVUxMLAorCQlOXygiYWJvcnQgaWYgZmFzdC1mb3J3YXJkIGlzIG5vdCBwb3NzaWJsZSIpLAorCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIG9wdGlvbl9wYXJzZV9mZl9vbmx5IH0sCiAJT1BUX1JFUkVSRV9BVVRPVVBEQVRFKCZhbGxvd19yZXJlcmVfYXV0byksCiAJT1BUX0JPT0woMCwgInZlcmlmeS1zaWduYXR1cmVzIiwgJnZlcmlmeV9zaWduYXR1cmVzLAogCQlOXygiVmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIikpLApAQCAtNTgxLDEwICs1OTYsOSBAQAogCWVsc2UgaWYgKCFzdHJjbXAoaywgIm1lcmdlLmZmIikpIHsKIAkJaW50IGJvb2x2YWwgPSBnaXRfY29uZmlnX21heWJlX2Jvb2woaywgdik7CiAJCWlmICgwIDw9IGJvb2x2YWwpIHsKLQkJCWFsbG93X2Zhc3RfZm9yd2FyZCA9IGJvb2x2YWw7CisJCQlmYXN0X2ZvcndhcmQgPSBib29sdmFsID8gRkZfQUxMT1cgOiBGRl9OTzsKIAkJfSBlbHNlIGlmICh2ICYmICFzdHJjbXAodiwgIm9ubHkiKSkgewotCQkJYWxsb3dfZmFzdF9mb3J3YXJkID0gMTsKLQkJCWZhc3RfZm9yd2FyZF9vbmx5ID0gMTsKKwkJCWZhc3RfZm9yd2FyZCA9IEZGX09OTFk7CiAJCX0gLyogZG8gbm90IGJhcmYgb24gdmFsdWVzIGZyb20gZnV0dXJlIHZlcnNpb25zIG9mIGdpdCAqLwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoaywgIm1lcmdlLmRlZmF1bHR0b3Vwc3RyZWFtIikpIHsKQEAgLTg2Myw3ICs4NzcsNyBAQAogCiAJZnJlZV9jb21taXRfbGlzdChjb21tb24pOwogCXBhcmVudHMgPSByZW1vdGVoZWFkczsKLQlpZiAoIWhlYWRfc3Vic3VtZWQgfHwgIWFsbG93X2Zhc3RfZm9yd2FyZCkKKwlpZiAoIWhlYWRfc3Vic3VtZWQgfHwgZmFzdF9mb3J3YXJkID09IEZGX05PKQogCQljb21taXRfbGlzdF9pbnNlcnQoaGVhZCwgJnBhcmVudHMpOwogCXN0cmJ1Zl9hZGRjaCgmbWVyZ2VfbXNnLCAnXG4nKTsKIAlwcmVwYXJlX3RvX2NvbW1pdChyZW1vdGVoZWFkcyk7CkBAIC04ODksNyArOTAzLDcgQEAKIAkJZGllX2Vycm5vKF8oIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciKSwgZmlsZW5hbWUpOwogCWZwcmludGYoZnAsICJcbkNvbmZsaWN0czpcbiIpOwogCWZvciAocG9zID0gMDsgcG9zIDwgYWN0aXZlX25yOyBwb3MrKykgewotCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKIAogCQlpZiAoY2Vfc3RhZ2UoY2UpKSB7CiAJCQlmcHJpbnRmKGZwLCAiXHQlc1xuIiwgY2UtPm5hbWUpOwpAQCAtOTQ4LDcgKzk2Miw3IEBACiB9CiAKIC8qCi0gKiBQcmV0ZW5kIGFzIGlmIHRoZSB1c2VyIHRvbGQgdXMgdG8gbWVyZ2Ugd2l0aCB0aGUgdHJhY2tpbmcKKyAqIFByZXRlbmQgYXMgaWYgdGhlIHVzZXIgdG9sZCB1cyB0byBtZXJnZSB3aXRoIHRoZSByZW1vdGUtdHJhY2tpbmcKICAqIGJyYW5jaCB3ZSBoYXZlIGZvciB0aGUgdXBzdHJlYW0gb2YgdGhlIGN1cnJlbnQgYnJhbmNoCiAgKi8KIHN0YXRpYyBpbnQgc2V0dXBfd2l0aF91cHN0cmVhbShjb25zdCBjaGFyICoqKmFyZ3YpCkBAIC05NjcsNyArOTgxLDcgQEAKIAlhcmdzID0geGNhbGxvYyhicmFuY2gtPm1lcmdlX25yICsgMSwgc2l6ZW9mKGNoYXIgKikpOwogCWZvciAoaSA9IDA7IGkgPCBicmFuY2gtPm1lcmdlX25yOyBpKyspIHsKIAkJaWYgKCFicmFuY2gtPm1lcmdlW2ldLT5kc3QpCi0JCQlkaWUoXygiTm8gcmVtb3RlIHRyYWNraW5nIGJyYW5jaCBmb3IgJXMgZnJvbSAlcyIpLAorCQkJZGllKF8oIk5vIHJlbW90ZS10cmFja2luZyBicmFuY2ggZm9yICVzIGZyb20gJXMiKSwKIAkJCSAgICBicmFuY2gtPm1lcmdlW2ldLT5zcmMsIGJyYW5jaC0+cmVtb3RlX25hbWUpOwogCQlhcmdzW2ldID0gYnJhbmNoLT5tZXJnZVtpXS0+ZHN0OwogCX0KQEAgLTEwMDgsNyArMTAyMiw3IEBACiAJaWYgKGZkIDwgMCkKIAkJZGllX2Vycm5vKF8oIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciKSwgZmlsZW5hbWUpOwogCXN0cmJ1Zl9yZXNldCgmYnVmKTsKLQlpZiAoIWFsbG93X2Zhc3RfZm9yd2FyZCkKKwlpZiAoZmFzdF9mb3J3YXJkID09IEZGX05PKQogCQlzdHJidWZfYWRkZigmYnVmLCAibm8tZmYiKTsKIAlpZiAod3JpdGVfaW5fZnVsbChmZCwgYnVmLmJ1ZiwgYnVmLmxlbikgIT0gYnVmLmxlbikKIAkJZGllX2Vycm5vKF8oIkNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIiksIGZpbGVuYW1lKTsKQEAgLTEwNTQsNyArMTA2OCw4IEBACiAJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewogCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBnZXRfbWVyZ2VfcGFyZW50KGFyZ3ZbaV0pOwogCQlpZiAoIWNvbW1pdCkKLQkJCWRpZShfKCIlcyAtIG5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIiksIGFyZ3ZbaV0pOworCQkJaGVscF91bmtub3duX3JlZihhcmd2W2ldLCAibWVyZ2UiLAorCQkJCQkgIm5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIik7CiAJCXJlbW90ZXMgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgcmVtb3RlcyktPm5leHQ7CiAJfQogCSpyZW1vdGVzID0gTlVMTDsKQEAgLTExNTYsMTQgKzExNzEsMTEgQEAKIAkJc2hvd19kaWZmc3RhdCA9IDA7CiAKIAlpZiAoc3F1YXNoKSB7Ci0JCWlmICghYWxsb3dfZmFzdF9mb3J3YXJkKQorCQlpZiAoZmFzdF9mb3J3YXJkID09IEZGX05PKQogCQkJZGllKF8oIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tbm8tZmYuIikpOwogCQlvcHRpb25fY29tbWl0ID0gMDsKIAl9CiAKLQlpZiAoIWFsbG93X2Zhc3RfZm9yd2FyZCAmJiBmYXN0X2ZvcndhcmRfb25seSkKLQkJZGllKF8oIllvdSBjYW5ub3QgY29tYmluZSAtLW5vLWZmIHdpdGggLS1mZi1vbmx5LiIpKTsKLQogCWlmICghYWJvcnRfY3VycmVudF9tZXJnZSkgewogCQlpZiAoIWFyZ2MpIHsKIAkJCWlmIChkZWZhdWx0X3RvX3Vwc3RyZWFtKQpAQCAtMTIwNSw3ICsxMjE3LDcgQEAKIAkJCQkiZW1wdHkgaGVhZCIpKTsKIAkJaWYgKHNxdWFzaCkKIAkJCWRpZShfKCJTcXVhc2ggY29tbWl0IGludG8gZW1wdHkgaGVhZCBub3Qgc3VwcG9ydGVkIHlldCIpKTsKLQkJaWYgKCFhbGxvd19mYXN0X2ZvcndhcmQpCisJCWlmIChmYXN0X2ZvcndhcmQgPT0gRkZfTk8pCiAJCQlkaWUoXygiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvICIKIAkJCSAgICAiYW4gZW1wdHkgaGVhZCIpKTsKIAkJcmVtb3RlaGVhZHMgPSBjb2xsZWN0X3BhcmVudHMoaGVhZF9jb21taXQsICZoZWFkX3N1YnN1bWVkLCBhcmdjLCBhcmd2KTsKQEAgLTEyOTMsMTEgKzEzMDUsMTEgQEAKIAkJCSAgICBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CiAJCXNldGVudihidWYuYnVmLCBtZXJnZV9yZW1vdGVfdXRpbChjb21taXQpLT5uYW1lLCAxKTsKIAkJc3RyYnVmX3Jlc2V0KCZidWYpOwotCQlpZiAoIWZhc3RfZm9yd2FyZF9vbmx5ICYmCisJCWlmIChmYXN0X2ZvcndhcmQgIT0gRkZfT05MWSAmJgogCQkgICAgbWVyZ2VfcmVtb3RlX3V0aWwoY29tbWl0KSAmJgogCQkgICAgbWVyZ2VfcmVtb3RlX3V0aWwoY29tbWl0KS0+b2JqICYmCiAJCSAgICBtZXJnZV9yZW1vdGVfdXRpbChjb21taXQpLT5vYmotPnR5cGUgPT0gT0JKX1RBRykKLQkJCWFsbG93X2Zhc3RfZm9yd2FyZCA9IDA7CisJCQlmYXN0X2ZvcndhcmQgPSBGRl9OTzsKIAl9CiAKIAlpZiAob3B0aW9uX2VkaXQgPCAwKQpAQCAtMTMxNCw3ICsxMzI2LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCB1c2Vfc3RyYXRlZ2llc19ucjsgaSsrKSB7CiAJCWlmICh1c2Vfc3RyYXRlZ2llc1tpXS0+YXR0ciAmIE5PX0ZBU1RfRk9SV0FSRCkKLQkJCWFsbG93X2Zhc3RfZm9yd2FyZCA9IDA7CisJCQlmYXN0X2ZvcndhcmQgPSBGRl9OTzsKIAkJaWYgKHVzZV9zdHJhdGVnaWVzW2ldLT5hdHRyICYgTk9fVFJJVklBTCkKIAkJCWFsbG93X3RyaXZpYWwgPSAwOwogCX0KQEAgLTEzNDQsNyArMTM1Niw3IEBACiAJCSAqLwogCQlmaW5pc2hfdXBfdG9fZGF0ZSgiQWxyZWFkeSB1cC10by1kYXRlLiIpOwogCQlnb3RvIGRvbmU7Ci0JfSBlbHNlIGlmIChhbGxvd19mYXN0X2ZvcndhcmQgJiYgIXJlbW90ZWhlYWRzLT5uZXh0ICYmCisJfSBlbHNlIGlmIChmYXN0X2ZvcndhcmQgIT0gRkZfTk8gJiYgIXJlbW90ZWhlYWRzLT5uZXh0ICYmCiAJCQkhY29tbW9uLT5uZXh0ICYmCiAJCQkhaGFzaGNtcChjb21tb24tPml0ZW0tPm9iamVjdC5zaGExLCBoZWFkX2NvbW1pdC0+b2JqZWN0LnNoYTEpKSB7CiAJCS8qIEFnYWluIHRoZSBtb3N0IGNvbW1vbiBjYXNlIG9mIG1lcmdpbmcgb25lIHJlbW90ZS4gKi8KQEAgLTEzOTEsNyArMTQwMyw3IEBACiAJCSAqIG9ubHkgb25lIGNvbW1vbi4KIAkJICovCiAJCXJlZnJlc2hfY2FjaGUoUkVGUkVTSF9RVUlFVCk7Ci0JCWlmIChhbGxvd190cml2aWFsICYmICFmYXN0X2ZvcndhcmRfb25seSkgeworCQlpZiAoYWxsb3dfdHJpdmlhbCAmJiBmYXN0X2ZvcndhcmQgIT0gRkZfT05MWSkgewogCQkJLyogU2VlIGlmIGl0IGlzIHJlYWxseSB0cml2aWFsLiAqLwogCQkJZ2l0X2NvbW1pdHRlcl9pbmZvKElERU5UX1NUUklDVCk7CiAJCQlwcmludGYoXygiVHJ5aW5nIHJlYWxseSB0cml2aWFsIGluLWluZGV4IG1lcmdlLi4uXG4iKSk7CkBAIC0xNDMyLDcgKzE0NDQsNyBAQAogCQl9CiAJfQogCi0JaWYgKGZhc3RfZm9yd2FyZF9vbmx5KQorCWlmIChmYXN0X2ZvcndhcmQgPT0gRkZfT05MWSkKIAkJZGllKF8oIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIpKTsKIAogCS8qIFdlIGFyZSBnb2luZyB0byBtYWtlIGEgbmV3IGNvbW1pdC4gKi8KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbmFtZS1yZXYuYyBiL2J1aWx0aW4vbmFtZS1yZXYuYwppbmRleCA2MjM4MjQ3Li4wYWFhMTllIDEwMDY0NAotLS0gYS9idWlsdGluL25hbWUtcmV2LmMKKysrIGIvYnVpbHRpbi9uYW1lLXJldi5jCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgInRhZy5oIgogI2luY2x1ZGUgInJlZnMuaCIKICNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic2hhMS1sb29rdXAuaCIKIAogI2RlZmluZSBDVVRPRkZfREFURV9TTE9QIDg2NDAwIC8qIG9uZSBkYXkgKi8KIApAQCAtODIsMjMgKzgzLDg4IEBACiAJfQogfQogCitzdGF0aWMgaW50IHN1YnBhdGhfbWF0Y2hlcyhjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpmaWx0ZXIpCit7CisJY29uc3QgY2hhciAqc3VicGF0aCA9IHBhdGg7CisKKwl3aGlsZSAoc3VicGF0aCkgeworCQlpZiAoIWZubWF0Y2goZmlsdGVyLCBzdWJwYXRoLCAwKSkKKwkJCXJldHVybiBzdWJwYXRoIC0gcGF0aDsKKwkJc3VicGF0aCA9IHN0cmNocihzdWJwYXRoLCAnLycpOworCQlpZiAoc3VicGF0aCkKKwkJCXN1YnBhdGgrKzsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqbmFtZV9yZWZfYWJicmV2KGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCBzaG9ydGVuX3VuYW1iaWd1b3VzKQoreworCWlmIChzaG9ydGVuX3VuYW1iaWd1b3VzKQorCQlyZWZuYW1lID0gc2hvcnRlbl91bmFtYmlndW91c19yZWYocmVmbmFtZSwgMCk7CisJZWxzZSBpZiAoIXByZWZpeGNtcChyZWZuYW1lLCAicmVmcy9oZWFkcy8iKSkKKwkJcmVmbmFtZSA9IHJlZm5hbWUgKyAxMTsKKwllbHNlIGlmICghcHJlZml4Y21wKHJlZm5hbWUsICJyZWZzLyIpKQorCQlyZWZuYW1lID0gcmVmbmFtZSArIDU7CisJcmV0dXJuIHJlZm5hbWU7Cit9CisKIHN0cnVjdCBuYW1lX3JlZl9kYXRhIHsKIAlpbnQgdGFnc19vbmx5OwogCWludCBuYW1lX29ubHk7CiAJY29uc3QgY2hhciAqcmVmX2ZpbHRlcjsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdGlwX3RhYmxlIHsKKwlzdHJ1Y3QgdGlwX3RhYmxlX2VudHJ5IHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJY29uc3QgY2hhciAqcmVmbmFtZTsKKwl9ICp0YWJsZTsKKwlpbnQgbnI7CisJaW50IGFsbG9jOworCWludCBzb3J0ZWQ7Cit9IHRpcF90YWJsZTsKKworc3RhdGljIHZvaWQgYWRkX3RvX3RpcF90YWJsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJICAgICBpbnQgc2hvcnRlbl91bmFtYmlndW91cykKK3sKKwlyZWZuYW1lID0gbmFtZV9yZWZfYWJicmV2KHJlZm5hbWUsIHNob3J0ZW5fdW5hbWJpZ3VvdXMpOworCisJQUxMT0NfR1JPVyh0aXBfdGFibGUudGFibGUsIHRpcF90YWJsZS5uciArIDEsIHRpcF90YWJsZS5hbGxvYyk7CisJaGFzaGNweSh0aXBfdGFibGUudGFibGVbdGlwX3RhYmxlLm5yXS5zaGExLCBzaGExKTsKKwl0aXBfdGFibGUudGFibGVbdGlwX3RhYmxlLm5yXS5yZWZuYW1lID0geHN0cmR1cChyZWZuYW1lKTsKKwl0aXBfdGFibGUubnIrKzsKKwl0aXBfdGFibGUuc29ydGVkID0gMDsKK30KKworc3RhdGljIGludCB0aXBjbXAoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCWNvbnN0IHN0cnVjdCB0aXBfdGFibGVfZW50cnkgKmEgPSBhXywgKmIgPSBiXzsKKwlyZXR1cm4gaGFzaGNtcChhLT5zaGExLCBiLT5zaGExKTsKK30KKwogc3RhdGljIGludCBuYW1lX3JlZihjb25zdCBjaGFyICpwYXRoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCiB7CiAJc3RydWN0IG9iamVjdCAqbyA9IHBhcnNlX29iamVjdChzaGExKTsKIAlzdHJ1Y3QgbmFtZV9yZWZfZGF0YSAqZGF0YSA9IGNiX2RhdGE7CisJaW50IGNhbl9hYmJyZXZpYXRlX291dHB1dCA9IGRhdGEtPnRhZ3Nfb25seSAmJiBkYXRhLT5uYW1lX29ubHk7CiAJaW50IGRlcmVmID0gMDsKIAogCWlmIChkYXRhLT50YWdzX29ubHkgJiYgcHJlZml4Y21wKHBhdGgsICJyZWZzL3RhZ3MvIikpCiAJCXJldHVybiAwOwogCi0JaWYgKGRhdGEtPnJlZl9maWx0ZXIgJiYgZm5tYXRjaChkYXRhLT5yZWZfZmlsdGVyLCBwYXRoLCAwKSkKLQkJcmV0dXJuIDA7CisJaWYgKGRhdGEtPnJlZl9maWx0ZXIpIHsKKwkJc3dpdGNoIChzdWJwYXRoX21hdGNoZXMocGF0aCwgZGF0YS0+cmVmX2ZpbHRlcikpIHsKKwkJY2FzZSAtMTogLyogZGlkIG5vdCBtYXRjaCAqLworCQkJcmV0dXJuIDA7CisJCWNhc2UgMDogIC8qIG1hdGNoZWQgZnVsbHkgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OiAvKiBtYXRjaGVkIHN1YnBhdGggKi8KKwkJCWNhbl9hYmJyZXZpYXRlX291dHB1dCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWFkZF90b190aXBfdGFibGUoc2hhMSwgcGF0aCwgY2FuX2FiYnJldmlhdGVfb3V0cHV0KTsKIAogCXdoaWxlIChvICYmIG8tPnR5cGUgPT0gT0JKX1RBRykgewogCQlzdHJ1Y3QgdGFnICp0ID0gKHN0cnVjdCB0YWcgKikgbzsKQEAgLTExMCwyMCArMTc2LDM4IEBACiAJaWYgKG8gJiYgby0+dHlwZSA9PSBPQkpfQ09NTUlUKSB7CiAJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopbzsKIAotCQlpZiAoIXByZWZpeGNtcChwYXRoLCAicmVmcy9oZWFkcy8iKSkKLQkJCXBhdGggPSBwYXRoICsgMTE7Ci0JCWVsc2UgaWYgKGRhdGEtPnRhZ3Nfb25seQotCQkgICAgJiYgZGF0YS0+bmFtZV9vbmx5Ci0JCSAgICAmJiAhcHJlZml4Y21wKHBhdGgsICJyZWZzL3RhZ3MvIikpCi0JCQlwYXRoID0gcGF0aCArIDEwOwotCQllbHNlIGlmICghcHJlZml4Y21wKHBhdGgsICJyZWZzLyIpKQotCQkJcGF0aCA9IHBhdGggKyA1OwotCisJCXBhdGggPSBuYW1lX3JlZl9hYmJyZXYocGF0aCwgY2FuX2FiYnJldmlhdGVfb3V0cHV0KTsKIAkJbmFtZV9yZXYoY29tbWl0LCB4c3RyZHVwKHBhdGgpLCAwLCAwLCBkZXJlZik7CiAJfQogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqbnRoX3RpcF90YWJsZV9lbnQoc2l6ZV90IGl4LCB2b2lkICp0YWJsZV8pCit7CisJc3RydWN0IHRpcF90YWJsZV9lbnRyeSAqdGFibGUgPSB0YWJsZV87CisJcmV0dXJuIHRhYmxlW2l4XS5zaGExOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2V4YWN0X3JlZl9tYXRjaChjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpvKQoreworCWludCBmb3VuZDsKKworCWlmICghdGlwX3RhYmxlLnRhYmxlIHx8ICF0aXBfdGFibGUubnIpCisJCXJldHVybiBOVUxMOworCisJaWYgKCF0aXBfdGFibGUuc29ydGVkKSB7CisJCXFzb3J0KHRpcF90YWJsZS50YWJsZSwgdGlwX3RhYmxlLm5yLCBzaXplb2YoKnRpcF90YWJsZS50YWJsZSksCisJCSAgICAgIHRpcGNtcCk7CisJCXRpcF90YWJsZS5zb3J0ZWQgPSAxOworCX0KKworCWZvdW5kID0gc2hhMV9wb3Moby0+c2hhMSwgdGlwX3RhYmxlLnRhYmxlLCB0aXBfdGFibGUubnIsCisJCQkgbnRoX3RpcF90YWJsZV9lbnQpOworCWlmICgwIDw9IGZvdW5kKQorCQlyZXR1cm4gdGlwX3RhYmxlLnRhYmxlW2ZvdW5kXS5yZWZuYW1lOworCXJldHVybiBOVUxMOworfQorCiAvKiByZXR1cm5zIGEgc3RhdGljIGJ1ZmZlciAqLwogc3RhdGljIGNvbnN0IGNoYXIgKmdldF9yZXZfbmFtZShjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpvKQogewpAQCAtMTMyLDcgKzIxNiw3IEBACiAJc3RydWN0IGNvbW1pdCAqYzsKIAogCWlmIChvLT50eXBlICE9IE9CSl9DT01NSVQpCi0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gZ2V0X2V4YWN0X3JlZl9tYXRjaChvKTsKIAljID0gKHN0cnVjdCBjb21taXQgKikgbzsKIAluID0gYy0+dXRpbDsKIAlpZiAoIW4pCkBAIC0yMjMsNyArMzA3LDcgQEAKIGludCBjbWRfbmFtZV9yZXYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJc3RydWN0IG9iamVjdF9hcnJheSByZXZzID0gT0JKRUNUX0FSUkFZX0lOSVQ7Ci0JaW50IGFsbCA9IDAsIHRyYW5zZm9ybV9zdGRpbiA9IDAsIGFsbG93X3VuZGVmaW5lZCA9IDEsIGFsd2F5cyA9IDA7CisJaW50IGFsbCA9IDAsIHRyYW5zZm9ybV9zdGRpbiA9IDAsIGFsbG93X3VuZGVmaW5lZCA9IDEsIGFsd2F5cyA9IDAsIHBlZWxfdGFnID0gMDsKIAlzdHJ1Y3QgbmFtZV9yZWZfZGF0YSBkYXRhID0geyAwLCAwLCBOVUxMIH07CiAJc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7CiAJCU9QVF9CT09MRUFOKDAsICJuYW1lLW9ubHkiLCAmZGF0YS5uYW1lX29ubHksIE5fKCJwcmludCBvbmx5IG5hbWVzIChubyBTSEEtMSkiKSksCkBAIC0yMzYsNiArMzIwLDEyIEBACiAJCU9QVF9CT09MRUFOKDAsICJ1bmRlZmluZWQiLCAmYWxsb3dfdW5kZWZpbmVkLCBOXygiYWxsb3cgdG8gcHJpbnQgYHVuZGVmaW5lZGAgbmFtZXMiKSksCiAJCU9QVF9CT09MRUFOKDAsICJhbHdheXMiLCAgICAgJmFsd2F5cywKIAkJCSAgIE5fKCJzaG93IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2siKSksCisJCXsKKwkJCS8qIEEgSGlkZGVuIE9QVF9CT09MICovCisJCQlPUFRJT05fU0VUX0lOVCwgMCwgInBlZWwtdGFnIiwgJnBlZWxfdGFnLCBOVUxMLAorCQkJTl8oImRlcmVmZXJlbmNlIHRhZ3MgaW4gdGhlIGlucHV0IChpbnRlcm5hbCB1c2UpIiksCisJCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfSElEREVOLCBOVUxMLCAxLAorCQl9LAogCQlPUFRfRU5EKCksCiAJfTsKIApAQCAtMjUwLDcgKzM0MCw3IEBACiAKIAlmb3IgKDsgYXJnYzsgYXJnYy0tLCBhcmd2KyspIHsKIAkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKLQkJc3RydWN0IG9iamVjdCAqbzsKKwkJc3RydWN0IG9iamVjdCAqb2JqZWN0OwogCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CiAKIAkJaWYgKGdldF9zaGExKCphcmd2LCBzaGExKSkgewpAQCAtMjU5LDE3ICszNDksMzQgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJbyA9IGRlcmVmX3RhZyhwYXJzZV9vYmplY3Qoc2hhMSksICphcmd2LCAwKTsKLQkJaWYgKCFvIHx8IG8tPnR5cGUgIT0gT0JKX0NPTU1JVCkgewotCQkJZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgZ2V0IGNvbW1pdCBmb3IgJXMuIFNraXBwaW5nLlxuIiwKKwkJY29tbWl0ID0gTlVMTDsKKwkJb2JqZWN0ID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCQlpZiAob2JqZWN0KSB7CisJCQlzdHJ1Y3Qgb2JqZWN0ICpwZWVsZWQgPSBkZXJlZl90YWcob2JqZWN0LCAqYXJndiwgMCk7CisJCQlpZiAocGVlbGVkICYmIHBlZWxlZC0+dHlwZSA9PSBPQkpfQ09NTUlUKQorCQkJCWNvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopcGVlbGVkOworCQl9CisKKwkJaWYgKCFvYmplY3QpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGdldCBvYmplY3QgZm9yICVzLiBTa2lwcGluZy5cbiIsCiAJCQkJCSphcmd2KTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKilvOwotCQlpZiAoY3V0b2ZmID4gY29tbWl0LT5kYXRlKQotCQkJY3V0b2ZmID0gY29tbWl0LT5kYXRlOwotCQlhZGRfb2JqZWN0X2FycmF5KChzdHJ1Y3Qgb2JqZWN0ICopY29tbWl0LCAqYXJndiwgJnJldnMpOworCQlpZiAoY29tbWl0KSB7CisJCQlpZiAoY3V0b2ZmID4gY29tbWl0LT5kYXRlKQorCQkJCWN1dG9mZiA9IGNvbW1pdC0+ZGF0ZTsKKwkJfQorCisJCWlmIChwZWVsX3RhZykgeworCQkJaWYgKCFjb21taXQpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBnZXQgY29tbWl0IGZvciAlcy4gU2tpcHBpbmcuXG4iLAorCQkJCQkqYXJndik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlvYmplY3QgPSAoc3RydWN0IG9iamVjdCAqKWNvbW1pdDsKKwkJfQorCQlhZGRfb2JqZWN0X2FycmF5KG9iamVjdCwgKmFyZ3YsICZyZXZzKTsKIAl9CiAKIAlpZiAoY3V0b2ZmKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9ub3Rlcy5jIGIvYnVpbHRpbi9ub3Rlcy5jCmluZGV4IDU3NzQ4YTYuLmU0MTAwYzQgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vbm90ZXMuYworKysgYi9idWlsdGluL25vdGVzLmMKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSm9oYW4gSGVybGFuZCA8am9oYW5AaGVybGFuZC5uZXQ+CiAgKgogICogQmFzZWQgb24gZ2l0LW5vdGVzLnNoIGJ5IEpvaGFubmVzIFNjaGluZGVsaW4sCi0gKiBhbmQgYnVpbHRpbi10YWcuYyBieSBLcmlzdGlhbiBIw7hnc2JlcmcgYW5kIENhcmxvcyBSaWNhLgorICogYW5kIGJ1aWx0aW4vdGFnLmMgYnkgS3Jpc3RpYW4gSMO4Z3NiZXJnIGFuZCBDYXJsb3MgUmljYS4KICAqLwogCiAjaW5jbHVkZSAiY2FjaGUuaCIKQEAgLTE4LDkgKzE4LDcgQEAKICNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCiAjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKICNpbmNsdWRlICJub3Rlcy1tZXJnZS5oIgotCi1zdGF0aWMgdm9pZCBjb21taXRfbm90ZXMoc3RydWN0IG5vdGVzX3RyZWUgKnQsIGNvbnN0IGNoYXIgKm1zZyk7Ci1zdGF0aWMgY29tYmluZV9ub3Rlc19mbiBwYXJzZV9jb21iaW5lX25vdGVzX2ZuKGNvbnN0IGNoYXIgKnYpOworI2luY2x1ZGUgIm5vdGVzLXV0aWxzLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X25vdGVzX3VzYWdlW10gPSB7CiAJTl8oImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIFtsaXN0IFs8b2JqZWN0Pl1dIiksCkBAIC0yODcsMTM5ICsyODUsMTMgQEAKIAlyZXR1cm4gcGFyc2VfcmV1c2VfYXJnKG9wdCwgYXJnLCB1bnNldCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbW1pdF9ub3RlcyhzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgY29uc3QgY2hhciAqbXNnKQotewotCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7Ci0JdW5zaWduZWQgY2hhciBjb21taXRfc2hhMVsyMF07Ci0KLQlpZiAoIXQpCi0JCXQgPSAmZGVmYXVsdF9ub3Rlc190cmVlOwotCWlmICghdC0+aW5pdGlhbGl6ZWQgfHwgIXQtPnJlZiB8fCAhKnQtPnJlZikKLQkJZGllKF8oIkNhbm5vdCBjb21taXQgdW5pbml0aWFsaXplZC91bnJlZmVyZW5jZWQgbm90ZXMgdHJlZSIpKTsKLQlpZiAoIXQtPmRpcnR5KQotCQlyZXR1cm47IC8qIGRvbid0IGhhdmUgdG8gY29tbWl0IGFuIHVuY2hhbmdlZCB0cmVlICovCi0KLQkvKiBQcmVwYXJlIGNvbW1pdCBtZXNzYWdlIGFuZCByZWZsb2cgbWVzc2FnZSAqLwotCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgbXNnKTsKLQlpZiAoYnVmLmJ1ZltidWYubGVuIC0gMV0gIT0gJ1xuJykKLQkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOyAvKiBNYWtlIHN1cmUgbXNnIGVuZHMgd2l0aCBuZXdsaW5lICovCi0KLQljcmVhdGVfbm90ZXNfY29tbWl0KHQsIE5VTEwsICZidWYsIGNvbW1pdF9zaGExKTsKLQlzdHJidWZfaW5zZXJ0KCZidWYsIDAsICJub3RlczogIiwgNyk7IC8qIGNvbW1pdCBtZXNzYWdlIHN0YXJ0cyBhdCBpbmRleCA3ICovCi0JdXBkYXRlX3JlZihidWYuYnVmLCB0LT5yZWYsIGNvbW1pdF9zaGExLCBOVUxMLCAwLCBESUVfT05fRVJSKTsKLQotCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOwotfQotCi1zdGF0aWMgY29tYmluZV9ub3Rlc19mbiBwYXJzZV9jb21iaW5lX25vdGVzX2ZuKGNvbnN0IGNoYXIgKnYpCi17Ci0JaWYgKCFzdHJjYXNlY21wKHYsICJvdmVyd3JpdGUiKSkKLQkJcmV0dXJuIGNvbWJpbmVfbm90ZXNfb3ZlcndyaXRlOwotCWVsc2UgaWYgKCFzdHJjYXNlY21wKHYsICJpZ25vcmUiKSkKLQkJcmV0dXJuIGNvbWJpbmVfbm90ZXNfaWdub3JlOwotCWVsc2UgaWYgKCFzdHJjYXNlY21wKHYsICJjb25jYXRlbmF0ZSIpKQotCQlyZXR1cm4gY29tYmluZV9ub3Rlc19jb25jYXRlbmF0ZTsKLQllbHNlIGlmICghc3RyY2FzZWNtcCh2LCAiY2F0X3NvcnRfdW5pcSIpKQotCQlyZXR1cm4gY29tYmluZV9ub3Rlc19jYXRfc29ydF91bmlxOwotCWVsc2UKLQkJcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQgbm90ZXNfcmV3cml0ZV9jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCi17Ci0Jc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnICpjID0gY2I7Ci0JaWYgKCFwcmVmaXhjbXAoaywgIm5vdGVzLnJld3JpdGUuIikgJiYgIXN0cmNtcChrKzE0LCBjLT5jbWQpKSB7Ci0JCWMtPmVuYWJsZWQgPSBnaXRfY29uZmlnX2Jvb2woaywgdik7Ci0JCXJldHVybiAwOwotCX0gZWxzZSBpZiAoIWMtPm1vZGVfZnJvbV9lbnYgJiYgIXN0cmNtcChrLCAibm90ZXMucmV3cml0ZW1vZGUiKSkgewotCQlpZiAoIXYpCi0JCQljb25maWdfZXJyb3Jfbm9uYm9vbChrKTsKLQkJYy0+Y29tYmluZSA9IHBhcnNlX2NvbWJpbmVfbm90ZXNfZm4odik7Ci0JCWlmICghYy0+Y29tYmluZSkgewotCQkJZXJyb3IoXygiQmFkIG5vdGVzLnJld3JpdGVNb2RlIHZhbHVlOiAnJXMnIiksIHYpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIGlmICghYy0+cmVmc19mcm9tX2VudiAmJiAhc3RyY21wKGssICJub3Rlcy5yZXdyaXRlcmVmIikpIHsKLQkJLyogbm90ZSB0aGF0IGEgcmVmcy8gcHJlZml4IGlzIGltcGxpZWQgaW4gdGhlCi0JCSAqIHVuZGVybHlpbmcgZm9yX2VhY2hfZ2xvYl9yZWYgKi8KLQkJaWYgKCFwcmVmaXhjbXAodiwgInJlZnMvbm90ZXMvIikpCi0JCQlzdHJpbmdfbGlzdF9hZGRfcmVmc19ieV9nbG9iKGMtPnJlZnMsIHYpOwotCQllbHNlCi0JCQl3YXJuaW5nKF8oIlJlZnVzaW5nIHRvIHJld3JpdGUgbm90ZXMgaW4gJXMiCi0JCQkJIiAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiKSwgdik7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KLXN0cnVjdCBub3Rlc19yZXdyaXRlX2NmZyAqaW5pdF9jb3B5X25vdGVzX2Zvcl9yZXdyaXRlKGNvbnN0IGNoYXIgKmNtZCkKLXsKLQlzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmMgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcpKTsKLQljb25zdCBjaGFyICpyZXdyaXRlX21vZGVfZW52ID0gZ2V0ZW52KEdJVF9OT1RFU19SRVdSSVRFX01PREVfRU5WSVJPTk1FTlQpOwotCWNvbnN0IGNoYXIgKnJld3JpdGVfcmVmc19lbnYgPSBnZXRlbnYoR0lUX05PVEVTX1JFV1JJVEVfUkVGX0VOVklST05NRU5UKTsKLQljLT5jbWQgPSBjbWQ7Ci0JYy0+ZW5hYmxlZCA9IDE7Ci0JYy0+Y29tYmluZSA9IGNvbWJpbmVfbm90ZXNfY29uY2F0ZW5hdGU7Ci0JYy0+cmVmcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzdHJpbmdfbGlzdCkpOwotCWMtPnJlZnMtPnN0cmR1cF9zdHJpbmdzID0gMTsKLQljLT5yZWZzX2Zyb21fZW52ID0gMDsKLQljLT5tb2RlX2Zyb21fZW52ID0gMDsKLQlpZiAocmV3cml0ZV9tb2RlX2VudikgewotCQljLT5tb2RlX2Zyb21fZW52ID0gMTsKLQkJYy0+Y29tYmluZSA9IHBhcnNlX2NvbWJpbmVfbm90ZXNfZm4ocmV3cml0ZV9tb2RlX2Vudik7Ci0JCWlmICghYy0+Y29tYmluZSkKLQkJCS8qIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgdGhlCi0JCQkgICBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHNlY29uZCAlcyBpcyBpdHMgdmFsdWUgKi8KLQkJCWVycm9yKF8oIkJhZCAlcyB2YWx1ZTogJyVzJyIpLCBHSVRfTk9URVNfUkVXUklURV9NT0RFX0VOVklST05NRU5ULAotCQkJCQlyZXdyaXRlX21vZGVfZW52KTsKLQl9Ci0JaWYgKHJld3JpdGVfcmVmc19lbnYpIHsKLQkJYy0+cmVmc19mcm9tX2VudiA9IDE7Ci0JCXN0cmluZ19saXN0X2FkZF9yZWZzX2Zyb21fY29sb25fc2VwKGMtPnJlZnMsIHJld3JpdGVfcmVmc19lbnYpOwotCX0KLQlnaXRfY29uZmlnKG5vdGVzX3Jld3JpdGVfY29uZmlnLCBjKTsKLQlpZiAoIWMtPmVuYWJsZWQgfHwgIWMtPnJlZnMtPm5yKSB7Ci0JCXN0cmluZ19saXN0X2NsZWFyKGMtPnJlZnMsIDApOwotCQlmcmVlKGMtPnJlZnMpOwotCQlmcmVlKGMpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JYy0+dHJlZXMgPSBsb2FkX25vdGVzX3RyZWVzKGMtPnJlZnMpOwotCXN0cmluZ19saXN0X2NsZWFyKGMtPnJlZnMsIDApOwotCWZyZWUoYy0+cmVmcyk7Ci0JcmV0dXJuIGM7Ci19Ci0KLWludCBjb3B5X25vdGVfZm9yX3Jld3JpdGUoc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnICpjLAotCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tX29iaiwgY29uc3QgdW5zaWduZWQgY2hhciAqdG9fb2JqKQotewotCWludCByZXQgPSAwOwotCWludCBpOwotCWZvciAoaSA9IDA7IGMtPnRyZWVzW2ldOyBpKyspCi0JCXJldCA9IGNvcHlfbm90ZShjLT50cmVlc1tpXSwgZnJvbV9vYmosIHRvX29iaiwgMSwgYy0+Y29tYmluZSkgfHwgcmV0OwotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgZmluaXNoX2NvcHlfbm90ZXNfZm9yX3Jld3JpdGUoc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnICpjKQotewotCWludCBpOwotCWZvciAoaSA9IDA7IGMtPnRyZWVzW2ldOyBpKyspIHsKLQkJY29tbWl0X25vdGVzKGMtPnRyZWVzW2ldLCAiTm90ZXMgYWRkZWQgYnkgJ2dpdCBub3RlcyBjb3B5JyIpOwotCQlmcmVlX25vdGVzKGMtPnRyZWVzW2ldKTsKLQl9Ci0JZnJlZShjLT50cmVlcyk7Ci0JZnJlZShjKTsKLX0KLQogc3RhdGljIGludCBub3Rlc19jb3B5X2Zyb21fc3RkaW4oaW50IGZvcmNlLCBjb25zdCBjaGFyICpyZXdyaXRlX2NtZCkKIHsKIAlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwogCXN0cnVjdCBub3Rlc19yZXdyaXRlX2NmZyAqYyA9IE5VTEw7CiAJc3RydWN0IG5vdGVzX3RyZWUgKnQgPSBOVUxMOwogCWludCByZXQgPSAwOworCWNvbnN0IGNoYXIgKm1zZyA9ICJOb3RlcyBhZGRlZCBieSAnZ2l0IG5vdGVzIGNvcHknIjsKIAogCWlmIChyZXdyaXRlX2NtZCkgewogCQljID0gaW5pdF9jb3B5X25vdGVzX2Zvcl9yZXdyaXRlKHJld3JpdGVfY21kKTsKQEAgLTQ2MSwxMCArMzMzLDEwIEBACiAJfQogCiAJaWYgKCFyZXdyaXRlX2NtZCkgewotCQljb21taXRfbm90ZXModCwgIk5vdGVzIGFkZGVkIGJ5ICdnaXQgbm90ZXMgY29weSciKTsKKwkJY29tbWl0X25vdGVzKHQsIG1zZyk7CiAJCWZyZWVfbm90ZXModCk7CiAJfSBlbHNlIHsKLQkJZmluaXNoX2NvcHlfbm90ZXNfZm9yX3Jld3JpdGUoYyk7CisJCWZpbmlzaF9jb3B5X25vdGVzX2Zvcl9yZXdyaXRlKGMsIG1zZyk7CiAJfQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9idWlsdGluL3BhY2stcmVmcy5jIGIvYnVpbHRpbi9wYWNrLXJlZnMuYwppbmRleCBiNWEwZjg4Li5iMjBiMWVjIDEwMDY0NAotLS0gYS9idWlsdGluL3BhY2stcmVmcy5jCisrKyBiL2J1aWx0aW4vcGFjay1yZWZzLmMKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAiYnVpbHRpbi5oIgogI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKLSNpbmNsdWRlICJwYWNrLXJlZnMuaCIKKyNpbmNsdWRlICJyZWZzLmgiCiAKIHN0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgcGFja19yZWZzX3VzYWdlW10gPSB7CiAJTl8oImdpdCBwYWNrLXJlZnMgW29wdGlvbnNdIiksCmRpZmYgLS1naXQgYS9idWlsdGluL3BydW5lLXBhY2tlZC5jIGIvYnVpbHRpbi9wcnVuZS1wYWNrZWQuYwppbmRleCA4MzM4MmMxLi5mYTZjZTQyIDEwMDY0NAotLS0gYS9idWlsdGluL3BydW5lLXBhY2tlZC5jCisrKyBiL2J1aWx0aW4vcHJ1bmUtcGFja2VkLmMKQEAgLTgsOSArOCw2IEBACiAJTlVMTAogfTsKIAotI2RlZmluZSBEUllfUlVOIDAxCi0jZGVmaW5lIFZFUkJPU0UgMDIKLQogc3RhdGljIHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3M7CiAKIHN0YXRpYyB2b2lkIHBydW5lX2RpcihpbnQgaSwgRElSICpkaXIsIGNoYXIgKnBhdGhuYW1lLCBpbnQgbGVuLCBpbnQgb3B0cykKQEAgLTI5LDcgKzI2LDcgQEAKIAkJaWYgKCFoYXNfc2hhMV9wYWNrKHNoYTEpKQogCQkJY29udGludWU7CiAJCW1lbWNweShwYXRobmFtZSArIGxlbiwgZGUtPmRfbmFtZSwgMzgpOwotCQlpZiAob3B0cyAmIERSWV9SVU4pCisJCWlmIChvcHRzICYgUFJVTkVfUEFDS0VEX0RSWV9SVU4pCiAJCQlwcmludGYoInJtIC1mICVzXG4iLCBwYXRobmFtZSk7CiAJCWVsc2UKIAkJCXVubGlua19vcl93YXJuKHBhdGhuYW1lKTsKQEAgLTQ0LDcgKzQxLDcgQEAKIAljb25zdCBjaGFyICpkaXIgPSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpOwogCWludCBsZW4gPSBzdHJsZW4oZGlyKTsKIAotCWlmIChvcHRzID09IFZFUkJPU0UpCisJaWYgKG9wdHMgJiBQUlVORV9QQUNLRURfVkVSQk9TRSkKIAkJcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzc19kZWxheSgiUmVtb3ZpbmcgZHVwbGljYXRlIG9iamVjdHMiLAogCQkJMjU2LCA5NSwgMik7CiAKQEAgLTcxLDEwICs2OCwxMiBAQAogCiBpbnQgY21kX3BydW5lX3BhY2tlZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKLQlpbnQgb3B0cyA9IGlzYXR0eSgyKSA/IFZFUkJPU0UgOiAwOworCWludCBvcHRzID0gaXNhdHR5KDIpID8gUFJVTkVfUEFDS0VEX1ZFUkJPU0UgOiAwOwogCWNvbnN0IHN0cnVjdCBvcHRpb24gcHJ1bmVfcGFja2VkX29wdGlvbnNbXSA9IHsKLQkJT1BUX0JJVCgnbicsICJkcnktcnVuIiwgJm9wdHMsIE5fKCJkcnkgcnVuIiksIERSWV9SVU4pLAotCQlPUFRfTkVHQklUKCdxJywgInF1aWV0IiwgJm9wdHMsIE5fKCJiZSBxdWlldCIpLCBWRVJCT1NFKSwKKwkJT1BUX0JJVCgnbicsICJkcnktcnVuIiwgJm9wdHMsIE5fKCJkcnkgcnVuIiksCisJCQlQUlVORV9QQUNLRURfRFJZX1JVTiksCisJCU9QVF9ORUdCSVQoJ3EnLCAicXVpZXQiLCAmb3B0cywgTl8oImJlIHF1aWV0IiksCisJCQkgICBQUlVORV9QQUNLRURfVkVSQk9TRSksCiAJCU9QVF9FTkQoKQogCX07CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4vcHJ1bmUuYyBiL2J1aWx0aW4vcHJ1bmUuYwppbmRleCA4NTg0M2Q0Li42MzY2OTE3IDEwMDY0NAotLS0gYS9idWlsdGluL3BydW5lLmMKKysrIGIvYnVpbHRpbi9wcnVuZS5jCkBAIC0xMzIsOCArMTMyLDggQEAKIAkJT1BUX19EUllfUlVOKCZzaG93X29ubHksIE5fKCJkbyBub3QgcmVtb3ZlLCBzaG93IG9ubHkiKSksCiAJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oInJlcG9ydCBwcnVuZWQgb2JqZWN0cyIpKSwKIAkJT1BUX0JPT0woMCwgInByb2dyZXNzIiwgJnNob3dfcHJvZ3Jlc3MsIE5fKCJzaG93IHByb2dyZXNzIikpLAotCQlPUFRfREFURSgwLCAiZXhwaXJlIiwgJmV4cGlyZSwKLQkJCSBOXygiZXhwaXJlIG9iamVjdHMgb2xkZXIgdGhhbiA8dGltZT4iKSksCisJCU9QVF9FWFBJUllfREFURSgwLCAiZXhwaXJlIiwgJmV4cGlyZSwKKwkJCQlOXygiZXhwaXJlIG9iamVjdHMgb2xkZXIgdGhhbiA8dGltZT4iKSksCiAJCU9QVF9FTkQoKQogCX07CiAJY2hhciAqczsKQEAgLTE2NSw3ICsxNjUsNyBAQAogCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKIAlwcnVuZV9vYmplY3RfZGlyKGdldF9vYmplY3RfZGlyZWN0b3J5KCkpOwogCi0JcHJ1bmVfcGFja2VkX29iamVjdHMoc2hvd19vbmx5KTsKKwlwcnVuZV9wYWNrZWRfb2JqZWN0cyhzaG93X29ubHkgPyBQUlVORV9QQUNLRURfRFJZX1JVTiA6IDApOwogCXJlbW92ZV90ZW1wb3JhcnlfZmlsZXMoZ2V0X29iamVjdF9kaXJlY3RvcnkoKSk7CiAJcyA9IG1rcGF0aGR1cCgiJXMvcGFjayIsIGdldF9vYmplY3RfZGlyZWN0b3J5KCkpOwogCXJlbW92ZV90ZW1wb3JhcnlfZmlsZXMocyk7CmRpZmYgLS1naXQgYS9idWlsdGluL3B1c2guYyBiL2J1aWx0aW4vcHVzaC5jCmluZGV4IDkwOWMzNGQuLjZkMzZjMjQgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vcHVzaC5jCisrKyBiL2J1aWx0aW4vcHVzaC5jCkBAIC0xMTMsMTcgKzExMywyMCBAQAogCSAgICByZW1vdGUtPm5hbWUsIGJyYW5jaC0+bmFtZSwgYWR2aWNlX21heWJlKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0dXBfcHVzaF91cHN0cmVhbShzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGludCBzaW1wbGUpCitzdGF0aWMgY29uc3QgY2hhciBtZXNzYWdlX2RldGFjaGVkX2hlYWRfZGllW10gPQorCU5fKCJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guXG4iCisJICAgIlRvIHB1c2ggdGhlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgY3VycmVudCAoZGV0YWNoZWQgSEVBRClcbiIKKwkgICAic3RhdGUgbm93LCB1c2VcbiIKKwkgICAiXG4iCisJICAgIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxuYW1lLW9mLXJlbW90ZS1icmFuY2g+XG4iKTsKKworc3RhdGljIHZvaWQgc2V0dXBfcHVzaF91cHN0cmVhbShzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHN0cnVjdCBicmFuY2ggKmJyYW5jaCwKKwkJCQlpbnQgdHJpYW5ndWxhcikKIHsKIAlzdHJ1Y3Qgc3RyYnVmIHJlZnNwZWMgPSBTVFJCVUZfSU5JVDsKLQlzdHJ1Y3QgYnJhbmNoICpicmFuY2ggPSBicmFuY2hfZ2V0KE5VTEwpOworCiAJaWYgKCFicmFuY2gpCi0JCWRpZShfKCJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guXG4iCi0JCSAgICAiVG8gcHVzaCB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZSBjdXJyZW50IChkZXRhY2hlZCBIRUFEKVxuIgotCQkgICAgInN0YXRlIG5vdywgdXNlXG4iCi0JCSAgICAiXG4iCi0JCSAgICAiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbWUtb2YtcmVtb3RlLWJyYW5jaD5cbiIpLAotCQkgICAgcmVtb3RlLT5uYW1lKTsKKwkJZGllKF8obWVzc2FnZV9kZXRhY2hlZF9oZWFkX2RpZSksIHJlbW90ZS0+bmFtZSk7CiAJaWYgKCFicmFuY2gtPm1lcmdlX25yIHx8ICFicmFuY2gtPm1lcmdlIHx8ICFicmFuY2gtPnJlbW90ZV9uYW1lKQogCQlkaWUoXygiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBubyB1cHN0cmVhbSBicmFuY2guXG4iCiAJCSAgICAiVG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHNldCB0aGUgcmVtb3RlIGFzIHVwc3RyZWFtLCB1c2VcbiIKQEAgLTEzNSwxOCArMTM4LDI5IEBACiAJaWYgKGJyYW5jaC0+bWVyZ2VfbnIgIT0gMSkKIAkJZGllKF8oIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbXVsdGlwbGUgdXBzdHJlYW0gYnJhbmNoZXMsICIKIAkJICAgICJyZWZ1c2luZyB0byBwdXNoLiIpLCBicmFuY2gtPm5hbWUpOwotCWlmIChzdHJjbXAoYnJhbmNoLT5yZW1vdGVfbmFtZSwgcmVtb3RlLT5uYW1lKSkKKwlpZiAodHJpYW5ndWxhcikKIAkJZGllKF8oIllvdSBhcmUgcHVzaGluZyB0byByZW1vdGUgJyVzJywgd2hpY2ggaXMgbm90IHRoZSB1cHN0cmVhbSBvZlxuIgogCQkgICAgICAieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnLCB3aXRob3V0IHRlbGxpbmcgbWUgd2hhdCB0byBwdXNoXG4iCiAJCSAgICAgICJ0byB1cGRhdGUgd2hpY2ggcmVtb3RlIGJyYW5jaC4iKSwKIAkJICAgIHJlbW90ZS0+bmFtZSwgYnJhbmNoLT5uYW1lKTsKLQlpZiAoc2ltcGxlICYmIHN0cmNtcChicmFuY2gtPnJlZm5hbWUsIGJyYW5jaC0+bWVyZ2VbMF0tPnNyYykpCi0JCWRpZV9wdXNoX3NpbXBsZShicmFuY2gsIHJlbW90ZSk7CisKKwlpZiAocHVzaF9kZWZhdWx0ID09IFBVU0hfREVGQVVMVF9TSU1QTEUpIHsKKwkJLyogQWRkaXRpb25hbCBzYWZldHkgKi8KKwkJaWYgKHN0cmNtcChicmFuY2gtPnJlZm5hbWUsIGJyYW5jaC0+bWVyZ2VbMF0tPnNyYykpCisJCQlkaWVfcHVzaF9zaW1wbGUoYnJhbmNoLCByZW1vdGUpOworCX0KIAogCXN0cmJ1Zl9hZGRmKCZyZWZzcGVjLCAiJXM6JXMiLCBicmFuY2gtPm5hbWUsIGJyYW5jaC0+bWVyZ2VbMF0tPnNyYyk7CiAJYWRkX3JlZnNwZWMocmVmc3BlYy5idWYpOwogfQogCitzdGF0aWMgdm9pZCBzZXR1cF9wdXNoX2N1cnJlbnQoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBzdHJ1Y3QgYnJhbmNoICpicmFuY2gpCit7CisJaWYgKCFicmFuY2gpCisJCWRpZShfKG1lc3NhZ2VfZGV0YWNoZWRfaGVhZF9kaWUpLCByZW1vdGUtPm5hbWUpOworCWFkZF9yZWZzcGVjKGJyYW5jaC0+bmFtZSk7Cit9CisKIHN0YXRpYyBjaGFyIHdhcm5fdW5zcGVjaWZpZWRfcHVzaF9kZWZhdWx0X21zZ1tdID0KIE5fKCJwdXNoLmRlZmF1bHQgaXMgdW5zZXQ7IGl0cyBpbXBsaWNpdCB2YWx1ZSBpcyBjaGFuZ2luZyBpblxuIgogICAgIkdpdCAyLjAgZnJvbSAnbWF0Y2hpbmcnIHRvICdzaW1wbGUnLiBUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZVxuIgpAQCAtMTcxLDggKzE4NSwxNyBAQAogCXdhcm5pbmcoIiVzXG4iLCBfKHdhcm5fdW5zcGVjaWZpZWRfcHVzaF9kZWZhdWx0X21zZykpOwogfQogCitzdGF0aWMgaW50IGlzX3dvcmtmbG93X3RyaWFuZ3VsYXIoc3RydWN0IHJlbW90ZSAqcmVtb3RlKQoreworCXN0cnVjdCByZW1vdGUgKmZldGNoX3JlbW90ZSA9IHJlbW90ZV9nZXQoTlVMTCk7CisJcmV0dXJuIChmZXRjaF9yZW1vdGUgJiYgZmV0Y2hfcmVtb3RlICE9IHJlbW90ZSk7Cit9CisKIHN0YXRpYyB2b2lkIHNldHVwX2RlZmF1bHRfcHVzaF9yZWZzcGVjcyhzdHJ1Y3QgcmVtb3RlICpyZW1vdGUpCiB7CisJc3RydWN0IGJyYW5jaCAqYnJhbmNoID0gYnJhbmNoX2dldChOVUxMKTsKKwlpbnQgdHJpYW5ndWxhciA9IGlzX3dvcmtmbG93X3RyaWFuZ3VsYXIocmVtb3RlKTsKKwogCXN3aXRjaCAocHVzaF9kZWZhdWx0KSB7CiAJZGVmYXVsdDoKIAljYXNlIFBVU0hfREVGQVVMVF9VTlNQRUNJRklFRDoKQEAgLTE4NCwxNSArMjA3LDE4IEBACiAJCWJyZWFrOwogCiAJY2FzZSBQVVNIX0RFRkFVTFRfU0lNUExFOgotCQlzZXR1cF9wdXNoX3Vwc3RyZWFtKHJlbW90ZSwgMSk7CisJCWlmICh0cmlhbmd1bGFyKQorCQkJc2V0dXBfcHVzaF9jdXJyZW50KHJlbW90ZSwgYnJhbmNoKTsKKwkJZWxzZQorCQkJc2V0dXBfcHVzaF91cHN0cmVhbShyZW1vdGUsIGJyYW5jaCwgdHJpYW5ndWxhcik7CiAJCWJyZWFrOwogCiAJY2FzZSBQVVNIX0RFRkFVTFRfVVBTVFJFQU06Ci0JCXNldHVwX3B1c2hfdXBzdHJlYW0ocmVtb3RlLCAwKTsKKwkJc2V0dXBfcHVzaF91cHN0cmVhbShyZW1vdGUsIGJyYW5jaCwgdHJpYW5ndWxhcik7CiAJCWJyZWFrOwogCiAJY2FzZSBQVVNIX0RFRkFVTFRfQ1VSUkVOVDoKLQkJYWRkX3JlZnNwZWMoIkhFQUQiKTsKKwkJc2V0dXBfcHVzaF9jdXJyZW50KHJlbW90ZSwgYnJhbmNoKTsKIAkJYnJlYWs7CiAKIAljYXNlIFBVU0hfREVGQVVMVF9OT1RISU5HOgpAQCAtMjA0LDggKzIzMCw4IEBACiAKIHN0YXRpYyBjb25zdCBjaGFyIG1lc3NhZ2VfYWR2aWNlX3B1bGxfYmVmb3JlX3B1c2hbXSA9CiAJTl8oIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0aXAgb2YgeW91ciBjdXJyZW50IGJyYW5jaCBpcyBiZWhpbmRcbiIKLQkgICAiaXRzIHJlbW90ZSBjb3VudGVycGFydC4gTWVyZ2UgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuICdnaXQgcHVsbCcpXG4iCi0JICAgImJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorCSAgICJpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LiBJbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuXG4iCisJICAgIidnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKIAkgICAiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iKTsKIAogc3RhdGljIGNvbnN0IGNoYXIgbWVzc2FnZV9hZHZpY2VfdXNlX3Vwc3RyZWFtW10gPQpAQCAtMjE2LDE1ICsyNDIsMTUgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgbWVzc2FnZV9hZHZpY2VfY2hlY2tvdXRfcHVsbF9wdXNoW10gPQogCU5fKCJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSBhIHB1c2hlZCBicmFuY2ggdGlwIGlzIGJlaGluZCBpdHMgcmVtb3RlXG4iCi0JICAgImNvdW50ZXJwYXJ0LiBDaGVjayBvdXQgdGhpcyBicmFuY2ggYW5kIG1lcmdlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgotCSAgICIoZS5nLiAnZ2l0IHB1bGwnKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKwkgICAiY291bnRlcnBhcnQuIENoZWNrIG91dCB0aGlzIGJyYW5jaCBhbmQgaW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorCSAgICIoZS5nLiAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCiAJICAgIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIik7CiAKIHN0YXRpYyBjb25zdCBjaGFyIG1lc3NhZ2VfYWR2aWNlX3JlZl9mZXRjaF9maXJzdFtdID0KIAlOXygiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHJlbW90ZSBjb250YWlucyB3b3JrIHRoYXQgeW91IGRvXG4iCiAJICAgIm5vdCBoYXZlIGxvY2FsbHkuIFRoaXMgaXMgdXN1YWxseSBjYXVzZWQgYnkgYW5vdGhlciByZXBvc2l0b3J5IHB1c2hpbmdcbiIKLQkgICAidG8gdGhlIHNhbWUgcmVmLiBZb3UgbWF5IHdhbnQgdG8gZmlyc3QgbWVyZ2UgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuLFxuIgotCSAgICInZ2l0IHB1bGwnKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKwkgICAidG8gdGhlIHNhbWUgcmVmLiBZb3UgbWF5IHdhbnQgdG8gZmlyc3QgaW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorCSAgICIoZS5nLiwgJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgogCSAgICJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIpOwogCiBzdGF0aWMgY29uc3QgY2hhciBtZXNzYWdlX2FkdmljZV9yZWZfYWxyZWFkeV9leGlzdHNbXSA9CmRpZmYgLS1naXQgYS9idWlsdGluL3JlYWQtdHJlZS5jIGIvYnVpbHRpbi9yZWFkLXRyZWUuYwppbmRleCAwNDJhYzFiLi4wZjVkN2ZlIDEwMDY0NAotLS0gYS9idWlsdGluL3JlYWQtdHJlZS5jCisrKyBiL2J1aWx0aW4vcmVhZC10cmVlLmMKQEAgLTY2LDcgKzY2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZGVidWdfc3RhZ2UoY29uc3QgY2hhciAqbGFiZWwsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCitzdGF0aWMgdm9pZCBkZWJ1Z19zdGFnZShjb25zdCBjaGFyICpsYWJlbCwgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKIAkJCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKIHsKIAlwcmludGYoIiVzICIsIGxhYmVsKTsKQEAgLTgwLDcgKzgwLDggQEAKIAkJICAgICAgIHNoYTFfdG9faGV4KGNlLT5zaGExKSk7CiB9CiAKLXN0YXRpYyBpbnQgZGVidWdfbWVyZ2Uoc3RydWN0IGNhY2hlX2VudHJ5ICoqc3RhZ2VzLCBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCitzdGF0aWMgaW50IGRlYnVnX21lcmdlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICpzdGFnZXMsCisJCSAgICAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCiB7CiAJaW50IGk7CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVmbG9nLmMgYi9idWlsdGluL3JlZmxvZy5jCmluZGV4IDcyYTBhZjcuLjU0MTg0YjMgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vcmVmbG9nLmMKKysrIGIvYnVpbHRpbi9yZWZsb2cuYwpAQCAtNDk2LDExICs0OTYsOSBAQAogewogCWlmICghdmFsdWUpCiAJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOwotCWlmICghc3RyY21wKHZhbHVlLCAibmV2ZXIiKSB8fCAhc3RyY21wKHZhbHVlLCAiZmFsc2UiKSkgewotCQkqZXhwaXJlID0gMDsKLQkJcmV0dXJuIDA7Ci0JfQotCSpleHBpcmUgPSBhcHByb3hpZGF0ZSh2YWx1ZSk7CisJaWYgKHBhcnNlX2V4cGlyeV9kYXRlKHZhbHVlLCBleHBpcmUpKQorCQlyZXR1cm4gZXJyb3IoXygiJXMnIGZvciAnJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIpLAorCQkJICAgICB2YWx1ZSwgdmFyKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjE0LDExICs2MTIsMTMgQEAKIAkJaWYgKCFzdHJjbXAoYXJnLCAiLS1kcnktcnVuIikgfHwgIXN0cmNtcChhcmcsICItbiIpKQogCQkJY2IuZHJ5X3J1biA9IDE7CiAJCWVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1leHBpcmU9IikpIHsKLQkJCWNiLmV4cGlyZV90b3RhbCA9IGFwcHJveGlkYXRlKGFyZyArIDkpOworCQkJaWYgKHBhcnNlX2V4cGlyeV9kYXRlKGFyZyArIDksICZjYi5leHBpcmVfdG90YWwpKQorCQkJCWRpZShfKCInJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIpLCBhcmcpOwogCQkJZXhwbGljaXRfZXhwaXJ5IHw9IEVYUElSRV9UT1RBTDsKIAkJfQogCQllbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi0tZXhwaXJlLXVucmVhY2hhYmxlPSIpKSB7Ci0JCQljYi5leHBpcmVfdW5yZWFjaGFibGUgPSBhcHByb3hpZGF0ZShhcmcgKyAyMSk7CisJCQlpZiAocGFyc2VfZXhwaXJ5X2RhdGUoYXJnICsgMjEsICZjYi5leHBpcmVfdW5yZWFjaGFibGUpKQorCQkJCWRpZShfKCInJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIpLCBhcmcpOwogCQkJZXhwbGljaXRfZXhwaXJ5IHw9IEVYUElSRV9VTlJFQUNIOwogCQl9CiAJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1zdGFsZS1maXgiKSkKZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVwbGFjZS5jIGIvYnVpbHRpbi9yZXBsYWNlLmMKaW5kZXggMzk4Y2NkNS4uNTlkMzExNSAxMDA2NDQKLS0tIGEvYnVpbHRpbi9yZXBsYWNlLmMKKysrIGIvYnVpbHRpbi9yZXBsYWNlLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA4IENocmlzdGlhbiBDb3VkZXIgPGNocmlzY29vbEB0dXhmYW1pbHkub3JnPgogICoKLSAqIEJhc2VkIG9uIGJ1aWx0aW4tdGFnLmMgYnkgS3Jpc3RpYW4gSMO4Z3NiZXJnIDxrcmhAcmVkaGF0LmNvbT4KKyAqIEJhc2VkIG9uIGJ1aWx0aW4vdGFnLmMgYnkgS3Jpc3RpYW4gSMO4Z3NiZXJnIDxrcmhAcmVkaGF0LmNvbT4KICAqIGFuZCBDYXJsb3MgUmljYSA8amFzYW1wbGVyQGdtYWlsLmNvbT4gdGhhdCB3YXMgaXRzZWxmIGJhc2VkIG9uCiAgKiBnaXQtdGFnLnNoIGFuZCBta3RhZy5jIGJ5IExpbnVzIFRvcnZhbGRzLgogICovCmRpZmYgLS1naXQgYS9idWlsdGluL3Jlc2V0LmMgYi9idWlsdGluL3Jlc2V0LmMKaW5kZXggNjAzMjEzMS4uYWZhNmUwMiAxMDA2NDQKLS0tIGEvYnVpbHRpbi9yZXNldC5jCisrKyBiL2J1aWx0aW4vcmVzZXQuYwpAQCAtOTMsMTAgKzkzLDEyIEBACiBzdGF0aWMgdm9pZCBwcmludF9uZXdfaGVhZF9saW5lKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKIHsKIAljb25zdCBjaGFyICpoZXgsICpib2R5OworCWNoYXIgKm1zZzsKIAogCWhleCA9IGZpbmRfdW5pcXVlX2FiYnJldihjb21taXQtPm9iamVjdC5zaGExLCBERUZBVUxUX0FCQlJFVik7CiAJcHJpbnRmKF8oIkhFQUQgaXMgbm93IGF0ICVzIiksIGhleCk7Ci0JYm9keSA9IHN0cnN0cihjb21taXQtPmJ1ZmZlciwgIlxuXG4iKTsKKwltc2cgPSBsb2dtc2dfcmVlbmNvZGUoY29tbWl0LCBOVUxMLCBnZXRfbG9nX291dHB1dF9lbmNvZGluZygpKTsKKwlib2R5ID0gc3Ryc3RyKG1zZywgIlxuXG4iKTsKIAlpZiAoYm9keSkgewogCQljb25zdCBjaGFyICplb2w7CiAJCXNpemVfdCBsZW47CkBAIC0xMDcsNiArMTA5LDcgQEAKIAl9CiAJZWxzZQogCQlwcmludGYoIlxuIik7CisJbG9nbXNnX2ZyZWUobXNnLCBjb21taXQpOwogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVfaW5kZXhfZnJvbV9kaWZmKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSwKZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmV2LWxpc3QuYyBiL2J1aWx0aW4vcmV2LWxpc3QuYwppbmRleCA2NzcwMWJlLi5hNWVjMzBkIDEwMDY0NAotLS0gYS9idWlsdGluL3Jldi1saXN0LmMKKysrIGIvYnVpbHRpbi9yZXYtbGlzdC5jCkBAIC0xMTEsNiArMTExLDcgQEAKIAkJY3R4LmRhdGVfbW9kZSA9IHJldnMtPmRhdGVfbW9kZTsKIAkJY3R4LmRhdGVfbW9kZV9leHBsaWNpdCA9IHJldnMtPmRhdGVfbW9kZV9leHBsaWNpdDsKIAkJY3R4LmZtdCA9IHJldnMtPmNvbW1pdF9mb3JtYXQ7CisJCWN0eC5vdXRwdXRfZW5jb2RpbmcgPSBnZXRfbG9nX291dHB1dF9lbmNvZGluZygpOwogCQlwcmV0dHlfcHJpbnRfY29tbWl0KCZjdHgsIGNvbW1pdCwgJmJ1Zik7CiAJCWlmIChyZXZzLT5ncmFwaCkgewogCQkJaWYgKGJ1Zi5sZW4pIHsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmV2LXBhcnNlLmMgYi9idWlsdGluL3Jldi1wYXJzZS5jCmluZGV4IGYyNjdhMWQuLmRlODk0YzcgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vcmV2LXBhcnNlLmMKKysrIGIvYnVpbHRpbi9yZXYtcGFyc2UuYwpAQCAtMjEyLDExICsyMTIsMTcgQEAKIAlzaG93KGJ1ZmZlcik7CiB9CiAKLXN0YXRpYyBpbnQgc2hvd19maWxlKGNvbnN0IGNoYXIgKmFyZykKK3N0YXRpYyBpbnQgc2hvd19maWxlKGNvbnN0IGNoYXIgKmFyZywgaW50IG91dHB1dF9wcmVmaXgpCiB7CiAJc2hvd19kZWZhdWx0KCk7CiAJaWYgKChmaWx0ZXIgJiAoRE9fTk9ORkxBR1N8RE9fTk9SRVYpKSA9PSAoRE9fTk9ORkxBR1N8RE9fTk9SRVYpKSB7Ci0JCXNob3coYXJnKTsKKwkJaWYgKG91dHB1dF9wcmVmaXgpIHsKKwkJCWNvbnN0IGNoYXIgKnByZWZpeCA9IHN0YXJ0dXBfaW5mby0+cHJlZml4OworCQkJc2hvdyhwcmVmaXhfZmlsZW5hbWUocHJlZml4LAorCQkJCQkgICAgIHByZWZpeCA/IHN0cmxlbihwcmVmaXgpIDogMCwKKwkJCQkJICAgICBhcmcpKTsKKwkJfSBlbHNlCisJCQlzaG93KGFyZyk7CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKQEAgLTQ3MCw2ICs0NzYsNyBAQAogaW50IGNtZF9yZXZfcGFyc2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJaW50IGksIGFzX2lzID0gMCwgdmVyaWZ5ID0gMCwgcXVpZXQgPSAwLCByZXZzX2NvdW50ID0gMCwgdHlwZSA9IDA7CisJaW50IG91dHB1dF9wcmVmaXggPSAwOwogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAJY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7CiAKQEAgLTUwMyw3ICs1MTAsNyBAQAogCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOwogCiAJCWlmIChhc19pcykgewotCQkJaWYgKHNob3dfZmlsZShhcmcpICYmIGFzX2lzIDwgMikKKwkJCWlmIChzaG93X2ZpbGUoYXJnLCBvdXRwdXRfcHJlZml4KSAmJiBhc19pcyA8IDIpCiAJCQkJdmVyaWZ5X2ZpbGVuYW1lKHByZWZpeCwgYXJnLCAwKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC01MjcsNyArNTM0LDcgQEAKIAkJCQlhc19pcyA9IDI7CiAJCQkJLyogUGFzcyBvbiB0aGUgIi0tIiBpZiB3ZSBzaG93IGFueXRoaW5nIGJ1dCBmaWxlcy4uICovCiAJCQkJaWYgKGZpbHRlciAmIChET19GTEFHUyB8IERPX1JFVlMpKQotCQkJCQlzaG93X2ZpbGUoYXJnKTsKKwkJCQkJc2hvd19maWxlKGFyZywgMCk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAoIXN0cmNtcChhcmcsICItLWRlZmF1bHQiKSkgewpAQCAtNTM1LDYgKzU0MiwxMyBAQAogCQkJCWkrKzsKIAkJCQljb250aW51ZTsKIAkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tcHJlZml4IikpIHsKKwkJCQlwcmVmaXggPSBhcmd2W2krMV07CisJCQkJc3RhcnR1cF9pbmZvLT5wcmVmaXggPSBwcmVmaXg7CisJCQkJb3V0cHV0X3ByZWZpeCA9IDE7CisJCQkJaSsrOworCQkJCWNvbnRpbnVlOworCQkJfQogCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1yZXZzLW9ubHkiKSkgewogCQkJCWZpbHRlciAmPSB+RE9fTk9SRVY7CiAJCQkJY29udGludWU7CkBAIC03NTQsNyArNzY4LDcgQEAKIAkJaWYgKHZlcmlmeSkKIAkJCWRpZV9ub19zaW5nbGVfcmV2KHF1aWV0KTsKIAkJYXNfaXMgPSAxOwotCQlpZiAoIXNob3dfZmlsZShhcmcpKQorCQlpZiAoIXNob3dfZmlsZShhcmcsIG91dHB1dF9wcmVmaXgpKQogCQkJY29udGludWU7CiAJCXZlcmlmeV9maWxlbmFtZShwcmVmaXgsIGFyZywgMSk7CiAJfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZXZlcnQuYyBiL2J1aWx0aW4vcmV2ZXJ0LmMKaW5kZXggMDQwMWZkYi4uMWQyNjQ4YiAxMDA2NDQKLS0tIGEvYnVpbHRpbi9yZXZlcnQuYworKysgYi9idWlsdGluL3JldmVydC5jCkBAIC01NCw2ICs1NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKK0xBU1RfQVJHX01VU1RfQkVfTlVMTAogc3RhdGljIHZvaWQgdmVyaWZ5X29wdF9jb21wYXRpYmxlKGNvbnN0IGNoYXIgKm1lLCBjb25zdCBjaGFyICpiYXNlX29wdCwgLi4uKQogewogCWNvbnN0IGNoYXIgKnRoaXNfb3B0OwpAQCAtNzAsNiArNzEsNyBAQAogCQlkaWUoXygiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiKSwgbWUsIHRoaXNfb3B0LCBiYXNlX29wdCk7CiB9CiAKK0xBU1RfQVJHX01VU1RfQkVfTlVMTAogc3RhdGljIHZvaWQgdmVyaWZ5X29wdF9tdXR1YWxseV9jb21wYXRpYmxlKGNvbnN0IGNoYXIgKm1lLCAuLi4pCiB7CiAJY29uc3QgY2hhciAqb3B0MSwgKm9wdDIgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9ybS5jIGIvYnVpbHRpbi9ybS5jCmluZGV4IDdiOTFkNTIuLjE4OTE2ZTAgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vcm0uYworKysgYi9idWlsdGluL3JtLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgogI2luY2x1ZGUgInRyZWUtd2Fsay5oIgogI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgogI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcm1fdXNhZ2VbXSA9IHsKQEAgLTM2LDE1ICszNywzNyBAQAogCXJldHVybiAtMTsKIH0KIAorc3RhdGljIHZvaWQgcHJpbnRfZXJyb3JfZmlsZXMoc3RydWN0IHN0cmluZ19saXN0ICpmaWxlc19saXN0LAorCQkJICAgICAgY29uc3QgY2hhciAqbWFpbl9tc2csCisJCQkgICAgICBjb25zdCBjaGFyICpoaW50c19tc2csCisJCQkgICAgICBpbnQgKmVycnMpCit7CisJaWYgKGZpbGVzX2xpc3QtPm5yKSB7CisJCWludCBpOworCQlzdHJ1Y3Qgc3RyYnVmIGVycl9tc2cgPSBTVFJCVUZfSU5JVDsKKworCQlzdHJidWZfYWRkc3RyKCZlcnJfbXNnLCBtYWluX21zZyk7CisJCWZvciAoaSA9IDA7IGkgPCBmaWxlc19saXN0LT5ucjsgaSsrKQorCQkJc3RyYnVmX2FkZGYoJmVycl9tc2csCisJCQkJICAgICJcbiAgICAlcyIsCisJCQkJICAgIGZpbGVzX2xpc3QtPml0ZW1zW2ldLnN0cmluZyk7CisJCWlmIChhZHZpY2Vfcm1faGludHMpCisJCQlzdHJidWZfYWRkc3RyKCZlcnJfbXNnLCBoaW50c19tc2cpOworCQkqZXJycyA9IGVycm9yKCIlcyIsIGVycl9tc2cuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmVycl9tc2cpOworCX0KK30KKwogc3RhdGljIGludCBjaGVja19zdWJtb2R1bGVzX3VzZV9naXRmaWxlcyh2b2lkKQogewogCWludCBpOwogCWludCBlcnJzID0gMDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZmlsZXMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOwogCiAJZm9yIChpID0gMDsgaSA8IGxpc3QubnI7IGkrKykgewogCQljb25zdCBjaGFyICpuYW1lID0gbGlzdC5lbnRyeVtpXS5uYW1lOwogCQlpbnQgcG9zOwotCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOwogCQlzdHJ1Y3Qgc3RhdCBzdDsKIAogCQlwb3MgPSBjYWNoZV9uYW1lX3BvcyhuYW1lLCBzdHJsZW4obmFtZSkpOwpAQCAtNjEsMTEgKzg0LDE4IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAoIXN1Ym1vZHVsZV91c2VzX2dpdGZpbGUobmFtZSkpCi0JCQllcnJzID0gZXJyb3IoXygic3VibW9kdWxlICclcycgKG9yIG9uZSBvZiBpdHMgbmVzdGVkICIKLQkJCQkgICAgICJzdWJtb2R1bGVzKSB1c2VzIGEgLmdpdCBkaXJlY3RvcnlcbiIKLQkJCQkgICAgICIodXNlICdybSAtcmYnIGlmIHlvdSByZWFsbHkgd2FudCB0byByZW1vdmUgIgotCQkJCSAgICAgIml0IGluY2x1ZGluZyBhbGwgb2YgaXRzIGhpc3RvcnkpIiksIG5hbWUpOworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZmaWxlcywgbmFtZSk7CiAJfQorCXByaW50X2Vycm9yX2ZpbGVzKCZmaWxlcywKKwkJCSAgUV8oInRoZSBmb2xsb3dpbmcgc3VibW9kdWxlIChvciBvbmUgb2YgaXRzIG5lc3RlZCAiCisJCQkgICAgICJzdWJtb2R1bGVzKVxuIHVzZXMgYSAuZ2l0IGRpcmVjdG9yeToiLAorCQkJICAgICAidGhlIGZvbGxvd2luZyBzdWJtb2R1bGVzIChvciBvbmUgb2YgaXRzIG5lc3RlZCAiCisJCQkgICAgICJzdWJtb2R1bGVzKVxuIHVzZSBhIC5naXQgZGlyZWN0b3J5OiIsCisJCQkgICAgIGZpbGVzLm5yKSwKKwkJCSAgXygiXG4odXNlICdybSAtcmYnIGlmIHlvdSByZWFsbHkgd2FudCB0byByZW1vdmUgIgorCQkJICAgICJpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyBoaXN0b3J5KSIpLAorCQkJICAmZXJycyk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmZpbGVzLCAwKTsKIAogCXJldHVybiBlcnJzOwogfQpAQCAtODEsMTIgKzExMSwxNiBAQAogCSAqLwogCWludCBpLCBub19oZWFkOwogCWludCBlcnJzID0gMDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZmlsZXNfc3RhZ2VkID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZmlsZXNfY2FjaGVkID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZmlsZXNfc3VibW9kdWxlID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZmlsZXNfbG9jYWwgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOwogCiAJbm9faGVhZCA9IGlzX251bGxfc2hhMShoZWFkKTsKIAlmb3IgKGkgPSAwOyBpIDwgbGlzdC5ucjsgaSsrKSB7CiAJCXN0cnVjdCBzdGF0IHN0OwogCQlpbnQgcG9zOwotCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOwogCQljb25zdCBjaGFyICpuYW1lID0gbGlzdC5lbnRyeVtpXS5uYW1lOwogCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCQl1bnNpZ25lZCBtb2RlOwpAQCAtMTcxLDI5ICsyMDUsNTggQEAKIAkJICovCiAJCWlmIChsb2NhbF9jaGFuZ2VzICYmIHN0YWdlZF9jaGFuZ2VzKSB7CiAJCQlpZiAoIWluZGV4X29ubHkgfHwgIShjZS0+Y2VfZmxhZ3MgJiBDRV9JTlRFTlRfVE9fQUREKSkKLQkJCQllcnJzID0gZXJyb3IoXygiJyVzJyBoYXMgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50ICIKLQkJCQkJICAgICAiZnJvbSBib3RoIHRoZSBmaWxlIGFuZCB0aGUgSEVBRFxuIgotCQkJCQkgICAgICIodXNlIC1mIHRvIGZvcmNlIHJlbW92YWwpIiksIG5hbWUpOworCQkJCXN0cmluZ19saXN0X2FwcGVuZCgmZmlsZXNfc3RhZ2VkLCBuYW1lKTsKIAkJfQogCQllbHNlIGlmICghaW5kZXhfb25seSkgewogCQkJaWYgKHN0YWdlZF9jaGFuZ2VzKQotCQkJCWVycnMgPSBlcnJvcihfKCInJXMnIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXhcbiIKLQkJCQkJICAgICAiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCAiCi0JCQkJCSAgICAgIm9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIiksIG5hbWUpOworCQkJCXN0cmluZ19saXN0X2FwcGVuZCgmZmlsZXNfY2FjaGVkLCBuYW1lKTsKIAkJCWlmIChsb2NhbF9jaGFuZ2VzKSB7CiAJCQkJaWYgKFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSAmJgotCQkJCSAgICAhc3VibW9kdWxlX3VzZXNfZ2l0ZmlsZShuYW1lKSkgewotCQkJCQllcnJzID0gZXJyb3IoXygic3VibW9kdWxlICclcycgKG9yIG9uZSBvZiBpdHMgbmVzdGVkICIKLQkJCQkJCSAgICAgInN1Ym1vZHVsZXMpIHVzZXMgYSAuZ2l0IGRpcmVjdG9yeVxuIgotCQkJCQkJICAgICAiKHVzZSAncm0gLXJmJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlICIKLQkJCQkJCSAgICAgIml0IGluY2x1ZGluZyBhbGwgb2YgaXRzIGhpc3RvcnkpIiksIG5hbWUpOwotCQkJCX0gZWxzZQotCQkJCQllcnJzID0gZXJyb3IoXygiJyVzJyBoYXMgbG9jYWwgbW9kaWZpY2F0aW9uc1xuIgotCQkJCQkJICAgICAiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCAiCi0JCQkJCQkgICAgICJvciAtZiB0byBmb3JjZSByZW1vdmFsKSIpLCBuYW1lKTsKKwkJCQkgICAgIXN1Ym1vZHVsZV91c2VzX2dpdGZpbGUobmFtZSkpCisJCQkJCXN0cmluZ19saXN0X2FwcGVuZCgmZmlsZXNfc3VibW9kdWxlLCBuYW1lKTsKKwkJCQllbHNlCisJCQkJCXN0cmluZ19saXN0X2FwcGVuZCgmZmlsZXNfbG9jYWwsIG5hbWUpOwogCQkJfQogCQl9CiAJfQorCXByaW50X2Vycm9yX2ZpbGVzKCZmaWxlc19zdGFnZWQsCisJCQkgIFFfKCJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCAiCisJCQkgICAgICJmcm9tIGJvdGggdGhlXG5maWxlIGFuZCB0aGUgSEVBRDoiLAorCQkJICAgICAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCIKKwkJCSAgICAgIiBmcm9tIGJvdGggdGhlXG5maWxlIGFuZCB0aGUgSEVBRDoiLAorCQkJICAgICBmaWxlc19zdGFnZWQubnIpLAorCQkJICBfKCJcbih1c2UgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiKSwKKwkJCSAgJmVycnMpOworCXN0cmluZ19saXN0X2NsZWFyKCZmaWxlc19zdGFnZWQsIDApOworCXByaW50X2Vycm9yX2ZpbGVzKCZmaWxlc19jYWNoZWQsCisJCQkgIFFfKCJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGNoYW5nZXMgIgorCQkJICAgICAic3RhZ2VkIGluIHRoZSBpbmRleDoiLAorCQkJICAgICAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGNoYW5nZXMgIgorCQkJICAgICAic3RhZ2VkIGluIHRoZSBpbmRleDoiLCBmaWxlc19jYWNoZWQubnIpLAorCQkJICBfKCJcbih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwiCisJCQkgICAgIiBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIpLAorCQkJICAmZXJycyk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmZpbGVzX2NhY2hlZCwgMCk7CisJcHJpbnRfZXJyb3JfZmlsZXMoJmZpbGVzX3N1Ym1vZHVsZSwKKwkJCSAgUV8oInRoZSBmb2xsb3dpbmcgc3VibW9kdWxlIChvciBvbmUgb2YgaXRzIG5lc3RlZCAiCisJCQkgICAgICJzdWJtb2R1bGUpXG51c2VzIGEgLmdpdCBkaXJlY3Rvcnk6IiwKKwkJCSAgICAgInRoZSBmb2xsb3dpbmcgc3VibW9kdWxlcyAob3Igb25lIG9mIGl0cyBuZXN0ZWQgIgorCQkJICAgICAic3VibW9kdWxlKVxudXNlIGEgLmdpdCBkaXJlY3Rvcnk6IiwKKwkJCSAgICAgZmlsZXNfc3VibW9kdWxlLm5yKSwKKwkJCSAgXygiXG4odXNlICdybSAtcmYnIGlmIHlvdSByZWFsbHkgIgorCQkJICAgICJ3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsICIKKwkJCSAgICAib2YgaXRzIGhpc3RvcnkpIiksCisJCQkgICZlcnJzKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmZmlsZXNfc3VibW9kdWxlLCAwKTsKKwlwcmludF9lcnJvcl9maWxlcygmZmlsZXNfbG9jYWwsCisJCQkgIFFfKCJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGxvY2FsIG1vZGlmaWNhdGlvbnM6IiwKKwkJCSAgICAgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBsb2NhbCBtb2RpZmljYXRpb25zOiIsCisJCQkgICAgIGZpbGVzX2xvY2FsLm5yKSwKKwkJCSAgXygiXG4odXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIgorCQkJICAgICIgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiKSwKKwkJCSAgJmVycnMpOworCXN0cmluZ19saXN0X2NsZWFyKCZmaWxlc19sb2NhbCwgMCk7CisKIAlyZXR1cm4gZXJyczsKIH0KIApAQCAtMjU4LDcgKzMyMSw3IEBACiAJc2VlbiA9IHhjYWxsb2MoaSwgMSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKLQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKIAkJaWYgKCFtYXRjaF9wYXRoc3BlYyhwYXRoc3BlYywgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLCAwLCBzZWVuKSkKIAkJCWNvbnRpbnVlOwogCQlBTExPQ19HUk9XKGxpc3QuZW50cnksIGxpc3QubnIgKyAxLCBsaXN0LmFsbG9jKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vc2hvcnRsb2cuYyBiL2J1aWx0aW4vc2hvcnRsb2cuYwppbmRleCAxZmQ2ZjhhLi4xNDM0ZjhmIDEwMDY0NAotLS0gYS9idWlsdGluL3Nob3J0bG9nLmMKKysrIGIvYnVpbHRpbi9zaG9ydGxvZy5jCkBAIC0xMzcsNiArMTM3LDcgQEAKIAkJY3R4LnN1YmplY3QgPSAiIjsKIAkJY3R4LmFmdGVyX3N1YmplY3QgPSAiIjsKIAkJY3R4LmRhdGVfbW9kZSA9IERBVEVfTk9STUFMOworCQljdHgub3V0cHV0X2VuY29kaW5nID0gZ2V0X2xvZ19vdXRwdXRfZW5jb2RpbmcoKTsKIAkJcHJldHR5X3ByaW50X2NvbW1pdCgmY3R4LCBjb21taXQsICZ1ZmJ1Zik7CiAJCWJ1ZmZlciA9IHVmYnVmLmJ1ZjsKIAl9IGVsc2UgaWYgKCpidWZmZXIpIHsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vc2hvdy1icmFuY2guYyBiL2J1aWx0aW4vc2hvdy1icmFuY2guYwppbmRleCA5MGZjNmIxLi45Nzg4ZWIxIDEwMDY0NAotLS0gYS9idWlsdGluL3Nob3ctYnJhbmNoLmMKKysrIGIvYnVpbHRpbi9zaG93LWJyYW5jaC5jCkBAIC02MzAsNyArNjMwLDcgQEAKIAlpbnQgbnVtX3JldiwgaSwgZXh0cmEgPSAwOwogCWludCBhbGxfaGVhZHMgPSAwLCBhbGxfcmVtb3RlcyA9IDA7CiAJaW50IGFsbF9tYXNrLCBhbGxfcmV2czsKLQlpbnQgbGlmbyA9IDE7CisJZW51bSByZXZfc29ydF9vcmRlciBzb3J0X29yZGVyID0gUkVWX1NPUlRfSU5fR1JBUEhfT1JERVI7CiAJY2hhciBoZWFkWzEyOF07CiAJY29uc3QgY2hhciAqaGVhZF9wOwogCWludCBoZWFkX2xlbjsKQEAgLTY2NSwxNSArNjY1LDE3IEBACiAJCQkgICAgTl8oInNob3cgcG9zc2libGUgbWVyZ2UgYmFzZXMiKSksCiAJCU9QVF9CT09MRUFOKDAsICJpbmRlcGVuZGVudCIsICZpbmRlcGVuZGVudCwKIAkJCSAgICBOXygic2hvdyByZWZzIHVucmVhY2hhYmxlIGZyb20gYW55IG90aGVyIHJlZiIpKSwKLQkJT1BUX0JPT0xFQU4oMCwgInRvcG8tb3JkZXIiLCAmbGlmbywKLQkJCSAgICBOXygic2hvdyBjb21taXRzIGluIHRvcG9sb2dpY2FsIG9yZGVyIikpLAorCQlPUFRfU0VUX0lOVCgwLCAidG9wby1vcmRlciIsICZzb3J0X29yZGVyLAorCQkJICAgIE5fKCJzaG93IGNvbW1pdHMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIiKSwKKwkJCSAgICBSRVZfU09SVF9JTl9HUkFQSF9PUkRFUiksCiAJCU9QVF9CT09MRUFOKDAsICJ0b3BpY3MiLCAmdG9waWNzLAogCQkJICAgIE5fKCJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIpKSwKIAkJT1BUX1NFVF9JTlQoMCwgInNwYXJzZSIsICZkZW5zZSwKIAkJCSAgICBOXygic2hvdyBtZXJnZXMgcmVhY2hhYmxlIGZyb20gb25seSBvbmUgdGlwIiksIDApLAotCQlPUFRfU0VUX0lOVCgwLCAiZGF0ZS1vcmRlciIsICZsaWZvLAotCQkJICAgIE5fKCJzaG93IGNvbW1pdHMgd2hlcmUgbm8gcGFyZW50IGNvbWVzIGJlZm9yZSBpdHMgIgotCQkJICAgICAgICJjaGlsZHJlbiIpLCAwKSwKKwkJT1BUX1NFVF9JTlQoMCwgImRhdGUtb3JkZXIiLCAmc29ydF9vcmRlciwKKwkJCSAgICBOXygidG9wb2xvZ2ljYWxseSBzb3J0LCBtYWludGFpbmluZyBkYXRlIG9yZGVyICIKKwkJCSAgICAgICAid2hlcmUgcG9zc2libGUiKSwKKwkJCSAgICBSRVZfU09SVF9CWV9DT01NSVRfREFURSksCiAJCXsgT1BUSU9OX0NBTExCQUNLLCAnZycsICJyZWZsb2ciLCAmcmVmbG9nX2Jhc2UsIE5fKCI8bj5bLDxiYXNlPl0iKSwKIAkJCSAgICBOXygic2hvdyA8bj4gbW9zdCByZWNlbnQgcmVmLWxvZyBlbnRyaWVzIHN0YXJ0aW5nIGF0ICIKIAkJCSAgICAgICAiYmFzZSIpLApAQCAtOTAwLDcgKzkwMiw3IEBACiAJCWV4aXQoMCk7CiAKIAkvKiBTb3J0IHRvcG9sb2dpY2FsbHkgKi8KLQlzb3J0X2luX3RvcG9sb2dpY2FsX29yZGVyKCZzZWVuLCBsaWZvKTsKKwlzb3J0X2luX3RvcG9sb2dpY2FsX29yZGVyKCZzZWVuLCBzb3J0X29yZGVyKTsKIAogCS8qIEdpdmUgbmFtZXMgdG8gY29tbWl0cyAqLwogCWlmICghc2hhMV9uYW1lICYmICFub19uYW1lKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9zaG93LXJlZi5jIGIvYnVpbHRpbi9zaG93LXJlZi5jCmluZGV4IDhkOWI3NmEuLjg3ODA2YWQgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vc2hvdy1yZWYuYworKysgYi9idWlsdGluL3Nob3ctcmVmLmMKQEAgLTMxLDYgKzMxLDkgQEAKIAljb25zdCBjaGFyICpoZXg7CiAJdW5zaWduZWQgY2hhciBwZWVsZWRbMjBdOwogCisJaWYgKHNob3dfaGVhZCAmJiAhc3RyY21wKHJlZm5hbWUsICJIRUFEIikpCisJCWdvdG8gbWF0Y2g7CisKIAlpZiAodGFnc19vbmx5IHx8IGhlYWRzX29ubHkpIHsKIAkJaW50IG1hdGNoOwogCkBAIC0xMDMsNyArMTA2LDcgQEAKICAqLwogc3RhdGljIGludCBleGNsdWRlX2V4aXN0aW5nKGNvbnN0IGNoYXIgKm1hdGNoKQogewotCXN0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXhpc3RpbmdfcmVmcyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBleGlzdGluZ19yZWZzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CiAJY2hhciBidWZbMTAyNF07CiAJaW50IG1hdGNobGVuID0gbWF0Y2ggPyBzdHJsZW4obWF0Y2gpIDogMDsKIApAQCAtMTY3LDkgKzE3MCwxMCBAQAogCU9QVF9CT09MRUFOKDAsICJ2ZXJpZnkiLCAmdmVyaWZ5LCBOXygic3RyaWN0ZXIgcmVmZXJlbmNlIGNoZWNraW5nLCAiCiAJCSAgICAicmVxdWlyZXMgZXhhY3QgcmVmIHBhdGgiKSksCiAJeyBPUFRJT05fQk9PTEVBTiwgJ2gnLCBOVUxMLCAmc2hvd19oZWFkLCBOVUxMLAotCSAgTl8oInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlIiksCisJICBOXygic2hvdyB0aGUgSEVBRCByZWZlcmVuY2UsIGV2ZW4gaWYgaXQgd291bGQgYmUgZmlsdGVyZWQgb3V0IiksCiAJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfSElEREVOIH0sCi0JT1BUX0JPT0xFQU4oMCwgImhlYWQiLCAmc2hvd19oZWFkLCBOXygic2hvdyB0aGUgSEVBRCByZWZlcmVuY2UiKSksCisJT1BUX0JPT0xFQU4oMCwgImhlYWQiLCAmc2hvd19oZWFkLAorCSAgTl8oInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlLCBldmVuIGlmIGl0IHdvdWxkIGJlIGZpbHRlcmVkIG91dCIpKSwKIAlPUFRfQk9PTEVBTignZCcsICJkZXJlZmVyZW5jZSIsICZkZXJlZl90YWdzLAogCQkgICAgTl8oImRlcmVmZXJlbmNlIHRhZ3MgaW50byBvYmplY3QgSURzIikpLAogCXsgT1BUSU9OX0NBTExCQUNLLCAncycsICJoYXNoIiwgJmFiYnJldiwgTl8oIm4iKSwKZGlmZiAtLWdpdCBhL2J1aWx0aW4vdXBkYXRlLWluZGV4LmMgYi9idWlsdGluL3VwZGF0ZS1pbmRleC5jCmluZGV4IDVjNzc2MmUuLmMzMTc5ODEgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vdXBkYXRlLWluZGV4LmMKKysrIGIvYnVpbHRpbi91cGRhdGUtaW5kZXguYwpAQCAtODMsNyArODMsNyBAQAogCXJldHVybiBlcnJvcigibHN0YXQoXCIlc1wiKTogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOwogfQogCi1zdGF0aWMgaW50IGFkZF9vbmVfcGF0aChzdHJ1Y3QgY2FjaGVfZW50cnkgKm9sZCwgY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbiwgc3RydWN0IHN0YXQgKnN0KQorc3RhdGljIGludCBhZGRfb25lX3BhdGgoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4sIHN0cnVjdCBzdGF0ICpzdCkKIHsKIAlpbnQgb3B0aW9uLCBzaXplOwogCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CkBAIC0xNDIsNyArMTQyLDcgQEAKIAogCS8qIEV4YWN0IG1hdGNoOiBmaWxlIG9yIGV4aXN0aW5nIGdpdGxpbmsgKi8KIAlpZiAocG9zID49IDApIHsKLQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW3Bvc107CiAJCWlmIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpIHsKIAogCQkJLyogRG8gbm90aGluZyB0byB0aGUgaW5kZXggaWYgdGhlcmUgaXMgbm8gSEVBRCEgKi8KQEAgLTE1OCw3ICsxNTgsNyBAQAogCS8qIEluZXhhY3QgbWF0Y2g6IGlzIHRoZXJlIHBlcmhhcHMgYSBzdWJkaXJlY3RvcnkgbWF0Y2g/ICovCiAJcG9zID0gLXBvcy0xOwogCXdoaWxlIChwb3MgPCBhY3RpdmVfbnIpIHsKLQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3MrK107CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zKytdOwogCiAJCWlmIChzdHJuY21wKGNlLT5uYW1lLCBwYXRoLCBsZW4pKQogCQkJYnJlYWs7CkBAIC0xODMsNyArMTgzLDcgQEAKIHsKIAlpbnQgcG9zLCBsZW47CiAJc3RydWN0IHN0YXQgc3Q7Ci0Jc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOwogCiAJbGVuID0gc3RybGVuKHBhdGgpOwogCWlmIChoYXNfc3ltbGlua19sZWFkaW5nX3BhdGgocGF0aCwgbGVuKSkKQEAgLTQ0OCw3ICs0NDgsNyBAQAogCQkvKiBhbHJlYWR5IG1lcmdlZCAqLwogCQlwb3MgPSB1bm1lcmdlX2NhY2hlX2VudHJ5X2F0KHBvcyk7CiAJCWlmIChwb3MgPCBhY3RpdmVfbnIpIHsKLQkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKIAkJCWlmIChjZV9zdGFnZShjZSkgJiYKIAkJCSAgICBjZV9uYW1lbGVuKGNlKSA9PSBuYW1lbGVuICYmCiAJCQkgICAgIW1lbWNtcChjZS0+bmFtZSwgcGF0aCwgbmFtZWxlbikpCkBAIC00NjIsNyArNDYyLDcgQEAKIAkJICovCiAJCXBvcyA9IC1wb3MtMTsKIAkJaWYgKHBvcyA8IGFjdGl2ZV9ucikgewotCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOwogCQkJaWYgKGNlX25hbWVsZW4oY2UpID09IG5hbWVsZW4gJiYKIAkJCSAgICAhbWVtY21wKGNlLT5uYW1lLCBwYXRoLCBuYW1lbGVuKSkgewogCQkJCWZwcmludGYoc3RkZXJyLApAQCAtNTU4LDcgKzU1OCw3IEBACiAJCWhhc19oZWFkID0gMDsKICByZWRvOgogCWZvciAocG9zID0gMDsgcG9zIDwgYWN0aXZlX25yOyBwb3MrKykgewotCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKIAkJc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQgPSBOVUxMOwogCQlpbnQgc2F2ZV9ucjsKIApkaWZmIC0tZ2l0IGEvYnVuZGxlLmMgYi9idW5kbGUuYwppbmRleCA0YjBlNWNkLi4zZDY0MzExIDEwMDY0NAotLS0gYS9idW5kbGUuYworKysgYi9idW5kbGUuYwpAQCAtMjgxLDcgKzI4MSw3IEBACiAJCQlpZiAoIWdldF9zaGExX2hleChidWYuYnVmICsgMSwgc2hhMSkpIHsKIAkJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSBwYXJzZV9vYmplY3Rfb3JfZGllKHNoYTEsIGJ1Zi5idWYpOwogCQkJCW9iamVjdC0+ZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKLQkJCQlhZGRfcGVuZGluZ19vYmplY3QoJnJldnMsIG9iamVjdCwgeHN0cmR1cChidWYuYnVmKSk7CisJCQkJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXZzLCBvYmplY3QsIGJ1Zi5idWYpOwogCQkJfQogCQl9IGVsc2UgaWYgKCFnZXRfc2hhMV9oZXgoYnVmLmJ1Ziwgc2hhMSkpIHsKIAkJCXN0cnVjdCBvYmplY3QgKm9iamVjdCA9IHBhcnNlX29iamVjdF9vcl9kaWUoc2hhMSwgYnVmLmJ1Zik7CmRpZmYgLS1naXQgYS9jYWNoZS10cmVlLmMgYi9jYWNoZS10cmVlLmMKaW5kZXggMzdlNGQwMC4uMGJiZWM0MyAxMDA2NDQKLS0tIGEvY2FjaGUtdHJlZS5jCisrKyBiL2NhY2hlLXRyZWUuYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAJCWNhY2hlX3RyZWVfaW52YWxpZGF0ZV9wYXRoKGRvd24tPmNhY2hlX3RyZWUsIHNsYXNoICsgMSk7CiB9CiAKLXN0YXRpYyBpbnQgdmVyaWZ5X2NhY2hlKHN0cnVjdCBjYWNoZV9lbnRyeSAqKmNhY2hlLAorc3RhdGljIGludCB2ZXJpZnlfY2FjaGUoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICogY29uc3QgKmNhY2hlLAogCQkJaW50IGVudHJpZXMsIGludCBmbGFncykKIHsKIAlpbnQgaSwgZnVubnk7CkBAIC0xNTgsNyArMTU4LDcgQEAKIAkvKiBWZXJpZnkgdGhhdCB0aGUgdHJlZSBpcyBtZXJnZWQgKi8KIAlmdW5ueSA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGVudHJpZXM7IGkrKykgewotCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gY2FjaGVbaV07CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBjYWNoZVtpXTsKIAkJaWYgKGNlX3N0YWdlKGNlKSkgewogCQkJaWYgKHNpbGVudCkKIAkJCQlyZXR1cm4gLTE7CkBAIC0yMzQsNyArMjM0LDcgQEAKIH0KIAogc3RhdGljIGludCB1cGRhdGVfb25lKHN0cnVjdCBjYWNoZV90cmVlICppdCwKLQkJICAgICAgc3RydWN0IGNhY2hlX2VudHJ5ICoqY2FjaGUsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICpjYWNoZSwKIAkJICAgICAgaW50IGVudHJpZXMsCiAJCSAgICAgIGNvbnN0IGNoYXIgKmJhc2UsCiAJCSAgICAgIGludCBiYXNlbGVuLApAQCAtMjY1LDcgKzI2NSw3IEBACiAJICovCiAJaSA9IDA7CiAJd2hpbGUgKGkgPCBlbnRyaWVzKSB7Ci0JCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBjYWNoZVtpXTsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGNhY2hlW2ldOwogCQlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKnN1YjsKIAkJY29uc3QgY2hhciAqcGF0aCwgKnNsYXNoOwogCQlpbnQgcGF0aGxlbiwgc3VibGVuLCBzdWJjbnQsIHN1YnNraXA7CkBAIC0zMTIsNyArMzEyLDcgQEAKIAogCWkgPSAwOwogCXdoaWxlIChpIDwgZW50cmllcykgewotCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gY2FjaGVbaV07CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBjYWNoZVtpXTsKIAkJc3RydWN0IGNhY2hlX3RyZWVfc3ViICpzdWI7CiAJCWNvbnN0IGNoYXIgKnBhdGgsICpzbGFzaDsKIAkJaW50IHBhdGhsZW4sIGVudGxlbjsKQEAgLTM5Nyw3ICszOTcsNyBAQAogfQogCiBpbnQgY2FjaGVfdHJlZV91cGRhdGUoc3RydWN0IGNhY2hlX3RyZWUgKml0LAotCQkgICAgICBzdHJ1Y3QgY2FjaGVfZW50cnkgKipjYWNoZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICogY29uc3QgKmNhY2hlLAogCQkgICAgICBpbnQgZW50cmllcywKIAkJICAgICAgaW50IGZsYWdzKQogewpAQCAtNTk5LDggKzU5OSw4IEBACiAJd2FzX3ZhbGlkID0gY2FjaGVfdHJlZV9mdWxseV92YWxpZChhY3RpdmVfY2FjaGVfdHJlZSk7CiAJaWYgKCF3YXNfdmFsaWQpIHsKIAkJaWYgKGNhY2hlX3RyZWVfdXBkYXRlKGFjdGl2ZV9jYWNoZV90cmVlLAotCQkJCSAgICAgIGFjdGl2ZV9jYWNoZSwgYWN0aXZlX25yLAotCQkJCSAgICAgIGZsYWdzKSA8IDApCisJCQkJICAgICAgKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICopYWN0aXZlX2NhY2hlLAorCQkJCSAgICAgIGFjdGl2ZV9uciwgZmxhZ3MpIDwgMCkKIAkJCXJldHVybiBXUklURV9UUkVFX1VOTUVSR0VEX0lOREVYOwogCQlpZiAoMCA8PSBuZXdmZCkgewogCQkJaWYgKCF3cml0ZV9jYWNoZShuZXdmZCwgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIpICYmCkBAIC03MDEsNSArNzAxLDYgQEAKIAlpZiAoIXRoZV9pbmRleC5jYWNoZV90cmVlKQogCQl0aGVfaW5kZXguY2FjaGVfdHJlZSA9IGNhY2hlX3RyZWUoKTsKIAlyZXR1cm4gY2FjaGVfdHJlZV91cGRhdGUodGhlX2luZGV4LmNhY2hlX3RyZWUsCi0JCQkJIHRoZV9pbmRleC5jYWNoZSwgdGhlX2luZGV4LmNhY2hlX25yLCBmbGFncyk7CisJCQkJIChjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiBjb25zdCAqKXRoZV9pbmRleC5jYWNoZSwKKwkJCQkgdGhlX2luZGV4LmNhY2hlX25yLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9jYWNoZS10cmVlLmggYi9jYWNoZS10cmVlLmgKaW5kZXggNTVkMGY1OS4uZjE5MjNhZCAxMDA2NDQKLS0tIGEvY2FjaGUtdHJlZS5oCisrKyBiL2NhY2hlLXRyZWUuaApAQCAtMzAsNyArMzAsNyBAQAogc3RydWN0IGNhY2hlX3RyZWUgKmNhY2hlX3RyZWVfcmVhZChjb25zdCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAKIGludCBjYWNoZV90cmVlX2Z1bGx5X3ZhbGlkKHN0cnVjdCBjYWNoZV90cmVlICopOwotaW50IGNhY2hlX3RyZWVfdXBkYXRlKHN0cnVjdCBjYWNoZV90cmVlICosIHN0cnVjdCBjYWNoZV9lbnRyeSAqKiwgaW50LCBpbnQpOworaW50IGNhY2hlX3RyZWVfdXBkYXRlKHN0cnVjdCBjYWNoZV90cmVlICosIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICosIGludCwgaW50KTsKIAogaW50IHVwZGF0ZV9tYWluX2NhY2hlX3RyZWUoaW50KTsKIApkaWZmIC0tZ2l0IGEvY2FjaGUuaCBiL2NhY2hlLmgKaW5kZXggOTRjYTFhYy4uM2E2OTYzOCAxMDA2NDQKLS0tIGEvY2FjaGUuaAorKysgYi9jYWNoZS5oCkBAIC0xMTksMTUgKzExOSwxOSBAQAogCXVuc2lnbmVkIGludCBuc2VjOwogfTsKIAorc3RydWN0IHN0YXRfZGF0YSB7CisJc3RydWN0IGNhY2hlX3RpbWUgc2RfY3RpbWU7CisJc3RydWN0IGNhY2hlX3RpbWUgc2RfbXRpbWU7CisJdW5zaWduZWQgaW50IHNkX2RldjsKKwl1bnNpZ25lZCBpbnQgc2RfaW5vOworCXVuc2lnbmVkIGludCBzZF91aWQ7CisJdW5zaWduZWQgaW50IHNkX2dpZDsKKwl1bnNpZ25lZCBpbnQgc2Rfc2l6ZTsKK307CisKIHN0cnVjdCBjYWNoZV9lbnRyeSB7Ci0Jc3RydWN0IGNhY2hlX3RpbWUgY2VfY3RpbWU7Ci0Jc3RydWN0IGNhY2hlX3RpbWUgY2VfbXRpbWU7Ci0JdW5zaWduZWQgaW50IGNlX2RldjsKLQl1bnNpZ25lZCBpbnQgY2VfaW5vOworCXN0cnVjdCBzdGF0X2RhdGEgY2Vfc3RhdF9kYXRhOwogCXVuc2lnbmVkIGludCBjZV9tb2RlOwotCXVuc2lnbmVkIGludCBjZV91aWQ7Ci0JdW5zaWduZWQgaW50IGNlX2dpZDsKLQl1bnNpZ25lZCBpbnQgY2Vfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgY2VfZmxhZ3M7CiAJdW5zaWduZWQgaW50IGNlX25hbWVsZW47CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKQEAgLTE5MCw3ICsxOTQsOCBAQAogICogYW5vdGhlci4gQnV0IHdlIG5ldmVyIGNoYW5nZSB0aGUgbmFtZSwgb3IgdGhlIGhhc2ggc3RhdGUhCiAgKi8KICNkZWZpbmUgQ0VfU1RBVEVfTUFTSyAoQ0VfSEFTSEVEIHwgQ0VfVU5IQVNIRUQpCi1zdGF0aWMgaW5saW5lIHZvaWQgY29weV9jYWNoZV9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmRzdCwgc3RydWN0IGNhY2hlX2VudHJ5ICpzcmMpCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV9jYWNoZV9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmRzdCwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpzcmMpCiB7CiAJdW5zaWduZWQgaW50IHN0YXRlID0gZHN0LT5jZV9mbGFncyAmIENFX1NUQVRFX01BU0s7CiAKQEAgLTIyMiw3ICsyMjcsOCBAQAogCQlyZXR1cm4gU19JRkdJVExJTks7CiAJcmV0dXJuIFNfSUZSRUcgfCBjZV9wZXJtaXNzaW9ucyhtb2RlKTsKIH0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNlX21vZGVfZnJvbV9zdGF0KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHVuc2lnbmVkIGludCBtb2RlKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2VfbW9kZV9mcm9tX3N0YXQoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgbW9kZSkKIHsKIAlleHRlcm4gaW50IHRydXN0X2V4ZWN1dGFibGVfYml0LCBoYXNfc3ltbGlua3M7CiAJaWYgKCFoYXNfc3ltbGlua3MgJiYgU19JU1JFRyhtb2RlKSAmJgpAQCAtNDE5LDYgKzQyNSw4IEBACiBleHRlcm4gaW50IHNldF9naXRfZGlyX2luaXQoY29uc3QgY2hhciAqZ2l0X2RpciwgY29uc3QgY2hhciAqcmVhbF9naXRfZGlyLCBpbnQpOwogZXh0ZXJuIGludCBpbml0X2RiKGNvbnN0IGNoYXIgKnRlbXBsYXRlX2RpciwgdW5zaWduZWQgaW50IGZsYWdzKTsKIAorZXh0ZXJuIHZvaWQgc2FuaXRpemVfc3RkZmRzKHZvaWQpOworCiAjZGVmaW5lIGFsbG9jX25yKHgpICgoKHgpKzE2KSozLzIpCiAKIC8qCkBAIC00NzAsNyArNDc4LDcgQEAKIGV4dGVybiBpbnQgYWRkX3RvX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQgZmxhZ3MpOwogZXh0ZXJuIGludCBhZGRfZmlsZV90b19pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzKTsKIGV4dGVybiBzdHJ1Y3QgY2FjaGVfZW50cnkgKm1ha2VfY2FjaGVfZW50cnkodW5zaWduZWQgaW50IG1vZGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBzdGFnZSwgaW50IHJlZnJlc2gpOwotZXh0ZXJuIGludCBjZV9zYW1lX25hbWUoc3RydWN0IGNhY2hlX2VudHJ5ICphLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmIpOworZXh0ZXJuIGludCBjZV9zYW1lX25hbWUoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICphLCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmIpOwogZXh0ZXJuIGludCBpbmRleF9uYW1lX2lzX290aGVyKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICosIGludCk7CiBleHRlcm4gdm9pZCAqcmVhZF9ibG9iX2RhdGFfZnJvbV9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBsb25nICopOwogCkBAIC00ODAsOCArNDg4LDggQEAKICNkZWZpbmUgQ0VfTUFUQ0hfUkFDWV9JU19ESVJUWQkJMDIKIC8qIGRvIHN0YXQgY29tcGFyaXNvbiBldmVuIGlmIENFX1NLSVBfV09SS1RSRUUgaXMgdHJ1ZSAqLwogI2RlZmluZSBDRV9NQVRDSF9JR05PUkVfU0tJUF9XT1JLVFJFRQkwNAotZXh0ZXJuIGludCBpZV9tYXRjaF9zdGF0KGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiwgc3RydWN0IHN0YXQgKiwgdW5zaWduZWQgaW50KTsKLWV4dGVybiBpbnQgaWVfbW9kaWZpZWQoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICosIHN0cnVjdCBjYWNoZV9lbnRyeSAqLCBzdHJ1Y3Qgc3RhdCAqLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIGludCBpZV9tYXRjaF9zdGF0KGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiwgc3RydWN0IHN0YXQgKiwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBpbnQgaWVfbW9kaWZpZWQoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqLCBzdHJ1Y3Qgc3RhdCAqLCB1bnNpZ25lZCBpbnQpOwogCiAjZGVmaW5lIFBBVEhTUEVDX09ORVNUQVIgMQkvKiB0aGUgcGF0aHNwZWMgcGF0dGVybiBzYXN0aXNmaWVzIEdGTk1fT05FU1RBUiAqLwogCkBAIC01MDksNiArNTE3LDIxIEBACiAjZGVmaW5lIEhBU0hfRk9STUFUX0NIRUNLIDIKIGV4dGVybiBpbnQgaW5kZXhfZmQodW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqc3QsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwgY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgZmxhZ3MpOwogZXh0ZXJuIGludCBpbmRleF9wYXRoKHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICpzdCwgdW5zaWduZWQgZmxhZ3MpOworCisvKgorICogUmVjb3JkIHRvIHNkIHRoZSBkYXRhIGZyb20gc3QgdGhhdCB3ZSB1c2UgdG8gY2hlY2sgd2hldGhlciBhIGZpbGUKKyAqIG1pZ2h0IGhhdmUgY2hhbmdlZC4KKyAqLworZXh0ZXJuIHZvaWQgZmlsbF9zdGF0X2RhdGEoc3RydWN0IHN0YXRfZGF0YSAqc2QsIHN0cnVjdCBzdGF0ICpzdCk7CisKKy8qCisgKiBSZXR1cm4gMCBpZiBzdCBpcyBjb25zaXN0ZW50IHdpdGggYSBmaWxlIG5vdCBoYXZpbmcgYmVlbiBjaGFuZ2VkCisgKiBzaW5jZSBzZCB3YXMgZmlsbGVkLiAgSWYgdGhlcmUgYXJlIGRpZmZlcmVuY2VzLCByZXR1cm4gYQorICogY29tYmluYXRpb24gb2YgTVRJTUVfQ0hBTkdFRCwgQ1RJTUVfQ0hBTkdFRCwgT1dORVJfQ0hBTkdFRCwKKyAqIElOT0RFX0NIQU5HRUQsIGFuZCBEQVRBX0NIQU5HRUQuCisgKi8KK2V4dGVybiBpbnQgbWF0Y2hfc3RhdF9kYXRhKGNvbnN0IHN0cnVjdCBzdGF0X2RhdGEgKnNkLCBzdHJ1Y3Qgc3RhdCAqc3QpOworCiBleHRlcm4gdm9pZCBmaWxsX3N0YXRfY2FjaGVfaW5mbyhzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QpOwogCiAjZGVmaW5lIFJFRlJFU0hfUkVBTExZCQkweDAwMDEJLyogaWdub3JlX3ZhbGlkICovCkBAIC01NTQsNiArNTc3LDcgQEAKIGV4dGVybiBpbnQgcHJlZmVyX3N5bWxpbmtfcmVmczsKIGV4dGVybiBpbnQgbG9nX2FsbF9yZWZfdXBkYXRlczsKIGV4dGVybiBpbnQgd2Fybl9hbWJpZ3VvdXNfcmVmczsKK2V4dGVybiBpbnQgd2Fybl9vbl9vYmplY3RfcmVmbmFtZV9hbWJpZ3VpdHk7CiBleHRlcm4gaW50IHNoYXJlZF9yZXBvc2l0b3J5OwogZXh0ZXJuIGNvbnN0IGNoYXIgKmFwcGx5X2RlZmF1bHRfd2hpdGVzcGFjZTsKIGV4dGVybiBjb25zdCBjaGFyICphcHBseV9kZWZhdWx0X2lnbm9yZXdoaXRlc3BhY2U7CkBAIC03MzcsNyArNzYxLDcgQEAKIGNvbnN0IGNoYXIgKnJlYWxfcGF0aChjb25zdCBjaGFyICpwYXRoKTsKIGNvbnN0IGNoYXIgKnJlYWxfcGF0aF9pZl92YWxpZChjb25zdCBjaGFyICpwYXRoKTsKIGNvbnN0IGNoYXIgKmFic29sdXRlX3BhdGgoY29uc3QgY2hhciAqcGF0aCk7Ci1jb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKGNvbnN0IGNoYXIgKmFicywgY29uc3QgY2hhciAqYmFzZSk7Citjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKGNvbnN0IGNoYXIgKmluLCBjb25zdCBjaGFyICpwcmVmaXgsIHN0cnVjdCBzdHJidWYgKnNiKTsKIGludCBub3JtYWxpemVfcGF0aF9jb3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjKTsKIGludCBsb25nZXN0X2FuY2VzdG9yX2xlbmd0aChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnByZWZpeGVzKTsKIGNoYXIgKnN0cmlwX3BhdGhfc3VmZml4KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnN1ZmZpeCk7CkBAIC03NzIsOSArNzk2LDYgQEAKIC8qIGdsb2JhbCBmbGFnIHRvIGVuYWJsZSBleHRyYSBjaGVja3Mgd2hlbiBhY2Nlc3NpbmcgcGFja2VkIG9iamVjdHMgKi8KIGV4dGVybiBpbnQgZG9fY2hlY2tfcGFja2VkX29iamVjdF9jcmM7CiAKLS8qIGZvciBkZXZlbG9wbWVudDogbG9nIG9mZnNldCBvZiBwYWNrIGFjY2VzcyAqLwotZXh0ZXJuIGNvbnN0IGNoYXIgKmxvZ19wYWNrX2FjY2VzczsKLQogZXh0ZXJuIGludCBjaGVja19zaGExX3NpZ25hdHVyZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3QgY2hhciAqdHlwZSk7CiAKIGV4dGVybiBpbnQgbW92ZV90ZW1wX3RvX2ZpbGUoY29uc3QgY2hhciAqdG1wZmlsZSwgY29uc3QgY2hhciAqZmlsZW5hbWUpOwpAQCAtOTEwLDYgKzkzMSw3IEBACiAJCQlzdHJ1Y3Qgc3RyYnVmICp0aW1lYnVmKTsKIGludCBwYXJzZV9kYXRlKGNvbnN0IGNoYXIgKmRhdGUsIGNoYXIgKmJ1ZiwgaW50IGJ1ZnNpemUpOwogaW50IHBhcnNlX2RhdGVfYmFzaWMoY29uc3QgY2hhciAqZGF0ZSwgdW5zaWduZWQgbG9uZyAqdGltZXN0YW1wLCBpbnQgKm9mZnNldCk7CitpbnQgcGFyc2VfZXhwaXJ5X2RhdGUoY29uc3QgY2hhciAqZGF0ZSwgdW5zaWduZWQgbG9uZyAqdGltZXN0YW1wKTsKIHZvaWQgZGF0ZXN0YW1wKGNoYXIgKmJ1ZiwgaW50IGJ1ZnNpemUpOwogI2RlZmluZSBhcHByb3hpZGF0ZShzKSBhcHByb3hpZGF0ZV9jYXJlZnVsKChzKSwgTlVMTCkKIHVuc2lnbmVkIGxvbmcgYXBwcm94aWRhdGVfY2FyZWZ1bChjb25zdCBjaGFyICosIGludCAqKTsKQEAgLTEwMjQsOSArMTA0NiwyMSBAQAogCXVuc2lnbmVkIGludAogCQlmb3JjZToxLAogCQlmb3JjZWRfdXBkYXRlOjEsCi0JCW1lcmdlOjEsCiAJCWRlbGV0aW9uOjEsCiAJCW1hdGNoZWQ6MTsKKworCS8qCisJICogT3JkZXIgaXMgaW1wb3J0YW50IGhlcmUsIGFzIHdlIHdyaXRlIHRvIEZFVENIX0hFQUQKKwkgKiBpbiBudW1lcmljIG9yZGVyLiBBbmQgdGhlIGRlZmF1bHQgTk9UX0ZPUl9NRVJHRQorCSAqIHNob3VsZCBiZSAwLCBzbyB0aGF0IHhjYWxsb2MnZCBzdHJ1Y3R1cmVzIGdldCBpdAorCSAqIGJ5IGRlZmF1bHQuCisJICovCisJZW51bSB7CisJCUZFVENIX0hFQURfTUVSR0UgPSAtMSwKKwkJRkVUQ0hfSEVBRF9OT1RfRk9SX01FUkdFID0gMCwKKwkJRkVUQ0hfSEVBRF9JR05PUkUgPSAxCisJfSBmZXRjaF9oZWFkX3N0YXR1czsKKwogCWVudW0gewogCQlSRUZfU1RBVFVTX05PTkUgPSAwLAogCQlSRUZfU1RBVFVTX09LLApAQCAtMTA5OCw3ICsxMTMyLDkgQEAKIAogc3RydWN0IG9iamVjdF9pbmZvIHsKIAkvKiBSZXF1ZXN0ICovCisJZW51bSBvYmplY3RfdHlwZSAqdHlwZXA7CiAJdW5zaWduZWQgbG9uZyAqc2l6ZXA7CisJdW5zaWduZWQgbG9uZyAqZGlza19zaXplcDsKIAogCS8qIFJlc3BvbnNlICovCiAJZW51bSB7CkBAIC0xMTQyLDExICsxMTc4LDE1IEBACiB0eXBlZGVmIGludCAoKmNvbmZpZ19mbl90KShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKIGV4dGVybiBpbnQgZ2l0X2RlZmF1bHRfY29uZmlnKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOwogZXh0ZXJuIGludCBnaXRfY29uZmlnX2Zyb21fZmlsZShjb25maWdfZm5fdCBmbiwgY29uc3QgY2hhciAqLCB2b2lkICopOworZXh0ZXJuIGludCBnaXRfY29uZmlnX2Zyb21fYnVmKGNvbmZpZ19mbl90IGZuLCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgdm9pZCAqZGF0YSk7CiBleHRlcm4gdm9pZCBnaXRfY29uZmlnX3B1c2hfcGFyYW1ldGVyKGNvbnN0IGNoYXIgKnRleHQpOwogZXh0ZXJuIGludCBnaXRfY29uZmlnX2Zyb21fcGFyYW1ldGVycyhjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSk7CiBleHRlcm4gaW50IGdpdF9jb25maWcoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKik7CiBleHRlcm4gaW50IGdpdF9jb25maWdfd2l0aF9vcHRpb25zKGNvbmZpZ19mbl90IGZuLCB2b2lkICosCi0JCQkJICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCByZXNwZWN0X2luY2x1ZGVzKTsKKwkJCQkgICBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkgICBjb25zdCBjaGFyICpibG9iX3JlZiwKKwkJCQkgICBpbnQgcmVzcGVjdF9pbmNsdWRlcyk7CiBleHRlcm4gaW50IGdpdF9jb25maWdfZWFybHkoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKiwgY29uc3QgY2hhciAqcmVwb19jb25maWcpOwogZXh0ZXJuIGludCBnaXRfcGFyc2VfdWxvbmcoY29uc3QgY2hhciAqLCB1bnNpZ25lZCBsb25nICopOwogZXh0ZXJuIGludCBnaXRfY29uZmlnX2ludChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CkBAIC0xMzI2LDQgKzEzNjYsMzEgQEAKIAogaW50IHNhbmVfZXhlY3ZwKGNvbnN0IGNoYXIgKmZpbGUsIGNoYXIgKmNvbnN0IGFyZ3ZbXSk7CiAKKy8qCisgKiBBIHN0cnVjdCB0byBlbmNhcHN1bGF0ZSB0aGUgY29uY2VwdCBvZiB3aGV0aGVyIGEgZmlsZSBoYXMgY2hhbmdlZAorICogc2luY2Ugd2UgbGFzdCBjaGVja2VkIGl0LiBUaGlzIHVzZXMgY3JpdGVyaWEgc2ltaWxhciB0byB0aG9zZSB1c2VkCisgKiBmb3IgdGhlIGluZGV4LgorICovCitzdHJ1Y3Qgc3RhdF92YWxpZGl0eSB7CisJc3RydWN0IHN0YXRfZGF0YSAqc2Q7Cit9OworCit2b2lkIHN0YXRfdmFsaWRpdHlfY2xlYXIoc3RydWN0IHN0YXRfdmFsaWRpdHkgKnN2KTsKKworLyoKKyAqIFJldHVybnMgMSBpZiB0aGUgcGF0aCBpcyBhIHJlZ3VsYXIgZmlsZSAob3IgYSBzeW1saW5rIHRvIGEgcmVndWxhcgorICogZmlsZSkgYW5kIG1hdGNoZXMgdGhlIHNhdmVkIHN0YXRfdmFsaWRpdHksIDAgb3RoZXJ3aXNlLiAgQSBtaXNzaW5nCisgKiBvciBpbmFjY2Vzc2libGUgZmlsZSBpcyBjb25zaWRlcmVkIGEgbWF0Y2ggaWYgdGhlIHN0cnVjdCB3YXMganVzdAorICogaW5pdGlhbGl6ZWQsIG9yIGlmIHRoZSBwcmV2aW91cyB1cGRhdGUgZm91bmQgYW4gaW5hY2Nlc3NpYmxlIGZpbGUuCisgKi8KK2ludCBzdGF0X3ZhbGlkaXR5X2NoZWNrKHN0cnVjdCBzdGF0X3ZhbGlkaXR5ICpzdiwgY29uc3QgY2hhciAqcGF0aCk7CisKKy8qCisgKiBVcGRhdGUgdGhlIHN0YXRfdmFsaWRpdHkgZnJvbSBhIGZpbGUgb3BlbmVkIGF0IGRlc2NyaXB0b3IgZmQuIElmCisgKiB0aGUgZmlsZSBpcyBtaXNzaW5nLCBpbmFjY2Vzc2libGUsIG9yIG5vdCBhIHJlZ3VsYXIgZmlsZSwgdGhlbgorICogZnV0dXJlIGNhbGxzIHRvIHN0YXRfdmFsaWRpdHlfY2hlY2sgd2lsbCBtYXRjaCBpZmYgb25lIG9mIHRob3NlCisgKiBjb25kaXRpb25zIGNvbnRpbnVlcyB0byBiZSB0cnVlLgorICovCit2b2lkIHN0YXRfdmFsaWRpdHlfdXBkYXRlKHN0cnVjdCBzdGF0X3ZhbGlkaXR5ICpzdiwgaW50IGZkKTsKKwogI2VuZGlmIC8qIENBQ0hFX0ggKi8KZGlmZiAtLWdpdCBhL2NvbG9yLmMgYi9jb2xvci5jCmluZGV4IGU4ZTI2ODEuLmY2NzI4ODUgMTAwNjQ0Ci0tLSBhL2NvbG9yLmMKKysrIGIvY29sb3IuYwpAQCAtMSw3ICsxLDcgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgImNvbG9yLmgiCiAKLXN0YXRpYyBpbnQgZ2l0X3VzZV9jb2xvcl9kZWZhdWx0ID0gMDsKK3N0YXRpYyBpbnQgZ2l0X3VzZV9jb2xvcl9kZWZhdWx0ID0gR0lUX0NPTE9SX0FVVE87CiBpbnQgY29sb3Jfc3Rkb3V0X2lzX3R0eSA9IC0xOwogCiAvKgpkaWZmIC0tZ2l0IGEvY29tYmluZS1kaWZmLmMgYi9jb21iaW5lLWRpZmYuYwppbmRleCA3N2Q3ODcyLi42ZGMwNjA5IDEwMDY0NAotLS0gYS9jb21iaW5lLWRpZmYuYworKysgYi9jb21iaW5lLWRpZmYuYwpAQCAtNTE4LDggKzUxOCwxMSBAQAogCQl1bnNpZ25lZCBsb25nIGs7CiAKIAkJLyogUGFpbnQgYSBmZXcgbGluZXMgYmVmb3JlIHRoZSBmaXJzdCBpbnRlcmVzdGluZyBsaW5lLiAqLwotCQl3aGlsZSAoaiA8IGkpCi0JCQlzbGluZVtqKytdLmZsYWcgfD0gbWFyayB8IG5vX3ByZV9kZWxldGU7CisJCXdoaWxlIChqIDwgaSkgeworCQkJaWYgKCEoc2xpbmVbal0uZmxhZyAmIG1hcmspKQorCQkJCXNsaW5lW2pdLmZsYWcgfD0gbm9fcHJlX2RlbGV0ZTsKKwkJCXNsaW5lW2orK10uZmxhZyB8PSBtYXJrOworCQl9CiAKIAlhZ2FpbjoKIAkJLyogd2Uga25vdyB1cCB0byBpIGlzIHRvIGJlIGluY2x1ZGVkLiAgd2hlcmUgZG9lcyB0aGUKQEAgLTEzMDIsNiArMTMwNSw3IEBACiAJaW50IGksIG51bV9wYXRocywgbmVlZHNlcCwgc2hvd19sb2dfZmlyc3QsIG51bV9wYXJlbnQgPSBwYXJlbnRzLT5ucjsKIAogCWRpZmZvcHRzID0gKm9wdDsKKwlkaWZmX3RyZWVfc2V0dXBfcGF0aHMoZGlmZm9wdHMucGF0aHNwZWMucmF3LCAmZGlmZm9wdHMpOwogCWRpZmZvcHRzLm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9OT19PVVRQVVQ7CiAJRElGRl9PUFRfU0VUKCZkaWZmb3B0cywgUkVDVVJTSVZFKTsKIAlESUZGX09QVF9DTFIoJmRpZmZvcHRzLCBBTExPV19FWFRFUk5BTCk7CkBAIC0xMzcyLDYgKzEzNzYsOCBAQAogCQlwYXRocyA9IHBhdGhzLT5uZXh0OwogCQlmcmVlKHRtcCk7CiAJfQorCisJZGlmZl90cmVlX3JlbGVhc2VfcGF0aHMoJmRpZmZvcHRzKTsKIH0KIAogdm9pZCBkaWZmX3RyZWVfY29tYmluZWRfbWVyZ2UoY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LCBpbnQgZGVuc2UsCmRpZmYgLS1naXQgYS9jb21tYW5kLWxpc3QudHh0IGIvY29tbWFuZC1saXN0LnR4dAppbmRleCBiZjgzMzAzLi4wOGIwNGUyIDEwMDY0NAotLS0gYS9jb21tYW5kLWxpc3QudHh0CisrKyBiL2NvbW1hbmQtbGlzdC50eHQKQEAgLTEzLDYgKzEzLDcgQEAKIGdpdC1jYXQtZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKIGdpdC1jaGVjay1hdHRyICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycwogZ2l0LWNoZWNrLWlnbm9yZSAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtY2hlY2stbWFpbG1hcCAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKIGdpdC1jaGVja291dCAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluIGNvbW1vbgogZ2l0LWNoZWNrb3V0LWluZGV4ICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCiBnaXQtY2hlY2stcmVmLWZvcm1hdCAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKZGlmZiAtLWdpdCBhL2NvbW1pdC1zbGFiLmggYi9jb21taXQtc2xhYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNDgxNjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21taXQtc2xhYi5oCkBAIC0wLDAgKzEsOTggQEAKKyNpZm5kZWYgQ09NTUlUX1NMQUJfSAorI2RlZmluZSBDT01NSVRfU0xBQl9ICisKKy8qCisgKiBkZWZpbmVfY29tbWl0X3NsYWIoc2xhYm5hbWUsIGVsZW10eXBlKSBjcmVhdGVzIGJvaWxlcnBsYXRlIGNvZGUgdG8gZGVmaW5lCisgKiBhIG5ldyBzdHJ1Y3QgKHN0cnVjdCBzbGFibmFtZSkgdGhhdCBpcyB1c2VkIHRvIGFzc29jaWF0ZSBhIHBpZWNlIG9mIGRhdGEKKyAqIG9mIGVsZW10eXBlIHRvIGNvbW1pdHMsIGFuZCBhIGZldyBmdW5jdGlvbnMgdG8gdXNlIHRoYXQgc3RydWN0LgorICoKKyAqIEFmdGVyIGluY2x1ZGluZyB0aGlzIGhlYWRlciBmaWxlLCB1c2luZzoKKyAqCisgKiBkZWZpbmVfY29tbWl0X3NsYWIoaW5kZWdlZSwgaW50KTsKKyAqCisgKiB3aWxsIGxldCB5b3UgY2FsbCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKyAqCisgKiAtIGludCAqaW5kZWdyZWVfYXQoc3RydWN0IGluZGVncmVlICosIHN0cnVjdCBjb21taXQgKik7CisgKgorICogICBUaGlzIGZ1bmN0aW9uIGxvY2F0ZXMgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb21taXQgaW4KKyAqICAgdGhlIGluZGVncmVlIHNsYWIsIGFuZCByZXR1cm5zIHRoZSBwb2ludGVyIHRvIGl0LgorICoKKyAqIC0gdm9pZCBpbml0X2luZGVncmVlKHN0cnVjdCBpbmRlZ3JlZSAqKTsKKyAqICAgdm9pZCBpbml0X2luZGVncmVlX3dpdGhfc3RyaWRlKHN0cnVjdCBpbmRlZ3JlZSAqLCBpbnQpOworICoKKyAqICAgSW5pdGlhbGl6ZXMgdGhlIGluZGVncmVlIHNsYWIgdGhhdCBhc3NvY2lhdGVzIGFuIGFycmF5IG9mIGludGVnZXJzCisgKiAgIHRvIGVhY2ggY29tbWl0LiAnc3RyaWRlJyBzcGVjaWZpZXMgaG93IGJpZyBlYWNoIGFycmF5IGlzLiAgVGhlIHNsYWIKKyAqICAgdGhhdCBpZCBpbml0aWFsaWVkIGJ5IHRoZSB2YXJpYW50IHdpdGhvdXQgIl93aXRoX3N0cmlkZSIgYXNzb2NpYXRlcworICogICBlYWNoIGNvbW1pdCB3aXRoIGFuIGFycmF5IG9mIG9uZSBpbnRlZ2VyLgorICovCisKKy8qIGFsbG9jYXRlIH41MTJrQiBhdCBvbmNlLCBhbGxvd2luZyBmb3IgbWFsbG9jIG92ZXJoZWFkICovCisjaWZuZGVmIENPTU1JVF9TTEFCX1NJWkUKKyNkZWZpbmUgQ09NTUlUX1NMQUJfU0laRSAoNTEyKjEwMjQtMzIpCisjZW5kaWYKKworI2RlZmluZSBkZWZpbmVfY29tbWl0X3NsYWIoc2xhYm5hbWUsIGVsZW10eXBlKSAJCQkJXAorCQkJCQkJCQkJXAorc3RydWN0IHNsYWJuYW1lIHsJCQkJCQkJXAorCXVuc2lnbmVkIHNsYWJfc2l6ZTsJCQkJCQlcCisJdW5zaWduZWQgc3RyaWRlOwkJCQkJCVwKKwl1bnNpZ25lZCBzbGFiX2NvdW50OwkJCQkJCVwKKwllbGVtdHlwZSAqKnNsYWI7CQkJCQkJXAorfTsJCQkJCQkJCQlcCitzdGF0aWMgaW50IHN0YXRfICMjc2xhYm5hbWUjIyByZWFsbG9jOwkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIHZvaWQgaW5pdF8gIyNzbGFibmFtZSMjIF93aXRoX3N0cmlkZShzdHJ1Y3Qgc2xhYm5hbWUgKnMsCQlcCisJCQkJCSAgICB1bnNpZ25lZCBzdHJpZGUpCQlcCit7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGludCBlbGVtX3NpemU7CQkJCQkJXAorCWlmICghc3RyaWRlKQkJCQkJCQlcCisJCXN0cmlkZSA9IDE7CQkJCQkJXAorCXMtPnN0cmlkZSA9IHN0cmlkZTsJCQkJCQlcCisJZWxlbV9zaXplID0gc2l6ZW9mKHN0cnVjdCBzbGFibmFtZSkgKiBzdHJpZGU7CQkJXAorCXMtPnNsYWJfc2l6ZSA9IENPTU1JVF9TTEFCX1NJWkUgLyBlbGVtX3NpemU7CQkJXAorCXMtPnNsYWJfY291bnQgPSAwOwkJCQkJCVwKKwlzLT5zbGFiID0gTlVMTDsJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyB2b2lkIGluaXRfICMjc2xhYm5hbWUoc3RydWN0IHNsYWJuYW1lICpzKQkJCVwKK3sJCQkJCQkJCQlcCisJaW5pdF8gIyNzbGFibmFtZSMjIF93aXRoX3N0cmlkZShzLCAxKTsJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyB2b2lkIGNsZWFyXyAjI3NsYWJuYW1lKHN0cnVjdCBzbGFibmFtZSAqcykJCQlcCit7CQkJCQkJCQkJXAorCWludCBpOwkJCQkJCQkJXAorCWZvciAoaSA9IDA7IGkgPCBzLT5zbGFiX2NvdW50OyBpKyspCQkJCVwKKwkJZnJlZShzLT5zbGFiW2ldKTsJCQkJCVwKKwlzLT5zbGFiX2NvdW50ID0gMDsJCQkJCQlcCisJZnJlZShzLT5zbGFiKTsJCQkJCQkJXAorCXMtPnNsYWIgPSBOVUxMOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGVsZW10eXBlICpzbGFibmFtZSMjIF9hdChzdHJ1Y3Qgc2xhYm5hbWUgKnMsCQkJXAorCQkJCWNvbnN0IHN0cnVjdCBjb21taXQgKmMpCQkJXAorewkJCQkJCQkJCVwKKwlpbnQgbnRoX3NsYWIsIG50aF9zbG90LCBpeDsJCQkJCVwKKwkJCQkJCQkJCVwKKwlpeCA9IGMtPmluZGV4ICogcy0+c3RyaWRlOwkJCQkJXAorCW50aF9zbGFiID0gaXggLyBzLT5zbGFiX3NpemU7CQkJCQlcCisJbnRoX3Nsb3QgPSBpeCAlIHMtPnNsYWJfc2l6ZTsJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAocy0+c2xhYl9jb3VudCA8PSBudGhfc2xhYikgewkJCQlcCisJCWludCBpOwkJCQkJCQlcCisJCXMtPnNsYWIgPSB4cmVhbGxvYyhzLT5zbGFiLAkJCQlcCisJCQkJICAgKG50aF9zbGFiICsgMSkgKiBzaXplb2Yocy0+c2xhYikpOwlcCisJCXN0YXRfICMjc2xhYm5hbWUjIyByZWFsbG9jKys7CQkJCVwKKwkJZm9yIChpID0gcy0+c2xhYl9jb3VudDsgaSA8PSBudGhfc2xhYjsgaSsrKQkJXAorCQkJcy0+c2xhYltpXSA9IE5VTEw7CQkJCVwKKwkJcy0+c2xhYl9jb3VudCA9IG50aF9zbGFiICsgMTsJCQkJXAorCX0JCQkJCQkJCVwKKwlpZiAoIXMtPnNsYWJbbnRoX3NsYWJdKQkJCQkJCVwKKwkJcy0+c2xhYltudGhfc2xhYl0gPSB4Y2FsbG9jKHMtPnNsYWJfc2l6ZSwJCVwKKwkJCQkJICAgIHNpemVvZigqKnMtPnNsYWIpKTsJCVwKKwlyZXR1cm4gJnMtPnNsYWJbbnRoX3NsYWJdW250aF9zbG90XTsJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbnQgc3RhdF8gIyNzbGFibmFtZSMjIHJlYWxsb2MKKworI2VuZGlmIC8qIENPTU1JVF9TTEFCX0ggKi8KZGlmZiAtLWdpdCBhL2NvbW1pdC5jIGIvY29tbWl0LmMKaW5kZXggODg4ZTAyYS4uZTU4NjJmNiAxMDA2NDQKLS0tIGEvY29tbWl0LmMKKysrIGIvY29tbWl0LmMKQEAgLTgsMTIgKzgsMTUgQEAKICNpbmNsdWRlICJub3Rlcy5oIgogI2luY2x1ZGUgImdwZy1pbnRlcmZhY2UuaCIKICNpbmNsdWRlICJtZXJnZXNvcnQuaCIKKyNpbmNsdWRlICJjb21taXQtc2xhYi5oIgorI2luY2x1ZGUgInByaW8tcXVldWUuaCIKIAogc3RhdGljIHN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICpyZWFkX2NvbW1pdF9leHRyYV9oZWFkZXJfbGluZXMoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLCBjb25zdCBjaGFyICoqKTsKIAogaW50IHNhdmVfY29tbWl0X2J1ZmZlciA9IDE7CiAKIGNvbnN0IGNoYXIgKmNvbW1pdF90eXBlID0gImNvbW1pdCI7CitzdGF0aWMgaW50IGNvbW1pdF9jb3VudDsKIAogc3RhdGljIHN0cnVjdCBjb21taXQgKmNoZWNrX2NvbW1pdChzdHJ1Y3Qgb2JqZWN0ICpvYmosCiAJCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKQEAgLTU4LDggKzYxLDExIEBACiBzdHJ1Y3QgY29tbWl0ICpsb29rdXBfY29tbWl0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7CiAJc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX29iamVjdChzaGExKTsKLQlpZiAoIW9iaikKLQkJcmV0dXJuIGNyZWF0ZV9vYmplY3Qoc2hhMSwgT0JKX0NPTU1JVCwgYWxsb2NfY29tbWl0X25vZGUoKSk7CisJaWYgKCFvYmopIHsKKwkJc3RydWN0IGNvbW1pdCAqYyA9IGFsbG9jX2NvbW1pdF9ub2RlKCk7CisJCWMtPmluZGV4ID0gY29tbWl0X2NvdW50Kys7CisJCXJldHVybiBjcmVhdGVfb2JqZWN0KHNoYTEsIE9CSl9DT01NSVQsIGMpOworCX0KIAlpZiAoIW9iai0+dHlwZSkKIAkJb2JqLT50eXBlID0gT0JKX0NPTU1JVDsKIAlyZXR1cm4gY2hlY2tfY29tbWl0KG9iaiwgc2hhMSwgMCk7CkBAIC01MDcsMzIgKzUxMywxMzYgQEAKIH0KIAogLyoKKyAqIFRvcG9sb2dpY2FsIHNvcnQgc3VwcG9ydAorICovCisKKy8qIGNvdW50IG51bWJlciBvZiBjaGlsZHJlbiB0aGF0IGhhdmUgbm90IGJlZW4gZW1pdHRlZCAqLworZGVmaW5lX2NvbW1pdF9zbGFiKGluZGVncmVlX3NsYWIsIGludCk7CisKKy8qIHJlY29yZCBhdXRob3ItZGF0ZSBmb3IgZWFjaCBjb21taXQgb2JqZWN0ICovCitkZWZpbmVfY29tbWl0X3NsYWIoYXV0aG9yX2RhdGVfc2xhYiwgdW5zaWduZWQgbG9uZyk7CisKK3N0YXRpYyB2b2lkIHJlY29yZF9hdXRob3JfZGF0ZShzdHJ1Y3QgYXV0aG9yX2RhdGVfc2xhYiAqYXV0aG9yX2RhdGUsCisJCQkgICAgICAgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWNvbnN0IGNoYXIgKmJ1ZiwgKmxpbmVfZW5kOworCWNoYXIgKmJ1ZmZlciA9IE5VTEw7CisJc3RydWN0IGlkZW50X3NwbGl0IGlkZW50OworCWNoYXIgKmRhdGVfZW5kOworCXVuc2lnbmVkIGxvbmcgZGF0ZTsKKworCWlmICghY29tbWl0LT5idWZmZXIpIHsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCWJ1ZmZlciA9IHJlYWRfc2hhMV9maWxlKGNvbW1pdC0+b2JqZWN0LnNoYTEsICZ0eXBlLCAmc2l6ZSk7CisJCWlmICghYnVmZmVyKQorCQkJcmV0dXJuOworCX0KKworCWZvciAoYnVmID0gY29tbWl0LT5idWZmZXIgPyBjb21taXQtPmJ1ZmZlciA6IGJ1ZmZlcjsKKwkgICAgIGJ1ZjsKKwkgICAgIGJ1ZiA9IGxpbmVfZW5kICsgMSkgeworCQlsaW5lX2VuZCA9IHN0cmNocm51bChidWYsICdcbicpOworCQlpZiAocHJlZml4Y21wKGJ1ZiwgImF1dGhvciAiKSkgeworCQkJaWYgKCFsaW5lX2VuZFswXSB8fCBsaW5lX2VuZFsxXSA9PSAnXG4nKQorCQkJCXJldHVybjsgLyogZW5kIG9mIGhlYWRlciAqLworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNwbGl0X2lkZW50X2xpbmUoJmlkZW50LAorCQkJCSAgICAgYnVmICsgc3RybGVuKCJhdXRob3IgIiksCisJCQkJICAgICBsaW5lX2VuZCAtIChidWYgKyBzdHJsZW4oImF1dGhvciAiKSkpIHx8CisJCSAgICAhaWRlbnQuZGF0ZV9iZWdpbiB8fCAhaWRlbnQuZGF0ZV9lbmQpCisJCQlnb3RvIGZhaWxfZXhpdDsgLyogbWFsZm9ybWVkICJhdXRob3IiIGxpbmUgKi8KKwkJYnJlYWs7CisJfQorCisJZGF0ZSA9IHN0cnRvdWwoaWRlbnQuZGF0ZV9iZWdpbiwgJmRhdGVfZW5kLCAxMCk7CisJaWYgKGRhdGVfZW5kICE9IGlkZW50LmRhdGVfZW5kKQorCQlnb3RvIGZhaWxfZXhpdDsgLyogbWFsZm9ybWVkIGRhdGUgKi8KKwkqKGF1dGhvcl9kYXRlX3NsYWJfYXQoYXV0aG9yX2RhdGUsIGNvbW1pdCkpID0gZGF0ZTsKKworZmFpbF9leGl0OgorCWZyZWUoYnVmZmVyKTsKK30KKworc3RhdGljIGludCBjb21wYXJlX2NvbW1pdHNfYnlfYXV0aG9yX2RhdGUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfLAorCQkJCQkgIHZvaWQgKmNiX2RhdGEpCit7CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqYSA9IGFfLCAqYiA9IGJfOworCXN0cnVjdCBhdXRob3JfZGF0ZV9zbGFiICphdXRob3JfZGF0ZSA9IGNiX2RhdGE7CisJdW5zaWduZWQgbG9uZyBhX2RhdGUgPSAqKGF1dGhvcl9kYXRlX3NsYWJfYXQoYXV0aG9yX2RhdGUsIGEpKTsKKwl1bnNpZ25lZCBsb25nIGJfZGF0ZSA9ICooYXV0aG9yX2RhdGVfc2xhYl9hdChhdXRob3JfZGF0ZSwgYikpOworCisJLyogbmV3ZXIgY29tbWl0cyB3aXRoIGxhcmdlciBkYXRlIGZpcnN0ICovCisJaWYgKGFfZGF0ZSA8IGJfZGF0ZSkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAoYV9kYXRlID4gYl9kYXRlKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjb21wYXJlX2NvbW1pdHNfYnlfY29tbWl0X2RhdGUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfLCB2b2lkICp1bnVzZWQpCit7CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqYSA9IGFfLCAqYiA9IGJfOworCS8qIG5ld2VyIGNvbW1pdHMgd2l0aCBsYXJnZXIgZGF0ZSBmaXJzdCAqLworCWlmIChhLT5kYXRlIDwgYi0+ZGF0ZSkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAoYS0+ZGF0ZSA+IGItPmRhdGUpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworLyoKICAqIFBlcmZvcm1zIGFuIGluLXBsYWNlIHRvcG9sb2dpY2FsIHNvcnQgb24gdGhlIGxpc3Qgc3VwcGxpZWQuCiAgKi8KLXZvaWQgc29ydF9pbl90b3BvbG9naWNhbF9vcmRlcihzdHJ1Y3QgY29tbWl0X2xpc3QgKiogbGlzdCwgaW50IGxpZm8pCit2b2lkIHNvcnRfaW5fdG9wb2xvZ2ljYWxfb3JkZXIoc3RydWN0IGNvbW1pdF9saXN0ICoqbGlzdCwgZW51bSByZXZfc29ydF9vcmRlciBzb3J0X29yZGVyKQogewogCXN0cnVjdCBjb21taXRfbGlzdCAqbmV4dCwgKm9yaWcgPSAqbGlzdDsKLQlzdHJ1Y3QgY29tbWl0X2xpc3QgKndvcmssICoqaW5zZXJ0OwogCXN0cnVjdCBjb21taXRfbGlzdCAqKnBwdHI7CisJc3RydWN0IGluZGVncmVlX3NsYWIgaW5kZWdyZWU7CisJc3RydWN0IHByaW9fcXVldWUgcXVldWU7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBhdXRob3JfZGF0ZV9zbGFiIGF1dGhvcl9kYXRlOwogCiAJaWYgKCFvcmlnKQogCQlyZXR1cm47CiAJKmxpc3QgPSBOVUxMOwogCisJaW5pdF9pbmRlZ3JlZV9zbGFiKCZpbmRlZ3JlZSk7CisJbWVtc2V0KCZxdWV1ZSwgJ1wwJywgc2l6ZW9mKHF1ZXVlKSk7CisKKwlzd2l0Y2ggKHNvcnRfb3JkZXIpIHsKKwlkZWZhdWx0OiAvKiBSRVZfU09SVF9JTl9HUkFQSF9PUkRFUiAqLworCQlxdWV1ZS5jb21wYXJlID0gTlVMTDsKKwkJYnJlYWs7CisJY2FzZSBSRVZfU09SVF9CWV9DT01NSVRfREFURToKKwkJcXVldWUuY29tcGFyZSA9IGNvbXBhcmVfY29tbWl0c19ieV9jb21taXRfZGF0ZTsKKwkJYnJlYWs7CisJY2FzZSBSRVZfU09SVF9CWV9BVVRIT1JfREFURToKKwkJaW5pdF9hdXRob3JfZGF0ZV9zbGFiKCZhdXRob3JfZGF0ZSk7CisJCXF1ZXVlLmNvbXBhcmUgPSBjb21wYXJlX2NvbW1pdHNfYnlfYXV0aG9yX2RhdGU7CisJCXF1ZXVlLmNiX2RhdGEgPSAmYXV0aG9yX2RhdGU7CisJCWJyZWFrOworCX0KKwogCS8qIE1hcmsgdGhlbSBhbmQgY2xlYXIgdGhlIGluZGVncmVlICovCiAJZm9yIChuZXh0ID0gb3JpZzsgbmV4dDsgbmV4dCA9IG5leHQtPm5leHQpIHsKIAkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbmV4dC0+aXRlbTsKLQkJY29tbWl0LT5pbmRlZ3JlZSA9IDE7CisJCSooaW5kZWdyZWVfc2xhYl9hdCgmaW5kZWdyZWUsIGNvbW1pdCkpID0gMTsKKwkJLyogYWxzbyByZWNvcmQgdGhlIGF1dGhvciBkYXRlcywgaWYgbmVlZGVkICovCisJCWlmIChzb3J0X29yZGVyID09IFJFVl9TT1JUX0JZX0FVVEhPUl9EQVRFKQorCQkJcmVjb3JkX2F1dGhvcl9kYXRlKCZhdXRob3JfZGF0ZSwgY29tbWl0KTsKIAl9CiAKIAkvKiB1cGRhdGUgdGhlIGluZGVncmVlICovCiAJZm9yIChuZXh0ID0gb3JpZzsgbmV4dDsgbmV4dCA9IG5leHQtPm5leHQpIHsKLQkJc3RydWN0IGNvbW1pdF9saXN0ICogcGFyZW50cyA9IG5leHQtPml0ZW0tPnBhcmVudHM7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IG5leHQtPml0ZW0tPnBhcmVudHM7CiAJCXdoaWxlIChwYXJlbnRzKSB7CiAJCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBwYXJlbnRzLT5pdGVtOworCQkJaW50ICpwaSA9IGluZGVncmVlX3NsYWJfYXQoJmluZGVncmVlLCBwYXJlbnQpOwogCi0JCQlpZiAocGFyZW50LT5pbmRlZ3JlZSkKLQkJCQlwYXJlbnQtPmluZGVncmVlKys7CisJCQlpZiAoKnBpKQorCQkJCSgqcGkpKys7CiAJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKIAkJfQogCX0KQEAgLTU0NCwzNCArNjU0LDMzIEBACiAJICoKIAkgKiB0aGUgdGlwcyBzZXJ2ZSBhcyBhIHN0YXJ0aW5nIHNldCBmb3IgdGhlIHdvcmsgcXVldWUuCiAJICovCi0Jd29yayA9IE5VTEw7Ci0JaW5zZXJ0ID0gJndvcms7CiAJZm9yIChuZXh0ID0gb3JpZzsgbmV4dDsgbmV4dCA9IG5leHQtPm5leHQpIHsKIAkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbmV4dC0+aXRlbTsKIAotCQlpZiAoY29tbWl0LT5pbmRlZ3JlZSA9PSAxKQotCQkJaW5zZXJ0ID0gJmNvbW1pdF9saXN0X2luc2VydChjb21taXQsIGluc2VydCktPm5leHQ7CisJCWlmICgqKGluZGVncmVlX3NsYWJfYXQoJmluZGVncmVlLCBjb21taXQpKSA9PSAxKQorCQkJcHJpb19xdWV1ZV9wdXQoJnF1ZXVlLCBjb21taXQpOwogCX0KIAotCS8qIHByb2Nlc3MgdGhlIGxpc3QgaW4gdG9wb2xvZ2ljYWwgb3JkZXIgKi8KLQlpZiAoIWxpZm8pCi0JCWNvbW1pdF9saXN0X3NvcnRfYnlfZGF0ZSgmd29yayk7CisJLyoKKwkgKiBUaGlzIGlzIHVuZm9ydHVuYXRlOyB0aGUgaW5pdGlhbCB0aXBzIG5lZWQgdG8gYmUgc2hvd24KKwkgKiBpbiB0aGUgb3JkZXIgZ2l2ZW4gZnJvbSB0aGUgcmV2aXNpb24gdHJhdmVyc2FsIG1hY2hpbmVyeS4KKwkgKi8KKwlpZiAoc29ydF9vcmRlciA9PSBSRVZfU09SVF9JTl9HUkFQSF9PUkRFUikKKwkJcHJpb19xdWV1ZV9yZXZlcnNlKCZxdWV1ZSk7CisKKwkvKiBXZSBubyBsb25nZXIgbmVlZCB0aGUgY29tbWl0IGxpc3QgKi8KKwlmcmVlX2NvbW1pdF9saXN0KG9yaWcpOwogCiAJcHB0ciA9IGxpc3Q7CiAJKmxpc3QgPSBOVUxMOwotCXdoaWxlICh3b3JrKSB7Ci0JCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKLQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzLCAqd29ya19pdGVtOworCXdoaWxlICgoY29tbWl0ID0gcHJpb19xdWV1ZV9nZXQoJnF1ZXVlKSkgIT0gTlVMTCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CiAKLQkJd29ya19pdGVtID0gd29yazsKLQkJd29yayA9IHdvcmtfaXRlbS0+bmV4dDsKLQkJd29ya19pdGVtLT5uZXh0ID0gTlVMTDsKLQotCQljb21taXQgPSB3b3JrX2l0ZW0tPml0ZW07CiAJCWZvciAocGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsgcGFyZW50cyA7IHBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KSB7CiAJCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBwYXJlbnRzLT5pdGVtOworCQkJaW50ICpwaSA9IGluZGVncmVlX3NsYWJfYXQoJmluZGVncmVlLCBwYXJlbnQpOwogCi0JCQlpZiAoIXBhcmVudC0+aW5kZWdyZWUpCisJCQlpZiAoISpwaSkKIAkJCQljb250aW51ZTsKIAogCQkJLyoKQEAgLTU3OSwyMSArNjg4LDIyIEBACiAJCQkgKiB3aGVuIGFsbCB0aGVpciBjaGlsZHJlbiBoYXZlIGJlZW4gZW1pdHRlZCB0aGVyZWJ5CiAJCQkgKiBndWFyYW50ZWVpbmcgdG9wb2xvZ2ljYWwgb3JkZXIuCiAJCQkgKi8KLQkJCWlmICgtLXBhcmVudC0+aW5kZWdyZWUgPT0gMSkgewotCQkJCWlmICghbGlmbykKLQkJCQkJY29tbWl0X2xpc3RfaW5zZXJ0X2J5X2RhdGUocGFyZW50LCAmd29yayk7Ci0JCQkJZWxzZQotCQkJCQljb21taXRfbGlzdF9pbnNlcnQocGFyZW50LCAmd29yayk7Ci0JCQl9CisJCQlpZiAoLS0oKnBpKSA9PSAxKQorCQkJCXByaW9fcXVldWVfcHV0KCZxdWV1ZSwgcGFyZW50KTsKIAkJfQogCQkvKgotCQkgKiB3b3JrX2l0ZW0gaXMgYSBjb21taXQgYWxsIG9mIHdob3NlIGNoaWxkcmVuCi0JCSAqIGhhdmUgYWxyZWFkeSBiZWVuIGVtaXR0ZWQuIHdlIGNhbiBlbWl0IGl0IG5vdy4KKwkJICogYWxsIGNoaWxkcmVuIG9mIGNvbW1pdCBoYXZlIGFscmVhZHkgYmVlbgorCQkgKiBlbWl0dGVkLiB3ZSBjYW4gZW1pdCBpdCBub3cuCiAJCSAqLwotCQljb21taXQtPmluZGVncmVlID0gMDsKLQkJKnBwdHIgPSB3b3JrX2l0ZW07Ci0JCXBwdHIgPSAmd29ya19pdGVtLT5uZXh0OworCQkqKGluZGVncmVlX3NsYWJfYXQoJmluZGVncmVlLCBjb21taXQpKSA9IDA7CisKKwkJcHB0ciA9ICZjb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCBwcHRyKS0+bmV4dDsKIAl9CisKKwljbGVhcl9pbmRlZ3JlZV9zbGFiKCZpbmRlZ3JlZSk7CisJY2xlYXJfcHJpb19xdWV1ZSgmcXVldWUpOworCWlmIChzb3J0X29yZGVyID09IFJFVl9TT1JUX0JZX0FVVEhPUl9EQVRFKQorCQljbGVhcl9hdXRob3JfZGF0ZV9zbGFiKCZhdXRob3JfZGF0ZSk7CiB9CiAKIC8qIG1lcmdlLWJhc2Ugc3R1ZmYgKi8KQEAgLTEyNDAsMTAgKzEzNTAsMTUgQEAKIHN0YXRpYyBpbnQgZmluZF9pbnZhbGlkX3V0ZjgoY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuKQogewogCWludCBvZmZzZXQgPSAwOworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWF4X2NvZGVwb2ludFtdID0geworCQkweDdmLCAweDdmZiwgMHhmZmZmLCAweDEwZmZmZgorCX07CiAKIAl3aGlsZSAobGVuKSB7CiAJCXVuc2lnbmVkIGNoYXIgYyA9ICpidWYrKzsKIAkJaW50IGJ5dGVzLCBiYWRfb2Zmc2V0OworCQl1bnNpZ25lZCBpbnQgY29kZXBvaW50OworCQl1bnNpZ25lZCBpbnQgbWluX3ZhbCwgbWF4X3ZhbDsKIAogCQlsZW4tLTsKIAkJb2Zmc2V0Kys7CkBAIC0xMjY0LDI0ICsxMzc5LDQ4IEBACiAJCQlieXRlcysrOwogCQl9CiAKLQkJLyogTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDUgbW9yZSBieXRlcyAqLwotCQlpZiAoYnl0ZXMgPCAxIHx8IGJ5dGVzID4gNSkKKwkJLyoKKwkJICogTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDMgbW9yZSBieXRlcy4gIExvbmdlciBzZXF1ZW5jZXMgcmVzdWx0IGluCisJCSAqIGNvZGVwb2ludHMgYmV5b25kIFUrMTBGRkZGLCB3aGljaCBhcmUgZ3VhcmFudGVlZCBuZXZlciB0byBleGlzdC4KKwkJICovCisJCWlmIChieXRlcyA8IDEgfHwgMyA8IGJ5dGVzKQogCQkJcmV0dXJuIGJhZF9vZmZzZXQ7CiAKIAkJLyogRG8gd2UgKmhhdmUqIHRoYXQgbWFueSBieXRlcz8gKi8KIAkJaWYgKGxlbiA8IGJ5dGVzKQogCQkJcmV0dXJuIGJhZF9vZmZzZXQ7CiAKKwkJLyoKKwkJICogUGxhY2UgdGhlIGVuY29kZWQgYml0cyBhdCB0aGUgYm90dG9tIG9mIHRoZSB2YWx1ZSBhbmQgY29tcHV0ZSB0aGUKKwkJICogdmFsaWQgcmFuZ2UuCisJCSAqLworCQljb2RlcG9pbnQgPSAoYyAmIDB4N2YpID4+IGJ5dGVzOworCQltaW5fdmFsID0gbWF4X2NvZGVwb2ludFtieXRlcy0xXSArIDE7CisJCW1heF92YWwgPSBtYXhfY29kZXBvaW50W2J5dGVzXTsKKwogCQlvZmZzZXQgKz0gYnl0ZXM7CiAJCWxlbiAtPSBieXRlczsKIAogCQkvKiBBbmQgdmVyaWZ5IHRoYXQgdGhleSBhcmUgZ29vZCBjb250aW51YXRpb24gYnl0ZXMgKi8KIAkJZG8geworCQkJY29kZXBvaW50IDw8PSA2OworCQkJY29kZXBvaW50IHw9ICpidWYgJiAweDNmOwogCQkJaWYgKCgqYnVmKysgJiAweGMwKSAhPSAweDgwKQogCQkJCXJldHVybiBiYWRfb2Zmc2V0OwogCQl9IHdoaWxlICgtLWJ5dGVzKTsKIAotCQkvKiBXZSBjb3VsZC9zaG91bGQgY2hlY2sgdGhlIHZhbHVlIGFuZCBsZW5ndGggaGVyZSB0b28gKi8KKwkJLyogUmVqZWN0IGNvZGVwb2ludHMgdGhhdCBhcmUgb3V0IG9mIHJhbmdlIGZvciB0aGUgc2VxdWVuY2UgbGVuZ3RoLiAqLworCQlpZiAoY29kZXBvaW50IDwgbWluX3ZhbCB8fCBjb2RlcG9pbnQgPiBtYXhfdmFsKQorCQkJcmV0dXJuIGJhZF9vZmZzZXQ7CisJCS8qIFN1cnJvZ2F0ZXMgYXJlIG9ubHkgZm9yIFVURi0xNiBhbmQgY2Fubm90IGJlIGVuY29kZWQgaW4gVVRGLTguICovCisJCWlmICgoY29kZXBvaW50ICYgMHgxZmY4MDApID09IDB4ZDgwMCkKKwkJCXJldHVybiBiYWRfb2Zmc2V0OworCQkvKiBVK3h4RkZGRSBhbmQgVSt4eEZGRkYgYXJlIGd1YXJhbnRlZWQgbm9uLWNoYXJhY3RlcnMuICovCisJCWlmICgoY29kZXBvaW50ICYgMHhmZmZmZSkgPT0gMHhmZmZlKQorCQkJcmV0dXJuIGJhZF9vZmZzZXQ7CisJCS8qIFNvIGFyZSBhbnl0aGluZyBpbiB0aGUgcmFuZ2UgVStGREQwLi5VK0ZERUYuICovCisJCWlmIChjb2RlcG9pbnQgPj0gMHhmZGQwICYmIGNvZGVwb2ludCA8PSAweGZkZWYpCisJCQlyZXR1cm4gYmFkX29mZnNldDsKIAl9CiAJcmV0dXJuIC0xOwogfQpAQCAtMTI5MSw5ICsxNDMwLDYgQEAKICAqCiAgKiBJZiBpdCBpc24ndCwgaXQgYXNzdW1lcyBhbnkgbm9uLXV0ZjggY2hhcmFjdGVycyBhcmUgTGF0aW4xLAogICogYW5kIGRvZXMgdGhlIGNvbnZlcnNpb24uCi0gKgotICogRml4bWU6IHdlIHNob3VsZCBwcm9iYWJseSBhbHNvIGRpc2FsbG93IG92ZXJsb25nIGZvcm1zIGFuZAotICogaW52YWxpZCBjaGFyYWN0ZXJzLiBCdXQgd2UgZG9uJ3QgZG8gdGhhdCBjdXJyZW50bHkuCiAgKi8KIHN0YXRpYyBpbnQgdmVyaWZ5X3V0Zjgoc3RydWN0IHN0cmJ1ZiAqYnVmKQogewpkaWZmIC0tZ2l0IGEvY29tbWl0LmggYi9jb21taXQuaAppbmRleCA2N2JkNTA5Li4zNWNjNGUyIDEwMDY0NAotLS0gYS9jb21taXQuaAorKysgYi9jb21taXQuaApAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlICJzdHJidWYuaCIKICNpbmNsdWRlICJkZWNvcmF0ZS5oIgogI2luY2x1ZGUgImdwZy1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgogCiBzdHJ1Y3QgY29tbWl0X2xpc3QgewogCXN0cnVjdCBjb21taXQgKml0ZW07CkBAIC0xNSw3ICsxNiw3IEBACiBzdHJ1Y3QgY29tbWl0IHsKIAlzdHJ1Y3Qgb2JqZWN0IG9iamVjdDsKIAl2b2lkICp1dGlsOwotCXVuc2lnbmVkIGludCBpbmRlZ3JlZTsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CiAJdW5zaWduZWQgbG9uZyBkYXRlOwogCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKIAlzdHJ1Y3QgdHJlZSAqdHJlZTsKQEAgLTc5LDYgKzgwLDkgQEAKIH07CiAKIHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCB7CisJLyoKKwkgKiBDYWxsZXJzIHNob3VsZCB0d2VhayB0aGVzZSB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIHBwXyogZnVuY3Rpb25zLgorCSAqLwogCWVudW0gY21pdF9mbXQgZm10OwogCWludCBhYmJyZXY7CiAJY29uc3QgY2hhciAqc3ViamVjdDsKQEAgLTkyLDYgKzk2LDE1IEBACiAJY29uc3QgY2hhciAqb3V0cHV0X2VuY29kaW5nOwogCXN0cnVjdCBzdHJpbmdfbGlzdCAqbWFpbG1hcDsKIAlpbnQgY29sb3I7CisJc3RydWN0IGlkZW50X3NwbGl0ICpmcm9tX2lkZW50OworCisJLyoKKwkgKiBGaWVsZHMgYmVsb3cgaGVyZSBhcmUgbWFuaXB1bGF0ZWQgaW50ZXJuYWxseSBieSBwcF8qIGZ1bmN0aW9ucyBhbmQKKwkgKiBzaG91bGQgbm90IGJlIGNvdW50ZWQgb24gYnkgY2FsbGVycy4KKwkgKi8KKworCS8qIE1hbmlwdWxhdGVkIGJ5IHRoZSBwcF8qIGZ1bmN0aW9ucyBpbnRlcm5hbGx5LiAqLworCXN0cnVjdCBzdHJpbmdfbGlzdCBpbl9ib2R5X2hlYWRlcnM7CiB9OwogCiBzdHJ1Y3QgdXNlcmZvcm1hdF93YW50IHsKQEAgLTExMSwyMCArMTI0LDIwIEBACiBleHRlcm4gdm9pZCBmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAogCQkJCSAgY29uc3QgY2hhciAqZm9ybWF0LCBzdHJ1Y3Qgc3RyYnVmICpzYiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqY29udGV4dCk7Ci1leHRlcm4gdm9pZCBwcmV0dHlfcHJpbnRfY29tbWl0KGNvbnN0IHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHAsCitleHRlcm4gdm9pZCBwcmV0dHlfcHJpbnRfY29tbWl0KHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHAsCiAJCQkJY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAogCQkJCXN0cnVjdCBzdHJidWYgKnNiKTsKIGV4dGVybiB2b2lkIHBwX2NvbW1pdF9lYXN5KGVudW0gY21pdF9mbXQgZm10LCBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCiAJCQkgICBzdHJ1Y3Qgc3RyYnVmICpzYik7Ci12b2lkIHBwX3VzZXJfaW5mbyhjb25zdCBzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLAordm9pZCBwcF91c2VyX2luZm8oc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKIAkJICBjb25zdCBjaGFyICp3aGF0LCBzdHJ1Y3Qgc3RyYnVmICpzYiwKIAkJICBjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICplbmNvZGluZyk7Ci12b2lkIHBwX3RpdGxlX2xpbmUoY29uc3Qgc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKK3ZvaWQgcHBfdGl0bGVfbGluZShzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLAogCQkgICBjb25zdCBjaGFyICoqbXNnX3AsCiAJCSAgIHN0cnVjdCBzdHJidWYgKnNiLAogCQkgICBjb25zdCBjaGFyICplbmNvZGluZywKIAkJICAgaW50IG5lZWRfOGJpdF9jdGUpOwotdm9pZCBwcF9yZW1haW5kZXIoY29uc3Qgc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKK3ZvaWQgcHBfcmVtYWluZGVyKHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHAsCiAJCSAgY29uc3QgY2hhciAqKm1zZ19wLAogCQkgIHN0cnVjdCBzdHJidWYgKnNiLAogCQkgIGludCBpbmRlbnQpOwpAQCAtMTQyLDE1ICsxNTUsMjQgQEAKIHZvaWQgY2xlYXJfY29tbWl0X21hcmtzX21hbnkoaW50IG5yLCBzdHJ1Y3QgY29tbWl0ICoqY29tbWl0LCB1bnNpZ25lZCBpbnQgbWFyayk7CiB2b2lkIGNsZWFyX2NvbW1pdF9tYXJrc19mb3Jfb2JqZWN0X2FycmF5KHN0cnVjdCBvYmplY3RfYXJyYXkgKmEsIHVuc2lnbmVkIG1hcmspOwogCisKK2VudW0gcmV2X3NvcnRfb3JkZXIgeworCVJFVl9TT1JUX0lOX0dSQVBIX09SREVSID0gMCwKKwlSRVZfU09SVF9CWV9DT01NSVRfREFURSwKKwlSRVZfU09SVF9CWV9BVVRIT1JfREFURQorfTsKKwogLyoKICAqIFBlcmZvcm1zIGFuIGluLXBsYWNlIHRvcG9sb2dpY2FsIHNvcnQgb2YgbGlzdCBzdXBwbGllZC4KICAqCiAgKiAgIGludmFyaWFudCBvZiByZXN1bHRpbmcgbGlzdCBpczoKICAqICAgICAgYSByZWFjaGFibGUgZnJvbSBiID0+IG9yZChiKSA8IG9yZChhKQotICogICBpbiBhZGRpdGlvbiwgd2hlbiBsaWZvID09IDAsIGNvbW1pdHMgb24gcGFyYWxsZWwgdHJhY2tzIGFyZQotICogICBzb3J0ZWQgaW4gdGhlIGRhdGVzIG9yZGVyLgorICogICBzb3J0X29yZGVyIGZ1cnRoZXIgc3BlY2lmaWVzOgorICogICBSRVZfU09SVF9JTl9HUkFQSF9PUkRFUjogdHJ5IHRvIHNob3cgYSBjb21taXQgb24gYSBzaW5nbGUtcGFyZW50CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFpbiB0b2dldGhlci4KKyAqICAgUkVWX1NPUlRfQllfQ09NTUlUX0RBVEU6IHNob3cgZWxpZ2libGUgY29tbWl0cyBpbiBjb21taXR0ZXItZGF0ZSBvcmRlci4KICAqLwotdm9pZCBzb3J0X2luX3RvcG9sb2dpY2FsX29yZGVyKHN0cnVjdCBjb21taXRfbGlzdCAqKiBsaXN0LCBpbnQgbGlmbyk7Cit2b2lkIHNvcnRfaW5fdG9wb2xvZ2ljYWxfb3JkZXIoc3RydWN0IGNvbW1pdF9saXN0ICoqLCBlbnVtIHJldl9zb3J0X29yZGVyKTsKIAogc3RydWN0IGNvbW1pdF9ncmFmdCB7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKQEAgLTE3Niw2ICsxOTgsOCBAQAogZXh0ZXJuIGludCBpc19yZXBvc2l0b3J5X3NoYWxsb3codm9pZCk7CiBleHRlcm4gc3RydWN0IGNvbW1pdF9saXN0ICpnZXRfc2hhbGxvd19jb21taXRzKHN0cnVjdCBvYmplY3RfYXJyYXkgKmhlYWRzLAogCQlpbnQgZGVwdGgsIGludCBzaGFsbG93X2ZsYWcsIGludCBub3Rfc2hhbGxvd19mbGFnKTsKK2V4dGVybiB2b2lkIGNoZWNrX3NoYWxsb3dfZmlsZV9mb3JfdXBkYXRlKHZvaWQpOworZXh0ZXJuIHZvaWQgc2V0X2FsdGVybmF0ZV9zaGFsbG93X2ZpbGUoY29uc3QgY2hhciAqcGF0aCk7CiAKIGludCBpc19kZXNjZW5kYW50X29mKHN0cnVjdCBjb21taXQgKiwgc3RydWN0IGNvbW1pdF9saXN0ICopOwogaW50IGluX21lcmdlX2Jhc2VzKHN0cnVjdCBjb21taXQgKiwgc3RydWN0IGNvbW1pdCAqKTsKQEAgLTI0Myw0ICsyNjcsNiBAQAogICovCiBleHRlcm4gdm9pZCBjaGVja19jb21taXRfc2lnbmF0dXJlKGNvbnN0IHN0cnVjdCBjb21taXQqIGNvbW1pdCwgc3RydWN0IHNpZ25hdHVyZV9jaGVjayAqc2lnYyk7CiAKK2ludCBjb21wYXJlX2NvbW1pdHNfYnlfY29tbWl0X2RhdGUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfLCB2b2lkICp1bnVzZWQpOworCiAjZW5kaWYgLyogQ09NTUlUX0ggKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC9jbGlwcGVkLXdyaXRlLmMgYi9jb21wYXQvY2xpcHBlZC13cml0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4Zjk4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvY2xpcHBlZC13cml0ZS5jCkBAIC0wLDAgKzEsMTMgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKyN1bmRlZiB3cml0ZQorCisvKgorICogVmVyc2lvbiBvZiB3cml0ZSB0aGF0IHdpbGwgd3JpdGUgYXQgbW9zdCBJTlRfTUFYIGJ5dGVzLgorICogV29ya2Fyb3VuZCBhIHhudSBidWcgb24gTWFjIE9TIFgKKyAqLworc3NpemVfdCBjbGlwcGVkX3dyaXRlKGludCBmaWxkZXMsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IG5ieXRlKQoreworCWlmIChuYnl0ZSA+IElOVF9NQVgpCisJCW5ieXRlID0gSU5UX01BWDsKKwlyZXR1cm4gd3JpdGUoZmlsZGVzLCBidWYsIG5ieXRlKTsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9jeWd3aW4uYyBiL2NvbXBhdC9jeWd3aW4uYwppbmRleCA4NzFiNDFkLi45MWNlNWQ0IDEwMDY0NAotLS0gYS9jb21wYXQvY3lnd2luLmMKKysrIGIvY29tcGF0L2N5Z3dpbi5jCkBAIC0xLDE0ICsxLDkgQEAKICNkZWZpbmUgQ1lHV0lOX0MKICNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgotI2lmZGVmIENZR1dJTl9WMTVfV0lOMzJBUEkKLSNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKLSNpbmNsdWRlICJ3aW4zMi5oIgotI2Vsc2UKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHN5cy9lcnJuby5oPgogI2luY2x1ZGUgIndpbjMyLmgiCiAjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCi0jZW5kaWYKICNpbmNsdWRlICIuLi9jYWNoZS5oIiAvKiB0byByZWFkIGNvbmZpZ3VyYXRpb24gKi8KIAogLyoKZGlmZiAtLWdpdCBhL2NvbXBhdC9mbm1hdGNoL2ZubWF0Y2guYyBiL2NvbXBhdC9mbm1hdGNoL2ZubWF0Y2guYwppbmRleCA1ZWYwNjg1Li4zNzhjNDY3IDEwMDY0NAotLS0gYS9jb21wYXQvZm5tYXRjaC9mbm1hdGNoLmMKKysrIGIvY29tcGF0L2ZubWF0Y2gvZm5tYXRjaC5jCkBAIC0yNSw2ICsyNSw3IEBACiAjIGRlZmluZSBfR05VX1NPVVJDRQkxCiAjZW5kaWYKIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8Zm5tYXRjaC5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CkBAIC0xMjEsNyArMTIyLDcgQEAKICAgIHdob3NlIG5hbWVzIGFyZSBpbmNvbnNpc3RlbnQuICAqLwogCiAjIGlmICFkZWZpbmVkIF9MSUJDICYmICFkZWZpbmVkIGdldGVudgotZXh0ZXJuIGNoYXIgKmdldGVudiAoKTsKK2V4dGVybiBjaGFyICpnZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUpOwogIyBlbmRpZgogCiAjIGlmbmRlZiBlcnJubwpkaWZmIC0tZ2l0IGEvY29tcGF0L21pbmd3LmMgYi9jb21wYXQvbWluZ3cuYwppbmRleCBiNjczNjI1Li5iYjkyYzQzIDEwMDY0NAotLS0gYS9jb21wYXQvbWluZ3cuYworKysgYi9jb21wYXQvbWluZ3cuYwpAQCAtODQxLDggKzg0MSw4IEBACiAJc3RydWN0IHBpbmZvX3QgKm5leHQ7CiAJcGlkX3QgcGlkOwogCUhBTkRMRSBwcm9jOwotfSBwaW5mb190Owotc3RydWN0IHBpbmZvX3QgKnBpbmZvID0gTlVMTDsKK307CitzdGF0aWMgc3RydWN0IHBpbmZvX3QgKnBpbmZvID0gTlVMTDsKIENSSVRJQ0FMX1NFQ1RJT04gcGluZm9fY3M7CiAKIHN0YXRpYyBwaWRfdCBtaW5nd19zcGF3bnZlX2ZkKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnYsCkBAIC0xMjUzLDcgKzEyNTMsNyBAQAogCWVsc2UKIAkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfTE9PUEJBQ0s7CiAJYWktPmFpX2FkZHIgPSAoc3RydWN0IHNvY2thZGRyICopc2luOwotCWFpLT5haV9uZXh0ID0gMDsKKwlhaS0+YWlfbmV4dCA9IE5VTEw7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2NzcsMTQgKzE2NzcsMTYgQEAKICN1bmRlZiBzaWduYWwKIHNpZ19oYW5kbGVyX3QgbWluZ3dfc2lnbmFsKGludCBzaWcsIHNpZ19oYW5kbGVyX3QgaGFuZGxlcikKIHsKLQlzaWdfaGFuZGxlcl90IG9sZCA9IHRpbWVyX2ZuOworCXNpZ19oYW5kbGVyX3Qgb2xkOwogCiAJc3dpdGNoIChzaWcpIHsKIAljYXNlIFNJR0FMUk06CisJCW9sZCA9IHRpbWVyX2ZuOwogCQl0aW1lcl9mbiA9IGhhbmRsZXI7CiAJCWJyZWFrOwogCiAJY2FzZSBTSUdJTlQ6CisJCW9sZCA9IHNpZ2ludF9mbjsKIAkJc2lnaW50X2ZuID0gaGFuZGxlcjsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2NvbXBhdC9taW5ndy5oIGIvY29tcGF0L21pbmd3LmgKaW5kZXggNjg1Y2QyYy4uYmQwYTg4YiAxMDA2NDQKLS0tIGEvY29tcGF0L21pbmd3LmgKKysrIGIvY29tcGF0L21pbmd3LmgKQEAgLTMzNCwxMyArMzM0LDIwIEBACiB2b2lkIGZyZWVfZW52aXJvbihjaGFyICoqZW52KTsKIAogLyoKKyAqIEEgY3JpdGljYWwgc2VjdGlvbiB1c2VkIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3Bhd24KKyAqIGZ1bmN0aW9ucyAobWluZ3dfc3Bhd252W3BdZSgpKSBhbmQgd2FpdHBpZCgpLiBJbnRpYWxpc2VkIGluCisgKiB0aGUgcmVwbGFjZW1lbnQgbWFpbigpIG1hY3JvIGJlbG93LgorICovCitleHRlcm4gQ1JJVElDQUxfU0VDVElPTiBwaW5mb19jczsKKworLyoKICAqIEEgcmVwbGFjZW1lbnQgb2YgbWFpbigpIHRoYXQgZW5zdXJlcyB0aGF0IGFyZ3ZbMF0gaGFzIGEgcGF0aAogICogYW5kIHRoYXQgZGVmYXVsdCBmbW9kZSBhbmQgc3RkKGlufG91dHxlcnIpIGFyZSBpbiBiaW5hcnkgbW9kZQogICovCiAKICNkZWZpbmUgbWFpbihjLHYpIGR1bW15X2RlY2xfbWluZ3dfbWFpbigpOyBcCi1zdGF0aWMgaW50IG1pbmd3X21haW4oKTsgXAotaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KSBcCitzdGF0aWMgaW50IG1pbmd3X21haW4oYyx2KTsgXAoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSBcCiB7IFwKIAlleHRlcm4gQ1JJVElDQUxfU0VDVElPTiBwaW5mb19jczsgXAogCV9mbW9kZSA9IF9PX0JJTkFSWTsgXApkaWZmIC0tZ2l0IGEvY29tcGF0L25lZG1hbGxvYy9SZWFkbWUudHh0IGIvY29tcGF0L25lZG1hbGxvYy9SZWFkbWUudHh0CmluZGV4IGU0NmQ4ZjEuLjA3Y2JmNTAgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9uZWRtYWxsb2MvUmVhZG1lLnR4dAorKysgYi9jb21wYXQvbmVkbWFsbG9jL1JlYWRtZS50eHQKQEAgLTk3LDcgKzk3LDcgQEAKIAogdjEuMDRhbHBoYV9zdm45MTUgN3RoIE9jdG9iZXIgMjAwNjoKICAqIEZpeGVkIGZhaWx1cmUgdG8gdW5sb2NrIHRocmVhZCBjYWNoZSBsaXN0IGlmIGFsbG9jYXRpbmcgYSBuZXcgbGlzdCBmYWlsZWQuCi1UaGFua3MgdG8gRG1pdHJ5IENoaWNoa292IGZvciByZXBvcnRpbmcgdGhpcy4gRnV0aGVyIHRoYW5rcyB0byBBbGVrc2V5IFNhbmluLgorVGhhbmtzIHRvIERtaXRyeSBDaGljaGtvdiBmb3IgcmVwb3J0aW5nIHRoaXMuIEZ1cnRoZXIgdGhhbmtzIHRvIEFsZWtzZXkgU2FuaW4uCiAgKiBGaXhlZCByZWFsbG9jKDAsIDxzaXplPikgc2VnZmF1bHRpbmcuIFRoYW5rcyB0byBEbWl0cnkgQ2hpY2hrb3YgZm9yCiByZXBvcnRpbmcgdGhpcy4KICAqIE1hZGUgY29uZmlnIGRlZmluZXMgI2lmbmRlZiBzbyB0aGV5IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBidWlsZCBzeXN0ZW0uCmRpZmYgLS1naXQgYS9jb21wYXQvbmVkbWFsbG9jL21hbGxvYy5jLmggYi9jb21wYXQvbmVkbWFsbG9jL21hbGxvYy5jLmgKaW5kZXggMTQwMWE2Ny4uZWQ0ZjFmYSAxMDA2NDQKLS0tIGEvY29tcGF0L25lZG1hbGxvYy9tYWxsb2MuYy5oCisrKyBiL2NvbXBhdC9uZWRtYWxsb2MvbWFsbG9jLmMuaApAQCAtNDg0LDYgKzQ4NCwxMCBAQAogI2RlZmluZSBETE1BTExPQ19WRVJTSU9OIDIwODA0CiAjZW5kaWYgLyogRExNQUxMT0NfVkVSU0lPTiAqLwogCisjaWYgZGVmaW5lZChsaW51eCkKKyNkZWZpbmUgX0dOVV9TT1VSQ0UgMQorI2VuZGlmCisKICNpZm5kZWYgV0lOMzIKICNpZmRlZiBfV0lOMzIKICNkZWZpbmUgV0lOMzIgMQpAQCAtMTgwMiw3ICsxODA2LDcgQEAKIAogc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleCA9IHsgMCwgMCwgMH07CiAKLXN0YXRpYyBGT1JDRUlOTElORSBsb25nIHdpbjMyX2dldGN1cnJlbnR0aHJlYWRpZCgpIHsKK3N0YXRpYyBGT1JDRUlOTElORSBsb25nIHdpbjMyX2dldGN1cnJlbnR0aHJlYWRpZCh2b2lkKSB7CiAjaWZkZWYgX01TQ19WRVIKICNpZiBkZWZpbmVkKF9NX0lYODYpCiAgIGxvbmcgKnRocmVhZHN0cnVjdD0obG9uZyAqKV9fcmVhZGZzZHdvcmQoMHgxOCk7CkBAIC0zNTk4LDggKzM2MDIsOCBAQAogICAgICBhbmQgY2hvb3NlIGl0cyBiayBub2RlIGFzIGl0cyByZXBsYWNlbWVudC4KICAgMi4gSWYgeCB3YXMgdGhlIGxhc3Qgbm9kZSBvZiBpdHMgc2l6ZSwgYnV0IG5vdCBhIGxlYWYgbm9kZSwgaXQgbXVzdAogICAgICBiZSByZXBsYWNlZCB3aXRoIGEgbGVhZiBub2RlIChub3QgbWVyZWx5IG9uZSB3aXRoIGFuIG9wZW4gbGVmdCBvcgotICAgICByaWdodCksIHRvIG1ha2Ugc3VyZSB0aGF0IGxlZnRzIGFuZCByaWdodHMgb2YgZGVzY2VuZGVudHMKLSAgICAgY29ycmVzcG9uZCBwcm9wZXJseSB0byBiaXQgbWFza3MuICBXZSB1c2UgdGhlIHJpZ2h0bW9zdCBkZXNjZW5kZW50CisgICAgIHJpZ2h0KSwgdG8gbWFrZSBzdXJlIHRoYXQgbGVmdHMgYW5kIHJpZ2h0cyBvZiBkZXNjZW5kYW50cworICAgICBjb3JyZXNwb25kIHByb3Blcmx5IHRvIGJpdCBtYXNrcy4gIFdlIHVzZSB0aGUgcmlnaHRtb3N0IGRlc2NlbmRhbnQKICAgICAgb2YgeC4gIFdlIGNvdWxkIHVzZSBhbnkgb3RoZXIgbGVhZiwgYnV0IHRoaXMgaXMgZWFzeSB0byBsb2NhdGUgYW5kCiAgICAgIHRlbmRzIHRvIGNvdW50ZXJhY3QgcmVtb3ZhbCBvZiBsZWZ0bW9zdHMgZWxzZXdoZXJlLCBhbmQgc28ga2VlcHMKICAgICAgcGF0aHMgc2hvcnRlciB0aGFuIG1pbmltYWxseSBndWFyYW50ZWVkLiAgVGhpcyBkb2Vzbid0IGxvb3AgbXVjaApkaWZmIC0tZ2l0IGEvY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MuYyBiL2NvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLmMKaW5kZXggOTFjNGU3Zi4uNjA5ZWJiYSAxMDA2NDQKLS0tIGEvY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MuYworKysgYi9jb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5jCkBAIC0xNTksOCArMTU5LDggQEAKICNlbmRpZgogaW50ICAgIG5lZG1hbGxvcHQoaW50IHBhcm5vLCBpbnQgdmFsdWUpIFRIUk9XU1BFQwl7IHJldHVybiBuZWRwbWFsbG9wdCgwLCBwYXJubywgdmFsdWUpOyB9CiBpbnQgICAgbmVkbWFsbG9jX3RyaW0oc2l6ZV90IHBhZCkgVEhST1dTUEVDCQkJeyByZXR1cm4gbmVkcG1hbGxvY190cmltKDAsIHBhZCk7IH0KLXZvaWQgICBuZWRtYWxsb2Nfc3RhdHMoKSBUSFJPV1NQRUMJCQkJCXsgbmVkcG1hbGxvY19zdGF0cygwKTsgfQotc2l6ZV90IG5lZG1hbGxvY19mb290cHJpbnQoKSBUSFJPV1NQRUMJCQkJeyByZXR1cm4gbmVkcG1hbGxvY19mb290cHJpbnQoMCk7IH0KK3ZvaWQgICBuZWRtYWxsb2Nfc3RhdHModm9pZCkgVEhST1dTUEVDCQkJCQl7IG5lZHBtYWxsb2Nfc3RhdHMoMCk7IH0KK3NpemVfdCBuZWRtYWxsb2NfZm9vdHByaW50KHZvaWQpIFRIUk9XU1BFQwkJCQl7IHJldHVybiBuZWRwbWFsbG9jX2Zvb3RwcmludCgwKTsgfQogdm9pZCAqKm5lZGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3QgZWxlbXNubywgc2l6ZV90IGVsZW1zaXplLCB2b2lkICoqY2h1bmtzKSBUSFJPV1NQRUMJeyByZXR1cm4gbmVkcGluZGVwZW5kZW50X2NhbGxvYygwLCBlbGVtc25vLCBlbGVtc2l6ZSwgY2h1bmtzKTsgfQogdm9pZCAqKm5lZGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCBlbGVtcywgc2l6ZV90ICpzaXplcywgdm9pZCAqKmNodW5rcykgVEhST1dTUEVDCXsgcmV0dXJuIG5lZHBpbmRlcGVuZGVudF9jb21hbGxvYygwLCBlbGVtcywgc2l6ZXMsIGNodW5rcyk7IH0KIApkaWZmIC0tZ2l0IGEvY29tcGF0L3BvbGwvcG9sbC5jIGIvY29tcGF0L3BvbGwvcG9sbC5jCmluZGV4IDdkMjI2ZWMuLjQ0MTAzMTAgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9wb2xsL3BvbGwuYworKysgYi9jb21wYXQvcG9sbC9wb2xsLmMKQEAgLTU3Niw3ICs1NzYsNyBAQAogCXsKIAkgIC8qIEl0J3MgYSBzb2NrZXQuICAqLwogCSAgV1NBRW51bU5ldHdvcmtFdmVudHMgKChTT0NLRVQpIGgsIE5VTEwsICZldik7Ci0JICBXU0FFdmVudFNlbGVjdCAoKFNPQ0tFVCkgaCwgMCwgMCk7CisJICBXU0FFdmVudFNlbGVjdCAoKFNPQ0tFVCkgaCwgTlVMTCwgMCk7CiAKIAkgIC8qIElmIHdlJ3JlIGx1Y2t5LCBXU0FFbnVtTmV0d29ya0V2ZW50cyBhbHJlYWR5IHByb3ZpZGVkIGEgd2F5CiAJICAgICB0byBkaXN0aW5ndWlzaCBGRF9SRUFEIGFuZCBGRF9BQ0NFUFQ7IHRoaXMgc2F2ZXMgYSByZWN2IGxhdGVyLiAgKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC9yZWdleC9yZWdjb21wLmMgYi9jb21wYXQvcmVnZXgvcmVnY29tcC5jCmluZGV4IGQwMDI1YmQuLmIyYzVkNDYgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9yZWdleC9yZWdjb21wLmMKKysrIGIvY29tcGF0L3JlZ2V4L3JlZ2NvbXAuYwpAQCAtMjYxNyw3ICsyNjE3LDcgQEAKICAgICAgQnVpbGQgdGhlIHJhbmdlIGV4cHJlc3Npb24gd2hpY2ggc3RhcnRzIGZyb20gU1RBUlRfRUxFTSwgYW5kIGVuZHMKICAgICAgYXQgRU5EX0VMRU0uICBUaGUgcmVzdWx0IGFyZSB3cml0dGVuIHRvIE1CQ1NFVCBhbmQgU0JDU0VULgogICAgICBSQU5HRV9BTExPQyBpcyB0aGUgYWxsb2NhdGVkIHNpemUgb2YgbWJjc2V0LT5yYW5nZV9zdGFydHMsIGFuZAotICAgICBtYmNzZXQtPnJhbmdlX2VuZHMsIGlzIGEgcG9pbnRlciBhcmd1bWVudCBzaW5zZSB3ZSBtYXkKKyAgICAgbWJjc2V0LT5yYW5nZV9lbmRzLCBpcyBhIHBvaW50ZXIgYXJndW1lbnQgc2luY2Ugd2UgbWF5CiAgICAgIHVwZGF0ZSBpdC4gICovCiAKIHN0YXRpYyByZWdfZXJyY29kZV90CkBAIC0yNzg4LDcgKzI3ODgsNyBAQAogICBjb25zdCBpbnQzMl90ICpzeW1iX3RhYmxlOwogICBjb25zdCB1bnNpZ25lZCBjaGFyICpleHRyYTsKIAotICAvKiBMb2NhbCBmdW5jdGlvbiBmb3IgcGFyc2VfYnJhY2tldF9leHAgdXNlZCBpbiBfTElCQyBlbnZpcm9uZW1lbnQuCisgIC8qIExvY2FsIGZ1bmN0aW9uIGZvciBwYXJzZV9icmFja2V0X2V4cCB1c2VkIGluIF9MSUJDIGVudmlyb25tZW50LgogICAgICBTZWVrIHRoZSBjb2xsYXRpbmcgc3ltYm9sIGVudHJ5IGNvcnJlc3BvbmRpbmdzIHRvIE5BTUUuCiAgICAgIFJldHVybiB0aGUgaW5kZXggb2YgdGhlIHN5bWJvbCBpbiB0aGUgU1lNQl9UQUJMRS4gICovCiAKQEAgLTI4OTIsMTEgKzI4OTIsMTEgQEAKICAgICAgIHJldHVybiBVSU5UX01BWDsKICAgICB9CiAKLSAgLyogTG9jYWwgZnVuY3Rpb24gZm9yIHBhcnNlX2JyYWNrZXRfZXhwIHVzZWQgaW4gX0xJQkMgZW52aXJvbmVtZW50LgorICAvKiBMb2NhbCBmdW5jdGlvbiBmb3IgcGFyc2VfYnJhY2tldF9leHAgdXNlZCBpbiBfTElCQyBlbnZpcm9ubWVudC4KICAgICAgQnVpbGQgdGhlIHJhbmdlIGV4cHJlc3Npb24gd2hpY2ggc3RhcnRzIGZyb20gU1RBUlRfRUxFTSwgYW5kIGVuZHMKICAgICAgYXQgRU5EX0VMRU0uICBUaGUgcmVzdWx0IGFyZSB3cml0dGVuIHRvIE1CQ1NFVCBhbmQgU0JDU0VULgogICAgICBSQU5HRV9BTExPQyBpcyB0aGUgYWxsb2NhdGVkIHNpemUgb2YgbWJjc2V0LT5yYW5nZV9zdGFydHMsIGFuZAotICAgICBtYmNzZXQtPnJhbmdlX2VuZHMsIGlzIGEgcG9pbnRlciBhcmd1bWVudCBzaW5zZSB3ZSBtYXkKKyAgICAgbWJjc2V0LT5yYW5nZV9lbmRzLCBpcyBhIHBvaW50ZXIgYXJndW1lbnQgc2luY2Ugd2UgbWF5CiAgICAgIHVwZGF0ZSBpdC4gICovCiAKICAgYXV0byBpbmxpbmUgcmVnX2VycmNvZGVfdApAQCAtMjk3NiwxMSArMjk3NiwxMSBAQAogICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOwogICAgIH0KIAotICAvKiBMb2NhbCBmdW5jdGlvbiBmb3IgcGFyc2VfYnJhY2tldF9leHAgdXNlZCBpbiBfTElCQyBlbnZpcm9uZW1lbnQuCisgIC8qIExvY2FsIGZ1bmN0aW9uIGZvciBwYXJzZV9icmFja2V0X2V4cCB1c2VkIGluIF9MSUJDIGVudmlyb25tZW50LgogICAgICBCdWlsZCB0aGUgY29sbGF0aW5nIGVsZW1lbnQgd2hpY2ggaXMgcmVwcmVzZW50ZWQgYnkgTkFNRS4KICAgICAgVGhlIHJlc3VsdCBhcmUgd3JpdHRlbiB0byBNQkNTRVQgYW5kIFNCQ1NFVC4KICAgICAgQ09MTF9TWU1fQUxMT0MgaXMgdGhlIGFsbG9jYXRlZCBzaXplIG9mIG1iY3NldC0+Y29sbF9zeW0sIGlzIGEKLSAgICAgcG9pbnRlciBhcmd1bWVudCBzaW5zZSB3ZSBtYXkgdXBkYXRlIGl0LiAgKi8KKyAgICAgcG9pbnRlciBhcmd1bWVudCBzaW5jZSB3ZSBtYXkgdXBkYXRlIGl0LiAgKi8KIAogICBhdXRvIGlubGluZSByZWdfZXJyY29kZV90CiAgIF9fYXR0cmlidXRlICgoYWx3YXlzX2lubGluZSkpCkBAIC0zNDE5LDcgKzM0MTksNyBAQAogICAgICBCdWlsZCB0aGUgZXF1aXZhbGVuY2UgY2xhc3Mgd2hpY2ggaXMgcmVwcmVzZW50ZWQgYnkgTkFNRS4KICAgICAgVGhlIHJlc3VsdCBhcmUgd3JpdHRlbiB0byBNQkNTRVQgYW5kIFNCQ1NFVC4KICAgICAgRVFVSVZfQ0xBU1NfQUxMT0MgaXMgdGhlIGFsbG9jYXRlZCBzaXplIG9mIG1iY3NldC0+ZXF1aXZfY2xhc3NlcywKLSAgICAgaXMgYSBwb2ludGVyIGFyZ3VtZW50IHNpbnNlIHdlIG1heSB1cGRhdGUgaXQuICAqLworICAgICBpcyBhIHBvaW50ZXIgYXJndW1lbnQgc2luY2Ugd2UgbWF5IHVwZGF0ZSBpdC4gICovCiAKIHN0YXRpYyByZWdfZXJyY29kZV90CiAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KQEAgLTM1MTUsNyArMzUxNSw3IEBACiAgICAgIEJ1aWxkIHRoZSBjaGFyYWN0ZXIgY2xhc3Mgd2hpY2ggaXMgcmVwcmVzZW50ZWQgYnkgTkFNRS4KICAgICAgVGhlIHJlc3VsdCBhcmUgd3JpdHRlbiB0byBNQkNTRVQgYW5kIFNCQ1NFVC4KICAgICAgQ0hBUl9DTEFTU19BTExPQyBpcyB0aGUgYWxsb2NhdGVkIHNpemUgb2YgbWJjc2V0LT5jaGFyX2NsYXNzZXMsCi0gICAgIGlzIGEgcG9pbnRlciBhcmd1bWVudCBzaW5zZSB3ZSBtYXkgdXBkYXRlIGl0LiAgKi8KKyAgICAgaXMgYSBwb2ludGVyIGFyZ3VtZW50IHNpbmNlIHdlIG1heSB1cGRhdGUgaXQuICAqLwogCiBzdGF0aWMgcmVnX2VycmNvZGVfdAogI2lmZGVmIFJFX0VOQUJMRV9JMThOCmRpZmYgLS1naXQgYS9jb21wYXQvcmVnZXgvcmVnZXhlYy5jIGIvY29tcGF0L3JlZ2V4L3JlZ2V4ZWMuYwppbmRleCAwMTk0OTY1Li5lYjVlMWQ0IDEwMDY0NAotLS0gYS9jb21wYXQvcmVnZXgvcmVnZXhlYy5jCisrKyBiL2NvbXBhdC9yZWdleC9yZWdleGVjLmMKQEAgLTQ1NSw3ICs0NTUsNyBAQAogCiAgIHJ2YWwgPSAwOwogCi0gIC8qIEkgaG9wZSB3ZSBuZWVkbid0IGZpbGwgdGhlciByZWdzIHdpdGggLTEncyB3aGVuIG5vIG1hdGNoIHdhcyBmb3VuZC4gICovCisgIC8qIEkgaG9wZSB3ZSBuZWVkbid0IGZpbGwgdGhlaXIgcmVncyB3aXRoIC0xJ3Mgd2hlbiBubyBtYXRjaCB3YXMgZm91bmQuICAqLwogICBpZiAocmVzdWx0ICE9IFJFR19OT0VSUk9SKQogICAgIHJ2YWwgPSAtMTsKICAgZWxzZSBpZiAocmVncyAhPSBOVUxMKQpAQCAtMTA3MSw3ICsxMDcxLDcgQEAKICAgIEZMX0xPTkdFU1RfTUFUQ0ggbWVhbnMgd2Ugd2FudCB0aGUgUE9TSVggbG9uZ2VzdCBtYXRjaGluZy4KICAgIElmIFBfTUFUQ0hfRklSU1QgaXMgbm90IE5VTEwsIGFuZCB0aGUgbWF0Y2ggZmFpbHMsIGl0IGlzIHNldCB0byB0aGUKICAgIG5leHQgcGxhY2Ugd2hlcmUgd2UgbWF5IHdhbnQgdG8gdHJ5IG1hdGNoaW5nLgotICAgTm90ZSB0aGF0IHRoZSBtYXRjaGVyIGFzc3VtZSB0aGF0IHRoZSBtYWNoaW5nIHN0YXJ0cyBmcm9tIHRoZSBjdXJyZW50CisgICBOb3RlIHRoYXQgdGhlIG1hdGNoZXIgYXNzdW1lIHRoYXQgdGhlIG1hdGNoaW5nIHN0YXJ0cyBmcm9tIHRoZSBjdXJyZW50CiAgICBpbmRleCBvZiB0aGUgYnVmZmVyLiAgKi8KIAogc3RhdGljIGludApAQCAtMjIzOSw3ICsyMjM5LDcgQEAKIAkJCSAgICBkZmEtPm5leHRzW25vZGVfaWR4XSkpCiAgICAgLyogVGhlIG5vZGUgY2FuJ3QgYWNjZXB0IHRoZSBgbXVsdGkgYnl0ZScsIG9yIHRoZQogICAgICAgIGRlc3RpbmF0aW9uIHdhcyBhbHJlYWR5IHRocm93biBhd2F5LCB0aGVuIHRoZSBub2RlCi0gICAgICAgY291bGQndCBhY2NlcHQgdGhlIGN1cnJlbnQgaW5wdXQgYG11bHRpIGJ5dGUnLiAgICovCisgICAgICAgY291bGRuJ3QgYWNjZXB0IHRoZSBjdXJyZW50IGlucHV0IGBtdWx0aSBieXRlJy4gICAqLwogICAgIG5hY2NlcHRlZCA9IDA7CiAgIC8qIE90aGVyd2lzZSwgaXQgaXMgc3VyZSB0aGF0IHRoZSBub2RlIGNvdWxkIGFjY2VwdAogICAgICBgbmFjY2VwdGVkJyBieXRlcyBpbnB1dC4gICovCkBAIC0yMzEzLDcgKzIzMTMsNyBAQAogfQogCiAvKiBVcGRhdGUgdGhlIHN0YXRlX2xvZyBpZiB3ZSBuZWVkICovCi1yZV9kZmFzdGF0ZV90ICoKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICoKIGludGVybmFsX2Z1bmN0aW9uCiBtZXJnZV9zdGF0ZV93aXRoX2xvZyAocmVnX2VycmNvZGVfdCAqZXJyLCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCiAJCSAgICAgIHJlX2RmYXN0YXRlX3QgKm5leHRfc3RhdGUpCkBAIC0yMzI2LDcgKzIzMjYsNyBAQAogICAgICAgbWN0eC0+c3RhdGVfbG9nW2N1cl9pZHhdID0gbmV4dF9zdGF0ZTsKICAgICAgIG1jdHgtPnN0YXRlX2xvZ190b3AgPSBjdXJfaWR4OwogICAgIH0KLSAgZWxzZSBpZiAobWN0eC0+c3RhdGVfbG9nW2N1cl9pZHhdID09IDApCisgIGVsc2UgaWYgKG1jdHgtPnN0YXRlX2xvZ1tjdXJfaWR4XSA9PSBOVUxMKQogICAgIHsKICAgICAgIG1jdHgtPnN0YXRlX2xvZ1tjdXJfaWR4XSA9IG5leHRfc3RhdGU7CiAgICAgfQpAQCAtMjM5Miw3ICsyMzkyLDcgQEAKIC8qIFNraXAgYnl0ZXMgaW4gdGhlIGlucHV0IHRoYXQgY29ycmVzcG9uZCB0byBwYXJ0IG9mIGEKICAgIG11bHRpLWJ5dGUgbWF0Y2gsIHRoZW4gbG9vayBpbiB0aGUgbG9nIGZvciBhIHN0YXRlCiAgICBmcm9tIHdoaWNoIHRvIHJlc3RhcnQgbWF0Y2hpbmcuICAqLwotcmVfZGZhc3RhdGVfdCAqCitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqCiBpbnRlcm5hbF9mdW5jdGlvbgogZmluZF9yZWNvdmVyX3N0YXRlIChyZWdfZXJyY29kZV90ICplcnIsIHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCkKIHsKZGlmZiAtLWdpdCBhL2NvbXBhdC90ZXJtaW5hbC5jIGIvY29tcGF0L3Rlcm1pbmFsLmMKaW5kZXggOWI1ZTNkMS4uMzEzODk3ZCAxMDA2NDQKLS0tIGEvY29tcGF0L3Rlcm1pbmFsLmMKKysrIGIvY29tcGF0L3Rlcm1pbmFsLmMKQEAgLTMsNyArMyw3IEBACiAjaW5jbHVkZSAic2lnY2hhaW4uaCIKICNpbmNsdWRlICJzdHJidWYuaCIKIAotI2lmIGRlZmluZWQoSEFWRV9ERVZfVFRZKSB8fCBkZWZpbmVkKFdJTjMyKQorI2lmIGRlZmluZWQoSEFWRV9ERVZfVFRZKSB8fCBkZWZpbmVkKEdJVF9XSU5ET1dTX05BVElWRSkKIAogc3RhdGljIHZvaWQgcmVzdG9yZV90ZXJtKHZvaWQpOwogCkBAIC01Myw3ICs1Myw3IEBACiAJcmV0dXJuIC0xOwogfQogCi0jZWxpZiBkZWZpbmVkKFdJTjMyKQorI2VsaWYgZGVmaW5lZChHSVRfV0lORE9XU19OQVRJVkUpCiAKICNkZWZpbmUgSU5QVVRfUEFUSCAiQ09OSU4kIgogI2RlZmluZSBPVVRQVVRfUEFUSCAiQ09OT1VUJCIKZGlmZiAtLWdpdCBhL2NvbXBhdC91bnNldGVudi5jIGIvY29tcGF0L3Vuc2V0ZW52LmMKaW5kZXggZWIyOWY1ZS4uYmY1ZmQ3MCAxMDA2NDQKLS0tIGEvY29tcGF0L3Vuc2V0ZW52LmMKKysrIGIvY29tcGF0L3Vuc2V0ZW52LmMKQEAgLTIsNyArMiw5IEBACiAKIHZvaWQgZ2l0dW5zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUpCiB7CisjaWYgIWRlZmluZWQoX19NSU5HVzMyX18pCiAgICAgIGV4dGVybiBjaGFyICoqZW52aXJvbjsKKyNlbmRpZgogICAgICBpbnQgc3JjLCBkc3Q7CiAgICAgIHNpemVfdCBubWxuOwogCmRpZmYgLS1naXQgYS9jb21wYXQvd2luMzIuaCBiL2NvbXBhdC93aW4zMi5oCmluZGV4IDhjZTkxMDQuLmE5N2U4ODAgMTAwNjQ0Ci0tLSBhL2NvbXBhdC93aW4zMi5oCisrKyBiL2NvbXBhdC93aW4zMi5oCkBAIC0yLDcgKzIsNyBAQAogI2RlZmluZSBXSU4zMl9ICiAKIC8qIGNvbW1vbiBXaW4zMiBmdW5jdGlvbnMgZm9yIE1pbkdXIGFuZCBDeWd3aW4gKi8KLSNpZm5kZWYgV0lOMzIgICAgICAgICAvKiBOb3QgZGVmaW5lZCBieSBDeWd3aW4gKi8KKyNpZm5kZWYgR0lUX1dJTkRPV1NfTkFUSVZFCS8qIE5vdCBkZWZpbmVkIGZvciBDeWd3aW4gKi8KICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyL3B0aHJlYWQuYyBiL2NvbXBhdC93aW4zMi9wdGhyZWFkLmMKaW5kZXggMDEwZTg3NS4uZTE4ZjVjNiAxMDA2NDQKLS0tIGEvY29tcGF0L3dpbjMyL3B0aHJlYWQuYworKysgYi9jb21wYXQvd2luMzIvcHRocmVhZC5jCkBAIC01Miw3ICs1Miw3IEBACiAKIHB0aHJlYWRfdCBwdGhyZWFkX3NlbGYodm9pZCkKIHsKLQlwdGhyZWFkX3QgdCA9IHsgMCB9OworCXB0aHJlYWRfdCB0ID0geyBOVUxMIH07CiAJdC50aWQgPSBHZXRDdXJyZW50VGhyZWFkSWQoKTsKIAlyZXR1cm4gdDsKIH0KZGlmZiAtLWdpdCBhL2NvbXBhdC93aW4zMm1tYXAuYyBiL2NvbXBhdC93aW4zMm1tYXAuYwppbmRleCA2MWQyZWY4Li44MGE4YzlhIDEwMDY0NAotLS0gYS9jb21wYXQvd2luMzJtbWFwLmMKKysrIGIvY29tcGF0L3dpbjMybW1hcC5jCkBAIC0yMSw4ICsyMSw4IEBACiAJaWYgKCEoZmxhZ3MgJiBNQVBfUFJJVkFURSkpCiAJCWRpZSgiSW52YWxpZCB1c2FnZSBvZiBtbWFwIHdoZW4gYnVpbHQgd2l0aCBVU0VfV0lOMzJfTU1BUCIpOwogCi0JaG1hcCA9IENyZWF0ZUZpbGVNYXBwaW5nKChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpLCAwLCBQQUdFX1dSSVRFQ09QWSwKLQkJMCwgMCwgMCk7CisJaG1hcCA9IENyZWF0ZUZpbGVNYXBwaW5nKChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpLCBOVUxMLAorCQlQQUdFX1dSSVRFQ09QWSwgMCwgMCwgTlVMTCk7CiAKIAlpZiAoIWhtYXApCiAJCXJldHVybiBNQVBfRkFJTEVEOwpkaWZmIC0tZ2l0IGEvY29uZmlnLmMgYi9jb25maWcuYwppbmRleCBhZWZkODBiLi5lMTNhN2I2IDEwMDY0NAotLS0gYS9jb25maWcuYworKysgYi9jb25maWcuYwpAQCAtMTAsMjAgKzEwLDY5IEBACiAjaW5jbHVkZSAic3RyYnVmLmgiCiAjaW5jbHVkZSAicXVvdGUuaCIKIAotdHlwZWRlZiBzdHJ1Y3QgY29uZmlnX2ZpbGUgewotCXN0cnVjdCBjb25maWdfZmlsZSAqcHJldjsKLQlGSUxFICpmOworc3RydWN0IGNvbmZpZ19zb3VyY2UgeworCXN0cnVjdCBjb25maWdfc291cmNlICpwcmV2OworCXVuaW9uIHsKKwkJRklMRSAqZmlsZTsKKwkJc3RydWN0IGNvbmZpZ19idWYgeworCQkJY29uc3QgY2hhciAqYnVmOworCQkJc2l6ZV90IGxlbjsKKwkJCXNpemVfdCBwb3M7CisJCX0gYnVmOworCX0gdTsKIAljb25zdCBjaGFyICpuYW1lOworCWludCBkaWVfb25fZXJyb3I7CiAJaW50IGxpbmVucjsKIAlpbnQgZW9mOwogCXN0cnVjdCBzdHJidWYgdmFsdWU7CiAJc3RydWN0IHN0cmJ1ZiB2YXI7Ci19IGNvbmZpZ19maWxlOwogCi1zdGF0aWMgY29uZmlnX2ZpbGUgKmNmOworCWludCAoKmZnZXRjKShzdHJ1Y3QgY29uZmlnX3NvdXJjZSAqYyk7CisJaW50ICgqdW5nZXRjKShpbnQgYywgc3RydWN0IGNvbmZpZ19zb3VyY2UgKmNvbmYpOworCWxvbmcgKCpmdGVsbCkoc3RydWN0IGNvbmZpZ19zb3VyY2UgKmMpOworfTsKKworc3RhdGljIHN0cnVjdCBjb25maWdfc291cmNlICpjZjsKIAogc3RhdGljIGludCB6bGliX2NvbXByZXNzaW9uX3NlZW47CiAKK3N0YXRpYyBpbnQgY29uZmlnX2ZpbGVfZmdldGMoc3RydWN0IGNvbmZpZ19zb3VyY2UgKmNvbmYpCit7CisJcmV0dXJuIGZnZXRjKGNvbmYtPnUuZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQgY29uZmlnX2ZpbGVfdW5nZXRjKGludCBjLCBzdHJ1Y3QgY29uZmlnX3NvdXJjZSAqY29uZikKK3sKKwlyZXR1cm4gdW5nZXRjKGMsIGNvbmYtPnUuZmlsZSk7Cit9CisKK3N0YXRpYyBsb25nIGNvbmZpZ19maWxlX2Z0ZWxsKHN0cnVjdCBjb25maWdfc291cmNlICpjb25mKQoreworCXJldHVybiBmdGVsbChjb25mLT51LmZpbGUpOworfQorCisKK3N0YXRpYyBpbnQgY29uZmlnX2J1Zl9mZ2V0YyhzdHJ1Y3QgY29uZmlnX3NvdXJjZSAqY29uZikKK3sKKwlpZiAoY29uZi0+dS5idWYucG9zIDwgY29uZi0+dS5idWYubGVuKQorCQlyZXR1cm4gY29uZi0+dS5idWYuYnVmW2NvbmYtPnUuYnVmLnBvcysrXTsKKworCXJldHVybiBFT0Y7Cit9CisKK3N0YXRpYyBpbnQgY29uZmlnX2J1Zl91bmdldGMoaW50IGMsIHN0cnVjdCBjb25maWdfc291cmNlICpjb25mKQoreworCWlmIChjb25mLT51LmJ1Zi5wb3MgPiAwKQorCQlyZXR1cm4gY29uZi0+dS5idWYuYnVmWy0tY29uZi0+dS5idWYucG9zXTsKKworCXJldHVybiBFT0Y7Cit9CisKK3N0YXRpYyBsb25nIGNvbmZpZ19idWZfZnRlbGwoc3RydWN0IGNvbmZpZ19zb3VyY2UgKmNvbmYpCit7CisJcmV0dXJuIGNvbmYtPnUuYnVmLnBvczsKK30KKwogI2RlZmluZSBNQVhfSU5DTFVERV9ERVBUSCAxMAogc3RhdGljIGNvbnN0IGNoYXIgaW5jbHVkZV9kZXB0aF9hZHZpY2VbXSA9CiAiZXhjZWVkZWQgbWF4aW11bSBpbmNsdWRlIGRlcHRoICglZCkgd2hpbGUgaW5jbHVkaW5nXG4iCkBAIC01OCw3ICsxMDcsNyBAQAogCQlwYXRoID0gYnVmLmJ1ZjsKIAl9CiAKLQlpZiAoIWFjY2Vzc19vcl9kaWUocGF0aCwgUl9PSykpIHsKKwlpZiAoIWFjY2Vzc19vcl9kaWUocGF0aCwgUl9PSywgMCkpIHsKIAkJaWYgKCsraW5jLT5kZXB0aCA+IE1BWF9JTkNMVURFX0RFUFRIKQogCQkJZGllKGluY2x1ZGVfZGVwdGhfYWR2aWNlLCBNQVhfSU5DTFVERV9ERVBUSCwgcGF0aCwKIAkJCSAgICBjZiAmJiBjZi0+bmFtZSA/IGNmLT5uYW1lIDogInRoZSBjb21tYW5kIGxpbmUiKTsKQEAgLTE2OCwyNiArMjE3LDIxIEBACiAKIHN0YXRpYyBpbnQgZ2V0X25leHRfY2hhcih2b2lkKQogewotCWludCBjOwotCUZJTEUgKmY7CisJaW50IGMgPSBjZi0+ZmdldGMoY2YpOwogCi0JYyA9ICdcbic7Ci0JaWYgKGNmICYmICgoZiA9IGNmLT5mKSAhPSBOVUxMKSkgewotCQljID0gZmdldGMoZik7Ci0JCWlmIChjID09ICdccicpIHsKLQkJCS8qIERPUyBsaWtlIHN5c3RlbXMgKi8KLQkJCWMgPSBmZ2V0YyhmKTsKLQkJCWlmIChjICE9ICdcbicpIHsKLQkJCQl1bmdldGMoYywgZik7Ci0JCQkJYyA9ICdccic7Ci0JCQl9CisJaWYgKGMgPT0gJ1xyJykgeworCQkvKiBET1MgbGlrZSBzeXN0ZW1zICovCisJCWMgPSBjZi0+ZmdldGMoY2YpOworCQlpZiAoYyAhPSAnXG4nKSB7CisJCQljZi0+dW5nZXRjKGMsIGNmKTsKKwkJCWMgPSAnXHInOwogCQl9Ci0JCWlmIChjID09ICdcbicpCi0JCQljZi0+bGluZW5yKys7Ci0JCWlmIChjID09IEVPRikgewotCQkJY2YtPmVvZiA9IDE7Ci0JCQljID0gJ1xuJzsKLQkJfQorCX0KKwlpZiAoYyA9PSAnXG4nKQorCQljZi0+bGluZW5yKys7CisJaWYgKGMgPT0gRU9GKSB7CisJCWNmLT5lb2YgPSAxOworCQljID0gJ1xuJzsKIAl9CiAJcmV0dXJuIGM7CiB9CkBAIC0zMzksNyArMzgzLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgZ2l0X3BhcnNlX2ZpbGUoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGdpdF9wYXJzZV9zb3VyY2UoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpCiB7CiAJaW50IGNvbW1lbnQgPSAwOwogCWludCBiYXNlbGVuID0gMDsKQEAgLTM5OSw3ICs0NDMsMTAgQEAKIAkJaWYgKGdldF92YWx1ZShmbiwgZGF0YSwgdmFyKSA8IDApCiAJCQlicmVhazsKIAl9Ci0JZGllKCJiYWQgY29uZmlnIGZpbGUgbGluZSAlZCBpbiAlcyIsIGNmLT5saW5lbnIsIGNmLT5uYW1lKTsKKwlpZiAoY2YtPmRpZV9vbl9lcnJvcikKKwkJZGllKCJiYWQgY29uZmlnIGZpbGUgbGluZSAlZCBpbiAlcyIsIGNmLT5saW5lbnIsIGNmLT5uYW1lKTsKKwllbHNlCisJCXJldHVybiBlcnJvcigiYmFkIGNvbmZpZyBmaWxlIGxpbmUgJWQgaW4gJXMiLCBjZi0+bGluZW5yLCBjZi0+bmFtZSk7CiB9CiAKIHN0YXRpYyBpbnQgcGFyc2VfdW5pdF9mYWN0b3IoY29uc3QgY2hhciAqZW5kLCB1aW50bWF4X3QgKnZhbCkKQEAgLTU2Niw3ICs2MTMsMjAgQEAKIAkJdHJ1c3RfY3RpbWUgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CiAJCXJldHVybiAwOwogCX0KLQlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnN0YXRpbmZvIikpIHsKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnN0YXRpbmZvIikgfHwKKwkgICAgIXN0cmNtcCh2YXIsICJjb3JlLmNoZWNrc3RhdCIpKSB7CisJCS8qCisJCSAqIE5FRURTV09SSzogc3RhdGluZm8gd2FzIGEgdHlwbyBpbiB2MS44LjIgdGhhdCBoYXMKKwkJICogbmV2ZXIgYmVlbiBhZHZlcnRpc2VkLiAgd2Ugd2lsbCByZW1vdmUgaXQgYXQgR2l0CisJCSAqIDIuMCBib3VuZGFyeS4KKwkJICovCisJCWlmICghc3RyY21wKHZhciwgImNvcmUuc3RhdGluZm8iKSkgeworCQkJc3RhdGljIGludCB3YXJuZWQ7CisJCQlpZiAoIXdhcm5lZCsrKSB7CisJCQkJd2FybmluZygiJ2NvcmUuc3RhdGluZm8nIHdpbGwgYmUgcmVtb3ZlZCBpbiBHaXQgMi4wOyAiCisJCQkJCSJ1c2UgJ2NvcmUuY2hlY2tzdGF0JyBpbnN0ZWFkLiIpOworCQkJfQorCQl9CiAJCWlmICghc3RyY2FzZWNtcCh2YWx1ZSwgImRlZmF1bHQiKSkKIAkJCWNoZWNrX3N0YXQgPSAxOwogCQllbHNlIGlmICghc3RyY2FzZWNtcCh2YWx1ZSwgIm1pbmltYWwiKSkKQEAgLTY3NSw5ICs3MzUsNiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmxvZ3BhY2thY2Nlc3MiKSkKLQkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZsb2dfcGFja19hY2Nlc3MsIHZhciwgdmFsdWUpOwotCiAJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5hdXRvY3JsZiIpKSB7CiAJCWlmICh2YWx1ZSAmJiAhc3RyY2FzZWNtcCh2YWx1ZSwgImlucHV0IikpIHsKIAkJCWlmIChjb3JlX2VvbCA9PSBFT0xfQ1JMRikKQEAgLTg5Niw2ICs5NTMsMzMgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIEFsbCBzb3VyY2Ugc3BlY2lmaWMgZmllbGRzIGluIHRoZSB1bmlvbiwgZGllX29uX2Vycm9yLCBuYW1lIGFuZCB0aGUgY2FsbGJhY2tzCisgKiBmZ2V0YywgdW5nZXRjLCBmdGVsbCBvZiB0b3AgbmVlZCB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgY2FsbGluZworICogdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIGludCBkb19jb25maWdfZnJvbShzdHJ1Y3QgY29uZmlnX3NvdXJjZSAqdG9wLCBjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCisJLyogcHVzaCBjb25maWctZmlsZSBwYXJzaW5nIHN0YXRlIHN0YWNrICovCisJdG9wLT5wcmV2ID0gY2Y7CisJdG9wLT5saW5lbnIgPSAxOworCXRvcC0+ZW9mID0gMDsKKwlzdHJidWZfaW5pdCgmdG9wLT52YWx1ZSwgMTAyNCk7CisJc3RyYnVmX2luaXQoJnRvcC0+dmFyLCAxMDI0KTsKKwljZiA9IHRvcDsKKworCXJldCA9IGdpdF9wYXJzZV9zb3VyY2UoZm4sIGRhdGEpOworCisJLyogcG9wIGNvbmZpZy1maWxlIHBhcnNpbmcgc3RhdGUgc3RhY2sgKi8KKwlzdHJidWZfcmVsZWFzZSgmdG9wLT52YWx1ZSk7CisJc3RyYnVmX3JlbGVhc2UoJnRvcC0+dmFyKTsKKwljZiA9IHRvcC0+cHJldjsKKworCXJldHVybiByZXQ7Cit9CisKIGludCBnaXRfY29uZmlnX2Zyb21fZmlsZShjb25maWdfZm5fdCBmbiwgY29uc3QgY2hhciAqZmlsZW5hbWUsIHZvaWQgKmRhdGEpCiB7CiAJaW50IHJldDsKQEAgLTkwMywzMCArOTg3LDc0IEBACiAKIAlyZXQgPSAtMTsKIAlpZiAoZikgewotCQljb25maWdfZmlsZSB0b3A7CisJCXN0cnVjdCBjb25maWdfc291cmNlIHRvcDsKIAotCQkvKiBwdXNoIGNvbmZpZy1maWxlIHBhcnNpbmcgc3RhdGUgc3RhY2sgKi8KLQkJdG9wLnByZXYgPSBjZjsKLQkJdG9wLmYgPSBmOworCQl0b3AudS5maWxlID0gZjsKIAkJdG9wLm5hbWUgPSBmaWxlbmFtZTsKLQkJdG9wLmxpbmVuciA9IDE7Ci0JCXRvcC5lb2YgPSAwOwotCQlzdHJidWZfaW5pdCgmdG9wLnZhbHVlLCAxMDI0KTsKLQkJc3RyYnVmX2luaXQoJnRvcC52YXIsIDEwMjQpOwotCQljZiA9ICZ0b3A7CisJCXRvcC5kaWVfb25fZXJyb3IgPSAxOworCQl0b3AuZmdldGMgPSBjb25maWdfZmlsZV9mZ2V0YzsKKwkJdG9wLnVuZ2V0YyA9IGNvbmZpZ19maWxlX3VuZ2V0YzsKKwkJdG9wLmZ0ZWxsID0gY29uZmlnX2ZpbGVfZnRlbGw7CiAKLQkJcmV0ID0gZ2l0X3BhcnNlX2ZpbGUoZm4sIGRhdGEpOwotCi0JCS8qIHBvcCBjb25maWctZmlsZSBwYXJzaW5nIHN0YXRlIHN0YWNrICovCi0JCXN0cmJ1Zl9yZWxlYXNlKCZ0b3AudmFsdWUpOwotCQlzdHJidWZfcmVsZWFzZSgmdG9wLnZhcik7Ci0JCWNmID0gdG9wLnByZXY7CisJCXJldCA9IGRvX2NvbmZpZ19mcm9tKCZ0b3AsIGZuLCBkYXRhKTsKIAogCQlmY2xvc2UoZik7CiAJfQogCXJldHVybiByZXQ7CiB9CiAKK2ludCBnaXRfY29uZmlnX2Zyb21fYnVmKGNvbmZpZ19mbl90IGZuLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpidWYsCisJCQlzaXplX3QgbGVuLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjb25maWdfc291cmNlIHRvcDsKKworCXRvcC51LmJ1Zi5idWYgPSBidWY7CisJdG9wLnUuYnVmLmxlbiA9IGxlbjsKKwl0b3AudS5idWYucG9zID0gMDsKKwl0b3AubmFtZSA9IG5hbWU7CisJdG9wLmRpZV9vbl9lcnJvciA9IDA7CisJdG9wLmZnZXRjID0gY29uZmlnX2J1Zl9mZ2V0YzsKKwl0b3AudW5nZXRjID0gY29uZmlnX2J1Zl91bmdldGM7CisJdG9wLmZ0ZWxsID0gY29uZmlnX2J1Zl9mdGVsbDsKKworCXJldHVybiBkb19jb25maWdfZnJvbSgmdG9wLCBmbiwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2NvbmZpZ19mcm9tX2Jsb2Jfc2hhMShjb25maWdfZm5fdCBmbiwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCSAgICAgdm9pZCAqZGF0YSkKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJY2hhciAqYnVmOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlpbnQgcmV0OworCisJYnVmID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZzaXplKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gbG9hZCBjb25maWcgYmxvYiBvYmplY3QgJyVzJyIsIG5hbWUpOworCWlmICh0eXBlICE9IE9CSl9CTE9CKSB7CisJCWZyZWUoYnVmKTsKKwkJcmV0dXJuIGVycm9yKCJyZWZlcmVuY2UgJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGJsb2IiLCBuYW1lKTsKKwl9CisKKwlyZXQgPSBnaXRfY29uZmlnX2Zyb21fYnVmKGZuLCBuYW1lLCBidWYsIHNpemUsIGRhdGEpOworCWZyZWUoYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2NvbmZpZ19mcm9tX2Jsb2JfcmVmKGNvbmZpZ19mbl90IGZuLAorCQkJCSAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICB2b2lkICpkYXRhKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwlpZiAoZ2V0X3NoYTEobmFtZSwgc2hhMSkgPCAwKQorCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byByZXNvbHZlIGNvbmZpZyBibG9iICclcyciLCBuYW1lKTsKKwlyZXR1cm4gZ2l0X2NvbmZpZ19mcm9tX2Jsb2Jfc2hhMShmbiwgbmFtZSwgc2hhMSwgZGF0YSk7Cit9CisKIGNvbnN0IGNoYXIgKmdpdF9ldGNfZ2l0Y29uZmlnKHZvaWQpCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgKnN5c3RlbV93aWRlOwpAQCAtOTU0LDIzICsxMDgyLDIzIEBACiAKIAlob21lX2NvbmZpZ19wYXRocygmdXNlcl9jb25maWcsICZ4ZGdfY29uZmlnLCAiY29uZmlnIik7CiAKLQlpZiAoZ2l0X2NvbmZpZ19zeXN0ZW0oKSAmJiAhYWNjZXNzX29yX2RpZShnaXRfZXRjX2dpdGNvbmZpZygpLCBSX09LKSkgeworCWlmIChnaXRfY29uZmlnX3N5c3RlbSgpICYmICFhY2Nlc3Nfb3JfZGllKGdpdF9ldGNfZ2l0Y29uZmlnKCksIFJfT0ssIDApKSB7CiAJCXJldCArPSBnaXRfY29uZmlnX2Zyb21fZmlsZShmbiwgZ2l0X2V0Y19naXRjb25maWcoKSwKIAkJCQkJICAgIGRhdGEpOwogCQlmb3VuZCArPSAxOwogCX0KIAotCWlmICh4ZGdfY29uZmlnICYmICFhY2Nlc3Nfb3JfZGllKHhkZ19jb25maWcsIFJfT0spKSB7CisJaWYgKHhkZ19jb25maWcgJiYgIWFjY2Vzc19vcl9kaWUoeGRnX2NvbmZpZywgUl9PSywgQUNDRVNTX0VBQ0NFU19PSykpIHsKIAkJcmV0ICs9IGdpdF9jb25maWdfZnJvbV9maWxlKGZuLCB4ZGdfY29uZmlnLCBkYXRhKTsKIAkJZm91bmQgKz0gMTsKIAl9CiAKLQlpZiAodXNlcl9jb25maWcgJiYgIWFjY2Vzc19vcl9kaWUodXNlcl9jb25maWcsIFJfT0spKSB7CisJaWYgKHVzZXJfY29uZmlnICYmICFhY2Nlc3Nfb3JfZGllKHVzZXJfY29uZmlnLCBSX09LLCBBQ0NFU1NfRUFDQ0VTX09LKSkgewogCQlyZXQgKz0gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZm4sIHVzZXJfY29uZmlnLCBkYXRhKTsKIAkJZm91bmQgKz0gMTsKIAl9CiAKLQlpZiAocmVwb19jb25maWcgJiYgIWFjY2Vzc19vcl9kaWUocmVwb19jb25maWcsIFJfT0spKSB7CisJaWYgKHJlcG9fY29uZmlnICYmICFhY2Nlc3Nfb3JfZGllKHJlcG9fY29uZmlnLCBSX09LLCAwKSkgewogCQlyZXQgKz0gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZm4sIHJlcG9fY29uZmlnLCBkYXRhKTsKIAkJZm91bmQgKz0gMTsKIAl9CkBAIC05OTIsNyArMTEyMCw5IEBACiB9CiAKIGludCBnaXRfY29uZmlnX3dpdGhfb3B0aW9ucyhjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSwKLQkJCSAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHJlc3BlY3RfaW5jbHVkZXMpCisJCQkgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkgICAgY29uc3QgY2hhciAqYmxvYl9yZWYsCisJCQkgICAgaW50IHJlc3BlY3RfaW5jbHVkZXMpCiB7CiAJY2hhciAqcmVwb19jb25maWcgPSBOVUxMOwogCWludCByZXQ7CkBAIC0xMDExLDYgKzExNDEsOCBAQAogCSAqLwogCWlmIChmaWxlbmFtZSkKIAkJcmV0dXJuIGdpdF9jb25maWdfZnJvbV9maWxlKGZuLCBmaWxlbmFtZSwgZGF0YSk7CisJZWxzZSBpZiAoYmxvYl9yZWYpCisJCXJldHVybiBnaXRfY29uZmlnX2Zyb21fYmxvYl9yZWYoZm4sIGJsb2JfcmVmLCBkYXRhKTsKIAogCXJlcG9fY29uZmlnID0gZ2l0X3BhdGhkdXAoImNvbmZpZyIpOwogCXJldCA9IGdpdF9jb25maWdfZWFybHkoZm4sIGRhdGEsIHJlcG9fY29uZmlnKTsKQEAgLTEwMjEsNyArMTE1Myw3IEBACiAKIGludCBnaXRfY29uZmlnKGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhKQogewotCXJldHVybiBnaXRfY29uZmlnX3dpdGhfb3B0aW9ucyhmbiwgZGF0YSwgTlVMTCwgMSk7CisJcmV0dXJuIGdpdF9jb25maWdfd2l0aF9vcHRpb25zKGZuLCBkYXRhLCBOVUxMLCBOVUxMLCAxKTsKIH0KIAogLyoKQEAgLTEwNTMsNyArMTE4NSw2IEBACiB7CiAJY29uc3QgY2hhciAqZXA7CiAJc2l6ZV90IHNlY3Rpb25fbGVuOwotCUZJTEUgKmYgPSBjZi0+ZjsKIAogCXN3aXRjaCAoc3RvcmUuc3RhdGUpIHsKIAljYXNlIEtFWV9TRUVOOgpAQCAtMTA2NSw3ICsxMTk2LDcgQEAKIAkJCQlyZXR1cm4gMTsKIAkJCX0KIAotCQkJc3RvcmUub2Zmc2V0W3N0b3JlLnNlZW5dID0gZnRlbGwoZik7CisJCQlzdG9yZS5vZmZzZXRbc3RvcmUuc2Vlbl0gPSBjZi0+ZnRlbGwoY2YpOwogCQkJc3RvcmUuc2VlbisrOwogCQl9CiAJCWJyZWFrOwpAQCAtMTA5MiwxOSArMTIyMywxOSBAQAogCQkgKiBEbyBub3QgaW5jcmVtZW50IG1hdGNoZXM6IHRoaXMgaXMgbm8gbWF0Y2gsIGJ1dCB3ZQogCQkgKiBqdXN0IG1hZGUgc3VyZSB3ZSBhcmUgaW4gdGhlIGRlc2lyZWQgc2VjdGlvbi4KIAkJICovCi0JCXN0b3JlLm9mZnNldFtzdG9yZS5zZWVuXSA9IGZ0ZWxsKGYpOworCQlzdG9yZS5vZmZzZXRbc3RvcmUuc2Vlbl0gPSBjZi0+ZnRlbGwoY2YpOwogCQkvKiBmYWxsdGhydSAqLwogCWNhc2UgU0VDVElPTl9FTkRfU0VFTjoKIAljYXNlIFNUQVJUOgogCQlpZiAobWF0Y2hlcyhrZXksIHZhbHVlKSkgewotCQkJc3RvcmUub2Zmc2V0W3N0b3JlLnNlZW5dID0gZnRlbGwoZik7CisJCQlzdG9yZS5vZmZzZXRbc3RvcmUuc2Vlbl0gPSBjZi0+ZnRlbGwoY2YpOwogCQkJc3RvcmUuc3RhdGUgPSBLRVlfU0VFTjsKIAkJCXN0b3JlLnNlZW4rKzsKIAkJfSBlbHNlIHsKIAkJCWlmIChzdHJyY2hyKGtleSwgJy4nKSAtIGtleSA9PSBzdG9yZS5iYXNlbGVuICYmCiAJCQkgICAgICAhc3RybmNtcChrZXksIHN0b3JlLmtleSwgc3RvcmUuYmFzZWxlbikpIHsKIAkJCQkJc3RvcmUuc3RhdGUgPSBTRUNUSU9OX1NFRU47Ci0JCQkJCXN0b3JlLm9mZnNldFtzdG9yZS5zZWVuXSA9IGZ0ZWxsKGYpOworCQkJCQlzdG9yZS5vZmZzZXRbc3RvcmUuc2Vlbl0gPSBjZi0+ZnRlbGwoY2YpOwogCQkJfQogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvY29uZmlnLm1hay51bmFtZSBiL2NvbmZpZy5tYWsudW5hbWUKaW5kZXggZDc4ZmQzZC4uYjQ1YjkxMCAxMDA2NDQKLS0tIGEvY29uZmlnLm1hay51bmFtZQorKysgYi9jb25maWcubWFrLnVuYW1lCkBAIC05NSw2ICs5NSw3IEBACiAJTk9fTUVNTUVNID0gWWVzUGxlYXNlCiAJVVNFX1NUX1RJTUVTUEVDID0gWWVzUGxlYXNlCiAJSEFWRV9ERVZfVFRZID0gWWVzUGxlYXNlCisJTkVFRFNfQ0xJUFBFRF9XUklURSA9IFllc1BsZWFzZQogCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9wcmVjb21wb3NlX3V0ZjgubwogCUJBU0lDX0NGTEFHUyArPSAtRFBSRUNPTVBPU0VfVU5JQ09ERQogZW5kaWYKQEAgLTE1OCwxNyArMTU5LDE3IEBACiAJCU5PX1NZTUxJTktfSEVBRCA9IFllc1BsZWFzZQogCQlOT19JUFY2ID0gWWVzUGxlYXNlCiAJCU9MRF9JQ09OViA9IFVuZm9ydHVuYXRlbHlZZXMKLQkJQ1lHV0lOX1YxNV9XSU4zMkFQSSA9IFllc1BsZWFzZQorCQlOT19USFJFQURfU0FGRV9QUkVBRCA9IFllc1BsZWFzZQorCQkjIFRoZXJlIGFyZSBjb25mbGljdGluZyByZXBvcnRzIGFib3V0IHRoaXMuCisJCSMgT24gc29tZSBib3hlcyBOT19NTUFQIGlzIG5lZWRlZCwgYW5kIG5vdCBzbyBlbHNld2hlcmUuCisJCSMgVHJ5IGNvbW1lbnRpbmcgdGhpcyBvdXQgaWYgeW91IHN1c3BlY3QgTU1BUCBpcyBtb3JlIGVmZmljaWVudAorCQlOT19NTUFQID0gWWVzUGxlYXNlCisJZWxzZQorCQlOT19SRUdFWCA9IFVuZm9ydHVuYXRlbHlZZXMKIAllbmRpZgotCU5PX1RIUkVBRF9TQUZFX1BSRUFEID0gWWVzUGxlYXNlCiAJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKIAlOT19GQVNUX1dPUktJTkdfRElSRUNUT1JZID0gVW5mb3J0dW5hdGVseVllcwotCU5PX1RSVVNUQUJMRV9GSUxFTU9ERSA9IFVuZm9ydHVuYXRlbHlZZXMKIAlOT19TVF9CTE9DS1NfSU5fU1RSVUNUX1NUQVQgPSBZZXNQbGVhc2UKLQkjIFRoZXJlIGFyZSBjb25mbGljdGluZyByZXBvcnRzIGFib3V0IHRoaXMuCi0JIyBPbiBzb21lIGJveGVzIE5PX01NQVAgaXMgbmVlZGVkLCBhbmQgbm90IHNvIGVsc2V3aGVyZS4KLQkjIFRyeSBjb21tZW50aW5nIHRoaXMgb3V0IGlmIHlvdSBzdXNwZWN0IE1NQVAgaXMgbW9yZSBlZmZpY2llbnQKLQlOT19NTUFQID0gWWVzUGxlYXNlCiAJWCA9IC5leGUKIAlDT01QQVRfT0JKUyArPSBjb21wYXQvY3lnd2luLm8KIAlVTlJFTElBQkxFX0ZTVEFUID0gVW5mb3J0dW5hdGVseVllcwpAQCAtNDgwLDcgKzQ4MSw2IEBACiAJTk9fRk5NQVRDSCA9IFllc1BsZWFzZQogCU5PX01FTU1FTSA9IFllc1BsZWFzZQogCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCi0JT0xEX0lDT05WID0gWWVzUGxlYXNlCiAJTk9fU1RSVE9VTUFYID0gWWVzUGxlYXNlCiAJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQogCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCkBAIC01MDAsMTMgKzUwMCwxNyBAQAogCU5PX0lORVRfUFRPTiA9IFllc1BsZWFzZQogCU5PX0lORVRfTlRPUCA9IFllc1BsZWFzZQogCU5PX1BPU0lYX0dPT0RJRVMgPSBVbmZvcnR1bmF0ZWx5WWVzCisJREVGQVVMVF9IRUxQX0ZPUk1BVCA9IGh0bWwKIAlDT01QQVRfQ0ZMQUdTICs9IC1EX19VU0VfTUlOR1dfQUNDRVNTIC1ETk9HREkgLUljb21wYXQgLUljb21wYXQvd2luMzIKIAlDT01QQVRfQ0ZMQUdTICs9IC1EU1RSSVBfRVhURU5TSU9OPVwiLmV4ZVwiCiAJQ09NUEFUX09CSlMgKz0gY29tcGF0L21pbmd3Lm8gY29tcGF0L3dpbmFuc2kubyBcCiAJCWNvbXBhdC93aW4zMi9wdGhyZWFkLm8gY29tcGF0L3dpbjMyL3N5c2xvZy5vIFwKIAkJY29tcGF0L3dpbjMyL2RpcmVudC5vCisJQkFTSUNfTERGTEFHUyArPSAtV2wsLS1sYXJnZS1hZGRyZXNzLWF3YXJlCiAJRVhUTElCUyArPSAtbHdzMl8zMgorCUdJVExJQlMgKz0gZ2l0LnJlcwogCVBUSFJFQURfTElCUyA9CisJUkMgPSB3aW5kcmVzIC1PIGNvZmYKIAlOQVRJVkVfQ1JMRiA9IFllc1BsZWFzZQogCVggPSAuZXhlCiAJU1BBUlNFX0ZMQUdTID0gLVduby1vbmUtYml0LXNpZ25lZC1iaXRmaWVsZApAQCAtNTE4LDYgKzUyMiw3IEBACiAJTk9fUl9UT19HQ0NfTElOS0VSID0gWWVzUGxlYXNlCiAJSU5URVJOQUxfUVNPUlQgPSBZZXNQbGVhc2UKIAlIQVZFX0xJQkNIQVJTRVRfSCA9IFllc1BsZWFzZQorCU5PX0dFVFRFWFQgPSBZZXNQbGVhc2UKIGVsc2UKIAlOT19DVVJMID0gWWVzUGxlYXNlCiBlbmRpZgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IGYzNDYyZDkuLjJmNDMzOTMgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTE5Myw3ICsxOTMsNyBAQAogICBbRkxBR1MgaXMgdGhlIHZhbHVlIHRvIHBhc3MgdG8gdGhlIGNvbXBpbGVyIHRvIGVuYWJsZSBQT1NJWCBUaHJlYWRzLl0KICAgW1RoZSBkZWZhdWx0IGlmIEZMQUdTIGlzIG5vdCBzcGVjaWZpZWQgaXMgdG8gdHJ5IGZpcnN0IC1wdGhyZWFkXQogICBbYW5kIHRoZW4gLWxwdGhyZWFkLl0KLSAgWy0td2l0aG91dC1wdGhyZWFkcyB3aWxsIGRpc2FibGUgdGhyZWFkaW5nLl0pXSwKKyAgWy0tZGlzYWJsZS1wdGhyZWFkcyB3aWxsIGRpc2FibGUgdGhyZWFkaW5nLl0pXSwKIFsKIGlmIHRlc3QgIngkZW5hYmxldmFsIiA9ICJ4eWVzIjsgdGhlbgogICAgQUNfTVNHX05PVElDRShbV2lsbCB0cnkgLXB0aHJlYWQgdGhlbiAtbHB0aHJlYWQgdG8gZW5hYmxlIFBPU0lYIFRocmVhZHNdKQpkaWZmIC0tZ2l0IGEvY29ubmVjdC5jIGIvY29ubmVjdC5jCmluZGV4IGY1N2VmZDAuLmEwNzgzZDQgMTAwNjQ0Ci0tLSBhL2Nvbm5lY3QuYworKysgYi9jb25uZWN0LmMKQEAgLTU1MSw4ICs1NTEsMTEgQEAKIAlwYXRoID0gc3RyY2hyKGVuZCwgYyk7CiAJaWYgKHBhdGggJiYgIWhhc19kb3NfZHJpdmVfcHJlZml4KGVuZCkpIHsKIAkJaWYgKGMgPT0gJzonKSB7Ci0JCQlwcm90b2NvbCA9IFBST1RPX1NTSDsKLQkJCSpwYXRoKysgPSAnXDAnOworCQkJaWYgKHBhdGggPCBzdHJjaHJudWwoaG9zdCwgJy8nKSkgeworCQkJCXByb3RvY29sID0gUFJPVE9fU1NIOworCQkJCSpwYXRoKysgPSAnXDAnOworCQkJfSBlbHNlIC8qICcvJyBpbiB0aGUgaG9zdCBwYXJ0LCBhc3N1bWUgbG9jYWwgcGF0aCAqLworCQkJCXBhdGggPSBlbmQ7CiAJCX0KIAl9IGVsc2UKIAkJcGF0aCA9IGVuZDsKZGlmZiAtLWdpdCBhL2Nvbm5lY3RlZC5jIGIvY29ubmVjdGVkLmMKaW5kZXggMWU4OWMxYy4uZmFlOGQ2NCAxMDA2NDQKLS0tIGEvY29ubmVjdGVkLmMKKysrIGIvY29ubmVjdGVkLmMKQEAgLTIsNyArMiwxMiBAQAogI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCiAjaW5jbHVkZSAic2lnY2hhaW4uaCIKICNpbmNsdWRlICJjb25uZWN0ZWQuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKIAoraW50IGNoZWNrX2V2ZXJ5dGhpbmdfY29ubmVjdGVkKHNoYTFfaXRlcmF0ZV9mbiBmbiwgaW50IHF1aWV0LCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiBjaGVja19ldmVyeXRoaW5nX2Nvbm5lY3RlZF93aXRoX3RyYW5zcG9ydChmbiwgcXVpZXQsIGNiX2RhdGEsIE5VTEwpOworfQogLyoKICAqIElmIHdlIGZlZWQgYWxsIHRoZSBjb21taXRzIHdlIHdhbnQgdG8gdmVyaWZ5IHRvIHRoaXMgY29tbWFuZAogICoKQEAgLTE0LDcgKzE5LDEwIEBACiAgKgogICogUmV0dXJucyAwIGlmIGV2ZXJ5dGhpbmcgaXMgY29ubmVjdGVkLCBub24temVybyBvdGhlcndpc2UuCiAgKi8KLWludCBjaGVja19ldmVyeXRoaW5nX2Nvbm5lY3RlZChzaGExX2l0ZXJhdGVfZm4gZm4sIGludCBxdWlldCwgdm9pZCAqY2JfZGF0YSkKK2ludCBjaGVja19ldmVyeXRoaW5nX2Nvbm5lY3RlZF93aXRoX3RyYW5zcG9ydChzaGExX2l0ZXJhdGVfZm4gZm4sCisJCQkJCSAgICAgIGludCBxdWlldCwKKwkJCQkJICAgICAgdm9pZCAqY2JfZGF0YSwKKwkJCQkJICAgICAgc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KQogewogCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHJldl9saXN0OwogCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsicmV2LWxpc3QiLCAiLS1vYmplY3RzIiwKQEAgLTIyLDEwICszMCwyMyBAQAogCWNoYXIgY29tbWl0WzQxXTsKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCWludCBlcnIgPSAwOworCXN0cnVjdCBwYWNrZWRfZ2l0ICpuZXdfcGFjayA9IE5VTEw7CiAKIAlpZiAoZm4oY2JfZGF0YSwgc2hhMSkpCiAJCXJldHVybiBlcnI7CiAKKwlpZiAodHJhbnNwb3J0ICYmIHRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucyAmJgorCSAgICB0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMtPnNlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgJiYKKwkgICAgdHJhbnNwb3J0LT5wYWNrX2xvY2tmaWxlICYmCisJICAgICFzdWZmaXhjbXAodHJhbnNwb3J0LT5wYWNrX2xvY2tmaWxlLCAiLmtlZXAiKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGlkeF9maWxlID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9hZGRzdHIoJmlkeF9maWxlLCB0cmFuc3BvcnQtPnBhY2tfbG9ja2ZpbGUpOworCQlzdHJidWZfc2V0bGVuKCZpZHhfZmlsZSwgaWR4X2ZpbGUubGVuIC0gNSk7IC8qICIua2VlcCIgKi8KKwkJc3RyYnVmX2FkZHN0cigmaWR4X2ZpbGUsICIuaWR4Iik7CisJCW5ld19wYWNrID0gYWRkX3BhY2tlZF9naXQoaWR4X2ZpbGUuYnVmLCBpZHhfZmlsZS5sZW4sIDEpOworCQlzdHJidWZfcmVsZWFzZSgmaWR4X2ZpbGUpOworCX0KKwogCWlmIChxdWlldCkKIAkJYXJndls1XSA9ICItLXF1aWV0IjsKIApAQCAtNDIsNiArNjMsMTcgQEAKIAogCWNvbW1pdFs0MF0gPSAnXG4nOwogCWRvIHsKKwkJLyoKKwkJICogSWYgaW5kZXgtcGFjayBhbHJlYWR5IGNoZWNrZWQgdGhhdDoKKwkJICogLSB0aGVyZSBhcmUgbm8gZGFuZ2xpbmcgcG9pbnRlcnMgaW4gdGhlIG5ldyBwYWNrCisJCSAqIC0gdGhlIHBhY2sgaXMgc2VsZiBjb250YWluZWQKKwkJICogVGhlbiBpZiB0aGUgdXBkYXRlZCByZWYgaXMgaW4gdGhlIG5ldyBwYWNrLCB0aGVuIHdlCisJCSAqIGFyZSBzdXJlIHRoZSByZWYgaXMgZ29vZCBhbmQgbm90IHNlbmRpbmcgaXQgdG8KKwkJICogcmV2LWxpc3QgZm9yIHZlcmlmaWNhdGlvbi4KKwkJICovCisJCWlmIChuZXdfcGFjayAmJiBmaW5kX3BhY2tfZW50cnlfb25lKHNoYTEsIG5ld19wYWNrKSkKKwkJCWNvbnRpbnVlOworCiAJCW1lbWNweShjb21taXQsIHNoYTFfdG9faGV4KHNoYTEpLCA0MCk7CiAJCWlmICh3cml0ZV9pbl9mdWxsKHJldl9saXN0LmluLCBjb21taXQsIDQxKSA8IDApIHsKIAkJCWlmIChlcnJubyAhPSBFUElQRSAmJiBlcnJubyAhPSBFSU5WQUwpCmRpZmYgLS1naXQgYS9jb25uZWN0ZWQuaCBiL2Nvbm5lY3RlZC5oCmluZGV4IDdlNDU4NWEuLjBiMDYwYjcgMTAwNjQ0Ci0tLSBhL2Nvbm5lY3RlZC5oCisrKyBiL2Nvbm5lY3RlZC5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBDT05ORUNURURfSAogI2RlZmluZSBDT05ORUNURURfSAogCitzdHJ1Y3QgdHJhbnNwb3J0OworCiAvKgogICogVGFrZSBjYWxsYmFjayBkYXRhLCBhbmQgcmV0dXJuIG5leHQgb2JqZWN0IG5hbWUgaW4gdGhlIGJ1ZmZlci4KICAqIFdoZW4gY2FsbGVkIGFmdGVyIHJldHVybmluZyB0aGUgbmFtZSBmb3IgdGhlIGxhc3Qgb2JqZWN0LCByZXR1cm4gLTEKQEAgLTE2LDUgKzE4LDggQEAKICAqIFJldHVybiAwIGlmIE9rLCBub24gemVybyBvdGhlcndpc2UgKGkuZS4gc29tZSBtaXNzaW5nIG9iamVjdHMpCiAgKi8KIGV4dGVybiBpbnQgY2hlY2tfZXZlcnl0aGluZ19jb25uZWN0ZWQoc2hhMV9pdGVyYXRlX2ZuLCBpbnQgcXVpZXQsIHZvaWQgKmNiX2RhdGEpOworZXh0ZXJuIGludCBjaGVja19ldmVyeXRoaW5nX2Nvbm5lY3RlZF93aXRoX3RyYW5zcG9ydChzaGExX2l0ZXJhdGVfZm4sIGludCBxdWlldCwKKwkJCQkJCSAgICAgdm9pZCAqY2JfZGF0YSwKKwkJCQkJCSAgICAgc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KTsKIAogI2VuZGlmIC8qIENPTk5FQ1RFRF9IICovCmRpZmYgLS1naXQgYS9jb250cmliL2JsYW1ldmlldy9SRUFETUUgYi9jb250cmliL2JsYW1ldmlldy9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhZGE1Y2UuLjAwMDAwMDAKLS0tIGEvY29udHJpYi9ibGFtZXZpZXcvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1UaGlzIGlzIGEgc2FtcGxlIHByb2dyYW0gdG8gdXNlICdnaXQtYmxhbWUgLS1pbmNyZW1lbnRhbCcsIGJhc2VkCi1vbiB0aGlzIG1lc3NhZ2UuCi0KLUZyb206IEplZmYgS2luZyA8cGVmZkBwZWZmLm5ldD4KLVN1YmplY3Q6IFJlOiBNb3JlIHByZWNpc2UgdGFnIGZvbGxvd2luZwotVG86IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4KLUNjOiBnaXRAdmdlci5rZXJuZWwub3JnCi1EYXRlOiBTYXQsIDI3IEphbiAyMDA3IDE4OjUyOjM4IC0wNTAwCi1NZXNzYWdlLUlEOiA8MjAwNzAxMjcyMzUyMzguR0EyODcwNkBjb3JlZHVtcC5pbnRyYS5wZWZmLm5ldD4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvYmxhbWV2aWV3L2JsYW1ldmlldy5wZXJsIGIvY29udHJpYi9ibGFtZXZpZXcvYmxhbWV2aWV3LnBlcmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDFkZWMwMDEuLjAwMDAwMDAKLS0tIGEvY29udHJpYi9ibGFtZXZpZXcvYmxhbWV2aWV3LnBlcmwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotIyEvdXNyL2Jpbi9wZXJsCi0KLXVzZSBHdGsyIC1pbml0OwotdXNlIEd0azI6OlNpbXBsZUxpc3Q7Ci0KLW15ICRoYXNoOwotbXkgJGZuOwotaWYgKCBAQVJHViA9PSAxICkgewotCSRoYXNoID0gIkhFQUQiOwotCSRmbiA9IHNoaWZ0OwotfSBlbHNpZiAoIEBBUkdWID09IDIgKSB7Ci0JJGhhc2ggPSBzaGlmdDsKLQkkZm4gPSBzaGlmdDsKLX0gZWxzZSB7Ci0JZGllICJVc2FnZSBibGFtZXZpZXcgWzxyZXY+XSA8ZmlsZW5hbWU+IjsKLX0KLQotR3RrMjo6UmMtPnBhcnNlX3N0cmluZyg8PCdFT1MnKTsKLXN0eWxlICJ0cmVldmlld19zdHlsZSIKLXsKLSAgR3RrVHJlZVZpZXc6OnZlcnRpY2FsLXNlcGFyYXRvciA9IDAKLX0KLWNsYXNzICJHdGtUcmVlVmlldyIgc3R5bGUgInRyZWV2aWV3X3N0eWxlIgotRU9TCi0KLW15ICR3aW5kb3cgPSBHdGsyOjpXaW5kb3ctPm5ldygndG9wbGV2ZWwnKTsKLSR3aW5kb3ctPnNpZ25hbF9jb25uZWN0KGRlc3Ryb3kgPT4gc3ViIHsgR3RrMi0+bWFpbl9xdWl0IH0pOwotbXkgJHZwYW4gPSBHdGsyOjpWUGFuZWQtPm5ldygpOwotJHdpbmRvdy0+YWRkKCR2cGFuKTsKLW15ICRzY3JvbGxlZF93aW5kb3cgPSBHdGsyOjpTY3JvbGxlZFdpbmRvdy0+bmV3OwotJHZwYW4tPnBhY2sxKCRzY3JvbGxlZF93aW5kb3csIDEsIDEpOwotbXkgJGZpbGV2aWV3ID0gR3RrMjo6U2ltcGxlTGlzdC0+bmV3KAotICAgICdDb21taXQnID0+ICd0ZXh0JywKLSAgICAnRmlsZUxpbmUnID0+ICd0ZXh0JywKLSAgICAnRGF0YScgPT4gJ3RleHQnCi0pOwotJHNjcm9sbGVkX3dpbmRvdy0+YWRkKCRmaWxldmlldyk7Ci0kZmlsZXZpZXctPmdldF9jb2x1bW4oMCktPnNldF9zcGFjaW5nKDApOwotJGZpbGV2aWV3LT5zZXRfc2l6ZV9yZXF1ZXN0KDEwMjQsIDc2OCk7Ci0kZmlsZXZpZXctPnNldF9ydWxlc19oaW50KDEpOwotJGZpbGV2aWV3LT5zaWduYWxfY29ubmVjdCAocm93X2FjdGl2YXRlZCA9PiBzdWIgewotCQlteSAoJHNsLCAkcGF0aCwgJGNvbHVtbikgPSBAXzsKLQkJbXkgJHJvd19yZWYgPSAkc2wtPmdldF9yb3dfZGF0YV9mcm9tX3BhdGggKCRwYXRoKTsKLQkJc3lzdGVtKCJibGFtZXZpZXcgQCRyb3dfcmVmWzBdfjEgJGZuICYiKTsKLQkJfSk7Ci0KLW15ICRjb21taXR3aW5kb3cgPSBHdGsyOjpTY3JvbGxlZFdpbmRvdy0+bmV3KCk7Ci0kY29tbWl0d2luZG93LT5zZXRfcG9saWN5ICgnR1RLX1BPTElDWV9BVVRPTUFUSUMnLCdHVEtfUE9MSUNZX0FVVE9NQVRJQycpOwotJHZwYW4tPnBhY2syKCRjb21taXR3aW5kb3csIDEsIDEpOwotbXkgJGNvbW1pdF90ZXh0ID0gR3RrMjo6VGV4dFZpZXctPm5ldygpOwotbXkgJGNvbW1pdF9idWZmZXIgPSBHdGsyOjpUZXh0QnVmZmVyLT5uZXcoKTsKLSRjb21taXRfdGV4dC0+c2V0X2J1ZmZlcigkY29tbWl0X2J1ZmZlcik7Ci0kY29tbWl0d2luZG93LT5hZGQoJGNvbW1pdF90ZXh0KTsKLQotJGZpbGV2aWV3LT5zaWduYWxfY29ubmVjdCAoY3Vyc29yX2NoYW5nZWQgPT4gc3ViIHsKLQkJbXkgKCRzbCkgPSBAXzsKLQkJbXkgKCRwYXRoLCAkZm9jdXNfY29sdW1uKSA9ICRzbC0+Z2V0X2N1cnNvcigpOwotCQlteSAkcm93X3JlZiA9ICRzbC0+Z2V0X3Jvd19kYXRhX2Zyb21fcGF0aCAoJHBhdGgpOwotCQlteSAkY19maDsKLQkJb3BlbigkY19maCwgICctfCcsICJnaXQgY2F0LWZpbGUgY29tbWl0IEAkcm93X3JlZlswXSIpCi0JCQkJCW9yIGRpZSAidW5hYmxlIHRvIGZpbmQgY29tbWl0IEAkcm93X3JlZlswXSI7Ci0JCW15IEBidWZmZXIgPSA8JGNfZmg+OwotCQkkY29tbWl0X2J1ZmZlci0+c2V0X3RleHQoIkBidWZmZXIiKTsKLQkJY2xvc2UoJGNfZmgpOwotCQl9KTsKLQotbXkgJGZoOwotb3BlbigkZmgsICctfCcsICJnaXQgY2F0LWZpbGUgYmxvYiAkaGFzaDokZm4iKQotICBvciBkaWUgInVuYWJsZSB0byBvcGVuICRmbjogJCEiOwotCi13aGlsZSg8JGZoPikgewotICBjaG9tcDsKLSAgJGZpbGV2aWV3LT57ZGF0YX0tPlskLl0gPSBbJ0hFQUQnLCAiJGZuOiQuIiwgJF9dOwotfQotCi1teSAkYmxhbWU7Ci1vcGVuKCRibGFtZSwgJy18JywgcXcoZ2l0IGJsYW1lIC0taW5jcmVtZW50YWwgLS0pLCAkZm4sICRoYXNoKQotICAgIG9yIGRpZSAiY2Fubm90IHN0YXJ0IGdpdC1ibGFtZSAkZm4iOwotCi1HbGliOjpJTy0+YWRkX3dhdGNoKGZpbGVubygkYmxhbWUpLCAnaW4nLCBcJnJlYWRfYmxhbWVfbGluZSk7Ci0KLSR3aW5kb3ctPnNob3dfYWxsOwotR3RrMi0+bWFpbjsKLWV4aXQgMDsKLQotbXkgJWNvbW1pdGluZm8gPSAoKTsKLQotc3ViIGZsdXNoX2JsYW1lX2xpbmUgewotCW15ICgkYXR0cikgPSBAXzsKLQotCXJldHVybiB1bmxlc3MgZGVmaW5lZCAkYXR0cjsKLQotCW15ICgkY29tbWl0LCAkc19sbm8sICRsbm8sICRjbnQpID0KLQkgICAgQHskYXR0cn17cXcoQ09NTUlUIFNfTE5PIExOTyBDTlQpfTsKLQotCW15ICgkZmlsZW5hbWUsICRhdXRob3IsICRhdXRob3JfdGltZSwgJGF1dGhvcl90eikgPQotCSAgICBAeyRjb21taXRpbmZveyRjb21taXR9fXtxdyhGSUxFTkFNRSBBVVRIT1IgQVVUSE9SLVRJTUUgQVVUSE9SLVRaKX07Ci0JbXkgJGluZm8gPSAkYXV0aG9yIC4gJyAnIC4gZm9ybWF0X3RpbWUoJGF1dGhvcl90aW1lLCAkYXV0aG9yX3R6KTsKLQotCWZvcihteSAkaSA9IDA7ICRpIDwgJGNudDsgJGkrKykgewotCQlAeyRmaWxldmlldy0+e2RhdGF9LT5bJGxubyskaS0xXX1bMCwxLDJdID0KLQkJKHN1YnN0cigkY29tbWl0LCAwLCA4KSwgJGZpbGVuYW1lIC4gJzonIC4gKCRzX2xubyskaSkpOwotCX0KLX0KLQotbXkgJGJ1ZjsKLW15ICRjdXJyZW50Owotc3ViIHJlYWRfYmxhbWVfbGluZSB7Ci0KLQlteSAkciA9IHN5c3JlYWQoJGJsYW1lLCAkYnVmLCAxMDI0LCBsZW5ndGgoJGJ1ZikpOwotCWRpZSAiSS9PIGVycm9yIiB1bmxlc3MgZGVmaW5lZCAkcjsKLQotCWlmICgkciA9PSAwKSB7Ci0JCWZsdXNoX2JsYW1lX2xpbmUoJGN1cnJlbnQpOwotCQkkY3VycmVudCA9IHVuZGVmOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQl3aGlsZSAoJGJ1ZiA9fiBzLyhbXlxuXSopXG4vLykgewotCQlteSAkbGluZSA9ICQxOwotCi0JCWlmICgoJGNvbW1pdCwgJHNfbG5vLCAkbG5vLCAkY250KSA9Ci0JCSAgICAoJGxpbmUgPX4gL14oWzAtOWEtZl17NDB9KSAoXGQrKSAoXGQrKSAoXGQrKSQvKSkgewotCQkJZmx1c2hfYmxhbWVfbGluZSgkY3VycmVudCk7Ci0JCQkkY3VycmVudCA9ICt7Ci0JCQkJQ09NTUlUID0+ICQxLAotCQkJCVNfTE5PID0+ICQyLAotCQkJCUxOTyA9PiAkMywKLQkJCQlDTlQgPT4gJDQsCi0JCQl9OwotCQkJbmV4dDsKLQkJfQotCi0JCSMgZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlcwotCQlpZiAoJGxpbmUgPX4gL14oYXV0aG9yfGF1dGhvci1tYWlsfGF1dGhvci10aW1lfGF1dGhvci10enxjb21taXR0ZXJ8Y29tbWl0dGVyLW1haWx8Y29tbWl0dGVyLXRpbWV8Y29tbWl0dGVyLXR6fHN1bW1hcnl8ZmlsZW5hbWUpICguKikkLykgewotCQkJbXkgJGNvbW1pdCA9ICRjdXJyZW50LT57Q09NTUlUfTsKLQkJCSRjb21taXRpbmZveyRjb21taXR9e3VjKCQxKX0gPSAkMjsKLQkJCW5leHQ7Ci0JCX0KLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLXN1YiBmb3JtYXRfdGltZSB7Ci0gIG15ICR0aW1lID0gc2hpZnQ7Ci0gIG15ICR0eiA9IHNoaWZ0OwotCi0gIG15ICRtaW51dGVzID0gJHR6IDwgMCA/IDAtJHR6IDogJHR6OwotICAkbWludXRlcyA9ICgkbWludXRlcyAvIDEwMCkqNjAgKyAoJG1pbnV0ZXMgJSAxMDApOwotICAkbWludXRlcyA9ICR0eiA8IDAgPyAwLSRtaW51dGVzIDogJG1pbnV0ZXM7Ci0gICR0aW1lICs9ICRtaW51dGVzICogNjA7Ci0gIG15IEB0ID0gZ210aW1lKCR0aW1lKTsKLSAgcmV0dXJuIHNwcmludGYoJyUwNGQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkICVzJywKLQkJICR0WzVdICsgMTkwMCwgQHRbNCwzLDIsMSwwXSwgJHR6KTsKLX0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi5iYXNoIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKaW5kZXggMWMzNWVlZi4uY2Q1MDlhNSAxMDA2NDQKLS0tIGEvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKKysrIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKQEAgLTMzLDggKzMzLDYgQEAKICMgcmV0dXJucyBsb2NhdGlvbiBvZiAuZ2l0IHJlcG8KIF9fZ2l0ZGlyICgpCiB7Ci0JIyBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIGR1cGxpY2F0ZWQgaW4gZ2l0LXByb21wdC5zaAotCSMgV2hlbiB1cGRhdGluZyBpdCwgbWFrZSBzdXJlIHlvdSB1cGRhdGUgdGhlIG90aGVyIG9uZSB0byBtYXRjaC4KIAlpZiBbIC16ICIkezEtfSIgXTsgdGhlbgogCQlpZiBbIC1uICIke19fZ2l0X2Rpci19IiBdOyB0aGVuCiAJCQllY2hvICIkX19naXRfZGlyIgpAQCAtMjUyLDEwNiArMjUwLDUwIEBACiAJIyBzaW5jZSB0aWxkZSBleHBhbnNpb24gaXMgbm90IGFwcGxpZWQuCiAJIyBUaGlzIG1lYW5zIHRoYXQgQ09NUFJFUExZIHdpbGwgYmUgZW1wdHkgYW5kIEJhc2ggZGVmYXVsdAogCSMgY29tcGxldGlvbiB3aWxsIGJlIHVzZWQuCi0JQ09NUFJFUExZPSgkKGNvbXBnZW4gLVAgIiR7Mi19IiAtVyAiJDEiIC0tICIkezMtJGN1cn0iKSkKKwlfX2dpdGNvbXBhZGQgIiQxIiAiJHsyLX0iICIkezMtJGN1cn0iICIiCiAKLQkjIFRlbGwgQmFzaCB0aGF0IGNvbXBzcGVjIGdlbmVyYXRlcyBmaWxlbmFtZXMuCi0JY29tcG9wdCAtbyBmaWxlbmFtZXMgMj4vZGV2L251bGwKKwkjIHVzZSBhIGhhY2sgdG8gZW5hYmxlIGZpbGUgbW9kZSBpbiBiYXNoIDwgNAorCWNvbXBvcHQgLW8gZmlsZW5hbWVzICtvIG5vc3BhY2UgMj4vZGV2L251bGwgfHwKKwljb21wZ2VuIC1mIC9ub24tZXhpc3RpbmctZGlyLyA+IC9kZXYvbnVsbAogfQogCi1fX2dpdF9pbmRleF9maWxlX2xpc3RfZmlsdGVyX2NvbXBhdCAoKQotewotCWxvY2FsIHBhdGgKLQotCXdoaWxlIHJlYWQgLXIgcGF0aDsgZG8KLQkJY2FzZSAiJHBhdGgiIGluCi0JCT8qLyopIGVjaG8gIiR7cGF0aCUlLyp9LyIgOzsKLQkJKikgZWNobyAiJHBhdGgiIDs7Ci0JCWVzYWMKLQlkb25lCi19Ci0KLV9fZ2l0X2luZGV4X2ZpbGVfbGlzdF9maWx0ZXJfYmFzaCAoKQotewotCWxvY2FsIHBhdGgKLQotCXdoaWxlIHJlYWQgLXIgcGF0aDsgZG8KLQkJY2FzZSAiJHBhdGgiIGluCi0JCT8qLyopCi0JCQkjIFhYWCBpZiB3ZSBhcHBlbmQgYSBzbGFzaCB0byBkaXJlY3RvcnkgbmFtZXMgd2hlbiB1c2luZwotCQkJIyBgY29tcG9wdCAtbyBmaWxlbmFtZXNgLCBCYXNoIHdpbGwgYXBwZW5kIGFub3RoZXIgc2xhc2guCi0JCQkjIFRoaXMgaXMgcHJldHR5IHN0dXBpZCwgYW5kIHRoaXMgdGhlIHJlYXNvbiB3aHkgd2UgaGF2ZSB0bwotCQkJIyBkZWZpbmUgYSBjb21wYXRpYmxlIHZlcnNpb24gZm9yIHRoaXMgZnVuY3Rpb24uCi0JCQllY2hvICIke3BhdGglJS8qfSIgOzsKLQkJKikKLQkJCWVjaG8gIiRwYXRoIiA7OwotCQllc2FjCi0JZG9uZQotfQotCi0jIFByb2Nlc3MgcGF0aCBsaXN0IHJldHVybmVkIGJ5ICJscy1maWxlcyIgYW5kICJkaWZmLWluZGV4IC0tbmFtZS1vbmx5IgotIyBjb21tYW5kcywgaW4gb3JkZXIgdG8gbGlzdCBvbmx5IGZpbGUgbmFtZXMgcmVsYXRpdmUgdG8gYSBzcGVjaWZpZWQKLSMgZGlyZWN0b3J5LCBhbmQgYXBwZW5kIGEgc2xhc2ggdG8gZGlyZWN0b3J5IG5hbWVzLgotX19naXRfaW5kZXhfZmlsZV9saXN0X2ZpbHRlciAoKQotewotCSMgRGVmYXVsdCB0byBCYXNoID49IDQueAotCV9fZ2l0X2luZGV4X2ZpbGVfbGlzdF9maWx0ZXJfYmFzaAotfQotCi0jIEV4ZWN1dGUgZ2l0IGxzLWZpbGVzLCByZXR1cm5pbmcgcGF0aHMgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeQotIyBzcGVjaWZpZWQgaW4gdGhlIGZpcnN0IGFyZ3VtZW50LCBhbmQgdXNpbmcgdGhlIG9wdGlvbnMgc3BlY2lmaWVkIGluCi0jIHRoZSBzZWNvbmQgYXJndW1lbnQuCisjIEV4ZWN1dGUgJ2dpdCBscy1maWxlcycsIHVubGVzcyB0aGUgLS1jb21taXR0YWJsZSBvcHRpb24gaXMgc3BlY2lmaWVkLCBpbgorIyB3aGljaCBjYXNlIGl0IHJ1bnMgJ2dpdCBkaWZmLWluZGV4JyB0byBmaW5kIG91dCB0aGUgZmlsZXMgdGhhdCBjYW4gYmUKKyMgY29tbWl0dGVkLiAgSXQgcmV0dXJuIHBhdGhzIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGluIHRoZSBmaXJzdAorIyBhcmd1bWVudCwgYW5kIHVzaW5nIHRoZSBvcHRpb25zIHNwZWNpZmllZCBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50LgogX19naXRfbHNfZmlsZXNfaGVscGVyICgpCiB7CiAJKAogCQl0ZXN0IC1uICIke0NEUEFUSCtzZXR9IiAmJiB1bnNldCBDRFBBVEgKLQkJIyBOT1RFOiAkMiBpcyBub3QgcXVvdGVkIGluIG9yZGVyIHRvIHN1cHBvcnQgbXVsdGlwbGUgb3B0aW9ucwotCQljZCAiJDEiICYmIGdpdCBscy1maWxlcyAtLWV4Y2x1ZGUtc3RhbmRhcmQgJDIKKwkJY2QgIiQxIgorCQlpZiBbICIkMiIgPT0gIi0tY29tbWl0dGFibGUiIF07IHRoZW4KKwkJCWdpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IC0tcmVsYXRpdmUgSEVBRAorCQllbHNlCisJCQkjIE5PVEU6ICQyIGlzIG5vdCBxdW90ZWQgaW4gb3JkZXIgdG8gc3VwcG9ydCBtdWx0aXBsZSBvcHRpb25zCisJCQlnaXQgbHMtZmlsZXMgLS1leGNsdWRlLXN0YW5kYXJkICQyCisJCWZpCiAJKSAyPi9kZXYvbnVsbAogfQogCiAKLSMgRXhlY3V0ZSBnaXQgZGlmZi1pbmRleCwgcmV0dXJuaW5nIHBhdGhzIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3RvcnkKLSMgc3BlY2lmaWVkIGluIHRoZSBmaXJzdCBhcmd1bWVudCwgYW5kIHVzaW5nIHRoZSB0cmVlIG9iamVjdCBpZAotIyBzcGVjaWZpZWQgaW4gdGhlIHNlY29uZCBhcmd1bWVudC4KLV9fZ2l0X2RpZmZfaW5kZXhfaGVscGVyICgpCi17Ci0JKAotCQl0ZXN0IC1uICIke0NEUEFUSCtzZXR9IiAmJiB1bnNldCBDRFBBVEgKLQkJY2QgIiQxIiAmJiBnaXQgZGlmZi1pbmRleCAtLW5hbWUtb25seSAtLXJlbGF0aXZlICIkMiIKLQkpIDI+L2Rldi9udWxsCi19Ci0KICMgX19naXRfaW5kZXhfZmlsZXMgYWNjZXB0cyAxIG9yIDIgYXJndW1lbnRzOgogIyAxOiBPcHRpb25zIHRvIHBhc3MgdG8gbHMtZmlsZXMgKHJlcXVpcmVkKS4KLSMgICAgU3VwcG9ydGVkIG9wdGlvbnMgYXJlIC0tY2FjaGVkLCAtLW1vZGlmaWVkLCAtLWRlbGV0ZWQsIC0tb3RoZXJzLAotIyAgICBhbmQgLS1kaXJlY3RvcnkuCiAjIDI6IEEgZGlyZWN0b3J5IHBhdGggKG9wdGlvbmFsKS4KICMgICAgSWYgcHJvdmlkZWQsIG9ubHkgZmlsZXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGFyZSBsaXN0ZWQuCiAjICAgIFN1YiBkaXJlY3RvcmllcyBhcmUgbmV2ZXIgcmVjdXJzZWQuICBQYXRoIG11c3QgaGF2ZSBhIHRyYWlsaW5nCiAjICAgIHNsYXNoLgogX19naXRfaW5kZXhfZmlsZXMgKCkKIHsKLQlsb2NhbCBkaXI9IiQoX19naXRkaXIpIiByb290PSIkezItLn0iCisJbG9jYWwgZGlyPSIkKF9fZ2l0ZGlyKSIgcm9vdD0iJHsyLS59IiBmaWxlCiAKIAlpZiBbIC1kICIkZGlyIiBdOyB0aGVuCi0JCV9fZ2l0X2xzX2ZpbGVzX2hlbHBlciAiJHJvb3QiICIkMSIgfCBfX2dpdF9pbmRleF9maWxlX2xpc3RfZmlsdGVyIHwKLQkJCXNvcnQgfCB1bmlxCi0JZmkKLX0KLQotIyBfX2dpdF9kaWZmX2luZGV4X2ZpbGVzIGFjY2VwdHMgMSBvciAyIGFyZ3VtZW50czoKLSMgMSkgVGhlIGlkIG9mIGEgdHJlZSBvYmplY3QuCi0jIDIpIEEgZGlyZWN0b3J5IHBhdGggKG9wdGlvbmFsKS4KLSMgICAgSWYgcHJvdmlkZWQsIG9ubHkgZmlsZXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGFyZSBsaXN0ZWQuCi0jICAgIFN1YiBkaXJlY3RvcmllcyBhcmUgbmV2ZXIgcmVjdXJzZWQuICBQYXRoIG11c3QgaGF2ZSBhIHRyYWlsaW5nCi0jICAgIHNsYXNoLgotX19naXRfZGlmZl9pbmRleF9maWxlcyAoKQotewotCWxvY2FsIGRpcj0iJChfX2dpdGRpcikiIHJvb3Q9IiR7Mi0ufSIKLQotCWlmIFsgLWQgIiRkaXIiIF07IHRoZW4KLQkJX19naXRfZGlmZl9pbmRleF9oZWxwZXIgIiRyb290IiAiJDEiIHwgX19naXRfaW5kZXhfZmlsZV9saXN0X2ZpbHRlciB8Ci0JCQlzb3J0IHwgdW5pcQorCQlfX2dpdF9sc19maWxlc19oZWxwZXIgIiRyb290IiAiJDEiIHwKKwkJd2hpbGUgcmVhZCAtciBmaWxlOyBkbworCQkJY2FzZSAiJGZpbGUiIGluCisJCQk/Ki8qKSBlY2hvICIke2ZpbGUlJS8qfSIgOzsKKwkJCSopIGVjaG8gIiRmaWxlIiA7OworCQkJZXNhYworCQlkb25lIHwgc29ydCB8IHVuaXEKIAlmaQogfQogCkBAIC00MjcsMTQgKzM2OSw4IEBACiAJCWRvbmUKIAkJOzsKIAkqKQotCQlnaXQgbHMtcmVtb3RlICIkZGlyIiBIRUFEIE9SSUdfSEVBRCAncmVmcy90YWdzLyonICdyZWZzL2hlYWRzLyonICdyZWZzL3JlbW90ZXMvKicgMj4vZGV2L251bGwgfCBcCi0JCXdoaWxlIHJlYWQgLXIgaGFzaCBpOyBkbwotCQkJY2FzZSAiJGkiIGluCi0JCQkqXnt9KSA7OwotCQkJcmVmcy8qKSBlY2hvICIke2kjcmVmcy8qL30iIDs7Ci0JCQkqKSBlY2hvICIkaSIgOzsKLQkJCWVzYWMKLQkJZG9uZQorCQllY2hvICJIRUFEIgorCQlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWU6c2hvcnQpIiAtLSAicmVmcy9yZW1vdGVzLyRkaXIvIiB8IHNlZCAtZSAicyNeJGRpci8jIyIKIAkJOzsKIAllc2FjCiB9CkBAIC01NTIsNDQgKzQ4OCwyMyBAQAogfQogCiAKLSMgX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSByZXF1aXJlcyAxIGFyZ3VtZW50OiB0aGUgb3B0aW9ucyB0byBwYXNzIHRvCi0jIGxzLWZpbGUKKyMgX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSByZXF1aXJlcyAxIGFyZ3VtZW50OgorIyAxOiB0aGUgb3B0aW9ucyB0byBwYXNzIHRvIGxzLWZpbGUKKyMKKyMgVGhlIGV4Y2VwdGlvbiBpcyAtLWNvbW1pdHRhYmxlLCB3aGljaCBmaW5kcyB0aGUgZmlsZXMgYXBwcm9wcmlhdGUgY29tbWl0LgogX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAoKQogewotCWxvY2FsIHBmeCBjdXJfPSIkY3VyIgorCWxvY2FsIHBmeD0iIiBjdXJfPSIkY3VyIgogCiAJY2FzZSAiJGN1cl8iIGluCiAJPyovKikKIAkJcGZ4PSIke2N1cl8lLyp9IgogCQljdXJfPSIke2N1cl8jIyovfSIKIAkJcGZ4PSIke3BmeH0vIgotCi0JCV9fZ2l0Y29tcF9maWxlICIkKF9fZ2l0X2luZGV4X2ZpbGVzICIkMSIgIiRwZngiKSIgIiRwZngiICIkY3VyXyIKLQkJOzsKLQkqKQotCQlfX2dpdGNvbXBfZmlsZSAiJChfX2dpdF9pbmRleF9maWxlcyAiJDEiKSIgIiIgIiRjdXJfIgogCQk7OwogCWVzYWMKLX0KIAotIyBfX2dpdF9jb21wbGV0ZV9kaWZmX2luZGV4X2ZpbGUgcmVxdWlyZXMgMSBhcmd1bWVudDogdGhlIGlkIG9mIGEgdHJlZQotIyBvYmplY3QKLV9fZ2l0X2NvbXBsZXRlX2RpZmZfaW5kZXhfZmlsZSAoKQotewotCWxvY2FsIHBmeCBjdXJfPSIkY3VyIgotCi0JY2FzZSAiJGN1cl8iIGluCi0JPyovKikKLQkJcGZ4PSIke2N1cl8lLyp9IgotCQljdXJfPSIke2N1cl8jIyovfSIKLQkJcGZ4PSIke3BmeH0vIgotCi0JCV9fZ2l0Y29tcF9maWxlICIkKF9fZ2l0X2RpZmZfaW5kZXhfZmlsZXMgIiQxIiAiJHBmeCIpIiAiJHBmeCIgIiRjdXJfIgotCQk7OwotCSopCi0JCV9fZ2l0Y29tcF9maWxlICIkKF9fZ2l0X2RpZmZfaW5kZXhfZmlsZXMgIiQxIikiICIiICIkY3VyXyIKLQkJOzsKLQllc2FjCisJX19naXRjb21wX2ZpbGUgIiQoX19naXRfaW5kZXhfZmlsZXMgIiQxIiAiJHBmeCIpIiAiJHBmeCIgIiRjdXJfIgogfQogCiBfX2dpdF9jb21wbGV0ZV9maWxlICgpCkBAIC03MzMsNiArNjQ4LDcgQEAKIAkJY2F0LWZpbGUpICAgICAgICAgOiBwbHVtYmluZzs7CiAJCWNoZWNrLWF0dHIpICAgICAgIDogcGx1bWJpbmc7OwogCQljaGVjay1pZ25vcmUpICAgICA6IHBsdW1iaW5nOzsKKwkJY2hlY2stbWFpbG1hcCkgICAgOiBwbHVtYmluZzs7CiAJCWNoZWNrLXJlZi1mb3JtYXQpIDogcGx1bWJpbmc7OwogCQljaGVja291dC1pbmRleCkgICA6IHBsdW1iaW5nOzsKIAkJY29tbWl0LXRyZWUpICAgICAgOiBwbHVtYmluZzs7CkBAIC0xMjEzLDcgKzExMjksNyBAQAogCWVzYWMKIAogCWlmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1xdWlldCBIRUFEID4vZGV2L251bGw7IHRoZW4KLQkJX19naXRfY29tcGxldGVfZGlmZl9pbmRleF9maWxlICJIRUFEIgorCQlfX2dpdF9jb21wbGV0ZV9pbmRleF9maWxlICItLWNvbW1pdHRhYmxlIgogCWVsc2UKIAkJIyBUaGlzIGlzIHRoZSBmaXJzdCBjb21taXQKIAkJX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAiLS1jYWNoZWQiCkBAIC0xMjQ2LDcgKzExNjIsNyBAQAogCQkJLS1uby1wcmVmaXggLS1zcmMtcHJlZml4PSAtLWRzdC1wcmVmaXg9CiAJCQktLWludGVyLWh1bmstY29udGV4dD0KIAkJCS0tcGF0aWVuY2UgLS1oaXN0b2dyYW0gLS1taW5pbWFsCi0JCQktLXJhdworCQkJLS1yYXcgLS13b3JkLWRpZmYKIAkJCS0tZGlyc3RhdCAtLWRpcnN0YXQ9IC0tZGlyc3RhdC1ieS1maWxlCiAJCQktLWRpcnN0YXQtYnktZmlsZT0gLS1jdW11bGF0aXZlCiAJCQktLWRpZmYtYWxnb3JpdGhtPQpAQCAtMTI5NCw3ICsxMjEwLDcgQEAKIAkJcmV0dXJuCiAJCTs7CiAJZXNhYwotCV9fZ2l0X2NvbXBsZXRlX2ZpbGUKKwlfX2dpdF9jb21wbGV0ZV9yZXZsaXN0X2ZpbGUKIH0KIAogX19naXRfZmV0Y2hfb3B0aW9ucz0iCkBAIC0yMzYwLDcgKzIyNzYsNyBAQAogCQlyZXR1cm4KIAkJOzsKIAllc2FjCi0JX19naXRfY29tcGxldGVfZmlsZQorCV9fZ2l0X2NvbXBsZXRlX3Jldmxpc3RfZmlsZQogfQogCiBfZ2l0X3Nob3dfYnJhbmNoICgpCkBAIC0yNTc1LDkgKzI0OTEsMTAgQEAKIAkJaT0iJHt3b3Jkc1tjXX0iCiAJCWNhc2UgIiRpIiBpbgogCQktLWdpdC1kaXI9KikgX19naXRfZGlyPSIke2kjLS1naXQtZGlyPX0iIDs7CisJCS0tZ2l0LWRpcikgICAoKGMrKykpIDsgX19naXRfZGlyPSIke3dvcmRzW2NdfSIgOzsKIAkJLS1iYXJlKSAgICAgIF9fZ2l0X2Rpcj0iLiIgOzsKIAkJLS1oZWxwKSBjb21tYW5kPSJoZWxwIjsgYnJlYWsgOzsKLQkJLWMpIGM9JCgoKytjKSkgOzsKKwkJLWN8LS13b3JrLXRyZWV8LS1uYW1lc3BhY2UpICgoYysrKSkgOzsKIAkJLSopIDs7CiAJCSopIGNvbW1hbmQ9IiRpIjsgYnJlYWsgOzsKIAkJZXNhYwpAQCAtMjU5NSw2ICsyNTEyLDcgQEAKIAkJCS0tZXhlYy1wYXRoCiAJCQktLWV4ZWMtcGF0aD0KIAkJCS0taHRtbC1wYXRoCisJCQktLW1hbi1wYXRoCiAJCQktLWluZm8tcGF0aAogCQkJLS13b3JrLXRyZWU9CiAJCQktLW5hbWVzcGFjZT0KQEAgLTI2NjMsNyArMjU4MSw3IEBACiAJCQkJLS0qPSp8Ki4pIDs7CiAJCQkJKikgYz0iJGMgIiA7OwogCQkJCWVzYWMKLQkJCQlhcnJheVskI2FycmF5KzFdPSIkYyIKKwkJCQlhcnJheSs9KCIkYyIpCiAJCQlkb25lCiAJCQljb21wc2V0IC1QICcqWz06XScKIAkJCWNvbXBhZGQgLVEgLVMgJycgLXAgIiR7Mi19IiAtYSAtLSBhcnJheSAmJiBfcmV0PTAKQEAgLTI2ODksMzUgKzI2MDcsMTkgQEAKIAkJY29tcGFkZCAtUSAtcCAiJHsyLX0iIC1mIC0tICR7PTF9ICYmIF9yZXQ9MAogCX0KIAotCV9fZ2l0X3pzaF9oZWxwZXIgKCkKLQl7Ci0JCWVtdWxhdGUgLUwga3NoCi0JCWxvY2FsIGN1ciBjd29yZCBwcmV2Ci0JCWN1cj0ke3dvcmRzW0NVUlJFTlQtMV19Ci0JCXByZXY9JHt3b3Jkc1tDVVJSRU5ULTJdfQotCQlsZXQgY3dvcmQ9Q1VSUkVOVC0xCi0JCV9fJHtzZXJ2aWNlfV9tYWluCi0JfQotCiAJX2dpdCAoKQogCXsKLQkJZW11bGF0ZSAtTCB6c2gKLQkJbG9jYWwgX3JldD0xCi0JCV9fZ2l0X3pzaF9oZWxwZXIKLQkJbGV0IF9yZXQgJiYgX2RlZmF1bHQgLVMgJycgJiYgX3JldD0wCisJCWxvY2FsIF9yZXQ9MSBjdXIgY3dvcmQgcHJldgorCQljdXI9JHt3b3Jkc1tDVVJSRU5UXX0KKwkJcHJldj0ke3dvcmRzW0NVUlJFTlQtMV19CisJCWxldCBjd29yZD1DVVJSRU5ULTEKKwkJZW11bGF0ZSBrc2ggLWMgX18ke3NlcnZpY2V9X21haW4KKwkJbGV0IF9yZXQgJiYgX2RlZmF1bHQgJiYgX3JldD0wCiAJCXJldHVybiBfcmV0CiAJfQogCiAJY29tcGRlZiBfZ2l0IGdpdCBnaXRrCiAJcmV0dXJuCi1lbGlmIFtbIC1uICR7QkFTSF9WRVJTSU9OLX0gXV07IHRoZW4KLQlpZiAoKCR7QkFTSF9WRVJTSU5GT1swXX0gPCA0KSk7IHRoZW4KLQkJIyBjb21wb3B0IGlzIG5vdCBzdXBwb3J0ZWQKLQkJX19naXRfaW5kZXhfZmlsZV9saXN0X2ZpbHRlciAoKQotCQl7Ci0JCQlfX2dpdF9pbmRleF9maWxlX2xpc3RfZmlsdGVyX2NvbXBhdAotCQl9Ci0JZmkKIGZpCiAKIF9fZ2l0X2Z1bmNfd3JhcCAoKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLnpzaCBiL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi56c2gKaW5kZXggMjU2NWQyZS4uZmFjNWU3MSAxMDA2NDQKLS0tIGEvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLnpzaAorKysgYi9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uenNoCkBAIC00LDE4ICs0LDE3IEBACiAjCiAjIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIEZlbGlwZSBDb250cmVyYXMgPGZlbGlwZS5jb250cmVyYXNAZ21haWwuY29tPgogIwotIyBZb3UgbmVlZCBnaXQncyBiYXNoIGNvbXBsZXRpb24gc2NyaXB0IGluc3RhbGxlZCBzb21ld2hlcmUsIGJ5IGRlZmF1bHQgb24gdGhlCi0jIHNhbWUgZGlyZWN0b3J5IGFzIHRoaXMgc2NyaXB0LgorIyBZb3UgbmVlZCBnaXQncyBiYXNoIGNvbXBsZXRpb24gc2NyaXB0IGluc3RhbGxlZCBzb21ld2hlcmUsIGJ5IGRlZmF1bHQgaXQKKyMgd291bGQgYmUgdGhlIGxvY2F0aW9uIGJhc2gtY29tcGxldGlvbiB1c2VzLgogIwotIyBJZiB5b3VyIHNjcmlwdCBpcyBvbiB+Ly5naXQtY29tcGxldGlvbi5zaCBpbnN0ZWFkLCB5b3UgY2FuIGNvbmZpZ3VyZSBpdCBvbgotIyB5b3VyIH4vLnpzaHJjOgorIyBJZiB5b3VyIHNjcmlwdCBpcyBzb21ld2hlcmUgZWxzZSwgeW91IGNhbiBjb25maWd1cmUgaXQgb24geW91ciB+Ly56c2hyYzoKICMKICMgIHpzdHlsZSAnOmNvbXBsZXRpb246KjoqOmdpdDoqJyBzY3JpcHQgfi8uZ2l0LWNvbXBsZXRpb24uc2gKICMKLSMgVGhlIHJlY29tbWVuZGVkIHdheSB0byBpbnN0YWxsIHRoaXMgc2NyaXB0IGlzIHRvIGNvcHkgdG8KLSMgJ34vLnpzaC9jb21wbGV0aW9uL19naXQnLCBhbmQgdGhlbiBhZGQgdGhlIGZvbGxvd2luZyB0byB5b3VyIH4vLnpzaHJjIGZpbGU6CisjIFRoZSByZWNvbW1lbmRlZCB3YXkgdG8gaW5zdGFsbCB0aGlzIHNjcmlwdCBpcyB0byBjb3B5IHRvICd+Ly56c2gvX2dpdCcsIGFuZAorIyB0aGVuIGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIgfi8uenNocmMgZmlsZToKICMKLSMgIGZwYXRoPSh+Ly56c2gvY29tcGxldGlvbiAkZnBhdGgpCisjICBmcGF0aD0ofi8uenNoICRmcGF0aCkKIAogY29tcGxldGUgKCkKIHsKQEAgLTI3LDcgKzI2LDE5IEBACiAJenN0eWxlICc6Y29tcGxldGlvbjoqOio6Z2l0OionIHRhZy1vcmRlciAnY29tbW9uLWNvbW1hbmRzJwogCiB6c3R5bGUgLXMgIjpjb21wbGV0aW9uOio6KjpnaXQ6KiIgc2NyaXB0IHNjcmlwdAotdGVzdCAteiAiJHNjcmlwdCIgJiYgc2NyaXB0PSIkKGRpcm5hbWUgJHtmdW5jc291cmNldHJhY2VbMV0lOip9KSIvZ2l0LWNvbXBsZXRpb24uYmFzaAoraWYgWyAteiAiJHNjcmlwdCIgXTsgdGhlbgorCWxvY2FsIC1hIGxvY2F0aW9ucworCWxvY2FsIGUKKwlsb2NhdGlvbnM9KAorCQknL2V0Yy9iYXNoX2NvbXBsZXRpb24uZC9naXQnICMgZmVkb3JhLCBvbGQgZGViaWFuCisJCScvdXNyL3NoYXJlL2Jhc2gtY29tcGxldGlvbi9jb21wbGV0aW9ucy9naXQnICMgYXJjaCwgdWJ1bnR1LCBuZXcgZGViaWFuCisJCScvdXNyL3NoYXJlL2Jhc2gtY29tcGxldGlvbi9naXQnICMgZ2VudG9vCisJCSQoZGlybmFtZSAke2Z1bmNzb3VyY2V0cmFjZVsxXSU6Kn0pL2dpdC1jb21wbGV0aW9uLmJhc2gKKwkJKQorCWZvciBlIGluICRsb2NhdGlvbnM7IGRvCisJCXRlc3QgLWYgJGUgJiYgc2NyaXB0PSIkZSIgJiYgYnJlYWsKKwlkb25lCitmaQogWlNIX1ZFUlNJT049JycgLiAiJHNjcmlwdCIKIAogX19naXRjb21wICgpCmRpZmYgLS1naXQgYS9jb250cmliL2NvbXBsZXRpb24vZ2l0LXByb21wdC5zaCBiL2NvbnRyaWIvY29tcGxldGlvbi9naXQtcHJvbXB0LnNoCmluZGV4IGVhZjVjMzYuLmE4MWVmNWEgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvY29tcGxldGlvbi9naXQtcHJvbXB0LnNoCisrKyBiL2NvbnRyaWIvY29tcGxldGlvbi9naXQtcHJvbXB0LnNoCkBAIC0zLDcgKzMsNyBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMDYsMjAwNyBTaGF3biBPLiBQZWFyY2UgPHNwZWFyY2VAc3BlYXJjZS5vcmc+CiAjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLjAuCiAjCi0jIFRoaXMgc2NyaXB0IGFsbG93cyB5b3UgdG8gc2VlIHRoZSBjdXJyZW50IGJyYW5jaCBpbiB5b3VyIHByb21wdC4KKyMgVGhpcyBzY3JpcHQgYWxsb3dzIHlvdSB0byBzZWUgcmVwb3NpdG9yeSBzdGF0dXMgaW4geW91ciBwcm9tcHQuCiAjCiAjIFRvIGVuYWJsZToKICMKQEAgLTEzLDIzICsxMywyNyBAQAogIyAgICAzYSkgQ2hhbmdlIHlvdXIgUFMxIHRvIGNhbGwgX19naXRfcHMxIGFzCiAjICAgICAgICBjb21tYW5kLXN1YnN0aXR1dGlvbjoKICMgICAgICAgIEJhc2g6IFBTMT0nW1x1QFxoIFxXJChfX2dpdF9wczEgIiAoJXMpIildXCQgJwotIyAgICAgICAgWlNIOiAgUFMxPSdbJW5AJW0gJWMkKF9fZ2l0X3BzMSAiICglcykiKV1cJCAnCisjICAgICAgICBaU0g6ICBzZXRvcHQgUFJPTVBUX1NVQlNUIDsgUFMxPSdbJW5AJW0gJWMkKF9fZ2l0X3BzMSAiICglcykiKV1cJCAnCiAjICAgICAgICB0aGUgb3B0aW9uYWwgYXJndW1lbnQgd2lsbCBiZSB1c2VkIGFzIGZvcm1hdCBzdHJpbmcuCi0jICAgIDNiKSBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgYXJlIHVzaW5nIGJhc2gsIF9fZ2l0X3BzMSBjYW4gYmUKLSMgICAgICAgIHVzZWQgZm9yIFBST01QVF9DT01NQU5EIHdpdGggdHdvIHBhcmFtZXRlcnMsIDxwcmU+IGFuZAotIyAgICAgICAgPHBvc3Q+LCB3aGljaCBhcmUgc3RyaW5ncyB5b3Ugd291bGQgcHV0IGluICRQUzEgYmVmb3JlCi0jICAgICAgICBhbmQgYWZ0ZXIgdGhlIHN0YXR1cyBzdHJpbmcgZ2VuZXJhdGVkIGJ5IHRoZSBnaXQtcHJvbXB0Ci0jICAgICAgICBtYWNoaW5lcnkuICBlLmcuCi0jICAgICAgICAgICBQUk9NUFRfQ09NTUFORD0nX19naXRfcHMxICJcdUBcaDpcdyIgIlxcXCQgIicKLSMgICAgICAgIHdpbGwgc2hvdyB1c2VybmFtZSwgYXQtc2lnbiwgaG9zdCwgY29sb24sIGN3ZCwgdGhlbgotIyAgICAgICAgdmFyaW91cyBzdGF0dXMgc3RyaW5nLCBmb2xsb3dlZCBieSBkb2xsYXIgYW5kIFNQLCBhcwotIyAgICAgICAgeW91ciBwcm9tcHQuCisjICAgIDNiKSBBbHRlcm5hdGl2ZWx5LCBmb3IgYSBzbGlnaHRseSBmYXN0ZXIgcHJvbXB0LCBfX2dpdF9wczEgY2FuCisjICAgICAgICBiZSB1c2VkIGZvciBQUk9NUFRfQ09NTUFORCBpbiBCYXNoIG9yIGZvciBwcmVjbWQoKSBpbiBac2gKKyMgICAgICAgIHdpdGggdHdvIHBhcmFtZXRlcnMsIDxwcmU+IGFuZCA8cG9zdD4sIHdoaWNoIGFyZSBzdHJpbmdzCisjICAgICAgICB5b3Ugd291bGQgcHV0IGluICRQUzEgYmVmb3JlIGFuZCBhZnRlciB0aGUgc3RhdHVzIHN0cmluZworIyAgICAgICAgZ2VuZXJhdGVkIGJ5IHRoZSBnaXQtcHJvbXB0IG1hY2hpbmVyeS4gIGUuZy4KKyMgICAgICAgIEJhc2g6IFBST01QVF9DT01NQU5EPSdfX2dpdF9wczEgIlx1QFxoOlx3IiAiXFxcJCAiJworIyAgICAgICAgICB3aWxsIHNob3cgdXNlcm5hbWUsIGF0LXNpZ24sIGhvc3QsIGNvbG9uLCBjd2QsIHRoZW4KKyMgICAgICAgICAgdmFyaW91cyBzdGF0dXMgc3RyaW5nLCBmb2xsb3dlZCBieSBkb2xsYXIgYW5kIFNQLCBhcworIyAgICAgICAgICB5b3VyIHByb21wdC4KKyMgICAgICAgIFpTSDogIHByZWNtZCAoKSB7IF9fZ2l0X3BzMSAiJW4iICI6JX4kICIgInwlcyIgfQorIyAgICAgICAgICB3aWxsIHNob3cgdXNlcm5hbWUsIHBpcGUsIHRoZW4gdmFyaW91cyBzdGF0dXMgc3RyaW5nLAorIyAgICAgICAgICBmb2xsb3dlZCBieSBjb2xvbiwgY3dkLCBkb2xsYXIgYW5kIFNQLCBhcyB5b3VyIHByb21wdC4KICMgICAgICAgIE9wdGlvbmFsbHksIHlvdSBjYW4gc3VwcGx5IGEgdGhpcmQgYXJndW1lbnQgd2l0aCBhIHByaW50ZgogIyAgICAgICAgZm9ybWF0IHN0cmluZyB0byBmaW5ldHVuZSB0aGUgb3V0cHV0IG9mIHRoZSBicmFuY2ggc3RhdHVzCiAjCi0jIFRoZSBhcmd1bWVudCB0byBfX2dpdF9wczEgd2lsbCBiZSBkaXNwbGF5ZWQgb25seSBpZiB5b3UgYXJlIGN1cnJlbnRseQotIyBpbiBhIGdpdCByZXBvc2l0b3J5LiAgVGhlICVzIHRva2VuIHdpbGwgYmUgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQKLSMgYnJhbmNoLgorIyBUaGUgcmVwb3NpdG9yeSBzdGF0dXMgd2lsbCBiZSBkaXNwbGF5ZWQgb25seSBpZiB5b3UgYXJlIGN1cnJlbnRseSBpbiBhCisjIGdpdCByZXBvc2l0b3J5LiBUaGUgJXMgdG9rZW4gaXMgdGhlIHBsYWNlaG9sZGVyIGZvciB0aGUgc2hvd24gc3RhdHVzLgorIworIyBUaGUgcHJvbXB0IHN0YXR1cyBhbHdheXMgaW5jbHVkZXMgdGhlIGN1cnJlbnQgYnJhbmNoIG5hbWUuCiAjCiAjIEluIGFkZGl0aW9uLCBpZiB5b3Ugc2V0IEdJVF9QUzFfU0hPV0RJUlRZU1RBVEUgdG8gYSBub25lbXB0eSB2YWx1ZSwKICMgdW5zdGFnZWQgKCopIGFuZCBzdGFnZWQgKCspIGNoYW5nZXMgd2lsbCBiZSBzaG93biBuZXh0IHRvIHRoZSBicmFuY2gKQEAgLTc3LDMxICs4MSw4IEBACiAjCiAjIElmIHlvdSB3b3VsZCBsaWtlIGEgY29sb3JlZCBoaW50IGFib3V0IHRoZSBjdXJyZW50IGRpcnR5IHN0YXRlLCBzZXQKICMgR0lUX1BTMV9TSE9XQ09MT1JISU5UUyB0byBhIG5vbmVtcHR5IHZhbHVlLiBUaGUgY29sb3JzIGFyZSBiYXNlZCBvbgotIyB0aGUgY29sb3JlZCBvdXRwdXQgb2YgImdpdCBzdGF0dXMgLXNiIi4KLQotIyBfX2dpdGRpciBhY2NlcHRzIDAgb3IgMSBhcmd1bWVudHMgKGkuZS4sIGxvY2F0aW9uKQotIyByZXR1cm5zIGxvY2F0aW9uIG9mIC5naXQgcmVwbwotX19naXRkaXIgKCkKLXsKLQkjIE5vdGU6IHRoaXMgZnVuY3Rpb24gaXMgZHVwbGljYXRlZCBpbiBnaXQtY29tcGxldGlvbi5iYXNoCi0JIyBXaGVuIHVwZGF0aW5nIGl0LCBtYWtlIHN1cmUgeW91IHVwZGF0ZSB0aGUgb3RoZXIgb25lIHRvIG1hdGNoLgotCWlmIFsgLXogIiR7MS19IiBdOyB0aGVuCi0JCWlmIFsgLW4gIiR7X19naXRfZGlyLX0iIF07IHRoZW4KLQkJCWVjaG8gIiRfX2dpdF9kaXIiCi0JCWVsaWYgWyAtbiAiJHtHSVRfRElSLX0iIF07IHRoZW4KLQkJCXRlc3QgLWQgIiR7R0lUX0RJUi19IiB8fCByZXR1cm4gMQotCQkJZWNobyAiJEdJVF9ESVIiCi0JCWVsaWYgWyAtZCAuZ2l0IF07IHRoZW4KLQkJCWVjaG8gLmdpdAotCQllbHNlCi0JCQlnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpciAyPi9kZXYvbnVsbAotCQlmaQotCWVsaWYgWyAtZCAiJDEvLmdpdCIgXTsgdGhlbgotCQllY2hvICIkMS8uZ2l0IgotCWVsc2UKLQkJZWNobyAiJDEiCi0JZmkKLX0KKyMgdGhlIGNvbG9yZWQgb3V0cHV0IG9mICJnaXQgc3RhdHVzIC1zYiIgYW5kIGFyZSBhdmFpbGFibGUgb25seSB3aGVuCisjIHVzaW5nIF9fZ2l0X3BzMSBmb3IgUFJPTVBUX0NPTU1BTkQgb3IgcHJlY21kLgogCiAjIHN0b3JlcyB0aGUgZGl2ZXJnZW5jZSBmcm9tIHVwc3RyZWFtIGluICRwCiAjIHVzZWQgYnkgR0lUX1BTMV9TSE9XVVBTVFJFQU0KQEAgLTEyNCw3ICsxMDUsNyBAQAogCQkJZmkKIAkJCTs7CiAJCXN2bi1yZW1vdGUuKi51cmwpCi0JCQlzdm5fcmVtb3RlWyAkKCgkeyNzdm5fcmVtb3RlW0BdfSArIDEpKSBdPSIkdmFsdWUiCisJCQlzdm5fcmVtb3RlWyQoKCR7I3N2bl9yZW1vdGVbQF19ICsgMSkpXT0iJHZhbHVlIgogCQkJc3ZuX3VybF9wYXR0ZXJuKz0iXFx8JHZhbHVlIgogCQkJdXBzdHJlYW09c3ZuK2dpdCAjIGRlZmF1bHQgdXBzdHJlYW0gaXMgU1ZOIGlmIGF2YWlsYWJsZSwgZWxzZSBnaXQKIAkJCTs7CkBAIC0xNDYsMTAgKzEyNywxMSBAQAogCXN2biopCiAJCSMgZ2V0IHRoZSB1cHN0cmVhbSBmcm9tIHRoZSAiZ2l0LXN2bi1pZDogLi4uIiBpbiBhIGNvbW1pdCBtZXNzYWdlCiAJCSMgKGdpdC1zdm4gdXNlcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBwcm9jZWR1cmUgaW50ZXJuYWxseSkKLQkJbG9jYWwgc3ZuX3Vwc3RyZWFtPSgkKGdpdCBsb2cgLS1maXJzdC1wYXJlbnQgLTEgXAorCQlsb2NhbCAtYSBzdm5fdXBzdHJlYW0KKwkJc3ZuX3Vwc3RyZWFtPSgkKGdpdCBsb2cgLS1maXJzdC1wYXJlbnQgLTEgXAogCQkJCQktLWdyZXA9Il5naXQtc3ZuLWlkOiBcKCR7c3ZuX3VybF9wYXR0ZXJuIz8/fVwpIiAyPi9kZXYvbnVsbCkpCiAJCWlmIFtbIDAgLW5lICR7I3N2bl91cHN0cmVhbVtAXX0gXV07IHRoZW4KLQkJCXN2bl91cHN0cmVhbT0ke3N2bl91cHN0cmVhbVsgJHsjc3ZuX3Vwc3RyZWFtW0BdfSAtIDIgXX0KKwkJCXN2bl91cHN0cmVhbT0ke3N2bl91cHN0cmVhbVskeyNzdm5fdXBzdHJlYW1bQF19IC0gMl19CiAJCQlzdm5fdXBzdHJlYW09JHtzdm5fdXBzdHJlYW0lQCp9CiAJCQlsb2NhbCBuX3N0b3A9IiR7I3N2bl9yZW1vdGVbQF19IgogCQkJZm9yICgobj0xOyBuIDw9IG5fc3RvcDsgbisrKSk7IGRvCkBAIC0yMjIsNiArMjA0LDUxIEBACiAKIH0KIAorIyBIZWxwZXIgZnVuY3Rpb24gdGhhdCBpcyBtZWFudCB0byBiZSBjYWxsZWQgZnJvbSBfX2dpdF9wczEuICBJdAorIyBpbmplY3RzIGNvbG9yIGNvZGVzIGludG8gdGhlIGFwcHJvcHJpYXRlIGdpdHN0cmluZyB2YXJpYWJsZXMgdXNlZAorIyB0byBidWlsZCBhIGdpdHN0cmluZy4KK19fZ2l0X3BzMV9jb2xvcml6ZV9naXRzdHJpbmcgKCkKK3sKKwlpZiBbWyAtbiAke1pTSF9WRVJTSU9OLX0gXV07IHRoZW4KKwkJbG9jYWwgY19yZWQ9JyVGe3JlZH0nCisJCWxvY2FsIGNfZ3JlZW49JyVGe2dyZWVufScKKwkJbG9jYWwgY19sYmx1ZT0nJUZ7Ymx1ZX0nCisJCWxvY2FsIGNfY2xlYXI9JyVmJworCWVsc2UKKwkJIyBVc2luZyBcWyBhbmQgXF0gYXJvdW5kIGNvbG9ycyBpcyBuZWNlc3NhcnkgdG8gcHJldmVudAorCQkjIGlzc3VlcyB3aXRoIGNvbW1hbmQgbGluZSBlZGl0aW5nL2Jyb3dzaW5nL2NvbXBsZXRpb24hCisJCWxvY2FsIGNfcmVkPSdcW1xlWzMxbVxdJworCQlsb2NhbCBjX2dyZWVuPSdcW1xlWzMybVxdJworCQlsb2NhbCBjX2xibHVlPSdcW1xlWzE7MzRtXF0nCisJCWxvY2FsIGNfY2xlYXI9J1xbXGVbMG1cXScKKwlmaQorCWxvY2FsIGJhZF9jb2xvcj0kY19yZWQKKwlsb2NhbCBva19jb2xvcj0kY19ncmVlbgorCWxvY2FsIGZsYWdzX2NvbG9yPSIkY19sYmx1ZSIKKworCWxvY2FsIGJyYW5jaF9jb2xvcj0iIgorCWlmIFsgJGRldGFjaGVkID0gbm8gXTsgdGhlbgorCQlicmFuY2hfY29sb3I9IiRva19jb2xvciIKKwllbHNlCisJCWJyYW5jaF9jb2xvcj0iJGJhZF9jb2xvciIKKwlmaQorCWM9IiRicmFuY2hfY29sb3IkYyIKKworCXo9IiRjX2NsZWFyJHoiCisJaWYgWyAiJHciID0gIioiIF07IHRoZW4KKwkJdz0iJGJhZF9jb2xvciR3IgorCWZpCisJaWYgWyAtbiAiJGkiIF07IHRoZW4KKwkJaT0iJG9rX2NvbG9yJGkiCisJZmkKKwlpZiBbIC1uICIkcyIgXTsgdGhlbgorCQlzPSIkZmxhZ3NfY29sb3IkcyIKKwlmaQorCWlmIFsgLW4gIiR1IiBdOyB0aGVuCisJCXU9IiRiYWRfY29sb3IkdSIKKwlmaQorCXI9IiRjX2NsZWFyJHIiCit9CiAKICMgX19naXRfcHMxIGFjY2VwdHMgMCBvciAxIGFyZ3VtZW50cyAoaS5lLiwgZm9ybWF0IHN0cmluZykKICMgd2hlbiBjYWxsZWQgZnJvbSBQUzEgdXNpbmcgY29tbWFuZCBzdWJzdGl0dXRpb24KQEAgLTI1NCw0OCArMjgxLDgzIEBACiAJCTs7CiAJZXNhYwogCi0JbG9jYWwgZz0iJChfX2dpdGRpcikiCi0JaWYgWyAteiAiJGciIF07IHRoZW4KKwlsb2NhbCByZXBvX2luZm8gcmV2X3BhcnNlX2V4aXRfY29kZQorCXJlcG9faW5mbz0iJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpciAtLWlzLWluc2lkZS1naXQtZGlyIFwKKwkJLS1pcy1iYXJlLXJlcG9zaXRvcnkgLS1pcy1pbnNpZGUtd29yay10cmVlIFwKKwkJLS1zaG9ydCBIRUFEIDI+L2Rldi9udWxsKSIKKwlyZXZfcGFyc2VfZXhpdF9jb2RlPSIkPyIKKworCWlmIFsgLXogIiRyZXBvX2luZm8iIF07IHRoZW4KIAkJaWYgWyAkcGNtb2RlID0geWVzIF07IHRoZW4KIAkJCSNJbiBQQyBtb2RlIFBTMSBhbHdheXMgbmVlZHMgdG8gYmUgc2V0CiAJCQlQUzE9IiRwczFwY19zdGFydCRwczFwY19lbmQiCiAJCWZpCi0JZWxzZQotCQlsb2NhbCByPSIiCi0JCWxvY2FsIGI9IiIKLQkJbG9jYWwgc3RlcD0iIgotCQlsb2NhbCB0b3RhbD0iIgotCQlpZiBbIC1kICIkZy9yZWJhc2UtbWVyZ2UiIF07IHRoZW4KLQkJCWI9IiQoY2F0ICIkZy9yZWJhc2UtbWVyZ2UvaGVhZC1uYW1lIikiCi0JCQlzdGVwPSQoY2F0ICIkZy9yZWJhc2UtbWVyZ2UvbXNnbnVtIikKLQkJCXRvdGFsPSQoY2F0ICIkZy9yZWJhc2UtbWVyZ2UvZW5kIikKLQkJCWlmIFsgLWYgIiRnL3JlYmFzZS1tZXJnZS9pbnRlcmFjdGl2ZSIgXTsgdGhlbgotCQkJCXI9InxSRUJBU0UtaSIKLQkJCWVsc2UKLQkJCQlyPSJ8UkVCQVNFLW0iCi0JCQlmaQotCQllbHNlCi0JCQlpZiBbIC1kICIkZy9yZWJhc2UtYXBwbHkiIF07IHRoZW4KLQkJCQlzdGVwPSQoY2F0ICIkZy9yZWJhc2UtYXBwbHkvbmV4dCIpCi0JCQkJdG90YWw9JChjYXQgIiRnL3JlYmFzZS1hcHBseS9sYXN0IikKLQkJCQlpZiBbIC1mICIkZy9yZWJhc2UtYXBwbHkvcmViYXNpbmciIF07IHRoZW4KLQkJCQkJcj0ifFJFQkFTRSIKLQkJCQllbGlmIFsgLWYgIiRnL3JlYmFzZS1hcHBseS9hcHBseWluZyIgXTsgdGhlbgotCQkJCQlyPSJ8QU0iCi0JCQkJZWxzZQotCQkJCQlyPSJ8QU0vUkVCQVNFIgotCQkJCWZpCi0JCQllbGlmIFsgLWYgIiRnL01FUkdFX0hFQUQiIF07IHRoZW4KLQkJCQlyPSJ8TUVSR0lORyIKLQkJCWVsaWYgWyAtZiAiJGcvQ0hFUlJZX1BJQ0tfSEVBRCIgXTsgdGhlbgotCQkJCXI9InxDSEVSUlktUElDS0lORyIKLQkJCWVsaWYgWyAtZiAiJGcvUkVWRVJUX0hFQUQiIF07IHRoZW4KLQkJCQlyPSJ8UkVWRVJUSU5HIgotCQkJZWxpZiBbIC1mICIkZy9CSVNFQ1RfTE9HIiBdOyB0aGVuCi0JCQkJcj0ifEJJU0VDVElORyIKLQkJCWZpCisJCXJldHVybgorCWZpCiAKLQkJCWI9IiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEIDI+L2Rldi9udWxsKSIgfHwgeworCWxvY2FsIHNob3J0X3NoYQorCWlmIFsgIiRyZXZfcGFyc2VfZXhpdF9jb2RlIiA9ICIwIiBdOyB0aGVuCisJCXNob3J0X3NoYT0iJHtyZXBvX2luZm8jIyokJ1xuJ30iCisJCXJlcG9faW5mbz0iJHtyZXBvX2luZm8lJCdcbicqfSIKKwlmaQorCWxvY2FsIGluc2lkZV93b3JrdHJlZT0iJHtyZXBvX2luZm8jIyokJ1xuJ30iCisJcmVwb19pbmZvPSIke3JlcG9faW5mbyUkJ1xuJyp9IgorCWxvY2FsIGJhcmVfcmVwbz0iJHtyZXBvX2luZm8jIyokJ1xuJ30iCisJcmVwb19pbmZvPSIke3JlcG9faW5mbyUkJ1xuJyp9IgorCWxvY2FsIGluc2lkZV9naXRkaXI9IiR7cmVwb19pbmZvIyMqJCdcbid9IgorCWxvY2FsIGc9IiR7cmVwb19pbmZvJSQnXG4nKn0iCisKKwlsb2NhbCByPSIiCisJbG9jYWwgYj0iIgorCWxvY2FsIHN0ZXA9IiIKKwlsb2NhbCB0b3RhbD0iIgorCWlmIFsgLWQgIiRnL3JlYmFzZS1tZXJnZSIgXTsgdGhlbgorCQlyZWFkIGIgMj4vZGV2L251bGwgPCIkZy9yZWJhc2UtbWVyZ2UvaGVhZC1uYW1lIgorCQlyZWFkIHN0ZXAgMj4vZGV2L251bGwgPCIkZy9yZWJhc2UtbWVyZ2UvbXNnbnVtIgorCQlyZWFkIHRvdGFsIDI+L2Rldi9udWxsIDwiJGcvcmViYXNlLW1lcmdlL2VuZCIKKwkJaWYgWyAtZiAiJGcvcmViYXNlLW1lcmdlL2ludGVyYWN0aXZlIiBdOyB0aGVuCisJCQlyPSJ8UkVCQVNFLWkiCisJCWVsc2UKKwkJCXI9InxSRUJBU0UtbSIKKwkJZmkKKwllbHNlCisJCWlmIFsgLWQgIiRnL3JlYmFzZS1hcHBseSIgXTsgdGhlbgorCQkJcmVhZCBzdGVwIDI+L2Rldi9udWxsIDwiJGcvcmViYXNlLWFwcGx5L25leHQiCisJCQlyZWFkIHRvdGFsIDI+L2Rldi9udWxsIDwiJGcvcmViYXNlLWFwcGx5L2xhc3QiCisJCQlpZiBbIC1mICIkZy9yZWJhc2UtYXBwbHkvcmViYXNpbmciIF07IHRoZW4KKwkJCQlyZWFkIGIgMj4vZGV2L251bGwgPCIkZy9yZWJhc2UtYXBwbHkvaGVhZC1uYW1lIgorCQkJCXI9InxSRUJBU0UiCisJCQllbGlmIFsgLWYgIiRnL3JlYmFzZS1hcHBseS9hcHBseWluZyIgXTsgdGhlbgorCQkJCXI9InxBTSIKKwkJCWVsc2UKKwkJCQlyPSJ8QU0vUkVCQVNFIgorCQkJZmkKKwkJZWxpZiBbIC1mICIkZy9NRVJHRV9IRUFEIiBdOyB0aGVuCisJCQlyPSJ8TUVSR0lORyIKKwkJZWxpZiBbIC1mICIkZy9DSEVSUllfUElDS19IRUFEIiBdOyB0aGVuCisJCQlyPSJ8Q0hFUlJZLVBJQ0tJTkciCisJCWVsaWYgWyAtZiAiJGcvUkVWRVJUX0hFQUQiIF07IHRoZW4KKwkJCXI9InxSRVZFUlRJTkciCisJCWVsaWYgWyAtZiAiJGcvQklTRUNUX0xPRyIgXTsgdGhlbgorCQkJcj0ifEJJU0VDVElORyIKKwkJZmkKKworCQlpZiBbIC1uICIkYiIgXTsgdGhlbgorCQkJOgorCQllbGlmIFsgLWggIiRnL0hFQUQiIF07IHRoZW4KKwkJCSMgc3ltbGluayBzeW1ib2xpYyByZWYKKwkJCWI9IiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEIDI+L2Rldi9udWxsKSIKKwkJZWxzZQorCQkJbG9jYWwgaGVhZD0iIgorCQkJaWYgISByZWFkIGhlYWQgMj4vZGV2L251bGwgPCIkZy9IRUFEIjsgdGhlbgorCQkJCWlmIFsgJHBjbW9kZSA9IHllcyBdOyB0aGVuCisJCQkJCVBTMT0iJHBzMXBjX3N0YXJ0JHBzMXBjX2VuZCIKKwkJCQlmaQorCQkJCXJldHVybgorCQkJZmkKKwkJCSMgaXMgaXQgYSBzeW1ib2xpYyByZWY/CisJCQliPSIke2hlYWQjcmVmOiB9IgorCQkJaWYgWyAiJGhlYWQiID0gIiRiIiBdOyB0aGVuCiAJCQkJZGV0YWNoZWQ9eWVzCiAJCQkJYj0iJCgKIAkJCQljYXNlICIke0dJVF9QUzFfREVTQ1JJQkVfU1RZTEUtfSIgaW4KQEAgLTMwOSwxMDQgKzM3MSw3NSBAQAogCQkJCQlnaXQgZGVzY3JpYmUgLS10YWdzIC0tZXhhY3QtbWF0Y2ggSEVBRCA7OwogCQkJCWVzYWMgMj4vZGV2L251bGwpIiB8fAogCi0JCQkJYj0iJChjdXQgLWMxLTcgIiRnL0hFQUQiIDI+L2Rldi9udWxsKS4uLiIgfHwKLQkJCQliPSJ1bmtub3duIgorCQkJCWI9IiRzaG9ydF9zaGEuLi4iCiAJCQkJYj0iKCRiKSIKLQkJCX0KLQkJZmkKLQotCQlpZiBbIC1uICIkc3RlcCIgXSAmJiBbIC1uICIkdG90YWwiIF07IHRoZW4KLQkJCXI9IiRyICRzdGVwLyR0b3RhbCIKLQkJZmkKLQotCQlsb2NhbCB3PSIiCi0JCWxvY2FsIGk9IiIKLQkJbG9jYWwgcz0iIgotCQlsb2NhbCB1PSIiCi0JCWxvY2FsIGM9IiIKLQkJbG9jYWwgcD0iIgotCi0JCWlmIFsgInRydWUiID0gIiQoZ2l0IHJldi1wYXJzZSAtLWlzLWluc2lkZS1naXQtZGlyIDI+L2Rldi9udWxsKSIgXTsgdGhlbgotCQkJaWYgWyAidHJ1ZSIgPSAiJChnaXQgcmV2LXBhcnNlIC0taXMtYmFyZS1yZXBvc2l0b3J5IDI+L2Rldi9udWxsKSIgXTsgdGhlbgotCQkJCWM9IkJBUkU6IgotCQkJZWxzZQotCQkJCWI9IkdJVF9ESVIhIgotCQkJZmkKLQkJZWxpZiBbICJ0cnVlIiA9ICIkKGdpdCByZXYtcGFyc2UgLS1pcy1pbnNpZGUtd29yay10cmVlIDI+L2Rldi9udWxsKSIgXTsgdGhlbgotCQkJaWYgWyAtbiAiJHtHSVRfUFMxX1NIT1dESVJUWVNUQVRFLX0iIF0gJiYKLQkJCSAgIFsgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgYmFzaC5zaG93RGlydHlTdGF0ZSkiICE9ICJmYWxzZSIgXQotCQkJdGhlbgotCQkJCWdpdCBkaWZmIC0tbm8tZXh0LWRpZmYgLS1xdWlldCAtLWV4aXQtY29kZSB8fCB3PSIqIgotCQkJCWlmIGdpdCByZXYtcGFyc2UgLS1xdWlldCAtLXZlcmlmeSBIRUFEID4vZGV2L251bGw7IHRoZW4KLQkJCQkJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1xdWlldCBIRUFEIC0tIHx8IGk9IisiCi0JCQkJZWxzZQotCQkJCQlpPSIjIgotCQkJCWZpCi0JCQlmaQotCQkJaWYgWyAtbiAiJHtHSVRfUFMxX1NIT1dTVEFTSFNUQVRFLX0iIF07IHRoZW4KLQkJCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvc3Rhc2ggPi9kZXYvbnVsbCAyPiYxICYmIHM9IiQiCi0JCQlmaQotCi0JCQlpZiBbIC1uICIke0dJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTLX0iIF0gJiYKLQkJCSAgIFsgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgYmFzaC5zaG93VW50cmFja2VkRmlsZXMpIiAhPSAiZmFsc2UiIF0gJiYKLQkJCSAgIFsgLW4gIiQoZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZS1zdGFuZGFyZCkiIF0KLQkJCXRoZW4KLQkJCQl1PSIlJHtaU0hfVkVSU0lPTislfSIKLQkJCWZpCi0KLQkJCWlmIFsgLW4gIiR7R0lUX1BTMV9TSE9XVVBTVFJFQU0tfSIgXTsgdGhlbgotCQkJCV9fZ2l0X3BzMV9zaG93X3Vwc3RyZWFtCiAJCQlmaQogCQlmaQorCWZpCiAKLQkJbG9jYWwgZj0iJHckaSRzJHUiCi0JCWlmIFsgJHBjbW9kZSA9IHllcyBdOyB0aGVuCi0JCQlsb2NhbCBnaXRzdHJpbmc9Ci0JCQlpZiBbIC1uICIke0dJVF9QUzFfU0hPV0NPTE9SSElOVFMtfSIgXTsgdGhlbgotCQkJCWxvY2FsIGNfcmVkPSdcZVszMW0nCi0JCQkJbG9jYWwgY19ncmVlbj0nXGVbMzJtJwotCQkJCWxvY2FsIGNfbGJsdWU9J1xlWzE7MzRtJwotCQkJCWxvY2FsIGNfY2xlYXI9J1xlWzBtJwotCQkJCWxvY2FsIGJhZF9jb2xvcj0kY19yZWQKLQkJCQlsb2NhbCBva19jb2xvcj0kY19ncmVlbgotCQkJCWxvY2FsIGJyYW5jaF9jb2xvcj0iJGNfY2xlYXIiCi0JCQkJbG9jYWwgZmxhZ3NfY29sb3I9IiRjX2xibHVlIgotCQkJCWxvY2FsIGJyYW5jaHN0cmluZz0iJGMke2IjI3JlZnMvaGVhZHMvfSIKKwlpZiBbIC1uICIkc3RlcCIgXSAmJiBbIC1uICIkdG90YWwiIF07IHRoZW4KKwkJcj0iJHIgJHN0ZXAvJHRvdGFsIgorCWZpCiAKLQkJCQlpZiBbICRkZXRhY2hlZCA9IG5vIF07IHRoZW4KLQkJCQkJYnJhbmNoX2NvbG9yPSIkb2tfY29sb3IiCi0JCQkJZWxzZQotCQkJCQlicmFuY2hfY29sb3I9IiRiYWRfY29sb3IiCi0JCQkJZmkKKwlsb2NhbCB3PSIiCisJbG9jYWwgaT0iIgorCWxvY2FsIHM9IiIKKwlsb2NhbCB1PSIiCisJbG9jYWwgYz0iIgorCWxvY2FsIHA9IiIKIAotCQkJCSMgU2V0dGluZyBnaXRzdHJpbmcgZGlyZWN0bHkgd2l0aCBcWyBhbmQgXF0gYXJvdW5kIGNvbG9ycwotCQkJCSMgaXMgbmVjZXNzYXJ5IHRvIHByZXZlbnQgd3JhcHBpbmcgaXNzdWVzIQotCQkJCWdpdHN0cmluZz0iXFskYnJhbmNoX2NvbG9yXF0kYnJhbmNoc3RyaW5nXFskY19jbGVhclxdIgotCi0JCQkJaWYgWyAtbiAiJHckaSRzJHUkciRwIiBdOyB0aGVuCi0JCQkJCWdpdHN0cmluZz0iJGdpdHN0cmluZyAiCi0JCQkJZmkKLQkJCQlpZiBbICIkdyIgPSAiKiIgXTsgdGhlbgotCQkJCQlnaXRzdHJpbmc9IiRnaXRzdHJpbmdcWyRiYWRfY29sb3JcXSR3IgotCQkJCWZpCi0JCQkJaWYgWyAtbiAiJGkiIF07IHRoZW4KLQkJCQkJZ2l0c3RyaW5nPSIkZ2l0c3RyaW5nXFskb2tfY29sb3JcXSRpIgotCQkJCWZpCi0JCQkJaWYgWyAtbiAiJHMiIF07IHRoZW4KLQkJCQkJZ2l0c3RyaW5nPSIkZ2l0c3RyaW5nXFskZmxhZ3NfY29sb3JcXSRzIgotCQkJCWZpCi0JCQkJaWYgWyAtbiAiJHUiIF07IHRoZW4KLQkJCQkJZ2l0c3RyaW5nPSIkZ2l0c3RyaW5nXFskYmFkX2NvbG9yXF0kdSIKLQkJCQlmaQotCQkJCWdpdHN0cmluZz0iJGdpdHN0cmluZ1xbJGNfY2xlYXJcXSRyJHAiCi0JCQllbHNlCi0JCQkJZ2l0c3RyaW5nPSIkYyR7YiMjcmVmcy9oZWFkcy99JHtmOisgJGZ9JHIkcCIKLQkJCWZpCi0JCQlnaXRzdHJpbmc9JChwcmludGYgLS0gIiRwcmludGZfZm9ybWF0IiAiJGdpdHN0cmluZyIpCi0JCQlQUzE9IiRwczFwY19zdGFydCRnaXRzdHJpbmckcHMxcGNfZW5kIgorCWlmIFsgInRydWUiID0gIiRpbnNpZGVfZ2l0ZGlyIiBdOyB0aGVuCisJCWlmIFsgInRydWUiID0gIiRiYXJlX3JlcG8iIF07IHRoZW4KKwkJCWM9IkJBUkU6IgogCQllbHNlCi0JCQkjIE5PIGNvbG9yIG9wdGlvbiB1bmxlc3MgaW4gUFJPTVBUX0NPTU1BTkQgbW9kZQotCQkJcHJpbnRmIC0tICIkcHJpbnRmX2Zvcm1hdCIgIiRjJHtiIyNyZWZzL2hlYWRzL30ke2Y6KyAkZn0kciRwIgorCQkJYj0iR0lUX0RJUiEiCiAJCWZpCisJZWxpZiBbICJ0cnVlIiA9ICIkaW5zaWRlX3dvcmt0cmVlIiBdOyB0aGVuCisJCWlmIFsgLW4gIiR7R0lUX1BTMV9TSE9XRElSVFlTVEFURS19IiBdICYmCisJCSAgIFsgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgYmFzaC5zaG93RGlydHlTdGF0ZSkiICE9ICJmYWxzZSIgXQorCQl0aGVuCisJCQlnaXQgZGlmZiAtLW5vLWV4dC1kaWZmIC0tcXVpZXQgLS1leGl0LWNvZGUgfHwgdz0iKiIKKwkJCWlmIFsgLW4gIiRzaG9ydF9zaGEiIF07IHRoZW4KKwkJCQlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLXF1aWV0IEhFQUQgLS0gfHwgaT0iKyIKKwkJCWVsc2UKKwkJCQlpPSIjIgorCQkJZmkKKwkJZmkKKwkJaWYgWyAtbiAiJHtHSVRfUFMxX1NIT1dTVEFTSFNUQVRFLX0iIF0gJiYKKwkJICAgWyAtciAiJGcvcmVmcy9zdGFzaCIgXTsgdGhlbgorCQkJcz0iJCIKKwkJZmkKKworCQlpZiBbIC1uICIke0dJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTLX0iIF0gJiYKKwkJICAgWyAiJChnaXQgY29uZmlnIC0tYm9vbCBiYXNoLnNob3dVbnRyYWNrZWRGaWxlcykiICE9ICJmYWxzZSIgXSAmJgorCQkgICBnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS1leGNsdWRlLXN0YW5kYXJkIC0tZXJyb3ItdW5tYXRjaCAtLSAnKicgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbAorCQl0aGVuCisJCQl1PSIlJHtaU0hfVkVSU0lPTislfSIKKwkJZmkKKworCQlpZiBbIC1uICIke0dJVF9QUzFfU0hPV1VQU1RSRUFNLX0iIF07IHRoZW4KKwkJCV9fZ2l0X3BzMV9zaG93X3Vwc3RyZWFtCisJCWZpCisJZmkKKworCWxvY2FsIHo9IiR7R0lUX1BTMV9TVEFURVNFUEFSQVRPUi0iICJ9IgorCisJIyBOTyBjb2xvciBvcHRpb24gdW5sZXNzIGluIFBST01QVF9DT01NQU5EIG1vZGUKKwlpZiBbICRwY21vZGUgPSB5ZXMgXSAmJiBbIC1uICIke0dJVF9QUzFfU0hPV0NPTE9SSElOVFMtfSIgXTsgdGhlbgorCQlfX2dpdF9wczFfY29sb3JpemVfZ2l0c3RyaW5nCisJZmkKKworCWxvY2FsIGY9IiR3JGkkcyR1IgorCWxvY2FsIGdpdHN0cmluZz0iJGMke2IjI3JlZnMvaGVhZHMvfSR7ZjorJHokZn0kciRwIgorCisJaWYgWyAkcGNtb2RlID0geWVzIF07IHRoZW4KKwkJaWYgW1sgLW4gJHtaU0hfVkVSU0lPTi19IF1dOyB0aGVuCisJCQlnaXRzdHJpbmc9JChwcmludGYgLS0gIiRwcmludGZfZm9ybWF0IiAiJGdpdHN0cmluZyIpCisJCWVsc2UKKwkJCXByaW50ZiAtdiBnaXRzdHJpbmcgLS0gIiRwcmludGZfZm9ybWF0IiAiJGdpdHN0cmluZyIKKwkJZmkKKwkJUFMxPSIkcHMxcGNfc3RhcnQkZ2l0c3RyaW5nJHBzMXBjX2VuZCIKKwllbHNlCisJCXByaW50ZiAtLSAiJHByaW50Zl9mb3JtYXQiICIkZ2l0c3RyaW5nIgogCWZpCiB9CmRpZmYgLS1naXQgYS9jb250cmliL2NvbnRhY3RzL2dpdC1jb250YWN0cyBiL2NvbnRyaWIvY29udGFjdHMvZ2l0LWNvbnRhY3RzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ4MGY3ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NvbnRhY3RzL2dpdC1jb250YWN0cwpAQCAtMCwwICsxLDE4OCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgTGlzdCBwZW9wbGUgd2hvIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4gYSBwYXRjaC4gIFVzZWZ1bCBhcyB0aGUgYXJndW1lbnQgdG8KKyMgZ2l0LXNlbmQtZW1haWwgLS1jYy1jbWQgb3B0aW9uLCBhbmQgaW4gb3RoZXIgc2l0dWF0aW9ucy4KKyMKKyMgVXNhZ2U6IGdpdCBjb250YWN0cyA8ZmlsZSB8IHJldi1saXN0IG9wdGlvbj4gLi4uCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgSVBDOjpPcGVuMjsKKworbXkgJHNpbmNlID0gJzUteWVhcnMtYWdvJzsKK215ICRtaW5fcGVyY2VudCA9IDEwOworbXkgJGxhYmVsc19yeCA9IHFyL1NpZ25lZC1vZmYtYnl8UmV2aWV3ZWQtYnl8QWNrZWQtYnl8Q2MvaTsKK215ICVzZWVuOworCitzdWIgZm9ybWF0X2NvbnRhY3QgeworCW15ICgkbmFtZSwgJGVtYWlsKSA9IEBfOworCXJldHVybiAiJG5hbWUgPCRlbWFpbD4iOworfQorCitzdWIgcGFyc2VfY29tbWl0IHsKKwlteSAoJGNvbW1pdCwgJGRhdGEpID0gQF87CisJbXkgJGNvbnRhY3RzID0gJGNvbW1pdC0+e2NvbnRhY3RzfTsKKwlteSAkaW5ib2R5ID0gMDsKKwlmb3IgKHNwbGl0KC9eL20sICRkYXRhKSkgeworCQlpZiAobm90ICRpbmJvZHkpIHsKKwkJCWlmICgvXmF1dGhvciAoW148Pl0rKSA8KFxTKyk+IC4rJC8pIHsKKwkJCQkkY29udGFjdHMtPntmb3JtYXRfY29udGFjdCgkMSwgJDIpfSA9IDE7CisJCQl9IGVsc2lmICgvXiQvKSB7CisJCQkJJGluYm9keSA9IDE7CisJCQl9CisJCX0gZWxzaWYgKC9eJGxhYmVsc19yeDpccysoW148Pl0rKVxzKzwoXFMrPyk+JC9vKSB7CisJCQkkY29udGFjdHMtPntmb3JtYXRfY29udGFjdCgkMSwgJDIpfSA9IDE7CisJCX0KKwl9Cit9CisKK3N1YiBpbXBvcnRfY29tbWl0cyB7CisJbXkgKCRjb21taXRzKSA9IEBfOworCXJldHVybiB1bmxlc3MgJSRjb21taXRzOworCW15ICRwaWQgPSBvcGVuMiBteSAkcmVhZGVyLCBteSAkd3JpdGVyLCBxdyhnaXQgY2F0LWZpbGUgLS1iYXRjaCk7CisJZm9yIG15ICRpZCAoa2V5cyglJGNvbW1pdHMpKSB7CisJCXByaW50ICR3cml0ZXIgIiRpZFxuIjsKKwkJbXkgJGxpbmUgPSA8JHJlYWRlcj47CisJCWlmICgkbGluZSA9fiAvXihbMC05YS1mXXs0MH0pIGNvbW1pdCAoXGQrKS8pIHsKKwkJCW15ICgkY2lkLCAkbGVuKSA9ICgkMSwgJDIpOworCQkJZGllICJleHBlY3RlZCAkaWQgYnV0IGdvdCAkY2lkXG4iIHVubGVzcyAkaWQgZXEgJGNpZDsKKwkJCW15ICRkYXRhOworCQkJIyBjYXQtZmlsZSBlbWl0cyBuZXdsaW5lIGFmdGVyIGRhdGEsIHNvIHJlYWQgbGVuKzEKKwkJCXJlYWQgJHJlYWRlciwgJGRhdGEsICRsZW4gKyAxOworCQkJcGFyc2VfY29tbWl0KCRjb21taXRzLT57JGlkfSwgJGRhdGEpOworCQl9CisJfQorCWNsb3NlICRyZWFkZXI7CisJY2xvc2UgJHdyaXRlcjsKKwl3YWl0cGlkKCRwaWQsIDApOworCWRpZSAiZ2l0LWNhdC1maWxlIGVycm9yOiAkP1xuIiBpZiAkPzsKK30KKworc3ViIGdldF9ibGFtZSB7CisJbXkgKCRjb21taXRzLCAkc291cmNlLCAkc3RhcnQsICRsZW4sICRmcm9tKSA9IEBfOworCSRsZW4gPSAxIHVubGVzcyBkZWZpbmVkKCRsZW4pOworCXJldHVybiBpZiAkbGVuID09IDA7CisJb3BlbiBteSAkZiwgJy18JywKKwkJcXcoZ2l0IGJsYW1lIC0tcG9yY2VsYWluIC1DKSwgJy1MJywgIiRzdGFydCwrJGxlbiIsCisJCSctLXNpbmNlJywgJHNpbmNlLCAiJGZyb21eIiwgJy0tJywgJHNvdXJjZSBvciBkaWU7CisJd2hpbGUgKDwkZj4pIHsKKwkJaWYgKC9eKFswLTlhLWZdezQwfSkgXGQrIFxkKyBcZCskLykgeworCQkJbXkgJGlkID0gJDE7CisJCQkkY29tbWl0cy0+eyRpZH0gPSB7IGlkID0+ICRpZCwgY29udGFjdHMgPT4ge30gfQorCQkJCXVubGVzcyAkc2VlbnskaWR9OworCQkJJHNlZW57JGlkfSA9IDE7CisJCX0KKwl9CisJY2xvc2UgJGY7Cit9CisKK3N1YiBzY2FuX3BhdGNoZXMgeworCW15ICgkY29tbWl0cywgJGlkLCAkZikgPSBAXzsKKwlteSAkc291cmNlOworCXdoaWxlICg8JGY+KSB7CisJCWlmICgvXkZyb20gKFswLTlhLWZdezQwfSkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxJC8pIHsKKwkJCSRpZCA9ICQxOworCQkJJHNlZW57JGlkfSA9IDE7CisJCX0KKwkJbmV4dCB1bmxlc3MgJGlkOworCQlpZiAobXteLS0tICg/OmEvKC4rKXwvZGV2L251bGwpJH0pIHsKKwkJCSRzb3VyY2UgPSAkMTsKKwkJfSBlbHNpZiAoL14tLS0gLykgeworCQkJZGllICJDYW5ub3QgcGFyc2UgaHVuayBzb3VyY2U6ICRfXG4iOworCQl9IGVsc2lmICgvXkBAIC0oXGQrKSg/OiwoXGQrKSk/LyAmJiAkc291cmNlKSB7CisJCQlnZXRfYmxhbWUoJGNvbW1pdHMsICRzb3VyY2UsICQxLCAkMiwgJGlkKTsKKwkJfQorCX0KK30KKworc3ViIHNjYW5fcGF0Y2hfZmlsZSB7CisJbXkgKCRjb21taXRzLCAkZmlsZSkgPSBAXzsKKwlvcGVuIG15ICRmLCAnPCcsICRmaWxlIG9yIGRpZSAicmVhZCBmYWlsdXJlOiAkZmlsZTogJCFcbiI7CisJc2Nhbl9wYXRjaGVzKCRjb21taXRzLCB1bmRlZiwgJGYpOworCWNsb3NlICRmOworfQorCitzdWIgcGFyc2VfcmV2X2FyZ3MgeworCW15IEBhcmdzID0gQF87CisJb3BlbiBteSAkZiwgJy18JywKKwkJcXcoZ2l0IHJldi1wYXJzZSAtLXJldnMtb25seSAtLWRlZmF1bHQgSEVBRCAtLXN5bWJvbGljKSwgQGFyZ3MKKwkJb3IgZGllOworCW15IEByZXZzOworCXdoaWxlICg8JGY+KSB7CisJCWNob21wOworCQlwdXNoIEByZXZzLCAkXzsKKwl9CisJY2xvc2UgJGY7CisJcmV0dXJuIEByZXZzIGlmIHNjYWxhcihAcmV2cykgIT0gMTsKKwlyZXR1cm4gIl4kcmV2c1swXSIsICdIRUFEJyB1bmxlc3MgJHJldnNbMF0gPX4gL14tLzsKKwlyZXR1cm4gJHJldnNbMF0sICdIRUFEJzsKK30KKworc3ViIHNjYW5fcmV2X2FyZ3MgeworCW15ICgkY29tbWl0cywgJGFyZ3MpID0gQF87CisJbXkgQHJldnMgPSBwYXJzZV9yZXZfYXJncyhAJGFyZ3MpOworCW9wZW4gbXkgJGYsICctfCcsIHF3KGdpdCByZXYtbGlzdCAtLXJldmVyc2UpLCBAcmV2cyBvciBkaWU7CisJd2hpbGUgKDwkZj4pIHsKKwkJY2hvbXA7CisJCW15ICRpZCA9ICRfOworCQkkc2VlbnskaWR9ID0gMTsKKwkJb3BlbiBteSAkZywgJy18JywgcXcoZ2l0IHNob3cgLUMgLS1vbmVsaW5lKSwgJGlkIG9yIGRpZTsKKwkJc2Nhbl9wYXRjaGVzKCRjb21taXRzLCAkaWQsICRnKTsKKwkJY2xvc2UgJGc7CisJfQorCWNsb3NlICRmOworfQorCitzdWIgbWFpbG1hcF9jb250YWN0cyB7CisJbXkgKCRjb250YWN0cykgPSBAXzsKKwlteSAlbWFwcGVkOworCW15ICRwaWQgPSBvcGVuMiBteSAkcmVhZGVyLCBteSAkd3JpdGVyLCBxdyhnaXQgY2hlY2stbWFpbG1hcCAtLXN0ZGluKTsKKwlmb3IgbXkgJGNvbnRhY3QgKGtleXMoJSRjb250YWN0cykpIHsKKwkJcHJpbnQgJHdyaXRlciAiJGNvbnRhY3RcbiI7CisJCW15ICRjYW5vbmljYWwgPSA8JHJlYWRlcj47CisJCWNob21wICRjYW5vbmljYWw7CisJCSRtYXBwZWR7JGNhbm9uaWNhbH0gKz0gJGNvbnRhY3RzLT57JGNvbnRhY3R9OworCX0KKwljbG9zZSAkcmVhZGVyOworCWNsb3NlICR3cml0ZXI7CisJd2FpdHBpZCgkcGlkLCAwKTsKKwlkaWUgImdpdC1jaGVjay1tYWlsbWFwIGVycm9yOiAkP1xuIiBpZiAkPzsKKwlyZXR1cm4gXCVtYXBwZWQ7Cit9CisKK2lmICghQEFSR1YpIHsKKwlkaWUgIk5vIGlucHV0IHJldmlzaW9ucyBvciBwYXRjaCBmaWxlc1xuIjsKK30KKworbXkgKEBmaWxlcywgQHJldl9hcmdzKTsKK2ZvciAoQEFSR1YpIHsKKwlpZiAoLWUpIHsKKwkJcHVzaCBAZmlsZXMsICRfOworCX0gZWxzZSB7CisJCXB1c2ggQHJldl9hcmdzLCAkXzsKKwl9Cit9CisKK215ICVjb21taXRzOworZm9yIChAZmlsZXMpIHsKKwlzY2FuX3BhdGNoX2ZpbGUoXCVjb21taXRzLCAkXyk7Cit9CitpZiAoQHJldl9hcmdzKSB7CisJc2Nhbl9yZXZfYXJncyhcJWNvbW1pdHMsIFxAcmV2X2FyZ3MpCit9CitpbXBvcnRfY29tbWl0cyhcJWNvbW1pdHMpOworCitteSAkY29udGFjdHMgPSB7fTsKK2ZvciBteSAkY29tbWl0ICh2YWx1ZXMgJWNvbW1pdHMpIHsKKwlmb3IgbXkgJGNvbnRhY3QgKGtleXMgJXskY29tbWl0LT57Y29udGFjdHN9fSkgeworCQkkY29udGFjdHMtPnskY29udGFjdH0rKzsKKwl9Cit9CiskY29udGFjdHMgPSBtYWlsbWFwX2NvbnRhY3RzKCRjb250YWN0cyk7CisKK215ICRuY29tbWl0cyA9IHNjYWxhcihrZXlzICVjb21taXRzKTsKK2ZvciBteSAkY29udGFjdCAoa2V5cyAlJGNvbnRhY3RzKSB7CisJbXkgJHBlcmNlbnQgPSAkY29udGFjdHMtPnskY29udGFjdH0gKiAxMDAgLyAkbmNvbW1pdHM7CisJbmV4dCBpZiAkcGVyY2VudCA8ICRtaW5fcGVyY2VudDsKKwlwcmludCAiJGNvbnRhY3RcbiI7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2NvbnRhY3RzL2dpdC1jb250YWN0cy50eHQgYi9jb250cmliL2NvbnRhY3RzL2dpdC1jb250YWN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ5MTRkMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29udGFjdHMvZ2l0LWNvbnRhY3RzLnR4dApAQCAtMCwwICsxLDk0IEBACitnaXQtY29udGFjdHMoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY29udGFjdHMgLSBMaXN0IHBlb3BsZSB3aG8gbWlnaHQgYmUgaW50ZXJlc3RlZCBpbiBhIHNldCBvZiBjaGFuZ2VzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNvbnRhY3RzJyAoPHBhdGNoPnw8cmFuZ2U+fDxyZXY+KS4uLgorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitHaXZlbiBhIHNldCBvZiBjaGFuZ2VzLCBzcGVjaWZpZWQgYXMgcGF0Y2ggZmlsZXMgb3IgcmV2aXNpb25zLCBkZXRlcm1pbmUgcGVvcGxlCit3aG8gbWlnaHQgYmUgaW50ZXJlc3RlZCBpbiB0aG9zZSBjaGFuZ2VzLiAgVGhpcyBpcyBkb25lIGJ5IGNvbnN1bHRpbmcgdGhlCitoaXN0b3J5IG9mIGVhY2ggcGF0Y2ggb3IgcmV2aXNpb24gaHVuayB0byBmaW5kIHBlb3BsZSBtZW50aW9uZWQgYnkgY29tbWl0cword2hpY2ggdG91Y2hlZCB0aGUgbGluZXMgb2YgZmlsZXMgdW5kZXIgY29uc2lkZXJhdGlvbi4KKworSW5wdXQgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgcGF0Y2ggZmlsZXMgb3IgcmV2aXNpb24gYXJndW1lbnRzLiAgQSByZXZpc2lvbgorYXJndW1lbnQgY2FuIGJlIGEgcmFuZ2Ugb3IgYSBzaW5nbGUgYDxyZXY+YCB3aGljaCBpcyBpbnRlcnByZXRlZCBhcworYDxyZXY+Li5IRUFEYCwgdGh1cyB0aGUgc2FtZSByZXZpc2lvbiBhcmd1bWVudHMgYXJlIGFjY2VwdGVkIGFzIGZvcgorbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLiBQYXRjaCBmaWxlcyBhbmQgcmV2aXNpb24gYXJndW1lbnRzIGNhbiBiZSBjb21iaW5lZAoraW4gdGhlIHNhbWUgaW52b2NhdGlvbi4KKworVGhpcyBjb21tYW5kIGNhbiBiZSB1c2VmdWwgZm9yIGRldGVybWluaW5nIHRoZSBsaXN0IG9mIHBlb3BsZSB3aXRoIHdob20gdG8KK2Rpc2N1c3MgcHJvcG9zZWQgY2hhbmdlcywgb3IgZm9yIGZpbmRpbmcgdGhlIGxpc3Qgb2YgcmVjaXBpZW50cyB0byBDYzogd2hlbgorc3VibWl0dGluZyBhIHBhdGNoIHNlcmllcyB2aWEgYGdpdCBzZW5kLWVtYWlsYC4gRm9yIHRoZSBsYXR0ZXIgY2FzZSwgYGdpdAorY29udGFjdHNgIGNhbiBiZSB1c2VkIGFzIHRoZSBhcmd1bWVudCB0byBgZ2l0IHNlbmQtZW1haWxgJ3MgYC0tY2MtY21kYCBvcHRpb24uCisKKworRElTQ1VTU0lPTgorLS0tLS0tLS0tLQorCitgZ2l0IGJsYW1lYCBpcyBpbnZva2VkIGZvciBlYWNoIGh1bmsgaW4gYSBwYXRjaCBmaWxlIG9yIHJldmlzaW9uLiAgRm9yIGVhY2gKK2NvbW1pdCBtZW50aW9uZWQgYnkgYGdpdCBibGFtZWAsIHRoZSBjb21taXQgbWVzc2FnZSBpcyBjb25zdWx0ZWQgZm9yIHBlb3BsZSB3aG8KK2F1dGhvcmVkLCByZXZpZXdlZCwgc2lnbmVkLCBhY2tub3dsZWRnZWQsIG9yIHdlcmUgQ2M6J2QuICBPbmNlIHRoZSBsaXN0IG9mCitwYXJ0aWNpcGFudHMgaXMga25vd24sIGVhY2ggcGVyc29uJ3MgcmVsZXZhbmNlIGlzIGNvbXB1dGVkIGJ5IGNvbnNpZGVyaW5nIGhvdworbWFueSBjb21taXRzIG1lbnRpb25lZCB0aGF0IHBlcnNvbiBjb21wYXJlZCB3aXRoIHRoZSB0b3RhbCBudW1iZXIgb2YgY29tbWl0cwordW5kZXIgY29uc2lkZXJhdGlvbi4gIFRoZSBmaW5hbCBvdXRwdXQgY29uc2lzdHMgb25seSBvZiBwYXJ0aWNpcGFudHMgd2hvIGV4Y2VlZAorYSBtaW5pbXVtIHRocmVzaG9sZCBvZiBwYXJ0aWNpcGF0aW9uLgorCisKK09VVFBVVAorLS0tLS0tCisKK0ZvciBlYWNoIHBlcnNvbiBvZiBpbnRlcmVzdCwgYSBzaW5nbGUgbGluZSBpcyBvdXRwdXQsIHRlcm1pbmF0ZWQgYnkgYSBuZXdsaW5lLgorSWYgdGhlIHBlcnNvbidzIG5hbWUgaXMga25vd24sIGBgTmFtZSAkJDx1c2VyQGhvc3Q+JCQnJyBpcyBwcmludGVkOyBvdGhlcndpc2UKK29ubHkgYGAkJDx1c2VyQGhvc3Q+JCQnJyBpcyBwcmludGVkLgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCisqIENvbnN1bHQgcGF0Y2ggZmlsZXM6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbnRhY3RzIGZlYXR1cmUvKi5wYXRjaAorLS0tLS0tLS0tLS0tCisKKyogUmV2aXNpb24gcmFuZ2U6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbnRhY3RzIFIxLi5SMgorLS0tLS0tLS0tLS0tCisKKyogRnJvbSBhIHNpbmdsZSByZXZpc2lvbiB0byBgSEVBRGA6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbnRhY3RzIG9yaWdpbgorLS0tLS0tLS0tLS0tCisKKyogSGVscGVyIGZvciBgZ2l0IHNlbmQtZW1haWxgOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBzZW5kLWVtYWlsIC0tY2MtY21kPSdnaXQgY29udGFjdHMnIGZlYXR1cmUvKi5wYXRjaAorLS0tLS0tLS0tLS0tCisKKworTElNSVRBVElPTlMKKy0tLS0tLS0tLS0tCisKK1NldmVyYWwgY29uZGl0aW9ucyBjb250cm9sbGluZyBhIHBlcnNvbidzIHNpZ25pZmljYW5jZSBhcmUgY3VycmVudGx5CitoYXJkLWNvZGVkLCBzdWNoIGFzIG1pbmltdW0gcGFydGljaXBhdGlvbiBsZXZlbCAoMTAlKSwgYmxhbWUgZGF0ZS1saW1pdGluZyAoNQoreWVhcnMpLCBhbmQgYC1DYCBsZXZlbCBmb3IgZGV0ZWN0aW5nIG1vdmVkIGFuZCBjb3BpZWQgbGluZXMgKGEgc2luZ2xlIGAtQ2ApLiBJbgordGhlIGZ1dHVyZSwgdGhlc2UgY29uZGl0aW9ucyBtYXkgYmVjb21lIGNvbmZpZ3VyYWJsZS4KKworCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29udGludW91cy9jaWRhZW1vbiBiL2NvbnRyaWIvY29udGludW91cy9jaWRhZW1vbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAwOWExNS4uMDAwMDAwMAotLS0gYS9jb250cmliL2NvbnRpbnVvdXMvY2lkYWVtb24KKysrIC9kZXYvbnVsbApAQCAtMSw1MDMgKzAsMCBAQAotIyEvdXNyL2Jpbi9wZXJsCi0jCi0jIEEgZGFlbW9uIHRoYXQgd2FpdHMgZm9yIHVwZGF0ZSBldmVudHMgc2VudCBieSBpdHMgY29tcGFuaW9uCi0jIHBvc3QtcmVjZWl2ZS1jaW5vdGlmeSBob29rLCBjaGVja3Mgb3V0IGEgbmV3IGNvcHkgb2Ygc291cmNlLAotIyBjb21waWxlcyBpdCwgYW5kIGVtYWlscyB0aGUgZ3VpbHR5IHBhcnRpZXMgaWYgdGhlIGNvbXBpbGUKLSMgKGFuZCBvcHRpb25hbGx5IHRlc3Qgc3VpdGUpIGZhaWxzLgotIwotIyBUbyB1c2UgdGhpcyBkYWVtb24sIGNvbmZpZ3VyZSBpdCBhbmQgcnVuIGl0LiAgSXQgd2lsbCBkaXNjb25uZWN0Ci0jIGZyb20geW91ciB0ZXJtaW5hbCBhbmQgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kLiAgVGhlIGRhZW1vbiBtdXN0Ci0jIGhhdmUgbG9jYWwgZmlsZXN5c3RlbSBhY2Nlc3MgdG8gdGhlIHNvdXJjZSByZXBvc2l0b3JpZXMsIGFzIGl0Ci0jIHVzZXMgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgdG8gYXZvaWQgY29weWluZyBvYmplY3RzLgotIwotIyBBZGQgaXRzIGNvbXBhbmlvbiBwb3N0LXJlY2VpdmUtY2lub3RpZnkgaG9vayBhcyB0aGUgcG9zdC1yZWNlaXZlCi0jIGhvb2sgdG8gZWFjaCByZXBvc2l0b3J5IHRoYXQgdGhlIGRhZW1vbiBzaG91bGQgbW9uaXRvci4gIFllcywgYQotIyBzaW5nbGUgZGFlbW9uIGNhbiBtb25pdG9yIG1vcmUgdGhhbiBvbmUgcmVwb3NpdG9yeS4KLSMKLSMgVG8gdXNlIG11bHRpcGxlIGRhZW1vbnMgb24gdGhlIHNhbWUgc3lzdGVtLCBnaXZlIHRoZW0gZWFjaCBhCi0jIHVuaXF1ZSBxdWV1ZSBmaWxlIGFuZCB0bXBkaXIuCi0jCi0jIEdsb2JhbCBDb25maWcKLSMgLS0tLS0tLS0tLS0tLQotIyBSZWFkcyBmcm9tIGEgR2l0IHN0eWxlIGNvbmZpZ3VyYXRpb24gZmlsZS4gIFRoaXMgd2lsbCBiZQotIyB+Ly5naXRjb25maWcgYnkgZGVmYXVsdCBidXQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgc2V0dGluZwotIyB0aGUgR0lUX0NPTkZJR19GSUxFIGVudmlyb25tZW50IHZhcmlhYmxlIGJlZm9yZSBzdGFydGluZy4KLSMKLSMgY2lkYWVtb24uc210cEhvc3QKLSMgICBIb3N0bmFtZSBvZiB0aGUgU01UUCBzZXJ2ZXIgdGhlIGRhZW1vbiB3aWxsIHNlbmQgZW1haWwKLSMgICB0aHJvdWdoLiAgRGVmYXVsdHMgdG8gJ2xvY2FsaG9zdCcuCi0jCi0jIGNpZGFlbW9uLnNtdHBVc2VyCi0jICAgVXNlcm5hbWUgdG8gYXV0aGVudGljYXRlIHRvIHRoZSBTTVRQIHNlcnZlciBhcy4gIFRoaXMKLSMgICB2YXJpYWJsZSBpcyBvcHRpb25hbDsgaWYgaXQgaXMgbm90IHN1cHBsaWVkIHRoZW4gbm8KLSMgICBhdXRoZW50aWNhdGlvbiB3aWxsIGJlIHBlcmZvcm1lZC4KLSMKLSMgY2lkYWVtb24uc210cFBhc3N3b3JkCi0jICAgUGFzc3dvcmQgdG8gYXV0aGVudGljYXRlIHRvIHRoZSBTTVRQIHNlcnZlciBhcy4gIFRoaXMKLSMgICB2YXJpYWJsZSBpcyBvcHRpb25hbC4gIElmIG5vdCBzdXBwbGllZCBidXQgc210cFVzZXIgd2FzLAotIyAgIHRoZSBkYWVtb24gcHJvbXB0cyBmb3IgdGhlIHBhc3N3b3JkIGJlZm9yZSBmb3JraW5nIGludG8KLSMgICB0aGUgYmFja2dyb3VuZC4KLSMKLSMgY2lkYWVtb24uc210cEF1dGgKLSMgICBUeXBlIG9mIGF1dGhlbnRpY2F0aW9uIHRvIHBlcmZvcm0gd2l0aCB0aGUgU01UUCBzZXJ2ZXIuCi0jICAgSWYgc2V0IHRvICdsb2dpbicgYW5kIHNtdHBVc2VyIHdhcyBkZWZpbmVkLCB0aGlzIHdpbGwKLSMgICB1c2UgdGhlIEFVVEggTE9HSU4gY29tbWFuZCwgd2hpY2ggaXMgc3VpdGFibGUgZm9yIHVzZQotIyAgIHdpdGggYXQgbGVhc3Qgb25lIHZlcnNpb24gb2YgTWljcm9zb2Z0IEV4Y2hhbmdlIFNlcnZlci4KLSMgICBJZiBub3Qgc2V0IHRoZSBkYWVtb24gd2lsbCB1c2Ugd2hhdGV2ZXIgYXV0aCBtZXRob2RzCi0jICAgYXJlIHN1cHBvcnRlZCBieSB5b3VyIHZlcnNpb24gb2YgTmV0OjpTTVRQLgotIwotIyBjaWRhZW1vbi5lbWFpbAotIyAgIEVtYWlsIGFkZHJlc3MgdGhhdCBkYWVtb24gZ2VuZXJhdGVkIGVtYWlscyB3aWxsIGJlIHNlbnQKLSMgICBmcm9tLiAgVGhpcyBzaG91bGQgYmUgYSB1c2VmdWwgZW1haWwgYWRkcmVzcyB3aXRoaW4geW91cgotIyAgIG9yZ2FuaXphdGlvbi4gIFJlcXVpcmVkLgotIwotIyBjaWRhZW1vbi5uYW1lCi0jICAgSHVtYW4gZnJpZW5kbHkgbmFtZSB0aGF0IHRoZSBkYWVtb24gd2lsbCBzZW5kIGVtYWlscyBhcy4KLSMgICBEZWZhdWx0cyB0byAnY2lkYWVtb24nLgotIwotIyBjaWRhZW1vbi5zY2FuRGVsYXkKLSMgICBOdW1iZXIgb2Ygc2Vjb25kcyB0byBzbGVlcCBiZXR3ZWVuIHBvbGxzIG9mIHRoZSBxdWV1ZSBmaWxlLgotIyAgIERlZmF1bHRzIHRvIDYwLgotIwotIyBjaWRhZW1vbi5yZWNlbnRDYWNoZQotIyAgIE51bWJlciBvZiByZWNlbnQgY29tbWl0IFNIQS0xcyBwZXIgcmVwb3NpdG9yeSB0byBjYWNoZSBhbmQKLSMgICBza2lwIGJ1aWxkaW5nIGlmIHRoZXkgYXBwZWFyIGFnYWluLiAgVGhpcyBpcyB1c2VmdWwgdG8gYXZvaWQKLSMgICByZWJ1aWxkaW5nIHRoZSBzYW1lIGNvbW1pdCBtdWx0aXBsZSB0aW1lcyBqdXN0IGJlY2F1c2UgaXQgd2FzCi0jICAgcHVzaGVkIGludG8gbW9yZSB0aGFuIG9uZSBicmFuY2guICBEZWZhdWx0cyB0byAxMDAuCi0jCi0jIGNpZGFlbW9uLnRtcGRpcgotIyAgIFNjcmF0Y2ggZGlyZWN0b3J5IHRvIGNyZWF0ZSB0aGUgYnVpbGRzIHdpdGhpbi4gIFRoZSBkYWVtb24KLSMgICBtYWtlcyBhIG5ldyBzdWJkaXJlY3RvcnkgZm9yIGVhY2ggYnVpbGQsIHRoZW4gZGVsZXRlcyBpdCB3aGVuCi0jICAgdGhlIGJ1aWxkIGhhcyBmaW5pc2hlZC4gIFRoZSBwaWQgZmlsZSBpcyBhbHNvIHBsYWNlZCBoZXJlLgotIyAgIERlZmF1bHRzIHRvICcvdG1wJy4KLSMKLSMgY2lkYWVtb24ucXVldWUKLSMgICBQYXRoIHRvIHRoZSBxdWV1ZSBmaWxlIHRoYXQgdGhlIHBvc3QtcmVjZWl2ZS1jaW5vdGlmeSBob29rCi0jICAgYXBwZW5kcyBldmVudHMgdG8uICBUaGlzIGZpbGUgaXMgcG9sbGVkIGJ5IHRoZSBkYWVtb24uICBJdAotIyAgIG11c3Qgbm90IGJlIG9uIGFuIE5GUyBtb3VudCAodXNlcyBmbG9jaykuICBSZXF1aXJlZC4KLSMKLSMgY2lkYWVtb24ubm9jYwotIyAgIFBlcmwgcmVnZXggcGF0dGVybnMgdG8gbWF0Y2ggYWdhaW5zdCBhdXRob3IgYW5kIGNvbW1pdHRlcgotIyAgIGxpbmVzLiAgSWYgYSBwYXR0ZXJuIG1hdGNoZXMsIHRoYXQgYXV0aG9yIG9yIGNvbW1pdHRlciB3aWxsCi0jICAgbm90IGJlIG5vdGlmaWVkIG9mIGEgYnVpbGQgZmFpbHVyZS4KLSMKLSMgUGVyIFJlcG9zaXRvcnkgQ29uZmlnCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUmVhZCBmcm9tIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSdzIGNvbmZpZyBmaWxlLgotIwotIyBidWlsZGVyLmNvbW1hbmQKLSMgICBTaGVsbCBjb21tYW5kIHRvIGV4ZWN1dGUgdGhlIGJ1aWxkLiAgVGhpcyBjb21tYW5kIG11c3QKLSMgICByZXR1cm4gMCBvbiAic3VjY2VzcyIgYW5kIG5vbi16ZXJvIG9uIGZhaWx1cmUuICBJZiB5b3UKLSMgICBhbHNvIHdhbnQgdG8gcnVuIGEgdGVzdCBzdWl0ZSwgbWFrZSBzdXJlIHlvdXIgY29tbWFuZAotIyAgIGRvZXMgdGhhdCB0b28uICBSZXF1aXJlZC4KLSMKLSMgYnVpbGRlci5xdWV1ZQotIyAgIFF1ZXVlIGZpbGUgdG8gbm90aWZ5IHRoZSBjaWRhZW1vbiB0aHJvdWdoLiAgU2hvdWxkIG1hdGNoCi0jICAgY2lkYWVtb24ucXVldWUuICBJZiBub3Qgc2V0IHRoZSBob29rIHdpbGwgbm90IG5vdGlmeSB0aGUKLSMgICBjaWRhZW1vbi4KLSMKLSMgYnVpbGRlci5za2lwCi0jICAgUGVybCByZWdleCBwYXR0ZXJucyBvZiByZWZzIHRoYXQgc2hvdWxkIG5vdCBiZSBzZW50IHRvCi0jICAgY2lkYWVtb24uICBVcGRhdGVzIG9mIHRoZXNlIHJlZnMgd2lsbCBiZSBpZ25vcmVkLgotIwotIyBidWlsZGVyLm5ld0JyYW5jaEJhc2UKLSMgICBHbG9iIHBhdHRlcm5zIG9mIHJlZnMgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBmb3JtIHRoZQotIyAgICdvbGQnIHJldmlvbnMgb2YgYSBuZXdseSBjcmVhdGVkIHJlZi4gIFRoaXMgc2hvdWxkIHNldAotIyAgIHRvIGJlIGdsb2JzIHRoYXQgbWF0Y2ggeW91ciAnbWFpbmxpbmUnIGJyYW5jaGVzLiAgVGhpcwotIyAgIHdheSBhIGJ1aWxkIGZhaWx1cmUgb2YgYSBicmFuZCBuZXcgdG9waWMgYnJhbmNoIGRvZXMgbm90Ci0jICAgYXR0ZW1wdCB0byBlbWFpbCBldmVyeW9uZSBzaW5jZSB0aGUgYmVnaW5uaW5nIG9mIHRpbWU7Ci0jICAgaW5zdGVhZCBpdCBvbmx5IGVtYWlscyB0aG9zZSBhdXRob3JzIG9mIGNvbW1pdHMgbm90IGluCi0jICAgdGhlc2UgJ21haW5saW5lJyBicmFuY2hlcy4KLQotbG9jYWwgJEVOVntQQVRIfSA9IGpvaW4gJzonLCBxdygKLQkvb3B0L2dpdC9iaW4KLQkvdXNyL2JpbgotCS9iaW4KLQkpOwotCi11c2Ugc3RyaWN0OwotdXNlIHdhcm5pbmdzOwotdXNlIEZpbmRCaW4gcXcoJFJlYWxCaW4pOwotdXNlIEZpbGU6OlNwZWM7Ci11c2UgbGliIEZpbGU6OlNwZWMtPmNhdGZpbGUoJFJlYWxCaW4sICcuLicsICdwZXJsNScpOwotdXNlIFN0b3JhYmxlIHF3KHJldHJpZXZlIG5zdG9yZSk7Ci11c2UgRmNudGwgJzpmbG9jayc7Ci11c2UgUE9TSVggcXcoc3RyZnRpbWUpOwotdXNlIEdldG9wdDo6TG9uZyBxdyg6Y29uZmlnIG5vX2F1dG9fYWJicmV2IGF1dG9faGVscCk7Ci0KLXN1YiBnaXRfY29uZmlnICgkOyQpCi17Ci0JbXkgJHZhciA9IHNoaWZ0OwotCW15ICRyZXF1aXJlZCA9IHNoaWZ0IHx8IDA7Ci0JbG9jYWwgKkdJVDsKLQlvcGVuIEdJVCwgJy18JywnZ2l0JywnY29uZmlnJywnLS1nZXQnLCR2YXI7Ci0JbXkgJHIgPSA8R0lUPjsKLQljaG9wICRyIGlmICRyOwotCWNsb3NlIEdJVDsKLQlkaWUgImVycm9yOiAkdmFyIG5vdCBzZXQuXG4iIGlmICgkcmVxdWlyZWQgJiYgISRyKTsKLQlyZXR1cm4gJHI7Ci19Ci0KLXBhY2thZ2UgRVhDSEFOR0VfTkVUX1NNVFA7Ci0KLSMgTWljcm9zb2Z0IEV4Y2hhbmdlIFNlcnZlciByZXF1aXJlcyBhbiAnQVVUSCBMT0dJTicKLSMgc3R5bGUgb2YgYXV0aGVudGljYXRpb24uICBUaGlzIGlzIGRpZmZlcmVudCBmcm9tCi0jIHRoZSBkZWZhdWx0IHN1cHBvcnRlZCBieSBOZXQ6OlNNVFAgc28gd2Ugc3ViY2xhc3MKLSMgYW5kIG92ZXJyaWRlIHRoZSBhdXRoIG1ldGhvZCB0byBzdXBwb3J0IHRoYXQuCi0KLXVzZSBOZXQ6OlNNVFA7Ci11c2UgTmV0OjpDbWQ7Ci11c2UgTUlNRTo6QmFzZTY0IHF3KGVuY29kZV9iYXNlNjQpOwotb3VyIEBJU0EgPSBxdyhOZXQ6OlNNVFApOwotb3VyICRhdXRoX3R5cGUgPSA6OmdpdF9jb25maWcgJ2NpZGFlbW9uLnNtdHBBdXRoJzsKLQotc3ViIG5ldwotewotCW15ICRzZWxmID0gc2hpZnQ7Ci0JbXkgJHR5cGUgPSByZWYoJHNlbGYpIHx8ICRzZWxmOwotCSR0eXBlLT5TVVBFUjo6bmV3KEBfKTsKLX0KLQotc3ViIGF1dGgKLXsKLQlteSAkc2VsZiA9IHNoaWZ0OwotCXJldHVybiAkc2VsZi0+U1VQRVI6OmF1dGgoQF8pIHVubGVzcyAkYXV0aF90eXBlIGVxICdsb2dpbic7Ci0KLQlteSAkdXNlciA9IGVuY29kZV9iYXNlNjQgc2hpZnQsICcnOwotCW15ICRwYXNzID0gZW5jb2RlX2Jhc2U2NCBzaGlmdCwgJyc7Ci0JcmV0dXJuIDAgdW5sZXNzIENNRF9NT1JFID09ICRzZWxmLT5jb21tYW5kKCJBVVRIIExPR0lOIiktPnJlc3BvbnNlOwotCXJldHVybiAwIHVubGVzcyBDTURfTU9SRSA9PSAkc2VsZi0+Y29tbWFuZCgkdXNlciktPnJlc3BvbnNlOwotCUNNRF9PSyA9PSAkc2VsZi0+Y29tbWFuZCgkcGFzcyktPnJlc3BvbnNlOwotfQotCi1wYWNrYWdlIG1haW47Ci0KLW15ICgkZGVidWdfZmxhZywgJXJlY2VudCk7Ci0KLW15ICRleF9ob3N0ID0gZ2l0X2NvbmZpZygnY2lkYWVtb24uc210cEhvc3QnKSB8fCAnbG9jYWxob3N0JzsKLW15ICRleF91c2VyID0gZ2l0X2NvbmZpZygnY2lkYWVtb24uc210cFVzZXInKTsKLW15ICRleF9wYXNzID0gZ2l0X2NvbmZpZygnY2lkYWVtb24uc210cFBhc3N3b3JkJyk7Ci0KLW15ICRleF9mcm9tX2FkZHIgPSBnaXRfY29uZmlnKCdjaWRhZW1vbi5lbWFpbCcsIDEpOwotbXkgJGV4X2Zyb21fbmFtZSA9IGdpdF9jb25maWcoJ2NpZGFlbW9uLm5hbWUnKSB8fCAnY2lkYWVtb24nOwotCi1teSAkc2Nhbl9kZWxheSA9IGdpdF9jb25maWcoJ2NpZGFlbW9uLnNjYW5EZWxheScpIHx8IDYwOwotbXkgJHJlY2VudF9zaXplID0gZ2l0X2NvbmZpZygnY2lkYWVtb24ucmVjZW50Q2FjaGUnKSB8fCAxMDA7Ci1teSAkdG1wZGlyID0gZ2l0X2NvbmZpZygnY2lkYWVtb24udG1wZGlyJykgfHwgJy90bXAnOwotbXkgJHF1ZXVlX25hbWUgPSBnaXRfY29uZmlnKCdjaWRhZW1vbi5xdWV1ZScsIDEpOwotbXkgJHF1ZXVlX2xvY2sgPSAiJHF1ZXVlX25hbWUubG9jayI7Ci0KLW15IEBub2NjX2xpc3Q7Ci1vcGVuIEdJVCwnZ2l0IGNvbmZpZyAtLWdldC1hbGwgY2lkYWVtb24ubm9jY3wnOwotd2hpbGUgKDxHSVQ+KSB7Ci0JY2hvcDsKLQlwdXNoIEBub2NjX2xpc3QsICRfOwotfQotY2xvc2UgR0lUOwotCi1zdWIgbm9jY19hdXRob3IgKCQpCi17Ci0JbG9jYWwgJF8gPSBzaGlmdDsKLQlmb3JlYWNoIG15ICRwYXQgKEBub2NjX2xpc3QpIHsKLQkJcmV0dXJuIDEgaWYgLyRwYXQvOwotCX0KLQkwOwotfQotCi1zdWIgaW5wdXRfZWNobyAoJCkKLXsKLQlteSAkcHJvbXB0ID0gc2hpZnQ7Ci0KLQlsb2NhbCAkfCA9IDE7Ci0JcHJpbnQgJHByb21wdDsKLQlteSAkaW5wdXQgPSA8U1RESU4+OwotCWNob3AgJGlucHV0OwotCXJldHVybiAkaW5wdXQ7Ci19Ci0KLXN1YiBpbnB1dF9ub2VjaG8gKCQpCi17Ci0JbXkgJHByb21wdCA9IHNoaWZ0OwotCi0JbXkgJGVuZCA9IHN1YiB7c3lzdGVtKCdzdHR5JywnZWNobycpO3ByaW50ICJcbiI7ZXhpdH07Ci0JbG9jYWwgJFNJR3tURVJNfSA9ICRlbmQ7Ci0JbG9jYWwgJFNJR3tJTlR9ID0gJGVuZDsKLQlzeXN0ZW0oJ3N0dHknLCctZWNobycpOwotCi0JbG9jYWwgJHwgPSAxOwotCXByaW50ICRwcm9tcHQ7Ci0JbXkgJGlucHV0ID0gPFNURElOPjsKLQlzeXN0ZW0oJ3N0dHknLCdlY2hvJyk7Ci0JcHJpbnQgIlxuIjsKLQljaG9wICRpbnB1dDsKLQlyZXR1cm4gJGlucHV0OwotfQotCi1zdWIgcmZjMjgyMl9kYXRlICgpCi17Ci0JIHN0cmZ0aW1lKCIlYSwgJWQgJWIgJVkgJUg6JU06JVMgJVoiLCBsb2NhbHRpbWUpOwotfQotCi1zdWIgc2VuZF9lbWFpbCAoJCQkKQotewotCW15ICgkc3ViaiwgJGJvZHksICR0bykgPSBAXzsKLQlteSAkbm93ID0gcmZjMjgyMl9kYXRlOwotCW15ICR0b19zdHIgPSAnJzsKLQlteSBAcmNwdF90bzsKLQlmb3JlYWNoIChAJHRvKSB7Ci0JCW15ICRzID0gJF87Ci0JCSRzID1+IHMvXi8iLzsKLQkJJHMgPX4gcy8oXHMrPCkvIiQxLzsKLQkJJHRvX3N0ciAuPSAnLCAnIGlmICR0b19zdHI7Ci0JCSR0b19zdHIgLj0gJHM7Ci0JCXB1c2ggQHJjcHRfdG8sICQxIGlmICRzID1+IC88KC4qKT4vOwotCX0KLQlkaWUgIk5vYm9keSB0byBzZW5kIHRvLlxuIiB1bmxlc3MgQHJjcHRfdG87Ci0JbXkgJG1zZyA9IDw8RU9GOwotRnJvbTogIiRleF9mcm9tX25hbWUiIDwkZXhfZnJvbV9hZGRyPgotVG86ICR0b19zdHIKLURhdGU6ICRub3cKLVN1YmplY3Q6ICRzdWJqCi0KLSRib2R5Ci1FT0YKLQotCW15ICRzbXRwID0gRVhDSEFOR0VfTkVUX1NNVFAtPm5ldyhIb3N0ID0+ICRleF9ob3N0KQotCQlvciBkaWUgIkNhbm5vdCBjb25uZWN0IHRvICRleF9ob3N0OiAkIVxuIjsKLQlpZiAoJGV4X3VzZXIgJiYgJGV4X3Bhc3MpIHsKLQkJJHNtdHAtPmF1dGgoJGV4X3VzZXIsJGV4X3Bhc3MpCi0JCQlvciBkaWUgIiRleF9ob3N0IHJlamVjdGVkICRleF91c2VyXG4iOwotCX0KLQkkc210cC0+bWFpbCgkZXhfZnJvbV9hZGRyKQotCQlvciBkaWUgIiRleF9ob3N0IHJlamVjdGVkICRleF9mcm9tX2FkZHJcbiI7Ci0Jc2NhbGFyKCRzbXRwLT5yZWNpcGllbnQoQHJjcHRfdG8sIHsgU2tpcEJhZCA9PiAxIH0pKQotCQlvciBkaWUgIiRleF9ob3N0IGRpZCBub3QgYWNjZXB0IGFueSBhZGRyZXNzZXMuXG4iOwotCSRzbXRwLT5kYXRhKCRtc2cpCi0JCW9yIGRpZSAiJGV4X2hvc3QgcmVqZWN0ZWQgbWVzc2FnZSBkYXRhXG4iOwotCSRzbXRwLT5xdWl0OwotfQotCi1zdWIgcG9wX3F1ZXVlICgpCi17Ci0Jb3BlbiBMT0NLLCAiPiRxdWV1ZV9sb2NrIiBvciBkaWUgIkNhbid0IG9wZW4gJHF1ZXVlX2xvY2s6ICQhIjsKLQlmbG9jayBMT0NLLCBMT0NLX0VYOwotCi0JbXkgJHF1ZXVlID0gLWYgJHF1ZXVlX25hbWUgPyByZXRyaWV2ZSAkcXVldWVfbmFtZSA6IFtdOwotCW15ICRlbnQgPSBzaGlmdCBAJHF1ZXVlOwotCW5zdG9yZSAkcXVldWUsICRxdWV1ZV9uYW1lOwotCi0JZmxvY2sgTE9DSywgTE9DS19VTjsKLQljbG9zZSBMT0NLOwotCSRlbnQ7Ci19Ci0KLXN1YiBnaXRfZXhlYyAoQCkKLXsKLQlzeXN0ZW0oJ2dpdCcsQF8pID09IDAgb3IgZGllICJDYW5ub3QgZ2l0ICIgLiBqb2luKCcgJywgQF8pIC4gIlxuIjsKLX0KLQotc3ViIGdpdF92YWwgKEApCi17Ci0Jb3BlbihDLCAnLXwnLCdnaXQnLEBfKTsKLQlteSAkciA9IDxDPjsKLQljaG9wICRyIGlmICRyOwotCWNsb3NlIEM7Ci0JJHI7Ci19Ci0KLXN1YiBkb19idWlsZCAoJCQpCi17Ci0JbXkgKCRnaXRfZGlyLCAkbmV3KSA9IEBfOwotCi0JbXkgJHRtcCA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJHRtcGRpciwgImJ1aWxkZXIkJCIpOwotCXN5c3RlbSgncm0nLCctcmYnLCR0bXApID09IDAgb3IgZGllICJDYW5ub3QgY2xlYXIgJHRtcFxuIjsKLQlkaWUgIkNhbm5vdCBjbGVhciAkdG1wLlxuIiBpZiAtZSAkdG1wOwotCi0JbXkgJHJlc3VsdCA9IDE7Ci0JZXZhbCB7Ci0JCW15ICRjb21tYW5kOwotCQl7Ci0JCQlsb2NhbCAkRU5We0dJVF9ESVJ9ID0gJGdpdF9kaXI7Ci0JCQkkY29tbWFuZCA9IGdpdF92YWwgJ2NvbmZpZycsJ2J1aWxkZXIuY29tbWFuZCc7Ci0JCX0KLQkJZGllICJObyBidWlsZGVyLmNvbW1hbmQgZm9yICRnaXRfZGlyLlxuIiB1bmxlc3MgJGNvbW1hbmQ7Ci0KLQkJZ2l0X2V4ZWMgJ2Nsb25lJywnLW4nLCctbCcsJy1zJywkZ2l0X2RpciwkdG1wOwotCQljaG1vZCAwNzAwLCAkdG1wIG9yIGRpZSAiQ2Fubm90IGxvY2sgJHRtcFxuIjsKLQkJY2hkaXIgJHRtcCBvciBkaWUgIkNhbm5vdCBlbnRlciAkdG1wXG4iOwotCi0JCWdpdF9leGVjICd1cGRhdGUtcmVmJywnSEVBRCcsJG5ldzsKLQkJZ2l0X2V4ZWMgJ3JlYWQtdHJlZScsJy1tJywnLXUnLCdIRUFEJywnSEVBRCc7Ci0JCXN5c3RlbSAkY29tbWFuZDsKLQkJaWYgKCQ/ID09IC0xKSB7Ci0JCQlwcmludCBTVERFUlIgImZhaWxlZCB0byBleGVjdXRlICckY29tbWFuZCc6ICQhXG4iOwotCQkJJHJlc3VsdCA9IDE7Ci0JCX0gZWxzaWYgKCQ/ICYgMTI3KSB7Ci0JCQlteSAkc2lnID0gJD8gJiAxMjc7Ci0JCQlwcmludCBTVERFUlIgIickY29tbWFuZCcgZGllZCBmcm9tIHNpZ25hbCAkc2lnXG4iOwotCQkJJHJlc3VsdCA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQlteSAkciA9ICQ/ID4+IDg7Ci0JCQlwcmludCBTVERFUlIgIickY29tbWFuZCcgZXhpdGVkIHdpdGggJHJcbiIgaWYgJHI7Ci0JCQkkcmVzdWx0ID0gJHI7Ci0JCX0KLQl9OwotCWlmICgkQCkgewotCQkkcmVzdWx0ID0gMjsKLQkJcHJpbnQgU1RERVJSICIkQFxuIjsKLQl9Ci0KLQljaGRpciAnLyc7Ci0Jc3lzdGVtKCdybScsJy1yZicsJHRtcCk7Ci0Jcm1kaXIgJHRtcDsKLQkkcmVzdWx0OwotfQotCi1zdWIgYnVpbGRfZmFpbGVkICgkJCQkJCkKLXsKLQlteSAoJGdpdF9kaXIsICRyZWYsICRvbGQsICRuZXcsICRtc2cpID0gQF87Ci0KLQkkZ2l0X2RpciA9fiBtLC8oW14vXSspJCw7Ci0JbXkgJHJlcG9fbmFtZSA9ICQxOwotCSRyZWYgPX4gcyxecmVmcy8oaGVhZHN8dGFncykvLCw7Ci0KLQlteSAlYXV0aG9yczsKLQlteSAkc2hvcnRsb2c7Ci0JbXkgJHJldnN0cjsKLQl7Ci0JCWxvY2FsICRFTlZ7R0lUX0RJUn0gPSAkZ2l0X2RpcjsKLQkJbXkgQHJldnMgPSAoJG5ldyk7Ci0JCXB1c2ggQHJldnMsICctLW5vdCcsIEAkb2xkIGlmIEAkb2xkOwotCQlvcGVuIExPRywnLXwnLCdnaXQnLCdyZXYtbGlzdCcsJy0tcHJldHR5PXJhdycsQHJldnM7Ci0JCXdoaWxlICg8TE9HPikgewotCQkJaWYgKHMvXihhdXRob3J8Y29tbWl0dGVyKSAvLykgewotCQkJCWNob21wOwotCQkJCXMvPi4qJC8+LzsKLQkJCQkkYXV0aG9yc3skX30gPSAxIHVubGVzcyBub2NjX2F1dGhvciAkXzsKLQkJCX0KLQkJfQotCQljbG9zZSBMT0c7Ci0JCW9wZW4gTE9HLCctfCcsJ2dpdCcsJ3Nob3J0bG9nJyxAcmV2czsKLQkJJHNob3J0bG9nIC49ICRfIHdoaWxlIDxMT0c+OwotCQljbG9zZSBMT0c7Ci0JCSRyZXZzdHIgPSBqb2luKCcgJywgQHJldnMpOwotCX0KLQotCW15IEB0byA9IHNvcnQga2V5cyAlYXV0aG9yczsKLQl1bmxlc3MgKEB0bykgewotCQlwcmludCBTVERFUlIgImVycm9yOiBObyBhdXRob3JzIGluICRyZXZzdHJcbiI7Ci0JCXJldHVybjsKLQl9Ci0KLQlteSAkc3ViamVjdCA9ICJbJHJlcG9fbmFtZV0gJHJlZiA6IEJ1aWxkIEZhaWxlZCI7Ci0JbXkgJGJvZHkgPSA8PEVPRjsKLVByb2plY3Q6ICRnaXRfZGlyCi1CcmFuY2g6ICAkcmVmCi1Db21taXRzOiAkcmV2c3RyCi0KLSRzaG9ydGxvZwotQnVpbGQgT3V0cHV0OgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSRtc2cKLUVPRgotCXNlbmRfZW1haWwoJHN1YmplY3QsICRib2R5LCBcQHRvKTsKLX0KLQotc3ViIHJ1bl9idWlsZCAoJCQkJCkKLXsKLQlteSAoJGdpdF9kaXIsICRyZWYsICRvbGQsICRuZXcpID0gQF87Ci0KLQlpZiAoJGRlYnVnX2ZsYWcpIHsKLQkJbXkgQHJldnMgPSAoJG5ldyk7Ci0JCXB1c2ggQHJldnMsICctLW5vdCcsIEAkb2xkIGlmIEAkb2xkOwotCQlwcmludCAiQlVJTERJTkcgJGdpdF9kaXJcbiI7Ci0JCXByaW50ICIgIEJSQU5DSDogJHJlZlxuIjsKLQkJcHJpbnQgIiAgQ09NTUlUUzogIiwgam9pbignICcsIEByZXZzKSwgIlxuIjsKLQl9Ci0KLQlsb2NhbCgqUiwgKlcpOwotCXBpcGUgUiwgVyBvciBkaWUgImNhbm5vdCBwaXBlIGJ1aWxkZXI6ICQhIjsKLQotCW15ICRidWlsZGVyID0gZm9yaygpOwotCWlmICghZGVmaW5lZCAkYnVpbGRlcikgewotCQlkaWUgImNhbm5vdCBmb3JrIGJ1aWxkZXI6ICQhIjsKLQl9IGVsc2lmICgwID09ICRidWlsZGVyKSB7Ci0JCWNsb3NlIFI7Ci0JCWNsb3NlIFNURElOO29wZW4oU1RESU4sICcvZGV2L251bGwnKTsKLQkJb3BlbihTVERPVVQsICc+JlcnKTsKLQkJb3BlbihTVERFUlIsICc+JlcnKTsKLQkJZXhpdCBkb19idWlsZCAkZ2l0X2RpciwgJG5ldzsKLQl9IGVsc2UgewotCQljbG9zZSBXOwotCQlteSAkb3V0ID0gJyc7Ci0JCSRvdXQgLj0gJF8gd2hpbGUgPFI+OwotCQljbG9zZSBSOwotCQl3YWl0cGlkICRidWlsZGVyLCAwOwotCQlidWlsZF9mYWlsZWQgJGdpdF9kaXIsICRyZWYsICRvbGQsICRuZXcsICRvdXQgaWYgJD87Ci0JfQotCi0JcHJpbnQgIkRPTkVcblxuIiBpZiAkZGVidWdfZmxhZzsKLX0KLQotc3ViIGRhZW1vbl9sb29wICgpCi17Ci0JbXkgJHJ1biA9IDE7Ci0JbXkgJHN0b3Bfc3ViID0gc3ViIHskcnVuID0gMH07Ci0JJFNJR3tIVVB9ID0gJHN0b3Bfc3ViOwotCSRTSUd7SU5UfSA9ICRzdG9wX3N1YjsKLQkkU0lHe1RFUk19ID0gJHN0b3Bfc3ViOwotCi0JbWtkaXIgJHRtcGRpciwgMDc1NTsKLQlteSAkcGlkZmlsZSA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJHRtcGRpciwgImNpZGFlbW9uLnBpZCIpOwotCW9wZW4oTywgIj4kcGlkZmlsZSIpOyBwcmludCBPICIkJFxuIjsgY2xvc2UgTzsKLQotCXdoaWxlICgkcnVuKSB7Ci0JCW15ICRlbnQgPSBwb3BfcXVldWU7Ci0JCWlmICgkZW50KSB7Ci0JCQlteSAoJGdpdF9kaXIsICRyZWYsICRvbGQsICRuZXcpID0gQCRlbnQ7Ci0KLQkJCSRlbnQgPSAkcmVjZW50eyRnaXRfZGlyfTsKLQkJCSRyZWNlbnR7JGdpdF9kaXJ9ID0gJGVudCA9IFtbXSwge31dIHVubGVzcyAkZW50OwotCQkJbXkgKCRyZWNfYXJyLCAkcmVjX2hhc2gpID0gQCRlbnQ7Ci0JCQluZXh0IGlmICRyZWNfaGFzaC0+eyRuZXd9Kys7Ci0JCQl3aGlsZSAoQCRyZWNfYXJyID49ICRyZWNlbnRfc2l6ZSkgewotCQkJCW15ICR0b19raWxsID0gc2hpZnQgQCRyZWNfYXJyOwotCQkJCWRlbGV0ZSAkcmVjX2hhc2gtPnskdG9fa2lsbH07Ci0JCQl9Ci0JCQlwdXNoIEAkcmVjX2FyciwgJG5ldzsKLQotCQkJcnVuX2J1aWxkICRnaXRfZGlyLCAkcmVmLCAkb2xkLCAkbmV3OwotCQl9IGVsc2UgewotCQkJc2xlZXAgJHNjYW5fZGVsYXk7Ci0JCX0KLQl9Ci0KLQl1bmxpbmsgJHBpZGZpbGU7Ci19Ci0KLSRkZWJ1Z19mbGFnID0gMDsKLUdldE9wdGlvbnMoCi0JJ2RlYnVnfGQnID0+IFwkZGVidWdfZmxhZywKLQknc210cC11c2VyPXMnID0+IFwkZXhfdXNlciwKLSkgb3IgZGllICJ1c2FnZTogJDAgWy0tZGVidWddIFstLXNtdHAtdXNlcj11c2VyXVxuIjsKLQotJGV4X3Bhc3MgPSBpbnB1dF9ub2VjaG8oIiRleF91c2VyIFNNVFAgcGFzc3dvcmQ6ICIpCi0JaWYgKCRleF91c2VyICYmICEkZXhfcGFzcyk7Ci0KLWlmICgkZGVidWdfZmxhZykgewotCWRhZW1vbl9sb29wOwotCWV4aXQgMDsKLX0KLQotbXkgJGRhZW1vbiA9IGZvcmsoKTsKLWlmICghZGVmaW5lZCAkZGFlbW9uKSB7Ci0JZGllICJjYW5ub3QgZm9yayBkYWVtb246ICQhIjsKLX0gZWxzaWYgKDAgPT0gJGRhZW1vbikgewotCWNsb3NlIFNURElOO29wZW4oU1RESU4sICcvZGV2L251bGwnKTsKLQljbG9zZSBTVERPVVQ7b3BlbihTVERPVVQsICc+L2Rldi9udWxsJyk7Ci0JY2xvc2UgU1RERVJSO29wZW4oU1RERVJSLCAnPi9kZXYvbnVsbCcpOwotCWRhZW1vbl9sb29wOwotCWV4aXQgMDsKLX0gZWxzZSB7Ci0JcHJpbnQgIkRhZW1vbiAkZGFlbW9uIHJ1bm5pbmcgaW4gdGhlIGJhY2tncm91bmQuXG4iOwotfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb250aW51b3VzL3Bvc3QtcmVjZWl2ZS1jaW5vdGlmeSBiL2NvbnRyaWIvY29udGludW91cy9wb3N0LXJlY2VpdmUtY2lub3RpZnkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ZjVhNjAuLjAwMDAwMDAKLS0tIGEvY29udHJpYi9jb250aW51b3VzL3Bvc3QtcmVjZWl2ZS1jaW5vdGlmeQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0jIS91c3IvYmluL3BlcmwKLSMKLSMgQSBob29rIHRoYXQgbm90aWZpZXMgaXRzIGNvbXBhbmlvbiBjaWRhZW1vbiB0aHJvdWdoIGEgc2ltcGxlCi0jIHF1ZXVlIGZpbGUgdGhhdCBhIHJlZiBoYXMgYmVlbiB1cGRhdGVkIHZpYSBhIHB1c2ggKGFjdHVhbGx5Ci0jIGJ5IGEgcmVjZWl2ZS1wYWNrIHJ1bm5pbmcgb24gdGhlIHNlcnZlcikuCi0jCi0jIFNlZSBjaWRhZW1vbiBmb3IgcGVyLXJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBkZXRhaWxzLgotIwotIyBUbyB1c2UgdGhpcyBob29rLCBhZGQgaXQgYXMgdGhlIHBvc3QtcmVjZWl2ZSBob29rLCBtYWtlIGl0Ci0jIGV4ZWN1dGFibGUsIGFuZCBzZXQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KLSMKLQotbG9jYWwgJEVOVntQQVRIfSA9ICcvb3B0L2dpdC9iaW4nOwotCi11c2Ugc3RyaWN0OwotdXNlIHdhcm5pbmdzOwotdXNlIEZpbGU6OlNwZWM7Ci11c2UgU3RvcmFibGUgcXcocmV0cmlldmUgbnN0b3JlKTsKLXVzZSBGY250bCAnOmZsb2NrJzsKLQotbXkgJGdpdF9kaXIgPSBGaWxlOjpTcGVjLT5yZWwyYWJzKCRFTlZ7R0lUX0RJUn0pOwotbXkgJHF1ZXVlX25hbWUgPSBgZ2l0IGNvbmZpZyAtLWdldCBidWlsZGVyLnF1ZXVlYDtjaG9wICRxdWV1ZV9uYW1lOwotJHF1ZXVlX25hbWUgPX4gbSxeKFteXHNdKykkLDsgJHF1ZXVlX25hbWUgPSAkMTsgIyB1bnRhaW50Ci11bmxlc3MgKCRxdWV1ZV9uYW1lKSB7Ci0JMSB3aGlsZSA8U1RESU4+OwotCXByaW50IFNUREVSUiAiXG5lcnJvcjogYnVpbGRlci5xdWV1ZSBub3Qgc2V0LiAgTm90IGVucXVlaW5nLlxuXG4iOwotCWV4aXQ7Ci19Ci1teSAkcXVldWVfbG9jayA9ICIkcXVldWVfbmFtZS5sb2NrIjsKLQotbXkgQHNraXA7Ci1vcGVuIFMsICJnaXQgY29uZmlnIC0tZ2V0LWFsbCBidWlsZGVyLnNraXB8IjsKLXdoaWxlICg8Uz4pIHsKLQljaG9wOwotCXB1c2ggQHNraXAsICRfOwotfQotY2xvc2UgUzsKLQotbXkgQG5ld19icmFuY2hfYmFzZTsKLW9wZW4gUywgImdpdCBjb25maWcgLS1nZXQtYWxsIGJ1aWxkZXIubmV3QnJhbmNoQmFzZXwiOwotd2hpbGUgKDxTPikgewotCWNob3A7Ci0JcHVzaCBAbmV3X2JyYW5jaF9iYXNlLCAkXzsKLX0KLWNsb3NlIFM7Ci0KLXN1YiBza2lwICgkKQotewotCWxvY2FsICRfID0gc2hpZnQ7Ci0JZm9yZWFjaCBteSAkcCAoQHNraXApIHsKLQkJcmV0dXJuIDEgaWYgL14kcC87Ci0JfQotCTA7Ci19Ci0KLW9wZW4gTE9DSywgIj4kcXVldWVfbG9jayIgb3IgZGllICJDYW4ndCBvcGVuICRxdWV1ZV9sb2NrOiAkISI7Ci1mbG9jayBMT0NLLCBMT0NLX0VYOwotCi1teSAkcXVldWUgPSAtZiAkcXVldWVfbmFtZSA/IHJldHJpZXZlICRxdWV1ZV9uYW1lIDogW107Ci1teSAlZXhpc3Rpbmc7Ci1mb3JlYWNoIG15ICRyIChAJHF1ZXVlKSB7Ci0JbXkgKCRnZCwgJHJlZikgPSBAJHI7Ci0JJGV4aXN0aW5neyRnZH17JHJlZn0gPSAkcjsKLX0KLQotbXkgQG5ld19icmFuY2hfY29tbWl0czsKLW15ICRsb2FkZWRfbmV3X2JyYW5jaF9jb21taXRzID0gMDsKLQotd2hpbGUgKDxTVERJTj4pIHsKLQljaG9wOwotCW15ICgkb2xkLCAkbmV3LCAkcmVmKSA9IHNwbGl0IC8gLywgJF8sIDM7Ci0KLQluZXh0IGlmICRvbGQgZXEgJG5ldzsKLQluZXh0IGlmICRuZXcgPX4gL14wezQwfSQvOwotCW5leHQgaWYgc2tpcCAkcmVmOwotCi0JbXkgJHIgPSAkZXhpc3Rpbmd7JGdpdF9kaXJ9eyRyZWZ9OwotCWlmICgkcikgewotCQkkci0+WzNdID0gJG5ldzsKLQl9IGVsc2UgewotCQlpZiAoJG9sZCA9fiAvXjB7NDB9JC8pIHsKLQkJCWlmICghJGxvYWRlZF9uZXdfYnJhbmNoX2NvbW1pdHMgJiYgQG5ld19icmFuY2hfYmFzZSkgewotCQkJCW9wZW4gTSwnLXwnLCdnaXQnLCdzaG93LXJlZicsQG5ld19icmFuY2hfYmFzZTsKLQkJCQl3aGlsZSAoPE0+KSB7Ci0JCQkJCSgkXykgPSBzcGxpdCAvIC8sICRfOwotCQkJCQlwdXNoIEBuZXdfYnJhbmNoX2NvbW1pdHMsICRfOwotCQkJCX0KLQkJCQljbG9zZSBNOwotCQkJCSRsb2FkZWRfbmV3X2JyYW5jaF9jb21taXRzID0gMTsKLQkJCX0KLQkJCSRvbGQgPSBbQG5ld19icmFuY2hfY29tbWl0c107Ci0JCX0gZWxzZSB7Ci0JCQkkb2xkID0gWyRvbGRdOwotCQl9Ci0KLQkJJHIgPSBbJGdpdF9kaXIsICRyZWYsICRvbGQsICRuZXddOwotCQkkZXhpc3Rpbmd7JGdpdF9kaXJ9eyRyZWZ9ID0gJHI7Ci0JCXB1c2ggQCRxdWV1ZSwgJHI7Ci0JfQotfQotbnN0b3JlICRxdWV1ZSwgJHF1ZXVlX25hbWU7Ci0KLWZsb2NrIExPQ0ssIExPQ0tfVU47Ci1jbG9zZSBMT0NLOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9jcmVkZW50aWFsL29zeGtleWNoYWluL2dpdC1jcmVkZW50aWFsLW9zeGtleWNoYWluLmMgYi9jb250cmliL2NyZWRlbnRpYWwvb3N4a2V5Y2hhaW4vZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4uYwppbmRleCAzOTQwMjAyLi5iY2QzZjU3IDEwMDY0NAotLS0gYS9jb250cmliL2NyZWRlbnRpYWwvb3N4a2V5Y2hhaW4vZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4uYworKysgYi9jb250cmliL2NyZWRlbnRpYWwvb3N4a2V5Y2hhaW4vZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4uYwpAQCAtMTI3LDEwICsxMjcsMjAgQEAKIAkJKnYrKyA9ICdcMCc7CiAKIAkJaWYgKCFzdHJjbXAoYnVmLCAicHJvdG9jb2wiKSkgewotCQkJaWYgKCFzdHJjbXAodiwgImh0dHBzIikpCisJCQlpZiAoIXN0cmNtcCh2LCAiaW1hcCIpKQorCQkJCXByb3RvY29sID0ga1NlY1Byb3RvY29sVHlwZUlNQVA7CisJCQllbHNlIGlmICghc3RyY21wKHYsICJpbWFwcyIpKQorCQkJCXByb3RvY29sID0ga1NlY1Byb3RvY29sVHlwZUlNQVBTOworCQkJZWxzZSBpZiAoIXN0cmNtcCh2LCAiZnRwIikpCisJCQkJcHJvdG9jb2wgPSBrU2VjUHJvdG9jb2xUeXBlRlRQOworCQkJZWxzZSBpZiAoIXN0cmNtcCh2LCAiZnRwcyIpKQorCQkJCXByb3RvY29sID0ga1NlY1Byb3RvY29sVHlwZUZUUFM7CisJCQllbHNlIGlmICghc3RyY21wKHYsICJodHRwcyIpKQogCQkJCXByb3RvY29sID0ga1NlY1Byb3RvY29sVHlwZUhUVFBTOwogCQkJZWxzZSBpZiAoIXN0cmNtcCh2LCAiaHR0cCIpKQogCQkJCXByb3RvY29sID0ga1NlY1Byb3RvY29sVHlwZUhUVFA7CisJCQllbHNlIGlmICghc3RyY21wKHYsICJzbXRwIikpCisJCQkJcHJvdG9jb2wgPSBrU2VjUHJvdG9jb2xUeXBlU01UUDsKIAkJCWVsc2UgLyogd2UgZG9uJ3QgeWV0IGhhbmRsZSBvdGhlciBwcm90b2NvbHMgKi8KIAkJCQlleGl0KDApOwogCQl9CmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC8ucGVybGNyaXRpY3JjIGIvY29udHJpYi9tdy10by1naXQvLnBlcmxjcml0aWNyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTk5NTVkCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvLnBlcmxjcml0aWNyYwpAQCAtMCwwICsxLDI4IEBACisjIFRoZXNlIDMgcnVsZXMgZGVtYW5kIHRvIGFkZCB0aGUgcywgbSBhbmQgeCBmbGFnIHRvICpldmVyeSogcmVnZXhwLiBUaGlzIGlzCisjIG92ZXJraWxsIGFuZCB3b3VsZCBiZSBoYXJtZnVsIGZvciByZWFkYWJpbGl0eS4KK1stUmVndWxhckV4cHJlc3Npb25zOjpSZXF1aXJlRXh0ZW5kZWRGb3JtYXR0aW5nXQorWy1SZWd1bGFyRXhwcmVzc2lvbnM6OlJlcXVpcmVEb3RNYXRjaEFueXRoaW5nXQorWy1SZWd1bGFyRXhwcmVzc2lvbnM6OlJlcXVpcmVMaW5lQm91bmRhcnlNYXRjaGluZ10KKworIyBUaGlzIHJ1bGUgc2F5cyB0aGF0IGJ1aWx0aW4gZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgY2FsbGVkIHdpdGggcGFyZW50aGVzZXMKKyMgZS5nLjogKHRha2VuIGZyb20gQ1BBTidzIGRvY3VtZW50YXRpb24pCisjIG9wZW4oJGhhbmRsZSwgJz4nLCAkZmlsZW5hbWUpOyAjbm90IG9rCisjIG9wZW4gJGhhbmRsZSwgJz4nLCAkZmlsZW5hbWU7ICAjb2sKKyMgQXBwbHlpbmcgc3VjaCBhIHJ1bGUgd291bGQgbWVhbiBtb2RpZnlpbmcgYSBodWdlIG51bWJlciBvZiBsaW5lcyBmb3IgYQorIyBxdWVzdGlvbiBvZiBzdHlsZS4KK1stQ29kZUxheW91dDo6UHJvaGliaXRQYXJlbnNXaXRoQnVpbHRpbnNdCisKKyMgVGhpcyBydWxlIHN0YXRlcyB0aGF0IGVhY2ggc3lzdGVtIGNhbGwgc2hvdWxkIGhhdmUgaXRzIHJldHVybiB2YWx1ZSBjaGVja2VkCisjIFRoZSBwcm9ibGVtIGlzIHRoYXQgaXQgaW5jbHVkZXMgdGhlIHByaW50IGNhbGwuIENoZWNraW5nIGV2ZXJ5IHByaW50IGNhbGwncworIyByZXR1cm4gdmFsdWUgd291bGQgYmUgaGFybWZ1bCB0byB0aGUgY29kZSByZWFkYWJpbHR5LgorIyBUaGlzIGNvbmZpZ3VyYXRpb24ga2VlcHMgYWxsIGRlZmF1bHQgZnVuY3Rpb24gYnV0IHByaW50LgorW0lucHV0T3V0cHV0OjpSZXF1aXJlQ2hlY2tlZFN5c2NhbGxzXQorZnVuY3Rpb25zID0gb3BlbiBzYXkgY2xvc2UKKworIyBUaGlzIHJ1bGVzIGRlbWFuZHMgdG8gYWRkIGEgZGVwZW5kYW5jeSBmb3IgdGhlIFJlYWRvbmx5IG1vZHVsZS4gVGhpcyBpcyBub3QKKyMgd2lzaGVkLgorWy1WYWx1ZXNBbmRFeHByZXNzaW9uczo6UHJvaGliaXRDb25zdGFudFByYWdtYV0KKworIyBUaGlzIHJ1bGUgaXMgbm90IHJlYWxseSB1c2VmdWwgKHJhdGhlciBhIHF1ZXN0aW9uIG9mIHN0eWxlKSBhbmQgcHJvZHVjZXMgbWFueQorIyB3YXJuaW5ncyBhbW9uZyB0aGUgY29kZS4KK1stVmFsdWVzQW5kRXhwcmVzc2lvbnM6OlByb2hpYml0Tm9pc3lRdW90ZXNdCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC9HaXQvTWVkaWF3aWtpLnBtIGIvY29udHJpYi9tdy10by1naXQvR2l0L01lZGlhd2lraS5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTNjNGRmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvR2l0L01lZGlhd2lraS5wbQpAQCAtMCwwICsxLDEwMCBAQAorcGFja2FnZSBHaXQ6Ok1lZGlhd2lraTsKKwordXNlIDUuMDA4OwordXNlIHN0cmljdDsKK3VzZSBHaXQ7CisKK0JFR0lOIHsKKworb3VyICgkVkVSU0lPTiwgQElTQSwgQEVYUE9SVCwgQEVYUE9SVF9PSyk7CisKKyMgVG90YWxseSB1bnN0YWJsZSBBUEkuCiskVkVSU0lPTiA9ICcwLjAxJzsKKworcmVxdWlyZSBFeHBvcnRlcjsKKworQElTQSA9IHF3KEV4cG9ydGVyKTsKKworQEVYUE9SVCA9ICgpOworCisjIE1ldGhvZHMgd2hpY2ggY2FuIGJlIGNhbGxlZCBhcyBzdGFuZGFsb25lIGZ1bmN0aW9ucyBhcyB3ZWxsOgorQEVYUE9SVF9PSyA9IHF3KGNsZWFuX2ZpbGVuYW1lIHNtdWRnZV9maWxlbmFtZSBjb25uZWN0X21heWJlCisJCQkJRU1QVFkgSFRUUF9DT0RFX09LIEhUVFBfQ09ERV9QQUdFX05PVF9GT1VORCk7Cit9CisKKyMgTWVkaWF3aWtpIGZpbGVuYW1lcyBjYW4gY29udGFpbiBmb3J3YXJkIHNsYXNoZXMuIFRoaXMgdmFyaWFibGUgZGVjaWRlcyBieSB3aGljaCBwYXR0ZXJuIHRoZXkgc2hvdWxkIGJlIHJlcGxhY2VkCit1c2UgY29uc3RhbnQgU0xBU0hfUkVQTEFDRU1FTlQgPT4gJyUyRic7CisKKyMgVXNlZCB0byB0ZXN0IGZvciBlbXB0eSBzdHJpbmdzCit1c2UgY29uc3RhbnQgRU1QVFkgPT4gcXt9OworCisjIEhUVFAgY29kZXMKK3VzZSBjb25zdGFudCBIVFRQX0NPREVfT0sgPT4gMjAwOwordXNlIGNvbnN0YW50IEhUVFBfQ09ERV9QQUdFX05PVF9GT1VORCA9PiA0MDQ7CisKK3N1YiBjbGVhbl9maWxlbmFtZSB7CisJbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisJJGZpbGVuYW1lID1+IHN7QHtbU0xBU0hfUkVQTEFDRU1FTlRdfX17L31nOworCSMgWywgXSwgfCwgeywgYW5kIH0gYXJlIGZvcmJpZGRlbiBieSBNZWRpYVdpa2ksIGV2ZW4gVVJMLWVuY29kZWQuCisJIyBEbyBhIHZhcmlhbnQgb2YgVVJMLWVuY29kaW5nLCBpLmUuIGxvb2tzIGxpa2UgVVJMLWVuY29kaW5nLAorCSMgYnV0IHdpdGggXyBhZGRlZCB0byBwcmV2ZW50IE1lZGlhV2lraSBmcm9tIHRoaW5raW5nIHRoaXMgaXMKKwkjIGFuIGFjdHVhbCBzcGVjaWFsIGNoYXJhY3Rlci4KKwkkZmlsZW5hbWUgPX4gcy9bXFtcXVx7XH1cfF0vc3ByaW50ZigiXyUlXyV4Iiwgb3JkKCQmKSkvZ2U7CisJIyBJZiB3ZSB1c2UgdGhlIHVyaSBlc2NhcGUgYmVmb3JlCisJIyB3ZSBzaG91bGQgdW5lc2NhcGUgaGVyZSwgYmVmb3JlIGFueXRoaW5nCisKKwlyZXR1cm4gJGZpbGVuYW1lOworfQorCitzdWIgc211ZGdlX2ZpbGVuYW1lIHsKKwlteSAkZmlsZW5hbWUgPSBzaGlmdDsKKwkkZmlsZW5hbWUgPX4gc3svfXtAe1tTTEFTSF9SRVBMQUNFTUVOVF19fWc7CisJJGZpbGVuYW1lID1+IHMvIC9fL2c7CisJIyBEZWNvZGUgZm9yYmlkZGVuIGNoYXJhY3RlcnMgZW5jb2RlZCBpbiBjbGVhbl9maWxlbmFtZQorCSRmaWxlbmFtZSA9fiBzL18lXyhbMC05YS1mQS1GXVswLTlhLWZBLUZdKS9zcHJpbnRmKCclYycsIGhleCgkMSkpL2dlOworCXJldHVybiAkZmlsZW5hbWU7Cit9CisKK3N1YiBjb25uZWN0X21heWJlIHsKKwlteSAkd2lraSA9IHNoaWZ0OworCWlmICgkd2lraSkgeworCQlyZXR1cm4gJHdpa2k7CisJfQorCisJbXkgJHJlbW90ZV9uYW1lID0gc2hpZnQ7CisJbXkgJHJlbW90ZV91cmwgPSBzaGlmdDsKKwlteSAoJHdpa2lfbG9naW4sICR3aWtpX3Bhc3N3b3JkLCAkd2lraV9kb21haW4pOworCisJJHdpa2lfbG9naW4gPSBHaXQ6OmNvbmZpZygicmVtb3RlLiR7cmVtb3RlX25hbWV9Lm13TG9naW4iKTsKKwkkd2lraV9wYXNzd29yZCA9IEdpdDo6Y29uZmlnKCJyZW1vdGUuJHtyZW1vdGVfbmFtZX0ubXdQYXNzd29yZCIpOworCSR3aWtpX2RvbWFpbiA9IEdpdDo6Y29uZmlnKCJyZW1vdGUuJHtyZW1vdGVfbmFtZX0ubXdEb21haW4iKTsKKworCSR3aWtpID0gTWVkaWFXaWtpOjpBUEktPm5ldzsKKwkkd2lraS0+e2NvbmZpZ30tPnthcGlfdXJsfSA9ICIke3JlbW90ZV91cmx9L2FwaS5waHAiOworCWlmICgkd2lraV9sb2dpbikgeworCQlteSAlY3JlZGVudGlhbCA9ICgKKwkJCSd1cmwnID0+ICRyZW1vdGVfdXJsLAorCQkJJ3VzZXJuYW1lJyA9PiAkd2lraV9sb2dpbiwKKwkJCSdwYXNzd29yZCcgPT4gJHdpa2lfcGFzc3dvcmQKKwkJKTsKKwkJR2l0OjpjcmVkZW50aWFsKFwlY3JlZGVudGlhbCk7CisJCW15ICRyZXF1ZXN0ID0ge2xnbmFtZSA9PiAkY3JlZGVudGlhbHt1c2VybmFtZX0sCisJCQkgICAgICAgbGdwYXNzd29yZCA9PiAkY3JlZGVudGlhbHtwYXNzd29yZH0sCisJCQkgICAgICAgbGdkb21haW4gPT4gJHdpa2lfZG9tYWlufTsKKwkJaWYgKCR3aWtpLT5sb2dpbigkcmVxdWVzdCkpIHsKKwkJCUdpdDo6Y3JlZGVudGlhbChcJWNyZWRlbnRpYWwsICdhcHByb3ZlJyk7CisJCQlwcmludCB7KlNUREVSUn0gcXEoTG9nZ2VkIGluIG1lZGlhd2lraSB1c2VyICIkY3JlZGVudGlhbHt1c2VybmFtZX0iLlxuKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50IHsqU1RERVJSfSBxcShGYWlsZWQgdG8gbG9nIGluIG1lZGlhd2lraSB1c2VyICIkY3JlZGVudGlhbHt1c2VybmFtZX0iIG9uICR7cmVtb3RlX3VybH1cbik7CisJCQlwcmludCB7KlNUREVSUn0gJyAgKGVycm9yICcgLgorCQkJCSR3aWtpLT57ZXJyb3J9LT57Y29kZX0gLiAnOiAnIC4KKwkJCQkkd2lraS0+e2Vycm9yfS0+e2RldGFpbHN9IC4gIilcbiI7CisJCQlHaXQ6OmNyZWRlbnRpYWwoXCVjcmVkZW50aWFsLCAncmVqZWN0Jyk7CisJCQlleGl0IDE7CisJCX0KKwl9CisKKwlyZXR1cm4gJHdpa2k7Cit9CisKKzE7ICMgRmFtb3VzIGxhc3Qgd29yZHMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L01ha2VmaWxlIGIvY29udHJpYi9tdy10by1naXQvTWFrZWZpbGUKaW5kZXggZjE0OTcxOS4uNzZmY2Q0ZCAxMDA2NDQKLS0tIGEvY29udHJpYi9tdy10by1naXQvTWFrZWZpbGUKKysrIGIvY29udHJpYi9tdy10by1naXQvTWFrZWZpbGUKQEAgLTIsMTYgKzIsNDMgQEAKICMgQ29weXJpZ2h0IChDKSAyMDEzCiAjICAgICBNYXR0aGlldSBNb3kgPE1hdHRoaWV1Lk1veUBpbWFnLmZyPgogIwotIyMgQnVpbGQgZ2l0LXJlbW90ZS1tZWRpYXdpa2kKKyMgVG8gYnVpbGQgYW5kIHRlc3Q6CisjCisjICAgbWFrZQorIyAgIGJpbi13cmFwcGVyL2dpdCBtdyBwcmV2aWV3IFNvbWVfcGFnZS5tdworIyAgIGJpbi13cmFwcGVyL2dpdCBjbG9uZSBtZWRpYXdpa2k6Omh0dHA6Ly9leGFtcGxlLmNvbS93aWtpLworIworIyBUbyBpbnN0YWxsLCBydW4gR2l0J3MgdG9wbGV2ZWwgJ21ha2UgaW5zdGFsbCcgdGhlbiBydW46CisjCisjICAgbWFrZSBpbnN0YWxsCiAKK0dJVF9NRURJQVdJS0lfUE09R2l0L01lZGlhd2lraS5wbQogU0NSSVBUX1BFUkw9Z2l0LXJlbW90ZS1tZWRpYXdpa2kucGVybAorU0NSSVBUX1BFUkwrPWdpdC1tdy5wZXJsCiBHSVRfUk9PVF9ESVI9Li4vLi4KIEhFUkU9Y29udHJpYi9tdy10by1naXQvCiAKIFNDUklQVF9QRVJMX0ZVTEw9JChwYXRzdWJzdCAlLCQoSEVSRSkvJSwkKFNDUklQVF9QRVJMKSkKK0lOU1RMSUJESVI9JChzaGVsbCAkKE1BS0UpIC1DICQoR0lUX1JPT1RfRElSKS9wZXJsIFwKKyAgICAgICAgICAgICAgICAtcyAtLW5vLXByaW50LWRpcmVjdG9yeSBpbnN0bGliZGlyKQogCiBhbGw6IGJ1aWxkCiAKLWJ1aWxkIGluc3RhbGwgY2xlYW46Ci0JJChNQUtFKSAtQyAkKEdJVF9ST09UX0RJUikgU0NSSVBUX1BFUkw9JChTQ1JJUFRfUEVSTF9GVUxMKSBcCi0gICAgICAgICAgICAgICAgJEAtcGVybC1zY3JpcHQKK2luc3RhbGxfcG06CisJaW5zdGFsbCAkKEdJVF9NRURJQVdJS0lfUE0pICQoSU5TVExJQkRJUikvJChHSVRfTUVESUFXSUtJX1BNKQorCitidWlsZDoKKwkkKE1BS0UpIC1DICQoR0lUX1JPT1RfRElSKSBTQ1JJUFRfUEVSTD0iJChTQ1JJUFRfUEVSTF9GVUxMKSIgXAorICAgICAgICAgICAgICAgIGJ1aWxkLXBlcmwtc2NyaXB0CisKK2luc3RhbGw6IGluc3RhbGxfcG0KKwkkKE1BS0UpIC1DICQoR0lUX1JPT1RfRElSKSBTQ1JJUFRfUEVSTD0iJChTQ1JJUFRfUEVSTF9GVUxMKSIgXAorICAgICAgICAgICAgICAgIGluc3RhbGwtcGVybC1zY3JpcHQKKworY2xlYW46CisJJChNQUtFKSAtQyAkKEdJVF9ST09UX0RJUikgU0NSSVBUX1BFUkw9IiQoU0NSSVBUX1BFUkxfRlVMTCkiIFwKKyAgICAgICAgICAgICAgICBjbGVhbi1wZXJsLXNjcmlwdAorCXJtICQoSU5TVExJQkRJUikvJChHSVRfTUVESUFXSUtJX1BNKQorCitwZXJsY3JpdGljOgorCXBlcmxjcml0aWMgLTIgKi5wZXJsCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC9iaW4td3JhcHBlci9naXQgYi9jb250cmliL213LXRvLWdpdC9iaW4td3JhcHBlci9naXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjY2M2FlNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L2Jpbi13cmFwcGVyL2dpdApAQCAtMCwwICsxLDE0IEBACisjIS9iaW4vc2gKKworIyBnaXQgZXhlY3V0YWJsZSB3cmFwcGVyIHNjcmlwdCBmb3IgR2l0LU1lZGlhd2lraSB0byBydW4gdGVzdHMgd2l0aG91dAorIyBpbnN0YWxsaW5nIGFsbCB0aGUgc2NyaXB0cyBhbmQgcGVybCBwYWNrYWdlcy4KKworR0lUX1JPT1RfRElSPS4uLy4uLy4uCitHSVRfRVhFQ19QQVRIPSQoY2QgIiQoZGlybmFtZSAiJDAiKSIgJiYgY2QgJHtHSVRfUk9PVF9ESVJ9ICYmIHB3ZCkKKworR0lUUEVSTExJQj0iJEdJVF9FWEVDX1BBVEgiJy9jb250cmliL213LXRvLWdpdCciJHtHSVRQRVJMTElCOis6JEdJVFBFUkxMSUJ9IgorUEFUSD0iJEdJVF9FWEVDX1BBVEgiJy9jb250cmliL213LXRvLWdpdDonIiRQQVRIIgorCitleHBvcnQgR0lUUEVSTExJQiBQQVRICisKK2V4ZWMgIiR7R0lUX0VYRUNfUEFUSH0vYmluLXdyYXBwZXJzL2dpdCIgIiRAIgpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvZ2l0LW13LnBlcmwgYi9jb250cmliL213LXRvLWdpdC9naXQtbXcucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yOGRmM2VlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvZ2l0LW13LnBlcmwKQEAgLTAsMCArMSwzNjggQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIENvcHlyaWdodCAoQykgMjAxMworIyAgICAgQmVub2l0IFBlcnNvbiA8YmVub2l0LnBlcnNvbkBlbnNpbWFnLmltYWcuZnI+CisjICAgICBDZWxlc3RpbiBNYXR0ZSA8Y2VsZXN0aW4ubWF0dGVAZW5zaW1hZy5pbWFnLmZyPgorIyBMaWNlbnNlOiBHUEwgdjIgb3IgbGF0ZXIKKworIyBTZXQgb2YgdG9vbHMgZm9yIGdpdCByZXBvIHdpdGggYSBtZWRpYXdpa2kgcmVtb3RlLgorIyBEb2N1bWVudGF0aW9uICYgYnVndHJhY2tlcjogaHR0cHM6Ly9naXRodWIuY29tL21veS9HaXQtTWVkaWF3aWtpLworCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgR2V0b3B0OjpMb25nOwordXNlIFVSSTo6VVJMIHF3KHVybCk7Cit1c2UgTFdQOjpVc2VyQWdlbnQ7Cit1c2UgSFRNTDo6VHJlZUJ1aWxkZXI7CisKK3VzZSBHaXQ7Cit1c2UgTWVkaWFXaWtpOjpBUEk7Cit1c2UgR2l0OjpNZWRpYXdpa2kgcXcoY2xlYW5fZmlsZW5hbWUgY29ubmVjdF9tYXliZQorCQkJCQlFTVBUWSBIVFRQX0NPREVfUEFHRV9OT1RfRk9VTkQpOworCisjIEJ5IGRlZmF1bHQsIHVzZSBVVEYtOCB0byBjb21tdW5pY2F0ZSB3aXRoIEdpdCBhbmQgdGhlIHVzZXIKK2Jpbm1vZGUgU1RERVJSLCAnOmVuY29kaW5nKFVURi04KSc7CitiaW5tb2RlIFNURE9VVCwgJzplbmNvZGluZyhVVEYtOCknOworCisjIEdsb2JhbCBwYXJhbWV0ZXJzCitteSAkdmVyYm9zZSA9IDA7CitzdWIgdl9wcmludCB7CisJaWYgKCR2ZXJib3NlKSB7CisJCXJldHVybiBwcmludCB7KlNUREVSUn0gQF87CisJfQorCXJldHVybjsKK30KKworIyBQcmV2aWV3IHBhcmFtZXRlcnMKK215ICRmaWxlX25hbWUgPSBFTVBUWTsKK215ICRyZW1vdGVfbmFtZSA9IEVNUFRZOworbXkgJHByZXZpZXdfZmlsZV9uYW1lID0gRU1QVFk7CitteSAkYXV0b2xvYWQgPSAwOworc3ViIGZpbGUgeworCSRmaWxlX25hbWUgPSBzaGlmdDsKKwlyZXR1cm4gJGZpbGVfbmFtZTsKK30KKworbXkgJWNvbW1hbmRzID0gKAorCSdoZWxwJyA9PgorCQlbXCZoZWxwLCB7fSwgXCZoZWxwXSwKKwkncHJldmlldycgPT4KKwkJW1wmcHJldmlldywgeworCQkJJzw+JyA9PiBcJmZpbGUsCisJCQknb3V0cHV0fG89cycgPT4gXCRwcmV2aWV3X2ZpbGVfbmFtZSwKKwkJCSdyZW1vdGV8cj1zJyA9PiBcJHJlbW90ZV9uYW1lLAorCQkJJ2F1dG9sb2FkfGEnID0+IFwkYXV0b2xvYWQKKwkJfSwgXCZwcmV2aWV3X2hlbHBdCispOworCisjIFNlYXJjaCBmb3Igc3ViLWNvbW1hbmQKK215ICRjbWQgPSAkY29tbWFuZHN7J2hlbHAnfTsKK2ZvciAoMC4uQEFSR1YtMSkgeworCWlmIChkZWZpbmVkICRjb21tYW5kc3skQVJHVlskX119KSB7CisJCSRjbWQgPSAkY29tbWFuZHN7JEFSR1ZbJF9dfTsKKwkJc3BsaWNlIEBBUkdWLCAkXywgMTsKKwkJbGFzdDsKKwl9Cit9OworR2V0T3B0aW9ucyggJXskY21kLT5bMV19LAorCSdoZWxwfGgnID0+IFwmeyRjbWQtPlsyXX0sCisJJ3ZlcmJvc2V8dicgID0+IFwkdmVyYm9zZSk7CisKKyMgTGF1bmNoIGNvbW1hbmQKKyZ7JGNtZC0+WzBdfTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUHJldmlldyBGdW5jdGlvbnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc3ViIHByZXZpZXdfaGVscCB7CisJcHJpbnQgeypTVERPVVR9IDw8J0VORCc7CitVU0FHRTogZ2l0IG13IHByZXZpZXcgWy0tcmVtb3RlfC1yIDxyZW1vdGUgbmFtZT5dIFstLWF1dG9sb2FkfC1hXQorICAgICAgICAgICAgICAgICAgICAgIFstLW91dHB1dHwtbyA8b3V0cHV0IGZpbGVuYW1lPl0gWy0tdmVyYm9zZXwtdl0KKyAgICAgICAgICAgICAgICAgICAgICA8YmxvYj4gfCA8ZmlsZW5hbWU+CisKK0RFU0NSSVBUSU9OOgorUHJldmlldyBpcyBhbiB1dGlsaXkgdG8gcHJldmlldyBsb2NhbCBjb250ZW50IG9mIGEgbWVkaWF3aWtpIHJlcG8gYXMgaWYgaXQgd2FzCitwdXNoZWQgb24gdGhlIHJlbW90ZS4KKworRm9yIHRoYXQsIHByZXZpZXcgc2VhcmNoZXMgZm9yIHRoZSByZW1vdGUgbmFtZSBvZiB0aGUgY3VycmVudCBicmFuY2gncwordXBzdHJlYW0gaWYgLS1yZW1vdGUgaXMgbm90IHNldC4gSWYgdGhhdCByZW1vdGUgaXMgbm90IGZvdW5kIG9yIGlmIGl0CitpcyBub3QgYSBtZWRpYXdpa2ksIGl0IGxpc3RzIGFsbCBtZWRpYXdpa2kgcmVtb3RlcyBjb25maWd1cmVkIGFuZCBhc2tzCit5b3UgdG8gcmVwbGF5IHlvdXIgY29tbWFuZCB3aXRoIHRoZSAtLXJlbW90ZSBvcHRpb24gc2V0IHByb3Blcmx5LgorCitUaGVuLCBpdCBzZWFyY2hlcyBmb3IgYSBmaWxlIG5hbWVkICdmaWxlbmFtZScuIElmIGl0J3Mgbm90IGZvdW5kIGluCit0aGUgY3VycmVudCBkaXIsIGl0IHdpbGwgYXNzdW1lIGl0J3MgYSBibG9iLgorCitUaGUgY29udGVudCByZXRyaWV2ZWQgaW4gdGhlIGZpbGUgKG9yIGluIHRoZSBibG9iKSB3aWxsIHRoZW4gYmUgcGFyc2VkCitieSB0aGUgcmVtb3RlIG1lZGlhd2lraSBhbmQgY29tYmluZWQgd2l0aCBhIHRlbXBsYXRlIHJldHJpZXZlZCBmcm9tCit0aGUgbWVkaWF3aWtpLgorCitGaW5hbGx5LCBwcmV2aWV3IHdpbGwgc2F2ZSB0aGUgSFRNTCByZXN1bHQgaW4gYSBmaWxlLiBhbmQgYXV0b2xvYWQgaXQKK2luIHlvdXIgZGVmYXVsdCB3ZWIgYnJvd3NlciBpZiB0aGUgb3B0aW9uIC0tYXV0b2xvYWQgaXMgcHJlc2VudC4KKworT1BUSU9OUzoKKyAgICAtciA8cmVtb3RlIG5hbWU+LCAtLXJlbW90ZSA8cmVtb3RlIG5hbWU+CisgICAgICAgIElmIHRoZSByZW1vdGUgaXMgYSBtZWRpYXdpa2ksIHRoZSB0ZW1wbGF0ZSBhbmQgdGhlIHBhcnNlIGVuZ2luZQorICAgICAgICB1c2VkIGZvciB0aGUgcHJldmlldyB3aWxsIGJlIHRob3NlIG9mIHRoYXQgcmVtb3RlLgorICAgICAgICBJZiBub3QsIGEgbGlzdCBvZiB2YWxpZCByZW1vdGVzIHdpbGwgYmUgc2hvd24uCisKKyAgICAtYSwgLS1hdXRvbG9hZAorICAgICAgICBUcnkgdG8gbG9hZCB0aGUgSFRNTCBvdXRwdXQgaW4gYSBuZXcgdGFiIChvciBuZXcgd2luZG93KSBvZiB5b3VyCisgICAgICAgIGRlZmF1bHQgd2ViIGJyb3dzZXIuCisKKyAgICAtbyA8b3V0cHV0IGZpbGVuYW1lPiwgLS1vdXRwdXQgPG91dHB1dCBmaWxlbmFtZT4KKyAgICAgICAgQ2hhbmdlIHRoZSBIVE1MIG91dHB1dCBmaWxlbmFtZS4gRGVmYXVsdCBmaWxlbmFtZSBpcyBiYXNlZCBvbiB0aGUKKyAgICAgICAgaW5wdXQgZmlsZW5hbWUgd2l0aCBpdHMgZXh0ZW5zaW9uIHJlcGxhY2VkIGJ5ICcuaHRtbCcuCisKKyAgICAtdiwgLS12ZXJib3NlCisgICAgICAgIFNob3cgbW9yZSBpbmZvcm1hdGlvbiBvbiB3aGF0J3MgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QuCitFTkQKKwlleGl0OworfQorCitzdWIgcHJldmlldyB7CisJbXkgJHdpa2k7CisJbXkgKCRyZW1vdGVfdXJsLCAkd2lraV9wYWdlX25hbWUpOworCW15ICgkbmV3X2NvbnRlbnQsICR0ZW1wbGF0ZSk7CisJbXkgJGZpbGVfY29udGVudDsKKworCWlmICgkZmlsZV9uYW1lIGVxIEVNUFRZKSB7CisJCWRpZSAiTWlzc2luZyBmaWxlIGFyZ3VtZW50LCBzZWUgYGdpdCBtdyBoZWxwYFxuIjsKKwl9CisKKwl2X3ByaW50KCIjIyMgU2VsZWN0aW5nIHJlbW90ZVxuIik7CisJaWYgKCRyZW1vdGVfbmFtZSBlcSBFTVBUWSkgeworCQkkcmVtb3RlX25hbWUgPSBmaW5kX3Vwc3RyZWFtX3JlbW90ZV9uYW1lKCk7CisJCWlmICgkcmVtb3RlX25hbWUpIHsKKwkJCSRyZW1vdGVfdXJsID0gbWVkaWF3aWtpX3JlbW90ZV91cmxfbWF5YmUoJHJlbW90ZV9uYW1lKTsKKwkJfQorCisJCWlmICghICRyZW1vdGVfdXJsKSB7CisJCQlteSBAdmFsaWRfcmVtb3RlcyA9IGZpbmRfbWVkaWF3aWtpX3JlbW90ZXMoKTsKKworCQkJaWYgKCQjdmFsaWRfcmVtb3RlcyA9PSAwKSB7CisJCQkJcHJpbnQgeypTVERFUlJ9ICJObyBtZWRpYXdpa2kgcmVtb3RlIGluIHRoaXMgcmVwby4gXG4iOworCQkJCWV4aXQgMTsKKwkJCX0gZWxzZSB7CisJCQkJbXkgJHJlbW90ZXNfbGlzdCA9IGpvaW4oIlxuXHQiLCBAdmFsaWRfcmVtb3Rlcyk7CisJCQkJcHJpbnQgeypTVERFUlJ9IDw8Ik1FU1NBR0UiOworVGhlcmUgYXJlIG11bHRpcGxlIG1lZGlhd2lraSByZW1vdGVzLCB3aGljaCBvZjoKKwkke3JlbW90ZXNfbGlzdH0KK2RvIHlvdSB3YW50ID8gVXNlIHRoZSAtciBvcHRpb24gdG8gc3BlY2lmeSB0aGUgcmVtb3RlLgorTUVTU0FHRQorCQkJfQorCisJCQlleGl0IDE7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIWlzX3ZhbGlkX3JlbW90ZSgkcmVtb3RlX25hbWUpKSB7CisJCQlkaWUgIiR7cmVtb3RlX25hbWV9IGlzIG5vdCBhIHJlbW90ZVxuIjsKKwkJfQorCisJCSRyZW1vdGVfdXJsID0gbWVkaWF3aWtpX3JlbW90ZV91cmxfbWF5YmUoJHJlbW90ZV9uYW1lKTsKKwkJaWYgKCEgJHJlbW90ZV91cmwpIHsKKwkJCWRpZSAiJHtyZW1vdGVfbmFtZX0gaXMgbm90IGEgbWVkaWF3aWtpIHJlbW90ZVxuIjsKKwkJfQorCX0KKwl2X3ByaW50KCJzZWxlY3RlZCByZW1vdGU6XG5cdG5hbWU6ICR7cmVtb3RlX25hbWV9XG5cdHVybDogJHtyZW1vdGVfdXJsfVxuIik7CisKKwkkd2lraSA9IGNvbm5lY3RfbWF5YmUoJHdpa2ksICRyZW1vdGVfbmFtZSwgJHJlbW90ZV91cmwpOworCisJIyBSZWFkIGZpbGUgY29udGVudAorCWlmICghIC1lICRmaWxlX25hbWUpIHsKKwkJJGZpbGVfY29udGVudCA9IGdpdF9jbWRfdHJ5IHsKKwkJCUdpdDo6Y29tbWFuZCgnY2F0LWZpbGUnLCAnYmxvYicsICRmaWxlX25hbWUpOyB9CisJCQkiJXMgZmFpbGVkIHcvIGNvZGUgJWQiOworCisJCWlmICgkZmlsZV9uYW1lID1+IC8oLispOiguKykvKSB7CisJCQkkZmlsZV9uYW1lID0gJDI7CisJCX0KKwl9IGVsc2UgeworCQlvcGVuIG15ICRyZWFkX2ZoLCAiPCIsICRmaWxlX25hbWUKKwkJCW9yIGRpZSAiY291bGQgbm90IG9wZW4gJHtmaWxlX25hbWV9OiAkIVxuIjsKKwkJJGZpbGVfY29udGVudCA9IGRvIHsgbG9jYWwgJC8gPSB1bmRlZjsgPCRyZWFkX2ZoPiB9OworCQljbG9zZSAkcmVhZF9maAorCQkJb3IgZGllICJ1bmFibGUgdG8gY2xvc2U6ICQhXG4iOworCX0KKworCXZfcHJpbnQoIiMjIyBSZXRyaWV2aW5nIHRlbXBsYXRlXG4iKTsKKwkoJHdpa2lfcGFnZV9uYW1lID0gY2xlYW5fZmlsZW5hbWUoJGZpbGVfbmFtZSkpID1+IHMvXC5bXi5dKyQvLzsKKwkkdGVtcGxhdGUgPSBnZXRfdGVtcGxhdGUoJHJlbW90ZV91cmwsICR3aWtpX3BhZ2VfbmFtZSk7CisKKwl2X3ByaW50KCIjIyMgUGFyc2luZyBsb2NhbCBjb250ZW50XG4iKTsKKwkkbmV3X2NvbnRlbnQgPSAkd2lraS0+YXBpKHsKKwkJYWN0aW9uID0+ICdwYXJzZScsCisJCXRleHQgPT4gJGZpbGVfY29udGVudCwKKwkJdGl0bGUgPT4gJHdpa2lfcGFnZV9uYW1lCisJfSwgeworCQlza2lwX2VuY29kaW5nID0+IDEKKwl9KSBvciBkaWUgIk5vIHJlc3BvbnNlIGZyb20gcmVtb3RlIG1lZGlhd2lraVxuIjsKKwkkbmV3X2NvbnRlbnQgPSAkbmV3X2NvbnRlbnQtPnsncGFyc2UnfS0+eyd0ZXh0J30tPnsnKid9OworCisJdl9wcmludCgiIyMjIE1lcmdpbmcgY29udGVudHNcbiIpOworCWlmICgkcHJldmlld19maWxlX25hbWUgZXEgRU1QVFkpIHsKKwkJKCRwcmV2aWV3X2ZpbGVfbmFtZSA9ICRmaWxlX25hbWUpID1+IHMvXC5bXi5dKyQvLmh0bWwvOworCX0KKwlvcGVuKG15ICRzYXZlX2ZoLCAnPjplbmNvZGluZyhVVEYtOCknLCAkcHJldmlld19maWxlX25hbWUpCisJCW9yIGRpZSAiQ291bGQgbm90IG9wZW46ICQhXG4iOworCXByaW50IHskc2F2ZV9maH0gbWVyZ2VfY29udGVudHMoJHRlbXBsYXRlLCAkbmV3X2NvbnRlbnQsICRyZW1vdGVfdXJsKTsKKwljbG9zZSgkc2F2ZV9maCkKKwkJb3IgZGllICJDb3VsZCBub3QgY2xvc2U6ICQhXG4iOworCisJdl9wcmludCgiIyMjIFJlc3VsdHNcbiIpOworCWlmICgkYXV0b2xvYWQpIHsKKwkJdl9wcmludCgiTGF1bmNoaW5nIGJyb3dzZXIgdy8gZmlsZTogJHtwcmV2aWV3X2ZpbGVfbmFtZX0iKTsKKwkJc3lzdGVtKCdnaXQnLCAnd2ViLS1icm93c2UnLCAkcHJldmlld19maWxlX25hbWUpOworCX0gZWxzZSB7CisJCXByaW50IHsqU1RERVJSfSAiUHJldmlldyBmaWxlIHNhdmVkIGFzOiAke3ByZXZpZXdfZmlsZV9uYW1lfVxuIjsKKwl9CisKKwlleGl0OworfQorCisjIHVzZXMgZ2xvYmFsIHNjb3BlIHZhcmlhYmxlOiAkcmVtb3RlX25hbWUKK3N1YiBtZXJnZV9jb250ZW50cyB7CisJbXkgJHRlbXBsYXRlID0gc2hpZnQ7CisJbXkgJGNvbnRlbnQgPSBzaGlmdDsKKwlteSAkcmVtb3RlX3VybCA9IHNoaWZ0OworCW15ICgkY29udGVudF90cmVlLCAkaHRtbF90cmVlLCAkbXdfY29udGVudF90ZXh0KTsKKwlteSAkdGVtcGxhdGVfY29udGVudF9pZCA9ICdib2R5Q29udGVudCc7CisKKwkkaHRtbF90cmVlID0gSFRNTDo6VHJlZUJ1aWxkZXItPm5ldzsKKwkkaHRtbF90cmVlLT5wYXJzZSgkdGVtcGxhdGUpOworCisJJGNvbnRlbnRfdHJlZSA9IEhUTUw6OlRyZWVCdWlsZGVyLT5uZXc7CisJJGNvbnRlbnRfdHJlZS0+cGFyc2UoJGNvbnRlbnQpOworCisJJHRlbXBsYXRlX2NvbnRlbnRfaWQgPSBHaXQ6OmNvbmZpZygicmVtb3RlLiR7cmVtb3RlX25hbWV9Lm13SURjb250ZW50IikKKwkJfHwgJHRlbXBsYXRlX2NvbnRlbnRfaWQ7CisJdl9wcmludCgiVXNpbmcgJyR7dGVtcGxhdGVfY29udGVudF9pZH0nIGFzIHRoZSBjb250ZW50IElEXG4iKTsKKworCSRtd19jb250ZW50X3RleHQgPSAkaHRtbF90cmVlLT5sb29rX2Rvd24oJ2lkJywgJHRlbXBsYXRlX2NvbnRlbnRfaWQpOworCWlmICghZGVmaW5lZCAkbXdfY29udGVudF90ZXh0KSB7CisJCXByaW50IHsqU1RERVJSfSA8PCJDT05GSUciOworQ291bGQgbm90IGNvbWJpbmUgdGhlIG5ldyBjb250ZW50IHdpdGggdGhlIHRlbXBsYXRlLiBZb3UgbWlnaHQgd2FudCB0bworY29uZmlndXJlIGBtZWRpYXdpa2kuSURDb250ZW50YCBpbiB5b3VyIGNvbmZpZzoKKwlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS4ke3JlbW90ZV9uYW1lfS5td0lEY29udGVudCA8aWQ+CithbmQgcmUtcnVuIHRoZSBjb21tYW5kIGFmdGVyd2FyZC4KK0NPTkZJRworCQlleGl0IDE7CisJfQorCSRtd19jb250ZW50X3RleHQtPmRlbGV0ZV9jb250ZW50KCk7CisJJG13X2NvbnRlbnRfdGV4dC0+cHVzaF9jb250ZW50KCRjb250ZW50X3RyZWUpOworCisJbWFrZV9saW5rc19hYnNvbHV0ZSgkaHRtbF90cmVlLCAkcmVtb3RlX3VybCk7CisKKwlyZXR1cm4gJGh0bWxfdHJlZS0+YXNfSFRNTDsKK30KKworc3ViIG1ha2VfbGlua3NfYWJzb2x1dGUgeworCW15ICRodG1sX3RyZWUgPSBzaGlmdDsKKwlteSAkcmVtb3RlX3VybCA9IHNoaWZ0OworCWZvciAoQHsgJGh0bWxfdHJlZS0+ZXh0cmFjdF9saW5rcygpIH0pIHsKKwkJbXkgKCRsaW5rLCAkZWxlbWVudCwgJGF0dHIpID0gQHsgJF8gfTsKKwkJbXkgJHVybCA9IHVybCgkbGluayktPmNhbm9uaWNhbDsKKwkJaWYgKCR1cmwgIX4gLyMvKSB7CisJCQkkZWxlbWVudC0+YXR0cigkYXR0ciwgVVJJLT5uZXdfYWJzKCR1cmwsICRyZW1vdGVfdXJsKSk7CisJCX0KKwl9CisJcmV0dXJuICRodG1sX3RyZWU7Cit9CisKK3N1YiBpc192YWxpZF9yZW1vdGUgeworCW15ICRyZW1vdGUgPSBzaGlmdDsKKwlteSBAcmVtb3RlcyA9IGdpdF9jbWRfdHJ5IHsKKwkJR2l0Ojpjb21tYW5kKCdyZW1vdGUnKSB9CisJCSIlcyBmYWlsZWQgdy8gY29kZSAlZCI7CisJbXkgJGZvdW5kX3JlbW90ZSA9IDA7CisJZm9yZWFjaCBteSAkcmVtb3RlIChAcmVtb3RlcykgeworCQlpZiAoJHJlbW90ZSBlcSAkcmVtb3RlKSB7CisJCQkkZm91bmRfcmVtb3RlID0gMTsKKwkJCWxhc3Q7CisJCX0KKwl9CisJcmV0dXJuICRmb3VuZF9yZW1vdGU7Cit9CisKK3N1YiBmaW5kX21lZGlhd2lraV9yZW1vdGVzIHsKKwlteSBAcmVtb3RlcyA9IGdpdF9jbWRfdHJ5IHsKKwkJR2l0Ojpjb21tYW5kKCdyZW1vdGUnKTsgfQorCQkiJXMgZmFpbGVkIHcvIGNvZGUgJWQiOworCW15ICRyZW1vdGVfdXJsOworCW15IEB2YWxpZF9yZW1vdGVzID0gKCk7CisJZm9yZWFjaCBteSAkcmVtb3RlIChAcmVtb3RlcykgeworCQkkcmVtb3RlX3VybCA9IG1lZGlhd2lraV9yZW1vdGVfdXJsX21heWJlKCRyZW1vdGUpOworCQlpZiAoJHJlbW90ZV91cmwpIHsKKwkJCXB1c2goQHZhbGlkX3JlbW90ZXMsICRyZW1vdGUpOworCQl9CisJfQorCXJldHVybiBAdmFsaWRfcmVtb3RlczsKK30KKworc3ViIGZpbmRfdXBzdHJlYW1fcmVtb3RlX25hbWUgeworCW15ICRjdXJyZW50X2JyYW5jaCA9IGdpdF9jbWRfdHJ5IHsKKwkJR2l0Ojpjb21tYW5kX29uZWxpbmUoJ3N5bWJvbGljLXJlZicsICctLXNob3J0JywgJ0hFQUQnKSB9CisJCSIlcyBmYWlsZWQgdy8gY29kZSAlZCI7CisJcmV0dXJuIEdpdDo6Y29uZmlnKCJicmFuY2guJHtjdXJyZW50X2JyYW5jaH0ucmVtb3RlIik7Cit9CisKK3N1YiBtZWRpYXdpa2lfcmVtb3RlX3VybF9tYXliZSB7CisJbXkgJHJlbW90ZSA9IHNoaWZ0OworCisJIyBGaW5kIHJlbW90ZSB1cmwKKwlteSAkcmVtb3RlX3VybCA9IEdpdDo6Y29uZmlnKCJyZW1vdGUuJHtyZW1vdGV9LnVybCIpOworCWlmICgkcmVtb3RlX3VybCA9fiBzL21lZGlhd2lraTo6KC4qKS8kMS8pIHsKKwkJcmV0dXJuIHVybCgkcmVtb3RlX3VybCktPmNhbm9uaWNhbDsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N1YiBnZXRfdGVtcGxhdGUgeworCW15ICR1cmwgPSBzaGlmdDsKKwlteSAkcGFnZV9uYW1lID0gc2hpZnQ7CisJbXkgKCRyZXEsICRyZXMsICRjb2RlLCAkdXJsX2FmdGVyKTsKKworCSRyZXEgPSBMV1A6OlVzZXJBZ2VudC0+bmV3OworCWlmICgkdmVyYm9zZSkgeworCQkkcmVxLT5zaG93X3Byb2dyZXNzKDEpOworCX0KKworCSRyZXMgPSAkcmVxLT5nZXQoIiR7dXJsfS9pbmRleC5waHA/dGl0bGU9JHtwYWdlX25hbWV9Iik7CisJaWYgKCEkcmVzLT5pc19zdWNjZXNzKSB7CisJCSRjb2RlID0gJHJlcy0+Y29kZTsKKwkJJHVybF9hZnRlciA9ICRyZXMtPnJlcXVlc3QoKS0+dXJpKCk7ICMgcmVzb2x2ZSBhbGwgcmVkaXJlY3Rpb25zCisJCWlmICgkY29kZSA9PSBIVFRQX0NPREVfUEFHRV9OT1RfRk9VTkQpIHsKKwkJCWlmICgkdmVyYm9zZSkgeworCQkJCXByaW50IHsqU1RERVJSfSA8PCJXQVJOSU5HIjsKK1dhcm5pbmc6IEZhaWxlZCB0byByZXRyaWV2ZSAnJHBhZ2VfbmFtZScuIENyZWF0ZSBpdCBvbiB0aGUgbWVkaWF3aWtpIGlmIHlvdSB3YW50CithbGwgdGhlIGxpbmtzIHRvIHdvcmsgcHJvcGVybHkuCitUcnlpbmcgdG8gdXNlIHRoZSBtZWRpYXdpa2kgaG9tZXBhZ2UgYXMgYSBmYWxsYmFjayB0ZW1wbGF0ZSAuLi4KK1dBUk5JTkcKKwkJCX0KKworCQkJIyBMV1AgYXV0b21hdGljYWxseSByZWRpcmVjdHMgR0VUIHJlcXVlc3QKKwkJCSRyZXMgPSAkcmVxLT5nZXQoIiR7dXJsfS9pbmRleC5waHAiKTsKKwkJCWlmICghJHJlcy0+aXNfc3VjY2VzcykgeworCQkJCSR1cmxfYWZ0ZXIgPSAkcmVzLT5yZXF1ZXN0KCktPnVyaSgpOyAjIHJlc29sdmUgYWxsIHJlZGlyZWN0aW9ucworCQkJCWRpZSAiRmFpbGVkIHRvIGdldCBob21lcGFnZSBAICR7dXJsX2FmdGVyfSB3LyBjb2RlICR7Y29kZX1cbiI7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkaWUgIkZhaWxlZCB0byBnZXQgJyR7cGFnZV9uYW1lfScgQCAke3VybF9hZnRlcn0gdy8gY29kZSAke2NvZGV9XG4iOworCQl9CisJfQorCisJcmV0dXJuICRyZXMtPmRlY29kZWRfY29udGVudDsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEhlbHAgRnVuY3Rpb25zICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc3ViIGhlbHAgeworCXByaW50IHsqU1RET1VUfSA8PCdFTkQnOwordXNhZ2U6IGdpdCBtdyA8Y29tbWFuZD4gPGFyZ3M+CisKK2dpdCBtdyBjb21tYW5kcyBhcmU6CisgICAgaGVscCAgICAgICAgRGlzcGxheSBoZWxwIGluZm9ybWF0aW9uIGFib3V0IGdpdCBtdworICAgIHByZXZpZXcgICAgIFBhcnNlIGFuZCByZW5kZXIgbG9jYWwgZmlsZSBpbnRvIEhUTUwKK0VORAorCWV4aXQ7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC9naXQtcmVtb3RlLW1lZGlhd2lraS5wZXJsIGIvY29udHJpYi9tdy10by1naXQvZ2l0LXJlbW90ZS1tZWRpYXdpa2kucGVybAppbmRleCA5YzE0YzFmLi5mOGQ3ZDJjIDEwMDc1NQotLS0gYS9jb250cmliL213LXRvLWdpdC9naXQtcmVtb3RlLW1lZGlhd2lraS5wZXJsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L2dpdC1yZW1vdGUtbWVkaWF3aWtpLnBlcmwKQEAgLTEzLDE5ICsxMywxNyBAQAogCiB1c2Ugc3RyaWN0OwogdXNlIE1lZGlhV2lraTo6QVBJOwordXNlIEdpdDsKK3VzZSBHaXQ6Ok1lZGlhd2lraSBxdyhjbGVhbl9maWxlbmFtZSBzbXVkZ2VfZmlsZW5hbWUgY29ubmVjdF9tYXliZQorCQkJCQlFTVBUWSBIVFRQX0NPREVfT0spOwogdXNlIERhdGVUaW1lOjpGb3JtYXQ6OklTTzg2MDE7Ci0KLSMgQnkgZGVmYXVsdCwgdXNlIFVURi04IHRvIGNvbW11bmljYXRlIHdpdGggR2l0IGFuZCB0aGUgdXNlcgotYmlubW9kZSBTVERFUlIsICI6dXRmOCI7Ci1iaW5tb2RlIFNURE9VVCwgIjp1dGY4IjsKLQotdXNlIFVSSTo6RXNjYXBlOwotdXNlIElQQzo6T3BlbjI7Ci0KIHVzZSB3YXJuaW5nczsKIAotIyBNZWRpYXdpa2kgZmlsZW5hbWVzIGNhbiBjb250YWluIGZvcndhcmQgc2xhc2hlcy4gVGhpcyB2YXJpYWJsZSBkZWNpZGVzIGJ5IHdoaWNoIHBhdHRlcm4gdGhleSBzaG91bGQgYmUgcmVwbGFjZWQKLXVzZSBjb25zdGFudCBTTEFTSF9SRVBMQUNFTUVOVCA9PiAiJTJGIjsKKyMgQnkgZGVmYXVsdCwgdXNlIFVURi04IHRvIGNvbW11bmljYXRlIHdpdGggR2l0IGFuZCB0aGUgdXNlcgorYmlubW9kZSBTVERFUlIsICc6ZW5jb2RpbmcoVVRGLTgpJzsKK2Jpbm1vZGUgU1RET1VULCAnOmVuY29kaW5nKFVURi04KSc7CisKK3VzZSBVUkk6OkVzY2FwZTsKIAogIyBJdCdzIG5vdCBhbHdheXMgcG9zc2libGUgdG8gZGVsZXRlIHBhZ2VzIChtYXkgcmVxdWlyZSBzb21lCiAjIHByaXZpbGVnZXMpLiBEZWxldGVkIHBhZ2VzIGFyZSByZXBsYWNlZCB3aXRoIHRoaXMgY29udGVudC4KQEAgLTM2LDQ1ICszNCw1NyBAQAogdXNlIGNvbnN0YW50IEVNUFRZX0NPTlRFTlQgPT4gIjwhLS0gZW1wdHkgcGFnZSAtLT5cbiI7CiAKICMgdXNlZCB0byByZWZsZWN0IGZpbGUgY3JlYXRpb24gb3IgZGVsZXRpb24gaW4gZGlmZi4KLXVzZSBjb25zdGFudCBOVUxMX1NIQTEgPT4gIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOwordXNlIGNvbnN0YW50IE5VTExfU0hBMSA9PiAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCc7CiAKICMgVXNlZCBvbiBHaXQncyBzaWRlIHRvIHJlZmxlY3QgZW1wdHkgZWRpdCBtZXNzYWdlcyBvbiB0aGUgd2lraQogdXNlIGNvbnN0YW50IEVNUFRZX01FU1NBR0UgPT4gJypFbXB0eSBNZWRpYVdpa2kgTWVzc2FnZSonOwogCisjIE51bWJlciBvZiBwYWdlcyB0YWtlbiBpbnRvIGFjY291bnQgYXQgb25jZSBpbiBzdWJtb2R1bGUgZ2V0X213X3BhZ2VfbGlzdAordXNlIGNvbnN0YW50IFNMSUNFX1NJWkUgPT4gNTA7CisKKyMgTnVtYmVyIG9mIGxpbmtlZCBtZWRpYWZpbGUgdG8gZ2V0IGF0IG9uY2UgaW4gZ2V0X2xpbmtlZF9tZWRpYWZpbGVzCisjIFRoZSBxdWVyeSBpcyBzcGxpdCBpbiBzbWFsbCBiYXRjaGVzIGJlY2F1c2Ugb2YgdGhlIE1XIEFQSSBsaW1pdCBvZgorIyB0aGUgbnVtYmVyIG9mIGxpbmtzIHRvIGJlIHJldHVybmVkICg1MDAgbGlua3MgbWF4KS4KK3VzZSBjb25zdGFudCBCQVRDSF9TSVpFID0+IDEwOworCitpZiAoQEFSR1YgIT0gMikgeworCWV4aXRfZXJyb3JfdXNhZ2UoKTsKK30KKwogbXkgJHJlbW90ZW5hbWUgPSAkQVJHVlswXTsKIG15ICR1cmwgPSAkQVJHVlsxXTsKIAogIyBBY2NlcHQgYm90aCBzcGFjZS1zZXBhcmF0ZWQgYW5kIG11bHRpcGxlIGtleXMgaW4gY29uZmlnIGZpbGUuCiAjIFNwYWNlcyBzaG91bGQgYmUgd3JpdHRlbiBhcyBfIGFueXdheSBiZWNhdXNlIHdlJ2xsIHVzZSBjaG9tcC4KLW15IEB0cmFja2VkX3BhZ2VzID0gc3BsaXQoL1sgXG5dLywgcnVuX2dpdCgiY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuIi4gJHJlbW90ZW5hbWUgLiIucGFnZXMiKSk7CitteSBAdHJhY2tlZF9wYWdlcyA9IHNwbGl0KC9bIFxuXS8sIHJ1bl9naXQoImNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLiR7cmVtb3RlbmFtZX0ucGFnZXMiKSk7CiBjaG9tcChAdHJhY2tlZF9wYWdlcyk7CiAKICMgSnVzdCBsaWtlIEB0cmFja2VkX3BhZ2VzLCBidXQgZm9yIE1lZGlhV2lraSBjYXRlZ29yaWVzLgotbXkgQHRyYWNrZWRfY2F0ZWdvcmllcyA9IHNwbGl0KC9bIFxuXS8sIHJ1bl9naXQoImNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLiIuICRyZW1vdGVuYW1lIC4iLmNhdGVnb3JpZXMiKSk7CitteSBAdHJhY2tlZF9jYXRlZ29yaWVzID0gc3BsaXQoL1sgXG5dLywgcnVuX2dpdCgiY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuJHtyZW1vdGVuYW1lfS5jYXRlZ29yaWVzIikpOwogY2hvbXAoQHRyYWNrZWRfY2F0ZWdvcmllcyk7CiAKICMgSW1wb3J0IG1lZGlhIGZpbGVzIG9uIHB1bGwKLW15ICRpbXBvcnRfbWVkaWEgPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgLS1ib29sIHJlbW90ZS4iLiAkcmVtb3RlbmFtZSAuIi5tZWRpYWltcG9ydCIpOworbXkgJGltcG9ydF9tZWRpYSA9IHJ1bl9naXQoImNvbmZpZyAtLWdldCAtLWJvb2wgcmVtb3RlLiR7cmVtb3RlbmFtZX0ubWVkaWFpbXBvcnQiKTsKIGNob21wKCRpbXBvcnRfbWVkaWEpOwotJGltcG9ydF9tZWRpYSA9ICgkaW1wb3J0X21lZGlhIGVxICJ0cnVlIik7CiskaW1wb3J0X21lZGlhID0gKCRpbXBvcnRfbWVkaWEgZXEgJ3RydWUnKTsKIAogIyBFeHBvcnQgbWVkaWEgZmlsZXMgb24gcHVzaAotbXkgJGV4cG9ydF9tZWRpYSA9IHJ1bl9naXQoImNvbmZpZyAtLWdldCAtLWJvb2wgcmVtb3RlLiIuICRyZW1vdGVuYW1lIC4iLm1lZGlhZXhwb3J0Iik7CitteSAkZXhwb3J0X21lZGlhID0gcnVuX2dpdCgiY29uZmlnIC0tZ2V0IC0tYm9vbCByZW1vdGUuJHtyZW1vdGVuYW1lfS5tZWRpYWV4cG9ydCIpOwogY2hvbXAoJGV4cG9ydF9tZWRpYSk7Ci0kZXhwb3J0X21lZGlhID0gISgkZXhwb3J0X21lZGlhIGVxICJmYWxzZSIpOworJGV4cG9ydF9tZWRpYSA9ICEoJGV4cG9ydF9tZWRpYSBlcSAnZmFsc2UnKTsKIAotbXkgJHdpa2lfbG9naW4gPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgcmVtb3RlLiIuICRyZW1vdGVuYW1lIC4iLm13TG9naW4iKTsKK215ICR3aWtpX2xvZ2luID0gcnVuX2dpdCgiY29uZmlnIC0tZ2V0IHJlbW90ZS4ke3JlbW90ZW5hbWV9Lm13TG9naW4iKTsKICMgTm90ZTogbXdQYXNzd29yZCBpcyBkaXNjb3VycmFnZWQuIFVzZSB0aGUgY3JlZGVudGlhbCBzeXN0ZW0gaW5zdGVhZC4KLW15ICR3aWtpX3Bhc3N3ZCA9IHJ1bl9naXQoImNvbmZpZyAtLWdldCByZW1vdGUuIi4gJHJlbW90ZW5hbWUgLiIubXdQYXNzd29yZCIpOwotbXkgJHdpa2lfZG9tYWluID0gcnVuX2dpdCgiY29uZmlnIC0tZ2V0IHJlbW90ZS4iLiAkcmVtb3RlbmFtZSAuIi5td0RvbWFpbiIpOworbXkgJHdpa2lfcGFzc3dkID0gcnVuX2dpdCgiY29uZmlnIC0tZ2V0IHJlbW90ZS4ke3JlbW90ZW5hbWV9Lm13UGFzc3dvcmQiKTsKK215ICR3aWtpX2RvbWFpbiA9IHJ1bl9naXQoImNvbmZpZyAtLWdldCByZW1vdGUuJHtyZW1vdGVuYW1lfS5td0RvbWFpbiIpOwogY2hvbXAoJHdpa2lfbG9naW4pOwogY2hvbXAoJHdpa2lfcGFzc3dkKTsKIGNob21wKCR3aWtpX2RvbWFpbik7CiAKICMgSW1wb3J0IG9ubHkgbGFzdCByZXZpc2lvbnMgKGJvdGggZm9yIGNsb25lIGFuZCBmZXRjaCkKLW15ICRzaGFsbG93X2ltcG9ydCA9IHJ1bl9naXQoImNvbmZpZyAtLWdldCAtLWJvb2wgcmVtb3RlLiIuICRyZW1vdGVuYW1lIC4iLnNoYWxsb3ciKTsKK215ICRzaGFsbG93X2ltcG9ydCA9IHJ1bl9naXQoImNvbmZpZyAtLWdldCAtLWJvb2wgcmVtb3RlLiR7cmVtb3RlbmFtZX0uc2hhbGxvdyIpOwogY2hvbXAoJHNoYWxsb3dfaW1wb3J0KTsKLSRzaGFsbG93X2ltcG9ydCA9ICgkc2hhbGxvd19pbXBvcnQgZXEgInRydWUiKTsKKyRzaGFsbG93X2ltcG9ydCA9ICgkc2hhbGxvd19pbXBvcnQgZXEgJ3RydWUnKTsKIAogIyBGZXRjaCAoY2xvbmUgYW5kIHB1bGwpIGJ5IHJldmlzaW9ucyBpbnN0ZWFkIG9mIGJ5IHBhZ2VzLiBUaGlzIGJlaGF2aW9yCiAjIGlzIG1vcmUgZWZmaWNpZW50IHdoZW4gd2UgaGF2ZSBhIHdpa2kgd2l0aCBsb3RzIG9mIHBhZ2VzIGFuZCB3ZSBmZXRjaApAQCAtODIsMTUgKzkyLDE4IEBACiAjIFBvc3NpYmxlIHZhbHVlczoKICMgLSBieV9yZXY6IHBlcmZvcm0gb25lIHF1ZXJ5IHBlciBuZXcgcmV2aXNpb24gb24gdGhlIHJlbW90ZSB3aWtpCiAjIC0gYnlfcGFnZTogcXVlcnkgZWFjaCB0cmFja2VkIHBhZ2UgZm9yIG5ldyByZXZpc2lvbgotbXkgJGZldGNoX3N0cmF0ZWd5ID0gcnVuX2dpdCgiY29uZmlnIC0tZ2V0IHJlbW90ZS4kcmVtb3RlbmFtZS5mZXRjaFN0cmF0ZWd5Iik7Ci11bmxlc3MgKCRmZXRjaF9zdHJhdGVneSkgewotCSRmZXRjaF9zdHJhdGVneSA9IHJ1bl9naXQoImNvbmZpZyAtLWdldCBtZWRpYXdpa2kuZmV0Y2hTdHJhdGVneSIpOworbXkgJGZldGNoX3N0cmF0ZWd5ID0gcnVuX2dpdCgiY29uZmlnIC0tZ2V0IHJlbW90ZS4ke3JlbW90ZW5hbWV9LmZldGNoU3RyYXRlZ3kiKTsKK2lmICghJGZldGNoX3N0cmF0ZWd5KSB7CisJJGZldGNoX3N0cmF0ZWd5ID0gcnVuX2dpdCgnY29uZmlnIC0tZ2V0IG1lZGlhd2lraS5mZXRjaFN0cmF0ZWd5Jyk7CiB9CiBjaG9tcCgkZmV0Y2hfc3RyYXRlZ3kpOwotdW5sZXNzICgkZmV0Y2hfc3RyYXRlZ3kpIHsKLQkkZmV0Y2hfc3RyYXRlZ3kgPSAiYnlfcGFnZSI7CitpZiAoISRmZXRjaF9zdHJhdGVneSkgeworCSRmZXRjaF9zdHJhdGVneSA9ICdieV9wYWdlJzsKIH0KIAorIyBSZW1lbWJlciB0aGUgdGltZXN0YW1wIGNvcnJlc3BvbmRpbmcgdG8gYSByZXZpc2lvbiBpZC4KK215ICViYXNldGltZXN0YW1wczsKKwogIyBEdW1iIHB1c2g6IGRvbid0IHVwZGF0ZSBub3RlcyBhbmQgbWVkaWF3aWtpIHJlZiB0byByZWZsZWN0IHRoZSBsYXN0IHB1c2guCiAjCiAjIENvbmZpZ3VyYWJsZSB3aXRoIG1lZGlhd2lraS5kdW1iUHVzaCwgb3IgcGVyLXJlbW90ZSB3aXRoCkBAIC0xMDUsNDggKzExOCwyNSBAQAogIyB3aWxsIGdldCB0aGUgaGlzdG9yeSB3aXRoIGluZm9ybWF0aW9uIGxvc3QpLiBJZiB0aGUgaW1wb3J0IGlzCiAjIGRldGVybWluaXN0aWMsIHRoaXMgbWVhbnMgZXZlcnlib2R5IGdldHMgdGhlIHNhbWUgc2hhMSBmb3IgZWFjaAogIyBNZWRpYVdpa2kgcmV2aXNpb24uCi1teSAkZHVtYl9wdXNoID0gcnVuX2dpdCgiY29uZmlnIC0tZ2V0IC0tYm9vbCByZW1vdGUuJHJlbW90ZW5hbWUuZHVtYlB1c2giKTsKLXVubGVzcyAoJGR1bWJfcHVzaCkgewotCSRkdW1iX3B1c2ggPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgLS1ib29sIG1lZGlhd2lraS5kdW1iUHVzaCIpOworbXkgJGR1bWJfcHVzaCA9IHJ1bl9naXQoImNvbmZpZyAtLWdldCAtLWJvb2wgcmVtb3RlLiR7cmVtb3RlbmFtZX0uZHVtYlB1c2giKTsKK2lmICghJGR1bWJfcHVzaCkgeworCSRkdW1iX3B1c2ggPSBydW5fZ2l0KCdjb25maWcgLS1nZXQgLS1ib29sIG1lZGlhd2lraS5kdW1iUHVzaCcpOwogfQogY2hvbXAoJGR1bWJfcHVzaCk7Ci0kZHVtYl9wdXNoID0gKCRkdW1iX3B1c2ggZXEgInRydWUiKTsKKyRkdW1iX3B1c2ggPSAoJGR1bWJfcHVzaCBlcSAndHJ1ZScpOwogCiBteSAkd2lraV9uYW1lID0gJHVybDsKLSR3aWtpX25hbWUgPX4gcy9bXlwvXSo6XC9cLy8vOworJHdpa2lfbmFtZSA9fiBze1teL10qOi8vfXt9OwogIyBJZiBVUkwgaXMgbGlrZSBodHRwOi8vdXNlcjpwYXNzd29yZEBleGFtcGxlLmNvbS8sIHdlIGNsZWFybHkgZG9uJ3QKICMgd2FudCB0aGUgcGFzc3dvcmQgaW4gJHdpa2lfbmFtZS4gV2hpbGUgd2UncmUgdGhlcmUsIGFsc28gcmVtb3ZlIHVzZXIKICMgYW5kICdAJyBzaWduLCB0byBhdm9pZCBhdXRob3IgbGlrZSBNV1VzZXJASFRUUFVzZXJAaG9zdC5jb20KICR3aWtpX25hbWUgPX4gcy9eLipALy87CiAKICMgQ29tbWFuZHMgcGFyc2VyCi1teSAkZW50cnk7Ci1teSBAY21kOwogd2hpbGUgKDxTVERJTj4pIHsKIAljaG9tcDsKLQlAY21kID0gc3BsaXQoLyAvKTsKLQlpZiAoZGVmaW5lZCgkY21kWzBdKSkgewotCQkjIExpbmUgbm90IGJsYW5rCi0JCWlmICgkY21kWzBdIGVxICJjYXBhYmlsaXRpZXMiKSB7Ci0JCQlkaWUoIlRvbyBtYW55IGFyZ3VtZW50cyBmb3IgY2FwYWJpbGl0aWVzIikgdW5sZXNzICghZGVmaW5lZCgkY21kWzFdKSk7Ci0JCQltd19jYXBhYmlsaXRpZXMoKTsKLQkJfSBlbHNpZiAoJGNtZFswXSBlcSAibGlzdCIpIHsKLQkJCWRpZSgiVG9vIG1hbnkgYXJndW1lbnRzIGZvciBsaXN0IikgdW5sZXNzICghZGVmaW5lZCgkY21kWzJdKSk7Ci0JCQltd19saXN0KCRjbWRbMV0pOwotCQl9IGVsc2lmICgkY21kWzBdIGVxICJpbXBvcnQiKSB7Ci0JCQlkaWUoIkludmFsaWQgYXJndW1lbnRzIGZvciBpbXBvcnQiKSB1bmxlc3MgKCRjbWRbMV0gbmUgIiIgJiYgIWRlZmluZWQoJGNtZFsyXSkpOwotCQkJbXdfaW1wb3J0KCRjbWRbMV0pOwotCQl9IGVsc2lmICgkY21kWzBdIGVxICJvcHRpb24iKSB7Ci0JCQlkaWUoIlRvbyBtYW55IGFyZ3VtZW50cyBmb3Igb3B0aW9uIikgdW5sZXNzICgkY21kWzFdIG5lICIiICYmICRjbWRbMl0gbmUgIiIgJiYgIWRlZmluZWQoJGNtZFszXSkpOwotCQkJbXdfb3B0aW9uKCRjbWRbMV0sJGNtZFsyXSk7Ci0JCX0gZWxzaWYgKCRjbWRbMF0gZXEgInB1c2giKSB7Ci0JCQltd19wdXNoKCRjbWRbMV0pOwotCQl9IGVsc2UgewotCQkJcHJpbnQgU1RERVJSICJVbmtub3duIGNvbW1hbmQuIEFib3J0aW5nLi4uXG4iOwotCQkJbGFzdDsKLQkJfQotCX0gZWxzZSB7Ci0JCSMgYmxhbmsgbGluZTogd2Ugc2hvdWxkIHRlcm1pbmF0ZQorCisJaWYgKCFwYXJzZV9jb21tYW5kKCRfKSkgewogCQlsYXN0OwogCX0KIApAQCAtMTU2LDEwNyArMTQ2LDkxIEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEZ1bmN0aW9ucyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotIyMgY3JlZGVudGlhbCBBUEkgbWFuYWdlbWVudCAoZ2VuZXJpYyBmdW5jdGlvbnMpCi0KLXN1YiBjcmVkZW50aWFsX3JlYWQgewotCW15ICVjcmVkZW50aWFsOwotCW15ICRyZWFkZXIgPSBzaGlmdDsKLQlteSAkb3AgPSBzaGlmdDsKLQl3aGlsZSAoPCRyZWFkZXI+KSB7Ci0JCW15ICgka2V5LCAkdmFsdWUpID0gLyhbXj1dKik9KC4qKS87Ci0JCWlmIChub3QgZGVmaW5lZCAka2V5KSB7Ci0JCQlkaWUgIkVSUk9SIHJlY2VpdmluZyByZXNwb25zZSBmcm9tIGdpdCBjcmVkZW50aWFsICRvcDpcbiRfXG4iOwotCQl9Ci0JCSRjcmVkZW50aWFseyRrZXl9ID0gJHZhbHVlOwotCX0KLQlyZXR1cm4gJWNyZWRlbnRpYWw7CisjIyBlcnJvciBoYW5kbGluZworc3ViIGV4aXRfZXJyb3JfdXNhZ2UgeworCWRpZSAiRVJST1I6IGdpdC1yZW1vdGUtbWVkaWF3aWtpIG1vZHVsZSB3YXMgbm90IGNhbGxlZCB3aXRoIGEgY29ycmVjdCBudW1iZXIgb2ZcbiIgLgorCSAgICAicGFyYW1ldGVyc1xuIiAuCisJICAgICJZb3UgbWF5IG9idGFpbiB0aGlzIGVycm9yIGJlY2F1c2UgeW91IGF0dGVtcHRlZCB0byBydW4gdGhlIGdpdC1yZW1vdGUtbWVkaWF3aWtpXG4iIC4KKyAgICAgICAgICAgICJtb2R1bGUgZGlyZWN0bHkuXG4iIC4KKwkgICAgIlRoaXMgbW9kdWxlIGNhbiBiZSB1c2VkIHRoZSBmb2xsb3dpbmcgd2F5OlxuIiAuCisJICAgICJcdGdpdCBjbG9uZSBtZWRpYXdpa2k6Ly88YWRkcmVzcyBvZiBhIG1lZGlhd2lraT5cbiIgLgorCSAgICAiVGhlbiwgdXNlIGdpdCBjb21taXQsIHB1c2ggYW5kIHB1bGwgYXMgd2l0aCBldmVyeSBub3JtYWwgZ2l0IHJlcG9zaXRvcnkuXG4iOwogfQogCi1zdWIgY3JlZGVudGlhbF93cml0ZSB7Ci0JbXkgJGNyZWRlbnRpYWwgPSBzaGlmdDsKLQlteSAkd3JpdGVyID0gc2hpZnQ7Ci0JIyB1cmwgb3ZlcndyaXRlcyBvdGhlciBmaWVsZHMsIHNvIGl0IG11c3QgY29tZSBmaXJzdAotCXByaW50ICR3cml0ZXIgInVybD0kY3JlZGVudGlhbC0+e3VybH1cbiIgaWYgZXhpc3RzICRjcmVkZW50aWFsLT57dXJsfTsKLQl3aGlsZSAobXkgKCRrZXksICR2YWx1ZSkgPSBlYWNoKCUkY3JlZGVudGlhbCkgKSB7Ci0JCWlmIChsZW5ndGggJHZhbHVlICYmICRrZXkgbmUgJ3VybCcpIHsKLQkJCXByaW50ICR3cml0ZXIgIiRrZXk9JHZhbHVlXG4iOwotCQl9CitzdWIgcGFyc2VfY29tbWFuZCB7CisJbXkgKCRsaW5lKSA9IEBfOworCW15IEBjbWQgPSBzcGxpdCgvIC8sICRsaW5lKTsKKwlpZiAoIWRlZmluZWQgJGNtZFswXSkgeworCQlyZXR1cm4gMDsKIAl9Ci19Ci0KLXN1YiBjcmVkZW50aWFsX3J1biB7Ci0JbXkgJG9wID0gc2hpZnQ7Ci0JbXkgJGNyZWRlbnRpYWwgPSBzaGlmdDsKLQlteSAkcGlkID0gb3BlbjIobXkgJHJlYWRlciwgbXkgJHdyaXRlciwgImdpdCBjcmVkZW50aWFsICRvcCIpOwotCWNyZWRlbnRpYWxfd3JpdGUoJGNyZWRlbnRpYWwsICR3cml0ZXIpOwotCXByaW50ICR3cml0ZXIgIlxuIjsKLQljbG9zZSgkd3JpdGVyKTsKLQotCWlmICgkb3AgZXEgImZpbGwiKSB7Ci0JCSUkY3JlZGVudGlhbCA9IGNyZWRlbnRpYWxfcmVhZCgkcmVhZGVyLCAkb3ApOworCWlmICgkY21kWzBdIGVxICdjYXBhYmlsaXRpZXMnKSB7CisJCWRpZSgiVG9vIG1hbnkgYXJndW1lbnRzIGZvciBjYXBhYmlsaXRpZXNcbiIpCisJCSAgICBpZiAoZGVmaW5lZCgkY21kWzFdKSk7CisJCW13X2NhcGFiaWxpdGllcygpOworCX0gZWxzaWYgKCRjbWRbMF0gZXEgJ2xpc3QnKSB7CisJCWRpZSgiVG9vIG1hbnkgYXJndW1lbnRzIGZvciBsaXN0XG4iKSBpZiAoZGVmaW5lZCgkY21kWzJdKSk7CisJCW13X2xpc3QoJGNtZFsxXSk7CisJfSBlbHNpZiAoJGNtZFswXSBlcSAnaW1wb3J0JykgeworCQlkaWUoIkludmFsaWQgYXJndW1lbnQgZm9yIGltcG9ydFxuIikKKwkJICAgIGlmICgkY21kWzFdIGVxIEVNUFRZKTsKKwkJZGllKCJUb28gbWFueSBhcmd1bWVudHMgZm9yIGltcG9ydFxuIikKKwkJICAgIGlmIChkZWZpbmVkKCRjbWRbMl0pKTsKKwkJbXdfaW1wb3J0KCRjbWRbMV0pOworCX0gZWxzaWYgKCRjbWRbMF0gZXEgJ29wdGlvbicpIHsKKwkJZGllKCJJbnZhbGlkIGFyZ3VtZW50cyBmb3Igb3B0aW9uXG4iKQorCQkgICAgaWYgKCRjbWRbMV0gZXEgRU1QVFkgfHwgJGNtZFsyXSBlcSBFTVBUWSk7CisJCWRpZSgiVG9vIG1hbnkgYXJndW1lbnRzIGZvciBvcHRpb25cbiIpCisJCSAgICBpZiAoZGVmaW5lZCgkY21kWzNdKSk7CisJCW13X29wdGlvbigkY21kWzFdLCRjbWRbMl0pOworCX0gZWxzaWYgKCRjbWRbMF0gZXEgJ3B1c2gnKSB7CisJCW13X3B1c2goJGNtZFsxXSk7CiAJfSBlbHNlIHsKLQkJaWYgKDwkcmVhZGVyPikgewotCQkJZGllICJFUlJPUiB3aGlsZSBydW5uaW5nIGdpdCBjcmVkZW50aWFsICRvcDpcbiRfIjsKLQkJfQorCQlwcmludCB7KlNUREVSUn0gIlVua25vd24gY29tbWFuZC4gQWJvcnRpbmcuLi5cbiI7CisJCXJldHVybiAwOwogCX0KLQljbG9zZSgkcmVhZGVyKTsKLQl3YWl0cGlkKCRwaWQsIDApOwotCW15ICRjaGlsZF9leGl0X3N0YXR1cyA9ICQ/ID4+IDg7Ci0JaWYgKCRjaGlsZF9leGl0X3N0YXR1cyAhPSAwKSB7Ci0JCWRpZSAiJ2dpdCBjcmVkZW50aWFsICRvcCcgZmFpbGVkIHdpdGggY29kZSAkY2hpbGRfZXhpdF9zdGF0dXMuIjsKLQl9CisJcmV0dXJuIDE7CiB9CiAKICMgTWVkaWFXaWtpIEFQSSBpbnN0YW5jZSwgY3JlYXRlZCBsYXppbHkuCiBteSAkbWVkaWF3aWtpOwogCi1zdWIgbXdfY29ubmVjdF9tYXliZSB7Ci0JaWYgKCRtZWRpYXdpa2kpIHsKLQkJcmV0dXJuOworc3ViIGZhdGFsX213X2Vycm9yIHsKKwlteSAkYWN0aW9uID0gc2hpZnQ7CisJcHJpbnQgU1RERVJSICJmYXRhbDogY291bGQgbm90ICRhY3Rpb24uXG4iOworCXByaW50IFNUREVSUiAiZmF0YWw6ICckdXJsJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSBtZWRpYXdpa2lcbiI7CisJaWYgKCR1cmwgPX4gL15odHRwcy8pIHsKKwkJcHJpbnQgU1RERVJSICJmYXRhbDogbWFrZSBzdXJlICckdXJsL2FwaS5waHAnIGlzIGEgdmFsaWQgcGFnZVxuIjsKKwkJcHJpbnQgU1RERVJSICJmYXRhbDogYW5kIHRoZSBTU0wgY2VydGlmaWNhdGUgaXMgY29ycmVjdC5cbiI7CisJfSBlbHNlIHsKKwkJcHJpbnQgU1RERVJSICJmYXRhbDogbWFrZSBzdXJlICckdXJsL2FwaS5waHAnIGlzIGEgdmFsaWQgcGFnZS5cbiI7CiAJfQotCSRtZWRpYXdpa2kgPSBNZWRpYVdpa2k6OkFQSS0+bmV3OwotCSRtZWRpYXdpa2ktPntjb25maWd9LT57YXBpX3VybH0gPSAiJHVybC9hcGkucGhwIjsKLQlpZiAoJHdpa2lfbG9naW4pIHsKLQkJbXkgJWNyZWRlbnRpYWwgPSAodXJsID0+ICR1cmwpOwotCQkkY3JlZGVudGlhbHt1c2VybmFtZX0gPSAkd2lraV9sb2dpbjsKLQkJJGNyZWRlbnRpYWx7cGFzc3dvcmR9ID0gJHdpa2lfcGFzc3dkOwotCQljcmVkZW50aWFsX3J1bigiZmlsbCIsIFwlY3JlZGVudGlhbCk7Ci0JCW15ICRyZXF1ZXN0ID0ge2xnbmFtZSA9PiAkY3JlZGVudGlhbHt1c2VybmFtZX0sCi0JCQkgICAgICAgbGdwYXNzd29yZCA9PiAkY3JlZGVudGlhbHtwYXNzd29yZH0sCi0JCQkgICAgICAgbGdkb21haW4gPT4gJHdpa2lfZG9tYWlufTsKLQkJaWYgKCRtZWRpYXdpa2ktPmxvZ2luKCRyZXF1ZXN0KSkgewotCQkJY3JlZGVudGlhbF9ydW4oImFwcHJvdmUiLCBcJWNyZWRlbnRpYWwpOwotCQkJcHJpbnQgU1RERVJSICJMb2dnZWQgaW4gbWVkaWF3aWtpIHVzZXIgXCIkY3JlZGVudGlhbHt1c2VybmFtZX1cIi5cbiI7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludCBTVERFUlIgIkZhaWxlZCB0byBsb2cgaW4gbWVkaWF3aWtpIHVzZXIgXCIkY3JlZGVudGlhbHt1c2VybmFtZX1cIiBvbiAkdXJsXG4iOwotCQkJcHJpbnQgU1RERVJSICIgIChlcnJvciAiIC4KLQkJCQkkbWVkaWF3aWtpLT57ZXJyb3J9LT57Y29kZX0gLiAnOiAnIC4KLQkJCQkkbWVkaWF3aWtpLT57ZXJyb3J9LT57ZGV0YWlsc30gLiAiKVxuIjsKLQkJCWNyZWRlbnRpYWxfcnVuKCJyZWplY3QiLCBcJWNyZWRlbnRpYWwpOwotCQkJZXhpdCAxOwotCQl9Ci0JfQorCXByaW50IFNUREVSUiAiZmF0YWw6IChlcnJvciAiIC4KKwkgICAgJG1lZGlhd2lraS0+e2Vycm9yfS0+e2NvZGV9IC4gJzogJyAuCisJICAgICRtZWRpYXdpa2ktPntlcnJvcn0tPntkZXRhaWxzfSAuICIpXG4iOworCWV4aXQgMTsKIH0KIAogIyMgRnVuY3Rpb25zIGZvciBsaXN0aW5nIHBhZ2VzIG9uIHRoZSByZW1vdGUgd2lraQogc3ViIGdldF9td190cmFja2VkX3BhZ2VzIHsKIAlteSAkcGFnZXMgPSBzaGlmdDsKIAlnZXRfbXdfcGFnZV9saXN0KFxAdHJhY2tlZF9wYWdlcywgJHBhZ2VzKTsKKwlyZXR1cm47CiB9CiAKIHN1YiBnZXRfbXdfcGFnZV9saXN0IHsKIAlteSAkcGFnZV9saXN0ID0gc2hpZnQ7CiAJbXkgJHBhZ2VzID0gc2hpZnQ7Ci0JbXkgQHNvbWVfcGFnZXMgPSBAJHBhZ2VfbGlzdDsKKwlteSBAc29tZV9wYWdlcyA9IEB7JHBhZ2VfbGlzdH07CiAJd2hpbGUgKEBzb21lX3BhZ2VzKSB7Ci0JCW15ICRsYXN0ID0gNTA7Ci0JCWlmICgkI3NvbWVfcGFnZXMgPCAkbGFzdCkgewotCQkJJGxhc3QgPSAkI3NvbWVfcGFnZXM7CisJCW15ICRsYXN0X3BhZ2UgPSBTTElDRV9TSVpFOworCQlpZiAoJCNzb21lX3BhZ2VzIDwgJGxhc3RfcGFnZSkgeworCQkJJGxhc3RfcGFnZSA9ICQjc29tZV9wYWdlczsKIAkJfQotCQlteSBAc2xpY2UgPSBAc29tZV9wYWdlc1swLi4kbGFzdF07CisJCW15IEBzbGljZSA9IEBzb21lX3BhZ2VzWzAuLiRsYXN0X3BhZ2VdOwogCQlnZXRfbXdfZmlyc3RfcGFnZXMoXEBzbGljZSwgJHBhZ2VzKTsKLQkJQHNvbWVfcGFnZXMgPSBAc29tZV9wYWdlc1s1MS4uJCNzb21lX3BhZ2VzXTsKKwkJQHNvbWVfcGFnZXMgPSBAc29tZV9wYWdlc1soU0xJQ0VfU0laRSArIDEpLi4kI3NvbWVfcGFnZXNdOwogCX0KKwlyZXR1cm47CiB9CiAKIHN1YiBnZXRfbXdfdHJhY2tlZF9jYXRlZ29yaWVzIHsKQEAgLTI2Niw3ICsyNDAsNyBAQAogCQkJIyBNZWRpYXdpa2kgcmVxdWlyZXMgdGhlIENhdGVnb3J5CiAJCQkjIHByZWZpeCwgYnV0IGxldCdzIG5vdCBmb3JjZSB0aGUgdXNlcgogCQkJIyB0byBzcGVjaWZ5IGl0LgotCQkJJGNhdGVnb3J5ID0gIkNhdGVnb3J5OiIgLiAkY2F0ZWdvcnk7CisJCQkkY2F0ZWdvcnkgPSAiQ2F0ZWdvcnk6JHtjYXRlZ29yeX0iOwogCQl9CiAJCW15ICRtd19wYWdlcyA9ICRtZWRpYXdpa2ktPmxpc3QoIHsKIAkJCWFjdGlvbiA9PiAncXVlcnknLApAQCAtMjc0LDExICsyNDgsMTIgQEAKIAkJCWNtdGl0bGUgPT4gJGNhdGVnb3J5LAogCQkJY21saW1pdCA9PiAnbWF4JyB9ICkKIAkJCXx8IGRpZSAkbWVkaWF3aWtpLT57ZXJyb3J9LT57Y29kZX0gLiAnOiAnCi0JCQkJLiAkbWVkaWF3aWtpLT57ZXJyb3J9LT57ZGV0YWlsc307CisJCQkJLiAkbWVkaWF3aWtpLT57ZXJyb3J9LT57ZGV0YWlsc30gLiAiXG4iOwogCQlmb3JlYWNoIG15ICRwYWdlIChAeyRtd19wYWdlc30pIHsKIAkJCSRwYWdlcy0+eyRwYWdlLT57dGl0bGV9fSA9ICRwYWdlOwogCQl9CiAJfQorCXJldHVybjsKIH0KIAogc3ViIGdldF9td19hbGxfcGFnZXMgewpAQCAtMjkwLDE0ICsyNjUsMTIgQEAKIAkJYXBsaW1pdCA9PiAnbWF4JwogCX0pOwogCWlmICghZGVmaW5lZCgkbXdfcGFnZXMpKSB7Ci0JCXByaW50IFNUREVSUiAiZmF0YWw6IGNvdWxkIG5vdCBnZXQgdGhlIGxpc3Qgb2Ygd2lraSBwYWdlcy5cbiI7Ci0JCXByaW50IFNUREVSUiAiZmF0YWw6ICckdXJsJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSBtZWRpYXdpa2lcbiI7Ci0JCXByaW50IFNUREVSUiAiZmF0YWw6IG1ha2Ugc3VyZSAnJHVybC9hcGkucGhwJyBpcyBhIHZhbGlkIHBhZ2UuXG4iOwotCQlleGl0IDE7CisJCWZhdGFsX213X2Vycm9yKCJnZXQgdGhlIGxpc3Qgb2Ygd2lraSBwYWdlcyIpOwogCX0KIAlmb3JlYWNoIG15ICRwYWdlIChAeyRtd19wYWdlc30pIHsKIAkJJHBhZ2VzLT57JHBhZ2UtPnt0aXRsZX19ID0gJHBhZ2U7CiAJfQorCXJldHVybjsKIH0KIAogIyBxdWVyaWVzIHRoZSB3aWtpIGZvciBhIHNldCBvZiBwYWdlcy4gTWVhbnQgdG8gYmUgdXNlZCB3aXRoaW4gYSBsb29wCkBAIC0zMTYsMjUgKzI4OSwyMyBAQAogCQl0aXRsZXMgPT4gJHRpdGxlcywKIAl9KTsKIAlpZiAoIWRlZmluZWQoJG13X3BhZ2VzKSkgewotCQlwcmludCBTVERFUlIgImZhdGFsOiBjb3VsZCBub3QgcXVlcnkgdGhlIGxpc3Qgb2Ygd2lraSBwYWdlcy5cbiI7Ci0JCXByaW50IFNUREVSUiAiZmF0YWw6ICckdXJsJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSBtZWRpYXdpa2lcbiI7Ci0JCXByaW50IFNUREVSUiAiZmF0YWw6IG1ha2Ugc3VyZSAnJHVybC9hcGkucGhwJyBpcyBhIHZhbGlkIHBhZ2UuXG4iOwotCQlleGl0IDE7CisJCWZhdGFsX213X2Vycm9yKCJxdWVyeSB0aGUgbGlzdCBvZiB3aWtpIHBhZ2VzIik7CiAJfQogCXdoaWxlIChteSAoJGlkLCAkcGFnZSkgPSBlYWNoKCV7JG13X3BhZ2VzLT57cXVlcnl9LT57cGFnZXN9fSkpIHsKIAkJaWYgKCRpZCA8IDApIHsKLQkJCXByaW50IFNUREVSUiAiV2FybmluZzogcGFnZSAkcGFnZS0+e3RpdGxlfSBub3QgZm91bmQgb24gd2lraVxuIjsKKwkJCXByaW50IHsqU1RERVJSfSAiV2FybmluZzogcGFnZSAkcGFnZS0+e3RpdGxlfSBub3QgZm91bmQgb24gd2lraVxuIjsKIAkJfSBlbHNlIHsKIAkJCSRwYWdlcy0+eyRwYWdlLT57dGl0bGV9fSA9ICRwYWdlOwogCQl9CiAJfQorCXJldHVybjsKIH0KIAogIyBHZXQgdGhlIGxpc3Qgb2YgcGFnZXMgdG8gYmUgZmV0Y2hlZCBhY2NvcmRpbmcgdG8gY29uZmlndXJhdGlvbi4KIHN1YiBnZXRfbXdfcGFnZXMgewotCW13X2Nvbm5lY3RfbWF5YmUoKTsKKwkkbWVkaWF3aWtpID0gY29ubmVjdF9tYXliZSgkbWVkaWF3aWtpLCAkcmVtb3RlbmFtZSwgJHVybCk7CiAKLQlwcmludCBTVERFUlIgIkxpc3RpbmcgcGFnZXMgb24gcmVtb3RlIHdpa2kuLi5cbiI7CisJcHJpbnQgeypTVERFUlJ9ICJMaXN0aW5nIHBhZ2VzIG9uIHJlbW90ZSB3aWtpLi4uXG4iOwogCiAJbXkgJXBhZ2VzOyAjIGhhc2ggb24gcGFnZSB0aXRsZXMgdG8gYXZvaWQgZHVwbGljYXRlcwogCW15ICR1c2VyX2RlZmluZWQ7CkBAIC0zNTIsMTQgKzMyMywxNCBAQAogCQlnZXRfbXdfYWxsX3BhZ2VzKFwlcGFnZXMpOwogCX0KIAlpZiAoJGltcG9ydF9tZWRpYSkgewotCQlwcmludCBTVERFUlIgIkdldHRpbmcgbWVkaWEgZmlsZXMgZm9yIHNlbGVjdGVkIHBhZ2VzLi4uXG4iOworCQlwcmludCB7KlNUREVSUn0gIkdldHRpbmcgbWVkaWEgZmlsZXMgZm9yIHNlbGVjdGVkIHBhZ2VzLi4uXG4iOwogCQlpZiAoJHVzZXJfZGVmaW5lZCkgewogCQkJZ2V0X2xpbmtlZF9tZWRpYWZpbGVzKFwlcGFnZXMpOwogCQl9IGVsc2UgewogCQkJZ2V0X2FsbF9tZWRpYWZpbGVzKFwlcGFnZXMpOwogCQl9CiAJfQotCXByaW50IFNUREVSUiAoc2NhbGFyIGtleXMgJXBhZ2VzKSAuICIgcGFnZXMgZm91bmQuXG4iOworCXByaW50IHsqU1RERVJSfSAoc2NhbGFyIGtleXMgJXBhZ2VzKSAuICIgcGFnZXMgZm91bmQuXG4iOwogCXJldHVybiAlcGFnZXM7CiB9CiAKQEAgLTM2Nyw5ICszMzgsMTMgQEAKICMgICAgICAgICRvdXQgPSBydW5fZ2l0KCJjb21tYW5kIGFyZ3MiLCAicmF3Iik7ICMgZG9uJ3QgaW50ZXJwcmV0IG91dHB1dCBhcyBVVEYtOC4KIHN1YiBydW5fZ2l0IHsKIAlteSAkYXJncyA9IHNoaWZ0OwotCW15ICRlbmNvZGluZyA9IChzaGlmdCB8fCAiZW5jb2RpbmcoVVRGLTgpIik7Ci0Jb3BlbihteSAkZ2l0LCAiLXw6JGVuY29kaW5nIiwgImdpdCAiIC4gJGFyZ3MpOwotCW15ICRyZXMgPSBkbyB7IGxvY2FsICQvOyA8JGdpdD4gfTsKKwlteSAkZW5jb2RpbmcgPSAoc2hpZnQgfHwgJ2VuY29kaW5nKFVURi04KScpOworCW9wZW4obXkgJGdpdCwgIi18OiR7ZW5jb2Rpbmd9IiwgImdpdCAke2FyZ3N9IikKKwkgICAgb3IgZGllICJVbmFibGUgdG8gZm9yazogJCFcbiI7CisJbXkgJHJlcyA9IGRvIHsKKwkJbG9jYWwgJC8gPSB1bmRlZjsKKwkJPCRnaXQ+CisJfTsKIAljbG9zZSgkZ2l0KTsKIAogCXJldHVybiAkcmVzOwpAQCAtMzg0LDI3ICszNTksMjYgQEAKIAlteSAkbXdfcGFnZXMgPSAkbWVkaWF3aWtpLT5saXN0KHsKIAkJYWN0aW9uID0+ICdxdWVyeScsCiAJCWxpc3QgPT4gJ2FsbHBhZ2VzJywKLQkJYXBuYW1lc3BhY2UgPT4gZ2V0X213X25hbWVzcGFjZV9pZCgiRmlsZSIpLAorCQlhcG5hbWVzcGFjZSA9PiBnZXRfbXdfbmFtZXNwYWNlX2lkKCdGaWxlJyksCiAJCWFwbGltaXQgPT4gJ21heCcKIAl9KTsKIAlpZiAoIWRlZmluZWQoJG13X3BhZ2VzKSkgewotCQlwcmludCBTVERFUlIgImZhdGFsOiBjb3VsZCBub3QgZ2V0IHRoZSBsaXN0IG9mIHBhZ2VzIGZvciBtZWRpYSBmaWxlcy5cbiI7Ci0JCXByaW50IFNUREVSUiAiZmF0YWw6ICckdXJsJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSBtZWRpYXdpa2lcbiI7Ci0JCXByaW50IFNUREVSUiAiZmF0YWw6IG1ha2Ugc3VyZSAnJHVybC9hcGkucGhwJyBpcyBhIHZhbGlkIHBhZ2UuXG4iOworCQlwcmludCB7KlNUREVSUn0gImZhdGFsOiBjb3VsZCBub3QgZ2V0IHRoZSBsaXN0IG9mIHBhZ2VzIGZvciBtZWRpYSBmaWxlcy5cbiI7CisJCXByaW50IHsqU1RERVJSfSAiZmF0YWw6ICckdXJsJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSBtZWRpYXdpa2lcbiI7CisJCXByaW50IHsqU1RERVJSfSAiZmF0YWw6IG1ha2Ugc3VyZSAnJHVybC9hcGkucGhwJyBpcyBhIHZhbGlkIHBhZ2UuXG4iOwogCQlleGl0IDE7CiAJfQogCWZvcmVhY2ggbXkgJHBhZ2UgKEB7JG13X3BhZ2VzfSkgewogCQkkcGFnZXMtPnskcGFnZS0+e3RpdGxlfX0gPSAkcGFnZTsKIAl9CisJcmV0dXJuOwogfQogCiBzdWIgZ2V0X2xpbmtlZF9tZWRpYWZpbGVzIHsKIAlteSAkcGFnZXMgPSBzaGlmdDsKLQlteSBAdGl0bGVzID0gbWFwICRfLT57dGl0bGV9LCB2YWx1ZXMoJXskcGFnZXN9KTsKKwlteSBAdGl0bGVzID0gbWFwIHsgJF8tPnt0aXRsZX0gfSB2YWx1ZXMoJXskcGFnZXN9KTsKIAotCSMgVGhlIHF1ZXJ5IGlzIHNwbGl0IGluIHNtYWxsIGJhdGNoZXMgYmVjYXVzZSBvZiB0aGUgTVcgQVBJIGxpbWl0IG9mCi0JIyB0aGUgbnVtYmVyIG9mIGxpbmtzIHRvIGJlIHJldHVybmVkICg1MDAgbGlua3MgbWF4KS4KLQlteSAkYmF0Y2ggPSAxMDsKKwlteSAkYmF0Y2ggPSBCQVRDSF9TSVpFOwogCXdoaWxlIChAdGl0bGVzKSB7CiAJCWlmICgkI3RpdGxlcyA8ICRiYXRjaCkgewogCQkJJGJhdGNoID0gJCN0aXRsZXM7CkBAIC00MjAsNyArMzk0LDcgQEAKIAkJCWFjdGlvbiA9PiAncXVlcnknLAogCQkJcHJvcCA9PiAnbGlua3N8aW1hZ2VzJywKIAkJCXRpdGxlcyA9PiAkbXdfdGl0bGVzLAotCQkJcGxuYW1lc3BhY2UgPT4gZ2V0X213X25hbWVzcGFjZV9pZCgiRmlsZSIpLAorCQkJcGxuYW1lc3BhY2UgPT4gZ2V0X213X25hbWVzcGFjZV9pZCgnRmlsZScpLAogCQkJcGxsaW1pdCA9PiAnbWF4JwogCQl9OwogCQlteSAkcmVzdWx0ID0gJG1lZGlhd2lraS0+YXBpKCRxdWVyeSk7CkBAIC00MjgsMTEgKzQwMiwxMyBAQAogCQl3aGlsZSAobXkgKCRpZCwgJHBhZ2UpID0gZWFjaCgleyRyZXN1bHQtPntxdWVyeX0tPntwYWdlc319KSkgewogCQkJbXkgQG1lZGlhX3RpdGxlczsKIAkJCWlmIChkZWZpbmVkKCRwYWdlLT57bGlua3N9KSkgewotCQkJCW15IEBsaW5rX3RpdGxlcyA9IG1hcCAkXy0+e3RpdGxlfSwgQHskcGFnZS0+e2xpbmtzfX07CisJCQkJbXkgQGxpbmtfdGl0bGVzCisJCQkJICAgID0gbWFwIHsgJF8tPnt0aXRsZX0gfSBAeyRwYWdlLT57bGlua3N9fTsKIAkJCQlwdXNoKEBtZWRpYV90aXRsZXMsIEBsaW5rX3RpdGxlcyk7CiAJCQl9CiAJCQlpZiAoZGVmaW5lZCgkcGFnZS0+e2ltYWdlc30pKSB7Ci0JCQkJbXkgQGltYWdlX3RpdGxlcyA9IG1hcCAkXy0+e3RpdGxlfSwgQHskcGFnZS0+e2ltYWdlc319OworCQkJCW15IEBpbWFnZV90aXRsZXMKKwkJCQkgICAgPSBtYXAgeyAkXy0+e3RpdGxlfSB9IEB7JHBhZ2UtPntpbWFnZXN9fTsKIAkJCQlwdXNoKEBtZWRpYV90aXRsZXMsIEBpbWFnZV90aXRsZXMpOwogCQkJfQogCQkJaWYgKEBtZWRpYV90aXRsZXMpIHsKQEAgLTQ0Miw2ICs0MTgsNyBAQAogCiAJCUB0aXRsZXMgPSBAdGl0bGVzWygkYmF0Y2grMSkuLiQjdGl0bGVzXTsKIAl9CisJcmV0dXJuOwogfQogCiBzdWIgZ2V0X213X21lZGlhZmlsZV9mb3JfcGFnZV9yZXZpc2lvbiB7CkBAIC00NTUsNyArNDMyLDcgQEAKIAlteSAkcXVlcnkgPSB7CiAJCWFjdGlvbiA9PiAncXVlcnknLAogCQlwcm9wID0+ICdpbWFnZWluZm8nLAotCQl0aXRsZXMgPT4gIkZpbGU6IiAuICRmaWxlbmFtZSwKKwkJdGl0bGVzID0+ICJGaWxlOiR7ZmlsZW5hbWV9IiwKIAkJaWlzdGFydCA9PiAkdGltZXN0YW1wLAogCQlpaWVuZCA9PiAkdGltZXN0YW1wLAogCQlpaXByb3AgPT4gJ3RpbWVzdGFtcHxhcmNoaXZlbmFtZXx1cmwnLApAQCAtNDczLDUzICs0NTAsNTAgQEAKIAkJJG1lZGlhZmlsZXt0aW1lc3RhbXB9ID0gJGZpbGVpbmZvLT57dGltZXN0YW1wfTsKIAkJIyBNZWRpYXdpa2k6OkFQSSdzIGRvd25sb2FkIGZ1bmN0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBodHRwcyBVUkxzCiAJCSMgYW5kIGNhbid0IGRvd25sb2FkIG9sZCB2ZXJzaW9ucyBvZiBmaWxlcy4KLQkJcHJpbnQgU1RERVJSICJcdERvd25sb2FkaW5nIGZpbGUgJG1lZGlhZmlsZXt0aXRsZX0sIHZlcnNpb24gJG1lZGlhZmlsZXt0aW1lc3RhbXB9XG4iOworCQlwcmludCB7KlNUREVSUn0gIlx0RG93bmxvYWRpbmcgZmlsZSAkbWVkaWFmaWxle3RpdGxlfSwgdmVyc2lvbiAkbWVkaWFmaWxle3RpbWVzdGFtcH1cbiI7CiAJCSRtZWRpYWZpbGV7Y29udGVudH0gPSBkb3dubG9hZF9td19tZWRpYWZpbGUoJGZpbGVpbmZvLT57dXJsfSk7CiAJfQogCXJldHVybiAlbWVkaWFmaWxlOwogfQogCiBzdWIgZG93bmxvYWRfbXdfbWVkaWFmaWxlIHsKLQlteSAkdXJsID0gc2hpZnQ7CisJbXkgJGRvd25sb2FkX3VybCA9IHNoaWZ0OwogCi0JbXkgJHJlc3BvbnNlID0gJG1lZGlhd2lraS0+e3VhfS0+Z2V0KCR1cmwpOwotCWlmICgkcmVzcG9uc2UtPmNvZGUgPT0gMjAwKSB7CisJbXkgJHJlc3BvbnNlID0gJG1lZGlhd2lraS0+e3VhfS0+Z2V0KCRkb3dubG9hZF91cmwpOworCWlmICgkcmVzcG9uc2UtPmNvZGUgPT0gSFRUUF9DT0RFX09LKSB7CiAJCXJldHVybiAkcmVzcG9uc2UtPmRlY29kZWRfY29udGVudDsKIAl9IGVsc2UgewotCQlwcmludCBTVERFUlIgIkVycm9yIGRvd25sb2FkaW5nIG1lZGlhZmlsZSBmcm9tIDpcbiI7Ci0JCXByaW50IFNUREVSUiAiVVJMOiAkdXJsXG4iOwotCQlwcmludCBTVERFUlIgIlNlcnZlciByZXNwb25zZTogIiAuICRyZXNwb25zZS0+Y29kZSAuICIgIiAuICRyZXNwb25zZS0+bWVzc2FnZSAuICJcbiI7CisJCXByaW50IHsqU1RERVJSfSAiRXJyb3IgZG93bmxvYWRpbmcgbWVkaWFmaWxlIGZyb20gOlxuIjsKKwkJcHJpbnQgeypTVERFUlJ9ICJVUkw6ICR7ZG93bmxvYWRfdXJsfVxuIjsKKwkJcHJpbnQgeypTVERFUlJ9ICdTZXJ2ZXIgcmVzcG9uc2U6ICcgLiAkcmVzcG9uc2UtPmNvZGUgLiBxeyB9IC4gJHJlc3BvbnNlLT5tZXNzYWdlIC4gIlxuIjsKIAkJZXhpdCAxOwogCX0KIH0KIAogc3ViIGdldF9sYXN0X2xvY2FsX3JldmlzaW9uIHsKIAkjIEdldCBub3RlIHJlZ2FyZGluZyBsYXN0IG1lZGlhd2lraSByZXZpc2lvbgotCW15ICRub3RlID0gcnVuX2dpdCgibm90ZXMgLS1yZWY9JHJlbW90ZW5hbWUvbWVkaWF3aWtpIHNob3cgcmVmcy9tZWRpYXdpa2kvJHJlbW90ZW5hbWUvbWFzdGVyIDI+L2Rldi9udWxsIik7CisJbXkgJG5vdGUgPSBydW5fZ2l0KCJub3RlcyAtLXJlZj0ke3JlbW90ZW5hbWV9L21lZGlhd2lraSBzaG93IHJlZnMvbWVkaWF3aWtpLyR7cmVtb3RlbmFtZX0vbWFzdGVyIDI+L2Rldi9udWxsIik7CiAJbXkgQG5vdGVfaW5mbyA9IHNwbGl0KC8gLywgJG5vdGUpOwogCiAJbXkgJGxhc3RyZXZpc2lvbl9udW1iZXI7Ci0JaWYgKCEoZGVmaW5lZCgkbm90ZV9pbmZvWzBdKSAmJiAkbm90ZV9pbmZvWzBdIGVxICJtZWRpYXdpa2lfcmV2aXNpb246IikpIHsKLQkJcHJpbnQgU1RERVJSICJObyBwcmV2aW91cyBtZWRpYXdpa2kgcmV2aXNpb24gZm91bmQiOworCWlmICghKGRlZmluZWQoJG5vdGVfaW5mb1swXSkgJiYgJG5vdGVfaW5mb1swXSBlcSAnbWVkaWF3aWtpX3JldmlzaW9uOicpKSB7CisJCXByaW50IHsqU1RERVJSfSAnTm8gcHJldmlvdXMgbWVkaWF3aWtpIHJldmlzaW9uIGZvdW5kJzsKIAkJJGxhc3RyZXZpc2lvbl9udW1iZXIgPSAwOwogCX0gZWxzZSB7CiAJCSMgTm90ZXMgYXJlIGZvcm1hdHRlZCA6IG1lZGlhd2lraV9yZXZpc2lvbjogI251bWJlcgogCQkkbGFzdHJldmlzaW9uX251bWJlciA9ICRub3RlX2luZm9bMV07CiAJCWNob21wKCRsYXN0cmV2aXNpb25fbnVtYmVyKTsKLQkJcHJpbnQgU1RERVJSICJMYXN0IGxvY2FsIG1lZGlhd2lraSByZXZpc2lvbiBmb3VuZCBpcyAkbGFzdHJldmlzaW9uX251bWJlciI7CisJCXByaW50IHsqU1RERVJSfSAiTGFzdCBsb2NhbCBtZWRpYXdpa2kgcmV2aXNpb24gZm91bmQgaXMgJHtsYXN0cmV2aXNpb25fbnVtYmVyfSI7CiAJfQogCXJldHVybiAkbGFzdHJldmlzaW9uX251bWJlcjsKIH0KIAotIyBSZW1lbWJlciB0aGUgdGltZXN0YW1wIGNvcnJlc3BvbmRpbmcgdG8gYSByZXZpc2lvbiBpZC4KLW15ICViYXNldGltZXN0YW1wczsKLQogIyBHZXQgdGhlIGxhc3QgcmVtb3RlIHJldmlzaW9uIHdpdGhvdXQgdGFraW5nIGluIGFjY291bnQgd2hpY2ggcGFnZXMgYXJlCiAjIHRyYWNrZWQgb3Igbm90LiBUaGlzIGZ1bmN0aW9uIG1ha2VzIGEgc2luZ2xlIHJlcXVlc3QgdG8gdGhlIHdpa2kgdGh1cwogIyBhdm9pZCBhIGxvb3Agb250byBhbGwgdHJhY2tlZCBwYWdlcy4gVGhpcyBpcyB1c2VmdWwgZm9yIHRoZSBmZXRjaC1ieS1yZXYKICMgb3B0aW9uLgogc3ViIGdldF9sYXN0X2dsb2JhbF9yZW1vdGVfcmV2IHsKLQltd19jb25uZWN0X21heWJlKCk7CisJJG1lZGlhd2lraSA9IGNvbm5lY3RfbWF5YmUoJG1lZGlhd2lraSwgJHJlbW90ZW5hbWUsICR1cmwpOwogCiAJbXkgJHF1ZXJ5ID0gewogCQlhY3Rpb24gPT4gJ3F1ZXJ5JywKQEAgLTUzNSwxNCArNTA5LDE0IEBACiAjIEdldCB0aGUgbGFzdCByZW1vdGUgcmV2aXNpb24gY29uY2VybmluZyB0aGUgdHJhY2tlZCBwYWdlcyBhbmQgdGhlIHRyYWNrZWQKICMgY2F0ZWdvcmllcy4KIHN1YiBnZXRfbGFzdF9yZW1vdGVfcmV2aXNpb24gewotCW13X2Nvbm5lY3RfbWF5YmUoKTsKKwkkbWVkaWF3aWtpID0gY29ubmVjdF9tYXliZSgkbWVkaWF3aWtpLCAkcmVtb3RlbmFtZSwgJHVybCk7CiAKIAlteSAlcGFnZXNfaGFzaCA9IGdldF9td19wYWdlcygpOwogCW15IEBwYWdlcyA9IHZhbHVlcyglcGFnZXNfaGFzaCk7CiAKIAlteSAkbWF4X3Jldl9udW0gPSAwOwogCi0JcHJpbnQgU1RERVJSICJHZXR0aW5nIGxhc3QgcmV2aXNpb24gaWQgb24gdHJhY2tlZCBwYWdlcy4uLlxuIjsKKwlwcmludCB7KlNUREVSUn0gIkdldHRpbmcgbGFzdCByZXZpc2lvbiBpZCBvbiB0cmFja2VkIHBhZ2VzLi4uXG4iOwogCiAJZm9yZWFjaCBteSAkcGFnZSAoQHBhZ2VzKSB7CiAJCW15ICRpZCA9ICRwYWdlLT57cGFnZWlkfTsKQEAgLTU2Myw3ICs1MzcsNyBAQAogCQkkbWF4X3Jldl9udW0gPSAoJGxhc3RyZXYtPntyZXZpZH0gPiAkbWF4X3Jldl9udW0gPyAkbGFzdHJldi0+e3JldmlkfSA6ICRtYXhfcmV2X251bSk7CiAJfQogCi0JcHJpbnQgU1RERVJSICJMYXN0IHJlbW90ZSByZXZpc2lvbiBmb3VuZCBpcyAkbWF4X3Jldl9udW0uXG4iOworCXByaW50IHsqU1RERVJSfSAiTGFzdCByZW1vdGUgcmV2aXNpb24gZm91bmQgaXMgJG1heF9yZXZfbnVtLlxuIjsKIAlyZXR1cm4gJG1heF9yZXZfbnVtOwogfQogCkBAIC01NzQsNyArNTQ4LDcgQEAKIAkjIE1lZGlhd2lraSBkb2VzIG5vdCBhbGxvdyBibGFuayBzcGFjZSBhdCB0aGUgZW5kIG9mIGEgcGFnZSBhbmQgZW5kcyB3aXRoIGEgc2luZ2xlIFxuLgogCSMgVGhpcyBmdW5jdGlvbiByaWdodCB0cmltcyBhIHN0cmluZyBhbmQgYWRkcyBhIFxuIGF0IHRoZSBlbmQgdG8gZm9sbG93IHRoaXMgcnVsZQogCSRzdHJpbmcgPX4gcy9ccyskLy87Ci0JaWYgKCRzdHJpbmcgZXEgIiIgJiYgJHBhZ2VfY3JlYXRlZCkgeworCWlmICgkc3RyaW5nIGVxIEVNUFRZICYmICRwYWdlX2NyZWF0ZWQpIHsKIAkJIyBDcmVhdGluZyBlbXB0eSBwYWdlcyBpcyBmb3JiaWRkZW4uCiAJCSRzdHJpbmcgPSBFTVBUWV9DT05URU5UOwogCX0KQEAgLTU4NSwzOCArNTU5LDE2IEBACiBzdWIgbWVkaWF3aWtpX3NtdWRnZSB7CiAJbXkgJHN0cmluZyA9IHNoaWZ0OwogCWlmICgkc3RyaW5nIGVxIEVNUFRZX0NPTlRFTlQpIHsKLQkJJHN0cmluZyA9ICIiOworCQkkc3RyaW5nID0gRU1QVFk7CiAJfQogCSMgVGhpcyBcbiBpcyBpbXBvcnRhbnQuIFRoaXMgaXMgZHVlIHRvIG1lZGlhd2lraSdzIHdheSB0byBoYW5kbGUgZW5kIG9mIGZpbGVzLgotCXJldHVybiAkc3RyaW5nLiJcbiI7Ci19Ci0KLXN1YiBtZWRpYXdpa2lfY2xlYW5fZmlsZW5hbWUgewotCW15ICRmaWxlbmFtZSA9IHNoaWZ0OwotCSRmaWxlbmFtZSA9fiBzL0B7W1NMQVNIX1JFUExBQ0VNRU5UXX0vXC8vZzsKLQkjIFssIF0sIHwsIHssIGFuZCB9IGFyZSBmb3JiaWRkZW4gYnkgTWVkaWFXaWtpLCBldmVuIFVSTC1lbmNvZGVkLgotCSMgRG8gYSB2YXJpYW50IG9mIFVSTC1lbmNvZGluZywgaS5lLiBsb29rcyBsaWtlIFVSTC1lbmNvZGluZywKLQkjIGJ1dCB3aXRoIF8gYWRkZWQgdG8gcHJldmVudCBNZWRpYVdpa2kgZnJvbSB0aGlua2luZyB0aGlzIGlzCi0JIyBhbiBhY3R1YWwgc3BlY2lhbCBjaGFyYWN0ZXIuCi0JJGZpbGVuYW1lID1+IHMvW1xbXF1ce1x9XHxdL3NwcmludGYoIl8lJV8leCIsIG9yZCgkJikpL2dlOwotCSMgSWYgd2UgdXNlIHRoZSB1cmkgZXNjYXBlIGJlZm9yZQotCSMgd2Ugc2hvdWxkIHVuZXNjYXBlIGhlcmUsIGJlZm9yZSBhbnl0aGluZwotCi0JcmV0dXJuICRmaWxlbmFtZTsKLX0KLQotc3ViIG1lZGlhd2lraV9zbXVkZ2VfZmlsZW5hbWUgewotCW15ICRmaWxlbmFtZSA9IHNoaWZ0OwotCSRmaWxlbmFtZSA9fiBzL1wvL0B7W1NMQVNIX1JFUExBQ0VNRU5UXX0vZzsKLQkkZmlsZW5hbWUgPX4gcy8gL18vZzsKLQkjIERlY29kZSBmb3JiaWRkZW4gY2hhcmFjdGVycyBlbmNvZGVkIGluIG1lZGlhd2lraV9jbGVhbl9maWxlbmFtZQotCSRmaWxlbmFtZSA9fiBzL18lXyhbMC05YS1mQS1GXVswLTlhLWZBLUZdKS9zcHJpbnRmKCIlYyIsIGhleCgkMSkpL2dlOwotCXJldHVybiAkZmlsZW5hbWU7CisJcmV0dXJuICIke3N0cmluZ31cbiI7CiB9CiAKIHN1YiBsaXRlcmFsX2RhdGEgewogCW15ICgkY29udGVudCkgPSBAXzsKLQlwcmludCBTVERPVVQgImRhdGEgIiwgYnl0ZXM6Omxlbmd0aCgkY29udGVudCksICJcbiIsICRjb250ZW50OworCXByaW50IHsqU1RET1VUfSAnZGF0YSAnLCBieXRlczo6bGVuZ3RoKCRjb250ZW50KSwgIlxuIiwgJGNvbnRlbnQ7CisJcmV0dXJuOwogfQogCiBzdWIgbGl0ZXJhbF9kYXRhX3JhdyB7CkBAIC02MjQsMzMgKzU3NiwzNyBAQAogCW15ICgkY29udGVudCkgPSBAXzsKIAkjIEF2b2lkIGNvbmZ1c2lvbiBiZXR3ZWVuIHNpemUgaW4gYnl0ZXMgYW5kIGluIGNoYXJhY3RlcnMKIAl1dGY4Ojpkb3duZ3JhZGUoJGNvbnRlbnQpOwotCWJpbm1vZGUgU1RET1VULCAiOnJhdyI7Ci0JcHJpbnQgU1RET1VUICJkYXRhICIsIGJ5dGVzOjpsZW5ndGgoJGNvbnRlbnQpLCAiXG4iLCAkY29udGVudDsKLQliaW5tb2RlIFNURE9VVCwgIjp1dGY4IjsKKwliaW5tb2RlIFNURE9VVCwgJzpyYXcnOworCXByaW50IHsqU1RET1VUfSAnZGF0YSAnLCBieXRlczo6bGVuZ3RoKCRjb250ZW50KSwgIlxuIiwgJGNvbnRlbnQ7CisJYmlubW9kZSBTVERPVVQsICc6ZW5jb2RpbmcoVVRGLTgpJzsKKwlyZXR1cm47CiB9CiAKIHN1YiBtd19jYXBhYmlsaXRpZXMgewogCSMgUmV2aXNpb25zIGFyZSBpbXBvcnRlZCB0byB0aGUgcHJpdmF0ZSBuYW1lc3BhY2UKIAkjIHJlZnMvbWVkaWF3aWtpLyRyZW1vdGVuYW1lLyBieSB0aGUgaGVscGVyIGFuZCBmZXRjaGVkIGludG8KIAkjIHJlZnMvcmVtb3Rlcy8kcmVtb3RlbmFtZSBsYXRlciBieSBmZXRjaC4KLQlwcmludCBTVERPVVQgInJlZnNwZWMgcmVmcy9oZWFkcy8qOnJlZnMvbWVkaWF3aWtpLyRyZW1vdGVuYW1lLypcbiI7Ci0JcHJpbnQgU1RET1VUICJpbXBvcnRcbiI7Ci0JcHJpbnQgU1RET1VUICJsaXN0XG4iOwotCXByaW50IFNURE9VVCAicHVzaFxuIjsKLQlwcmludCBTVERPVVQgIlxuIjsKKwlwcmludCB7KlNURE9VVH0gInJlZnNwZWMgcmVmcy9oZWFkcy8qOnJlZnMvbWVkaWF3aWtpLyR7cmVtb3RlbmFtZX0vKlxuIjsKKwlwcmludCB7KlNURE9VVH0gImltcG9ydFxuIjsKKwlwcmludCB7KlNURE9VVH0gImxpc3RcbiI7CisJcHJpbnQgeypTVERPVVR9ICJwdXNoXG4iOworCXByaW50IHsqU1RET1VUfSAiXG4iOworCXJldHVybjsKIH0KIAogc3ViIG13X2xpc3QgewogCSMgTWVkaWFXaWtpIGRvIG5vdCBoYXZlIGJyYW5jaGVzLCB3ZSBjb25zaWRlciBvbmUgYnJhbmNoIGFyYml0cmFyaWx5CiAJIyBjYWxsZWQgbWFzdGVyLCBhbmQgSEVBRCBwb2ludGluZyB0byBpdC4KLQlwcmludCBTVERPVVQgIj8gcmVmcy9oZWFkcy9tYXN0ZXJcbiI7Ci0JcHJpbnQgU1RET1VUICJcQHJlZnMvaGVhZHMvbWFzdGVyIEhFQURcbiI7Ci0JcHJpbnQgU1RET1VUICJcbiI7CisJcHJpbnQgeypTVERPVVR9ICI/IHJlZnMvaGVhZHMvbWFzdGVyXG4iOworCXByaW50IHsqU1RET1VUfSAiXEByZWZzL2hlYWRzL21hc3RlciBIRUFEXG4iOworCXByaW50IHsqU1RET1VUfSAiXG4iOworCXJldHVybjsKIH0KIAogc3ViIG13X29wdGlvbiB7Ci0JcHJpbnQgU1RERVJSICJyZW1vdGUtaGVscGVyIGNvbW1hbmQgJ29wdGlvbiAkX1swXScgbm90IHlldCBpbXBsZW1lbnRlZFxuIjsKLQlwcmludCBTVERPVVQgInVuc3VwcG9ydGVkXG4iOworCXByaW50IHsqU1RERVJSfSAicmVtb3RlLWhlbHBlciBjb21tYW5kICdvcHRpb24gJF9bMF0nIG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiI7CisJcHJpbnQgeypTVERPVVR9ICJ1bnN1cHBvcnRlZFxuIjsKKwlyZXR1cm47CiB9CiAKIHN1YiBmZXRjaF9td19yZXZpc2lvbnNfZm9yX3BhZ2UgewpAQCAtNjgxLDE1ICs2MzcsMTUgQEAKIAkJCXB1c2goQHBhZ2VfcmV2cywgJHBhZ2VfcmV2X2lkcyk7CiAJCQkkcmV2bnVtKys7CiAJCX0KLQkJbGFzdCB1bmxlc3MgJHJlc3VsdC0+eydxdWVyeS1jb250aW51ZSd9OworCQlsYXN0IGlmICghJHJlc3VsdC0+eydxdWVyeS1jb250aW51ZSd9KTsKIAkJJHF1ZXJ5LT57cnZzdGFydGlkfSA9ICRyZXN1bHQtPnsncXVlcnktY29udGludWUnfS0+e3JldmlzaW9uc30tPntydnN0YXJ0aWR9OwogCX0KIAlpZiAoJHNoYWxsb3dfaW1wb3J0ICYmIEBwYWdlX3JldnMpIHsKLQkJcHJpbnQgU1RERVJSICIgIEZvdW5kIDEgcmV2aXNpb24gKHNoYWxsb3cgaW1wb3J0KS5cbiI7CisJCXByaW50IHsqU1RERVJSfSAiICBGb3VuZCAxIHJldmlzaW9uIChzaGFsbG93IGltcG9ydCkuXG4iOwogCQlAcGFnZV9yZXZzID0gc29ydCB7JGItPntyZXZpZH0gPD0+ICRhLT57cmV2aWR9fSAoQHBhZ2VfcmV2cyk7CiAJCXJldHVybiAkcGFnZV9yZXZzWzBdOwogCX0KLQlwcmludCBTVERFUlIgIiAgRm91bmQgIiwgJHJldm51bSwgIiByZXZpc2lvbihzKS5cbiI7CisJcHJpbnQgeypTVERFUlJ9ICIgIEZvdW5kICR7cmV2bnVtfSByZXZpc2lvbihzKS5cbiI7CiAJcmV0dXJuIEBwYWdlX3JldnM7CiB9CiAKQEAgLTcwMSw4ICs2NTcsNyBAQAogCW15ICRuID0gMTsKIAlmb3JlYWNoIG15ICRwYWdlIChAcGFnZXMpIHsKIAkJbXkgJGlkID0gJHBhZ2UtPntwYWdlaWR9OwotCi0JCXByaW50IFNUREVSUiAicGFnZSAkbi8iLCBzY2FsYXIoQHBhZ2VzKSwgIjogIi4gJHBhZ2UtPnt0aXRsZX0gLiJcbiI7CisJCXByaW50IHsqU1RERVJSfSAicGFnZSAke259LyIsIHNjYWxhcihAcGFnZXMpLCAnOiAnLCAkcGFnZS0+e3RpdGxlfSwgIlxuIjsKIAkJJG4rKzsKIAkJbXkgQHBhZ2VfcmV2cyA9IGZldGNoX213X3JldmlzaW9uc19mb3JfcGFnZSgkcGFnZSwgJGlkLCAkZmV0Y2hfZnJvbSk7CiAJCUByZXZpc2lvbnMgPSAoQHBhZ2VfcmV2cywgQHJldmlzaW9ucyk7CkBAIC03MTYsNyArNjcxLDcgQEAKICAgICAkcGF0aCA9fiBzL1xcL1xcXFwvZzsKICAgICAkcGF0aCA9fiBzLyIvXFwiL2c7CiAgICAgJHBhdGggPX4gcy9cbi9cXG4vZzsKLSAgICByZXR1cm4gJyInIC4gJHBhdGggLiAnIic7CisgICAgcmV0dXJuIHFxKCIke3BhdGh9Iik7CiB9CiAKIHN1YiBpbXBvcnRfZmlsZV9yZXZpc2lvbiB7CkBAIC03MzYsNDIgKzY5MSw0MyBAQAogCW15ICRhdXRob3IgPSAkY29tbWl0e2F1dGhvcn07CiAJbXkgJGRhdGUgPSAkY29tbWl0e2RhdGV9OwogCi0JcHJpbnQgU1RET1VUICJjb21taXQgcmVmcy9tZWRpYXdpa2kvJHJlbW90ZW5hbWUvbWFzdGVyXG4iOwotCXByaW50IFNURE9VVCAibWFyayA6JG5cbiI7Ci0JcHJpbnQgU1RET1VUICJjb21taXR0ZXIgJGF1dGhvciA8JGF1dGhvclxAJHdpa2lfbmFtZT4gIiwgJGRhdGUtPmVwb2NoLCAiICswMDAwXG4iOworCXByaW50IHsqU1RET1VUfSAiY29tbWl0IHJlZnMvbWVkaWF3aWtpLyR7cmVtb3RlbmFtZX0vbWFzdGVyXG4iOworCXByaW50IHsqU1RET1VUfSAibWFyayA6JHtufVxuIjsKKwlwcmludCB7KlNURE9VVH0gImNvbW1pdHRlciAke2F1dGhvcn0gPCR7YXV0aG9yfVxAJHt3aWtpX25hbWV9PiAiIC4gJGRhdGUtPmVwb2NoIC4gIiArMDAwMFxuIjsKIAlsaXRlcmFsX2RhdGEoJGNvbW1lbnQpOwogCiAJIyBJZiBpdCdzIG5vdCBhIGNsb25lLCB3ZSBuZWVkIHRvIGtub3cgd2hlcmUgdG8gc3RhcnQgZnJvbQogCWlmICghJGZ1bGxfaW1wb3J0ICYmICRuID09IDEpIHsKLQkJcHJpbnQgU1RET1VUICJmcm9tIHJlZnMvbWVkaWF3aWtpLyRyZW1vdGVuYW1lL21hc3Rlcl4wXG4iOworCQlwcmludCB7KlNURE9VVH0gImZyb20gcmVmcy9tZWRpYXdpa2kvJHtyZW1vdGVuYW1lfS9tYXN0ZXJeMFxuIjsKIAl9CiAJaWYgKCRjb250ZW50IG5lIERFTEVURURfQ09OVEVOVCkgewotCQlwcmludCBTVERPVVQgIk0gNjQ0IGlubGluZSAiIC4KLQkJICAgIGZlX2VzY2FwZV9wYXRoKCR0aXRsZSAuICIubXciKSAuICJcbiI7CisJCXByaW50IHsqU1RET1VUfSAnTSA2NDQgaW5saW5lICcgLgorCQkgICAgZmVfZXNjYXBlX3BhdGgoIiR7dGl0bGV9Lm13IikgLiAiXG4iOwogCQlsaXRlcmFsX2RhdGEoJGNvbnRlbnQpOwogCQlpZiAoJW1lZGlhZmlsZSkgewotCQkJcHJpbnQgU1RET1VUICJNIDY0NCBpbmxpbmUgIgorCQkJcHJpbnQgeypTVERPVVR9ICdNIDY0NCBpbmxpbmUgJwogCQkJICAgIC4gZmVfZXNjYXBlX3BhdGgoJG1lZGlhZmlsZXt0aXRsZX0pIC4gIlxuIjsKIAkJCWxpdGVyYWxfZGF0YV9yYXcoJG1lZGlhZmlsZXtjb250ZW50fSk7CiAJCX0KLQkJcHJpbnQgU1RET1VUICJcblxuIjsKKwkJcHJpbnQgeypTVERPVVR9ICJcblxuIjsKIAl9IGVsc2UgewotCQlwcmludCBTVERPVVQgIkQgIiAuIGZlX2VzY2FwZV9wYXRoKCR0aXRsZSAuICIubXciKSAuICJcbiI7CisJCXByaW50IHsqU1RET1VUfSAnRCAnIC4gZmVfZXNjYXBlX3BhdGgoIiR7dGl0bGV9Lm13IikgLiAiXG4iOwogCX0KIAogCSMgbWVkaWF3aWtpIHJldmlzaW9uIG51bWJlciBpbiB0aGUgZ2l0IG5vdGUKIAlpZiAoJGZ1bGxfaW1wb3J0ICYmICRuID09IDEpIHsKLQkJcHJpbnQgU1RET1VUICJyZXNldCByZWZzL25vdGVzLyRyZW1vdGVuYW1lL21lZGlhd2lraVxuIjsKKwkJcHJpbnQgeypTVERPVVR9ICJyZXNldCByZWZzL25vdGVzLyR7cmVtb3RlbmFtZX0vbWVkaWF3aWtpXG4iOwogCX0KLQlwcmludCBTVERPVVQgImNvbW1pdCByZWZzL25vdGVzLyRyZW1vdGVuYW1lL21lZGlhd2lraVxuIjsKLQlwcmludCBTVERPVVQgImNvbW1pdHRlciAkYXV0aG9yIDwkYXV0aG9yXEAkd2lraV9uYW1lPiAiLCAkZGF0ZS0+ZXBvY2gsICIgKzAwMDBcbiI7Ci0JbGl0ZXJhbF9kYXRhKCJOb3RlIGFkZGVkIGJ5IGdpdC1tZWRpYXdpa2kgZHVyaW5nIGltcG9ydCIpOworCXByaW50IHsqU1RET1VUfSAiY29tbWl0IHJlZnMvbm90ZXMvJHtyZW1vdGVuYW1lfS9tZWRpYXdpa2lcbiI7CisJcHJpbnQgeypTVERPVVR9ICJjb21taXR0ZXIgJHthdXRob3J9IDwke2F1dGhvcn1cQCR7d2lraV9uYW1lfT4gIiAuICRkYXRlLT5lcG9jaCAuICIgKzAwMDBcbiI7CisJbGl0ZXJhbF9kYXRhKCdOb3RlIGFkZGVkIGJ5IGdpdC1tZWRpYXdpa2kgZHVyaW5nIGltcG9ydCcpOwogCWlmICghJGZ1bGxfaW1wb3J0ICYmICRuID09IDEpIHsKLQkJcHJpbnQgU1RET1VUICJmcm9tIHJlZnMvbm90ZXMvJHJlbW90ZW5hbWUvbWVkaWF3aWtpXjBcbiI7CisJCXByaW50IHsqU1RET1VUfSAiZnJvbSByZWZzL25vdGVzLyR7cmVtb3RlbmFtZX0vbWVkaWF3aWtpXjBcbiI7CiAJfQotCXByaW50IFNURE9VVCAiTiBpbmxpbmUgOiRuXG4iOwotCWxpdGVyYWxfZGF0YSgibWVkaWF3aWtpX3JldmlzaW9uOiAiIC4gJGNvbW1pdHttd19yZXZpc2lvbn0pOwotCXByaW50IFNURE9VVCAiXG5cbiI7CisJcHJpbnQgeypTVERPVVR9ICJOIGlubGluZSA6JHtufVxuIjsKKwlsaXRlcmFsX2RhdGEoIm1lZGlhd2lraV9yZXZpc2lvbjogJGNvbW1pdHttd19yZXZpc2lvbn0iKTsKKwlwcmludCB7KlNURE9VVH0gIlxuXG4iOworCXJldHVybjsKIH0KIAogIyBwYXJzZSBhIHNlcXVlbmNlIG9mCkBAIC03ODQsMjMgKzc0MCwyNSBAQAogCW15IEByZWZzOwogCXdoaWxlICgxKSB7CiAJCW15ICRsaW5lID0gPFNURElOPjsKLQkJaWYgKCRsaW5lID1+IG0vXiRjbWQgKC4qKSQvKSB7CisJCWlmICgkbGluZSA9fiAvXiRjbWQgKC4qKSQvKSB7CiAJCQlwdXNoKEByZWZzLCAkMSk7CiAJCX0gZWxzaWYgKCRsaW5lIGVxICJcbiIpIHsKIAkJCXJldHVybiBAcmVmczsKIAkJfSBlbHNlIHsKLQkJCWRpZSgiSW52YWxpZCBjb21tYW5kIGluIGEgJyRjbWQnIGJhdGNoOiAiLiAkXyk7CisJCQlkaWUoIkludmFsaWQgY29tbWFuZCBpbiBhICckY21kJyBiYXRjaDogJF9cbiIpOwogCQl9CiAJfQorCXJldHVybjsKIH0KIAogc3ViIG13X2ltcG9ydCB7CiAJIyBtdWx0aXBsZSBpbXBvcnQgY29tbWFuZHMgY2FuIGZvbGxvdyBlYWNoIG90aGVyLgotCW15IEByZWZzID0gKHNoaWZ0LCBnZXRfbW9yZV9yZWZzKCJpbXBvcnQiKSk7CisJbXkgQHJlZnMgPSAoc2hpZnQsIGdldF9tb3JlX3JlZnMoJ2ltcG9ydCcpKTsKIAlmb3JlYWNoIG15ICRyZWYgKEByZWZzKSB7CiAJCW13X2ltcG9ydF9yZWYoJHJlZik7CiAJfQotCXByaW50IFNURE9VVCAiZG9uZVxuIjsKKwlwcmludCB7KlNURE9VVH0gImRvbmVcbiI7CisJcmV0dXJuOwogfQogCiBzdWIgbXdfaW1wb3J0X3JlZiB7CkBAIC04MTAsNDAgKzc2OCw0MSBAQAogCSMgU2luY2UgSEVBRCBpcyBhIHN5bWJvbGljIHJlZiB0byBtYXN0ZXIgKGJ5IGNvbnZlbnRpb24sCiAJIyBmb2xsb3dlZCBieSB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kICJsaXN0IiB0aGF0IHdlIGdhdmUpLAogCSMgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBpbiB0aGlzIGNhc2UuCi0JaWYgKCRyZWYgZXEgIkhFQUQiKSB7CisJaWYgKCRyZWYgZXEgJ0hFQUQnKSB7CiAJCXJldHVybjsKIAl9CiAKLQltd19jb25uZWN0X21heWJlKCk7CisJJG1lZGlhd2lraSA9IGNvbm5lY3RfbWF5YmUoJG1lZGlhd2lraSwgJHJlbW90ZW5hbWUsICR1cmwpOwogCi0JcHJpbnQgU1RERVJSICJTZWFyY2hpbmcgcmV2aXNpb25zLi4uXG4iOworCXByaW50IHsqU1RERVJSfSAiU2VhcmNoaW5nIHJldmlzaW9ucy4uLlxuIjsKIAlteSAkbGFzdF9sb2NhbCA9IGdldF9sYXN0X2xvY2FsX3JldmlzaW9uKCk7CiAJbXkgJGZldGNoX2Zyb20gPSAkbGFzdF9sb2NhbCArIDE7CiAJaWYgKCRmZXRjaF9mcm9tID09IDEpIHsKLQkJcHJpbnQgU1RERVJSICIsIGZldGNoaW5nIGZyb20gYmVnaW5uaW5nLlxuIjsKKwkJcHJpbnQgeypTVERFUlJ9ICIsIGZldGNoaW5nIGZyb20gYmVnaW5uaW5nLlxuIjsKIAl9IGVsc2UgewotCQlwcmludCBTVERFUlIgIiwgZmV0Y2hpbmcgZnJvbSBoZXJlLlxuIjsKKwkJcHJpbnQgeypTVERFUlJ9ICIsIGZldGNoaW5nIGZyb20gaGVyZS5cbiI7CiAJfQogCiAJbXkgJG4gPSAwOwotCWlmICgkZmV0Y2hfc3RyYXRlZ3kgZXEgImJ5X3JldiIpIHsKLQkJcHJpbnQgU1RERVJSICJGZXRjaGluZyAmIHdyaXRpbmcgZXhwb3J0IGRhdGEgYnkgcmV2cy4uLlxuIjsKKwlpZiAoJGZldGNoX3N0cmF0ZWd5IGVxICdieV9yZXYnKSB7CisJCXByaW50IHsqU1RERVJSfSAiRmV0Y2hpbmcgJiB3cml0aW5nIGV4cG9ydCBkYXRhIGJ5IHJldnMuLi5cbiI7CiAJCSRuID0gbXdfaW1wb3J0X3JlZl9ieV9yZXZzKCRmZXRjaF9mcm9tKTsKLQl9IGVsc2lmICgkZmV0Y2hfc3RyYXRlZ3kgZXEgImJ5X3BhZ2UiKSB7Ci0JCXByaW50IFNUREVSUiAiRmV0Y2hpbmcgJiB3cml0aW5nIGV4cG9ydCBkYXRhIGJ5IHBhZ2VzLi4uXG4iOworCX0gZWxzaWYgKCRmZXRjaF9zdHJhdGVneSBlcSAnYnlfcGFnZScpIHsKKwkJcHJpbnQgeypTVERFUlJ9ICJGZXRjaGluZyAmIHdyaXRpbmcgZXhwb3J0IGRhdGEgYnkgcGFnZXMuLi5cbiI7CiAJCSRuID0gbXdfaW1wb3J0X3JlZl9ieV9wYWdlcygkZmV0Y2hfZnJvbSk7CiAJfSBlbHNlIHsKLQkJcHJpbnQgU1RERVJSICJmYXRhbDogaW52YWxpZCBmZXRjaCBzdHJhdGVneSBcIiRmZXRjaF9zdHJhdGVneVwiLlxuIjsKLQkJcHJpbnQgU1RERVJSICJDaGVjayB5b3VyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHJlbW90ZS4kcmVtb3RlbmFtZS5mZXRjaFN0cmF0ZWd5IGFuZCBtZWRpYXdpa2kuZmV0Y2hTdHJhdGVneVxuIjsKKwkJcHJpbnQgeypTVERFUlJ9IHFxKGZhdGFsOiBpbnZhbGlkIGZldGNoIHN0cmF0ZWd5ICIke2ZldGNoX3N0cmF0ZWd5fSIuXG4pOworCQlwcmludCB7KlNUREVSUn0gIkNoZWNrIHlvdXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgcmVtb3RlLiR7cmVtb3RlbmFtZX0uZmV0Y2hTdHJhdGVneSBhbmQgbWVkaWF3aWtpLmZldGNoU3RyYXRlZ3lcbiI7CiAJCWV4aXQgMTsKIAl9CiAKIAlpZiAoJGZldGNoX2Zyb20gPT0gMSAmJiAkbiA9PSAwKSB7Ci0JCXByaW50IFNUREVSUiAiWW91IGFwcGVhciB0byBoYXZlIGNsb25lZCBhbiBlbXB0eSBNZWRpYVdpa2kuXG4iOworCQlwcmludCB7KlNUREVSUn0gIllvdSBhcHBlYXIgdG8gaGF2ZSBjbG9uZWQgYW4gZW1wdHkgTWVkaWFXaWtpLlxuIjsKIAkJIyBTb21ldGhpbmcgaGFzIHRvIGJlIGRvbmUgcmVtb3RlLWhlbHBlciBzaWRlLiBJZiBub3RoaW5nIGlzIGRvbmUsIGFuIGVycm9yIGlzCiAJCSMgdGhyb3duIHNheWluZyB0aGF0IEhFQUQgaXMgcmVmZXJyaW5nIHRvIHVua25vd24gb2JqZWN0IDAwMDAwMDAwMDAwMDAwMDAwMDAKIAkJIyBhbmQgdGhlIGNsb25lIGZhaWxzLgogCX0KKwlyZXR1cm47CiB9CiAKIHN1YiBtd19pbXBvcnRfcmVmX2J5X3BhZ2VzIHsKQEAgLTg1NSw3ICs4MTQsNyBAQAogCW15ICgkbiwgQHJldmlzaW9ucykgPSBmZXRjaF9td19yZXZpc2lvbnMoXEBwYWdlcywgJGZldGNoX2Zyb20pOwogCiAJQHJldmlzaW9ucyA9IHNvcnQgeyRhLT57cmV2aWR9IDw9PiAkYi0+e3JldmlkfX0gQHJldmlzaW9uczsKLQlteSBAcmV2aXNpb25faWRzID0gbWFwICRfLT57cmV2aWR9LCBAcmV2aXNpb25zOworCW15IEByZXZpc2lvbl9pZHMgPSBtYXAgeyAkXy0+e3JldmlkfSB9IEByZXZpc2lvbnM7CiAKIAlyZXR1cm4gbXdfaW1wb3J0X3JldmlkcygkZmV0Y2hfZnJvbSwgXEByZXZpc2lvbl9pZHMsIFwlcGFnZXNfaGFzaCk7CiB9CkBAIC04ODIsNyArODQxLDcgQEAKIAlteSAkbl9hY3R1YWwgPSAwOwogCW15ICRsYXN0X3RpbWVzdGFtcCA9IDA7ICMgUGxhY2Vob2xlciBpbiBjYXNlICRyZXYtPnRpbWVzdGFtcCBpcyB1bmRlZmluZWQKIAotCWZvcmVhY2ggbXkgJHBhZ2VyZXZpZCAoQCRyZXZpc2lvbl9pZHMpIHsKKwlmb3JlYWNoIG15ICRwYWdlcmV2aWQgKEB7JHJldmlzaW9uX2lkc30pIHsKIAkgICAgICAgICMgQ291bnQgcGFnZSBldmVuIGlmIHdlIHNraXAgaXQsIHNpbmNlIHdlIGRpc3BsYXkKIAkJIyAkbi8kdG90YWwgYW5kICR0b3RhbCBpbmNsdWRlcyBza2lwcGVkIHBhZ2VzLgogCQkkbisrOwpAQCAtODk4LDcgKzg1Nyw3IEBACiAJCW15ICRyZXN1bHQgPSAkbWVkaWF3aWtpLT5hcGkoJHF1ZXJ5KTsKIAogCQlpZiAoISRyZXN1bHQpIHsKLQkJCWRpZSAiRmFpbGVkIHRvIHJldHJpZXZlIG1vZGlmaWVkIHBhZ2UgZm9yIHJldmlzaW9uICRwYWdlcmV2aWQiOworCQkJZGllICJGYWlsZWQgdG8gcmV0cmlldmUgbW9kaWZpZWQgcGFnZSBmb3IgcmV2aXNpb24gJHBhZ2VyZXZpZFxuIjsKIAkJfQogCiAJCWlmIChkZWZpbmVkKCRyZXN1bHQtPntxdWVyeX0tPntiYWRyZXZpZHN9LT57JHBhZ2VyZXZpZH0pKSB7CkBAIC05MDcsNyArODY2LDcgQEAKIAkJfQogCiAJCWlmICghZGVmaW5lZCgkcmVzdWx0LT57cXVlcnl9LT57cGFnZXN9KSkgewotCQkJZGllICJJbnZhbGlkIHJldmlzaW9uICRwYWdlcmV2aWQuIjsKKwkJCWRpZSAiSW52YWxpZCByZXZpc2lvbiAke3BhZ2VyZXZpZH0uXG4iOwogCQl9CiAKIAkJbXkgQHJlc3VsdF9wYWdlcyA9IHZhbHVlcygleyRyZXN1bHQtPntxdWVyeX0tPntwYWdlc319KTsKQEAgLTkxNyw4ICs4NzYsOCBAQAogCQlteSAkcGFnZV90aXRsZSA9ICRyZXN1bHRfcGFnZS0+e3RpdGxlfTsKIAogCQlpZiAoIWV4aXN0cygkcGFnZXMtPnskcGFnZV90aXRsZX0pKSB7Ci0JCQlwcmludCBTVERFUlIgIiRuLyIsIHNjYWxhcihAJHJldmlzaW9uX2lkcyksCi0JCQkJIjogU2tpcHBpbmcgcmV2aXNpb24gIyRyZXYtPntyZXZpZH0gb2YgJHBhZ2VfdGl0bGVcbiI7CisJCQlwcmludCB7KlNUREVSUn0gIiR7bn0vIiwgc2NhbGFyKEB7JHJldmlzaW9uX2lkc30pLAorCQkJCSI6IFNraXBwaW5nIHJldmlzaW9uICMkcmV2LT57cmV2aWR9IG9mICR7cGFnZV90aXRsZX1cbiI7CiAJCQluZXh0OwogCQl9CiAKQEAgLTkyNyw3ICs4ODYsNyBAQAogCQlteSAlY29tbWl0OwogCQkkY29tbWl0e2F1dGhvcn0gPSAkcmV2LT57dXNlcn0gfHwgJ0Fub255bW91cyc7CiAJCSRjb21taXR7Y29tbWVudH0gPSAkcmV2LT57Y29tbWVudH0gfHwgRU1QVFlfTUVTU0FHRTsKLQkJJGNvbW1pdHt0aXRsZX0gPSBtZWRpYXdpa2lfc211ZGdlX2ZpbGVuYW1lKCRwYWdlX3RpdGxlKTsKKwkJJGNvbW1pdHt0aXRsZX0gPSBzbXVkZ2VfZmlsZW5hbWUoJHBhZ2VfdGl0bGUpOwogCQkkY29tbWl0e213X3JldmlzaW9ufSA9ICRyZXYtPntyZXZpZH07CiAJCSRjb21taXR7Y29udGVudH0gPSBtZWRpYXdpa2lfc211ZGdlKCRyZXYtPnsnKid9KTsKIApAQCAtOTQzLDE0ICs5MDIsMTQgQEAKIAkJbXkgJW1lZGlhZmlsZTsKIAkJaWYgKCRuYW1lc3BhY2UpIHsKIAkJCW15ICRpZCA9IGdldF9td19uYW1lc3BhY2VfaWQoJG5hbWVzcGFjZSk7Ci0JCQlpZiAoJGlkICYmICRpZCA9PSBnZXRfbXdfbmFtZXNwYWNlX2lkKCJGaWxlIikpIHsKKwkJCWlmICgkaWQgJiYgJGlkID09IGdldF9td19uYW1lc3BhY2VfaWQoJ0ZpbGUnKSkgewogCQkJCSVtZWRpYWZpbGUgPSBnZXRfbXdfbWVkaWFmaWxlX2Zvcl9wYWdlX3JldmlzaW9uKCRmaWxlbmFtZSwgJHJldi0+e3RpbWVzdGFtcH0pOwogCQkJfQogCQl9CiAJCSMgSWYgdGhpcyBpcyBhIHJldmlzaW9uIG9mIHRoZSBtZWRpYSBwYWdlIGZvciBuZXcgdmVyc2lvbgogCQkjIG9mIGEgZmlsZSBkbyBvbmUgY29tbW9uIGNvbW1pdCBmb3IgYm90aCBmaWxlIGFuZCBtZWRpYSBwYWdlLgogCQkjIEVsc2UgZG8gY29tbWl0IG9ubHkgZm9yIHRoYXQgcGFnZS4KLQkJcHJpbnQgU1RERVJSICIkbi8iLCBzY2FsYXIoQCRyZXZpc2lvbl9pZHMpLCAiOiBSZXZpc2lvbiAjJHJldi0+e3JldmlkfSBvZiAkY29tbWl0e3RpdGxlfVxuIjsKKwkJcHJpbnQgeypTVERFUlJ9ICIke259LyIsIHNjYWxhcihAeyRyZXZpc2lvbl9pZHN9KSwgIjogUmV2aXNpb24gIyRyZXYtPntyZXZpZH0gb2YgJGNvbW1pdHt0aXRsZX1cbiI7CiAJCWltcG9ydF9maWxlX3JldmlzaW9uKFwlY29tbWl0LCAoJGZldGNoX2Zyb20gPT0gMSksICRuX2FjdHVhbCwgXCVtZWRpYWZpbGUpOwogCX0KIApAQCAtOTU4LDE3ICs5MTcsMTcgQEAKIH0KIAogc3ViIGVycm9yX25vbl9mYXN0X2ZvcndhcmQgewotCW15ICRhZHZpY2UgPSBydW5fZ2l0KCJjb25maWcgLS1ib29sIGFkdmljZS5wdXNoTm9uRmFzdEZvcndhcmQiKTsKKwlteSAkYWR2aWNlID0gcnVuX2dpdCgnY29uZmlnIC0tYm9vbCBhZHZpY2UucHVzaE5vbkZhc3RGb3J3YXJkJyk7CiAJY2hvbXAoJGFkdmljZSk7Ci0JaWYgKCRhZHZpY2UgbmUgImZhbHNlIikgeworCWlmICgkYWR2aWNlIG5lICdmYWxzZScpIHsKIAkJIyBOYXRpdmUgZ2l0LXB1c2ggd291bGQgc2hvdyB0aGlzIGFmdGVyIHRoZSBzdW1tYXJ5LgogCQkjIFdlIGNhbid0IGFzayBpdCB0byBkaXNwbGF5IGl0IGNsZWFubHksIHNvIHByaW50IGl0CiAJCSMgb3Vyc2VsdmVzIGJlZm9yZS4KLQkJcHJpbnQgU1RERVJSICJUbyBwcmV2ZW50IHlvdSBmcm9tIGxvc2luZyBoaXN0b3J5LCBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZXMgd2VyZSByZWplY3RlZFxuIjsKLQkJcHJpbnQgU1RERVJSICJNZXJnZSB0aGUgcmVtb3RlIGNoYW5nZXMgKGUuZy4gJ2dpdCBwdWxsJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uIFNlZSB0aGVcbiI7Ci0JCXByaW50IFNUREVSUiAiJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgc2VjdGlvbiBvZiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy5cbiI7CisJCXByaW50IHsqU1RERVJSfSAiVG8gcHJldmVudCB5b3UgZnJvbSBsb3NpbmcgaGlzdG9yeSwgbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGVzIHdlcmUgcmVqZWN0ZWRcbiI7CisJCXByaW50IHsqU1RERVJSfSAiTWVyZ2UgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuICdnaXQgcHVsbCcpIGJlZm9yZSBwdXNoaW5nIGFnYWluLiBTZWUgdGhlXG4iOworCQlwcmludCB7KlNUREVSUn0gIidOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIHNlY3Rpb24gb2YgJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuXG4iOwogCX0KLQlwcmludCBTVERPVVQgImVycm9yICRfWzBdIFwibm9uLWZhc3QtZm9yd2FyZFwiXG4iOworCXByaW50IHsqU1RET1VUfSBxcShlcnJvciAkX1swXSAibm9uLWZhc3QtZm9yd2FyZCJcbik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk3OSwzNCArOTM4LDM0IEBACiAJbXkgJGZpbGVfZGVsZXRlZCA9IHNoaWZ0OwogCW15ICRzdW1tYXJ5ID0gc2hpZnQ7CiAJbXkgJG5ld3JldmlkOwotCW15ICRwYXRoID0gIkZpbGU6IiAuICRjb21wbGV0ZV9maWxlX25hbWU7CisJbXkgJHBhdGggPSAiRmlsZToke2NvbXBsZXRlX2ZpbGVfbmFtZX0iOwogCW15ICVoYXNoRmlsZXMgPSBnZXRfYWxsb3dlZF9maWxlX2V4dGVuc2lvbnMoKTsKIAlpZiAoIWV4aXN0cygkaGFzaEZpbGVzeyRleHRlbnNpb259KSkgewotCQlwcmludCBTVERFUlIgIiRjb21wbGV0ZV9maWxlX25hbWUgaXMgbm90IGEgcGVybWl0dGVkIGZpbGUgb24gdGhpcyB3aWtpLlxuIjsKLQkJcHJpbnQgU1RERVJSICJDaGVjayB0aGUgY29uZmlndXJhdGlvbiBvZiBmaWxlIHVwbG9hZHMgaW4geW91ciBtZWRpYXdpa2kuXG4iOworCQlwcmludCB7KlNUREVSUn0gIiR7Y29tcGxldGVfZmlsZV9uYW1lfSBpcyBub3QgYSBwZXJtaXR0ZWQgZmlsZSBvbiB0aGlzIHdpa2kuXG4iOworCQlwcmludCB7KlNUREVSUn0gIkNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9mIGZpbGUgdXBsb2FkcyBpbiB5b3VyIG1lZGlhd2lraS5cbiI7CiAJCXJldHVybiAkbmV3cmV2aWQ7CiAJfQogCSMgRGVsZXRpbmcgYW5kIHVwbG9hZGluZyBhIGZpbGUgcmVxdWlyZXMgYSBwcml2aWxlZGdlZCB1c2VyCiAJaWYgKCRmaWxlX2RlbGV0ZWQpIHsKLQkJbXdfY29ubmVjdF9tYXliZSgpOworCQkkbWVkaWF3aWtpID0gY29ubmVjdF9tYXliZSgkbWVkaWF3aWtpLCAkcmVtb3RlbmFtZSwgJHVybCk7CiAJCW15ICRxdWVyeSA9IHsKIAkJCWFjdGlvbiA9PiAnZGVsZXRlJywKIAkJCXRpdGxlID0+ICRwYXRoLAogCQkJcmVhc29uID0+ICRzdW1tYXJ5CiAJCX07CiAJCWlmICghJG1lZGlhd2lraS0+ZWRpdCgkcXVlcnkpKSB7Ci0JCQlwcmludCBTVERFUlIgIkZhaWxlZCB0byBkZWxldGUgZmlsZSBvbiByZW1vdGUgd2lraVxuIjsKLQkJCXByaW50IFNUREVSUiAiQ2hlY2sgeW91ciBwZXJtaXNzaW9ucyBvbiB0aGUgcmVtb3RlIHNpdGUuIEVycm9yIGNvZGU6XG4iOwotCQkJcHJpbnQgU1RERVJSICRtZWRpYXdpa2ktPntlcnJvcn0tPntjb2RlfSAuICc6JyAuICRtZWRpYXdpa2ktPntlcnJvcn0tPntkZXRhaWxzfTsKKwkJCXByaW50IHsqU1RERVJSfSAiRmFpbGVkIHRvIGRlbGV0ZSBmaWxlIG9uIHJlbW90ZSB3aWtpXG4iOworCQkJcHJpbnQgeypTVERFUlJ9ICJDaGVjayB5b3VyIHBlcm1pc3Npb25zIG9uIHRoZSByZW1vdGUgc2l0ZS4gRXJyb3IgY29kZTpcbiI7CisJCQlwcmludCB7KlNUREVSUn0gJG1lZGlhd2lraS0+e2Vycm9yfS0+e2NvZGV9IC4gJzonIC4gJG1lZGlhd2lraS0+e2Vycm9yfS0+e2RldGFpbHN9OwogCQkJZXhpdCAxOwogCQl9CiAJfSBlbHNlIHsKIAkJIyBEb24ndCBsZXQgcGVybCB0cnkgdG8gaW50ZXJwcmV0IGZpbGUgY29udGVudCBhcyBVVEYtOCA9PiB1c2UgInJhdyIKLQkJbXkgJGNvbnRlbnQgPSBydW5fZ2l0KCJjYXQtZmlsZSBibG9iICRuZXdfc2hhMSIsICJyYXciKTsKLQkJaWYgKCRjb250ZW50IG5lICIiKSB7Ci0JCQltd19jb25uZWN0X21heWJlKCk7CisJCW15ICRjb250ZW50ID0gcnVuX2dpdCgiY2F0LWZpbGUgYmxvYiAke25ld19zaGExfSIsICdyYXcnKTsKKwkJaWYgKCRjb250ZW50IG5lIEVNUFRZKSB7CisJCQkkbWVkaWF3aWtpID0gY29ubmVjdF9tYXliZSgkbWVkaWF3aWtpLCAkcmVtb3RlbmFtZSwgJHVybCk7CiAJCQkkbWVkaWF3aWtpLT57Y29uZmlnfS0+e3VwbG9hZF91cmx9ID0KLQkJCQkiJHVybC9pbmRleC5waHAvU3BlY2lhbDpVcGxvYWQiOworCQkJCSIke3VybH0vaW5kZXgucGhwL1NwZWNpYWw6VXBsb2FkIjsKIAkJCSRtZWRpYXdpa2ktPmVkaXQoewogCQkJCWFjdGlvbiA9PiAndXBsb2FkJywKIAkJCQlmaWxlbmFtZSA9PiAkY29tcGxldGVfZmlsZV9uYW1lLApAQCAtMTAxOCwxMiArOTc3LDEyIEBACiAJCQl9LCB7CiAJCQkJc2tpcF9lbmNvZGluZyA9PiAxCiAJCQl9ICkgfHwgZGllICRtZWRpYXdpa2ktPntlcnJvcn0tPntjb2RlfSAuICc6JwotCQkJCSAuICRtZWRpYXdpa2ktPntlcnJvcn0tPntkZXRhaWxzfTsKKwkJCQkgLiAkbWVkaWF3aWtpLT57ZXJyb3J9LT57ZGV0YWlsc30gLiAiXG4iOwogCQkJbXkgJGxhc3RfZmlsZV9wYWdlID0gJG1lZGlhd2lraS0+Z2V0X3BhZ2Uoe3RpdGxlID0+ICRwYXRofSk7CiAJCQkkbmV3cmV2aWQgPSAkbGFzdF9maWxlX3BhZ2UtPntyZXZpZH07Ci0JCQlwcmludCBTVERFUlIgIlB1c2hlZCBmaWxlOiAkbmV3X3NoYTEgLSAkY29tcGxldGVfZmlsZV9uYW1lLlxuIjsKKwkJCXByaW50IHsqU1RERVJSfSAiUHVzaGVkIGZpbGU6ICR7bmV3X3NoYTF9IC0gJHtjb21wbGV0ZV9maWxlX25hbWV9LlxuIjsKIAkJfSBlbHNlIHsKLQkJCXByaW50IFNUREVSUiAiRW1wdHkgZmlsZSAkY29tcGxldGVfZmlsZV9uYW1lIG5vdCBwdXNoZWQuXG4iOworCQkJcHJpbnQgeypTVERFUlJ9ICJFbXB0eSBmaWxlICR7Y29tcGxldGVfZmlsZV9uYW1lfSBub3QgcHVzaGVkLlxuIjsKIAkJfQogCX0KIAlyZXR1cm4gJG5ld3JldmlkOwpAQCAtMTA0NSwyNCArMTAwNCwyNCBAQAogCW15ICRuZXdyZXZpZDsKIAogCWlmICgkc3VtbWFyeSBlcSBFTVBUWV9NRVNTQUdFKSB7Ci0JCSRzdW1tYXJ5ID0gJyc7CisJCSRzdW1tYXJ5ID0gRU1QVFk7CiAJfQogCiAJbXkgJG5ld19zaGExID0gJGRpZmZfaW5mb19zcGxpdFszXTsKIAlteSAkb2xkX3NoYTEgPSAkZGlmZl9pbmZvX3NwbGl0WzJdOwogCW15ICRwYWdlX2NyZWF0ZWQgPSAoJG9sZF9zaGExIGVxIE5VTExfU0hBMSk7CiAJbXkgJHBhZ2VfZGVsZXRlZCA9ICgkbmV3X3NoYTEgZXEgTlVMTF9TSEExKTsKLQkkY29tcGxldGVfZmlsZV9uYW1lID0gbWVkaWF3aWtpX2NsZWFuX2ZpbGVuYW1lKCRjb21wbGV0ZV9maWxlX25hbWUpOworCSRjb21wbGV0ZV9maWxlX25hbWUgPSBjbGVhbl9maWxlbmFtZSgkY29tcGxldGVfZmlsZV9uYW1lKTsKIAogCW15ICgkdGl0bGUsICRleHRlbnNpb24pID0gJGNvbXBsZXRlX2ZpbGVfbmFtZSA9fiAvXiguKilcLihbXlwuXSopJC87CiAJaWYgKCFkZWZpbmVkKCRleHRlbnNpb24pKSB7Ci0JCSRleHRlbnNpb24gPSAiIjsKKwkJJGV4dGVuc2lvbiA9IEVNUFRZOwogCX0KLQlpZiAoJGV4dGVuc2lvbiBlcSAibXciKSB7CisJaWYgKCRleHRlbnNpb24gZXEgJ213JykgewogCQlteSAkbnMgPSBnZXRfbXdfbmFtZXNwYWNlX2lkX2Zvcl9wYWdlKCRjb21wbGV0ZV9maWxlX25hbWUpOwotCQlpZiAoJG5zICYmICRucyA9PSBnZXRfbXdfbmFtZXNwYWNlX2lkKCJGaWxlIikgJiYgKCEkZXhwb3J0X21lZGlhKSkgewotCQkJcHJpbnQgU1RERVJSICJJZ25vcmluZyBtZWRpYSBmaWxlIHJlbGF0ZWQgcGFnZTogJGNvbXBsZXRlX2ZpbGVfbmFtZVxuIjsKLQkJCXJldHVybiAoJG9sZHJldmlkLCAib2siKTsKKwkJaWYgKCRucyAmJiAkbnMgPT0gZ2V0X213X25hbWVzcGFjZV9pZCgnRmlsZScpICYmICghJGV4cG9ydF9tZWRpYSkpIHsKKwkJCXByaW50IHsqU1RERVJSfSAiSWdub3JpbmcgbWVkaWEgZmlsZSByZWxhdGVkIHBhZ2U6ICR7Y29tcGxldGVfZmlsZV9uYW1lfVxuIjsKKwkJCXJldHVybiAoJG9sZHJldmlkLCAnb2snKTsKIAkJfQogCQlteSAkZmlsZV9jb250ZW50OwogCQlpZiAoJHBhZ2VfZGVsZXRlZCkgewpAQCAtMTA3MiwxMCArMTAzMSwxMCBAQAogCQkJIyB3aXRoIHRoaXMgY29udGVudCBpbnN0ZWFkOgogCQkJJGZpbGVfY29udGVudCA9IERFTEVURURfQ09OVEVOVDsKIAkJfSBlbHNlIHsKLQkJCSRmaWxlX2NvbnRlbnQgPSBydW5fZ2l0KCJjYXQtZmlsZSBibG9iICRuZXdfc2hhMSIpOworCQkJJGZpbGVfY29udGVudCA9IHJ1bl9naXQoImNhdC1maWxlIGJsb2IgJHtuZXdfc2hhMX0iKTsKIAkJfQogCi0JCW13X2Nvbm5lY3RfbWF5YmUoKTsKKwkJJG1lZGlhd2lraSA9IGNvbm5lY3RfbWF5YmUoJG1lZGlhd2lraSwgJHJlbW90ZW5hbWUsICR1cmwpOwogCiAJCW15ICRyZXN1bHQgPSAkbWVkaWF3aWtpLT5lZGl0KCB7CiAJCQlhY3Rpb24gPT4gJ2VkaXQnLApAQCAtMTA4OSw0OSArMTA0OCw0OSBAQAogCQlpZiAoISRyZXN1bHQpIHsKIAkJCWlmICgkbWVkaWF3aWtpLT57ZXJyb3J9LT57Y29kZX0gPT0gMykgewogCQkJCSMgZWRpdCBjb25mbGljdHMsIGNvbnNpZGVyZWQgYXMgbm9uLWZhc3QtZm9yd2FyZAotCQkJCXByaW50IFNUREVSUiAnV2FybmluZzogRXJyb3IgJyAuCisJCQkJcHJpbnQgeypTVERFUlJ9ICdXYXJuaW5nOiBFcnJvciAnIC4KIAkJCQkgICAgJG1lZGlhd2lraS0+e2Vycm9yfS0+e2NvZGV9IC4KLQkJCQkgICAgJyBmcm9tIG1lZGl3aWtpOiAnIC4gJG1lZGlhd2lraS0+e2Vycm9yfS0+e2RldGFpbHN9IC4KKwkJCQkgICAgJyBmcm9tIG1lZGlhd2lraTogJyAuICRtZWRpYXdpa2ktPntlcnJvcn0tPntkZXRhaWxzfSAuCiAJCQkJICAgICIuXG4iOwotCQkJCXJldHVybiAoJG9sZHJldmlkLCAibm9uLWZhc3QtZm9yd2FyZCIpOworCQkJCXJldHVybiAoJG9sZHJldmlkLCAnbm9uLWZhc3QtZm9yd2FyZCcpOwogCQkJfSBlbHNlIHsKIAkJCQkjIE90aGVyIGVycm9ycy4gU2hvdWxkbid0IGhhcHBlbiA9PiBqdXN0IGRpZSgpCiAJCQkJZGllICdGYXRhbDogRXJyb3IgJyAuCiAJCQkJICAgICRtZWRpYXdpa2ktPntlcnJvcn0tPntjb2RlfSAuCi0JCQkJICAgICcgZnJvbSBtZWRpd2lraTogJyAuICRtZWRpYXdpa2ktPntlcnJvcn0tPntkZXRhaWxzfTsKKwkJCQkgICAgJyBmcm9tIG1lZGlhd2lraTogJyAuICRtZWRpYXdpa2ktPntlcnJvcn0tPntkZXRhaWxzfSAuICJcbiI7CiAJCQl9CiAJCX0KIAkJJG5ld3JldmlkID0gJHJlc3VsdC0+e2VkaXR9LT57bmV3cmV2aWR9OwotCQlwcmludCBTVERFUlIgIlB1c2hlZCBmaWxlOiAkbmV3X3NoYTEgLSAkdGl0bGVcbiI7CisJCXByaW50IHsqU1RERVJSfSAiUHVzaGVkIGZpbGU6ICR7bmV3X3NoYTF9IC0gJHt0aXRsZX1cbiI7CiAJfSBlbHNpZiAoJGV4cG9ydF9tZWRpYSkgewogCQkkbmV3cmV2aWQgPSBtd191cGxvYWRfZmlsZSgkY29tcGxldGVfZmlsZV9uYW1lLCAkbmV3X3NoYTEsCiAJCQkJCSAgICRleHRlbnNpb24sICRwYWdlX2RlbGV0ZWQsCiAJCQkJCSAgICRzdW1tYXJ5KTsKIAl9IGVsc2UgewotCQlwcmludCBTVERFUlIgIklnbm9yaW5nIG1lZGlhIGZpbGUgJHRpdGxlXG4iOworCQlwcmludCB7KlNUREVSUn0gIklnbm9yaW5nIG1lZGlhIGZpbGUgJHt0aXRsZX1cbiI7CiAJfQogCSRuZXdyZXZpZCA9ICgkbmV3cmV2aWQgb3IgJG9sZHJldmlkKTsKLQlyZXR1cm4gKCRuZXdyZXZpZCwgIm9rIik7CisJcmV0dXJuICgkbmV3cmV2aWQsICdvaycpOwogfQogCiBzdWIgbXdfcHVzaCB7CiAJIyBtdWx0aXBsZSBwdXNoIHN0YXRlbWVudHMgY2FuIGZvbGxvdyBlYWNoIG90aGVyCi0JbXkgQHJlZnNzcGVjcyA9IChzaGlmdCwgZ2V0X21vcmVfcmVmcygicHVzaCIpKTsKKwlteSBAcmVmc3NwZWNzID0gKHNoaWZ0LCBnZXRfbW9yZV9yZWZzKCdwdXNoJykpOwogCW15ICRwdXNoZWQ7CiAJZm9yIG15ICRyZWZzcGVjIChAcmVmc3NwZWNzKSB7CiAJCW15ICgkZm9yY2UsICRsb2NhbCwgJHJlbW90ZSkgPSAkcmVmc3BlYyA9fiAvXihcKyk/KFteOl0qKTooW146XSopJC8KLQkJICAgIG9yIGRpZSgiSW52YWxpZCByZWZzcGVjIGZvciBwdXNoLiBFeHBlY3RlZCA8c3JjPjo8ZHN0PiBvciArPHNyYz46PGRzdD4iKTsKKwkJICAgIG9yIGRpZSgiSW52YWxpZCByZWZzcGVjIGZvciBwdXNoLiBFeHBlY3RlZCA8c3JjPjo8ZHN0PiBvciArPHNyYz46PGRzdD5cbiIpOwogCQlpZiAoJGZvcmNlKSB7Ci0JCQlwcmludCBTVERFUlIgIldhcm5pbmc6IGZvcmNlZCBwdXNoIG5vdCBhbGxvd2VkIG9uIGEgTWVkaWFXaWtpLlxuIjsKKwkJCXByaW50IHsqU1RERVJSfSAiV2FybmluZzogZm9yY2VkIHB1c2ggbm90IGFsbG93ZWQgb24gYSBNZWRpYVdpa2kuXG4iOwogCQl9Ci0JCWlmICgkbG9jYWwgZXEgIiIpIHsKLQkJCXByaW50IFNUREVSUiAiQ2Fubm90IGRlbGV0ZSByZW1vdGUgYnJhbmNoIG9uIGEgTWVkaWFXaWtpXG4iOwotCQkJcHJpbnQgU1RET1VUICJlcnJvciAkcmVtb3RlIGNhbm5vdCBkZWxldGVcbiI7CisJCWlmICgkbG9jYWwgZXEgRU1QVFkpIHsKKwkJCXByaW50IHsqU1RERVJSfSAiQ2Fubm90IGRlbGV0ZSByZW1vdGUgYnJhbmNoIG9uIGEgTWVkaWFXaWtpXG4iOworCQkJcHJpbnQgeypTVERPVVR9ICJlcnJvciAke3JlbW90ZX0gY2Fubm90IGRlbGV0ZVxuIjsKIAkJCW5leHQ7CiAJCX0KLQkJaWYgKCRyZW1vdGUgbmUgInJlZnMvaGVhZHMvbWFzdGVyIikgewotCQkJcHJpbnQgU1RERVJSICJPbmx5IHB1c2ggdG8gdGhlIGJyYW5jaCAnbWFzdGVyJyBpcyBzdXBwb3J0ZWQgb24gYSBNZWRpYVdpa2lcbiI7Ci0JCQlwcmludCBTVERPVVQgImVycm9yICRyZW1vdGUgb25seSBtYXN0ZXIgYWxsb3dlZFxuIjsKKwkJaWYgKCRyZW1vdGUgbmUgJ3JlZnMvaGVhZHMvbWFzdGVyJykgeworCQkJcHJpbnQgeypTVERFUlJ9ICJPbmx5IHB1c2ggdG8gdGhlIGJyYW5jaCAnbWFzdGVyJyBpcyBzdXBwb3J0ZWQgb24gYSBNZWRpYVdpa2lcbiI7CisJCQlwcmludCB7KlNURE9VVH0gImVycm9yICR7cmVtb3RlfSBvbmx5IG1hc3RlciBhbGxvd2VkXG4iOwogCQkJbmV4dDsKIAkJfQogCQlpZiAobXdfcHVzaF9yZXZpc2lvbigkbG9jYWwsICRyZW1vdGUpKSB7CkBAIC0xMTQwLDMwICsxMDk5LDMyIEBACiAJfQogCiAJIyBOb3RpZnkgR2l0IHRoYXQgdGhlIHB1c2ggaXMgZG9uZQotCXByaW50IFNURE9VVCAiXG4iOworCXByaW50IHsqU1RET1VUfSAiXG4iOwogCiAJaWYgKCRwdXNoZWQgJiYgJGR1bWJfcHVzaCkgewotCQlwcmludCBTVERFUlIgIkp1c3QgcHVzaGVkIHNvbWUgcmV2aXNpb25zIHRvIE1lZGlhV2lraS5cbiI7Ci0JCXByaW50IFNUREVSUiAiVGhlIHB1c2hlZCByZXZpc2lvbnMgbm93IGhhdmUgdG8gYmUgcmUtaW1wb3J0ZWQsIGFuZCB5b3VyIGN1cnJlbnQgYnJhbmNoXG4iOwotCQlwcmludCBTVERFUlIgIm5lZWRzIHRvIGJlIHVwZGF0ZWQgd2l0aCB0aGVzZSByZS1pbXBvcnRlZCBjb21taXRzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aFxuIjsKLQkJcHJpbnQgU1RERVJSICJcbiI7Ci0JCXByaW50IFNUREVSUiAiICBnaXQgcHVsbCAtLXJlYmFzZVxuIjsKLQkJcHJpbnQgU1RERVJSICJcbiI7CisJCXByaW50IHsqU1RERVJSfSAiSnVzdCBwdXNoZWQgc29tZSByZXZpc2lvbnMgdG8gTWVkaWFXaWtpLlxuIjsKKwkJcHJpbnQgeypTVERFUlJ9ICJUaGUgcHVzaGVkIHJldmlzaW9ucyBub3cgaGF2ZSB0byBiZSByZS1pbXBvcnRlZCwgYW5kIHlvdXIgY3VycmVudCBicmFuY2hcbiI7CisJCXByaW50IHsqU1RERVJSfSAibmVlZHMgdG8gYmUgdXBkYXRlZCB3aXRoIHRoZXNlIHJlLWltcG9ydGVkIGNvbW1pdHMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoXG4iOworCQlwcmludCB7KlNUREVSUn0gIlxuIjsKKwkJcHJpbnQgeypTVERFUlJ9ICIgIGdpdCBwdWxsIC0tcmViYXNlXG4iOworCQlwcmludCB7KlNUREVSUn0gIlxuIjsKIAl9CisJcmV0dXJuOwogfQogCiBzdWIgbXdfcHVzaF9yZXZpc2lvbiB7CiAJbXkgJGxvY2FsID0gc2hpZnQ7CiAJbXkgJHJlbW90ZSA9IHNoaWZ0OyAjIGFjdHVhbGx5LCB0aGlzIGhhcyB0byBiZSAicmVmcy9oZWFkcy9tYXN0ZXIiIGF0IHRoaXMgcG9pbnQuCiAJbXkgJGxhc3RfbG9jYWxfcmV2aWQgPSBnZXRfbGFzdF9sb2NhbF9yZXZpc2lvbigpOwotCXByaW50IFNUREVSUiAiLlxuIjsgIyBGaW5pc2ggc2VudGVuY2Ugc3RhcnRlZCBieSBnZXRfbGFzdF9sb2NhbF9yZXZpc2lvbigpCisJcHJpbnQgeypTVERFUlJ9ICIuXG4iOyAjIEZpbmlzaCBzZW50ZW5jZSBzdGFydGVkIGJ5IGdldF9sYXN0X2xvY2FsX3JldmlzaW9uKCkKIAlteSAkbGFzdF9yZW1vdGVfcmV2aWQgPSBnZXRfbGFzdF9yZW1vdGVfcmV2aXNpb24oKTsKIAlteSAkbXdfcmV2aXNpb24gPSAkbGFzdF9yZW1vdGVfcmV2aWQ7CiAKIAkjIEdldCBzaGExIG9mIGNvbW1pdCBwb2ludGVkIGJ5IGxvY2FsIEhFQUQKLQlteSAkSEVBRF9zaGExID0gcnVuX2dpdCgicmV2LXBhcnNlICRsb2NhbCAyPi9kZXYvbnVsbCIpOyBjaG9tcCgkSEVBRF9zaGExKTsKKwlteSAkSEVBRF9zaGExID0gcnVuX2dpdCgicmV2LXBhcnNlICR7bG9jYWx9IDI+L2Rldi9udWxsIik7CisJY2hvbXAoJEhFQURfc2hhMSk7CiAJIyBHZXQgc2hhMSBvZiBjb21taXQgcG9pbnRlZCBieSByZW1vdGVzLyRyZW1vdGVuYW1lL21hc3RlcgotCW15ICRyZW1vdGVvcmlnaW5fc2hhMSA9IHJ1bl9naXQoInJldi1wYXJzZSByZWZzL3JlbW90ZXMvJHJlbW90ZW5hbWUvbWFzdGVyIDI+L2Rldi9udWxsIik7CisJbXkgJHJlbW90ZW9yaWdpbl9zaGExID0gcnVuX2dpdCgicmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy8ke3JlbW90ZW5hbWV9L21hc3RlciAyPi9kZXYvbnVsbCIpOwogCWNob21wKCRyZW1vdGVvcmlnaW5fc2hhMSk7CiAKIAlpZiAoJGxhc3RfbG9jYWxfcmV2aWQgPiAwICYmCkBAIC0xMTgyLDIyICsxMTQzLDIyIEBACiAJaWYgKCRsYXN0X2xvY2FsX3JldmlkID4gMCkgewogCQlteSAkcGFyc2VkX3NoYTEgPSAkcmVtb3Rlb3JpZ2luX3NoYTE7CiAJCSMgRmluZCBhIHBhdGggZnJvbSBsYXN0IE1lZGlhV2lraSBjb21taXQgdG8gcHVzaGVkIGNvbW1pdAotCQlwcmludCBTVERFUlIgIkNvbXB1dGluZyBwYXRoIGZyb20gbG9jYWwgdG8gcmVtb3RlIC4uLlxuIjsKLQkJbXkgQGxvY2FsX2FuY2VzdHJ5ID0gc3BsaXQoL1xuLywgcnVuX2dpdCgicmV2LWxpc3QgLS1ib3VuZGFyeSAtLXBhcmVudHMgJGxvY2FsIF4kcGFyc2VkX3NoYTEiKSk7CisJCXByaW50IHsqU1RERVJSfSAiQ29tcHV0aW5nIHBhdGggZnJvbSBsb2NhbCB0byByZW1vdGUgLi4uXG4iOworCQlteSBAbG9jYWxfYW5jZXN0cnkgPSBzcGxpdCgvXG4vLCBydW5fZ2l0KCJyZXYtbGlzdCAtLWJvdW5kYXJ5IC0tcGFyZW50cyAke2xvY2FsfSBeJHtwYXJzZWRfc2hhMX0iKSk7CiAJCW15ICVsb2NhbF9hbmNlc3RyeTsKIAkJZm9yZWFjaCBteSAkbGluZSAoQGxvY2FsX2FuY2VzdHJ5KSB7Ci0JCQlpZiAobXkgKCRjaGlsZCwgJHBhcmVudHMpID0gJGxpbmUgPX4gbS9eLT8oW2EtZjAtOV0rKSAoW2EtZjAtOSBdKykvKSB7Ci0JCQkJZm9yZWFjaCBteSAkcGFyZW50IChzcGxpdCgnICcsICRwYXJlbnRzKSkgeworCQkJaWYgKG15ICgkY2hpbGQsICRwYXJlbnRzKSA9ICRsaW5lID1+IC9eLT8oW2EtZjAtOV0rKSAoW2EtZjAtOSBdKykvKSB7CisJCQkJZm9yZWFjaCBteSAkcGFyZW50IChzcGxpdCgvIC8sICRwYXJlbnRzKSkgewogCQkJCQkkbG9jYWxfYW5jZXN0cnl7JHBhcmVudH0gPSAkY2hpbGQ7CiAJCQkJfQotCQkJfSBlbHNpZiAoISRsaW5lID1+IG0vXihbYS1mMC05XSspLykgewotCQkJCWRpZSAiVW5leHBlY3RlZCBvdXRwdXQgZnJvbSBnaXQgcmV2LWxpc3Q6ICRsaW5lIjsKKwkJCX0gZWxzaWYgKCEkbGluZSA9fiAvXihbYS1mMC05XSspLykgeworCQkJCWRpZSAiVW5leHBlY3RlZCBvdXRwdXQgZnJvbSBnaXQgcmV2LWxpc3Q6ICR7bGluZX1cbiI7CiAJCQl9CiAJCX0KIAkJd2hpbGUgKCRwYXJzZWRfc2hhMSBuZSAkSEVBRF9zaGExKSB7CiAJCQlteSAkY2hpbGQgPSAkbG9jYWxfYW5jZXN0cnl7JHBhcnNlZF9zaGExfTsKIAkJCWlmICghJGNoaWxkKSB7Ci0JCQkJcHJpbnRmIFNUREVSUiAiQ2Fubm90IGZpbmQgYSBwYXRoIGluIGhpc3RvcnkgZnJvbSByZW1vdGUgY29tbWl0IHRvIGxhc3QgY29tbWl0XG4iOworCQkJCXByaW50IHsqU1RERVJSfSAiQ2Fubm90IGZpbmQgYSBwYXRoIGluIGhpc3RvcnkgZnJvbSByZW1vdGUgY29tbWl0IHRvIGxhc3QgY29tbWl0XG4iOwogCQkJCXJldHVybiBlcnJvcl9ub25fZmFzdF9mb3J3YXJkKCRyZW1vdGUpOwogCQkJfQogCQkJcHVzaChAY29tbWl0X3BhaXJzLCBbJHBhcnNlZF9zaGExLCAkY2hpbGRdKTsKQEAgLTEyMDYsMTIgKzExNjcsMTIgQEAKIAl9IGVsc2UgewogCQkjIE5vIHJlbW90ZSBtZWRpYXdpa2kgcmV2aXNpb24uIEV4cG9ydCB0aGUgd2hvbGUKIAkJIyBoaXN0b3J5IChsaW5lYXJpemVkIHdpdGggLS1maXJzdC1wYXJlbnQpCi0JCXByaW50IFNUREVSUiAiV2FybmluZzogbm8gY29tbW9uIGFuY2VzdG9yLCBwdXNoaW5nIGNvbXBsZXRlIGhpc3RvcnlcbiI7Ci0JCW15ICRoaXN0b3J5ID0gcnVuX2dpdCgicmV2LWxpc3QgLS1maXJzdC1wYXJlbnQgLS1jaGlsZHJlbiAkbG9jYWwiKTsKLQkJbXkgQGhpc3RvcnkgPSBzcGxpdCgnXG4nLCAkaGlzdG9yeSk7CisJCXByaW50IHsqU1RERVJSfSAiV2FybmluZzogbm8gY29tbW9uIGFuY2VzdG9yLCBwdXNoaW5nIGNvbXBsZXRlIGhpc3RvcnlcbiI7CisJCW15ICRoaXN0b3J5ID0gcnVuX2dpdCgicmV2LWxpc3QgLS1maXJzdC1wYXJlbnQgLS1jaGlsZHJlbiAke2xvY2FsfSIpOworCQlteSBAaGlzdG9yeSA9IHNwbGl0KC9cbi8sICRoaXN0b3J5KTsKIAkJQGhpc3RvcnkgPSBAaGlzdG9yeVsxLi4kI2hpc3RvcnldOwogCQlmb3JlYWNoIG15ICRsaW5lIChyZXZlcnNlIEBoaXN0b3J5KSB7Ci0JCQlteSBAY29tbWl0X2luZm9fc3BsaXQgPSBzcGxpdCgvIHxcbi8sICRsaW5lKTsKKwkJCW15IEBjb21taXRfaW5mb19zcGxpdCA9IHNwbGl0KC9bIFxuXS8sICRsaW5lKTsKIAkJCXB1c2goQGNvbW1pdF9wYWlycywgXEBjb21taXRfaW5mb19zcGxpdCk7CiAJCX0KIAl9CkBAIC0xMjE5LDEyICsxMTgwLDEyIEBACiAJZm9yZWFjaCBteSAkY29tbWl0X2luZm9fc3BsaXQgKEBjb21taXRfcGFpcnMpIHsKIAkJbXkgJHNoYTFfY2hpbGQgPSBAeyRjb21taXRfaW5mb19zcGxpdH1bMF07CiAJCW15ICRzaGExX2NvbW1pdCA9IEB7JGNvbW1pdF9pbmZvX3NwbGl0fVsxXTsKLQkJbXkgJGRpZmZfaW5mb3MgPSBydW5fZ2l0KCJkaWZmLXRyZWUgLXIgLS1yYXcgLXogJHNoYTFfY2hpbGQgJHNoYTFfY29tbWl0Iik7CisJCW15ICRkaWZmX2luZm9zID0gcnVuX2dpdCgiZGlmZi10cmVlIC1yIC0tcmF3IC16ICR7c2hhMV9jaGlsZH0gJHtzaGExX2NvbW1pdH0iKTsKIAkJIyBUT0RPOiB3ZSBjb3VsZCBkZXRlY3QgcmVuYW1lLCBhbmQgZW5jb2RlIHRoZW0gd2l0aCBhICNyZWRpcmVjdCBvbiB0aGUgd2lraS4KIAkJIyBUT0RPOiBmb3Igbm93LCBpdCdzIGp1c3QgYSBkZWxldGUrYWRkCiAJCW15IEBkaWZmX2luZm9fbGlzdCA9IHNwbGl0KC9cMC8sICRkaWZmX2luZm9zKTsKIAkJIyBLZWVwIHRoZSBzdWJqZWN0IGxpbmUgb2YgdGhlIGNvbW1pdCBtZXNzYWdlIGFzIG1lZGlhd2lraSBjb21tZW50IGZvciB0aGUgcmV2aXNpb24KLQkJbXkgJGNvbW1pdF9tc2cgPSBydW5fZ2l0KCJsb2cgLS1uby13YWxrIC0tZm9ybWF0PVwiJXNcIiAkc2hhMV9jb21taXQiKTsKKwkJbXkgJGNvbW1pdF9tc2cgPSBydW5fZ2l0KHFxKGxvZyAtLW5vLXdhbGsgLS1mb3JtYXQ9IiVzIiAke3NoYTFfY29tbWl0fSkpOwogCQljaG9tcCgkY29tbWl0X21zZyk7CiAJCSMgUHVzaCBldmVyeSBibG9iCiAJCXdoaWxlIChAZGlmZl9pbmZvX2xpc3QpIHsKQEAgLTEyMzYsNyArMTE5Nyw3IEBACiAJCQlteSAkaW5mbyA9IHNoaWZ0KEBkaWZmX2luZm9fbGlzdCk7CiAJCQlteSAkZmlsZSA9IHNoaWZ0KEBkaWZmX2luZm9fbGlzdCk7CiAJCQkoJG13X3JldmlzaW9uLCAkc3RhdHVzKSA9IG13X3B1c2hfZmlsZSgkaW5mbywgJGZpbGUsICRjb21taXRfbXNnLCAkbXdfcmV2aXNpb24pOwotCQkJaWYgKCRzdGF0dXMgZXEgIm5vbi1mYXN0LWZvcndhcmQiKSB7CisJCQlpZiAoJHN0YXR1cyBlcSAnbm9uLWZhc3QtZm9yd2FyZCcpIHsKIAkJCQkjIHdlIG1heSBhbHJlYWR5IGhhdmUgc2VudCBwYXJ0IG9mIHRoZQogCQkJCSMgY29tbWl0IHRvIE1lZGlhV2lraSwgYnV0IGl0J3MgdG9vCiAJCQkJIyBsYXRlIHRvIGNhbmNlbCBpdC4gU3RvcCB0aGUgcHVzaCBpbgpAQCAtMTI0NCwyMiArMTIwNSwyMiBAQAogCQkJCSMgYWNjdXJhdGUgZXJyb3IgbWVzc2FnZS4KIAkJCQlyZXR1cm4gZXJyb3Jfbm9uX2Zhc3RfZm9yd2FyZCgkcmVtb3RlKTsKIAkJCX0KLQkJCWlmICgkc3RhdHVzIG5lICJvayIpIHsKLQkJCQlkaWUoIlVua25vd24gZXJyb3IgZnJvbSBtd19wdXNoX2ZpbGUoKSIpOworCQkJaWYgKCRzdGF0dXMgbmUgJ29rJykgeworCQkJCWRpZSgiVW5rbm93biBlcnJvciBmcm9tIG13X3B1c2hfZmlsZSgpXG4iKTsKIAkJCX0KIAkJfQotCQl1bmxlc3MgKCRkdW1iX3B1c2gpIHsKLQkJCXJ1bl9naXQoIm5vdGVzIC0tcmVmPSRyZW1vdGVuYW1lL21lZGlhd2lraSBhZGQgLWYgLW0gXCJtZWRpYXdpa2lfcmV2aXNpb246ICRtd19yZXZpc2lvblwiICRzaGExX2NvbW1pdCIpOwotCQkJcnVuX2dpdCgidXBkYXRlLXJlZiAtbSBcIkdpdC1NZWRpYVdpa2kgcHVzaFwiIHJlZnMvbWVkaWF3aWtpLyRyZW1vdGVuYW1lL21hc3RlciAkc2hhMV9jb21taXQgJHNoYTFfY2hpbGQiKTsKKwkJaWYgKCEkZHVtYl9wdXNoKSB7CisJCQlydW5fZ2l0KHFxKG5vdGVzIC0tcmVmPSR7cmVtb3RlbmFtZX0vbWVkaWF3aWtpIGFkZCAtZiAtbSAibWVkaWF3aWtpX3JldmlzaW9uOiAke213X3JldmlzaW9ufSIgJHtzaGExX2NvbW1pdH0pKTsKKwkJCXJ1bl9naXQocXEodXBkYXRlLXJlZiAtbSAiR2l0LU1lZGlhV2lraSBwdXNoIiByZWZzL21lZGlhd2lraS8ke3JlbW90ZW5hbWV9L21hc3RlciAke3NoYTFfY29tbWl0fSAke3NoYTFfY2hpbGR9KSk7CiAJCX0KIAl9CiAKLQlwcmludCBTVERPVVQgIm9rICRyZW1vdGVcbiI7CisJcHJpbnQgeypTVERPVVR9ICJvayAke3JlbW90ZX1cbiI7CiAJcmV0dXJuIDE7CiB9CiAKIHN1YiBnZXRfYWxsb3dlZF9maWxlX2V4dGVuc2lvbnMgewotCW13X2Nvbm5lY3RfbWF5YmUoKTsKKwkkbWVkaWF3aWtpID0gY29ubmVjdF9tYXliZSgkbWVkaWF3aWtpLCAkcmVtb3RlbmFtZSwgJHVybCk7CiAKIAlteSAkcXVlcnkgPSB7CiAJCWFjdGlvbiA9PiAncXVlcnknLApAQCAtMTI2Nyw4ICsxMjI4LDggQEAKIAkJc2lwcm9wID0+ICdmaWxlZXh0ZW5zaW9ucycKIAkJfTsKIAlteSAkcmVzdWx0ID0gJG1lZGlhd2lraS0+YXBpKCRxdWVyeSk7Ci0JbXkgQGZpbGVfZXh0ZW5zaW9ucz0gbWFwICRfLT57ZXh0fSxAeyRyZXN1bHQtPntxdWVyeX0tPntmaWxlZXh0ZW5zaW9uc319OwotCW15ICVoYXNoRmlsZSA9IG1hcCB7JF8gPT4gMX1AZmlsZV9leHRlbnNpb25zOworCW15IEBmaWxlX2V4dGVuc2lvbnMgPSBtYXAgeyAkXy0+e2V4dH19IEB7JHJlc3VsdC0+e3F1ZXJ5fS0+e2ZpbGVleHRlbnNpb25zfX07CisJbXkgJWhhc2hGaWxlID0gbWFwIHsgJF8gPT4gMSB9IEBmaWxlX2V4dGVuc2lvbnM7CiAKIAlyZXR1cm4gJWhhc2hGaWxlOwogfQpAQCAtMTI4MywxNSArMTI0NCwxNSBAQAogIyBSZXR1cm4gTWVkaWFXaWtpIGlkIGZvciBhIGNhbm9uaWNhbCBuYW1lc3BhY2UgbmFtZS4KICMgRXguOiAiRmlsZSIsICJQcm9qZWN0Ii4KIHN1YiBnZXRfbXdfbmFtZXNwYWNlX2lkIHsKLQltd19jb25uZWN0X21heWJlKCk7CisJJG1lZGlhd2lraSA9IGNvbm5lY3RfbWF5YmUoJG1lZGlhd2lraSwgJHJlbW90ZW5hbWUsICR1cmwpOwogCW15ICRuYW1lID0gc2hpZnQ7CiAKIAlpZiAoIWV4aXN0cyAkbmFtZXNwYWNlX2lkeyRuYW1lfSkgewogCQkjIExvb2sgYXQgY29uZmlndXJhdGlvbiBmaWxlLCBpZiB0aGUgcmVjb3JkIGZvciB0aGF0IG5hbWVzcGFjZSBpcwogCQkjIGFscmVhZHkgY2FjaGVkLiBOYW1lc3BhY2VzIGFyZSBzdG9yZWQgaW4gZm9ybToKIAkJIyAiTmFtZV9vZl9uYW1lc3BhY2U6SWRfbmFtZXNwYWNlIiwgZXguOiAiRmlsZTo2Ii4KLQkJbXkgQHRlbXAgPSBzcGxpdCgvW1xuXS8sIHJ1bl9naXQoImNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLiIKLQkJCQkJCS4gJHJlbW90ZW5hbWUgLiIubmFtZXNwYWNlQ2FjaGUiKSk7CisJCW15IEB0ZW1wID0gc3BsaXQoL1xuLywKKwkJCQkgcnVuX2dpdCgiY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuJHtyZW1vdGVuYW1lfS5uYW1lc3BhY2VDYWNoZSIpKTsKIAkJY2hvbXAoQHRlbXApOwogCQlmb3JlYWNoIG15ICRucyAoQHRlbXApIHsKIAkJCW15ICgkbiwgJGlkKSA9IHNwbGl0KC86LywgJG5zKTsKQEAgLTEzMDUsNyArMTI2Niw3IEBACiAJfQogCiAJaWYgKCFleGlzdHMgJG5hbWVzcGFjZV9pZHskbmFtZX0pIHsKLQkJcHJpbnQgU1RERVJSICJOYW1lc3BhY2UgJG5hbWUgbm90IGZvdW5kIGluIGNhY2hlLCBxdWVyeWluZyB0aGUgd2lraSAuLi5cbiI7CisJCXByaW50IHsqU1RERVJSfSAiTmFtZXNwYWNlICR7bmFtZX0gbm90IGZvdW5kIGluIGNhY2hlLCBxdWVyeWluZyB0aGUgd2lraSAuLi5cbiI7CiAJCSMgTlMgbm90IGZvdW5kID0+IGdldCBuYW1lc3BhY2UgaWQgZnJvbSBNVyBhbmQgc3RvcmUgaXQgaW4KIAkgICAgICAgICMgY29uZmlndXJhdGlvbiBmaWxlLgogCSAgICAgICAgbXkgJHF1ZXJ5ID0gewpAQCAtMTMyOSw4ICsxMjkwLDggQEAKIAlteSAkbnMgPSAkbmFtZXNwYWNlX2lkeyRuYW1lfTsKIAlteSAkaWQ7CiAKLQl1bmxlc3MgKGRlZmluZWQgJG5zKSB7Ci0JCXByaW50IFNUREVSUiAiTm8gc3VjaCBuYW1lc3BhY2UgJG5hbWUgb24gTWVkaWFXaWtpLlxuIjsKKwlpZiAoIWRlZmluZWQgJG5zKSB7CisJCXByaW50IHsqU1RERVJSfSAiTm8gc3VjaCBuYW1lc3BhY2UgJHtuYW1lfSBvbiBNZWRpYVdpa2kuXG4iOwogCQkkbnMgPSB7aXNfbmFtZXNwYWNlID0+IDB9OwogCQkkbmFtZXNwYWNlX2lkeyRuYW1lfSA9ICRuczsKIAl9CkBAIC0xMzQ0LDE1ICsxMzA1LDE1IEBACiAKIAkjIFN0b3JlIGV4cGxpY2l0ZWx5IHJlcXVlc3RlZCBuYW1lc3BhY2VzIG9uIGRpc2sKIAlpZiAoIWV4aXN0cyAkY2FjaGVkX213X25hbWVzcGFjZV9pZHskbmFtZX0pIHsKLQkJcnVuX2dpdCgiY29uZmlnIC0tYWRkIHJlbW90ZS4iLiAkcmVtb3RlbmFtZQotCQkJLiIubmFtZXNwYWNlQ2FjaGUgXCIiLiAkbmFtZSAuIjoiLiAkc3RvcmVfaWQgLiJcIiIpOworCQlydW5fZ2l0KHFxKGNvbmZpZyAtLWFkZCByZW1vdGUuJHtyZW1vdGVuYW1lfS5uYW1lc3BhY2VDYWNoZSAiJHtuYW1lfToke3N0b3JlX2lkfSIpKTsKIAkJJGNhY2hlZF9td19uYW1lc3BhY2VfaWR7JG5hbWV9ID0gMTsKIAl9CiAJcmV0dXJuICRpZDsKIH0KIAogc3ViIGdldF9td19uYW1lc3BhY2VfaWRfZm9yX3BhZ2UgewotCWlmIChteSAoJG5hbWVzcGFjZSkgPSAkX1swXSA9fiAvXihbXjpdKik6LykgeworCW15ICRuYW1lc3BhY2UgPSBzaGlmdDsKKwlpZiAoJG5hbWVzcGFjZSA9fiAvXihbXjpdKik6LykgewogCQlyZXR1cm4gZ2V0X213X25hbWVzcGFjZV9pZCgkbmFtZXNwYWNlKTsKIAl9IGVsc2UgewogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L3Rlc3QtZ2l0bXctbGliLnNoIGIvY29udHJpYi9tdy10by1naXQvdC90ZXN0LWdpdG13LWxpYi5zaAppbmRleCAzYjJjZmFjLi5jYTY4NjBmIDEwMDc1NQotLS0gYS9jb250cmliL213LXRvLWdpdC90L3Rlc3QtZ2l0bXctbGliLnNoCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdGVzdC1naXRtdy1saWIuc2gKQEAgLTYyLDEyICs2Miw4IEBACiAJCXRlc3RfZG9uZQogCWZpCiAKLQlpZiBbICEgLWYgIiRHSVRfQlVJTERfRElSIi9naXQtcmVtb3RlLW1lZGlhd2lraSBdOwotCXRoZW4KLQkJZWNobyAiTm8gcmVtb3RlIG1lZGlhd2lraSBmb3IgZ2l0IGZvdW5kLiBDb3B5aW5nIGl0IGluIGdpdCIKLQkJZWNobyAiY3AgJEdJVF9CVUlMRF9ESVIvY29udHJpYi9tdy10by1naXQvZ2l0LXJlbW90ZS1tZWRpYXdpa2kgJEdJVF9CVUlMRF9ESVIvIgotCQlsbiAtcyAiJEdJVF9CVUlMRF9ESVIiL2NvbnRyaWIvbXctdG8tZ2l0L2dpdC1yZW1vdGUtbWVkaWF3aWtpICIkR0lUX0JVSUxEX0RJUiIKLQlmaQorCUdJVF9FWEVDX1BBVEg9JChjZCAiJChkaXJuYW1lICIkMCIpIiAmJiBjZCAiLi4vLi4iICYmIHB3ZCkKKwlQQVRIPSIkR0lUX0VYRUNfUEFUSCInL2Jpbi13cmFwcGVyOiciJFBBVEgiCiAKIAlpZiBbICEgLWQgIiRXSUtJX0RJUl9JTlNULyRXSUtJX0RJUl9OQU1FIiBdOwogCXRoZW4KQEAgLTMzNiwyMCArMzMyLDIxIEBACiAJZmkKIAogCSMgRmV0Y2ggTWVkaWFXaWtpJ3MgYXJjaGl2ZSBpZiBub3QgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBUTVAgZGlyZWN0b3J5CisJTVdfRklMRU5BTUU9Im1lZGlhd2lraS0kTVdfVkVSU0lPTl9NQUpPUi4kTVdfVkVSU0lPTl9NSU5PUi50YXIuZ3oiCiAJY2QgIiRUTVAiCi0JaWYgWyAhIC1mICIkTVdfVkVSU0lPTi50YXIuZ3oiIF0gOyB0aGVuCi0JCWVjaG8gIkRvd25sb2FkaW5nICRNV19WRVJTSU9OIHNvdXJjZXMgLi4uIgotCQl3Z2V0ICJodHRwOi8vZG93bmxvYWQud2lraW1lZGlhLm9yZy9tZWRpYXdpa2kvMS4xOS9tZWRpYXdpa2ktMS4xOS4wLnRhci5neiIgfHwKKwlpZiBbICEgLWYgJE1XX0ZJTEVOQU1FIF0gOyB0aGVuCisJCWVjaG8gIkRvd25sb2FkaW5nICRNV19WRVJTSU9OX01BSk9SLiRNV19WRVJTSU9OX01JTk9SIHNvdXJjZXMgLi4uIgorCQl3Z2V0ICJodHRwOi8vZG93bmxvYWQud2lraW1lZGlhLm9yZy9tZWRpYXdpa2kvJE1XX1ZFUlNJT05fTUFKT1IvJE1XX0ZJTEVOQU1FIiB8fAogCQkJZXJyb3IgIlVuYWJsZSB0byBkb3dubG9hZCAiXAotCQkJImh0dHA6Ly9kb3dubG9hZC53aWtpbWVkaWEub3JnL21lZGlhd2lraS8xLjE5LyJcCi0JCQkibWVkaWF3aWtpLTEuMTkuMC50YXIuZ3ouICJcCisJCQkiaHR0cDovL2Rvd25sb2FkLndpa2ltZWRpYS5vcmcvbWVkaWF3aWtpLyRNV19WRVJTSU9OX01BSk9SLyJcCisJCQkiJE1XX0ZJTEVOQU1FLiAiXAogCQkJIlBsZWFzZSBmaXggeW91ciBjb25uZWN0aW9uIGFuZCBsYXVuY2ggdGhlIHNjcmlwdCBhZ2Fpbi4iCi0JCWVjaG8gIiRNV19WRVJTSU9OLnRhci5neiBkb3dubG9hZGVkIGluIGBwd2RgLiAiXAorCQllY2hvICIkTVdfRklMRU5BTUUgZG93bmxvYWRlZCBpbiBgcHdkYC4gIlwKIAkJCSJZb3UgY2FuIGRlbGV0ZSBpdCBsYXRlciBpZiB5b3Ugd2FudC4iCiAJZWxzZQotCQllY2hvICJSZXVzaW5nIGV4aXN0aW5nICRNV19WRVJTSU9OLnRhci5neiBkb3dubG9hZGVkIGluIGBwd2RgLiIKKwkJZWNobyAiUmV1c2luZyBleGlzdGluZyAkTVdfRklMRU5BTUUgZG93bmxvYWRlZCBpbiBgcHdkYC4iCiAJZmkKLQlhcmNoaXZlX2Fic19wYXRoPSQocHdkKS8iJE1XX1ZFUlNJT04udGFyLmd6IgorCWFyY2hpdmVfYWJzX3BhdGg9JChwd2QpLyRNV19GSUxFTkFNRQogCWNkICIkV0lLSV9ESVJfSU5TVC8kV0lLSV9ESVJfTkFNRS8iIHx8CiAJCWVycm9yICJjYW4ndCBjZCB0byAkV0lLSV9ESVJfSU5TVC8kV0lLSV9ESVJfTkFNRS8iCiAJdGFyIHh6ZiAiJGFyY2hpdmVfYWJzX3BhdGgiIC0tc3RyaXAtY29tcG9uZW50cz0xIHx8CkBAIC00MzEsNSArNDI4LDUgQEAKIAkjIERlbGV0ZSB0aGUgd2lraSdzIFNRTGl0ZSBkYXRhYmFzZQogCXJtIC1mICIkVE1QLyREQl9GSUxFIiB8fCBlcnJvciAiRGF0YWJhc2UgJFRNUC8kREJfRklMRSBjb3VsZCBub3QgYmUgZGVsZXRlZC4iCiAJcm0gLWYgIiRGSUxFU19GT0xERVIvJERCX0ZJTEUiCi0Jcm0gLXJmICIkVE1QLyRNV19WRVJTSU9OIgorCXJtIC1yZiAiJFRNUC9tZWRpYXdpa2ktJE1XX1ZFUlNJT05fTUFKT1IuJE1XX1ZFUlNJT05fTUlOT1IudGFyLmd6IgogfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvdC90ZXN0LmNvbmZpZyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdGVzdC5jb25maWcKaW5kZXggOTU4YjM3Yi4uNGNmZWJlOSAxMDA2NDQKLS0tIGEvY29udHJpYi9tdy10by1naXQvdC90ZXN0LmNvbmZpZworKysgYi9jb250cmliL213LXRvLWdpdC90L3Rlc3QuY29uZmlnCkBAIC0zMCw2ICszMCw4IEBACiAKICMgVGhlIHZhcmlhYmxlcyBiZWxvdyBhcmUgdXNlZCBieSB0aGUgc2NyaXB0IHRvIGluc3RhbGwgYSB3aWtpLgogIyBZb3Ugc2hvdWxkIG5vdCBtb2RpZnkgdGhlc2UgdW5sZXNzIHlvdSBhcmUgbW9kaWZ5aW5nIHRoZSBzY3JpcHQgaXRzZWxmLgotTVdfVkVSU0lPTj1tZWRpYXdpa2ktMS4xOS4wCisjIHRlc3RlZCB2ZXJzaW9uczogMS4xOS5YIC0+IDEuMjEuMQorTVdfVkVSU0lPTl9NQUpPUj0xLjIxCitNV19WRVJTSU9OX01JTk9SPTEKIEZJTEVTX0ZPTERFUj1pbnN0YWxsLXdpa2kKIERCX0lOU1RBTExfU0NSSVBUPWRiX2luc3RhbGwucGhwCmRpZmYgLS1naXQgYS9jb250cmliL3BhdGNoZXMvZG9jYm9vay14c2wtbWFucGFnZXMtY2hhcm1hcC5wYXRjaCBiL2NvbnRyaWIvcGF0Y2hlcy9kb2Nib29rLXhzbC1tYW5wYWdlcy1jaGFybWFwLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmIwOGI0Li4wMDAwMDAwCi0tLSBhL2NvbnRyaWIvcGF0Y2hlcy9kb2Nib29rLXhzbC1tYW5wYWdlcy1jaGFybWFwLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotRnJvbTogSXNtYWlsIETDtm5tZXogPGlzbWFpbEBwYXJkdXMub3JnLnRyPgotCi1UcnlpbmcgdG8gYnVpbGQgdGhlIGRvY3VtZW50YXRpb24gd2l0aCBkb2Nib29rLXhzbCAxLjczIG1heSByZXN1bHQgaW4KLXRoZSBmb2xsb3dpbmcgZXJyb3IuICBUaGlzIHBhdGNoIGZpeGVzIGl0LgotCi0kIHhtbHRvIC1tIGNhbGxvdXRzLnhzbCBtYW4gZ2l0LWFkZC54bWwKLXJ1bnRpbWUgZXJyb3I6IGZpbGUKLWZpbGU6Ly8vdXNyL3NoYXJlL3NnbWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMtMS43My4wL21hbnBhZ2VzL290aGVyLnhzbCBsaW5lCi0xMjkgZWxlbWVudCBjYWxsLXRlbXBsYXRlCi1UaGUgY2FsbGVkIHRlbXBsYXRlICdyZWFkLWNoYXJhY3Rlci1tYXAnIHdhcyBub3QgZm91bmQuCi0KLS0tLSBkb2Nib29rLXhzbC0xLjczLjAvbWFucGFnZXMvZG9jYm9vay54c2wubWFucGFnZXMtY2hhcm1hcAkyMDA3LTA3LTIzIDE2OjI0OjIzLjAwMDAwMDAwMCArMDEwMAotKysrIGRvY2Jvb2steHNsLTEuNzMuMC9tYW5wYWdlcy9kb2Nib29rLnhzbAkyMDA3LTA3LTIzIDE2OjI1OjE2LjAwMDAwMDAwMCArMDEwMAotQEAgLTM3LDYgKzM3LDcgQEAKLSAgIDx4c2w6aW5jbHVkZSBocmVmPSJsaXN0cy54c2wiLz4KLSAgIDx4c2w6aW5jbHVkZSBocmVmPSJlbmRub3Rlcy54c2wiLz4KLSAgIDx4c2w6aW5jbHVkZSBocmVmPSJ0YWJsZS54c2wiLz4KLSsgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi9jb21tb24vY2hhcm1hcC54c2wiLz4KLQotICAgPCEtLSAqIHdlIHJlbmFtZSB0aGUgZm9sbG93aW5nIGp1c3QgdG8gYXZvaWQgdXNpbmcgcGFyYW1zIHdpdGggIm1hbiIgLS0+Ci0gICA8IS0tICogcHJlZml4ZXMgaW4gdGhlIHRhYmxlLnhzbCBzdHlsZXNoZWV0IChiZWNhdXNlIHRoYXQgc3R5bGVzaGVldCAtLT4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcmVtb3RlLWhlbHBlcnMvZ2l0LXJlbW90ZS1ienIgYi9jb250cmliL3JlbW90ZS1oZWxwZXJzL2dpdC1yZW1vdGUtYnpyCmluZGV4IDEwMzAwYzYuLmMzYTNjYWMgMTAwNzU1Ci0tLSBhL2NvbnRyaWIvcmVtb3RlLWhlbHBlcnMvZ2l0LXJlbW90ZS1ienIKKysrIGIvY29udHJpYi9yZW1vdGUtaGVscGVycy9naXQtcmVtb3RlLWJ6cgpAQCAtMTE2LDcgKzExNiwxMCBAQAogICAgICAgICBzZWxmLmxhc3RfbWFyayA9IG1hcmsKIAogICAgIGRlZiBnZXRfdGlwKHNlbGYsIGJyYW5jaCk6Ci0gICAgICAgIHJldHVybiBzZWxmLnRpcHMuZ2V0KGJyYW5jaCwgTm9uZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHN0cihzZWxmLnRpcHNbYnJhbmNoXSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBzZXRfdGlwKHNlbGYsIGJyYW5jaCwgdGlwKToKICAgICAgICAgc2VsZi50aXBzW2JyYW5jaF0gPSB0aXAKQEAgLTI3OCw3ICsyODEsNyBAQAogICAgIHJlZiA9ICclcy9oZWFkcy8lcycgJSAocHJlZml4LCBuYW1lKQogICAgIHRpcCA9IG1hcmtzLmdldF90aXAobmFtZSkKIAotICAgIGJyYW5jaCA9IGJ6cmxpYi5icmFuY2guQnJhbmNoLm9wZW4oYnJhbmNoZXNbbmFtZV0pCisgICAgYnJhbmNoID0gZ2V0X3JlbW90ZV9icmFuY2gobmFtZSkKICAgICByZXBvID0gYnJhbmNoLnJlcG9zaXRvcnkKIAogICAgIGJyYW5jaC5sb2NrX3JlYWQoKQpAQCAtNTkwLDcgKzU5Myw3IEBACiAKICAgICBpZiByZWYuc3RhcnRzd2l0aCgncmVmcy9oZWFkcy8nKToKICAgICAgICAgbmFtZSA9IHJlZltsZW4oJ3JlZnMvaGVhZHMvJyk6XQotICAgICAgICBicmFuY2ggPSBienJsaWIuYnJhbmNoLkJyYW5jaC5vcGVuKGJyYW5jaGVzW25hbWVdKQorICAgICAgICBicmFuY2ggPSBnZXRfcmVtb3RlX2JyYW5jaChuYW1lKQogICAgIGVsc2U6CiAgICAgICAgIGRpZSgndW5rbm93biByZWYnKQogCkBAIC02MjEsNyArNjI0LDcgQEAKICAgICAgICAgICAgIG1hcmsgPSBpbnQobWFya19yZWZbMTpdKQogICAgICAgICAgICAgZiA9IHsgJ21vZGUnIDogbSwgJ21hcmsnIDogbWFyayB9CiAgICAgICAgIGVsaWYgcGFyc2VyLmNoZWNrKCdEJyk6Ci0gICAgICAgICAgICB0LCBwYXRoID0gbGluZS5zcGxpdCgnICcpCisgICAgICAgICAgICB0LCBwYXRoID0gbGluZS5zcGxpdCgnICcsIDEpCiAgICAgICAgICAgICBmID0geyAnZGVsZXRlZCcgOiBUcnVlIH0KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGRpZSgnVW5rbm93biBmaWxlIGNvbW1hbmQ6ICVzJyAlIGxpbmUpCkBAIC02OTIsNyArNjk1LDcgQEAKICAgICBmb3IgcmVmLCByZXZpZCBpbiBwYXJzZWRfcmVmcy5pdGVyaXRlbXMoKToKICAgICAgICAgaWYgcmVmLnN0YXJ0c3dpdGgoJ3JlZnMvaGVhZHMvJyk6CiAgICAgICAgICAgICBuYW1lID0gcmVmW2xlbigncmVmcy9oZWFkcy8nKTpdCi0gICAgICAgICAgICBicmFuY2ggPSBienJsaWIuYnJhbmNoLkJyYW5jaC5vcGVuKGJyYW5jaGVzW25hbWVdKQorICAgICAgICAgICAgYnJhbmNoID0gZ2V0X3JlbW90ZV9icmFuY2gobmFtZSkKICAgICAgICAgICAgIGJyYW5jaC5nZW5lcmF0ZV9yZXZpc2lvbl9oaXN0b3J5KHJldmlkLCBtYXJrcy5nZXRfdGlwKG5hbWUpKQogCiAgICAgICAgICAgICBpZiBuYW1lIGluIHBlZXJzOgpAQCAtNzQ5LDcgKzc1Miw3IEBACiAgICAgICAgICAgICBtYXN0ZXJfYnJhbmNoID0gbmFtZQogICAgICAgICBwcmludCAiPyByZWZzL2hlYWRzLyVzIiAlIG5hbWUKIAotICAgIGJyYW5jaCA9IGJ6cmxpYi5icmFuY2guQnJhbmNoLm9wZW4oYnJhbmNoZXNbbWFzdGVyX2JyYW5jaF0pCisgICAgYnJhbmNoID0gZ2V0X3JlbW90ZV9icmFuY2gobWFzdGVyX2JyYW5jaCkKICAgICBicmFuY2gubG9ja19yZWFkKCkKICAgICBmb3IgdGFnLCByZXZpZCBpbiBicmFuY2gudGFncy5nZXRfdGFnX2RpY3QoKS5pdGVtcygpOgogICAgICAgICB0cnk6CkBAIC03NjUsMzAgKzc2OCw0MCBAQAogICAgIHByaW50ICJAcmVmcy9oZWFkcy8lcyBIRUFEIiAlIG1hc3Rlcl9icmFuY2gKICAgICBwcmludAogCi1kZWYgZ2V0X3JlbW90ZV9icmFuY2gob3JpZ2luLCByZW1vdGVfYnJhbmNoLCBuYW1lKToKLSAgICBnbG9iYWwgZGlybmFtZSwgcGVlcnMKK2RlZiBjbG9uZShwYXRoLCByZW1vdGVfYnJhbmNoKToKKyAgICB0cnk6CisgICAgICAgIGJkaXIgPSBienJsaWIuYnpyZGlyLkJ6ckRpci5jcmVhdGUocGF0aCkKKyAgICBleGNlcHQgYnpybGliLmVycm9ycy5BbHJlYWR5Q29udHJvbERpckVycm9yOgorICAgICAgICBiZGlyID0gYnpybGliLmJ6cmRpci5CenJEaXIub3BlbihwYXRoKQorICAgIHJlcG8gPSBiZGlyLmZpbmRfcmVwb3NpdG9yeSgpCisgICAgcmVwby5mZXRjaChyZW1vdGVfYnJhbmNoLnJlcG9zaXRvcnkpCisgICAgcmV0dXJuIHJlbW90ZV9icmFuY2guc3Byb3V0KGJkaXIsIHJlcG9zaXRvcnk9cmVwbykKKworZGVmIGdldF9yZW1vdGVfYnJhbmNoKG5hbWUpOgorICAgIGdsb2JhbCBkaXJuYW1lLCBicmFuY2hlcworCisgICAgcmVtb3RlX2JyYW5jaCA9IGJ6cmxpYi5icmFuY2guQnJhbmNoLm9wZW4oYnJhbmNoZXNbbmFtZV0pCisgICAgaWYgaXNpbnN0YW5jZShyZW1vdGVfYnJhbmNoLnVzZXJfdHJhbnNwb3J0LCBienJsaWIudHJhbnNwb3J0LmxvY2FsLkxvY2FsVHJhbnNwb3J0KToKKyAgICAgICAgcmV0dXJuIHJlbW90ZV9icmFuY2gKIAogICAgIGJyYW5jaF9wYXRoID0gb3MucGF0aC5qb2luKGRpcm5hbWUsICdjbG9uZScsIG5hbWUpCi0gICAgaWYgb3MucGF0aC5leGlzdHMoYnJhbmNoX3BhdGgpOgorCisgICAgdHJ5OgorICAgICAgICBicmFuY2ggPSBienJsaWIuYnJhbmNoLkJyYW5jaC5vcGVuKGJyYW5jaF9wYXRoKQorICAgIGV4Y2VwdCBienJsaWIuZXJyb3JzLk5vdEJyYW5jaEVycm9yOgorICAgICAgICAjIGNsb25lCisgICAgICAgIGJyYW5jaCA9IGNsb25lKGJyYW5jaF9wYXRoLCByZW1vdGVfYnJhbmNoKQorICAgIGVsc2U6CiAgICAgICAgICMgcHVsbAotICAgICAgICBkID0gYnpybGliLmJ6cmRpci5CenJEaXIub3BlbihicmFuY2hfcGF0aCkKLSAgICAgICAgYnJhbmNoID0gZC5vcGVuX2JyYW5jaCgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGJyYW5jaC5wdWxsKHJlbW90ZV9icmFuY2gsIFtdLCBOb25lLCBGYWxzZSkKKyAgICAgICAgICAgIGJyYW5jaC5wdWxsKHJlbW90ZV9icmFuY2gsIG92ZXJ3cml0ZT1UcnVlKQogICAgICAgICBleGNlcHQgYnpybGliLmVycm9ycy5EaXZlcmdlZEJyYW5jaGVzOgogICAgICAgICAgICAgIyB1c2UgcmVtb3RlIGJyYW5jaCBmb3Igbm93CiAgICAgICAgICAgICByZXR1cm4gcmVtb3RlX2JyYW5jaAotICAgIGVsc2U6Ci0gICAgICAgICMgY2xvbmUKLSAgICAgICAgZCA9IG9yaWdpbi5zcHJvdXQoYnJhbmNoX3BhdGgsIE5vbmUsCi0gICAgICAgICAgICAgICAgaGFyZGxpbms9VHJ1ZSwgY3JlYXRlX3RyZWVfaWZfbG9jYWw9RmFsc2UsCi0gICAgICAgICAgICAgICAgZm9yY2VfbmV3X3JlcG89RmFsc2UsCi0gICAgICAgICAgICAgICAgc291cmNlX2JyYW5jaD1yZW1vdGVfYnJhbmNoKQotICAgICAgICBicmFuY2ggPSBkLm9wZW5fYnJhbmNoKCkKIAogICAgIHJldHVybiBicmFuY2gKIAotZGVmIGZpbmRfYnJhbmNoZXMocmVwbywgd2FudGVkKToKK2RlZiBmaW5kX2JyYW5jaGVzKHJlcG8pOgogICAgIHRyYW5zcG9ydCA9IHJlcG8uYnpyZGlyLnJvb3RfdHJhbnNwb3J0CiAKICAgICBmb3IgZm4gaW4gdHJhbnNwb3J0Lml0ZXJfZmlsZXNfcmVjdXJzaXZlKCk6CkBAIC03OTksMTYgKzgxMiwxMyBAQAogICAgICAgICBuYW1lID0gbmFtZSBpZiBuYW1lICE9ICcnIGVsc2UgJ21hc3RlcicKICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgnLycsICcrJykKIAotICAgICAgICBpZiB3YW50ZWQgYW5kIG5vdCBuYW1lIGluIHdhbnRlZDoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY3VyID0gdHJhbnNwb3J0LmNsb25lKHN1YmRpcikKICAgICAgICAgICAgIGJyYW5jaCA9IGJ6cmxpYi5icmFuY2guQnJhbmNoLm9wZW5fZnJvbV90cmFuc3BvcnQoY3VyKQogICAgICAgICBleGNlcHQgYnpybGliLmVycm9ycy5Ob3RCcmFuY2hFcnJvcjoKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB5aWVsZCBuYW1lLCBicmFuY2gKKyAgICAgICAgICAgIHlpZWxkIG5hbWUsIGJyYW5jaC5iYXNlCiAKIGRlZiBnZXRfcmVwbyh1cmwsIGFsaWFzKToKICAgICBnbG9iYWwgZGlybmFtZSwgcGVlciwgYnJhbmNoZXMKQEAgLTg0MSw0NCArODUxLDM1IEBACiAgICAgICAgICAgICBleGNlcHQgYnpybGliLmVycm9ycy5Ob1JlcG9zaXRvcnlQcmVzZW50OgogICAgICAgICAgICAgICAgIHBhc3MKIAotICAgIHRyeToKLSAgICAgICAgcmVwbyA9IG9yaWdpbi5vcGVuX3JlcG9zaXRvcnkoKQotICAgICAgICBpZiBub3QgcmVwby51c2VyX3RyYW5zcG9ydC5saXN0YWJsZSgpOgotICAgICAgICAgICAgIyB0aGlzIHJlcG9zaXRvcnkgaXMgbm90IHVzYWJsZSBmb3IgdXMKLSAgICAgICAgICAgIHJhaXNlIGJ6cmxpYi5lcnJvcnMuTm9SZXBvc2l0b3J5UHJlc2VudChyZXBvLmJ6cmRpcikKLSAgICBleGNlcHQgYnpybGliLmVycm9ycy5Ob1JlcG9zaXRvcnlQcmVzZW50OgotICAgICAgICAjIGJyYW5jaAorICAgIHdhbnRlZCA9IGdldF9jb25maWcoJ3JlbW90ZS1ienIuYnJhbmNoZXMnKS5yc3RyaXAoKS5zcGxpdCgnLCAnKQorICAgICMgc3R1cGlkIHB5dGhvbgorICAgIHdhbnRlZCA9IFtlIGZvciBlIGluIHdhbnRlZCBpZiBlXQogCi0gICAgICAgIG5hbWUgPSAnbWFzdGVyJwotICAgICAgICByZW1vdGVfYnJhbmNoID0gb3JpZ2luLm9wZW5fYnJhbmNoKCkKKyAgICBpZiBub3Qgd2FudGVkOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXBvID0gb3JpZ2luLm9wZW5fcmVwb3NpdG9yeSgpCisgICAgICAgICAgICBpZiBub3QgcmVwby51c2VyX3RyYW5zcG9ydC5saXN0YWJsZSgpOgorICAgICAgICAgICAgICAgICMgdGhpcyByZXBvc2l0b3J5IGlzIG5vdCB1c2FibGUgZm9yIHVzCisgICAgICAgICAgICAgICAgcmFpc2UgYnpybGliLmVycm9ycy5Ob1JlcG9zaXRvcnlQcmVzZW50KHJlcG8uYnpyZGlyKQorICAgICAgICBleGNlcHQgYnpybGliLmVycm9ycy5Ob1JlcG9zaXRvcnlQcmVzZW50OgorICAgICAgICAgICAgd2FudGVkID0gWydtYXN0ZXInXQogCi0gICAgICAgIGlmIG5vdCBpc19sb2NhbDoKLSAgICAgICAgICAgIHBlZXJzW25hbWVdID0gcmVtb3RlX2JyYW5jaC5iYXNlCi0gICAgICAgICAgICBicmFuY2ggPSBnZXRfcmVtb3RlX2JyYW5jaChvcmlnaW4sIHJlbW90ZV9icmFuY2gsIG5hbWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBicmFuY2ggPSByZW1vdGVfYnJhbmNoCisgICAgaWYgd2FudGVkOgorICAgICAgICBkZWYgbGlzdF93YW50ZWQodXJsLCB3YW50ZWQpOgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gd2FudGVkOgorICAgICAgICAgICAgICAgIHN1YmRpciA9IG5hbWUgaWYgbmFtZSAhPSAnbWFzdGVyJyBlbHNlICcnCisgICAgICAgICAgICAgICAgeWllbGQgbmFtZSwgYnpybGliLnVybHV0aWxzLmpvaW4odXJsLCBzdWJkaXIpCiAKLSAgICAgICAgYnJhbmNoZXNbbmFtZV0gPSBicmFuY2guYmFzZQotCi0gICAgICAgIHJldHVybiBicmFuY2gucmVwb3NpdG9yeQorICAgICAgICBicmFuY2hfbGlzdCA9IGxpc3Rfd2FudGVkKHVybCwgd2FudGVkKQogICAgIGVsc2U6Ci0gICAgICAgICMgcmVwb3NpdG9yeQorICAgICAgICBicmFuY2hfbGlzdCA9IGZpbmRfYnJhbmNoZXMocmVwbykKIAotICAgICAgICB3YW50ZWQgPSBnZXRfY29uZmlnKCdyZW1vdGUtYnpyLmJyYW5jaGVzJykucnN0cmlwKCkuc3BsaXQoJywgJykKLSAgICAgICAgIyBzdHVwaWQgcHl0aG9uCi0gICAgICAgIHdhbnRlZCA9IFtlIGZvciBlIGluIHdhbnRlZCBpZiBlXQorICAgIGZvciBuYW1lLCB1cmwgaW4gYnJhbmNoX2xpc3Q6CisgICAgICAgIGlmIG5vdCBpc19sb2NhbDoKKyAgICAgICAgICAgIHBlZXJzW25hbWVdID0gdXJsCisgICAgICAgIGJyYW5jaGVzW25hbWVdID0gdXJsCiAKLSAgICAgICAgZm9yIG5hbWUsIHJlbW90ZV9icmFuY2ggaW4gZmluZF9icmFuY2hlcyhyZXBvLCB3YW50ZWQpOgotCi0gICAgICAgICAgICBpZiBub3QgaXNfbG9jYWw6Ci0gICAgICAgICAgICAgICAgcGVlcnNbbmFtZV0gPSByZW1vdGVfYnJhbmNoLmJhc2UKLSAgICAgICAgICAgICAgICBicmFuY2ggPSBnZXRfcmVtb3RlX2JyYW5jaChvcmlnaW4sIHJlbW90ZV9icmFuY2gsIG5hbWUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGJyYW5jaCA9IHJlbW90ZV9icmFuY2gKLQotICAgICAgICAgICAgYnJhbmNoZXNbbmFtZV0gPSBicmFuY2guYmFzZQotCi0gICAgICAgIHJldHVybiByZXBvCisgICAgcmV0dXJuIG9yaWdpbgogCiBkZWYgZml4X3BhdGgoYWxpYXMsIG9yaWdfdXJsKToKICAgICB1cmwgPSB1cmxwYXJzZS51cmxwYXJzZShvcmlnX3VybCwgJ2ZpbGUnKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9yZW1vdGUtaGVscGVycy9naXQtcmVtb3RlLWhnIGIvY29udHJpYi9yZW1vdGUtaGVscGVycy9naXQtcmVtb3RlLWhnCmluZGV4IDFkZDNkNzAuLjAxOTRjNjcgMTAwNzU1Ci0tLSBhL2NvbnRyaWIvcmVtb3RlLWhlbHBlcnMvZ2l0LXJlbW90ZS1oZworKysgYi9jb250cmliL3JlbW90ZS1oZWxwZXJzL2dpdC1yZW1vdGUtaGcKQEAgLTEyLDcgKzEyLDcgQEAKICMgRm9yIHJlbW90ZSByZXBvc2l0b3JpZXMgYSBsb2NhbCBjbG9uZSBpcyBzdG9yZWQgaW4KICMgIiRHSVRfRElSL2hnL29yaWdpbi9jbG9uZS8uaGcvIi4KIAotZnJvbSBtZXJjdXJpYWwgaW1wb3J0IGhnLCB1aSwgYm9va21hcmtzLCBjb250ZXh0LCBlbmNvZGluZywgbm9kZSwgZXJyb3IsIGV4dGVuc2lvbnMKK2Zyb20gbWVyY3VyaWFsIGltcG9ydCBoZywgdWksIGJvb2ttYXJrcywgY29udGV4dCwgZW5jb2RpbmcsIG5vZGUsIGVycm9yLCBleHRlbnNpb25zLCBkaXNjb3ZlcnksIHV0aWwKIAogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCkBAIC0yOSw5ICsyOSw2IEBACiAjIG5hbWVkIGJyYW5jaGVzOgogIyBnaXQgY29uZmlnIC0tZ2xvYmFsIHJlbW90ZS1oZy50cmFjay1icmFuY2hlcyBmYWxzZQogIwotIyBJZiB5b3UgZG9uJ3Qgd2FudCB0byBmb3JjZSBwdXNoZXMgKGFuZCB0aHVzIHJpc2sgY3JlYXRpbmcgbmV3IHJlbW90ZSBoZWFkcyk6Ci0jIGdpdCBjb25maWcgLS1nbG9iYWwgcmVtb3RlLWhnLmZvcmNlLXB1c2ggZmFsc2UKLSMKICMgSWYgeW91IHdhbnQgdGhlIGVxdWl2YWxlbnQgb2YgaGcncyBjbG9uZS9wdWxsLS1pbnNlY3VyZSBvcHRpb246CiAjIGdpdCBjb25maWcgLS1nbG9iYWwgcmVtb3RlLWhnLmluc2VjdXJlIHRydWUKICMKQEAgLTU1LDYgKzUyLDggQEAKIEFVVEhPUl9IR19SRSA9IHJlLmNvbXBpbGUoJ14oLio/KSA/PCguKj8pKD86PiguKyk/KT8kJykKIFJBV19BVVRIT1JfUkUgPSByZS5jb21waWxlKCdeKFx3KykgKD86KC4rKT8gKT88KC4qKT4gKFxkKykgKFsrLV1cZCspJykKIAorVkVSU0lPTiA9IDIKKwogZGVmIGRpZShtc2csICphcmdzKToKICAgICBzeXMuc3RkZXJyLndyaXRlKCdFUlJPUjogJXNcbicgJSAobXNnICUgYXJncykpCiAgICAgc3lzLmV4aXQoMSkKQEAgLTcyLDggKzcxLDExIEBACiAgICAgbSA9IHsgJzEwMDc1NSc6ICd4JywgJzEyMDAwMCc6ICdsJyB9CiAgICAgcmV0dXJuIG0uZ2V0KG1vZGUsICcnKQogCi1kZWYgaGdoZXgobm9kZSk6Ci0gICAgcmV0dXJuIGhnLm5vZGUuaGV4KG5vZGUpCitkZWYgaGdoZXgobik6CisgICAgcmV0dXJuIG5vZGUuaGV4KG4pCisKK2RlZiBoZ2JpbihuKToKKyAgICByZXR1cm4gbm9kZS5iaW4obikKIAogZGVmIGhncmVmKHJlZik6CiAgICAgcmV0dXJuIHJlZi5yZXBsYWNlKCdfX18nLCAnICcpCkBAIC04MSw2ICs4MywxMSBAQAogZGVmIGdpdHJlZihyZWYpOgogICAgIHJldHVybiByZWYucmVwbGFjZSgnICcsICdfX18nKQogCitkZWYgY2hlY2tfdmVyc2lvbigqY2hlY2spOgorICAgIGlmIG5vdCBoZ192ZXJzaW9uOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBoZ192ZXJzaW9uID49IGNoZWNrCisKIGRlZiBnZXRfY29uZmlnKGNvbmZpZyk6CiAgICAgY21kID0gWydnaXQnLCAnY29uZmlnJywgJy0tZ2V0JywgY29uZmlnXQogICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKQEAgLTk4LDE0ICsxMDUsMjcgQEAKIAogY2xhc3MgTWFya3M6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIHJlcG8pOgogICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisgICAgICAgIHNlbGYucmVwbyA9IHJlcG8KKyAgICAgICAgc2VsZi5jbGVhcigpCisgICAgICAgIHNlbGYubG9hZCgpCisKKyAgICAgICAgaWYgc2VsZi52ZXJzaW9uIDwgVkVSU0lPTjoKKyAgICAgICAgICAgIGlmIHNlbGYudmVyc2lvbiA9PSAxOgorICAgICAgICAgICAgICAgIHNlbGYudXBncmFkZV9vbmUoKQorCisgICAgICAgICAgICAjIHVwZ3JhZGVkPworICAgICAgICAgICAgaWYgc2VsZi52ZXJzaW9uIDwgVkVSU0lPTjoKKyAgICAgICAgICAgICAgICBzZWxmLmNsZWFyKCkKKyAgICAgICAgICAgICAgICBzZWxmLnZlcnNpb24gPSBWRVJTSU9OCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CiAgICAgICAgIHNlbGYudGlwcyA9IHt9CiAgICAgICAgIHNlbGYubWFya3MgPSB7fQogICAgICAgICBzZWxmLnJldl9tYXJrcyA9IHt9CiAgICAgICAgIHNlbGYubGFzdF9tYXJrID0gMAotCi0gICAgICAgIHNlbGYubG9hZCgpCisgICAgICAgIHNlbGYudmVyc2lvbiA9IDAKIAogICAgIGRlZiBsb2FkKHNlbGYpOgogICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5wYXRoKToKQEAgLTExNiwxMiArMTM2LDIxIEBACiAgICAgICAgIHNlbGYudGlwcyA9IHRtcFsndGlwcyddCiAgICAgICAgIHNlbGYubWFya3MgPSB0bXBbJ21hcmtzJ10KICAgICAgICAgc2VsZi5sYXN0X21hcmsgPSB0bXBbJ2xhc3QtbWFyayddCisgICAgICAgIHNlbGYudmVyc2lvbiA9IHRtcC5nZXQoJ3ZlcnNpb24nLCAxKQogCiAgICAgICAgIGZvciByZXYsIG1hcmsgaW4gc2VsZi5tYXJrcy5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgIHNlbGYucmV2X21hcmtzW21hcmtdID0gaW50KHJldikKKyAgICAgICAgICAgIHNlbGYucmV2X21hcmtzW21hcmtdID0gcmV2CisKKyAgICBkZWYgdXBncmFkZV9vbmUoc2VsZik6CisgICAgICAgIGRlZiBnZXRfaWQocmV2KToKKyAgICAgICAgICAgIHJldHVybiBoZ2hleChzZWxmLnJlcG8uY2hhbmdlbG9nLm5vZGUoaW50KHJldikpKQorICAgICAgICBzZWxmLnRpcHMgPSBkaWN0KChuYW1lLCBnZXRfaWQocmV2KSkgZm9yIG5hbWUsIHJldiBpbiBzZWxmLnRpcHMuaXRlcml0ZW1zKCkpCisgICAgICAgIHNlbGYubWFya3MgPSBkaWN0KChnZXRfaWQocmV2KSwgbWFyaykgZm9yIHJldiwgbWFyayBpbiBzZWxmLm1hcmtzLml0ZXJpdGVtcygpKQorICAgICAgICBzZWxmLnJldl9tYXJrcyA9IGRpY3QoKG1hcmssIGdldF9pZChyZXYpKSBmb3IgbWFyaywgcmV2IGluIHNlbGYucmV2X21hcmtzLml0ZXJpdGVtcygpKQorICAgICAgICBzZWxmLnZlcnNpb24gPSAyCiAKICAgICBkZWYgZGljdChzZWxmKToKLSAgICAgICAgcmV0dXJuIHsgJ3RpcHMnOiBzZWxmLnRpcHMsICdtYXJrcyc6IHNlbGYubWFya3MsICdsYXN0LW1hcmsnIDogc2VsZi5sYXN0X21hcmsgfQorICAgICAgICByZXR1cm4geyAndGlwcyc6IHNlbGYudGlwcywgJ21hcmtzJzogc2VsZi5tYXJrcywgJ2xhc3QtbWFyaycgOiBzZWxmLmxhc3RfbWFyaywgJ3ZlcnNpb24nIDogc2VsZi52ZXJzaW9uIH0KIAogICAgIGRlZiBzdG9yZShzZWxmKToKICAgICAgICAganNvbi5kdW1wKHNlbGYuZGljdCgpLCBvcGVuKHNlbGYucGF0aCwgJ3cnKSkKQEAgLTEzMCwxMCArMTU5LDEwIEBACiAgICAgICAgIHJldHVybiBzdHIoc2VsZi5kaWN0KCkpCiAKICAgICBkZWYgZnJvbV9yZXYoc2VsZiwgcmV2KToKLSAgICAgICAgcmV0dXJuIHNlbGYubWFya3Nbc3RyKHJldildCisgICAgICAgIHJldHVybiBzZWxmLm1hcmtzW3Jldl0KIAogICAgIGRlZiB0b19yZXYoc2VsZiwgbWFyayk6Ci0gICAgICAgIHJldHVybiBzZWxmLnJldl9tYXJrc1ttYXJrXQorICAgICAgICByZXR1cm4gc3RyKHNlbGYucmV2X21hcmtzW21hcmtdKQogCiAgICAgZGVmIG5leHRfbWFyayhzZWxmKToKICAgICAgICAgc2VsZi5sYXN0X21hcmsgKz0gMQpAQCAtMTQxLDE5ICsxNzAsMTkgQEAKIAogICAgIGRlZiBnZXRfbWFyayhzZWxmLCByZXYpOgogICAgICAgICBzZWxmLmxhc3RfbWFyayArPSAxCi0gICAgICAgIHNlbGYubWFya3Nbc3RyKHJldildID0gc2VsZi5sYXN0X21hcmsKKyAgICAgICAgc2VsZi5tYXJrc1tyZXZdID0gc2VsZi5sYXN0X21hcmsKICAgICAgICAgcmV0dXJuIHNlbGYubGFzdF9tYXJrCiAKICAgICBkZWYgbmV3X21hcmsoc2VsZiwgcmV2LCBtYXJrKToKLSAgICAgICAgc2VsZi5tYXJrc1tzdHIocmV2KV0gPSBtYXJrCisgICAgICAgIHNlbGYubWFya3NbcmV2XSA9IG1hcmsKICAgICAgICAgc2VsZi5yZXZfbWFya3NbbWFya10gPSByZXYKICAgICAgICAgc2VsZi5sYXN0X21hcmsgPSBtYXJrCiAKICAgICBkZWYgaXNfbWFya2VkKHNlbGYsIHJldik6Ci0gICAgICAgIHJldHVybiBzdHIocmV2KSBpbiBzZWxmLm1hcmtzCisgICAgICAgIHJldHVybiByZXYgaW4gc2VsZi5tYXJrcwogCiAgICAgZGVmIGdldF90aXAoc2VsZiwgYnJhbmNoKToKLSAgICAgICAgcmV0dXJuIHNlbGYudGlwcy5nZXQoYnJhbmNoLCAwKQorICAgICAgICByZXR1cm4gc3RyKHNlbGYudGlwc1ticmFuY2hdKQogCiAgICAgZGVmIHNldF90aXAoc2VsZiwgYnJhbmNoLCB0aXApOgogICAgICAgICBzZWxmLnRpcHNbYnJhbmNoXSA9IHRpcApAQCAtMjYxLDcgKzI5MCw3IEBACiAgICAgcmVtb3ZlZCA9IHNldCgpCiAKICAgICAjIGxvYWQgZWFybGllc3QgbWFuaWZlc3QgZmlyc3QgZm9yIGNhY2hpbmcgcmVhc29ucwotICAgIHByZXYgPSByZXBvW3BhcmVudF0ubWFuaWZlc3QoKS5jb3B5KCkKKyAgICBwcmV2ID0gcGFyZW50Lm1hbmlmZXN0KCkuY29weSgpCiAgICAgY3VyID0gY3R4Lm1hbmlmZXN0KCkKIAogICAgIGZvciBmbiBpbiBjdXI6CkBAIC0zMjksNiArMzU4LDIxIEBACiAKICAgICByZXR1cm4gJyVzIDwlcz4nICUgKG5hbWUsIG1haWwpCiAKK2RlZiB1cGRhdGVib29rbWFya3MocmVwbywgcGVlcik6CisgICAgcmVtb3RlbWFya3MgPSBwZWVyLmxpc3RrZXlzKCdib29rbWFya3MnKQorICAgIGxvY2FsbWFya3MgPSByZXBvLl9ib29rbWFya3MKKworICAgIGlmIG5vdCByZW1vdGVtYXJrczoKKyAgICAgICAgcmV0dXJuCisKKyAgICBmb3IgaywgdiBpbiByZW1vdGVtYXJrcy5pdGVyaXRlbXMoKToKKyAgICAgICAgbG9jYWxtYXJrc1trXSA9IGhnYmluKHYpCisKKyAgICBpZiBoYXNhdHRyKGxvY2FsbWFya3MsICd3cml0ZScpOgorICAgICAgICBsb2NhbG1hcmtzLndyaXRlKCkKKyAgICBlbHNlOgorICAgICAgICBib29rbWFya3Mud3JpdGUocmVwbykKKwogZGVmIGdldF9yZXBvKHVybCwgYWxpYXMpOgogICAgIGdsb2JhbCBkaXJuYW1lLCBwZWVyCiAKQEAgLTMzOSwzNSArMzgzLDQxIEBACiAgICAgaWYgZ2V0X2NvbmZpZ19ib29sKCdyZW1vdGUtaGcuaW5zZWN1cmUnKToKICAgICAgICAgbXl1aS5zZXRjb25maWcoJ3dlYicsICdjYWNlcnRzJywgJycpCiAKLSAgICB0cnk6Ci0gICAgICAgIG1vZCA9IGV4dGVuc2lvbnMubG9hZChteXVpLCAnaGdleHQuc2NoZW1lcycsIE5vbmUpCi0gICAgICAgIG1vZC5leHRzZXR1cChteXVpKQotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcworICAgIGV4dGVuc2lvbnMubG9hZGFsbChteXVpKQogCi0gICAgaWYgaGcuaXNsb2NhbCh1cmwpOgorICAgIGlmIGhnLmlzbG9jYWwodXJsKSBhbmQgbm90IG9zLmVudmlyb24uZ2V0KCdHSVRfUkVNT1RFX0hHX1RFU1RfUkVNT1RFJyk6CiAgICAgICAgIHJlcG8gPSBoZy5yZXBvc2l0b3J5KG15dWksIHVybCkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRpcm5hbWUpOgorICAgICAgICAgICAgb3MubWFrZWRpcnMoZGlybmFtZSkKICAgICBlbHNlOgorICAgICAgICBzaGFyZWRfcGF0aCA9IG9zLnBhdGguam9pbihnaXRkaXIsICdoZycpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzaGFyZWRfcGF0aCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaGcuY2xvbmUobXl1aSwge30sIHVybCwgc2hhcmVkX3BhdGgsIHVwZGF0ZT1GYWxzZSwgcHVsbD1UcnVlKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGRpZSgnUmVwb3NpdG9yeSBlcnJvcicpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRpcm5hbWUpOgorICAgICAgICAgICAgb3MubWFrZWRpcnMoZGlybmFtZSkKKwogICAgICAgICBsb2NhbF9wYXRoID0gb3MucGF0aC5qb2luKGRpcm5hbWUsICdjbG9uZScpCiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsb2NhbF9wYXRoKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwZWVyLCBkc3RwZWVyID0gaGcuY2xvbmUobXl1aSwge30sIHVybCwgbG9jYWxfcGF0aCwgdXBkYXRlPVRydWUsIHB1bGw9VHJ1ZSkKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBkaWUoJ1JlcG9zaXRvcnkgZXJyb3InKQotICAgICAgICAgICAgcmVwbyA9IGRzdHBlZXIubG9jYWwoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVwbyA9IGhnLnJlcG9zaXRvcnkobXl1aSwgbG9jYWxfcGF0aCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwZWVyID0gaGcucGVlcihteXVpLCB7fSwgdXJsKQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIGRpZSgnUmVwb3NpdG9yeSBlcnJvcicpCi0gICAgICAgICAgICByZXBvLnB1bGwocGVlciwgaGVhZHM9Tm9uZSwgZm9yY2U9VHJ1ZSkKKyAgICAgICAgICAgIGhnLnNoYXJlKG15dWksIHNoYXJlZF9wYXRoLCBsb2NhbF9wYXRoLCB1cGRhdGU9RmFsc2UpCisKKyAgICAgICAgcmVwbyA9IGhnLnJlcG9zaXRvcnkobXl1aSwgbG9jYWxfcGF0aCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGVlciA9IGhnLnBlZXIobXl1aSwge30sIHVybCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZGllKCdSZXBvc2l0b3J5IGVycm9yJykKKyAgICAgICAgcmVwby5wdWxsKHBlZXIsIGhlYWRzPU5vbmUsIGZvcmNlPVRydWUpCisKKyAgICAgICAgdXBkYXRlYm9va21hcmtzKHJlcG8sIHBlZXIpCiAKICAgICByZXR1cm4gcmVwbwogCiBkZWYgcmV2X3RvX21hcmsocmV2KToKICAgICBnbG9iYWwgbWFya3MKLSAgICByZXR1cm4gbWFya3MuZnJvbV9yZXYocmV2KQorICAgIHJldHVybiBtYXJrcy5mcm9tX3JldihyZXYuaGV4KCkpCiAKIGRlZiBtYXJrX3RvX3JldihtYXJrKToKICAgICBnbG9iYWwgbWFya3MKQEAgLTM3NywxNyArNDI3LDI0IEBACiAgICAgZ2xvYmFsIHByZWZpeCwgbWFya3MsIG1vZGUKIAogICAgIGVuYW1lID0gJyVzLyVzJyAlIChraW5kLCBuYW1lKQotICAgIHRpcCA9IG1hcmtzLmdldF90aXAoZW5hbWUpCisgICAgdHJ5OgorICAgICAgICB0aXAgPSBtYXJrcy5nZXRfdGlwKGVuYW1lKQorICAgICAgICB0aXAgPSByZXBvW3RpcF0ucmV2KCkKKyAgICBleGNlcHQ6CisgICAgICAgIHRpcCA9IDAKIAogICAgIHJldnMgPSB4cmFuZ2UodGlwLCBoZWFkLnJldigpICsgMSkKLSAgICBjb3VudCA9IDAKLQotICAgIHJldnMgPSBbcmV2IGZvciByZXYgaW4gcmV2cyBpZiBub3QgbWFya3MuaXNfbWFya2VkKHJldildCisgICAgdG90YWwgPSBsZW4ocmV2cykKIAogICAgIGZvciByZXYgaW4gcmV2czoKIAogICAgICAgICBjID0gcmVwb1tyZXZdCi0gICAgICAgIChtYW5pZmVzdCwgdXNlciwgKHRpbWUsIHR6KSwgZmlsZXMsIGRlc2MsIGV4dHJhKSA9IHJlcG8uY2hhbmdlbG9nLnJlYWQoYy5ub2RlKCkpCisgICAgICAgIG5vZGUgPSBjLm5vZGUoKQorCisgICAgICAgIGlmIG1hcmtzLmlzX21hcmtlZChjLmhleCgpKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgKG1hbmlmZXN0LCB1c2VyLCAodGltZSwgdHopLCBmaWxlcywgZGVzYywgZXh0cmEpID0gcmVwby5jaGFuZ2Vsb2cucmVhZChub2RlKQogICAgICAgICByZXZfYnJhbmNoID0gZXh0cmFbJ2JyYW5jaCddCiAKICAgICAgICAgYXV0aG9yID0gIiVzICVkICVzIiAlIChmaXh1cF91c2VyKHVzZXIpLCB0aW1lLCBnaXR0eih0eikpCkBAIC0zOTcsNyArNDU0LDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGNvbW1pdHRlciA9IGF1dGhvcgogCi0gICAgICAgIHBhcmVudHMgPSBbcCBmb3IgcCBpbiByZXBvLmNoYW5nZWxvZy5wYXJlbnRyZXZzKHJldikgaWYgcCA+PSAwXQorICAgICAgICBwYXJlbnRzID0gW3JlcG9bcF0gZm9yIHAgaW4gcmVwby5jaGFuZ2Vsb2cucGFyZW50cmV2cyhyZXYpIGlmIHAgPj0gMF0KIAogICAgICAgICBpZiBsZW4ocGFyZW50cykgPT0gMDoKICAgICAgICAgICAgIG1vZGlmaWVkID0gYy5tYW5pZmVzdCgpLmtleXMoKQpAQCAtNDM5LDcgKzQ5Niw3IEBACiAgICAgICAgIG1vZGlmaWVkX2ZpbmFsID0gZXhwb3J0X2ZpbGVzKGMuZmlsZWN0eChmKSBmb3IgZiBpbiBtb2RpZmllZCkKIAogICAgICAgICBwcmludCAiY29tbWl0ICVzLyVzIiAlIChwcmVmaXgsIGVuYW1lKQotICAgICAgICBwcmludCAibWFyayA6JWQiICUgKG1hcmtzLmdldF9tYXJrKHJldikpCisgICAgICAgIHByaW50ICJtYXJrIDolZCIgJSAobWFya3MuZ2V0X21hcmsoYy5oZXgoKSkpCiAgICAgICAgIHByaW50ICJhdXRob3IgJXMiICUgKGF1dGhvcikKICAgICAgICAgcHJpbnQgImNvbW1pdHRlciAlcyIgJSAoY29tbWl0dGVyKQogICAgICAgICBwcmludCAiZGF0YSAlZCIgJSAobGVuKGRlc2MpKQpAQCAtNDUwLDIyICs1MDcsMjIgQEAKICAgICAgICAgICAgIGlmIGxlbihwYXJlbnRzKSA+IDE6CiAgICAgICAgICAgICAgICAgcHJpbnQgIm1lcmdlIDolcyIgJSAocmV2X3RvX21hcmsocGFyZW50c1sxXSkpCiAKLSAgICAgICAgZm9yIGYgaW4gbW9kaWZpZWRfZmluYWw6Ci0gICAgICAgICAgICBwcmludCAiTSAlcyA6JXUgJXMiICUgZgogICAgICAgICBmb3IgZiBpbiByZW1vdmVkOgogICAgICAgICAgICAgcHJpbnQgIkQgJXMiICUgKGZpeF9maWxlX3BhdGgoZikpCisgICAgICAgIGZvciBmIGluIG1vZGlmaWVkX2ZpbmFsOgorICAgICAgICAgICAgcHJpbnQgIk0gJXMgOiV1ICVzIiAlIGYKICAgICAgICAgcHJpbnQKIAotICAgICAgICBjb3VudCArPSAxCi0gICAgICAgIGlmIChjb3VudCAlIDEwMCA9PSAwKToKLSAgICAgICAgICAgIHByaW50ICJwcm9ncmVzcyByZXZpc2lvbiAlZCAnJXMnICglZC8lZCkiICUgKHJldiwgbmFtZSwgY291bnQsIGxlbihyZXZzKSkKKyAgICAgICAgcHJvZ3Jlc3MgPSAocmV2IC0gdGlwKQorICAgICAgICBpZiAocHJvZ3Jlc3MgJSAxMDAgPT0gMCk6CisgICAgICAgICAgICBwcmludCAicHJvZ3Jlc3MgcmV2aXNpb24gJWQgJyVzJyAoJWQvJWQpIiAlIChyZXYsIG5hbWUsIHByb2dyZXNzLCB0b3RhbCkKIAogICAgICMgbWFrZSBzdXJlIHRoZSByZWYgaXMgdXBkYXRlZAogICAgIHByaW50ICJyZXNldCAlcy8lcyIgJSAocHJlZml4LCBlbmFtZSkKLSAgICBwcmludCAiZnJvbSA6JXUiICUgcmV2X3RvX21hcmsocmV2KQorICAgIHByaW50ICJmcm9tIDoldSIgJSByZXZfdG9fbWFyayhoZWFkKQogICAgIHByaW50CiAKLSAgICBtYXJrcy5zZXRfdGlwKGVuYW1lLCByZXYpCisgICAgbWFya3Muc2V0X3RpcChlbmFtZSwgaGVhZC5oZXgoKSkKIAogZGVmIGV4cG9ydF90YWcocmVwbywgdGFnKToKICAgICBleHBvcnRfcmVmKHJlcG8sIHRhZywgJ3RhZ3MnLCByZXBvW2hncmVmKHRhZyldKQpAQCAtNDk3LDE1ICs1NTQsMTIgQEAKICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoKToKICAgICAgICAgcHJpbnQgIippbXBvcnQtbWFya3MgJXMiICUgcGF0aAogICAgIHByaW50ICIqZXhwb3J0LW1hcmtzICVzIiAlIHBhdGgKKyAgICBwcmludCAib3B0aW9uIgogCiAgICAgcHJpbnQKIAotZGVmIGJyYW5jaF90aXAocmVwbywgYnJhbmNoKToKLSAgICAjIG9sZGVyIHZlcnNpb25zIG9mIG1lcmN1cmlhbCBkb24ndCBoYXZlIHRoaXMKLSAgICBpZiBoYXNhdHRyKHJlcG8sICdicmFuY2h0aXAnKToKLSAgICAgICAgcmV0dXJuIHJlcG8uYnJhbmNodGlwKGJyYW5jaCkKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gcmVwby5icmFuY2h0YWdzKClbYnJhbmNoXQorZGVmIGJyYW5jaF90aXAoYnJhbmNoKToKKyAgICByZXR1cm4gYnJhbmNoZXNbYnJhbmNoXVstMV0KIAogZGVmIGdldF9icmFuY2hfdGlwKHJlcG8sIGJyYW5jaCk6CiAgICAgZ2xvYmFsIGJyYW5jaGVzCkBAIC01MTcsMjcgKzU3MSwyMSBAQAogICAgICMgdmVyaWZ5IHRoZXJlJ3Mgb25seSBvbmUgaGVhZAogICAgIGlmIChsZW4oaGVhZHMpID4gMSk6CiAgICAgICAgIHdhcm4oIkJyYW5jaCAnJXMnIGhhcyBtb3JlIHRoYW4gb25lIGhlYWQsIGNvbnNpZGVyIG1lcmdpbmciICUgYnJhbmNoKQotICAgICAgICByZXR1cm4gYnJhbmNoX3RpcChyZXBvLCBoZ3JlZihicmFuY2gpKQorICAgICAgICByZXR1cm4gYnJhbmNoX3RpcChoZ3JlZihicmFuY2gpKQogCiAgICAgcmV0dXJuIGhlYWRzWzBdCiAKIGRlZiBsaXN0X2hlYWQocmVwbywgY3VyKToKLSAgICBnbG9iYWwgZ19oZWFkLCBibWFya3MKKyAgICBnbG9iYWwgZ19oZWFkLCBibWFya3MsIGZha2VfYm1hcmsKIAotICAgIGhlYWQgPSBib29rbWFya3MucmVhZGN1cnJlbnQocmVwbykKLSAgICBpZiBoZWFkOgotICAgICAgICBub2RlID0gcmVwb1toZWFkXQotICAgIGVsc2U6Ci0gICAgICAgICMgZmFrZSBib29rbWFyayBmcm9tIGN1cnJlbnQgYnJhbmNoCi0gICAgICAgIGhlYWQgPSBjdXIKLSAgICAgICAgbm9kZSA9IHJlcG9bJy4nXQotICAgICAgICBpZiBub3Qgbm9kZToKLSAgICAgICAgICAgIG5vZGUgPSByZXBvWyd0aXAnXQotICAgICAgICBpZiBub3Qgbm9kZToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBoZWFkID09ICdkZWZhdWx0JzoKLSAgICAgICAgICAgIGhlYWQgPSAnbWFzdGVyJwotICAgICAgICBibWFya3NbaGVhZF0gPSBub2RlCisgICAgaWYgJ2RlZmF1bHQnIG5vdCBpbiBicmFuY2hlczoKKyAgICAgICAgIyBlbXB0eSByZXBvCisgICAgICAgIHJldHVybgorCisgICAgbm9kZSA9IHJlcG9bYnJhbmNoX3RpcCgnZGVmYXVsdCcpXQorICAgIGhlYWQgPSAnbWFzdGVyJyBpZiBub3QgJ21hc3RlcicgaW4gYm1hcmtzIGVsc2UgJ2RlZmF1bHQnCisgICAgZmFrZV9ibWFyayA9IGhlYWQKKyAgICBibWFya3NbaGVhZF0gPSBub2RlCiAKICAgICBoZWFkID0gZ2l0cmVmKGhlYWQpCiAgICAgcHJpbnQgIkByZWZzL2hlYWRzLyVzIEhFQUQiICUgaGVhZApAQCAtNTUxLDE1ICs1OTksMTcgQEAKICAgICAgICAgYm1hcmtzW2JtYXJrXSA9IHJlcG9bbm9kZV0KIAogICAgIGN1ciA9IHJlcG8uZGlyc3RhdGUuYnJhbmNoKCkKKyAgICBvcmlnID0gcGVlciBpZiBwZWVyIGVsc2UgcmVwbworCisgICAgZm9yIGJyYW5jaCwgaGVhZHMgaW4gb3JpZy5icmFuY2htYXAoKS5pdGVyaXRlbXMoKToKKyAgICAgICAgIyBvbmx5IG9wZW4gaGVhZHMKKyAgICAgICAgaGVhZHMgPSBbaCBmb3IgaCBpbiBoZWFkcyBpZiAnY2xvc2UnIG5vdCBpbiByZXBvLmNoYW5nZWxvZy5yZWFkKGgpWzVdXQorICAgICAgICBpZiBoZWFkczoKKyAgICAgICAgICAgIGJyYW5jaGVzW2JyYW5jaF0gPSBoZWFkcwogCiAgICAgbGlzdF9oZWFkKHJlcG8sIGN1cikKIAogICAgIGlmIHRyYWNrX2JyYW5jaGVzOgotICAgICAgICBmb3IgYnJhbmNoIGluIHJlcG8uYnJhbmNobWFwKCk6Ci0gICAgICAgICAgICBoZWFkcyA9IHJlcG8uYnJhbmNoaGVhZHMoYnJhbmNoKQotICAgICAgICAgICAgaWYgbGVuKGhlYWRzKToKLSAgICAgICAgICAgICAgICBicmFuY2hlc1ticmFuY2hdID0gaGVhZHMKLQogICAgICAgICBmb3IgYnJhbmNoIGluIGJyYW5jaGVzOgogICAgICAgICAgICAgcHJpbnQgIj8gcmVmcy9oZWFkcy9icmFuY2hlcy8lcyIgJSBnaXRyZWYoYnJhbmNoKQogCkBAIC01ODIsNiArNjMyLDcgQEAKICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoKToKICAgICAgICAgcHJpbnQgImZlYXR1cmUgaW1wb3J0LW1hcmtzPSVzIiAlIHBhdGgKICAgICBwcmludCAiZmVhdHVyZSBleHBvcnQtbWFya3M9JXMiICUgcGF0aAorICAgIHByaW50ICJmZWF0dXJlIGZvcmNlIgogICAgIHN5cy5zdGRvdXQuZmx1c2goKQogCiAgICAgdG1wID0gZW5jb2RpbmcuZW5jb2RpbmcKQEAgLTY3MSw2ICs3MjIsMTEgQEAKICAgICAgICAgICAgIGRpZSgnVW5rbm93biBmaWxlIGNvbW1hbmQ6ICVzJyAlIGxpbmUpCiAgICAgICAgIGZpbGVzW3BhdGhdID0gZgogCisgICAgIyBvbmx5IGV4cG9ydCB0aGUgY29tbWl0cyBpZiB3ZSBhcmUgb24gYW4gaW50ZXJuYWwgcHJveHkgcmVwbworICAgIGlmIGRyeV9ydW4gYW5kIG5vdCBwZWVyOgorICAgICAgICBwYXJzZWRfcmVmc1tyZWZdID0gTm9uZQorICAgICAgICByZXR1cm4KKwogICAgIGRlZiBnZXRmaWxlY3R4KHJlcG8sIG1lbWN0eCwgZik6CiAgICAgICAgIG9mID0gZmlsZXNbZl0KICAgICAgICAgaWYgJ2RlbGV0ZWQnIGluIG9mOgpAQCAtNjkyLDE0ICs3NDgsMTQgQEAKICAgICAgICAgZXh0cmFbJ2NvbW1pdHRlciddID0gIiVzICV1ICV1IiAlIGNvbW1pdHRlcgogCiAgICAgaWYgZnJvbV9tYXJrOgotICAgICAgICBwMSA9IHJlcG8uY2hhbmdlbG9nLm5vZGUobWFya190b19yZXYoZnJvbV9tYXJrKSkKKyAgICAgICAgcDEgPSBtYXJrX3RvX3Jldihmcm9tX21hcmspCiAgICAgZWxzZToKLSAgICAgICAgcDEgPSAnXDAnICogMjAKKyAgICAgICAgcDEgPSAnMCcgKiA0MAogCiAgICAgaWYgbWVyZ2VfbWFyazoKLSAgICAgICAgcDIgPSByZXBvLmNoYW5nZWxvZy5ub2RlKG1hcmtfdG9fcmV2KG1lcmdlX21hcmspKQorICAgICAgICBwMiA9IG1hcmtfdG9fcmV2KG1lcmdlX21hcmspCiAgICAgZWxzZToKLSAgICAgICAgcDIgPSAnXDAnICogMjAKKyAgICAgICAgcDIgPSAnMCcgKiA0MAogCiAgICAgIwogICAgICMgSWYgZmlsZXMgY2hhbmdlZCBmcm9tIGFueSBvZiB0aGUgcGFyZW50cywgaGcgd2FudHMgdG8ga25vdywgYnV0IGluIGdpdCBpZgpAQCAtNzM1LDE0ICs3OTEsMTIgQEAKICAgICB0bXAgPSBlbmNvZGluZy5lbmNvZGluZwogICAgIGVuY29kaW5nLmVuY29kaW5nID0gJ3V0Zi04JwogCi0gICAgbm9kZSA9IHJlcG8uY29tbWl0Y3R4KGN0eCkKKyAgICBub2RlID0gaGdoZXgocmVwby5jb21taXRjdHgoY3R4KSkKIAogICAgIGVuY29kaW5nLmVuY29kaW5nID0gdG1wCiAKLSAgICByZXYgPSByZXBvW25vZGVdLnJldigpCi0KICAgICBwYXJzZWRfcmVmc1tyZWZdID0gbm9kZQotICAgIG1hcmtzLm5ld19tYXJrKHJldiwgY29tbWl0X21hcmspCisgICAgbWFya3MubmV3X21hcmsobm9kZSwgY29tbWl0X21hcmspCiAKIGRlZiBwYXJzZV9yZXNldChwYXJzZXIpOgogICAgIGdsb2JhbCBwYXJzZWRfcmVmcwpAQCAtNzU4LDggKzgxMiwxMSBAQAogICAgIGZyb21fbWFyayA9IHBhcnNlci5nZXRfbWFyaygpCiAgICAgcGFyc2VyLm5leHQoKQogCi0gICAgbm9kZSA9IHBhcnNlci5yZXBvLmNoYW5nZWxvZy5ub2RlKG1hcmtfdG9fcmV2KGZyb21fbWFyaykpCi0gICAgcGFyc2VkX3JlZnNbcmVmXSA9IG5vZGUKKyAgICB0cnk6CisgICAgICAgIHJldiA9IG1hcmtfdG9fcmV2KGZyb21fbWFyaykKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHJldiA9IE5vbmUKKyAgICBwYXJzZWRfcmVmc1tyZWZdID0gcmV2CiAKIGRlZiBwYXJzZV90YWcocGFyc2VyKToKICAgICBuYW1lID0gcGFyc2VyWzFdCkBAIC03NzUsNyArODMyLDcgQEAKIAogZGVmIHdyaXRlX3RhZyhyZXBvLCB0YWcsIG5vZGUsIG1zZywgYXV0aG9yKToKICAgICBicmFuY2ggPSByZXBvW25vZGVdLmJyYW5jaCgpCi0gICAgdGlwID0gYnJhbmNoX3RpcChyZXBvLCBicmFuY2gpCisgICAgdGlwID0gYnJhbmNoX3RpcChicmFuY2gpCiAgICAgdGlwID0gcmVwb1t0aXBdCiAKICAgICBkZWYgZ2V0ZmlsZWN0eChyZXBvLCBtZW1jdHgsIGYpOgpAQCAtNzg0LDE4ICs4NDEsMjggQEAKICAgICAgICAgICAgIGRhdGEgPSBmY3R4LmRhdGEoKQogICAgICAgICBleGNlcHQgZXJyb3IuTWFuaWZlc3RMb29rdXBFcnJvcjoKICAgICAgICAgICAgIGRhdGEgPSAiIgotICAgICAgICBjb250ZW50ID0gZGF0YSArICIlcyAlc1xuIiAlIChoZ2hleChub2RlKSwgdGFnKQorICAgICAgICBjb250ZW50ID0gZGF0YSArICIlcyAlc1xuIiAlIChub2RlLCB0YWcpCiAgICAgICAgIHJldHVybiBjb250ZXh0Lm1lbWZpbGVjdHgoZiwgY29udGVudCwgRmFsc2UsIEZhbHNlLCBOb25lKQogCiAgICAgcDEgPSB0aXAuaGV4KCkKLSAgICBwMiA9ICdcMCcgKiAyMAotICAgIGlmIG5vdCBhdXRob3I6Ci0gICAgICAgIGF1dGhvciA9IChOb25lLCAwLCAwKQotICAgIHVzZXIsIGRhdGUsIHR6ID0gYXV0aG9yCisgICAgcDIgPSAnMCcgKiA0MAorICAgIGlmIGF1dGhvcjoKKyAgICAgICAgdXNlciwgZGF0ZSwgdHogPSBhdXRob3IKKyAgICAgICAgZGF0ZV90eiA9IChkYXRlLCB0eikKKyAgICBlbHNlOgorICAgICAgICBjbWQgPSBbJ2dpdCcsICd2YXInLCAnR0lUX0NPTU1JVFRFUl9JREVOVCddCisgICAgICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgb3V0cHV0LCBfID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCisgICAgICAgIG0gPSByZS5tYXRjaCgnXi4qIDwuKj4nLCBvdXRwdXQpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICB1c2VyID0gbS5ncm91cCgwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXNlciA9IHJlcG8udWkudXNlcm5hbWUoKQorICAgICAgICBkYXRlX3R6ID0gTm9uZQogCiAgICAgY3R4ID0gY29udGV4dC5tZW1jdHgocmVwbywgKHAxLCBwMiksIG1zZywKICAgICAgICAgICAgIFsnLmhndGFncyddLCBnZXRmaWxlY3R4LAotICAgICAgICAgICAgdXNlciwgKGRhdGUsIHR6KSwgeydicmFuY2gnIDogYnJhbmNofSkKKyAgICAgICAgICAgIHVzZXIsIGRhdGVfdHosIHsnYnJhbmNoJyA6IGJyYW5jaH0pCiAKICAgICB0bXAgPSBlbmNvZGluZy5lbmNvZGluZwogICAgIGVuY29kaW5nLmVuY29kaW5nID0gJ3V0Zi04JwpAQCAtODA0LDEyICs4NzEsMTMyIEBACiAKICAgICBlbmNvZGluZy5lbmNvZGluZyA9IHRtcAogCi0gICAgcmV0dXJuIHRhZ25vZGUKKyAgICByZXR1cm4gKHRhZ25vZGUsIGJyYW5jaCkKKworZGVmIGNoZWNraGVhZHNfYm1hcmsocmVwbywgcmVmLCBjdHgpOgorICAgIGJtYXJrID0gcmVmW2xlbigncmVmcy9oZWFkcy8nKTpdCisgICAgaWYgbm90IGJtYXJrIGluIGJtYXJrczoKKyAgICAgICAgIyBuZXcgYm1hcmsKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGN0eF9vbGQgPSBibWFya3NbYm1hcmtdCisgICAgY3R4X25ldyA9IGN0eAorICAgIGlmIG5vdCByZXBvLmNoYW5nZWxvZy5kZXNjZW5kYW50KGN0eF9vbGQucmV2KCksIGN0eF9uZXcucmV2KCkpOgorICAgICAgICBpZiBmb3JjZV9wdXNoOgorICAgICAgICAgICAgcHJpbnQgIm9rICVzIGZvcmNlZCB1cGRhdGUiICUgcmVmCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAiZXJyb3IgJXMgbm9uLWZhc3QgZm9yd2FyZCIgJSByZWYKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgcmV0dXJuIFRydWUKKworZGVmIGNoZWNraGVhZHMocmVwbywgcmVtb3RlLCBwX3JldnMpOgorCisgICAgcmVtb3RlbWFwID0gcmVtb3RlLmJyYW5jaG1hcCgpCisgICAgaWYgbm90IHJlbW90ZW1hcDoKKyAgICAgICAgIyBlbXB0eSByZXBvCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBuZXcgPSB7fQorICAgIHJldCA9IFRydWUKKworICAgIGZvciBub2RlLCByZWYgaW4gcF9yZXZzLml0ZXJpdGVtcygpOgorICAgICAgICBjdHggPSByZXBvW25vZGVdCisgICAgICAgIGJyYW5jaCA9IGN0eC5icmFuY2goKQorICAgICAgICBpZiBub3QgYnJhbmNoIGluIHJlbW90ZW1hcDoKKyAgICAgICAgICAgICMgbmV3IGJyYW5jaAorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgbm90IHJlZi5zdGFydHN3aXRoKCdyZWZzL2hlYWRzL2JyYW5jaGVzJyk6CisgICAgICAgICAgICBpZiByZWYuc3RhcnRzd2l0aCgncmVmcy9oZWFkcy8nKToKKyAgICAgICAgICAgICAgICBpZiBub3QgY2hlY2toZWFkc19ibWFyayhyZXBvLCByZWYsIGN0eCk6CisgICAgICAgICAgICAgICAgICAgIHJldCA9IEZhbHNlCisKKyAgICAgICAgICAgICMgb25seSBjaGVjayBicmFuY2hlcworICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgbmV3LnNldGRlZmF1bHQoYnJhbmNoLCBbXSkuYXBwZW5kKGN0eC5yZXYoKSkKKworICAgIGZvciBicmFuY2gsIGhlYWRzIGluIG5ldy5pdGVyaXRlbXMoKToKKyAgICAgICAgb2xkID0gW3JlcG8uY2hhbmdlbG9nLnJldih4KSBmb3IgeCBpbiByZW1vdGVtYXBbYnJhbmNoXV0KKyAgICAgICAgZm9yIHJldiBpbiBoZWFkczoKKyAgICAgICAgICAgIGlmIGNoZWNrX3ZlcnNpb24oMiwgMyk6CisgICAgICAgICAgICAgICAgYW5jZXN0b3JzID0gcmVwby5jaGFuZ2Vsb2cuYW5jZXN0b3JzKFtyZXZdLCBzdG9wcmV2PW1pbihvbGQpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhbmNlc3RvcnMgPSByZXBvLmNoYW5nZWxvZy5hbmNlc3RvcnMocmV2KQorICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorCisgICAgICAgICAgICBmb3IgeCBpbiBvbGQ6CisgICAgICAgICAgICAgICAgaWYgeCBpbiBhbmNlc3RvcnM6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBmb3VuZDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBub2RlID0gcmVwby5jaGFuZ2Vsb2cubm9kZShyZXYpCisgICAgICAgICAgICByZWYgPSBwX3JldnNbbm9kZV0KKyAgICAgICAgICAgIGlmIGZvcmNlX3B1c2g6CisgICAgICAgICAgICAgICAgcHJpbnQgIm9rICVzIGZvcmNlZCB1cGRhdGUiICUgcmVmCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICJlcnJvciAlcyBub24tZmFzdCBmb3J3YXJkIiAlIHJlZgorICAgICAgICAgICAgICAgIHJldCA9IEZhbHNlCisKKyAgICByZXR1cm4gcmV0CisKK2RlZiBwdXNoX3Vuc2FmZShyZXBvLCByZW1vdGUsIHBhcnNlZF9yZWZzLCBwX3JldnMpOgorCisgICAgZm9yY2UgPSBmb3JjZV9wdXNoCisKKyAgICBmY2kgPSBkaXNjb3ZlcnkuZmluZGNvbW1vbmluY29taW5nCisgICAgY29tbW9uaW5jID0gZmNpKHJlcG8sIHJlbW90ZSwgZm9yY2U9Zm9yY2UpCisgICAgY29tbW9uLCBfLCByZW1vdGVoZWFkcyA9IGNvbW1vbmluYworCisgICAgaWYgbm90IGNoZWNraGVhZHMocmVwbywgcmVtb3RlLCBwX3JldnMpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgY2cgPSByZXBvLmdldGJ1bmRsZSgncHVzaCcsIGhlYWRzPWxpc3QocF9yZXZzKSwgY29tbW9uPWNvbW1vbikKKworICAgIHVuYnVuZGxlID0gcmVtb3RlLmNhcGFibGUoJ3VuYnVuZGxlJykKKyAgICBpZiB1bmJ1bmRsZToKKyAgICAgICAgaWYgZm9yY2U6CisgICAgICAgICAgICByZW1vdGVoZWFkcyA9IFsnZm9yY2UnXQorICAgICAgICByZXR1cm4gcmVtb3RlLnVuYnVuZGxlKGNnLCByZW1vdGVoZWFkcywgJ3B1c2gnKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiByZW1vdGUuYWRkY2hhbmdlZ3JvdXAoY2csICdwdXNoJywgcmVwby51cmwoKSkKKworZGVmIHB1c2gocmVwbywgcmVtb3RlLCBwYXJzZWRfcmVmcywgcF9yZXZzKToKKyAgICBpZiBoYXNhdHRyKHJlbW90ZSwgJ2NhbnB1c2gnKSBhbmQgbm90IHJlbW90ZS5jYW5wdXNoKCk6CisgICAgICAgIHByaW50ICJlcnJvciBjYW5ub3QgcHVzaCIKKworICAgIGlmIG5vdCBwX3JldnM6CisgICAgICAgICMgbm90aGluZyB0byBwdXNoCisgICAgICAgIHJldHVybgorCisgICAgbG9jayA9IE5vbmUKKyAgICB1bmJ1bmRsZSA9IHJlbW90ZS5jYXBhYmxlKCd1bmJ1bmRsZScpCisgICAgaWYgbm90IHVuYnVuZGxlOgorICAgICAgICBsb2NrID0gcmVtb3RlLmxvY2soKQorICAgIHRyeToKKyAgICAgICAgcmV0ID0gcHVzaF91bnNhZmUocmVwbywgcmVtb3RlLCBwYXJzZWRfcmVmcywgcF9yZXZzKQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIGxvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQorCisgICAgcmV0dXJuIHJldAorCitkZWYgY2hlY2tfdGlwKHJlZiwga2luZCwgbmFtZSwgaGVhZHMpOgorICAgIHRyeToKKyAgICAgICAgZW5hbWUgPSAnJXMvJXMnICUgKGtpbmQsIG5hbWUpCisgICAgICAgIHRpcCA9IG1hcmtzLmdldF90aXAoZW5hbWUpCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiB0aXAgaW4gaGVhZHMKIAogZGVmIGRvX2V4cG9ydChwYXJzZXIpOgogICAgIGdsb2JhbCBwYXJzZWRfcmVmcywgYm1hcmtzLCBwZWVyCiAKICAgICBwX2JtYXJrcyA9IFtdCisgICAgcF9yZXZzID0ge30KIAogICAgIHBhcnNlci5uZXh0KCkKIApAQCAtODI3LDcyICsxMDE0LDExNCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZGllKCd1bmhhbmRsZWQgZXhwb3J0IGNvbW1hbmQ6ICVzJyAlIGxpbmUpCiAKKyAgICBuZWVkX2ZldGNoID0gRmFsc2UKKwogICAgIGZvciByZWYsIG5vZGUgaW4gcGFyc2VkX3JlZnMuaXRlcml0ZW1zKCk6CisgICAgICAgIGJub2RlID0gaGdiaW4obm9kZSkgaWYgbm9kZSBlbHNlIE5vbmUKICAgICAgICAgaWYgcmVmLnN0YXJ0c3dpdGgoJ3JlZnMvaGVhZHMvYnJhbmNoZXMnKToKICAgICAgICAgICAgIGJyYW5jaCA9IHJlZltsZW4oJ3JlZnMvaGVhZHMvYnJhbmNoZXMvJyk6XQotICAgICAgICAgICAgaWYgYnJhbmNoIGluIGJyYW5jaGVzIGFuZCBub2RlIGluIGJyYW5jaGVzW2JyYW5jaF06CisgICAgICAgICAgICBpZiBicmFuY2ggaW4gYnJhbmNoZXMgYW5kIGJub2RlIGluIGJyYW5jaGVzW2JyYW5jaF06CiAgICAgICAgICAgICAgICAgIyB1cCB0byBkYXRlCiAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgcGVlcjoKKyAgICAgICAgICAgICAgICByZW1vdGVtYXAgPSBwZWVyLmJyYW5jaG1hcCgpCisgICAgICAgICAgICAgICAgaWYgcmVtb3RlbWFwIGFuZCBicmFuY2ggaW4gcmVtb3RlbWFwOgorICAgICAgICAgICAgICAgICAgICBoZWFkcyA9IFtoZ2hleChlKSBmb3IgZSBpbiByZW1vdGVtYXBbYnJhbmNoXV0KKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGNoZWNrX3RpcChyZWYsICdicmFuY2hlcycsIGJyYW5jaCwgaGVhZHMpOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgImVycm9yICVzIGZldGNoIGZpcnN0IiAlIHJlZgorICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF9mZXRjaCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHBfcmV2c1tibm9kZV0gPSByZWYKICAgICAgICAgICAgIHByaW50ICJvayAlcyIgJSByZWYKICAgICAgICAgZWxpZiByZWYuc3RhcnRzd2l0aCgncmVmcy9oZWFkcy8nKToKICAgICAgICAgICAgIGJtYXJrID0gcmVmW2xlbigncmVmcy9oZWFkcy8nKTpdCi0gICAgICAgICAgICBwX2JtYXJrcy5hcHBlbmQoKGJtYXJrLCBub2RlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBuZXcgPSBub2RlCisgICAgICAgICAgICBvbGQgPSBibWFya3NbYm1hcmtdLmhleCgpIGlmIGJtYXJrIGluIGJtYXJrcyBlbHNlICcnCisKKyAgICAgICAgICAgIGlmIG9sZCA9PSBuZXc6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgcHJpbnQgIm9rICVzIiAlIHJlZgorICAgICAgICAgICAgaWYgYm1hcmsgIT0gZmFrZV9ibWFyayBhbmQgXAorICAgICAgICAgICAgICAgICAgICBub3QgKGJtYXJrID09ICdtYXN0ZXInIGFuZCBibWFyayBub3QgaW4gcGFyc2VyLnJlcG8uX2Jvb2ttYXJrcyk6CisgICAgICAgICAgICAgICAgcF9ibWFya3MuYXBwZW5kKChyZWYsIGJtYXJrLCBvbGQsIG5ldykpCisKKyAgICAgICAgICAgIGlmIHBlZXI6CisgICAgICAgICAgICAgICAgcmVtb3RlX29sZCA9IHBlZXIubGlzdGtleXMoJ2Jvb2ttYXJrcycpLmdldChibWFyaykKKyAgICAgICAgICAgICAgICBpZiByZW1vdGVfb2xkOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY2hlY2tfdGlwKHJlZiwgJ2Jvb2ttYXJrcycsIGJtYXJrLCByZW1vdGVfb2xkKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJlcnJvciAlcyBmZXRjaCBmaXJzdCIgJSByZWYKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRfZmV0Y2ggPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBwX3JldnNbYm5vZGVdID0gcmVmCiAgICAgICAgIGVsaWYgcmVmLnN0YXJ0c3dpdGgoJ3JlZnMvdGFncy8nKToKKyAgICAgICAgICAgIGlmIGRyeV9ydW46CisgICAgICAgICAgICAgICAgcHJpbnQgIm9rICVzIiAlIHJlZgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICB0YWcgPSByZWZbbGVuKCdyZWZzL3RhZ3MvJyk6XQogICAgICAgICAgICAgdGFnID0gaGdyZWYodGFnKQogICAgICAgICAgICAgYXV0aG9yLCBtc2cgPSBwYXJzZWRfdGFncy5nZXQodGFnLCAoTm9uZSwgTm9uZSkpCiAgICAgICAgICAgICBpZiBtb2RlID09ICdnaXQnOgogICAgICAgICAgICAgICAgIGlmIG5vdCBtc2c6Ci0gICAgICAgICAgICAgICAgICAgIG1zZyA9ICdBZGRlZCB0YWcgJXMgZm9yIGNoYW5nZXNldCAlcycgJSAodGFnLCBoZ2hleChub2RlWzo2XSkpOwotICAgICAgICAgICAgICAgIHdyaXRlX3RhZyhwYXJzZXIucmVwbywgdGFnLCBub2RlLCBtc2csIGF1dGhvcikKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gJ0FkZGVkIHRhZyAlcyBmb3IgY2hhbmdlc2V0ICVzJyAlICh0YWcsIG5vZGVbOjEyXSk7CisgICAgICAgICAgICAgICAgdGFnbm9kZSwgYnJhbmNoID0gd3JpdGVfdGFnKHBhcnNlci5yZXBvLCB0YWcsIG5vZGUsIG1zZywgYXV0aG9yKQorICAgICAgICAgICAgICAgIHBfcmV2c1t0YWdub2RlXSA9ICdyZWZzL2hlYWRzL2JyYW5jaGVzLycgKyBnaXRyZWYoYnJhbmNoKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmcCA9IHBhcnNlci5yZXBvLm9wZW5lcignbG9jYWx0YWdzJywgJ2EnKQotICAgICAgICAgICAgICAgIGZwLndyaXRlKCclcyAlc1xuJyAlIChoZ2hleChub2RlKSwgdGFnKSkKKyAgICAgICAgICAgICAgICBmcC53cml0ZSgnJXMgJXNcbicgJSAobm9kZSwgdGFnKSkKICAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICBwX3JldnNbYm5vZGVdID0gcmVmCiAgICAgICAgICAgICBwcmludCAib2sgJXMiICUgcmVmCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIHRyYW5zcG9ydC1oZWxwZXIvZmFzdC1leHBvcnQgYnVncwogICAgICAgICAgICAgY29udGludWUKIAorICAgIGlmIG5lZWRfZmV0Y2g6CisgICAgICAgIHByaW50CisgICAgICAgIHJldHVybgorCisgICAgaWYgZHJ5X3J1bjoKKyAgICAgICAgaWYgcGVlciBhbmQgbm90IGZvcmNlX3B1c2g6CisgICAgICAgICAgICBjaGVja2hlYWRzKHBhcnNlci5yZXBvLCBwZWVyLCBwX3JldnMpCisgICAgICAgIHByaW50CisgICAgICAgIHJldHVybgorCiAgICAgaWYgcGVlcjoKLSAgICAgICAgcGFyc2VyLnJlcG8ucHVzaChwZWVyLCBmb3JjZT1mb3JjZV9wdXNoLCBuZXdicmFuY2g9VHJ1ZSkKKyAgICAgICAgaWYgbm90IHB1c2gocGFyc2VyLnJlcG8sIHBlZXIsIHBhcnNlZF9yZWZzLCBwX3JldnMpOgorICAgICAgICAgICAgIyBkbyBub3QgdXBkYXRlIGJvb2ttYXJrcworICAgICAgICAgICAgcHJpbnQKKyAgICAgICAgICAgIHJldHVybgogCi0gICAgIyBoYW5kbGUgYm9va21hcmtzCi0gICAgZm9yIGJtYXJrLCBub2RlIGluIHBfYm1hcmtzOgotICAgICAgICByZWYgPSAncmVmcy9oZWFkcy8nICsgYm1hcmsKLSAgICAgICAgbmV3ID0gaGdoZXgobm9kZSkKLQotICAgICAgICBpZiBibWFyayBpbiBibWFya3M6Ci0gICAgICAgICAgICBvbGQgPSBibWFya3NbYm1hcmtdLmhleCgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBvbGQgPSAnJwotCi0gICAgICAgIGlmIG9sZCA9PSBuZXc6Ci0gICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgIGlmIGJtYXJrID09ICdtYXN0ZXInIGFuZCAnbWFzdGVyJyBub3QgaW4gcGFyc2VyLnJlcG8uX2Jvb2ttYXJrczoKLSAgICAgICAgICAgICMgZmFrZSBib29rbWFyawotICAgICAgICAgICAgcHJpbnQgIm9rICVzIiAlIHJlZgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgZWxpZiBib29rbWFya3MucHVzaGJvb2ttYXJrKHBhcnNlci5yZXBvLCBibWFyaywgb2xkLCBuZXcpOgotICAgICAgICAgICAgIyB1cGRhdGVkIGxvY2FsbHkKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50ICJlcnJvciAlcyIgJSByZWYKLSAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgaWYgcGVlcjoKLSAgICAgICAgICAgIHJiID0gcGVlci5saXN0a2V5cygnYm9va21hcmtzJykKLSAgICAgICAgICAgIG9sZCA9IHJiLmdldChibWFyaywgJycpCisgICAgICAgICMgdXBkYXRlIHJlbW90ZSBib29rbWFya3MKKyAgICAgICAgcmVtb3RlX2JtYXJrcyA9IHBlZXIubGlzdGtleXMoJ2Jvb2ttYXJrcycpCisgICAgICAgIGZvciByZWYsIGJtYXJrLCBvbGQsIG5ldyBpbiBwX2JtYXJrczoKKyAgICAgICAgICAgIGlmIGZvcmNlX3B1c2g6CisgICAgICAgICAgICAgICAgb2xkID0gcmVtb3RlX2JtYXJrcy5nZXQoYm1hcmssICcnKQogICAgICAgICAgICAgaWYgbm90IHBlZXIucHVzaGtleSgnYm9va21hcmtzJywgYm1hcmssIG9sZCwgbmV3KToKICAgICAgICAgICAgICAgICBwcmludCAiZXJyb3IgJXMiICUgcmVmCi0gICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICBwcmludCAib2sgJXMiICUgcmVmCisgICAgZWxzZToKKyAgICAgICAgIyB1cGRhdGUgbG9jYWwgYm9va21hcmtzCisgICAgICAgIGZvciByZWYsIGJtYXJrLCBvbGQsIG5ldyBpbiBwX2JtYXJrczoKKyAgICAgICAgICAgIGlmIG5vdCBib29rbWFya3MucHVzaGJvb2ttYXJrKHBhcnNlci5yZXBvLCBibWFyaywgb2xkLCBuZXcpOgorICAgICAgICAgICAgICAgIHByaW50ICJlcnJvciAlcyIgJSByZWYKIAogICAgIHByaW50CiAKK2RlZiBkb19vcHRpb24ocGFyc2VyKToKKyAgICBnbG9iYWwgZHJ5X3J1biwgZm9yY2VfcHVzaAorICAgIF8sIGtleSwgdmFsdWUgPSBwYXJzZXIubGluZS5zcGxpdCgnICcpCisgICAgaWYga2V5ID09ICdkcnktcnVuJzoKKyAgICAgICAgZHJ5X3J1biA9ICh2YWx1ZSA9PSAndHJ1ZScpCisgICAgICAgIHByaW50ICdvaycKKyAgICBlbGlmIGtleSA9PSAnZm9yY2UnOgorICAgICAgICBmb3JjZV9wdXNoID0gKHZhbHVlID09ICd0cnVlJykKKyAgICAgICAgcHJpbnQgJ29rJworICAgIGVsc2U6CisgICAgICAgIHByaW50ICd1bnN1cHBvcnRlZCcKKwogZGVmIGZpeF9wYXRoKGFsaWFzLCByZXBvLCBvcmlnX3VybCk6CiAgICAgdXJsID0gdXJscGFyc2UudXJscGFyc2Uob3JpZ191cmwsICdmaWxlJykKICAgICBpZiB1cmwuc2NoZW1lICE9ICdmaWxlJyBvciBvcy5wYXRoLmlzYWJzKHVybC5wYXRoKToKQEAgLTkwMiwxMiArMTEzMSwxNCBAQAogICAgIHN1YnByb2Nlc3MuY2FsbChjbWQpCiAKIGRlZiBtYWluKGFyZ3MpOgotICAgIGdsb2JhbCBwcmVmaXgsIGRpcm5hbWUsIGJyYW5jaGVzLCBibWFya3MKKyAgICBnbG9iYWwgcHJlZml4LCBnaXRkaXIsIGRpcm5hbWUsIGJyYW5jaGVzLCBibWFya3MKICAgICBnbG9iYWwgbWFya3MsIGJsb2JfbWFya3MsIHBhcnNlZF9yZWZzCiAgICAgZ2xvYmFsIHBlZXIsIG1vZGUsIGJhZF9tYWlsLCBiYWRfbmFtZQogICAgIGdsb2JhbCB0cmFja19icmFuY2hlcywgZm9yY2VfcHVzaCwgaXNfdG1wCiAgICAgZ2xvYmFsIHBhcnNlZF90YWdzCiAgICAgZ2xvYmFsIGZpbGVub2RlcworICAgIGdsb2JhbCBmYWtlX2JtYXJrLCBoZ192ZXJzaW9uCisgICAgZ2xvYmFsIGRyeV9ydW4KIAogICAgIGFsaWFzID0gYXJnc1sxXQogICAgIHVybCA9IGFyZ3NbMl0KQEAgLTkxNSw3ICsxMTQ2LDcgQEAKIAogICAgIGhnX2dpdF9jb21wYXQgPSBnZXRfY29uZmlnX2Jvb2woJ3JlbW90ZS1oZy5oZy1naXQtY29tcGF0JykKICAgICB0cmFja19icmFuY2hlcyA9IGdldF9jb25maWdfYm9vbCgncmVtb3RlLWhnLnRyYWNrLWJyYW5jaGVzJywgVHJ1ZSkKLSAgICBmb3JjZV9wdXNoID0gZ2V0X2NvbmZpZ19ib29sKCdyZW1vdGUtaGcuZm9yY2UtcHVzaCcpCisgICAgZm9yY2VfcHVzaCA9IEZhbHNlCiAKICAgICBpZiBoZ19naXRfY29tcGF0OgogICAgICAgICBtb2RlID0gJ2hnJwpAQCAtOTQxLDYgKzExNzIsMTIgQEAKICAgICBtYXJrcyA9IE5vbmUKICAgICBwYXJzZWRfdGFncyA9IHt9CiAgICAgZmlsZW5vZGVzID0ge30KKyAgICBmYWtlX2JtYXJrID0gTm9uZQorICAgIHRyeToKKyAgICAgICAgaGdfdmVyc2lvbiA9IHR1cGxlKGludChlKSBmb3IgZSBpbiB1dGlsLnZlcnNpb24oKS5zcGxpdCgnLicpKQorICAgIGV4Y2VwdDoKKyAgICAgICAgaGdfdmVyc2lvbiA9IE5vbmUKKyAgICBkcnlfcnVuID0gRmFsc2UKIAogICAgIHJlcG8gPSBnZXRfcmVwbyh1cmwsIGFsaWFzKQogICAgIHByZWZpeCA9ICdyZWZzL2hnLyVzJyAlIGFsaWFzCkBAIC05NDgsMTEgKzExODUsOCBAQAogICAgIGlmIG5vdCBpc190bXA6CiAgICAgICAgIGZpeF9wYXRoKGFsaWFzLCBwZWVyIG9yIHJlcG8sIHVybCkKIAotICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXJuYW1lKToKLSAgICAgICAgb3MubWFrZWRpcnMoZGlybmFtZSkKLQogICAgIG1hcmtzX3BhdGggPSBvcy5wYXRoLmpvaW4oZGlybmFtZSwgJ21hcmtzLWhnJykKLSAgICBtYXJrcyA9IE1hcmtzKG1hcmtzX3BhdGgpCisgICAgbWFya3MgPSBNYXJrcyhtYXJrc19wYXRoLCByZXBvKQogCiAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgIGltcG9ydCBtc3ZjcnQKQEAgLTk2OCw2ICsxMjAyLDggQEAKICAgICAgICAgICAgIGRvX2ltcG9ydChwYXJzZXIpCiAgICAgICAgIGVsaWYgcGFyc2VyLmNoZWNrKCdleHBvcnQnKToKICAgICAgICAgICAgIGRvX2V4cG9ydChwYXJzZXIpCisgICAgICAgIGVsaWYgcGFyc2VyLmNoZWNrKCdvcHRpb24nKToKKyAgICAgICAgICAgIGRvX29wdGlvbihwYXJzZXIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBkaWUoJ3VuaGFuZGxlZCBjb21tYW5kOiAlcycgJSBsaW5lKQogICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcmVtb3RlLWhlbHBlcnMvdGVzdC1ienIuc2ggYi9jb250cmliL3JlbW90ZS1oZWxwZXJzL3Rlc3QtYnpyLnNoCmluZGV4IDVkZmEwNzAuLmRjZTI4MWYgMTAwNzU1Ci0tLSBhL2NvbnRyaWIvcmVtb3RlLWhlbHBlcnMvdGVzdC1ienIuc2gKKysrIGIvY29udHJpYi9yZW1vdGUtaGVscGVycy90ZXN0LWJ6ci5zaApAQCAtMTIsODYgKzEyLDkwIEBACiAJdGVzdF9kb25lCiBmaQogCi1pZiAhICIkUFlUSE9OX1BBVEgiIC1jICdpbXBvcnQgYnpybGliJzsgdGhlbgoraWYgISBweXRob24gLWMgJ2ltcG9ydCBienJsaWInOyB0aGVuCiAJc2tpcF9hbGw9J3NraXBwaW5nIHJlbW90ZS1ienIgdGVzdHM7IGJ6ciBub3QgYXZhaWxhYmxlJwogCXRlc3RfZG9uZQogZmkKIAogY2hlY2sgKCkgewotCShjZCAkMSAmJgotCWdpdCBsb2cgLS1mb3JtYXQ9JyVzJyAtMSAmJgotCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCkgPiBhY3R1YWwgJiYKLQkoZWNobyAkMiAmJgotCWVjaG8gInJlZnMvaGVhZHMvJDMiKSA+IGV4cGVjdGVkICYmCisJZWNobyAkMyA+IGV4cGVjdGVkICYmCisJZ2l0IC0tZ2l0LWRpcj0kMS8uZ2l0IGxvZyAtLWZvcm1hdD0nJXMnIC0xICQyID4gYWN0dWFsCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiB9CiAKIGJ6ciB3aG9hbWkgIkEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nJyAnCi0gIChienIgaW5pdCBienJyZXBvICYmCi0gIGNkIGJ6cnJlcG8gJiYKLSAgZWNobyBvbmUgPiBjb250ZW50ICYmCi0gIGJ6ciBhZGQgY29udGVudCAmJgotICBienIgY29tbWl0IC1tIG9uZQotICApICYmCisJKAorCWJ6ciBpbml0IGJ6cnJlcG8gJiYKKwljZCBienJyZXBvICYmCisJZWNobyBvbmUgPiBjb250ZW50ICYmCisJYnpyIGFkZCBjb250ZW50ICYmCisJYnpyIGNvbW1pdCAtbSBvbmUKKwkpICYmCiAKLSAgZ2l0IGNsb25lICJienI6OiRQV0QvYnpycmVwbyIgZ2l0cmVwbyAmJgotICBjaGVjayBnaXRyZXBvIG9uZSBtYXN0ZXIKKwlnaXQgY2xvbmUgImJ6cjo6YnpycmVwbyIgZ2l0cmVwbyAmJgorCWNoZWNrIGdpdHJlcG8gSEVBRCBvbmUKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZycgJwotICAoY2QgYnpycmVwbyAmJgotICBlY2hvIHR3byA+IGNvbnRlbnQgJiYKLSAgYnpyIGNvbW1pdCAtbSB0d28KLSAgKSAmJgorCSgKKwljZCBienJyZXBvICYmCisJZWNobyB0d28gPiBjb250ZW50ICYmCisJYnpyIGNvbW1pdCAtbSB0d28KKwkpICYmCiAKLSAgKGNkIGdpdHJlcG8gJiYgZ2l0IHB1bGwpICYmCisJKGNkIGdpdHJlcG8gJiYgZ2l0IHB1bGwpICYmCiAKLSAgY2hlY2sgZ2l0cmVwbyB0d28gbWFzdGVyCisJY2hlY2sgZ2l0cmVwbyBIRUFEIHR3bwogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nJyAnCi0gIChjZCBnaXRyZXBvICYmCi0gIGVjaG8gdGhyZWUgPiBjb250ZW50ICYmCi0gIGdpdCBjb21taXQgLWEgLW0gdGhyZWUgJiYKLSAgZ2l0IHB1c2gKLSAgKSAmJgorCSgKKwljZCBnaXRyZXBvICYmCisJZWNobyB0aHJlZSA+IGNvbnRlbnQgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHRocmVlICYmCisJZ2l0IHB1c2gKKwkpICYmCiAKLSAgZWNobyB0aHJlZSA+IGV4cGVjdGVkICYmCi0gIGNhdCBienJyZXBvL2NvbnRlbnQgPiBhY3R1YWwgJiYKLSAgdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJZWNobyB0aHJlZSA+IGV4cGVjdGVkICYmCisJY2F0IGJ6cnJlcG8vY29udGVudCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyb3VuZHRyaXAnICcKLSAgKGNkIGdpdHJlcG8gJiYKLSAgZ2l0IHB1bGwgJiYKLSAgZ2l0IGxvZyAtLWZvcm1hdD0iJXMiIC0xIG9yaWdpbi9tYXN0ZXIgPiBhY3R1YWwpICYmCi0gIGVjaG8gdGhyZWUgPiBleHBlY3RlZCAmJgotICB0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwkoCisJY2QgZ2l0cmVwbyAmJgorCWdpdCBwdWxsICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0iJXMiIC0xIG9yaWdpbi9tYXN0ZXIgPiBhY3R1YWwKKwkpICYmCisJZWNobyB0aHJlZSA+IGV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCiAKLSAgKGNkIGdpdHJlcG8gJiYgZ2l0IHB1c2ggJiYgZ2l0IHB1bGwpICYmCisJKGNkIGdpdHJlcG8gJiYgZ2l0IHB1c2ggJiYgZ2l0IHB1bGwpICYmCiAKLSAgKGNkIGJ6cnJlcG8gJiYKLSAgZWNobyBmb3VyID4gY29udGVudCAmJgotICBienIgY29tbWl0IC1tIGZvdXIKLSAgKSAmJgorCSgKKwljZCBienJyZXBvICYmCisJZWNobyBmb3VyID4gY29udGVudCAmJgorCWJ6ciBjb21taXQgLW0gZm91cgorCSkgJiYKIAotICAoY2QgZ2l0cmVwbyAmJiBnaXQgcHVsbCAmJiBnaXQgcHVzaCkgJiYKKwkoY2QgZ2l0cmVwbyAmJiBnaXQgcHVsbCAmJiBnaXQgcHVzaCkgJiYKIAotICBjaGVjayBnaXRyZXBvIGZvdXIgbWFzdGVyICYmCisJY2hlY2sgZ2l0cmVwbyBIRUFEIGZvdXIgJiYKIAotICAoY2QgZ2l0cmVwbyAmJgotICBlY2hvIGZpdmUgPiBjb250ZW50ICYmCi0gIGdpdCBjb21taXQgLWEgLW0gZml2ZSAmJgotICBnaXQgcHVzaCAmJiBnaXQgcHVsbAotICApICYmCisJKAorCWNkIGdpdHJlcG8gJiYKKwllY2hvIGZpdmUgPiBjb250ZW50ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBmaXZlICYmCisJZ2l0IHB1c2ggJiYgZ2l0IHB1bGwKKwkpICYmCiAKLSAgKGNkIGJ6cnJlcG8gJiYgYnpyIHJldmVydCkgJiYKKwkoY2QgYnpycmVwbyAmJiBienIgcmV2ZXJ0KSAmJgogCi0gIGVjaG8gZml2ZSA+IGV4cGVjdGVkICYmCi0gIGNhdCBienJyZXBvL2NvbnRlbnQgPiBhY3R1YWwgJiYKLSAgdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJZWNobyBmaXZlID4gZXhwZWN0ZWQgJiYKKwljYXQgYnpycmVwby9jb250ZW50ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKIGNhdCA+IGV4cGVjdGVkIDw8RU9GCkBAIC0xMDEsMjkgKzEwNSwzNSBAQAogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwZWNpYWwgbW9kZXMnICcKLSAgKGNkIGJ6cnJlcG8gJiYKLSAgZWNobyBleGVjID4gZXhlY3V0YWJsZQotICBjaG1vZCAreCBleGVjdXRhYmxlICYmCi0gIGJ6ciBhZGQgZXhlY3V0YWJsZQotICBienIgY29tbWl0IC1tIGV4ZWMgJiYKLSAgbG4gLXMgY29udGVudCBsaW5rCi0gIGJ6ciBhZGQgbGluawotICBienIgY29tbWl0IC1tIGxpbmsgJiYKLSAgbWtkaXIgZGlyICYmCi0gIGJ6ciBhZGQgZGlyICYmCi0gIGJ6ciBjb21taXQgLW0gZGlyKSAmJgorCSgKKwljZCBienJyZXBvICYmCisJZWNobyBleGVjID4gZXhlY3V0YWJsZQorCWNobW9kICt4IGV4ZWN1dGFibGUgJiYKKwlienIgYWRkIGV4ZWN1dGFibGUKKwlienIgY29tbWl0IC1tIGV4ZWMgJiYKKwlsbiAtcyBjb250ZW50IGxpbmsKKwlienIgYWRkIGxpbmsKKwlienIgY29tbWl0IC1tIGxpbmsgJiYKKwlta2RpciBkaXIgJiYKKwlienIgYWRkIGRpciAmJgorCWJ6ciBjb21taXQgLW0gZGlyCisJKSAmJgogCi0gIChjZCBnaXRyZXBvICYmCi0gIGdpdCBwdWxsCi0gIGdpdCBscy10cmVlIEhFQUQgPiAuLi9hY3R1YWwpICYmCisJKAorCWNkIGdpdHJlcG8gJiYKKwlnaXQgcHVsbAorCWdpdCBscy10cmVlIEhFQUQgPiAuLi9hY3R1YWwKKwkpICYmCiAKLSAgdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCiAKLSAgKGNkIGdpdHJlcG8gJiYKLSAgZ2l0IGNhdC1maWxlIC1wIEhFQUQ6bGluayA+IC4uL2FjdHVhbCkgJiYKKwkoCisJY2QgZ2l0cmVwbyAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEOmxpbmsgPiAuLi9hY3R1YWwKKwkpICYmCiAKLSAgcHJpbnRmIGNvbnRlbnQgPiBleHBlY3RlZCAmJgotICB0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwlwcmludGYgY29udGVudCA+IGV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKIGNhdCA+IGV4cGVjdGVkIDw8RU9GCkBAIC0xMzQsMTM0ICsxNDQsMTQ1IEBACiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbW92aW5nIGRpcmVjdG9yeScgJwotICAoY2QgYnpycmVwbyAmJgotICBta2RpciBtb3ZlZGlyICYmCi0gIGVjaG8gb25lID4gbW92ZWRpci9vbmUgJiYKLSAgZWNobyB0d28gPiBtb3ZlZGlyL3R3byAmJgotICBienIgYWRkIG1vdmVkaXIgJiYKLSAgYnpyIGNvbW1pdCAtbSBtb3ZlZGlyICYmCi0gIGJ6ciBtdiBtb3ZlZGlyIG1vdmVkaXItbmV3ICYmCi0gIGJ6ciBjb21taXQgLW0gbW92ZWRpci1uZXcpICYmCisJKAorCWNkIGJ6cnJlcG8gJiYKKwlta2RpciBtb3ZlZGlyICYmCisJZWNobyBvbmUgPiBtb3ZlZGlyL29uZSAmJgorCWVjaG8gdHdvID4gbW92ZWRpci90d28gJiYKKwlienIgYWRkIG1vdmVkaXIgJiYKKwlienIgY29tbWl0IC1tIG1vdmVkaXIgJiYKKwlienIgbXYgbW92ZWRpciBtb3ZlZGlyLW5ldyAmJgorCWJ6ciBjb21taXQgLW0gbW92ZWRpci1uZXcKKwkpICYmCiAKLSAgKGNkIGdpdHJlcG8gJiYKLSAgZ2l0IHB1bGwgJiYKLSAgZ2l0IGxzLXRyZWUgSEVBRCA+IC4uL2FjdHVhbCkgJiYKKwkoCisJY2QgZ2l0cmVwbyAmJgorCWdpdCBwdWxsICYmCisJZ2l0IGxzLXRyZWUgSEVBRCA+IC4uL2FjdHVhbAorCSkgJiYKIAotICB0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZmVyZW50IGF1dGhvcnMnICcKLSAgKGNkIGJ6cnJlcG8gJiYKLSAgZWNobyBqb2huID4+IGNvbnRlbnQgJiYKLSAgYnpyIGNvbW1pdCAtbSBqb2huIFwKLSAgICAtLWF1dGhvciAiSmFuZSBSZXkgPGpyZXlAZXhhbXBsZS5jb20+IiBcCi0gICAgLS1hdXRob3IgIkpvaG4gRG9lIDxqZG9lQGV4YW1wbGUuY29tPiIpICYmCisJKAorCWNkIGJ6cnJlcG8gJiYKKwllY2hvIGpvaG4gPj4gY29udGVudCAmJgorCWJ6ciBjb21taXQgLW0gam9obiBcCisJICAtLWF1dGhvciAiSmFuZSBSZXkgPGpyZXlAZXhhbXBsZS5jb20+IiBcCisJICAtLWF1dGhvciAiSm9obiBEb2UgPGpkb2VAZXhhbXBsZS5jb20+IgorCSkgJiYKIAotICAoY2QgZ2l0cmVwbyAmJgotICBnaXQgcHVsbCAmJgotICBnaXQgc2hvdyAtLWZvcm1hdD0iJWFuIDwlYWU+LCAlY24gPCVjZT4iIC0tcXVpZXQgPiAuLi9hY3R1YWwpICYmCisJKAorCWNkIGdpdHJlcG8gJiYKKwlnaXQgcHVsbCAmJgorCWdpdCBzaG93IC0tZm9ybWF0PSIlYW4gPCVhZT4sICVjbiA8JWNlPiIgLS1xdWlldCA+IC4uL2FjdHVhbAorCSkgJiYKIAotICBlY2hvICJKYW5lIFJleSA8anJleUBleGFtcGxlLmNvbT4sIEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IiA+IGV4cGVjdGVkICYmCi0gIHRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCWVjaG8gIkphbmUgUmV5IDxqcmV5QGV4YW1wbGUuY29tPiwgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4iID4gZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAorIyBjbGVhbnVwIHByZXZpb3VzIHN0dWZmCitybSAtcmYgYnpycmVwbyBnaXRyZXBvCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHV0Zi04IGZpbGVuYW1lcycgJwotICBta2RpciAtcCB0bXAgJiYgY2QgdG1wICYmCi0gIHRlc3Rfd2hlbl9maW5pc2hlZCAiY2QgLi4gJiYgcm0gLXJmIHRtcCAmJiBMQ19BTEw9QyIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBienJyZXBvIGdpdHJlcG8gJiYgTENfQUxMPUMiICYmCiAKLSAgTENfQUxMPWVuX1VTLlVURi04Ci0gIGV4cG9ydCBMQ19BTEwKLSAgKAotICBienIgaW5pdCBienJyZXBvICYmCi0gIGNkIGJ6cnJlcG8gJiYKKwlMQ19BTEw9ZW5fVVMuVVRGLTgKKwlleHBvcnQgTENfQUxMCiAKLSAgZWNobyB0ZXN0ID4+ICLDpnLDuCIgJiYKLSAgYnpyIGFkZCAiw6Zyw7giICYmCi0gIGVjaG8gdGVzdCA+PiAiw7h+PyIgJiYKLSAgYnpyIGFkZCAiw7h+PyIgJiYKLSAgYnpyIGNvbW1pdCAtbSBhZGQtdXRmLTggJiYKLSAgZWNobyB0ZXN0ID4+ICLDpnLDuCIgJiYKLSAgYnpyIGNvbW1pdCAtbSB0ZXN0LXV0Zi04ICYmCi0gIGJ6ciBybSAiw7h+PyIgJiYKLSAgYnpyIG12ICLDpnLDuCIgIsO4fj8iICYmCi0gIGJ6ciBjb21taXQgLW0gYnpyLW12LXV0Zi04Ci0gICkgJiYKKwkoCisJYnpyIGluaXQgYnpycmVwbyAmJgorCWNkIGJ6cnJlcG8gJiYKIAotICAoCi0gIGdpdCBjbG9uZSAiYnpyOjokUFdEL2J6cnJlcG8iIGdpdHJlcG8gJiYKLSAgY2QgZ2l0cmVwbyAmJgotICBnaXQgLWMgY29yZS5xdW90ZXBhdGg9ZmFsc2UgbHMtZmlsZXMgPiAuLi9hY3R1YWwKLSAgKSAmJgotICBlY2hvICLDuH4/IiA+IGV4cGVjdGVkICYmCi0gIHRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCWVjaG8gdGVzdCA+PiAiw6Zyw7giICYmCisJYnpyIGFkZCAiw6Zyw7giICYmCisJZWNobyB0ZXN0ID4+ICLDuH4/IiAmJgorCWJ6ciBhZGQgIsO4fj8iICYmCisJYnpyIGNvbW1pdCAtbSBhZGQtdXRmLTggJiYKKwllY2hvIHRlc3QgPj4gIsOmcsO4IiAmJgorCWJ6ciBjb21taXQgLW0gdGVzdC11dGYtOCAmJgorCWJ6ciBybSAiw7h+PyIgJiYKKwlienIgbXYgIsOmcsO4IiAiw7h+PyIgJiYKKwlienIgY29tbWl0IC1tIGJ6ci1tdi11dGYtOAorCSkgJiYKKworCSgKKwlnaXQgY2xvbmUgImJ6cjo6YnpycmVwbyIgZ2l0cmVwbyAmJgorCWNkIGdpdHJlcG8gJiYKKwlnaXQgLWMgY29yZS5xdW90ZXBhdGg9ZmFsc2UgbHMtZmlsZXMgPiAuLi9hY3R1YWwKKwkpICYmCisJZWNobyAiw7h+PyIgPiBleHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHV0Zi04IGZpbGVuYW1lcycgJwotICBta2RpciAtcCB0bXAgJiYgY2QgdG1wICYmCi0gIHRlc3Rfd2hlbl9maW5pc2hlZCAiY2QgLi4gJiYgcm0gLXJmIHRtcCAmJiBMQ19BTEw9QyIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBienJyZXBvIGdpdHJlcG8gJiYgTENfQUxMPUMiICYmCiAKLSAgTENfQUxMPWVuX1VTLlVURi04Ci0gIGV4cG9ydCBMQ19BTEwKKwlta2RpciAtcCB0bXAgJiYgY2QgdG1wICYmCiAKLSAgKAotICBienIgaW5pdCBienJyZXBvICYmCi0gIGNkIGJ6cnJlcG8gJiYKKwlMQ19BTEw9ZW5fVVMuVVRGLTgKKwlleHBvcnQgTENfQUxMCiAKLSAgZWNobyBvbmUgPj4gY29udGVudCAmJgotICBienIgYWRkIGNvbnRlbnQgJiYKLSAgYnpyIGNvbW1pdCAtbSBvbmUKLSAgKSAmJgorCSgKKwlienIgaW5pdCBienJyZXBvICYmCisJY2QgYnpycmVwbyAmJgogCi0gICgKLSAgZ2l0IGNsb25lICJienI6OiRQV0QvYnpycmVwbyIgZ2l0cmVwbyAmJgotICBjZCBnaXRyZXBvICYmCisJZWNobyBvbmUgPj4gY29udGVudCAmJgorCWJ6ciBhZGQgY29udGVudCAmJgorCWJ6ciBjb21taXQgLW0gb25lCisJKSAmJgogCi0gIGVjaG8gdGVzdCA+PiAiw6Zyw7giICYmCi0gIGdpdCBhZGQgIsOmcsO4IiAmJgotICBnaXQgY29tbWl0IC1tIHV0Zi04ICYmCisJKAorCWdpdCBjbG9uZSAiYnpyOjpienJyZXBvIiBnaXRyZXBvICYmCisJY2QgZ2l0cmVwbyAmJgogCi0gIGdpdCBwdXNoCi0gICkgJiYKKwllY2hvIHRlc3QgPj4gIsOmcsO4IiAmJgorCWdpdCBhZGQgIsOmcsO4IiAmJgorCWdpdCBjb21taXQgLW0gdXRmLTggJiYKIAotICAoY2QgYnpycmVwbyAmJiBienIgbHMgPiAuLi9hY3R1YWwpICYmCi0gIHByaW50ZiAiY29udGVudFxuw6Zyw7hcbiIgPiBleHBlY3RlZCAmJgotICB0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwlnaXQgcHVzaAorCSkgJiYKKworCShjZCBienJyZXBvICYmIGJ6ciBscyA+IC4uL2FjdHVhbCkgJiYKKwlwcmludGYgImNvbnRlbnRcbsOmcsO4XG4iID4gZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaGluZyBhIG1lcmdlJyAnCi0gIG1rZGlyIC1wIHRtcCAmJiBjZCB0bXAgJiYKLSAgdGVzdF93aGVuX2ZpbmlzaGVkICJjZCAuLiAmJiBybSAtcmYgdG1wIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGJ6cnJlcG8gZ2l0cmVwbyIgJiYKIAotICAoCi0gIGJ6ciBpbml0IGJ6cnJlcG8gJiYKLSAgY2QgYnpycmVwbyAmJgotICBlY2hvIG9uZSA+IGNvbnRlbnQgJiYKLSAgYnpyIGFkZCBjb250ZW50ICYmCi0gIGJ6ciBjb21taXQgLW0gb25lCi0gICkgJiYKKwkoCisJYnpyIGluaXQgYnpycmVwbyAmJgorCWNkIGJ6cnJlcG8gJiYKKwllY2hvIG9uZSA+IGNvbnRlbnQgJiYKKwlienIgYWRkIGNvbnRlbnQgJiYKKwlienIgY29tbWl0IC1tIG9uZQorCSkgJiYKIAotICBnaXQgY2xvbmUgImJ6cjo6JFBXRC9ienJyZXBvIiBnaXRyZXBvICYmCisJZ2l0IGNsb25lICJienI6OmJ6cnJlcG8iIGdpdHJlcG8gJiYKIAotICAoCi0gIGNkIGJ6cnJlcG8gJiYKLSAgZWNobyB0d28gPiBjb250ZW50ICYmCi0gIGJ6ciBjb21taXQgLW0gdHdvCi0gICkgJiYKKwkoCisJY2QgYnpycmVwbyAmJgorCWVjaG8gdHdvID4gY29udGVudCAmJgorCWJ6ciBjb21taXQgLW0gdHdvCisJKSAmJgogCi0gICgKLSAgY2QgZ2l0cmVwbyAmJgotICBlY2hvIHRocmVlID4gY29udGVudCAmJgotICBnaXQgY29tbWl0IC1hIC1tIHRocmVlICYmCi0gIGdpdCBmZXRjaCAmJgotICBnaXQgbWVyZ2Ugb3JpZ2luL21hc3RlciB8fCB0cnVlICYmCi0gIGVjaG8gdGhyZWUgPiBjb250ZW50ICYmCi0gIGdpdCBjb21taXQgLWEgLS1uby1lZGl0ICYmCi0gIGdpdCBwdXNoCi0gICkgJiYKKwkoCisJY2QgZ2l0cmVwbyAmJgorCWVjaG8gdGhyZWUgPiBjb250ZW50ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0aHJlZSAmJgorCWdpdCBmZXRjaCAmJgorCWdpdCBtZXJnZSBvcmlnaW4vbWFzdGVyIHx8IHRydWUgJiYKKwllY2hvIHRocmVlID4gY29udGVudCAmJgorCWdpdCBjb21taXQgLWEgLS1uby1lZGl0ICYmCisJZ2l0IHB1c2gKKwkpICYmCiAKLSAgZWNobyB0aHJlZSA+IGV4cGVjdGVkICYmCi0gIGNhdCBienJyZXBvL2NvbnRlbnQgPiBhY3R1YWwgJiYKLSAgdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJZWNobyB0aHJlZSA+IGV4cGVjdGVkICYmCisJY2F0IGJ6cnJlcG8vY29udGVudCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiBjYXQgPiBleHBlY3RlZCA8PEVPRgpAQCAtMjcxLDcxICsyOTIsNzAgQEAKIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9wZXIgYnpyIHJlcG8nICcKLSAgbWtkaXIgLXAgdG1wICYmIGNkIHRtcCAmJgotICB0ZXN0X3doZW5fZmluaXNoZWQgImNkIC4uICYmIHJtIC1yZiB0bXAiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgYnpycmVwbyBnaXRyZXBvIiAmJgogCi0gIGJ6ciBpbml0LXJlcG8gYnpycmVwbyAmJgorCWJ6ciBpbml0LXJlcG8gYnpycmVwbyAmJgogCi0gIGJ6ciBpbml0IGJ6cnJlcG8vdHJ1bmsgJiYKLSAgKAotICBjZCBienJyZXBvL3RydW5rICYmCi0gIGVjaG8gb25lID4+IGNvbnRlbnQgJiYKLSAgYnpyIGFkZCBjb250ZW50ICYmCi0gIGJ6ciBjb21taXQgLW0gb25lCi0gICkgJiYKKwkoCisJYnpyIGluaXQgYnpycmVwby90cnVuayAmJgorCWNkIGJ6cnJlcG8vdHJ1bmsgJiYKKwllY2hvIG9uZSA+PiBjb250ZW50ICYmCisJYnpyIGFkZCBjb250ZW50ICYmCisJYnpyIGNvbW1pdCAtbSBvbmUKKwkpICYmCiAKLSAgYnpyIGJyYW5jaCBienJyZXBvL3RydW5rIGJ6cnJlcG8vYnJhbmNoICYmCi0gICgKLSAgY2QgYnpycmVwby9icmFuY2ggJiYKLSAgZWNobyB0d28gPj4gY29udGVudCAmJgotICBienIgY29tbWl0IC1tIG9uZQotICApICYmCisJKAorCWJ6ciBicmFuY2ggYnpycmVwby90cnVuayBienJyZXBvL2JyYW5jaCAmJgorCWNkIGJ6cnJlcG8vYnJhbmNoICYmCisJZWNobyB0d28gPj4gY29udGVudCAmJgorCWJ6ciBjb21taXQgLW0gb25lCisJKSAmJgogCi0gIGdpdCBjbG9uZSAiYnpyOjokUFdEL2J6cnJlcG8iIGdpdHJlcG8gJiYKLSAgKAotICBjZCBnaXRyZXBvICYmCi0gIGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQgIiUocmVmbmFtZTpzaG9ydCkiIHJlZnMvcmVtb3Rlcy9vcmlnaW4gPiAuLi9hY3R1YWwKLSAgKSAmJgorCSgKKwlnaXQgY2xvbmUgImJ6cjo6YnpycmVwbyIgZ2l0cmVwbyAmJgorCWNkIGdpdHJlcG8gJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0ICIlKHJlZm5hbWU6c2hvcnQpIiByZWZzL3JlbW90ZXMvb3JpZ2luID4gLi4vYWN0dWFsCisJKSAmJgogCi0gIHRlc3RfY21wIC4uL2V4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJpcCcgJwotICAjIERvIG5vdCBpbWl0YXRlIHRoaXMgc3R5bGU7IGFsd2F5cyBjaGRpciBpbnNpZGUgYSBzdWJzaGVsbCBpbnN0ZWFkCi0gIG1rZGlyIC1wIHRtcCAmJiBjZCB0bXAgJiYKLSAgdGVzdF93aGVuX2ZpbmlzaGVkICJjZCAuLiAmJiBybSAtcmYgdG1wIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGJ6cnJlcG8gZ2l0cmVwbyIgJiYKIAotICAoCi0gIGJ6ciBpbml0IGJ6cnJlcG8gJiYKLSAgY2QgYnpycmVwbyAmJgorCSgKKwlienIgaW5pdCBienJyZXBvICYmCisJY2QgYnpycmVwbyAmJgogCi0gIGVjaG8gb25lID4+IGNvbnRlbnQgJiYKLSAgYnpyIGFkZCBjb250ZW50ICYmCi0gIGJ6ciBjb21taXQgLW0gb25lICYmCisJZWNobyBvbmUgPj4gY29udGVudCAmJgorCWJ6ciBhZGQgY29udGVudCAmJgorCWJ6ciBjb21taXQgLW0gb25lICYmCiAKLSAgZWNobyB0d28gPj4gY29udGVudCAmJgotICBienIgY29tbWl0IC1tIHR3bwotICApICYmCisJZWNobyB0d28gPj4gY29udGVudCAmJgorCWJ6ciBjb21taXQgLW0gdHdvCisJKSAmJgogCi0gIGdpdCBjbG9uZSAiYnpyOjokUFdEL2J6cnJlcG8iIGdpdHJlcG8gJiYKKwlnaXQgY2xvbmUgImJ6cjo6YnpycmVwbyIgZ2l0cmVwbyAmJgogCi0gICgKLSAgY2QgYnpycmVwbyAmJgotICBienIgdW5jb21taXQgLS1mb3JjZSAmJgorCSgKKwljZCBienJyZXBvICYmCisJYnpyIHVuY29tbWl0IC0tZm9yY2UgJiYKIAotICBlY2hvIHRocmVlID4+IGNvbnRlbnQgJiYKLSAgYnpyIGNvbW1pdCAtbSB0aHJlZSAmJgorCWVjaG8gdGhyZWUgPj4gY29udGVudCAmJgorCWJ6ciBjb21taXQgLW0gdGhyZWUgJiYKIAotICBlY2hvIGZvdXIgPj4gY29udGVudCAmJgotICBienIgY29tbWl0IC1tIGZvdXIgJiYKLSAgYnpyIGxvZyAtLWxpbmUgfCBzZWQgLWUgInMvXlswLTldWzAtOV0qOiAvLyIgPiAuLi9leHBlY3RlZAotICApICYmCisJZWNobyBmb3VyID4+IGNvbnRlbnQgJiYKKwlienIgY29tbWl0IC1tIGZvdXIgJiYKKwlienIgbG9nIC0tbGluZSB8IHNlZCAtZSAicy9eWzAtOV1bMC05XSo6IC8vIiA+IC4uL2V4cGVjdGVkCisJKSAmJgogCi0gIChjZCBnaXRyZXBvICYmCi0gIGdpdCBmZXRjaCAmJgotICBnaXQgbG9nIC0tZm9ybWF0PSIlYW4gJWFkICVzIiAtLWRhdGU9c2hvcnQgb3JpZ2luL21hc3RlciA+IC4uL2FjdHVhbCkgJiYKKwkoCisJY2QgZ2l0cmVwbyAmJgorCWdpdCBmZXRjaCAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9IiVhbiAlYWQgJXMiIC0tZGF0ZT1zaG9ydCBvcmlnaW4vbWFzdGVyID4gLi4vYWN0dWFsCisJKSAmJgogCi0gIHRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcmVtb3RlLWhlbHBlcnMvdGVzdC1oZy1iaWRpLnNoIGIvY29udHJpYi9yZW1vdGUtaGVscGVycy90ZXN0LWhnLWJpZGkuc2gKaW5kZXggZjU2OTY5Ny4uZjgzZDY3ZCAxMDA3NTUKLS0tIGEvY29udHJpYi9yZW1vdGUtaGVscGVycy90ZXN0LWhnLWJpZGkuc2gKKysrIGIvY29udHJpYi9yZW1vdGUtaGVscGVycy90ZXN0LWhnLWJpZGkuc2gKQEAgLTE1LDIzICsxNSwyMiBAQAogCXRlc3RfZG9uZQogZmkKIAotaWYgISAiJFBZVEhPTl9QQVRIIiAtYyAnaW1wb3J0IG1lcmN1cmlhbCc7IHRoZW4KK2lmICEgcHl0aG9uIC1jICdpbXBvcnQgbWVyY3VyaWFsJzsgdGhlbgogCXNraXBfYWxsPSdza2lwcGluZyByZW1vdGUtaGcgdGVzdHM7IG1lcmN1cmlhbCBub3QgYXZhaWxhYmxlJwogCXRlc3RfZG9uZQogZmkKIAogIyBjbG9uZSB0byBhIGdpdCByZXBvCiBnaXRfY2xvbmUgKCkgewotCWdpdCBjbG9uZSAtcSAiaGc6OiRQV0QvJDEiICQyCisJZ2l0IGNsb25lIC1xICJoZzo6JDEiICQyCiB9CiAKICMgY2xvbmUgdG8gYW4gaGcgcmVwbwogaGdfY2xvbmUgKCkgewogCSgKIAloZyBpbml0ICQyICYmCi0JaGcgLVIgJDIgYm9va21hcmsgLWkgbWFzdGVyICYmCiAJY2QgJDEgJiYKLQlnaXQgcHVzaCAtcSAiaGc6OiRQV0QvLi4vJDIiICdyZWZzL3RhZ3MvKjpyZWZzL3RhZ3MvKicgJ3JlZnMvaGVhZHMvKjpyZWZzL2hlYWRzLyonCisJZ2l0IHB1c2ggLXEgImhnOjouLi8kMiIgJ3JlZnMvdGFncy8qOnJlZnMvdGFncy8qJyAncmVmcy9oZWFkcy8qOnJlZnMvaGVhZHMvKicKIAkpICYmCiAKIAkoY2QgJDIgJiYgaGcgLXEgdXBkYXRlKQpAQCAtNDEsMTcgKzQwLDE1IEBACiBoZ19wdXNoICgpIHsKIAkoCiAJY2QgJDIKLQlvbGQ9JChnaXQgc3ltYm9saWMtcmVmIC0tc2hvcnQgSEVBRCkKIAlnaXQgY2hlY2tvdXQgLXEgLWIgdG1wICYmCi0JZ2l0IGZldGNoIC1xICJoZzo6JFBXRC8uLi8kMSIgJ3JlZnMvdGFncy8qOnJlZnMvdGFncy8qJyAncmVmcy9oZWFkcy8qOnJlZnMvaGVhZHMvKicgJiYKLQlnaXQgY2hlY2tvdXQgLXEgJG9sZCAmJgorCWdpdCBmZXRjaCAtcSAiaGc6Oi4uLyQxIiAncmVmcy90YWdzLyo6cmVmcy90YWdzLyonICdyZWZzL2hlYWRzLyo6cmVmcy9oZWFkcy8qJyAmJgorCWdpdCBjaGVja291dCAtcSBAey0xfSAmJgogCWdpdCBicmFuY2ggLXEgLUQgdG1wIDI+IC9kZXYvbnVsbCB8fCB0cnVlCiAJKQogfQogCiBoZ19sb2cgKCkgewotCWhnIC1SICQxIGxvZyAtLWdyYXBoIC0tZGVidWcgPmxvZyAmJgotCWdyZXAgLXYgJ3RhZzogKmRlZmF1bHQvJyBsb2cKKwloZyAtUiAkMSBsb2cgLS1ncmFwaCAtLWRlYnVnCiB9CiAKIHNldHVwICgpIHsKQEAgLTY3LDYgKzY0LDcgQEAKIAllY2hvICJncmFwaGxvZyA9IgogCSkgPj4gIiRIT01FIi8uaGdyYyAmJgogCWdpdCBjb25maWcgLS1nbG9iYWwgcmVtb3RlLWhnLmhnLWdpdC1jb21wYXQgdHJ1ZQorCWdpdCBjb25maWcgLS1nbG9iYWwgcmVtb3RlLWhnLnRyYWNrLWJyYW5jaGVzIHRydWUKIAogCUhHRURJVE9SPS91c3IvYmluL3RydWUKIAlHSVRfQVVUSE9SX0RBVEU9IjIwMDctMDEtMDEgMDA6MDA6MDAgKzAyMzAiCkBAIC03Nyw4ICs3NSw3IEBACiBzZXR1cAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbmNvZGluZycgJwotCW1rZGlyIC1wIHRtcCAmJiBjZCB0bXAgJiYKLQl0ZXN0X3doZW5fZmluaXNoZWQgImNkIC4uICYmIHJtIC1yZiB0bXAiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZ2l0cmVwbyogaGdyZXBvKiIgJiYKIAogCSgKIAlnaXQgaW5pdCAtcSBnaXRyZXBvICYmCkBAIC0xMTUsOCArMTEyLDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSByZW1vdmFsJyAnCi0JbWtkaXIgLXAgdG1wICYmIGNkIHRtcCAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2QgLi4gJiYgcm0gLXJmIHRtcCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBnaXRyZXBvKiBoZ3JlcG8qIiAmJgogCiAJKAogCWdpdCBpbml0IC1xIGdpdHJlcG8gJiYKQEAgLTE0OCw4ICsxNDQsNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgdGFncycgJwotCW1rZGlyIC1wIHRtcCAmJiBjZCB0bXAgJiYKLQl0ZXN0X3doZW5fZmluaXNoZWQgImNkIC4uICYmIHJtIC1yZiB0bXAiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZ2l0cmVwbyogaGdyZXBvKiIgJiYKIAogCSgKIAlnaXQgaW5pdCAtcSBnaXRyZXBvICYmCkBAIC0xNzcsOCArMTcyLDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnaGcgYnJhbmNoJyAnCi0JbWtkaXIgLXAgdG1wICYmIGNkIHRtcCAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2QgLi4gJiYgcm0gLXJmIHRtcCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBnaXRyZXBvKiBoZ3JlcG8qIiAmJgogCiAJKAogCWdpdCBpbml0IC1xIGdpdHJlcG8gJiYKQEAgLTE5NCw3ICsxODgsNyBAQAogCWhnX2Nsb25lIGdpdHJlcG8gaGdyZXBvICYmCiAKIAljZCBoZ3JlcG8gJiYKLQloZyAtcSBjbyBtYXN0ZXIgJiYKKwloZyAtcSBjbyBkZWZhdWx0ICYmCiAJaGcgbXYgYWxwaGEgYmV0YSAmJgogCWhnIC1xIGNvbW1pdCAtbSAicmVuYW1lIGFscGhhIHRvIGJldGEiICYmCiAJaGcgYnJhbmNoIGdhbW1hIHwgZ3JlcCAtdiAicGVybWFuZW50IGFuZCBnbG9iYWwiICYmCkBAIC0yMTQsOCArMjA4LDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnaGcgdGFncycgJwotCW1rZGlyIC1wIHRtcCAmJiBjZCB0bXAgJiYKLQl0ZXN0X3doZW5fZmluaXNoZWQgImNkIC4uICYmIHJtIC1yZiB0bXAiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZ2l0cmVwbyogaGdyZXBvKiIgJiYKIAogCSgKIAlnaXQgaW5pdCAtcSBnaXRyZXBvICYmCkBAIC0yMzEsNyArMjI0LDcgQEAKIAloZ19jbG9uZSBnaXRyZXBvIGhncmVwbyAmJgogCiAJY2QgaGdyZXBvICYmCi0JaGcgY28gbWFzdGVyICYmCisJaGcgY28gZGVmYXVsdCAmJgogCWhnIHRhZyBhbHBoYQogCSkgJiYKIApkaWZmIC0tZ2l0IGEvY29udHJpYi9yZW1vdGUtaGVscGVycy90ZXN0LWhnLWhnLWdpdC5zaCBiL2NvbnRyaWIvcmVtb3RlLWhlbHBlcnMvdGVzdC1oZy1oZy1naXQuc2gKaW5kZXggN2Y1NzljOC4uMjIxOTI4NCAxMDA3NTUKLS0tIGEvY29udHJpYi9yZW1vdGUtaGVscGVycy90ZXN0LWhnLWhnLWdpdC5zaAorKysgYi9jb250cmliL3JlbW90ZS1oZWxwZXJzL3Rlc3QtaGctaGctZ2l0LnNoCkBAIC0xNSwxOSArMTUsMjAgQEAKIAl0ZXN0X2RvbmUKIGZpCiAKLWlmICEgIiRQWVRIT05fUEFUSCIgLWMgJ2ltcG9ydCBtZXJjdXJpYWwnOyB0aGVuCitpZiAhIHB5dGhvbiAtYyAnaW1wb3J0IG1lcmN1cmlhbCc7IHRoZW4KIAlza2lwX2FsbD0nc2tpcHBpbmcgcmVtb3RlLWhnIHRlc3RzOyBtZXJjdXJpYWwgbm90IGF2YWlsYWJsZScKIAl0ZXN0X2RvbmUKIGZpCiAKLWlmICEgIiRQWVRIT05fUEFUSCIgLWMgJ2ltcG9ydCBoZ2dpdCc7IHRoZW4KK2lmICEgcHl0aG9uIC1jICdpbXBvcnQgaGdnaXQnOyB0aGVuCiAJc2tpcF9hbGw9J3NraXBwaW5nIHJlbW90ZS1oZyB0ZXN0czsgaGctZ2l0IG5vdCBhdmFpbGFibGUnCiAJdGVzdF9kb25lCiBmaQogCiAjIGNsb25lIHRvIGEgZ2l0IHJlcG8gd2l0aCBnaXQKIGdpdF9jbG9uZV9naXQgKCkgewotCWdpdCBjbG9uZSAtcSAiaGc6OiRQV0QvJDEiICQyCisJZ2l0IGNsb25lIC1xICJoZzo6JDEiICQyICYmCisJKGNkICQyICYmIGdpdCBjaGVja291dCBtYXN0ZXIgJiYgZ2l0IGJyYW5jaCAtRCBkZWZhdWx0KQogfQogCiAjIGNsb25lIHRvIGFuIGhnIHJlcG8gd2l0aCBnaXQKQEAgLTM2LDcgKzM3LDcgQEAKIAloZyBpbml0ICQyICYmCiAJaGcgLVIgJDIgYm9va21hcmsgLWkgbWFzdGVyICYmCiAJY2QgJDEgJiYKLQlnaXQgcHVzaCAtcSAiaGc6OiRQV0QvLi4vJDIiICdyZWZzL3RhZ3MvKjpyZWZzL3RhZ3MvKicgJ3JlZnMvaGVhZHMvKjpyZWZzL2hlYWRzLyonCisJZ2l0IHB1c2ggLXEgImhnOjouLi8kMiIgJ3JlZnMvdGFncy8qOnJlZnMvdGFncy8qJyAncmVmcy9oZWFkcy8qOnJlZnMvaGVhZHMvKicKIAkpICYmCiAKIAkoY2QgJDIgJiYgaGcgLXEgdXBkYXRlKQpAQCAtNjEsMTAgKzYyLDEwIEBACiBoZ19wdXNoX2dpdCAoKSB7CiAJKAogCWNkICQyCi0Jb2xkPSQoZ2l0IHN5bWJvbGljLXJlZiAtLXNob3J0IEhFQUQpCiAJZ2l0IGNoZWNrb3V0IC1xIC1iIHRtcCAmJgotCWdpdCBmZXRjaCAtcSAiaGc6OiRQV0QvLi4vJDEiICdyZWZzL3RhZ3MvKjpyZWZzL3RhZ3MvKicgJ3JlZnMvaGVhZHMvKjpyZWZzL2hlYWRzLyonICYmCi0JZ2l0IGNoZWNrb3V0IC1xICRvbGQgJiYKKwlnaXQgZmV0Y2ggLXEgImhnOjouLi8kMSIgJ3JlZnMvdGFncy8qOnJlZnMvdGFncy8qJyAncmVmcy9oZWFkcy8qOnJlZnMvaGVhZHMvKicgJiYKKwlnaXQgYnJhbmNoIC1EIGRlZmF1bHQgJiYKKwlnaXQgY2hlY2tvdXQgLXEgQHstMX0gJiYKIAlnaXQgYnJhbmNoIC1xIC1EIHRtcCAyPiAvZGV2L251bGwgfHwgdHJ1ZQogCSkKIH0KQEAgLTEwNCwxOCArMTA1LDE4IEBACiAJZ2l0IGNvbmZpZyAtLWdsb2JhbCByZW1vdGUtaGcuaGctZ2l0LWNvbXBhdCB0cnVlCiAJZ2l0IGNvbmZpZyAtLWdsb2JhbCByZW1vdGUtaGcudHJhY2stYnJhbmNoZXMgZmFsc2UKIAotCUhHRURJVE9SPS91c3IvYmluL3RydWUKKwlIR0VESVRPUj10cnVlCisJSEdNRVJHRT10cnVlCiAKIAlHSVRfQVVUSE9SX0RBVEU9IjIwMDctMDEtMDEgMDA6MDA6MDAgKzAyMzAiCiAJR0lUX0NPTU1JVFRFUl9EQVRFPSIkR0lUX0FVVEhPUl9EQVRFIgotCWV4cG9ydCBIR0VESVRPUiBHSVRfQVVUSE9SX0RBVEUgR0lUX0NPTU1JVFRFUl9EQVRFCisJZXhwb3J0IEhHRURJVE9SIEhHTUVSR0UgR0lUX0FVVEhPUl9EQVRFIEdJVF9DT01NSVRURVJfREFURQogfQogCiBzZXR1cAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGVjdXRhYmxlIGJpdCcgJwotCW1rZGlyIC1wIHRtcCAmJiBjZCB0bXAgJiYKLQl0ZXN0X3doZW5fZmluaXNoZWQgImNkIC4uICYmIHJtIC1yZiB0bXAiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZ2l0cmVwbyogaGdyZXBvKiIgJiYKIAogCSgKIAlnaXQgaW5pdCAtcSBnaXRyZXBvICYmCkBAIC0xNTAsOCArMTUxLDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ltbGluaycgJwotCW1rZGlyIC1wIHRtcCAmJiBjZCB0bXAgJiYKLQl0ZXN0X3doZW5fZmluaXNoZWQgImNkIC4uICYmIHJtIC1yZiB0bXAiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZ2l0cmVwbyogaGdyZXBvKiIgJiYKIAogCSgKIAlnaXQgaW5pdCAtcSBnaXRyZXBvICYmCkBAIC0xODEsOCArMTgxLDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgY29uZmxpY3QgMScgJwotCW1rZGlyIC1wIHRtcCAmJiBjZCB0bXAgJiYKLQl0ZXN0X3doZW5fZmluaXNoZWQgImNkIC4uICYmIHJtIC1yZiB0bXAiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZ2l0cmVwbyogaGdyZXBvKiIgJiYKIAogCSgKIAloZyBpbml0IGhncmVwbzEgJiYKQEAgLTE5OCw3ICsxOTcsNyBAQAogCWVjaG8gQyA+IGFmaWxlICYmCiAJaGcgY2kgLW0gIkEtPkMiICYmCiAKLQloZyBtZXJnZSAtcjEgfHwgdHJ1ZSAmJgorCWhnIG1lcmdlIC1yMSAmJgogCWVjaG8gQyA+IGFmaWxlICYmCiAJaGcgcmVzb2x2ZSAtbSBhZmlsZSAmJgogCWhnIGNpIC1tICJtZXJnZSB0byBDIgpAQCAtMjE2LDggKzIxNSw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGNvbmZsaWN0IDInICcKLQlta2RpciAtcCB0bXAgJiYgY2QgdG1wICYmCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJjZCAuLiAmJiBybSAtcmYgdG1wIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGdpdHJlcG8qIGhncmVwbyoiICYmCiAKIAkoCiAJaGcgaW5pdCBoZ3JlcG8xICYmCkBAIC0yNTEsOCArMjQ5LDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29udmVyZ2VkIG1lcmdlJyAnCi0JbWtkaXIgLXAgdG1wICYmIGNkIHRtcCAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2QgLi4gJiYgcm0gLXJmIHRtcCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBnaXRyZXBvKiBoZ3JlcG8qIiAmJgogCiAJKAogCWhnIGluaXQgaGdyZXBvMSAmJgpAQCAtMjg3LDggKzI4NCw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VuY29kaW5nJyAnCi0JbWtkaXIgLXAgdG1wICYmIGNkIHRtcCAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2QgLi4gJiYgcm0gLXJmIHRtcCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBnaXRyZXBvKiBoZ3JlcG8qIiAmJgogCiAJKAogCWdpdCBpbml0IC1xIGdpdHJlcG8gJiYKQEAgLTMyNyw4ICszMjMsNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIHJlbW92YWwnICcKLQlta2RpciAtcCB0bXAgJiYgY2QgdG1wICYmCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJjZCAuLiAmJiBybSAtcmYgdG1wIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGdpdHJlcG8qIGhncmVwbyoiICYmCiAKIAkoCiAJZ2l0IGluaXQgLXEgZ2l0cmVwbyAmJgpAQCAtMzY3LDggKzM2Miw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCB0YWdzJyAnCi0JbWtkaXIgLXAgdG1wICYmIGNkIHRtcCAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2QgLi4gJiYgcm0gLXJmIHRtcCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBnaXRyZXBvKiBoZ3JlcG8qIiAmJgogCiAJKAogCWdpdCBpbml0IC1xIGdpdHJlcG8gJiYKQEAgLTM5NCw4ICszODgsNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdoZyBhdXRob3InICcKLQlta2RpciAtcCB0bXAgJiYgY2QgdG1wICYmCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJjZCAuLiAmJiBybSAtcmYgdG1wIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGdpdHJlcG8qIGhncmVwbyoiICYmCiAKIAlmb3IgeCBpbiBoZyBnaXQ7IGRvCiAJCSgKQEAgLTQ2MSw4ICs0NTQsNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdoZyBicmFuY2gnICcKLQlta2RpciAtcCB0bXAgJiYgY2QgdG1wICYmCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJjZCAuLiAmJiBybSAtcmYgdG1wIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGdpdHJlcG8qIGhncmVwbyoiICYmCiAKIAlmb3IgeCBpbiBoZyBnaXQ7IGRvCiAJCSgKQEAgLTQ5OCw4ICs0OTAsNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdoZyB0YWdzJyAnCi0JbWtkaXIgLXAgdG1wICYmIGNkIHRtcCAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2QgLi4gJiYgcm0gLXJmIHRtcCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBnaXRyZXBvKiBoZ3JlcG8qIiAmJgogCiAJZm9yIHggaW4gaGcgZ2l0OyBkbwogCQkoCmRpZmYgLS1naXQgYS9jb250cmliL3JlbW90ZS1oZWxwZXJzL3Rlc3QtaGcuc2ggYi9jb250cmliL3JlbW90ZS1oZWxwZXJzL3Rlc3QtaGcuc2gKaW5kZXggOGRlMmFhNy4uZjdjZThhYSAxMDA3NTUKLS0tIGEvY29udHJpYi9yZW1vdGUtaGVscGVycy90ZXN0LWhnLnNoCisrKyBiL2NvbnRyaWIvcmVtb3RlLWhlbHBlcnMvdGVzdC1oZy5zaApAQCAtMTUsMTQzICsxNSw2NzggQEAKIAl0ZXN0X2RvbmUKIGZpCiAKLWlmICEgIiRQWVRIT05fUEFUSCIgLWMgJ2ltcG9ydCBtZXJjdXJpYWwnOyB0aGVuCitpZiAhIHB5dGhvbiAtYyAnaW1wb3J0IG1lcmN1cmlhbCc7IHRoZW4KIAlza2lwX2FsbD0nc2tpcHBpbmcgcmVtb3RlLWhnIHRlc3RzOyBtZXJjdXJpYWwgbm90IGF2YWlsYWJsZScKIAl0ZXN0X2RvbmUKIGZpCiAKIGNoZWNrICgpIHsKLQkoY2QgJDEgJiYKLQlnaXQgbG9nIC0tZm9ybWF0PSclcycgLTEgJiYKLQlnaXQgc3ltYm9saWMtcmVmIEhFQUQpID4gYWN0dWFsICYmCi0JKGVjaG8gJDIgJiYKLQllY2hvICJyZWZzL2hlYWRzLyQzIikgPiBleHBlY3RlZCAmJgorCWVjaG8gJDMgPiBleHBlY3RlZCAmJgorCWdpdCAtLWdpdC1kaXI9JDEvLmdpdCBsb2cgLS1mb3JtYXQ9JyVzJyAtMSAkMiA+IGFjdHVhbAogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogfQogCitjaGVja19icmFuY2ggKCkgeworCWlmIFsgLW4gIiQzIiBdOyB0aGVuCisJCWVjaG8gJDMgPiBleHBlY3RlZCAmJgorCQloZyAtUiAkMSBsb2cgLXIgJDIgLS10ZW1wbGF0ZSAne2Rlc2N9XG4nID4gYWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCWVsc2UKKwkJaGcgLVIgJDEgYnJhbmNoZXMgPiBvdXQgJiYKKwkJISBncmVwICQyIG91dAorCWZpCit9CisKK2NoZWNrX2Jvb2ttYXJrICgpIHsKKwlpZiBbIC1uICIkMyIgXTsgdGhlbgorCQllY2hvICQzID4gZXhwZWN0ZWQgJiYKKwkJaGcgLVIgJDEgbG9nIC1yICJib29rbWFyaygnJDInKSIgLS10ZW1wbGF0ZSAne2Rlc2N9XG4nID4gYWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCWVsc2UKKwkJaGcgLVIgJDEgYm9va21hcmtzID4gb3V0ICYmCisJCSEgZ3JlcCAkMiBvdXQKKwlmaQorfQorCitjaGVja19wdXNoICgpIHsKKwlsb2NhbCBleHBlY3RlZF9yZXQ9JDEgcmV0PTAgcmVmX3JldD0wIElGUz0nOicKKworCXNoaWZ0CisJZ2l0IHB1c2ggb3JpZ2luICIkQCIgMj4gZXJyb3IKKwlyZXQ9JD8KKwljYXQgZXJyb3IKKworCXdoaWxlIHJlYWQgYnJhbmNoIGtpbmQKKwlkbworCQljYXNlICIka2luZCIgaW4KKwkJJ25ldycpCisJCQlncmVwICJeIFwqIFxbbmV3IGJyYW5jaFxdICoke2JyYW5jaH0gLT4gJHticmFuY2h9JCIgZXJyb3IgfHwgcmVmX3JldD0xCisJCQk7OworCQknbm9uLWZhc3QtZm9yd2FyZCcpCisJCQlncmVwICJeICEgXFtyZWplY3RlZFxdICoke2JyYW5jaH0gLT4gJHticmFuY2h9IChub24tZmFzdC1mb3J3YXJkKSQiIGVycm9yIHx8IHJlZl9yZXQ9MQorCQkJOzsKKwkJJ2ZldGNoLWZpcnN0JykKKwkJCWdyZXAgIl4gISBcW3JlamVjdGVkXF0gKiR7YnJhbmNofSAtPiAke2JyYW5jaH0gKGZldGNoIGZpcnN0KSQiIGVycm9yIHx8IHJlZl9yZXQ9MQorCQkJOzsKKwkJJ2ZvcmNlZC11cGRhdGUnKQorCQkJZ3JlcCAiXiArIFthLWYwLTldKlwuXC5cLlthLWYwLTldKiAqJHticmFuY2h9IC0+ICR7YnJhbmNofSAoZm9yY2VkIHVwZGF0ZSkkIiBlcnJvciB8fCByZWZfcmV0PTEKKwkJCTs7CisJCScnKQorCQkJZ3JlcCAiXiAgIFthLWYwLTldKlwuXC5bYS1mMC05XSogKiR7YnJhbmNofSAtPiAke2JyYW5jaH0kIiBlcnJvciB8fCByZWZfcmV0PTEKKwkJCTs7CisJCWVzYWMKKwkJbGV0ICdyZWZfcmV0JyAmJiBlY2hvICJtYXRjaCBmb3IgJyRicmFuY2gnIGZhaWxlZCIgJiYgYnJlYWsKKwlkb25lCisKKwlpZiBsZXQgJ2V4cGVjdGVkX3JldCAhPSByZXQgfHwgcmVmX3JldCcKKwl0aGVuCisJCXJldHVybiAxCisJZmkKKworCXJldHVybiAwCit9CisKIHNldHVwICgpIHsKIAkoCiAJZWNobyAiW3VpXSIKIAllY2hvICJ1c2VybmFtZSA9IEggRyBXZWxscyA8d2VsbHNAZXhhbXBsZS5jb20+IgotCSkgPj4gIiRIT01FIi8uaGdyYworCWVjaG8gIltleHRlbnNpb25zXSIKKwllY2hvICJtcSA9IgorCSkgPj4gIiRIT01FIi8uaGdyYyAmJgorCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA3LTAxLTAxIDAwOjAwOjAwICswMjMwIiAmJgorCUdJVF9DT01NSVRURVJfREFURT0iJEdJVF9BVVRIT1JfREFURSIgJiYKKwlleHBvcnQgR0lUX0NPTU1JVFRFUl9EQVRFIEdJVF9BVVRIT1JfREFURQogfQogCiBzZXR1cAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nJyAnCi0gIHRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGdpdHJlcG8qIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGdpdHJlcG8qIiAmJgogCi0gICgKLSAgaGcgaW5pdCBoZ3JlcG8gJiYKLSAgY2QgaGdyZXBvICYmCi0gIGVjaG8gemVybyA+IGNvbnRlbnQgJiYKLSAgaGcgYWRkIGNvbnRlbnQgJiYKLSAgaGcgY29tbWl0IC1tIHplcm8KLSAgKSAmJgorCSgKKwloZyBpbml0IGhncmVwbyAmJgorCWNkIGhncmVwbyAmJgorCWVjaG8gemVybyA+IGNvbnRlbnQgJiYKKwloZyBhZGQgY29udGVudCAmJgorCWhnIGNvbW1pdCAtbSB6ZXJvCisJKSAmJgogCi0gIGdpdCBjbG9uZSAiaGc6OiRQV0QvaGdyZXBvIiBnaXRyZXBvICYmCi0gIGNoZWNrIGdpdHJlcG8gemVybyBtYXN0ZXIKKwlnaXQgY2xvbmUgImhnOjpoZ3JlcG8iIGdpdHJlcG8gJiYKKwljaGVjayBnaXRyZXBvIEhFQUQgemVybwogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIHdpdGggYnJhbmNoZXMnICcKLSAgdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZ2l0cmVwbyoiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZ2l0cmVwbyoiICYmCiAKLSAgKAotICBjZCBoZ3JlcG8gJiYKLSAgaGcgYnJhbmNoIG5leHQgJiYKLSAgZWNobyBuZXh0ID4gY29udGVudCAmJgotICBoZyBjb21taXQgLW0gbmV4dAotICApICYmCisJKAorCWNkIGhncmVwbyAmJgorCWhnIGJyYW5jaCBuZXh0ICYmCisJZWNobyBuZXh0ID4gY29udGVudCAmJgorCWhnIGNvbW1pdCAtbSBuZXh0CisJKSAmJgogCi0gIGdpdCBjbG9uZSAiaGc6OiRQV0QvaGdyZXBvIiBnaXRyZXBvICYmCi0gIGNoZWNrIGdpdHJlcG8gbmV4dCBuZXh0ICYmCi0KLSAgKGNkIGhncmVwbyAmJiBoZyBjaGVja291dCBkZWZhdWx0KSAmJgotCi0gIGdpdCBjbG9uZSAiaGc6OiRQV0QvaGdyZXBvIiBnaXRyZXBvMiAmJgotICBjaGVjayBnaXRyZXBvMiB6ZXJvIG1hc3RlcgorCWdpdCBjbG9uZSAiaGc6OmhncmVwbyIgZ2l0cmVwbyAmJgorCWNoZWNrIGdpdHJlcG8gb3JpZ2luL2JyYW5jaGVzL25leHQgbmV4dAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIHdpdGggYm9va21hcmtzJyAnCi0gIHRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGdpdHJlcG8qIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGdpdHJlcG8qIiAmJgogCi0gICgKLSAgY2QgaGdyZXBvICYmCi0gIGhnIGJvb2ttYXJrIGZlYXR1cmUtYSAmJgotICBlY2hvIGZlYXR1cmUtYSA+IGNvbnRlbnQgJiYKLSAgaGcgY29tbWl0IC1tIGZlYXR1cmUtYQotICApICYmCisJKAorCWNkIGhncmVwbyAmJgorCWhnIGNoZWNrb3V0IGRlZmF1bHQgJiYKKwloZyBib29rbWFyayBmZWF0dXJlLWEgJiYKKwllY2hvIGZlYXR1cmUtYSA+IGNvbnRlbnQgJiYKKwloZyBjb21taXQgLW0gZmVhdHVyZS1hCisJKSAmJgogCi0gIGdpdCBjbG9uZSAiaGc6OiRQV0QvaGdyZXBvIiBnaXRyZXBvICYmCi0gIGNoZWNrIGdpdHJlcG8gZmVhdHVyZS1hIGZlYXR1cmUtYQotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIHdpdGggZGV0YWNoZWQgaGVhZCcgJwotICB0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBnaXRyZXBvKiIgJiYKLQotICAoCi0gIGNkIGhncmVwbyAmJgotICBoZyB1cGRhdGUgLXIgMAotICApICYmCi0KLSAgZ2l0IGNsb25lICJoZzo6JFBXRC9oZ3JlcG8iIGdpdHJlcG8gJiYKLSAgY2hlY2sgZ2l0cmVwbyB6ZXJvIG1hc3RlcgorCWdpdCBjbG9uZSAiaGc6OmhncmVwbyIgZ2l0cmVwbyAmJgorCWNoZWNrIGdpdHJlcG8gb3JpZ2luL2ZlYXR1cmUtYSBmZWF0dXJlLWEKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGJvb2ttYXJrJyAnCi0gIHRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGdpdHJlcG8qIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGdpdHJlcG8qIiAmJgogCi0gICgKLSAgY2QgaGdyZXBvICYmCi0gIGhnIGJvb2ttYXJrIGRldmVsCi0gICkgJiYKKwkoCisJY2QgaGdyZXBvICYmCisJaGcgYm9va21hcmsgZGV2ZWwKKwkpICYmCiAKLSAgKAotICBnaXQgY2xvbmUgImhnOjokUFdEL2hncmVwbyIgZ2l0cmVwbyAmJgotICBjZCBnaXRyZXBvICYmCi0gIGdpdCBjaGVja291dCBkZXZlbCAmJgotICBlY2hvIGRldmVsID4gY29udGVudCAmJgotICBnaXQgY29tbWl0IC1hIC1tIGRldmVsICYmCi0gIGdpdCBwdXNoCi0gICkgJiYKKwkoCisJZ2l0IGNsb25lICJoZzo6aGdyZXBvIiBnaXRyZXBvICYmCisJY2QgZ2l0cmVwbyAmJgorCWdpdCBjaGVja291dCAtLXF1aWV0IGRldmVsICYmCisJZWNobyBkZXZlbCA+IGNvbnRlbnQgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGRldmVsICYmCisJZ2l0IHB1c2ggLS1xdWlldAorCSkgJiYKIAotICBoZyAtUiBoZ3JlcG8gYm9va21hcmtzIHwgZWdyZXAgImRldmVsWwkgXSszOiIKKwljaGVja19ib29rbWFyayBoZ3JlcG8gZGV2ZWwgZGV2ZWwKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IGJvb2ttYXJrJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZ2l0cmVwbyoiICYmCisKKwkoCisJZ2l0IGNsb25lICJoZzo6aGdyZXBvIiBnaXRyZXBvICYmCisJY2QgZ2l0cmVwbyAmJgorCWdpdCBjaGVja291dCAtLXF1aWV0IC1iIGZlYXR1cmUtYiAmJgorCWVjaG8gZmVhdHVyZS1iID4gY29udGVudCAmJgorCWdpdCBjb21taXQgLWEgLW0gZmVhdHVyZS1iICYmCisJZ2l0IHB1c2ggLS1xdWlldCBvcmlnaW4gZmVhdHVyZS1iCisJKSAmJgorCisJY2hlY2tfYm9va21hcmsgaGdyZXBvIGZlYXR1cmUtYiBmZWF0dXJlLWIKKycKKworIyBjbGVhbnVwIHByZXZpb3VzIHN0dWZmCitybSAtcmYgaGdyZXBvCisKIGF1dGhvcl90ZXN0ICgpIHsKLSAgZWNobyAkMSA+PiBjb250ZW50ICYmCi0gIGhnIGNvbW1pdCAtdSAiJDIiIC1tICJhZGQgJDEiICYmCi0gIGVjaG8gIiQzIiA+PiAuLi9leHBlY3RlZAorCWVjaG8gJDEgPj4gY29udGVudCAmJgorCWhnIGNvbW1pdCAtdSAiJDIiIC1tICJhZGQgJDEiICYmCisJZWNobyAiJDMiID4+IC4uL2V4cGVjdGVkCiB9CiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dGhvcnMnICcKLSAgbWtkaXIgLXAgdG1wICYmIGNkIHRtcCAmJgotICB0ZXN0X3doZW5fZmluaXNoZWQgImNkIC4uICYmIHJtIC1yZiB0bXAiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgaGdyZXBvIGdpdHJlcG8iICYmCiAKLSAgKAotICBoZyBpbml0IGhncmVwbyAmJgotICBjZCBoZ3JlcG8gJiYKKwkoCisJaGcgaW5pdCBoZ3JlcG8gJiYKKwljZCBoZ3JlcG8gJiYKIAotICB0b3VjaCBjb250ZW50ICYmCi0gIGhnIGFkZCBjb250ZW50ICYmCisJdG91Y2ggY29udGVudCAmJgorCWhnIGFkZCBjb250ZW50ICYmCiAKLSAgYXV0aG9yX3Rlc3QgYWxwaGEgIiIgIkggRyBXZWxscyA8d2VsbHNAZXhhbXBsZS5jb20+IiAmJgotICBhdXRob3JfdGVzdCBiZXRhICJ0ZXN0IiAidGVzdCA8dW5rbm93bj4iICYmCi0gIGF1dGhvcl90ZXN0IGJldGEgInRlc3QgPHRlc3RAZXhhbXBsZS5jb20+IChjb21tZW50KSIgInRlc3QgPHRlc3RAZXhhbXBsZS5jb20+IiAmJgotICBhdXRob3JfdGVzdCBnYW1tYSAiPHRlc3RAZXhhbXBsZS5jb20+IiAiVW5rbm93biA8dGVzdEBleGFtcGxlLmNvbT4iICYmCi0gIGF1dGhvcl90ZXN0IGRlbHRhICJuYW1lPHRlc3RAZXhhbXBsZS5jb20+IiAibmFtZSA8dGVzdEBleGFtcGxlLmNvbT4iICYmCi0gIGF1dGhvcl90ZXN0IGVwc2lsb24gIm5hbWUgPHRlc3RAZXhhbXBsZS5jb20iICJuYW1lIDx0ZXN0QGV4YW1wbGUuY29tPiIgJiYKLSAgYXV0aG9yX3Rlc3QgemV0YSAiIHRlc3QgIiAidGVzdCA8dW5rbm93bj4iICYmCi0gIGF1dGhvcl90ZXN0IGV0YSAidGVzdCA8IHRlc3RAZXhhbXBsZS5jb20gPiIgInRlc3QgPHRlc3RAZXhhbXBsZS5jb20+IiAmJgotICBhdXRob3JfdGVzdCB0aGV0YSAidGVzdCA+dGVzdEBleGFtcGxlLmNvbT4iICJ0ZXN0IDx0ZXN0QGV4YW1wbGUuY29tPiIgJiYKLSAgYXV0aG9yX3Rlc3QgaW90YSAidGVzdCA8IHRlc3QgPGF0PiBleGFtcGxlIDxkb3Q+IGNvbT4iICJ0ZXN0IDx1bmtub3duPiIgJiYKLSAgYXV0aG9yX3Rlc3Qga2FwcGEgInRlc3RAZXhhbXBsZS5jb20iICJVbmtub3duIDx0ZXN0QGV4YW1wbGUuY29tPiIKLSAgKSAmJgorCT4gLi4vZXhwZWN0ZWQgJiYKKwlhdXRob3JfdGVzdCBhbHBoYSAiIiAiSCBHIFdlbGxzIDx3ZWxsc0BleGFtcGxlLmNvbT4iICYmCisJYXV0aG9yX3Rlc3QgYmV0YSAidGVzdCIgInRlc3QgPHVua25vd24+IiAmJgorCWF1dGhvcl90ZXN0IGJldGEgInRlc3QgPHRlc3RAZXhhbXBsZS5jb20+IChjb21tZW50KSIgInRlc3QgPHRlc3RAZXhhbXBsZS5jb20+IiAmJgorCWF1dGhvcl90ZXN0IGdhbW1hICI8dGVzdEBleGFtcGxlLmNvbT4iICJVbmtub3duIDx0ZXN0QGV4YW1wbGUuY29tPiIgJiYKKwlhdXRob3JfdGVzdCBkZWx0YSAibmFtZTx0ZXN0QGV4YW1wbGUuY29tPiIgIm5hbWUgPHRlc3RAZXhhbXBsZS5jb20+IiAmJgorCWF1dGhvcl90ZXN0IGVwc2lsb24gIm5hbWUgPHRlc3RAZXhhbXBsZS5jb20iICJuYW1lIDx0ZXN0QGV4YW1wbGUuY29tPiIgJiYKKwlhdXRob3JfdGVzdCB6ZXRhICIgdGVzdCAiICJ0ZXN0IDx1bmtub3duPiIgJiYKKwlhdXRob3JfdGVzdCBldGEgInRlc3QgPCB0ZXN0QGV4YW1wbGUuY29tID4iICJ0ZXN0IDx0ZXN0QGV4YW1wbGUuY29tPiIgJiYKKwlhdXRob3JfdGVzdCB0aGV0YSAidGVzdCA+dGVzdEBleGFtcGxlLmNvbT4iICJ0ZXN0IDx0ZXN0QGV4YW1wbGUuY29tPiIgJiYKKwlhdXRob3JfdGVzdCBpb3RhICJ0ZXN0IDwgdGVzdCA8YXQ+IGV4YW1wbGUgPGRvdD4gY29tPiIgInRlc3QgPHVua25vd24+IiAmJgorCWF1dGhvcl90ZXN0IGthcHBhICJ0ZXN0QGV4YW1wbGUuY29tIiAiVW5rbm93biA8dGVzdEBleGFtcGxlLmNvbT4iCisJKSAmJgogCi0gIGdpdCBjbG9uZSAiaGc6OiRQV0QvaGdyZXBvIiBnaXRyZXBvICYmCi0gIGdpdCAtLWdpdC1kaXI9Z2l0cmVwby8uZ2l0IGxvZyAtLXJldmVyc2UgLS1mb3JtYXQ9IiVhbiA8JWFlPiIgPiBhY3R1YWwgJiYKKwlnaXQgY2xvbmUgImhnOjpoZ3JlcG8iIGdpdHJlcG8gJiYKKwlnaXQgLS1naXQtZGlyPWdpdHJlcG8vLmdpdCBsb2cgLS1yZXZlcnNlIC0tZm9ybWF0PSIlYW4gPCVhZT4iID4gYWN0dWFsICYmCiAKLSAgdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0cmlwJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgaGdyZXBvIGdpdHJlcG8iICYmCisKKwkoCisJaGcgaW5pdCBoZ3JlcG8gJiYKKwljZCBoZ3JlcG8gJiYKKworCWVjaG8gb25lID4+IGNvbnRlbnQgJiYKKwloZyBhZGQgY29udGVudCAmJgorCWhnIGNvbW1pdCAtbSBvbmUgJiYKKworCWVjaG8gdHdvID4+IGNvbnRlbnQgJiYKKwloZyBjb21taXQgLW0gdHdvCisJKSAmJgorCisJZ2l0IGNsb25lICJoZzo6aGdyZXBvIiBnaXRyZXBvICYmCisKKwkoCisJY2QgaGdyZXBvICYmCisJaGcgc3RyaXAgMSAmJgorCisJZWNobyB0aHJlZSA+PiBjb250ZW50ICYmCisJaGcgY29tbWl0IC1tIHRocmVlICYmCisKKwllY2hvIGZvdXIgPj4gY29udGVudCAmJgorCWhnIGNvbW1pdCAtbSBmb3VyCisJKSAmJgorCisJKAorCWNkIGdpdHJlcG8gJiYKKwlnaXQgZmV0Y2ggJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSIlcyIgb3JpZ2luL21hc3RlciA+IC4uL2FjdHVhbAorCSkgJiYKKworCWhnIC1SIGhncmVwbyBsb2cgLS10ZW1wbGF0ZSAie2Rlc2N9XG4iID4gZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHB1c2ggd2l0aCBtYXN0ZXIgYm9va21hcmsnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBoZ3JlcG8gZ2l0cmVwbyoiICYmCisKKwkoCisJaGcgaW5pdCBoZ3JlcG8gJiYKKwljZCBoZ3JlcG8gJiYKKwllY2hvIHplcm8gPiBjb250ZW50ICYmCisJaGcgYWRkIGNvbnRlbnQgJiYKKwloZyBjb21taXQgLW0gemVybyAmJgorCWhnIGJvb2ttYXJrIG1hc3RlciAmJgorCWVjaG8gb25lID4gY29udGVudCAmJgorCWhnIGNvbW1pdCAtbSBvbmUKKwkpICYmCisKKwkoCisJZ2l0IGNsb25lICJoZzo6aGdyZXBvIiBnaXRyZXBvICYmCisJY2QgZ2l0cmVwbyAmJgorCWVjaG8gdHdvID4gY29udGVudCAmJgorCWdpdCBjb21taXQgLWEgLW0gdHdvICYmCisJZ2l0IHB1c2gKKwkpICYmCisKKwljaGVja19icmFuY2ggaGdyZXBvIGRlZmF1bHQgdHdvCisnCisKK2NhdCA+IGV4cGVjdGVkIDw8RU9GCitjaGFuZ2VzZXQ6ICAgMDo2ZTIxMjY0ODlkM2QKK3RhZzogICAgICAgICB0aXAKK3VzZXI6ICAgICAgICBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorZGF0ZTogICAgICAgIE1vbiBKYW4gMDEgMDA6MDA6MDAgMjAwNyArMDIzMAorc3VtbWFyeTogICAgIG9uZQorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHB1c2ggZnJvbSBtYXN0ZXIgYnJhbmNoJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgaGdyZXBvIGdpdHJlcG8qIiAmJgorCisJaGcgaW5pdCBoZ3JlcG8gJiYKKworCSgKKwlnaXQgaW5pdCBnaXRyZXBvICYmCisJY2QgZ2l0cmVwbyAmJgorCWdpdCByZW1vdGUgYWRkIG9yaWdpbiAiaGc6Oi4uL2hncmVwbyIgJiYKKwllY2hvIG9uZSA+IGNvbnRlbnQgJiYKKwlnaXQgYWRkIGNvbnRlbnQgJiYKKwlnaXQgY29tbWl0IC1hIC1tIG9uZSAmJgorCWdpdCBwdXNoIG9yaWdpbiBtYXN0ZXIKKwkpICYmCisKKwloZyAtUiBoZ3JlcG8gbG9nID4gYWN0dWFsICYmCisJY2F0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCisJY2hlY2tfYnJhbmNoIGhncmVwbyBkZWZhdWx0IG9uZQorJworCitHSVRfUkVNT1RFX0hHX1RFU1RfUkVNT1RFPTEKK2V4cG9ydCBHSVRfUkVNT1RFX0hHX1RFU1RfUkVNT1RFCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBjbG9uaW5nJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZ2l0cmVwbyoiICYmCisKKwkoCisJaGcgaW5pdCBoZ3JlcG8gJiYKKwljZCBoZ3JlcG8gJiYKKwllY2hvIHplcm8gPiBjb250ZW50ICYmCisJaGcgYWRkIGNvbnRlbnQgJiYKKwloZyBjb21taXQgLW0gemVybworCSkgJiYKKworCWdpdCBjbG9uZSAiaGc6OmhncmVwbyIgZ2l0cmVwbyAmJgorCWNoZWNrIGdpdHJlcG8gSEVBRCB6ZXJvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSB1cGRhdGUgYm9va21hcmsnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBnaXRyZXBvKiIgJiYKKworCSgKKwljZCBoZ3JlcG8gJiYKKwloZyBib29rbWFyayBkZXZlbAorCSkgJiYKKworCSgKKwlnaXQgY2xvbmUgImhnOjpoZ3JlcG8iIGdpdHJlcG8gJiYKKwljZCBnaXRyZXBvICYmCisJZ2l0IGNoZWNrb3V0IC0tcXVpZXQgZGV2ZWwgJiYKKwllY2hvIGRldmVsID4gY29udGVudCAmJgorCWdpdCBjb21taXQgLWEgLW0gZGV2ZWwgJiYKKwlnaXQgcHVzaCAtLXF1aWV0CisJKSAmJgorCisJY2hlY2tfYm9va21hcmsgaGdyZXBvIGRldmVsIGRldmVsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBuZXcgYm9va21hcmsnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBnaXRyZXBvKiIgJiYKKworCSgKKwlnaXQgY2xvbmUgImhnOjpoZ3JlcG8iIGdpdHJlcG8gJiYKKwljZCBnaXRyZXBvICYmCisJZ2l0IGNoZWNrb3V0IC0tcXVpZXQgLWIgZmVhdHVyZS1iICYmCisJZWNobyBmZWF0dXJlLWIgPiBjb250ZW50ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBmZWF0dXJlLWIgJiYKKwlnaXQgcHVzaCAtLXF1aWV0IG9yaWdpbiBmZWF0dXJlLWIKKwkpICYmCisKKwljaGVja19ib29rbWFyayBoZ3JlcG8gZmVhdHVyZS1iIGZlYXR1cmUtYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgcHVzaCBkaXZlcmdlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGdpdHJlcG8qIiAmJgorCisJZ2l0IGNsb25lICJoZzo6aGdyZXBvIiBnaXRyZXBvICYmCisKKwkoCisJY2QgaGdyZXBvICYmCisJaGcgY2hlY2tvdXQgZGVmYXVsdCAmJgorCWVjaG8gYnVtcCA+IGNvbnRlbnQgJiYKKwloZyBjb21taXQgLW0gYnVtcAorCSkgJiYKKworCSgKKwljZCBnaXRyZXBvICYmCisJZWNobyBkaXZlcmdlID4gY29udGVudCAmJgorCWdpdCBjb21taXQgLWEgLW0gZGl2ZXJnZWQgJiYKKwljaGVja19wdXNoIDEgPDwtRU9GCisJbWFzdGVyOm5vbi1mYXN0LWZvcndhcmQKKwlFT0YKKwkpICYmCisKKwljaGVja19icmFuY2ggaGdyZXBvIGRlZmF1bHQgYnVtcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgdXBkYXRlIGJvb2ttYXJrIGRpdmVyZ2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBnaXRyZXBvKiIgJiYKKworCSgKKwljZCBoZ3JlcG8gJiYKKwloZyBjaGVja291dCB0aXBeICYmCisJaGcgYm9va21hcmsgZGl2ZXJnZQorCSkgJiYKKworCWdpdCBjbG9uZSAiaGc6OmhncmVwbyIgZ2l0cmVwbyAmJgorCisJKAorCWNkIGhncmVwbyAmJgorCWVjaG8gImJ1bXAgYm9va21hcmsiID4gY29udGVudCAmJgorCWhnIGNvbW1pdCAtbSAiYnVtcCBib29rbWFyayIKKwkpICYmCisKKwkoCisJY2QgZ2l0cmVwbyAmJgorCWdpdCBjaGVja291dCAtLXF1aWV0IGRpdmVyZ2UgJiYKKwllY2hvIGRpdmVyZ2UgPiBjb250ZW50ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBkaXZlcmdlICYmCisJY2hlY2tfcHVzaCAxIDw8LUVPRgorCWRpdmVyZ2U6ZmV0Y2gtZmlyc3QKKwlFT0YKKwkpICYmCisKKwljaGVja19ib29rbWFyayBoZ3JlcG8gZGl2ZXJnZSAiYnVtcCBib29rbWFyayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIG5ldyBib29rbWFyayBtdWx0aXBsZSBicmFuY2ggaGVhZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGdpdHJlcG8qIiAmJgorCisJKAorCWdpdCBjbG9uZSAiaGc6OmhncmVwbyIgZ2l0cmVwbyAmJgorCWNkIGdpdHJlcG8gJiYKKwlnaXQgY2hlY2tvdXQgLS1xdWlldCAtYiBmZWF0dXJlLWMgSEVBRF4gJiYKKwllY2hvIGZlYXR1cmUtYyA+IGNvbnRlbnQgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGZlYXR1cmUtYyAmJgorCWdpdCBwdXNoIC0tcXVpZXQgb3JpZ2luIGZlYXR1cmUtYworCSkgJiYKKworCWNoZWNrX2Jvb2ttYXJrIGhncmVwbyBmZWF0dXJlLWMgZmVhdHVyZS1jCisnCisKKyMgY2xlYW51cCBwcmV2aW91cyBzdHVmZgorcm0gLXJmIGhncmVwbworCitzZXR1cF9iaWdfcHVzaCAoKSB7CisJKAorCWhnIGluaXQgaGdyZXBvICYmCisJY2QgaGdyZXBvICYmCisJZWNobyB6ZXJvID4gY29udGVudCAmJgorCWhnIGFkZCBjb250ZW50ICYmCisJaGcgY29tbWl0IC1tIHplcm8gJiYKKwloZyBib29rbWFyayBiYWRfYm1hcmsxICYmCisJZWNobyBvbmUgPiBjb250ZW50ICYmCisJaGcgY29tbWl0IC1tIG9uZSAmJgorCWhnIGJvb2ttYXJrIGJhZF9ibWFyazIgJiYKKwloZyBib29rbWFyayBnb29kX2JtYXJrICYmCisJaGcgYm9va21hcmsgLWkgZ29vZF9ibWFyayAmJgorCWhnIC1xIGJyYW5jaCBnb29kX2JyYW5jaCAmJgorCWVjaG8gImdvb2QgYnJhbmNoIiA+IGNvbnRlbnQgJiYKKwloZyBjb21taXQgLW0gImdvb2QgYnJhbmNoIiAmJgorCWhnIC1xIGJyYW5jaCBiYWRfYnJhbmNoICYmCisJZWNobyAiYmFkIGJyYW5jaCIgPiBjb250ZW50ICYmCisJaGcgY29tbWl0IC1tICJiYWQgYnJhbmNoIgorCSkgJiYKKworCWdpdCBjbG9uZSAiaGc6OmhncmVwbyIgZ2l0cmVwbyAmJgorCisJKAorCWNkIGdpdHJlcG8gJiYKKwllY2hvIHR3byA+IGNvbnRlbnQgJiYKKwlnaXQgY29tbWl0IC1xIC1hIC1tIHR3byAmJgorCisJZ2l0IGNoZWNrb3V0IC1xIGdvb2RfYm1hcmsgJiYKKwllY2hvIHRocmVlID4gY29udGVudCAmJgorCWdpdCBjb21taXQgLXEgLWEgLW0gdGhyZWUgJiYKKworCWdpdCBjaGVja291dCAtcSBiYWRfYm1hcmsxICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCWVjaG8gZm91ciA+IGNvbnRlbnQgJiYKKwlnaXQgY29tbWl0IC1xIC1hIC1tIGZvdXIgJiYKKworCWdpdCBjaGVja291dCAtcSBiYWRfYm1hcmsyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCWVjaG8gZml2ZSA+IGNvbnRlbnQgJiYKKwlnaXQgY29tbWl0IC1xIC1hIC1tIGZpdmUgJiYKKworCWdpdCBjaGVja291dCAtcSAtYiBuZXdfYm1hcmsgbWFzdGVyICYmCisJZWNobyBzaXggPiBjb250ZW50ICYmCisJZ2l0IGNvbW1pdCAtcSAtYSAtbSBzaXggJiYKKworCWdpdCBjaGVja291dCAtcSBicmFuY2hlcy9nb29kX2JyYW5jaCAmJgorCWVjaG8gc2V2ZW4gPiBjb250ZW50ICYmCisJZ2l0IGNvbW1pdCAtcSAtYSAtbSBzZXZlbiAmJgorCWVjaG8gZWlnaHQgPiBjb250ZW50ICYmCisJZ2l0IGNvbW1pdCAtcSAtYSAtbSBlaWdodCAmJgorCisJZ2l0IGNoZWNrb3V0IC1xIGJyYW5jaGVzL2JhZF9icmFuY2ggJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZWNobyBuaW5lID4gY29udGVudCAmJgorCWdpdCBjb21taXQgLXEgLWEgLW0gbmluZSAmJgorCisJZ2l0IGNoZWNrb3V0IC1xIC1iIGJyYW5jaGVzL25ld19icmFuY2ggbWFzdGVyICYmCisJZWNobyB0ZW4gPiBjb250ZW50ICYmCisJZ2l0IGNvbW1pdCAtcSAtYSAtbSB0ZW4KKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBiaWcgcHVzaCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGhncmVwbyBnaXRyZXBvKiIgJiYKKworCXNldHVwX2JpZ19wdXNoCisKKwkoCisJY2QgZ2l0cmVwbyAmJgorCisJY2hlY2tfcHVzaCAxIC0tYWxsIDw8LUVPRgorCW1hc3RlcgorCWdvb2RfYm1hcmsKKwlicmFuY2hlcy9nb29kX2JyYW5jaAorCW5ld19ibWFyazpuZXcKKwlicmFuY2hlcy9uZXdfYnJhbmNoOm5ldworCWJhZF9ibWFyazE6bm9uLWZhc3QtZm9yd2FyZAorCWJhZF9ibWFyazI6bm9uLWZhc3QtZm9yd2FyZAorCWJyYW5jaGVzL2JhZF9icmFuY2g6bm9uLWZhc3QtZm9yd2FyZAorCUVPRgorCSkgJiYKKworCWNoZWNrX2JyYW5jaCBoZ3JlcG8gZGVmYXVsdCBvbmUgJiYKKwljaGVja19icmFuY2ggaGdyZXBvIGdvb2RfYnJhbmNoICJnb29kIGJyYW5jaCIgJiYKKwljaGVja19icmFuY2ggaGdyZXBvIGJhZF9icmFuY2ggImJhZCBicmFuY2giICYmCisJY2hlY2tfYnJhbmNoIGhncmVwbyBuZXdfYnJhbmNoICcnICYmCisJY2hlY2tfYm9va21hcmsgaGdyZXBvIGdvb2RfYm1hcmsgb25lICYmCisJY2hlY2tfYm9va21hcmsgaGdyZXBvIGJhZF9ibWFyazEgb25lICYmCisJY2hlY2tfYm9va21hcmsgaGdyZXBvIGJhZF9ibWFyazIgb25lICYmCisJY2hlY2tfYm9va21hcmsgaGdyZXBvIG5ld19ibWFyayAnJworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgYmlnIHB1c2ggZmV0Y2ggZmlyc3QnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBoZ3JlcG8gZ2l0cmVwbyoiICYmCisKKwkoCisJaGcgaW5pdCBoZ3JlcG8gJiYKKwljZCBoZ3JlcG8gJiYKKwllY2hvIHplcm8gPiBjb250ZW50ICYmCisJaGcgYWRkIGNvbnRlbnQgJiYKKwloZyBjb21taXQgLW0gemVybyAmJgorCWhnIGJvb2ttYXJrIGJhZF9ibWFyayAmJgorCWhnIGJvb2ttYXJrIGdvb2RfYm1hcmsgJiYKKwloZyBib29rbWFyayAtaSBnb29kX2JtYXJrICYmCisJaGcgLXEgYnJhbmNoIGdvb2RfYnJhbmNoICYmCisJZWNobyAiZ29vZCBicmFuY2giID4gY29udGVudCAmJgorCWhnIGNvbW1pdCAtbSAiZ29vZCBicmFuY2giICYmCisJaGcgLXEgYnJhbmNoIGJhZF9icmFuY2ggJiYKKwllY2hvICJiYWQgYnJhbmNoIiA+IGNvbnRlbnQgJiYKKwloZyBjb21taXQgLW0gImJhZCBicmFuY2giCisJKSAmJgorCisJZ2l0IGNsb25lICJoZzo6aGdyZXBvIiBnaXRyZXBvICYmCisKKwkoCisJY2QgaGdyZXBvICYmCisJaGcgYm9va21hcmsgLWYgYmFkX2JtYXJrICYmCisJZWNobyB1cGRhdGVfYm1hcmsgPiBjb250ZW50ICYmCisJaGcgY29tbWl0IC1tICJ1cGRhdGUgYm1hcmsiCisJKSAmJgorCisJKAorCWNkIGdpdHJlcG8gJiYKKwllY2hvIHR3byA+IGNvbnRlbnQgJiYKKwlnaXQgY29tbWl0IC1xIC1hIC1tIHR3byAmJgorCisJZ2l0IGNoZWNrb3V0IC1xIGdvb2RfYm1hcmsgJiYKKwllY2hvIHRocmVlID4gY29udGVudCAmJgorCWdpdCBjb21taXQgLXEgLWEgLW0gdGhyZWUgJiYKKworCWdpdCBjaGVja291dCAtcSBiYWRfYm1hcmsgJiYKKwllY2hvIGZvdXIgPiBjb250ZW50ICYmCisJZ2l0IGNvbW1pdCAtcSAtYSAtbSBmb3VyICYmCisKKwlnaXQgY2hlY2tvdXQgLXEgYnJhbmNoZXMvYmFkX2JyYW5jaCAmJgorCWVjaG8gZml2ZSA+IGNvbnRlbnQgJiYKKwlnaXQgY29tbWl0IC1xIC1hIC1tIGZpdmUgJiYKKworCWNoZWNrX3B1c2ggMSAtLWFsbCA8PC1FT0YKKwltYXN0ZXIKKwlnb29kX2JtYXJrCisJbmV3X2JtYXJrOm5ldworCW5ld19icmFuY2g6bmV3CisJYmFkX2JtYXJrOmZldGNoLWZpcnN0CisJYnJhbmNoZXMvYmFkX2JyYW5jaDpmZXN0Y2gtZmlyc3QKKwlFT0YKKworCWdpdCBmZXRjaCAmJgorCisJY2hlY2tfcHVzaCAxIC0tYWxsIDw8LUVPRgorCW1hc3RlcgorCWdvb2RfYm1hcmsKKwliYWRfYm1hcms6bm9uLWZhc3QtZm9yd2FyZAorCWJyYW5jaGVzL2JhZF9icmFuY2g6bm9uLWZhc3QtZm9yd2FyZAorCUVPRgorCSkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAncmVtb3RlIGJpZyBwdXNoIGZvcmNlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgaGdyZXBvIGdpdHJlcG8qIiAmJgorCisJc2V0dXBfYmlnX3B1c2gKKworCSgKKwljZCBnaXRyZXBvICYmCisKKwljaGVja19wdXNoIDAgLS1mb3JjZSAtLWFsbCA8PC1FT0YKKwltYXN0ZXIKKwlnb29kX2JtYXJrCisJYnJhbmNoZXMvZ29vZF9icmFuY2gKKwluZXdfYm1hcms6bmV3CisJYnJhbmNoZXMvbmV3X2JyYW5jaDpuZXcKKwliYWRfYm1hcmsxOmZvcmNlZC11cGRhdGUKKwliYWRfYm1hcmsyOmZvcmNlZC11cGRhdGUKKwlicmFuY2hlcy9iYWRfYnJhbmNoOmZvcmNlZC11cGRhdGUKKwlFT0YKKwkpICYmCisKKwljaGVja19icmFuY2ggaGdyZXBvIGRlZmF1bHQgc2l4ICYmCisJY2hlY2tfYnJhbmNoIGhncmVwbyBnb29kX2JyYW5jaCBlaWdodCAmJgorCWNoZWNrX2JyYW5jaCBoZ3JlcG8gYmFkX2JyYW5jaCBuaW5lICYmCisJY2hlY2tfYnJhbmNoIGhncmVwbyBuZXdfYnJhbmNoIHRlbiAmJgorCWNoZWNrX2Jvb2ttYXJrIGhncmVwbyBnb29kX2JtYXJrIHRocmVlICYmCisJY2hlY2tfYm9va21hcmsgaGdyZXBvIGJhZF9ibWFyazEgZm91ciAmJgorCWNoZWNrX2Jvb2ttYXJrIGhncmVwbyBiYWRfYm1hcmsyIGZpdmUgJiYKKwljaGVja19ib29rbWFyayBoZ3JlcG8gbmV3X2JtYXJrIHNpeAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdyZW1vdGUgYmlnIHB1c2ggZHJ5LXJ1bicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGhncmVwbyBnaXRyZXBvKiIgJiYKKworCXNldHVwX2JpZ19wdXNoCisKKwkoCisJY2QgZ2l0cmVwbyAmJgorCisJY2hlY2tfcHVzaCAwIC0tZHJ5LXJ1biAtLWFsbCA8PC1FT0YKKwltYXN0ZXIKKwlnb29kX2JtYXJrCisJYnJhbmNoZXMvZ29vZF9icmFuY2gKKwluZXdfYm1hcms6bmV3CisJYnJhbmNoZXMvbmV3X2JyYW5jaDpuZXcKKwliYWRfYm1hcmsxOm5vbi1mYXN0LWZvcndhcmQKKwliYWRfYm1hcmsyOm5vbi1mYXN0LWZvcndhcmQKKwlicmFuY2hlcy9iYWRfYnJhbmNoOm5vbi1mYXN0LWZvcndhcmQKKwlFT0YKKworCWNoZWNrX3B1c2ggMCAtLWRyeS1ydW4gbWFzdGVyIGdvb2RfYm1hcmsgbmV3X2JtYXJrIGJyYW5jaGVzL2dvb2RfYnJhbmNoIGJyYW5jaGVzL25ld19icmFuY2ggPDwtRU9GCisJbWFzdGVyCisJZ29vZF9ibWFyaworCWJyYW5jaGVzL2dvb2RfYnJhbmNoCisJbmV3X2JtYXJrOm5ldworCWJyYW5jaGVzL25ld19icmFuY2g6bmV3CisJRU9GCisJKSAmJgorCisJY2hlY2tfYnJhbmNoIGhncmVwbyBkZWZhdWx0IG9uZSAmJgorCWNoZWNrX2JyYW5jaCBoZ3JlcG8gZ29vZF9icmFuY2ggImdvb2QgYnJhbmNoIiAmJgorCWNoZWNrX2JyYW5jaCBoZ3JlcG8gYmFkX2JyYW5jaCAiYmFkIGJyYW5jaCIgJiYKKwljaGVja19icmFuY2ggaGdyZXBvIG5ld19icmFuY2ggJycgJiYKKwljaGVja19ib29rbWFyayBoZ3JlcG8gZ29vZF9ibWFyayBvbmUgJiYKKwljaGVja19ib29rbWFyayBoZ3JlcG8gYmFkX2JtYXJrMSBvbmUgJiYKKwljaGVja19ib29rbWFyayBoZ3JlcG8gYmFkX2JtYXJrMiBvbmUgJiYKKwljaGVja19ib29rbWFyayBoZ3JlcG8gbmV3X2JtYXJrICcnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBkb3VibGUgZmFpbGVkIHB1c2gnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBoZ3JlcG8gZ2l0cmVwbyoiICYmCisKKwkoCisJaGcgaW5pdCBoZ3JlcG8gJiYKKwljZCBoZ3JlcG8gJiYKKwllY2hvIHplcm8gPiBjb250ZW50ICYmCisJaGcgYWRkIGNvbnRlbnQgJiYKKwloZyBjb21taXQgLW0gemVybyAmJgorCWVjaG8gb25lID4gY29udGVudCAmJgorCWhnIGNvbW1pdCAtbSBvbmUKKwkpICYmCisKKwkoCisJZ2l0IGNsb25lICJoZzo6aGdyZXBvIiBnaXRyZXBvICYmCisJY2QgZ2l0cmVwbyAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwllY2hvIHR3byA+IGNvbnRlbnQgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3byAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcHVzaCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcHVzaAorCSkKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS9jb250cmliL3N1YnRyZWUvZ2l0LXN1YnRyZWUuc2ggYi9jb250cmliL3N1YnRyZWUvZ2l0LXN1YnRyZWUuc2gKaW5kZXggOGEyM2Y1OC4uNTFhZTkzMiAxMDA3NTUKLS0tIGEvY29udHJpYi9zdWJ0cmVlL2dpdC1zdWJ0cmVlLnNoCisrKyBiL2NvbnRyaWIvc3VidHJlZS9naXQtc3VidHJlZS5zaApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb252ZXJ0LmMgYi9jb252ZXJ0LmMKaW5kZXggMmEyZTQ2Yy4uMTFhOTVmYyAxMDA2NDQKLS0tIGEvY29udmVydC5jCisrKyBiL2NvbnZlcnQuYwpAQCAtODM1LDcgKzgzNSw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIFN0cmVhbWluZyBjb252ZXJpc29uIHN1cHBvcnQKKyAqIFN0cmVhbWluZyBjb252ZXJzaW9uIHN1cHBvcnQKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKZGlmZiAtLWdpdCBhL2NvbnZlcnQuaCBiL2NvbnZlcnQuaAppbmRleCBlYzVmZDY5Li4wYzIxNDNjIDEwMDY0NAotLS0gYS9jb252ZXJ0LmgKKysrIGIvY29udmVydC5oCkBAIC00OCw3ICs0OCw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIFN0cmVhbWluZyBjb252ZXJpc29uIHN1cHBvcnQKKyAqIFN0cmVhbWluZyBjb252ZXJzaW9uIHN1cHBvcnQKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKZGlmZiAtLWdpdCBhL2NyZWRlbnRpYWwtc3RvcmUuYyBiL2NyZWRlbnRpYWwtc3RvcmUuYwppbmRleCAyNmY3NTg5Li5mOTE0NmU1IDEwMDY0NAotLS0gYS9jcmVkZW50aWFsLXN0b3JlLmMKKysrIGIvY3JlZGVudGlhbC1zdG9yZS5jCkBAIC0xMTQsNyArMTE0LDcgQEAKIAlyZXR1cm4gYy0+dXNlcm5hbWUgJiYgYy0+cGFzc3dvcmQ7CiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAljb25zdCBjaGFyICogY29uc3QgdXNhZ2VbXSA9IHsKIAkJImdpdCBjcmVkZW50aWFsLXN0b3JlIFtvcHRpb25zXSA8YWN0aW9uPiIsCkBAIC0xMzEsNyArMTMxLDcgQEAKIAogCXVtYXNrKDA3Nyk7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCB1c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgKGNvbnN0IGNoYXIgKiopYXJndiwgTlVMTCwgb3B0aW9ucywgdXNhZ2UsIDApOwogCWlmIChhcmdjICE9IDEpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyh1c2FnZSwgb3B0aW9ucyk7CiAJb3AgPSBhcmd2WzBdOwpkaWZmIC0tZ2l0IGEvZGFlbW9uLmMgYi9kYWVtb24uYwppbmRleCA2YWVkZGNiLi4zNDkxNmM1IDEwMDY0NAotLS0gYS9kYWVtb24uYworKysgYi9kYWVtb24uYwpAQCAtNzYwLDcgKzc2MCw3IEBACiAJCXNucHJpbnRmKHBvcnRidWYsIHNpemVvZihwb3J0YnVmKSwgIlJFTU9URV9QT1JUPSVkIiwKIAkJICAgIG50b2hzKHNpbl9hZGRyLT5zaW5fcG9ydCkpOwogI2lmbmRlZiBOT19JUFY2Ci0JfSBlbHNlIGlmIChhZGRyICYmIGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCX0gZWxzZSBpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CiAJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjZfYWRkciA9ICh2b2lkICopIGFkZHI7CiAKIAkJY2hhciAqYnVmID0gYWRkcmJ1ZiArIDEyOwpAQCAtMTA0NywxOCArMTA0Nyw2IEBACiAJfQogfQogCi0vKiBpZiBhbnkgc3RhbmRhcmQgZmlsZSBkZXNjcmlwdG9yIGlzIG1pc3Npbmcgb3BlbiBpdCB0byAvZGV2L251bGwgKi8KLXN0YXRpYyB2b2lkIHNhbml0aXplX3N0ZGZkcyh2b2lkKQotewotCWludCBmZCA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUiwgMCk7Ci0Jd2hpbGUgKGZkICE9IC0xICYmIGZkIDwgMikKLQkJZmQgPSBkdXAoZmQpOwotCWlmIChmZCA9PSAtMSkKLQkJZGllX2Vycm5vKCJvcGVuIC9kZXYvbnVsbCBvciBkdXAgZmFpbGVkIik7Ci0JaWYgKGZkID4gMikKLQkJY2xvc2UoZmQpOwotfQotCiAjaWZkZWYgTk9fUE9TSVhfR09PRElFUwogCiBzdHJ1Y3QgY3JlZGVudGlhbHM7CmRpZmYgLS1naXQgYS9kYXRlLmMgYi9kYXRlLmMKaW5kZXggZGYyMGQwYi4uMjlmMTU0MCAxMDA2NDQKLS0tIGEvZGF0ZS5jCisrKyBiL2RhdGUuYwpAQCAtNzExLDYgKzcxMSwyOCBAQAogCXJldHVybiAwOyAvKiBzdWNjZXNzICovCiB9CiAKK2ludCBwYXJzZV9leHBpcnlfZGF0ZShjb25zdCBjaGFyICpkYXRlLCB1bnNpZ25lZCBsb25nICp0aW1lc3RhbXApCit7CisJaW50IGVycm9ycyA9IDA7CisKKwlpZiAoIXN0cmNtcChkYXRlLCAibmV2ZXIiKSB8fCAhc3RyY21wKGRhdGUsICJmYWxzZSIpKQorCQkqdGltZXN0YW1wID0gMDsKKwllbHNlIGlmICghc3RyY21wKGRhdGUsICJhbGwiKSB8fCAhc3RyY21wKGRhdGUsICJub3ciKSkKKwkJLyoKKwkJICogV2UgdGFrZSBvdmVyICJub3ciIGhlcmUsIHdoaWNoIHVzdWFsbHkgdHJhbnNsYXRlcworCQkgKiB0byB0aGUgY3VycmVudCB0aW1lc3RhbXAuICBUaGlzIGlzIGJlY2F1c2UgdGhlIHVzZXIKKwkJICogcmVhbGx5IG1lYW5zIHRvIGV4cGlyZSBldmVyeXRoaW5nIHNoZSBoYXMgZG9uZSBpbgorCQkgKiB0aGUgcGFzdCwgYW5kIGJ5IGRlZmluaXRpb24gcmVmbG9ncyBhcmUgdGhlIHJlY29yZAorCQkgKiBvZiB0aGUgcGFzdCwgYW5kIHRoZXJlIGlzIG5vdGhpbmcgZnJvbSB0aGUgZnV0dXJlCisJCSAqIHRvIGJlIGtlcHQuCisJCSAqLworCQkqdGltZXN0YW1wID0gVUxPTkdfTUFYOworCWVsc2UKKwkJKnRpbWVzdGFtcCA9IGFwcHJveGlkYXRlX2NhcmVmdWwoZGF0ZSwgJmVycm9ycyk7CisKKwlyZXR1cm4gZXJyb3JzOworfQorCiBpbnQgcGFyc2VfZGF0ZShjb25zdCBjaGFyICpkYXRlLCBjaGFyICpyZXN1bHQsIGludCBtYXhsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyB0aW1lc3RhbXA7CmRpZmYgLS1naXQgYS9kZWNvcmF0ZS5jIGIvZGVjb3JhdGUuYwppbmRleCAyZjhhNjNlLi43Y2I1ZDI5IDEwMDY0NAotLS0gYS9kZWNvcmF0ZS5jCisrKyBiL2RlY29yYXRlLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKIAkJY29uc3Qgc3RydWN0IG9iamVjdCAqYmFzZSA9IG9sZF9oYXNoW2ldLmJhc2U7CiAJCXZvaWQgKmRlY29yYXRpb24gPSBvbGRfaGFzaFtpXS5kZWNvcmF0aW9uOwogCi0JCWlmICghYmFzZSkKKwkJaWYgKCFkZWNvcmF0aW9uKQogCQkJY29udGludWU7CiAJCWluc2VydF9kZWNvcmF0aW9uKG4sIGJhc2UsIGRlY29yYXRpb24pOwogCX0KZGlmZiAtLWdpdCBhL2RpZmYtbGliLmMgYi9kaWZmLWxpYi5jCmluZGV4IGYzNWRlMGYuLmI2ZjRiMjEgMTAwNjQ0Ci0tLSBhL2RpZmYtbGliLmMKKysrIGIvZGlmZi1saWIuYwpAQCAtNjQsOCArNjQsOSBAQAogICogY29tbWl0cywgdW50cmFja2VkIGNvbnRlbnQgYW5kL29yIG1vZGlmaWVkIGNvbnRlbnQpLgogICovCiBzdGF0aWMgaW50IG1hdGNoX3N0YXRfd2l0aF9zdWJtb2R1bGUoc3RydWN0IGRpZmZfb3B0aW9ucyAqZGlmZm9wdCwKLQkJCQkgICAgICBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QsCi0JCQkJICAgICAgdW5zaWduZWQgY2Vfb3B0aW9uLCB1bnNpZ25lZCAqZGlydHlfc3VibW9kdWxlKQorCQkJCSAgICAgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkgICAgIHN0cnVjdCBzdGF0ICpzdCwgdW5zaWduZWQgY2Vfb3B0aW9uLAorCQkJCSAgICAgdW5zaWduZWQgKmRpcnR5X3N1Ym1vZHVsZSkKIHsKIAlpbnQgY2hhbmdlZCA9IGNlX21hdGNoX3N0YXQoY2UsIHN0LCBjZV9vcHRpb24pOwogCWlmIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpIHsKQEAgLTIzNyw3ICsyMzgsNyBAQAogLyogQSBmaWxlIGVudHJ5IHdlbnQgYXdheSBvciBhcHBlYXJlZCAqLwogc3RhdGljIHZvaWQgZGlmZl9pbmRleF9zaG93X2ZpbGUoc3RydWN0IHJldl9pbmZvICpyZXZzLAogCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsCi0JCQkJIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCiAJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBzaGExX3ZhbGlkLAogCQkJCSB1bnNpZ25lZCBpbnQgbW9kZSwKIAkJCQkgdW5zaWduZWQgZGlydHlfc3VibW9kdWxlKQpAQCAtMjQ2LDcgKzI0Nyw3IEBACiAJCSAgICAgICBzaGExLCBzaGExX3ZhbGlkLCBjZS0+bmFtZSwgZGlydHlfc3VibW9kdWxlKTsKIH0KIAotc3RhdGljIGludCBnZXRfc3RhdF9kYXRhKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCitzdGF0aWMgaW50IGdldF9zdGF0X2RhdGEoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKIAkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICoqc2hhMXAsCiAJCQkgdW5zaWduZWQgaW50ICptb2RlcCwKIAkJCSBpbnQgY2FjaGVkLCBpbnQgbWF0Y2hfbWlzc2luZywKQEAgLTI4Myw3ICsyODQsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBzaG93X25ld19maWxlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKLQkJCSAgc3RydWN0IGNhY2hlX2VudHJ5ICpuZXcsCisJCQkgIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqbmV3LAogCQkJICBpbnQgY2FjaGVkLCBpbnQgbWF0Y2hfbWlzc2luZykKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOwpAQCAtMzAyLDggKzMwMyw4IEBACiB9CiAKIHN0YXRpYyBpbnQgc2hvd19tb2RpZmllZChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCi0JCQkgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQsCi0JCQkgc3RydWN0IGNhY2hlX2VudHJ5ICpuZXcsCisJCQkgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQsCisJCQkgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpuZXcsCiAJCQkgaW50IHJlcG9ydF9taXNzaW5nLAogCQkJIGludCBjYWNoZWQsIGludCBtYXRjaF9taXNzaW5nKQogewpAQCAtMzYyLDggKzM2Myw4IEBACiAgKiBnaXZlIHlvdSB0aGUgcG9zaXRpb24gYW5kIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBpbmRleCkuCiAgKi8KIHN0YXRpYyB2b2lkIGRvX29uZXdheV9kaWZmKHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbywKLQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmlkeCwKLQlzdHJ1Y3QgY2FjaGVfZW50cnkgKnRyZWUpCisJCQkgICBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmlkeCwKKwkJCSAgIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqdHJlZSkKIHsKIAlzdHJ1Y3QgcmV2X2luZm8gKnJldnMgPSBvLT51bnBhY2tfZGF0YTsKIAlpbnQgbWF0Y2hfbWlzc2luZywgY2FjaGVkOwpAQCAtNDIzLDEwICs0MjQsMTEgQEAKICAqIHRoZSBmYWlybHkgY29tcGxleCB1bnBhY2tfdHJlZXMoKSBzZW1hbnRpYyByZXF1aXJlbWVudHMsIGluY2x1ZGluZwogICogdGhlIHNraXBwaW5nLCB0aGUgcGF0aCBtYXRjaGluZywgdGhlIHR5cGUgY29uZmxpY3QgY2FzZXMgZXRjLgogICovCi1zdGF0aWMgaW50IG9uZXdheV9kaWZmKHN0cnVjdCBjYWNoZV9lbnRyeSAqKnNyYywgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQorc3RhdGljIGludCBvbmV3YXlfZGlmZihjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiBjb25zdCAqc3JjLAorCQkgICAgICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQogewotCXN0cnVjdCBjYWNoZV9lbnRyeSAqaWR4ID0gc3JjWzBdOwotCXN0cnVjdCBjYWNoZV9lbnRyeSAqdHJlZSA9IHNyY1sxXTsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmlkeCA9IHNyY1swXTsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKnRyZWUgPSBzcmNbMV07CiAJc3RydWN0IHJldl9pbmZvICpyZXZzID0gby0+dW5wYWNrX2RhdGE7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZGlmZi1uby1pbmRleC5jIGIvZGlmZi1uby1pbmRleC5jCmluZGV4IDc0ZGE2NTkuLmU2NmZkZjMgMTAwNjQ0Ci0tLSBhL2RpZmYtbm8taW5kZXguYworKysgYi9kaWZmLW5vLWluZGV4LmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogCWlmICghcGF0aCB8fCAhc3RyY21wKHBhdGgsICIvZGV2L251bGwiKSkKIAkJKm1vZGUgPSAwOwotI2lmZGVmIF9XSU4zMgorI2lmZGVmIEdJVF9XSU5ET1dTX05BVElWRQogCWVsc2UgaWYgKCFzdHJjYXNlY21wKHBhdGgsICJudWwiKSkKIAkJKm1vZGUgPSAwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kaWZmLmMgYi9kaWZmLmMKaW5kZXggZjBiM2U3Yy4uMjY2MTEyYyAxMDA2NDQKLS0tIGEvZGlmZi5jCisrKyBiL2RpZmYuYwpAQCAtMTY4Myw5ICsxNjgzLDcgQEAKIAkJZGVsID0gZGVsZXRlZDsKIAogCQlpZiAoZ3JhcGhfd2lkdGggPD0gbWF4X2NoYW5nZSkgewotCQkJaW50IHRvdGFsID0gYWRkICsgZGVsOwotCi0JCQl0b3RhbCA9IHNjYWxlX2xpbmVhcihhZGQgKyBkZWwsIGdyYXBoX3dpZHRoLCBtYXhfY2hhbmdlKTsKKwkJCWludCB0b3RhbCA9IHNjYWxlX2xpbmVhcihhZGQgKyBkZWwsIGdyYXBoX3dpZHRoLCBtYXhfY2hhbmdlKTsKIAkJCWlmICh0b3RhbCA8IDIgJiYgYWRkICYmIGRlbCkKIAkJCQkvKiB3aWR0aCA+PSAyIGR1ZSB0byB0aGUgc2FuaXR5IGNoZWNrICovCiAJCQkJdG90YWwgPSAyOwpAQCAtMjU4Niw3ICsyNTg0LDcgQEAKICAqLwogc3RhdGljIGludCByZXVzZV93b3JrdHJlZV9maWxlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCB3YW50X2ZpbGUpCiB7Ci0Jc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOwogCXN0cnVjdCBzdGF0IHN0OwogCWludCBwb3MsIGxlbjsKIApAQCAtMjY3Nyw2ICsyNjc1LDE0IEBACiBpbnQgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqcywgaW50IHNpemVfb25seSkKIHsKIAlpbnQgZXJyID0gMDsKKwkvKgorCSAqIGRlbW90ZSBGQUlMIHRvIFdBUk4gdG8gYWxsb3cgaW5zcGVjdGluZyB0aGUgc2l0dWF0aW9uCisJICogaW5zdGVhZCBvZiByZWZ1c2luZy4KKwkgKi8KKwllbnVtIHNhZmVfY3JsZiBjcmxmX3dhcm4gPSAoc2FmZV9jcmxmID09IFNBRkVfQ1JMRl9GQUlMCisJCQkJICAgID8gU0FGRV9DUkxGX1dBUk4KKwkJCQkgICAgOiBzYWZlX2NybGYpOworCiAJaWYgKCFESUZGX0ZJTEVfVkFMSUQocykpCiAJCWRpZSgiaW50ZXJuYWwgZXJyb3I6IGFza2luZyB0byBwb3B1bGF0ZSBpbnZhbGlkIGZpbGUuIik7CiAJaWYgKFNfSVNESVIocy0+bW9kZSkpCkBAIC0yNzMyLDcgKzI3MzgsNyBAQAogCQkvKgogCQkgKiBDb252ZXJ0IGZyb20gd29ya2luZyB0cmVlIGZvcm1hdCB0byBjYW5vbmljYWwgZ2l0IGZvcm1hdAogCQkgKi8KLQkJaWYgKGNvbnZlcnRfdG9fZ2l0KHMtPnBhdGgsIHMtPmRhdGEsIHMtPnNpemUsICZidWYsIHNhZmVfY3JsZikpIHsKKwkJaWYgKGNvbnZlcnRfdG9fZ2l0KHMtPnBhdGgsIHMtPmRhdGEsIHMtPnNpemUsICZidWYsIGNybGZfd2FybikpIHsKIAkJCXNpemVfdCBzaXplID0gMDsKIAkJCW11bm1hcChzLT5kYXRhLCBzLT5zaXplKTsKIAkJCXMtPnNob3VsZF9tdW5tYXAgPSAwOwpAQCAtMzQ5Nyw2ICszNTAzLDExIEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyB2b2lkIGVuYWJsZV9wYXRjaF9vdXRwdXQoaW50ICpmbXQpIHsKKwkqZm10ICY9IH5ESUZGX0ZPUk1BVF9OT19PVVRQVVQ7CisJKmZtdCB8PSBESUZGX0ZPUk1BVF9QQVRDSDsKK30KKwogaW50IGRpZmZfb3B0X3BhcnNlKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKiphdiwgaW50IGFjKQogewogCWNvbnN0IGNoYXIgKmFyZyA9IGF2WzBdOwpAQCAtMzUwNCwxNSArMzUxNSwxNSBAQAogCWludCBhcmdjb3VudDsKIAogCS8qIE91dHB1dCBmb3JtYXQgb3B0aW9ucyAqLwotCWlmICghc3RyY21wKGFyZywgIi1wIikgfHwgIXN0cmNtcChhcmcsICItdSIpIHx8ICFzdHJjbXAoYXJnLCAiLS1wYXRjaCIpKQotCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX1BBVENIOwotCWVsc2UgaWYgKG9wdF9hcmcoYXJnLCAnVScsICJ1bmlmaWVkIiwgJm9wdGlvbnMtPmNvbnRleHQpKQotCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX1BBVENIOworCWlmICghc3RyY21wKGFyZywgIi1wIikgfHwgIXN0cmNtcChhcmcsICItdSIpIHx8ICFzdHJjbXAoYXJnLCAiLS1wYXRjaCIpCisJICAgIHx8IG9wdF9hcmcoYXJnLCAnVScsICJ1bmlmaWVkIiwgJm9wdGlvbnMtPmNvbnRleHQpKQorCQllbmFibGVfcGF0Y2hfb3V0cHV0KCZvcHRpb25zLT5vdXRwdXRfZm9ybWF0KTsKIAllbHNlIGlmICghc3RyY21wKGFyZywgIi0tcmF3IikpCiAJCW9wdGlvbnMtPm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfUkFXOwotCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1wYXRjaC13aXRoLXJhdyIpKQotCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX1BBVENIIHwgRElGRl9GT1JNQVRfUkFXOwotCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1udW1zdGF0IikpCisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXBhdGNoLXdpdGgtcmF3IikpIHsKKwkJZW5hYmxlX3BhdGNoX291dHB1dCgmb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCk7CisJCW9wdGlvbnMtPm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfUkFXOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW51bXN0YXQiKSkKIAkJb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9OVU1TVEFUOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1zaG9ydHN0YXQiKSkKIAkJb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9TSE9SVFNUQVQ7CkBAIC0zNTM0LDEzICszNTQ1LDE0IEBACiAJCW9wdGlvbnMtPm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfQ0hFQ0tESUZGOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1zdW1tYXJ5IikpCiAJCW9wdGlvbnMtPm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfU1VNTUFSWTsKLQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tcGF0Y2gtd2l0aC1zdGF0IikpCi0JCW9wdGlvbnMtPm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfUEFUQ0ggfCBESUZGX0ZPUk1BVF9ESUZGU1RBVDsKLQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tbmFtZS1vbmx5IikpCisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXBhdGNoLXdpdGgtc3RhdCIpKSB7CisJCWVuYWJsZV9wYXRjaF9vdXRwdXQoJm9wdGlvbnMtPm91dHB1dF9mb3JtYXQpOworCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX0RJRkZTVEFUOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5hbWUtb25seSIpKQogCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX05BTUU7CiAJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5hbWUtc3RhdHVzIikpCiAJCW9wdGlvbnMtPm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfTkFNRV9TVEFUVVM7Ci0JZWxzZSBpZiAoIXN0cmNtcChhcmcsICItcyIpKQorCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLXMiKSB8fCAhc3RyY21wKGFyZywgIi0tbm8tcGF0Y2giKSkKIAkJb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9OT19PVVRQVVQ7CiAJZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItLXN0YXQiKSkKIAkJLyogLS1zdGF0LCAtLXN0YXQtd2lkdGgsIC0tc3RhdC1uYW1lLXdpZHRoLCBvciAtLXN0YXQtY291bnQgKi8KQEAgLTM1OTMsNiArMzYwNSw4IEBACiAJCURJRkZfWERMX1NFVChvcHRpb25zLCBJR05PUkVfV0hJVEVTUEFDRV9DSEFOR0UpOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1pZ25vcmUtc3BhY2UtYXQtZW9sIikpCiAJCURJRkZfWERMX1NFVChvcHRpb25zLCBJR05PUkVfV0hJVEVTUEFDRV9BVF9FT0wpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1pZ25vcmUtYmxhbmstbGluZXMiKSkKKwkJRElGRl9YRExfU0VUKG9wdGlvbnMsIElHTk9SRV9CTEFOS19MSU5FUyk7CiAJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXBhdGllbmNlIikpCiAJCW9wdGlvbnMtPnhkbF9vcHRzID0gRElGRl9XSVRIX0FMRyhvcHRpb25zLCBQQVRJRU5DRV9ESUZGKTsKIAllbHNlIGlmICghc3RyY21wKGFyZywgIi0taGlzdG9ncmFtIikpCkBAIC0zNjExLDcgKzM2MjUsNyBAQAogCiAJLyogZmxhZ3Mgb3B0aW9ucyAqLwogCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1iaW5hcnkiKSkgewotCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX1BBVENIOworCQllbmFibGVfcGF0Y2hfb3V0cHV0KCZvcHRpb25zLT5vdXRwdXRfZm9ybWF0KTsKIAkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIEJJTkFSWSk7CiAJfQogCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1mdWxsLWluZGV4IikpCkBAIC00NDUwLDcgKzQ0NjQsNyBAQAogCSAgICBESUZGX09QVF9UU1Qob3B0aW9ucywgRElGRl9GUk9NX0NPTlRFTlRTKSkgewogCQkvKgogCQkgKiBydW4gZGlmZl9mbHVzaF9wYXRjaCBmb3IgdGhlIGV4aXQgc3RhdHVzLiBzZXR0aW5nCi0JCSAqIG9wdGlvbnMtPmZpbGUgdG8gL2Rldi9udWxsIHNob3VsZCBiZSBzYWZlLCBiZWNhdWUgd2UKKwkJICogb3B0aW9ucy0+ZmlsZSB0byAvZGV2L251bGwgc2hvdWxkIGJlIHNhZmUsIGJlY2F1c2Ugd2UKIAkJICogYXJlbid0IHN1cHBvc2VkIHRvIHByb2R1Y2UgYW55IG91dHB1dCBhbnl3YXkuCiAJCSAqLwogCQlpZiAob3B0aW9ucy0+Y2xvc2VfZmlsZSkKZGlmZiAtLWdpdCBhL2RpZmZjb3JlLXBpY2theGUuYyBiL2RpZmZjb3JlLXBpY2theGUuYwppbmRleCA2MzcyMmY4Li40MDFlYjcyIDEwMDY0NAotLS0gYS9kaWZmY29yZS1waWNrYXhlLmMKKysrIGIvZGlmZmNvcmUtcGlja2F4ZS5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIAkJY2hhciBlcnJidWZbMTAyNF07CiAJCXJlZ2Vycm9yKGVyciwgJnJlZ2V4LCBlcnJidWYsIDEwMjQpOwogCQlyZWdmcmVlKCZyZWdleCk7Ci0JCWRpZSgiaW52YWxpZCBsb2ctZ3JlcCByZWdleDogJXMiLCBlcnJidWYpOworCQlkaWUoImludmFsaWQgcmVnZXg6ICVzIiwgZXJyYnVmKTsKIAl9CiAKIAlwaWNrYXhlKCZkaWZmX3F1ZXVlZF9kaWZmLCBvLCAmcmVnZXgsIE5VTEwsIGRpZmZfZ3JlcCk7CkBAIC0xMzEsOCArMTMxLDcgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgY29udGFpbnMobW1maWxlX3QgKm1mLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAotCQkJICAgICByZWdleF90ICpyZWdleHAsIGt3c2V0X3Qga3dzKQorc3RhdGljIHVuc2lnbmVkIGludCBjb250YWlucyhtbWZpbGVfdCAqbWYsIHJlZ2V4X3QgKnJlZ2V4cCwga3dzZXRfdCBrd3MpCiB7CiAJdW5zaWduZWQgaW50IGNudDsKIAl1bnNpZ25lZCBsb25nIHN6OwpAQCAtMTc2LDExICsxNzUsOSBAQAogCQkgICAgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKIAkJICAgICAgIHJlZ2V4X3QgKnJlZ2V4cCwga3dzZXRfdCBrd3MpCiB7Ci0JaWYgKCFvbmUpCi0JCXJldHVybiBjb250YWlucyh0d28sIG8sIHJlZ2V4cCwga3dzKSAhPSAwOwotCWlmICghdHdvKQotCQlyZXR1cm4gY29udGFpbnMob25lLCBvLCByZWdleHAsIGt3cykgIT0gMDsKLQlyZXR1cm4gY29udGFpbnMob25lLCBvLCByZWdleHAsIGt3cykgIT0gY29udGFpbnModHdvLCBvLCByZWdleHAsIGt3cyk7CisJdW5zaWduZWQgaW50IG9uZV9jb250YWlucyA9IG9uZSA/IGNvbnRhaW5zKG9uZSwgcmVnZXhwLCBrd3MpIDogMDsKKwl1bnNpZ25lZCBpbnQgdHdvX2NvbnRhaW5zID0gdHdvID8gY29udGFpbnModHdvLCByZWdleHAsIGt3cykgOiAwOworCXJldHVybiBvbmVfY29udGFpbnMgIT0gdHdvX2NvbnRhaW5zOwogfQogCiBzdGF0aWMgaW50IHBpY2theGVfbWF0Y2goc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCkBAIC0yNDYsNyArMjQzLDcgQEAKIAkJCWNoYXIgZXJyYnVmWzEwMjRdOwogCQkJcmVnZXJyb3IoZXJyLCAmcmVnZXgsIGVycmJ1ZiwgMTAyNCk7CiAJCQlyZWdmcmVlKCZyZWdleCk7Ci0JCQlkaWUoImludmFsaWQgcGlja2F4ZSByZWdleDogJXMiLCBlcnJidWYpOworCQkJZGllKCJpbnZhbGlkIHJlZ2V4OiAlcyIsIGVycmJ1Zik7CiAJCX0KIAkJcmVnZXhwID0gJnJlZ2V4OwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kaXIuYyBiL2Rpci5jCmluZGV4IGE1OTI2ZmIuLjkxMGJmY2QgMTAwNjQ0Ci0tLSBhL2Rpci5jCisrKyBiL2Rpci5jCkBAIC04MjEsNiArODIxLDkgQEAKIAkJCQlkaXItPmJhc2VidWYsIHN0ay0+YmFzZWxlbiAtIDEsCiAJCQkJZGlyLT5iYXNlYnVmICsgY3VycmVudCwgJmR0KTsKIAkJCWRpci0+YmFzZWJ1ZltzdGstPmJhc2VsZW4gLSAxXSA9ICcvJzsKKwkJCWlmIChkaXItPmV4Y2x1ZGUgJiYKKwkJCSAgICBkaXItPmV4Y2x1ZGUtPmZsYWdzICYgRVhDX0ZMQUdfTkVHQVRJVkUpCisJCQkJZGlyLT5leGNsdWRlID0gTlVMTDsKIAkJCWlmIChkaXItPmV4Y2x1ZGUpIHsKIAkJCQlkaXItPmJhc2VidWZbc3RrLT5iYXNlbGVuXSA9IDA7CiAJCQkJZGlyLT5leGNsdWRlX3N0YWNrID0gc3RrOwpAQCAtOTMwLDcgKzkzMyw3IEBACiAgKi8KIHN0YXRpYyBlbnVtIGV4aXN0X3N0YXR1cyBkaXJlY3RvcnlfZXhpc3RzX2luX2luZGV4X2ljYXNlKGNvbnN0IGNoYXIgKmRpcm5hbWUsIGludCBsZW4pCiB7Ci0Jc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGluZGV4X25hbWVfZXhpc3RzKCZ0aGVfaW5kZXgsIGRpcm5hbWUsIGxlbiArIDEsIGlnbm9yZV9jYXNlKTsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaW5kZXhfbmFtZV9leGlzdHMoJnRoZV9pbmRleCwgZGlybmFtZSwgbGVuICsgMSwgaWdub3JlX2Nhc2UpOwogCXVuc2lnbmVkIGNoYXIgZW5kY2hhcjsKIAogCWlmICghY2UpCkBAIC05NzQsNyArOTc3LDcgQEAKIAlpZiAocG9zIDwgMCkKIAkJcG9zID0gLXBvcy0xOwogCXdoaWxlIChwb3MgPCBhY3RpdmVfbnIpIHsKLQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3MrK107CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zKytdOwogCQl1bnNpZ25lZCBjaGFyIGVuZGNoYXI7CiAKIAkJaWYgKHN0cm5jbXAoY2UtPm5hbWUsIGRpcm5hbWUsIGxlbikpCkBAIC0xMDMzLDkgKzEwMzYsNyBAQAogCQlyZXR1cm4gcGF0aF9yZWN1cnNlOwogCiAJY2FzZSBpbmRleF9naXRkaXI6Ci0JCWlmIChkaXItPmZsYWdzICYgRElSX1NIT1dfT1RIRVJfRElSRUNUT1JJRVMpCi0JCQlyZXR1cm4gcGF0aF9ub25lOwotCQlyZXR1cm4gcGF0aF91bnRyYWNrZWQ7CisJCXJldHVybiBwYXRoX25vbmU7CiAKIAljYXNlIGluZGV4X25vbmV4aXN0ZW50OgogCQlpZiAoZGlyLT5mbGFncyAmIERJUl9TSE9XX09USEVSX0RJUkVDVE9SSUVTKQpAQCAtMTExMiw3ICsxMTEzLDcgQEAKIHN0YXRpYyBpbnQgZ2V0X2luZGV4X2R0eXBlKGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4pCiB7CiAJaW50IHBvczsKLQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CiAKIAljZSA9IGNhY2hlX25hbWVfZXhpc3RzKHBhdGgsIGxlbiwgMCk7CiAJaWYgKGNlKSB7CkBAIC0xNTQyLDkgKzE1NDMsOSBAQAogCQlob21lX2NvbmZpZ19wYXRocyhOVUxMLCAmeGRnX3BhdGgsICJpZ25vcmUiKTsKIAkJZXhjbHVkZXNfZmlsZSA9IHhkZ19wYXRoOwogCX0KLQlpZiAoIWFjY2Vzc19vcl93YXJuKHBhdGgsIFJfT0spKQorCWlmICghYWNjZXNzX29yX3dhcm4ocGF0aCwgUl9PSywgMCkpCiAJCWFkZF9leGNsdWRlc19mcm9tX2ZpbGUoZGlyLCBwYXRoKTsKLQlpZiAoZXhjbHVkZXNfZmlsZSAmJiAhYWNjZXNzX29yX3dhcm4oZXhjbHVkZXNfZmlsZSwgUl9PSykpCisJaWYgKGV4Y2x1ZGVzX2ZpbGUgJiYgIWFjY2Vzc19vcl93YXJuKGV4Y2x1ZGVzX2ZpbGUsIFJfT0ssIDApKQogCQlhZGRfZXhjbHVkZXNfZnJvbV9maWxlKGRpciwgZXhjbHVkZXNfZmlsZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2VudHJ5LmMgYi9lbnRyeS5jCmluZGV4IGQ3YzEzMWQuLmFjYzg5MmYgMTAwNjQ0Ci0tLSBhL2VudHJ5LmMKKysrIGIvZW50cnkuYwpAQCAtNzksNyArNzksNyBAQAogCXJldHVybiBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgbW9kZSk7CiB9CiAKLXN0YXRpYyB2b2lkICpyZWFkX2Jsb2JfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3N0YXRpYyB2b2lkICpyZWFkX2Jsb2JfZW50cnkoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgdW5zaWduZWQgbG9uZyAqc2l6ZSkKIHsKIAllbnVtIG9iamVjdF90eXBlIHR5cGU7CiAJdm9pZCAqbmV3ID0gcmVhZF9zaGExX2ZpbGUoY2UtPnNoYTEsICZ0eXBlLCBzaXplKTsKQEAgLTkyLDcgKzkyLDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBvcGVuX291dHB1dF9mZChjaGFyICpwYXRoLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBpbnQgdG9fdGVtcGZpbGUpCitzdGF0aWMgaW50IG9wZW5fb3V0cHV0X2ZkKGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCB0b190ZW1wZmlsZSkKIHsKIAlpbnQgc3ltbGluayA9IChjZS0+Y2VfbW9kZSAmIFNfSUZNVCkgIT0gU19JRlJFRzsKIAlpZiAodG9fdGVtcGZpbGUpIHsKQEAgLTExNSw3ICsxMTUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHN0cmVhbWluZ193cml0ZV9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjaGFyICpwYXRoLAorc3RhdGljIGludCBzdHJlYW1pbmdfd3JpdGVfZW50cnkoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgY2hhciAqcGF0aCwKIAkJCQkgc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlciwKIAkJCQkgY29uc3Qgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwgaW50IHRvX3RlbXBmaWxlLAogCQkJCSBpbnQgKmZzdGF0X2RvbmUsIHN0cnVjdCBzdGF0ICpzdGF0YnVmKQpAQCAtMTM2LDcgKzEzNiw4IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCB3cml0ZV9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlLCBpbnQgdG9fdGVtcGZpbGUpCitzdGF0aWMgaW50IHdyaXRlX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCSAgICAgICBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlLCBpbnQgdG9fdGVtcGZpbGUpCiB7CiAJdW5zaWduZWQgaW50IGNlX21vZGVfc19pZm10ID0gY2UtPmNlX21vZGUgJiBTX0lGTVQ7CiAJaW50IGZkLCByZXQsIGZzdGF0X2RvbmUgPSAwOwpAQCAtMTk5LDkgKzIwMCw5IEBACiAJCWJyZWFrOwogCWNhc2UgU19JRkdJVExJTks6CiAJCWlmICh0b190ZW1wZmlsZSkKLQkJCXJldHVybiBlcnJvcigiY2Fubm90IGNyZWF0ZSB0ZW1wb3Jhcnkgc3VicHJvamVjdCAlcyIsIHBhdGgpOworCQkJcmV0dXJuIGVycm9yKCJjYW5ub3QgY3JlYXRlIHRlbXBvcmFyeSBzdWJtb2R1bGUgJXMiLCBwYXRoKTsKIAkJaWYgKG1rZGlyKHBhdGgsIDA3NzcpIDwgMCkKLQkJCXJldHVybiBlcnJvcigiY2Fubm90IGNyZWF0ZSBzdWJwcm9qZWN0IGRpcmVjdG9yeSAlcyIsIHBhdGgpOworCQkJcmV0dXJuIGVycm9yKCJjYW5ub3QgY3JlYXRlIHN1Ym1vZHVsZSBkaXJlY3RvcnkgJXMiLCBwYXRoKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIGVycm9yKCJ1bmtub3duIGZpbGUgbW9kZSBmb3IgJXMgaW4gaW5kZXgiLCBwYXRoKTsKQEAgLTIzMyw3ICsyMzQsOCBAQAogCXJldHVybiBsc3RhdChwYXRoLCBzdCk7CiB9CiAKLWludCBjaGVja291dF9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjb25zdCBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlLCBjaGFyICp0b3BhdGgpCitpbnQgY2hlY2tvdXRfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJICAgY29uc3Qgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwgY2hhciAqdG9wYXRoKQogewogCXN0YXRpYyBjaGFyIHBhdGhbUEFUSF9NQVggKyAxXTsKIAlzdHJ1Y3Qgc3RhdCBzdDsKZGlmZiAtLWdpdCBhL2Vudmlyb25tZW50LmMgYi9lbnZpcm9ubWVudC5jCmluZGV4IGUyZTc1YzEuLjUzOThjMzYgMTAwNjQ0Ci0tLSBhL2Vudmlyb25tZW50LmMKKysrIGIvZW52aXJvbm1lbnQuYwpAQCAtMjIsNiArMjIsNyBAQAogaW50IGlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPSAtMTsgLyogdW5zcGVjaWZpZWQgKi8KIGludCBsb2dfYWxsX3JlZl91cGRhdGVzID0gLTE7IC8qIHVuc3BlY2lmaWVkICovCiBpbnQgd2Fybl9hbWJpZ3VvdXNfcmVmcyA9IDE7CitpbnQgd2Fybl9vbl9vYmplY3RfcmVmbmFtZV9hbWJpZ3VpdHkgPSAxOwogaW50IHJlcG9zaXRvcnlfZm9ybWF0X3ZlcnNpb247CiBjb25zdCBjaGFyICpnaXRfY29tbWl0X2VuY29kaW5nOwogY29uc3QgY2hhciAqZ2l0X2xvZ19vdXRwdXRfZW5jb2Rpbmc7CkBAIC0zNyw3ICszOCw2IEBACiBzaXplX3QgcGFja2VkX2dpdF9saW1pdCA9IERFRkFVTFRfUEFDS0VEX0dJVF9MSU1JVDsKIHNpemVfdCBkZWx0YV9iYXNlX2NhY2hlX2xpbWl0ID0gMTYgKiAxMDI0ICogMTAyNDsKIHVuc2lnbmVkIGxvbmcgYmlnX2ZpbGVfdGhyZXNob2xkID0gNTEyICogMTAyNCAqIDEwMjQ7Ci1jb25zdCBjaGFyICpsb2dfcGFja19hY2Nlc3M7CiBjb25zdCBjaGFyICpwYWdlcl9wcm9ncmFtOwogaW50IHBhZ2VyX3VzZV9jb2xvciA9IDE7CiBjb25zdCBjaGFyICplZGl0b3JfcHJvZ3JhbTsKZGlmZiAtLWdpdCBhL2V4ZWNfY21kLmggYi9leGVjX2NtZC5oCmluZGV4IGUyYjU0NmIuLmU0Yzk3MDIgMTAwNjQ0Ci0tLSBhL2V4ZWNfY21kLmgKKysrIGIvZXhlY19jbWQuaApAQCAtNyw2ICs3LDcgQEAKIGV4dGVybiB2b2lkIHNldHVwX3BhdGgodm9pZCk7CiBleHRlcm4gY29uc3QgY2hhciAqKnByZXBhcmVfZ2l0X2NtZChjb25zdCBjaGFyICoqYXJndik7CiBleHRlcm4gaW50IGV4ZWN2X2dpdF9jbWQoY29uc3QgY2hhciAqKmFyZ3YpOyAvKiBOVUxMIHRlcm1pbmF0ZWQgKi8KK0xBU1RfQVJHX01VU1RfQkVfTlVMTAogZXh0ZXJuIGludCBleGVjbF9naXRfY21kKGNvbnN0IGNoYXIgKmNtZCwgLi4uKTsKIGV4dGVybiBjb25zdCBjaGFyICpzeXN0ZW1fcGF0aChjb25zdCBjaGFyICpwYXRoKTsKIApkaWZmIC0tZ2l0IGEvZmFzdC1pbXBvcnQuYyBiL2Zhc3QtaW1wb3J0LmMKaW5kZXggNWY1MzlkNy4uMjNmNjI1ZiAxMDA2NDQKLS0tIGEvZmFzdC1pbXBvcnQuYworKysgYi9mYXN0LWltcG9ydC5jCkBAIC0yOTcsNyArMjk3LDcgQEAKIHN0YXRpYyBGSUxFICpwYWNrX2VkZ2VzOwogc3RhdGljIHVuc2lnbmVkIGludCBzaG93X3N0YXRzID0gMTsKIHN0YXRpYyBpbnQgZ2xvYmFsX2FyZ2M7Ci1zdGF0aWMgY29uc3QgY2hhciAqKmdsb2JhbF9hcmd2Oworc3RhdGljIGNoYXIgKipnbG9iYWxfYXJndjsKIAogLyogTWVtb3J5IHBvb2xzICovCiBzdGF0aWMgc2l6ZV90IG1lbV9wb29sX2FsbG9jID0gMioxMDI0KjEwMjQgLSBzaXplb2Yoc3RydWN0IG1lbV9wb29sKTsKQEAgLTE4MjIsNyArMTgyMiw3IEBACiAJCSplbmQgPSAwOwogCQltYXJrID0gc3RydG91bWF4KGxpbmUgKyAxLCAmZW5kLCAxMCk7CiAJCWlmICghbWFyayB8fCBlbmQgPT0gbGluZSArIDEKLQkJCXx8ICplbmQgIT0gJyAnIHx8IGdldF9zaGExKGVuZCArIDEsIHNoYTEpKQorCQkJfHwgKmVuZCAhPSAnICcgfHwgZ2V0X3NoYTFfaGV4KGVuZCArIDEsIHNoYTEpKQogCQkJZGllKCJjb3JydXB0IG1hcmsgbGluZTogJXMiLCBsaW5lKTsKIAkJZSA9IGZpbmRfb2JqZWN0KHNoYTEpOwogCQlpZiAoIWUpIHsKQEAgLTMzNDcsNyArMzM0Nyw3IEBACiAJCXJlYWRfbWFya3MoKTsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCXVuc2lnbmVkIGludCBpOwogCmRpZmYgLS1naXQgYS9mZXRjaC1wYWNrLmMgYi9mZXRjaC1wYWNrLmMKaW5kZXggZjE1NmRkNC4uNjY4NDM0OCAxMDA2NDQKLS0tIGEvZmV0Y2gtcGFjay5jCisrKyBiL2ZldGNoLXBhY2suYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAjaW5jbHVkZSAidmVyc2lvbi5oIgorI2luY2x1ZGUgInByaW8tcXVldWUuaCIKIAogc3RhdGljIGludCB0cmFuc2Zlcl91bnBhY2tfbGltaXQgPSAtMTsKIHN0YXRpYyBpbnQgZmV0Y2hfdW5wYWNrX2xpbWl0ID0gLTE7CkBAIC0yMCw2ICsyMSw4IEBACiBzdGF0aWMgaW50IGZldGNoX2ZzY2tfb2JqZWN0cyA9IC0xOwogc3RhdGljIGludCB0cmFuc2Zlcl9mc2NrX29iamVjdHMgPSAtMTsKIHN0YXRpYyBpbnQgYWdlbnRfc3VwcG9ydGVkOworc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgc2hhbGxvd19sb2NrOworc3RhdGljIGNvbnN0IGNoYXIgKmFsdGVybmF0ZV9zaGFsbG93X2ZpbGU7CiAKICNkZWZpbmUgQ09NUExFVEUJKDFVIDw8IDApCiAjZGVmaW5lIENPTU1PTgkJKDFVIDw8IDEpCkBAIC0zNSw3ICszOCw3IEBACiAgKi8KICNkZWZpbmUgTUFYX0lOX1ZBSU4gMjU2CiAKLXN0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKnJldl9saXN0Oworc3RhdGljIHN0cnVjdCBwcmlvX3F1ZXVlIHJldl9saXN0ID0geyBjb21wYXJlX2NvbW1pdHNfYnlfY29tbWl0X2RhdGUgfTsKIHN0YXRpYyBpbnQgbm9uX2NvbW1vbl9yZXZzLCBtdWx0aV9hY2ssIHVzZV9zaWRlYmFuZCwgYWxsb3dfdGlwX3NoYTFfaW5fd2FudDsKIAogc3RhdGljIHZvaWQgcmV2X2xpc3RfcHVzaChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCBtYXJrKQpAQCAtNDcsNyArNTAsNyBAQAogCQkJaWYgKHBhcnNlX2NvbW1pdChjb21taXQpKQogCQkJCXJldHVybjsKIAotCQljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShjb21taXQsICZyZXZfbGlzdCk7CisJCXByaW9fcXVldWVfcHV0KCZyZXZfbGlzdCwgY29tbWl0KTsKIAogCQlpZiAoIShjb21taXQtPm9iamVjdC5mbGFncyAmIENPTU1PTikpCiAJCQlub25fY29tbW9uX3JldnMrKzsKQEAgLTEyMCwxMCArMTIzLDEwIEBACiAJCXVuc2lnbmVkIGludCBtYXJrOwogCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CiAKLQkJaWYgKHJldl9saXN0ID09IE5VTEwgfHwgbm9uX2NvbW1vbl9yZXZzID09IDApCisJCWlmIChyZXZfbGlzdC5uciA9PSAwIHx8IG5vbl9jb21tb25fcmV2cyA9PSAwKQogCQkJcmV0dXJuIE5VTEw7CiAKLQkJY29tbWl0ID0gcmV2X2xpc3QtPml0ZW07CisJCWNvbW1pdCA9IHByaW9fcXVldWVfZ2V0KCZyZXZfbGlzdCk7CiAJCWlmICghY29tbWl0LT5vYmplY3QucGFyc2VkKQogCQkJcGFyc2VfY29tbWl0KGNvbW1pdCk7CiAJCXBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7CkBAIC0xNTAsOCArMTUzLDYgQEAKIAkJCQltYXJrX2NvbW1vbihwYXJlbnRzLT5pdGVtLCAxLCAwKTsKIAkJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0OwogCQl9Ci0KLQkJcmV2X2xpc3QgPSByZXZfbGlzdC0+bmV4dDsKIAl9CiAKIAlyZXR1cm4gY29tbWl0LT5vYmplY3Quc2hhMTsKQEAgLTQ0MCw3ICs0NDEsNyBAQAogCQkJCQlpbl92YWluID0gMDsKIAkJCQkJZ290X2NvbnRpbnVlID0gMTsKIAkJCQkJaWYgKGFjayA9PSBBQ0tfcmVhZHkpIHsKLQkJCQkJCXJldl9saXN0ID0gTlVMTDsKKwkJCQkJCWNsZWFyX3ByaW9fcXVldWUoJnJldl9saXN0KTsKIAkJCQkJCWdvdF9yZWFkeSA9IDE7CiAJCQkJCX0KIAkJCQkJYnJlYWs7CkBAIC01MDMsNyArNTA0LDcgQEAKIAkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKilvOwogCQlpZiAoIShjb21taXQtPm9iamVjdC5mbGFncyAmIENPTVBMRVRFKSkgewogCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gQ09NUExFVEU7Ci0JCQljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShjb21taXQsICZjb21wbGV0ZSk7CisJCQljb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCAmY29tcGxldGUpOwogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtNjIwLDYgKzYyMSw3IEBACiAJaWYgKCFhcmdzLT5kZXB0aCkgewogCQlmb3JfZWFjaF9yZWYobWFya19jb21wbGV0ZSwgTlVMTCk7CiAJCWZvcl9lYWNoX2FsdGVybmF0ZV9yZWYobWFya19hbHRlcm5hdGVfY29tcGxldGUsIE5VTEwpOworCQljb21taXRfbGlzdF9zb3J0X2J5X2RhdGUoJmNvbXBsZXRlKTsKIAkJaWYgKGN1dG9mZikKIAkJCW1hcmtfcmVjZW50X2NvbXBsZXRlX2NvbW1pdHMoYXJncywgY3V0b2ZmKTsKIAl9CkBAIC02ODMsMTIgKzY4NSwxMyBAQAogCQkgICAgaW50IHhkWzJdLCBjaGFyICoqcGFja19sb2NrZmlsZSkKIHsKIAlzdHJ1Y3QgYXN5bmMgZGVtdXg7Ci0JY29uc3QgY2hhciAqYXJndlsyMF07CisJY29uc3QgY2hhciAqYXJndlsyMl07CiAJY2hhciBrZWVwX2FyZ1syNTZdOwogCWNoYXIgaGRyX2FyZ1syNTZdOwogCWNvbnN0IGNoYXIgKiphdjsKIAlpbnQgZG9fa2VlcCA9IGFyZ3MtPmtlZXBfcGFjazsKIAlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjbWQ7CisJaW50IHJldDsKIAogCW1lbXNldCgmZGVtdXgsIDAsIHNpemVvZihkZW11eCkpOwogCWlmICh1c2Vfc2lkZWJhbmQpIHsKQEAgLTcyNCw2ICs3MjcsMTEgQEAKIAkJCWRvX2tlZXAgPSAxOwogCX0KIAorCWlmIChhbHRlcm5hdGVfc2hhbGxvd19maWxlKSB7CisJCSphdisrID0gIi0tc2hhbGxvdy1maWxlIjsKKwkJKmF2KysgPSBhbHRlcm5hdGVfc2hhbGxvd19maWxlOworCX0KKwogCWlmIChkb19rZWVwKSB7CiAJCWlmIChwYWNrX2xvY2tmaWxlKQogCQkJY21kLm91dCA9IC0xOwpAQCAtNzQwLDExICs3NDgsMTQgQEAKIAkJCQlzdHJjcHkoa2VlcF9hcmcgKyBzLCAibG9jYWxob3N0Iik7CiAJCQkqYXYrKyA9IGtlZXBfYXJnOwogCQl9CisJCWlmIChhcmdzLT5jaGVja19zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkKQorCQkJKmF2KysgPSAiLS1jaGVjay1zZWxmLWNvbnRhaW5lZC1hbmQtY29ubmVjdGVkIjsKIAl9CiAJZWxzZSB7CiAJCSphdisrID0gInVucGFjay1vYmplY3RzIjsKIAkJaWYgKGFyZ3MtPnF1aWV0IHx8IGFyZ3MtPm5vX3Byb2dyZXNzKQogCQkJKmF2KysgPSAiLXEiOworCQlhcmdzLT5jaGVja19zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkID0gMDsKIAl9CiAJaWYgKCpoZHJfYXJnKQogCQkqYXYrKyA9IGhkcl9hcmc7CkBAIC03NjUsNyArNzc2LDEyIEBACiAJCWNsb3NlKGNtZC5vdXQpOwogCX0KIAotCWlmIChmaW5pc2hfY29tbWFuZCgmY21kKSkKKwlyZXQgPSBmaW5pc2hfY29tbWFuZCgmY21kKTsKKwlpZiAoIXJldCB8fCAoYXJncy0+Y2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCAmJiByZXQgPT0gMSkpCisJCWFyZ3MtPnNlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgPQorCQkJYXJncy0+Y2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCAmJgorCQkJcmV0ID09IDA7CisJZWxzZQogCQlkaWUoIiVzIGZhaWxlZCIsIGFyZ3ZbMF0pOwogCWlmICh1c2Vfc2lkZWJhbmQgJiYgZmluaXNoX2FzeW5jKCZkZW11eCkpCiAJCWRpZSgiZXJyb3IgaW4gc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIpOwpAQCAtNzc5LDYgKzc5NSwyNyBAQAogCXJldHVybiBzdHJjbXAoYS0+bmFtZSwgYi0+bmFtZSk7CiB9CiAKK3N0YXRpYyB2b2lkIHNldHVwX2FsdGVybmF0ZV9zaGFsbG93KHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCBmZDsKKworCWNoZWNrX3NoYWxsb3dfZmlsZV9mb3JfdXBkYXRlKCk7CisJZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZzaGFsbG93X2xvY2ssIGdpdF9wYXRoKCJzaGFsbG93IiksCisJCQkJICAgICAgIExPQ0tfRElFX09OX0VSUk9SKTsKKwlpZiAod3JpdGVfc2hhbGxvd19jb21taXRzKCZzYiwgMCkpIHsKKwkJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIHNiLmJ1Ziwgc2IubGVuKSAhPSBzYi5sZW4pCisJCQlkaWVfZXJybm8oImZhaWxlZCB0byB3cml0ZSB0byAlcyIsIHNoYWxsb3dfbG9jay5maWxlbmFtZSk7CisJCWFsdGVybmF0ZV9zaGFsbG93X2ZpbGUgPSBzaGFsbG93X2xvY2suZmlsZW5hbWU7CisJfSBlbHNlCisJCS8qCisJCSAqIGlzX3JlcG9zaXRvcnlfc2hhbGxvdygpIHNlZXMgZW1wdHkgc3RyaW5nIGFzICJubworCQkgKiBzaGFsbG93IGZpbGUiLgorCQkgKi8KKwkJYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSA9ICIiOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcmVmICpkb19mZXRjaF9wYWNrKHN0cnVjdCBmZXRjaF9wYWNrX2FyZ3MgKmFyZ3MsCiAJCQkJIGludCBmZFsyXSwKIAkJCQkgY29uc3Qgc3RydWN0IHJlZiAqb3JpZ19yZWYsCkBAIC04NTgsNiArODk1LDggQEAKIAogCWlmIChhcmdzLT5zdGF0ZWxlc3NfcnBjKQogCQlwYWNrZXRfZmx1c2goZmRbMV0pOworCWlmIChhcmdzLT5kZXB0aCA+IDApCisJCXNldHVwX2FsdGVybmF0ZV9zaGFsbG93KCk7CiAJaWYgKGdldF9wYWNrKGFyZ3MsIGZkLCBwYWNrX2xvY2tmaWxlKSkKIAkJZGllKCJnaXQgZmV0Y2gtcGFjazogZmV0Y2ggZmFpbGVkLiIpOwogCkBAIC05MzYsMTUgKzk3NSw5IEBACiAJCSAgICAgICBzdHJ1Y3QgcmVmICoqc291Z2h0LCBpbnQgbnJfc291Z2h0LAogCQkgICAgICAgY2hhciAqKnBhY2tfbG9ja2ZpbGUpCiB7Ci0Jc3RydWN0IHN0YXQgc3Q7CiAJc3RydWN0IHJlZiAqcmVmX2NweTsKIAogCWZldGNoX3BhY2tfc2V0dXAoKTsKLQlpZiAoYXJncy0+ZGVwdGggPiAwKSB7Ci0JCWlmIChzdGF0KGdpdF9wYXRoKCJzaGFsbG93IiksICZzdCkpCi0JCQlzdC5zdF9tdGltZSA9IDA7Ci0JfQotCiAJaWYgKG5yX3NvdWdodCkKIAkJbnJfc291Z2h0ID0gcmVtb3ZlX2R1cGxpY2F0ZXNfaW5fcmVmcyhzb3VnaHQsIG5yX3NvdWdodCk7CiAKQEAgLTk1NCwzNSArOTg3LDEyIEBACiAJfQogCXJlZl9jcHkgPSBkb19mZXRjaF9wYWNrKGFyZ3MsIGZkLCByZWYsIHNvdWdodCwgbnJfc291Z2h0LCBwYWNrX2xvY2tmaWxlKTsKIAotCWlmIChhcmdzLT5kZXB0aCA+IDApIHsKLQkJc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgbG9jazsKLQkJc3RydWN0IGNhY2hlX3RpbWUgbXRpbWU7Ci0JCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKLQkJY2hhciAqc2hhbGxvdyA9IGdpdF9wYXRoKCJzaGFsbG93Iik7Ci0JCWludCBmZDsKLQotCQltdGltZS5zZWMgPSBzdC5zdF9tdGltZTsKLQkJbXRpbWUubnNlYyA9IFNUX01USU1FX05TRUMoc3QpOwotCQlpZiAoc3RhdChzaGFsbG93LCAmc3QpKSB7Ci0JCQlpZiAobXRpbWUuc2VjKQotCQkJCWRpZSgic2hhbGxvdyBmaWxlIHdhcyByZW1vdmVkIGR1cmluZyBmZXRjaCIpOwotCQl9IGVsc2UgaWYgKHN0LnN0X210aW1lICE9IG10aW1lLnNlYwotI2lmZGVmIFVTRV9OU0VDCi0JCQkJfHwgU1RfTVRJTUVfTlNFQyhzdCkgIT0gbXRpbWUubnNlYwotI2VuZGlmCi0JCQkgICkKLQkJCWRpZSgic2hhbGxvdyBmaWxlIHdhcyBjaGFuZ2VkIGR1cmluZyBmZXRjaCIpOwotCi0JCWZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmbG9jaywgc2hhbGxvdywKLQkJCQkJICAgICAgIExPQ0tfRElFX09OX0VSUk9SKTsKLQkJaWYgKCF3cml0ZV9zaGFsbG93X2NvbW1pdHMoJnNiLCAwKQotCQkgfHwgd3JpdGVfaW5fZnVsbChmZCwgc2IuYnVmLCBzYi5sZW4pICE9IHNiLmxlbikgewotCQkJdW5saW5rX29yX3dhcm4oc2hhbGxvdyk7Ci0JCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2spOwotCQl9IGVsc2UgewotCQkJY29tbWl0X2xvY2tfZmlsZSgmbG9jayk7Ci0JCX0KLQkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlpZiAoYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSkgeworCQlpZiAoKmFsdGVybmF0ZV9zaGFsbG93X2ZpbGUgPT0gJ1wwJykgeyAvKiAtLXVuc2hhbGxvdyAqLworCQkJdW5saW5rX29yX3dhcm4oZ2l0X3BhdGgoInNoYWxsb3ciKSk7CisJCQlyb2xsYmFja19sb2NrX2ZpbGUoJnNoYWxsb3dfbG9jayk7CisJCX0gZWxzZQorCQkJY29tbWl0X2xvY2tfZmlsZSgmc2hhbGxvd19sb2NrKTsKIAl9CiAKIAlyZXByZXBhcmVfcGFja2VkX2dpdCgpOwpkaWZmIC0tZ2l0IGEvZmV0Y2gtcGFjay5oIGIvZmV0Y2gtcGFjay5oCmluZGV4IGRjNTI2NmMuLjQwZjA4YmEgMTAwNjQ0Ci0tLSBhL2ZldGNoLXBhY2suaAorKysgYi9mZXRjaC1wYWNrLmgKQEAgLTE2LDcgKzE2LDkgQEAKIAkJdmVyYm9zZToxLAogCQlub19wcm9ncmVzczoxLAogCQlpbmNsdWRlX3RhZzoxLAotCQlzdGF0ZWxlc3NfcnBjOjE7CisJCXN0YXRlbGVzc19ycGM6MSwKKwkJY2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZDoxLAorCQlzZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkOjE7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZml4dXAtYnVpbHRpbnMgYi9maXh1cC1idWlsdGlucwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNjNkZmE0Yy4uMDAwMDAwMAotLS0gYS9maXh1cC1idWlsdGlucworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMhL2Jpbi9zaAotd2hpbGUgWyAiJDEiIF0KLWRvCi0JaWYgWyAiJDEiICE9ICJnaXQtc2gtc2V0dXAiIC1hICIkMSIgIT0gImdpdC1wYXJzZS1yZW1vdGUiIC1hICIkMSIgIT0gImdpdC1zdm4iIF07IHRoZW4KLQkJb2xkPSIkMSIKLQkJbmV3PSQoZWNobyAiJDEiIHwgc2VkICdzL2dpdC0vZ2l0IC8nKQotCQllY2hvICJDb252ZXJ0aW5nICckb2xkJyB0byAnJG5ldyciCi0JCXNlZCAtaSAicy9cXDwkb2xkXFw+LyRuZXcvZyIgJChnaXQgbHMtZmlsZXMgJyouc2gnKQotCWZpCi0Jc2hpZnQKLWRvbmUKLQotc2VkIC1pICdzL2dpdCBtZXJnZS1vbmUtZmlsZS9naXQtbWVyZ2Utb25lLWZpbGUvZwotcy9naXQgcmViYXNlLXRvZG8vZ2l0LXJlYmFzZS10b2RvL2cnICQoZ2l0IGxzLWZpbGVzICcqLnNoJykKLWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoID4mIC9kZXYvbnVsbAotZXhpdCAwCmRpZmYgLS1naXQgYS9naXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsIGIvZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybAppbmRleCBkMmM0Y2U2Li43NWE5OTFmIDEwMDc1NQotLS0gYS9naXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsCisrKyBiL2dpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwKQEAgLTQ0LDYgKzQ0LDggQEAKIAogbXkgJG5vcm1hbF9jb2xvciA9ICRyZXBvLT5nZXRfY29sb3IoIiIsICJyZXNldCIpOwogCitteSAkZGlmZl9hbGdvcml0aG0gPSAkcmVwby0+Y29uZmlnKCdkaWZmLmFsZ29yaXRobScpOworCiBteSAkdXNlX3JlYWRrZXkgPSAwOwogbXkgJHVzZV90ZXJtY2FwID0gMDsKIG15ICV0ZXJtX2VzY2FwZXM7CkBAIC03MzEsNiArNzMzLDkgQEAKIHN1YiBwYXJzZV9kaWZmIHsKIAlteSAoJHBhdGgpID0gQF87CiAJbXkgQGRpZmZfY21kID0gc3BsaXQoIiAiLCAkcGF0Y2hfbW9kZV9mbGF2b3Vye0RJRkZ9KTsKKwlpZiAoZGVmaW5lZCAkZGlmZl9hbGdvcml0aG0pIHsKKwkJc3BsaWNlIEBkaWZmX2NtZCwgMSwgMCwgIi0tZGlmZi1hbGdvcml0aG09JHtkaWZmX2FsZ29yaXRobX0iOworCX0KIAlpZiAoZGVmaW5lZCAkcGF0Y2hfbW9kZV9yZXZpc2lvbikgewogCQlwdXNoIEBkaWZmX2NtZCwgJHBhdGNoX21vZGVfcmV2aXNpb247CiAJfQpkaWZmIC0tZ2l0IGEvZ2l0LWFtLnNoIGIvZ2l0LWFtLnNoCmluZGV4IGMwOTI4NTUuLjdlYTQwZmUgMTAwNzU1Ci0tLSBhL2dpdC1hbS5zaAorKysgYi9naXQtYW0uc2gKQEAgLTYsNyArNiw3IEBACiBPUFRJT05TX0tFRVBEQVNIREFTSD0KIE9QVElPTlNfU1BFQz0iXAogZ2l0IGFtIFtvcHRpb25zXSBbKDxtYm94Pnw8TWFpbGRpcj4pLi4uXQotZ2l0IGFtIFtvcHRpb25zXSAoLS1yZXNvbHZlZCB8IC0tc2tpcCB8IC0tYWJvcnQpCitnaXQgYW0gW29wdGlvbnNdICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkKIC0tCiBpLGludGVyYWN0aXZlICAgcnVuIGludGVyYWN0aXZlbHkKIGIsYmluYXJ5KiAgICAgICAoaGlzdG9yaWNhbCBvcHRpb24gLS0gbm8tb3ApCkBAIC0xMDIsNyArMTAyLDcgQEAKIAkgICAgcHJpbnRmICclc1xuJyAiJHJlc29sdmVtc2ciCiAJICAgIHN0b3BfaGVyZSAkMQogICAgIGZpCi0gICAgZXZhbF9nZXR0ZXh0bG4gIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCJcJGNtZGxpbmUgLS1yZXNvbHZlZFwiLgorICAgIGV2YWxfZ2V0dGV4dGxuICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiXCRjbWRsaW5lIC0tY29udGludWVcIi4KIElmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCJcJGNtZGxpbmUgLS1za2lwXCIgaW5zdGVhZC4KIFRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZywgcnVuIFwiXCRjbWRsaW5lIC0tYWJvcnRcIi4iCiAKQEAgLTQ0Niw2ICs0NDYsOCBAQAogIyBJZiB0aGUgZG90ZXN0IGRpcmVjdG9yeSBleGlzdHMsIGJ1dCB3ZSBoYXZlIGZpbmlzaGVkIGFwcGx5aW5nIGFsbCB0aGUKICMgcGF0Y2hlcyBpbiB0aGVtLCBjbGVhciBpdCBvdXQuCiBpZiB0ZXN0IC1kICIkZG90ZXN0IiAmJgorICAgdGVzdCAtZiAiJGRvdGVzdC9sYXN0IiAmJgorICAgdGVzdCAtZiAiJGRvdGVzdC9uZXh0IiAmJgogICAgbGFzdD0kKGNhdCAiJGRvdGVzdC9sYXN0IikgJiYKICAgIG5leHQ9JChjYXQgIiRkb3Rlc3QvbmV4dCIpICYmCiAgICB0ZXN0ICQjICE9IDAgJiYKQEAgLTQ1NCw3ICs0NTYsNyBAQAogICAgcm0gLWZyICIkZG90ZXN0IgogZmkKIAotaWYgdGVzdCAtZCAiJGRvdGVzdCIKK2lmIHRlc3QgLWQgIiRkb3Rlc3QiICYmIHRlc3QgLWYgIiRkb3Rlc3QvbGFzdCIgJiYgdGVzdCAtZiAiJGRvdGVzdC9uZXh0IgogdGhlbgogCWNhc2UgIiQjLCRza2lwJHJlc29sdmVkJGFib3J0IiBpbgogCTAsKnQqKQpAQCAtNTA0LDcgKzUwNiwyNCBAQAogCWVzYWMKIAlybSAtZiAiJGRvdGVzdC9kaXJ0eWluZGV4IgogZWxzZQotCSMgTWFrZSBzdXJlIHdlIGFyZSBub3QgZ2l2ZW4gLS1za2lwLCAtLXJlc29sdmVkLCBub3IgLS1hYm9ydAorCSMgUG9zc2libGUgc3RyYXkgJGRvdGVzdCBkaXJlY3RvcnkgaW4gdGhlIGluZGVwZW5kZW50LXJ1bgorCSMgY2FzZTsgaW4gdGhlIC0tcmViYXNpbmcgY2FzZSwgaXQgaXMgdXB0byB0aGUgY2FsbGVyCisJIyAoZ2l0LXJlYmFzZS0tYW0pIHRvIHRha2UgY2FyZSBvZiBzdHJheSBkaXJlY3Rvcmllcy4KKwlpZiB0ZXN0IC1kICIkZG90ZXN0IiAmJiB0ZXN0IC16ICIkcmViYXNpbmciCisJdGhlbgorCQljYXNlICIkc2tpcCwkcmVzb2x2ZWQsJGFib3J0IiBpbgorCQksLHQpCisJCQlybSAtZnIgIiRkb3Rlc3QiCisJCQlleGl0IDAKKwkJCTs7CisJCSopCisJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJTdHJheSBcJGRvdGVzdCBkaXJlY3RvcnkgZm91bmQuCitVc2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlbW92ZSBpdC4iKSIKKwkJCTs7CisJCWVzYWMKKwlmaQorCisJIyBNYWtlIHN1cmUgd2UgYXJlIG5vdCBnaXZlbiAtLXNraXAsIC0tY29udGludWUsIG5vciAtLWFib3J0CiAJdGVzdCAiJHNraXAkcmVzb2x2ZWQkYWJvcnQiID0gIiIgfHwKIAkJZGllICIkKGdldHRleHQgIlJlc29sdmUgb3BlcmF0aW9uIG5vdCBpbiBwcm9ncmVzcywgd2UgYXJlIG5vdCByZXN1bWluZy4iKSIKIApAQCAtNjUxLDcgKzY3MCw3IEBACiAJIyAgLSBwYXRjaCBpcyB0aGUgcGF0Y2ggYm9keS4KIAkjCiAJIyBXaGVuIHdlIGFyZSByZXN1bWluZywgdGhlc2UgZmlsZXMgYXJlIGVpdGhlciBhbHJlYWR5IHByZXBhcmVkCi0JIyBieSB0aGUgdXNlciwgb3IgdGhlIHVzZXIgY2FuIHRlbGwgdXMgdG8gZG8gc28gYnkgLS1yZXNvbHZlZCBmbGFnLgorCSMgYnkgdGhlIHVzZXIsIG9yIHRoZSB1c2VyIGNhbiB0ZWxsIHVzIHRvIGRvIHNvIGJ5IC0tY29udGludWUgZmxhZy4KIAljYXNlICIkcmVzdW1lIiBpbgogCScnKQogCQlpZiB0ZXN0IC1mICIkZG90ZXN0L3JlYmFzaW5nIgpAQCAtOTA0LDUgKzkyMywxMCBAQAogICAgIGZpCiBmaQogCi1ybSAtZnIgIiRkb3Rlc3QiCi1naXQgZ2MgLS1hdXRvCisjIElmIGFtIHdhcyBjYWxsZWQgd2l0aCAtLXJlYmFzaW5nIChmcm9tIGdpdC1yZWJhc2UtLWFtKSwgaXQncyB1cCB0bworIyB0aGUgY2FsbGVyIHRvIHRha2UgY2FyZSBvZiBob3VzZWtlZXBpbmcuCitpZiAhIHRlc3QgLWYgIiRkb3Rlc3QvcmViYXNpbmciCit0aGVuCisJcm0gLWZyICIkZG90ZXN0IgorCWdpdCBnYyAtLWF1dG8KK2ZpCmRpZmYgLS1naXQgYS9naXQtYmlzZWN0LnNoIGIvZ2l0LWJpc2VjdC5zaAppbmRleCBkNzUxOGU5Li45ZjA2NGI2IDEwMDc1NQotLS0gYS9naXQtYmlzZWN0LnNoCisrKyBiL2dpdC1iaXNlY3Quc2gKQEAgLTMyMCw4ICszMjAsOCBAQAogCWVsaWYgdGVzdCAkcmVzIC1lcSAyCiAJdGhlbgogCQllY2hvICIjIG9ubHkgc2tpcHBlZCBjb21taXRzIGxlZnQgdG8gdGVzdCIgPj4iJEdJVF9ESVIvQklTRUNUX0xPRyIKLQkJZ29vZF9yZXZzPSQoZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iLS1ub3QgJShvYmplY3RuYW1lKSIgInJlZnMvYmlzZWN0L2dvb2QtKiIpCi0JCWZvciBza2lwcGVkIGluICQoZ2l0IHJldi1saXN0IHJlZnMvYmlzZWN0L2JhZCAkZ29vZF9yZXZzKQorCQlnb29kX3JldnM9JChnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKG9iamVjdG5hbWUpIiAicmVmcy9iaXNlY3QvZ29vZC0qIikKKwkJZm9yIHNraXBwZWQgaW4gJChnaXQgcmV2LWxpc3QgcmVmcy9iaXNlY3QvYmFkIC0tbm90ICRnb29kX3JldnMpCiAJCWRvCiAJCQlza2lwcGVkX2NvbW1pdD0kKGdpdCBzaG93LWJyYW5jaCAkc2tpcHBlZCkKIAkJCWVjaG8gIiMgcG9zc2libGUgZmlyc3QgYmFkIGNvbW1pdDogJHNraXBwZWRfY29tbWl0IiA+PiIkR0lUX0RJUi9CSVNFQ1RfTE9HIgpkaWZmIC0tZ2l0IGEvZ2l0LWNvbXBhdC11dGlsLmggYi9naXQtY29tcGF0LXV0aWwuaAppbmRleCBlOTU1YmI1Li5jYzRiYTRkIDEwMDY0NAotLS0gYS9naXQtY29tcGF0LXV0aWwuaAorKysgYi9naXQtY29tcGF0LXV0aWwuaApAQCAtODUsMTMgKzg1LDE0IEBACiAjZGVmaW5lIF9ORVRCU0RfU09VUkNFIDEKICNkZWZpbmUgX1NHSV9TT1VSQ0UgMQogCi0jaWZkZWYgV0lOMzIgLyogQm90aCBNaW5HVyBhbmQgTVNWQyAqLworI2lmIGRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pIC8qIEJvdGggTWluR1cgYW5kIE1TVkMgKi8KICMgaWYgZGVmaW5lZCAoX01TQ19WRVIpCiAjICBkZWZpbmUgX1dJTjMyX1dJTk5UIDB4MDUwMgogIyBlbmRpZgogI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOICAvKiBzdG9wcyB3aW5kb3dzLmggaW5jbHVkaW5nIHdpbnNvY2suaCAqLwogI2luY2x1ZGUgPHdpbnNvY2syLmg+CiAjaW5jbHVkZSA8d2luZG93cy5oPgorI2RlZmluZSBHSVRfV0lORE9XU19OQVRJVkUKICNlbmRpZgogCiAjaW5jbHVkZSA8dW5pc3RkLmg+CkBAIC0xMjcsNiArMTI4LDkgQEAKICNlbHNlCiAjaW5jbHVkZSA8cG9sbC5oPgogI2VuZGlmCisKK2V4dGVybiBpbnQgZ2V0X3N0X21vZGVfYml0cyhjb25zdCBjaGFyICpwYXRoLCBpbnQgKm1vZGUpOworCiAjaWYgZGVmaW5lZChfX01JTkdXMzJfXykKIC8qIHB1bGwgaW4gV2luZG93cyBjb21wYXRpYmlsaXR5IHN0dWZmICovCiAjaW5jbHVkZSAiY29tcGF0L21pbmd3LmgiCkBAIC0xNjMsNyArMTY3LDYgQEAKIHR5cGVkZWYgbG9uZyBpbnRwdHJfdDsKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1aW50cHRyX3Q7CiAjZW5kaWYKLWludCBnZXRfc3RfbW9kZV9iaXRzKGNvbnN0IGNoYXIgKnBhdGgsIGludCAqbW9kZSk7CiAjaWYgZGVmaW5lZChfX0NZR1dJTl9fKQogI3VuZGVmIF9YT1BFTl9TT1VSQ0UKICNpbmNsdWRlIDxncnAuaD4KQEAgLTE4NSw2ICsxODgsMTEgQEAKICNkZWZpbmUgcHJvYmVfdXRmOF9wYXRobmFtZV9jb21wb3NpdGlvbihhLGIpCiAjZW5kaWYKIAorI2lmZGVmIE5FRURTX0NMSVBQRURfV1JJVEUKK3NzaXplX3QgY2xpcHBlZF93cml0ZShpbnQgZmlsZGVzLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBuYnl0ZSk7CisjZGVmaW5lIHdyaXRlKHgseSx6KSBjbGlwcGVkX3dyaXRlKCh4KSwoeSksKHopKQorI2VuZGlmCisKICNpZmRlZiBNS0RJUl9XT19UUkFJTElOR19TTEFTSAogI2RlZmluZSBta2RpcihhLGIpIGNvbXBhdF9ta2Rpcl93b190cmFpbGluZ19zbGFzaCgoYSksKGIpKQogZXh0ZXJuIGludCBjb21wYXRfbWtkaXJfd29fdHJhaWxpbmdfc2xhc2goY29uc3QgY2hhciosIG1vZGVfdCk7CkBAIC0yOTUsNiArMzAzLDEzIEBACiAjZW5kaWYKICNlbmRpZgogCisvKiBUaGUgc2VudGluZWwgYXR0cmlidXRlIGlzIHZhbGlkIGZyb20gZ2NjIHZlcnNpb24gNC4wICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID49IDQpCisjZGVmaW5lIExBU1RfQVJHX01VU1RfQkVfTlVMTCBfX2F0dHJpYnV0ZV9fKChzZW50aW5lbCkpCisjZWxzZQorI2RlZmluZSBMQVNUX0FSR19NVVNUX0JFX05VTEwKKyNlbmRpZgorCiAjaW5jbHVkZSAiY29tcGF0L2Jzd2FwLmgiCiAKICNpZmRlZiBVU0VfV0lMRE1BVENICkBAIC02OTIsOCArNzA3LDkgQEAKICAqIENhbGwgYWNjZXNzKDIpLCBidXQgd2FybiBmb3IgYW55IGVycm9yIGV4Y2VwdCAibWlzc2luZyBmaWxlIgogICogKEVOT0VOVCBvciBFTk9URElSKS4KICAqLwotaW50IGFjY2Vzc19vcl93YXJuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtb2RlKTsKLWludCBhY2Nlc3Nfb3JfZGllKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtb2RlKTsKKyNkZWZpbmUgQUNDRVNTX0VBQ0NFU19PSyAoMVUgPDwgMCkKK2ludCBhY2Nlc3Nfb3Jfd2Fybihjb25zdCBjaGFyICpwYXRoLCBpbnQgbW9kZSwgdW5zaWduZWQgZmxhZyk7CitpbnQgYWNjZXNzX29yX2RpZShjb25zdCBjaGFyICpwYXRoLCBpbnQgbW9kZSwgdW5zaWduZWQgZmxhZyk7CiAKIC8qIFdhcm4gb24gYW4gaW5hY2Nlc3NpYmxlIGZpbGUgdGhhdCBvdWdodCB0byBiZSBhY2Nlc3NpYmxlICovCiB2b2lkIHdhcm5fb25faW5hY2Nlc3NpYmxlKGNvbnN0IGNoYXIgKnBhdGgpOwpkaWZmIC0tZ2l0IGEvZ2l0LWRpZmZ0b29sLnBlcmwgYi9naXQtZGlmZnRvb2wucGVybAppbmRleCA4YTc1MjA1Li5lNTdkM2QxMiAxMDA3NTUKLS0tIGEvZ2l0LWRpZmZ0b29sLnBlcmwKKysrIGIvZ2l0LWRpZmZ0b29sLnBlcmwKQEAgLTg1LDEzICs4NSw5IEBACiAKIHN1YiB1c2Vfd3RfZmlsZQogewotCW15ICgkcmVwbywgJHdvcmtkaXIsICRmaWxlLCAkc2hhMSwgJHN5bWxpbmtzKSA9IEBfOworCW15ICgkcmVwbywgJHdvcmtkaXIsICRmaWxlLCAkc2hhMSkgPSBAXzsKIAlteSAkbnVsbF9zaGExID0gJzAnIHggNDA7CiAKLQlpZiAoJHNoYTEgbmUgJG51bGxfc2hhMSBhbmQgbm90ICRzeW1saW5rcykgewotCQlyZXR1cm4gMDsKLQl9Ci0KIAlpZiAoISAtZSAiJHdvcmtkaXIvJGZpbGUiKSB7CiAJCSMgSWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCBpbiB0aGUgd29ya2luZyB0cmVlLCB3ZSBjYW5ub3QKIAkJIyB1c2UgaXQuCkBAIC0yMTMsOCArMjA5LDcgQEAKIAogCQlpZiAoJHJtb2RlIG5lICRudWxsX21vZGUpIHsKIAkJCW15ICgkdXNlLCAkd3Rfc2hhMSkgPSB1c2Vfd3RfZmlsZSgkcmVwbywgJHdvcmtkaXIsCi0JCQkJCQkJICAkZHN0X3BhdGgsICRyc2hhMSwKLQkJCQkJCQkgICRzeW1saW5rcyk7CisJCQkJCQkJICAkZHN0X3BhdGgsICRyc2hhMSk7CiAJCQlpZiAoJHVzZSkgewogCQkJCXB1c2ggQHdvcmtpbmdfdHJlZSwgJGRzdF9wYXRoOwogCQkJCSR3dGluZGV4IC49ICIkcm1vZGUgJHd0X3NoYTFcdCRkc3RfcGF0aFwwIjsKZGlmZiAtLWdpdCBhL2dpdC1ndWkvR0lULVZFUlNJT04tR0VOIGIvZ2l0LWd1aS9HSVQtVkVSU0lPTi1HRU4KaW5kZXggNDliNjJlYS4uMGExZjhkNCAxMDA3NTUKLS0tIGEvZ2l0LWd1aS9HSVQtVkVSU0lPTi1HRU4KKysrIGIvZ2l0LWd1aS9HSVQtVkVSU0lPTi1HRU4KQEAgLTEsNyArMSw3IEBACiAjIS9iaW4vc2gKIAogR1ZGPUdJVC1WRVJTSU9OLUZJTEUKLURFRl9WRVI9MC4xNy5HSVRHVUkKK0RFRl9WRVI9MC4xOC5HSVRHVUkKIAogTEY9JwogJwpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9NYWtlZmlsZSBiL2dpdC1ndWkvTWFrZWZpbGUKaW5kZXggZTIyYmE1Yy4uZTljMmJjMyAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9NYWtlZmlsZQorKysgYi9naXQtZ3VpL01ha2VmaWxlCkBAIC0yNTQsNyArMjU0LDcgQEAKIAkgIGF1dG9fbWtpbmRleCBsaWIgJyoudGNsJyBcCiAJfCAkKFRDTF9QQVRIKSAkKFFVSUVUXzJERVZOVUxMKTsgdGhlbiA6IG9rOyBcCiAJZWxzZSBcCi0JIGVjaG8gMT4mMiAiICAgICogJChUQ0xfUEFUSCkgZmFpbGVkOyB1c2luZyB1bm9wdGltaXplZCBsb2FkaW5nIjsgXAorCSBlY2hvID4mMiAiICAgICogJChUQ0xfUEFUSCkgZmFpbGVkOyB1c2luZyB1bm9wdGltaXplZCBsb2FkaW5nIjsgXAogCSBybSAtZiAkQCA7IFwKIAkgZWNobyAnIyBBdXRvZ2VuZXJhdGVkIGJ5IGdpdC1ndWkgTWFrZWZpbGUnID4kQCAmJiBcCiAJIGVjaG8gPj4kQCAmJiBcCkBAIC0yNzQsOCArMjc0LDggQEAKIEdJVC1HVUktVkFSUzogRk9SQ0UKIAlAVkFSUz0nJChUUkFDS19WQVJTKSc7IFwKIAlpZiB0ZXN0IHgiJCRWQVJTIiAhPSB4ImBjYXQgJEAgMj4vZGV2L251bGxgIiA7IHRoZW4gXAotCQllY2hvIDE+JjIgIiAgICAqIG5ldyBsb2NhdGlvbnMgb3IgVGNsL1RrIGludGVycHJldGVyIjsgXAotCQllY2hvIDE+JEAgIiQkVkFSUyI7IFwKKwkJZWNobyA+JjIgIiAgICAqIG5ldyBsb2NhdGlvbnMgb3IgVGNsL1RrIGludGVycHJldGVyIjsgXAorCQllY2hvID4kQCAiJCRWQVJTIjsgXAogCWZpCiAKIGlmZGVmIEdJVEdVSV9NQUNPU1hBUFAKZGlmZiAtLWdpdCBhL2dpdC1ndWkvZ2l0LWd1aS5zaCBiL2dpdC1ndWkvZ2l0LWd1aS5zaAppbmRleCA4OWY2MzZmLi4xNTNmODVkIDEwMDc1NQotLS0gYS9naXQtZ3VpL2dpdC1ndWkuc2gKKysrIGIvZ2l0LWd1aS9naXQtZ3VpLnNoCkBAIC0xMzcsNiArMTM3LDIwIEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjCisjIyBPbiBNYWMsIGJyaW5nIHRoZSBjdXJyZW50IFdpc2ggcHJvY2VzcyB3aW5kb3cgdG8gZnJvbnQKKworaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxICJhcXVhIn0geworCWNhdGNoIHsKKwkJZXhlYyBvc2FzY3JpcHQgLWUgW2Zvcm1hdCB7CisJCQl0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIgorCQkJCXNldCBmcm9udG1vc3Qgb2YgcHJvY2Vzc2VzIHdob3NlIHVuaXggaWQgaXMgJWQgdG8gdHJ1ZQorCQkJZW5kIHRlbGwKKwkJfSBbcGlkXV0KKwl9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCiAjIyByZWFkIG9ubHkgZ2xvYmFscwogCiBzZXQgX2FwcG5hbWUge0dpdCBHdWl9CkBAIC0zMDAzLDE4ICszMDE3LDExIEBACiAJc2V0IGp1bXBfc3BlYyB7fQogCXNldCBpc19wYXRoIDAKIAlmb3JlYWNoIGEgJGFyZ3YgewotCQlpZiB7W2ZpbGUgZXhpc3RzICRhXX0gewotCQkJaWYgeyRwYXRoIG5lIHt9fSB1c2FnZQotCQkJc2V0IHBhdGggW25vcm1hbGl6ZV9yZWxwYXRoICRhXQotCQkJYnJlYWsKLQkJfSBlbHNlaWYge1tmaWxlIGV4aXN0cyAkX3ByZWZpeCRhXX0gewotCQkJaWYgeyRwYXRoIG5lIHt9fSB1c2FnZQotCQkJc2V0IHBhdGggW25vcm1hbGl6ZV9yZWxwYXRoICRfcHJlZml4JGFdCi0JCQlicmVhawotCQl9CisJCXNldCBwIFtmaWxlIGpvaW4gJF9wcmVmaXggJGFdCiAKLQkJaWYgeyRpc19wYXRofSB7CisJCWlmIHskaXNfcGF0aCB8fCBbZmlsZSBleGlzdHMgJHBdfSB7CiAJCQlpZiB7JHBhdGggbmUge319IHVzYWdlCisJCQlzZXQgcGF0aCBbbm9ybWFsaXplX3JlbHBhdGggJHBdCiAJCQlicmVhawogCQl9IGVsc2VpZiB7JGEgZXEgey0tfX0gewogCQkJaWYgeyRwYXRoIG5lIHt9fSB7CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2wgYi9naXQtZ3VpL2xpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2wKaW5kZXggNjU3ZjdkNS4uZWU1ODk4MSAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9saWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsCisrKyBiL2dpdC1ndWkvbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbApAQCAtMjg2LDcgKzI4Niw5IEBACiAJZGVzdHJveSAkd19ib2R5CiAJaWYgeyFbd2luZm8gZXhpc3RzICR3X25leHRdfSB7CiAJCSR7TlN9OjpidXR0b24gJHdfbmV4dCAtZGVmYXVsdCBhY3RpdmUKLQkJcGFjayAkd19uZXh0IC1zaWRlIHJpZ2h0IC1wYWR4IDUgLWJlZm9yZSAkd19xdWl0CisJCXNldCBwb3MgLWJlZm9yZQorCQlpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEgIndpbjMyIn0geyBzZXQgcG9zIC1hZnRlciB9CisJCXBhY2sgJHdfbmV4dCAtc2lkZSByaWdodCAtcGFkeCA1ICRwb3MgJHdfcXVpdAogCX0KIAlfZG9fJGFjdGlvbiAkdGhpcwogfQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvZGlmZi50Y2wgYi9naXQtZ3VpL2xpYi9kaWZmLnRjbAppbmRleCBlYzQ0MDU1Li4zMGQ5YTc5IDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9kaWZmLnRjbAorKysgYi9naXQtZ3VpL2xpYi9kaWZmLnRjbApAQCAtNzY0LDggKzc2NCwxNSBAQAogCQkJCSMgY29udGV4dCBsaW5lCiAJCQkJc2V0IGxuIFskdWlfZGlmZiBnZXQgJGlfbCAkbmV4dF9sXQogCQkJCXNldCBwYXRjaCAiJHBhdGNoJHByZV9jb250ZXh0JGxuIgotCQkJCXNldCBuIFtleHByICRuKzFdCi0JCQkJc2V0IG0gW2V4cHIgJG0rMV0KKwkJCQkjIFNraXAgdGhlICJcIE5vIG5ld2xpbmUgYXQgZW5kIG9mCisJCQkJIyBmaWxlIi4gRGVwZW5kaW5nIG9uIHRoZSBsb2NhbGUgc2V0dGluZworCQkJCSMgd2UgZG9uJ3Qga25vdyB3aGF0IHRoaXMgbGluZSBsb29rcworCQkJCSMgbGlrZSBleGFjdGx5LiBUaGUgb25seSB0aGluZyB3ZSBkbworCQkJCSMga25vdyBpcyB0aGF0IGl0IHN0YXJ0cyB3aXRoICJcICIKKwkJCQlpZiB7IVtzdHJpbmcgbWF0Y2gge1xcICp9ICRsbl19IHsKKwkJCQkJc2V0IG4gW2V4cHIgJG4rMV0KKwkJCQkJc2V0IG0gW2V4cHIgJG0rMV0KKwkJCQl9CiAJCQkJc2V0IHByZV9jb250ZXh0IHt9CiAJCQl9IGVsc2VpZiB7JGMxIGVxICR0b19jb250ZXh0fSB7CiAJCQkJIyB0dXJuIGNoYW5nZSBsaW5lIGludG8gY29udGV4dCBsaW5lCmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9tZXJnZXRvb2wudGNsIGIvZ2l0LWd1aS9saWIvbWVyZ2V0b29sLnRjbAppbmRleCAzYzhlNzNiLi4xMjBiYzQwIDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9tZXJnZXRvb2wudGNsCisrKyBiL2dpdC1ndWkvbGliL21lcmdldG9vbC50Y2wKQEAgLTE4OSw5ICsxODksOSBAQAogCX0KIAliYzMgewogCQlpZiB7JGJhc2Vfc3RhZ2UgbmUge319IHsKLQkJCXNldCBjbWRsaW5lIFtsaXN0ICIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIgIiRCQVNFIiAtbWVyZ2VvdXRwdXQ9IiRNRVJHRUQiXQorCQkJc2V0IGNtZGxpbmUgW2xpc3QgIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiAiJEJBU0UiICItbWVyZ2VvdXRwdXQ9JE1FUkdFRCJdCiAJCX0gZWxzZSB7Ci0JCQlzZXQgY21kbGluZSBbbGlzdCAiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiIC1tZXJnZW91dHB1dD0iJE1FUkdFRCJdCisJCQlzZXQgY21kbGluZSBbbGlzdCAiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiICItbWVyZ2VvdXRwdXQ9JE1FUkdFRCJdCiAJCX0KIAl9CiAJZWNtZXJnZSB7CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9yZW1vdGUudGNsIGIvZ2l0LWd1aS9saWIvcmVtb3RlLnRjbAppbmRleCA1ZTRlN2Y0Li40ZTVjNzg0IDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9yZW1vdGUudGNsCisrKyBiL2dpdC1ndWkvbGliL3JlbW90ZS50Y2wKQEAgLTI0NSw3ICsyNDUsOCBAQAogCXNldCBwcnVuZV9tICRyZW1vdGVfbS5wcnVuZQogCWlmIHskaGF2ZV9yZW1vdGUgPiAxfSB7CiAJCW1ha2Vfc3VyZV9yZW1vdGVfc3VibWVudWVzX2V4aXN0ICRyZW1vdGVfbQotCQlpZiB7WyRmZXRjaF9tIGVudHJ5Y2dldCBlbmQgLWxhYmVsXSBuZSAiQWxsIn0geworCQlpZiB7WyRmZXRjaF9tIHR5cGUgZW5kXSBlcSAiY29tbWFuZCIgXAorCQkJJiYgWyRmZXRjaF9tIGVudHJ5Y2dldCBlbmQgLWxhYmVsXSBuZSAiQWxsIn0gewogCiAJCQkkZmV0Y2hfbSBpbnNlcnQgZW5kIHNlcGFyYXRvcgogCQkJJGZldGNoX20gaW5zZXJ0IGVuZCBjb21tYW5kIFwKQEAgLTI1OSw3ICsyNjAsOCBAQAogCQl9CiAJfSBlbHNlIHsKIAkJaWYge1t3aW5mbyBleGlzdHMgJGZldGNoX21dfSB7Ci0JCQlpZiB7WyRmZXRjaF9tIGVudHJ5Y2dldCBlbmQgLWxhYmVsXSBlcSAiQWxsIn0geworCQkJaWYge1skZmV0Y2hfbSB0eXBlIGVuZF0gZXEgImNvbW1hbmQiIFwKKwkJCQkmJiBbJGZldGNoX20gZW50cnljZ2V0IGVuZCAtbGFiZWxdIGVxICJBbGwifSB7CiAKIAkJCQlkZWxldGVfZnJvbV9tZW51ICRmZXRjaF9tIGVuZAogCQkJCWRlbGV0ZV9mcm9tX21lbnUgJGZldGNoX20gZW5kCmRpZmYgLS1naXQgYS9naXQtZ3VpL3BvL2ZyLnBvIGIvZ2l0LWd1aS9wby9mci5wbwppbmRleCA0MDQ0MWRiLi4wYWZmMTg2IDEwMDY0NAotLS0gYS9naXQtZ3VpL3BvL2ZyLnBvCisrKyBiL2dpdC1ndWkvcG8vZnIucG8KQEAgLTExMzksNyArMTEzOSw3IEBACiAKICM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTE0CiBtc2dpZCAiRnVsbCBDb3B5IChTbG93ZXIsIFJlZHVuZGFudCBCYWNrdXApIgotbXNnc3RyICJDb3B5IGNvbXBsw6h0ZSAocGx1cyBsZW50LCBzYXV2ZWdhcmRlIHJlZG9uZGFudGUpIgorbXNnc3RyICJDb3BpZSBjb21wbMOodGUgKHBsdXMgbGVudCwgc2F1dmVnYXJkZSByZWRvbmRhbnRlKSIKIAogIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MjAKIG1zZ2lkICJTaGFyZWQgKEZhc3Rlc3QsIE5vdCBSZWNvbW1lbmRlZCwgTm8gQmFja3VwKSIKZGlmZiAtLWdpdCBhL2dpdC1tZXJnZXRvb2wtLWxpYi5zaCBiL2dpdC1tZXJnZXRvb2wtLWxpYi5zaAppbmRleCBlMzM4YmU1Li42YTcyMTA2IDEwMDY0NAotLS0gYS9naXQtbWVyZ2V0b29sLS1saWIuc2gKKysrIGIvZ2l0LW1lcmdldG9vbC0tbGliLnNoCkBAIC0xMTQsNiArMTE0LDMzIEBACiAJdGVzdCAtbiAiJGNtZCIKIH0KIAorc2V0dXBfdXNlcl90b29sICgpIHsKKwltZXJnZV90b29sX2NtZD0kKGdldF9tZXJnZV90b29sX2NtZCAiJHRvb2wiKQorCXRlc3QgLW4gIiRtZXJnZV90b29sX2NtZCIgfHwgcmV0dXJuIDEKKworCWRpZmZfY21kICgpIHsKKwkJKCBldmFsICRtZXJnZV90b29sX2NtZCApCisJCXN0YXR1cz0kPworCQlyZXR1cm4gJHN0YXR1cworCX0KKworCW1lcmdlX2NtZCAoKSB7CisJCXRydXN0X2V4aXRfY29kZT0kKGdpdCBjb25maWcgLS1ib29sIFwKKwkJCSJtZXJnZXRvb2wuJDEudHJ1c3RFeGl0Q29kZSIgfHwgZWNobyBmYWxzZSkKKwkJaWYgdGVzdCAiJHRydXN0X2V4aXRfY29kZSIgPSAiZmFsc2UiCisJCXRoZW4KKwkJCXRvdWNoICIkQkFDS1VQIgorCQkJKCBldmFsICRtZXJnZV90b29sX2NtZCApCisJCQlzdGF0dXM9JD8KKwkJCWNoZWNrX3VuY2hhbmdlZAorCQllbHNlCisJCQkoIGV2YWwgJG1lcmdlX3Rvb2xfY21kICkKKwkJCXN0YXR1cz0kPworCQlmaQorCQlyZXR1cm4gJHN0YXR1cworCX0KK30KKwogc2V0dXBfdG9vbCAoKSB7CiAJdG9vbD0iJDEiCiAKQEAgLTE0MiwxNSArMTY5LDE1IEBACiAKIAlpZiAhIHRlc3QgLWYgIiRNRVJHRV9UT09MU19ESVIvJHRvb2wiCiAJdGhlbgotCQkjIFVzZSBhIHNwZWNpYWwgcmV0dXJuIGNvZGUgZm9yIHRoaXMgY2FzZSBzaW5jZSB3ZSB3YW50IHRvCi0JCSMgc291cmNlICJkZWZhdWx0cyIgZXZlbiB3aGVuIGFuIGV4cGxpY2l0IHRvb2wgcGF0aCBpcwotCQkjIGNvbmZpZ3VyZWQgc2luY2UgdGhlIHVzZXIgY2FuIHVzZSB0aGF0IHRvIG92ZXJyaWRlIHRoZQotCQkjIGRlZmF1bHQgcGF0aCBpbiB0aGUgc2NyaXB0bGV0LgotCQlyZXR1cm4gMgorCQlzZXR1cF91c2VyX3Rvb2wKKwkJcmV0dXJuICQ/CiAJZmkKIAogCSMgTG9hZCB0aGUgcmVkZWZpbmVkIGZ1bmN0aW9ucwogCS4gIiRNRVJHRV9UT09MU19ESVIvJHRvb2wiCisJIyBOb3cgbGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGNvbW1hbmQgZm9yIHRoZSB0b29sLiAgSWYKKwkjIHRoZXkgaGF2ZSBub3QgZG9uZSBzbyB0aGVuIHRoaXMgd2lsbCByZXR1cm4gMSB3aGljaCB3ZSBpZ25vcmUuCisJc2V0dXBfdXNlcl90b29sCiAKIAlpZiBtZXJnZV9tb2RlICYmICEgY2FuX21lcmdlCiAJdGhlbgpAQCAtMTg3LDIwICsyMTQsNyBAQAogCXN0YXR1cz0wCiAKIAkjIEJyaW5nIHRvb2wtc3BlY2lmaWMgZnVuY3Rpb25zIGludG8gc2NvcGUKLQlzZXR1cF90b29sICIkMSIKLQlleGl0Y29kZT0kPwotCWNhc2UgJGV4aXRjb2RlIGluCi0JMCkKLQkJOgotCQk7OwotCTIpCi0JCSMgVGhlIGNvbmZpZ3VyZWQgdG9vbCBpcyBub3QgYSBidWlsdC1pbiB0b29sLgotCQl0ZXN0IC1uICIkbWVyZ2VfdG9vbF9wYXRoIiB8fCByZXR1cm4gMQotCQk7OwotCSopCi0JCXJldHVybiAkZXhpdGNvZGUKLQkJOzsKLQllc2FjCisJc2V0dXBfdG9vbCAiJDEiIHx8IHJldHVybiAxCiAKIAlpZiBtZXJnZV9tb2RlCiAJdGhlbgpAQCAtMjEzLDM4ICsyMjcsMTIgQEAKIAogIyBSdW4gYSBlaXRoZXIgYSBjb25maWd1cmVkIG9yIGJ1aWx0LWluIGRpZmYgdG9vbAogcnVuX2RpZmZfY21kICgpIHsKLQltZXJnZV90b29sX2NtZD0kKGdldF9tZXJnZV90b29sX2NtZCAiJDEiKQotCWlmIHRlc3QgLW4gIiRtZXJnZV90b29sX2NtZCIKLQl0aGVuCi0JCSggZXZhbCAkbWVyZ2VfdG9vbF9jbWQgKQotCQlzdGF0dXM9JD8KLQkJcmV0dXJuICRzdGF0dXMKLQllbHNlCi0JCWRpZmZfY21kICIkMSIKLQlmaQorCWRpZmZfY21kICIkMSIKIH0KIAogIyBSdW4gYSBlaXRoZXIgYSBjb25maWd1cmVkIG9yIGJ1aWx0LWluIG1lcmdlIHRvb2wKIHJ1bl9tZXJnZV9jbWQgKCkgewotCW1lcmdlX3Rvb2xfY21kPSQoZ2V0X21lcmdlX3Rvb2xfY21kICIkMSIpCi0JaWYgdGVzdCAtbiAiJG1lcmdlX3Rvb2xfY21kIgotCXRoZW4KLQkJdHJ1c3RfZXhpdF9jb2RlPSQoZ2l0IGNvbmZpZyAtLWJvb2wgXAotCQkJIm1lcmdldG9vbC4kMS50cnVzdEV4aXRDb2RlIiB8fCBlY2hvIGZhbHNlKQotCQlpZiB0ZXN0ICIkdHJ1c3RfZXhpdF9jb2RlIiA9ICJmYWxzZSIKLQkJdGhlbgotCQkJdG91Y2ggIiRCQUNLVVAiCi0JCQkoIGV2YWwgJG1lcmdlX3Rvb2xfY21kICkKLQkJCXN0YXR1cz0kPwotCQkJY2hlY2tfdW5jaGFuZ2VkCi0JCWVsc2UKLQkJCSggZXZhbCAkbWVyZ2VfdG9vbF9jbWQgKQotCQkJc3RhdHVzPSQ/Ci0JCWZpCi0JCXJldHVybiAkc3RhdHVzCi0JZWxzZQotCQltZXJnZV9jbWQgIiQxIgotCWZpCisJbWVyZ2VfY21kICIkMSIKIH0KIAogbGlzdF9tZXJnZV90b29sX2NhbmRpZGF0ZXMgKCkgewpkaWZmIC0tZ2l0IGEvZ2l0LXA0LnB5IGIvZ2l0LXA0LnB5CmluZGV4IDkxMWJiY2UuLjg4ZmNmMjMgMTAwNzU1Ci0tLSBhL2dpdC1wNC5weQorKysgYi9naXQtcDQucHkKQEAgLTMxNjgsNyArMzE2OCw3IEBACiAgICAgICAgIGlmIG9zLnN5c3RlbSgiZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2giKSAhPSAwOgogICAgICAgICAgICAgZGllKCJTb21lIGZpbGVzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgYXJlIG1vZGlmaWVkIGFuZCBkaWZmZXJlbnQgdGhhbiB3aGF0IGlzIGluIHlvdXIgaW5kZXguIFlvdSBjYW4gdXNlIGdpdCB1cGRhdGUtaW5kZXggPGZpbGVuYW1lPiB0byBicmluZyB0aGUgaW5kZXggdXAtdG8tZGF0ZSBvciBzdGFzaCBhd2F5IGFsbCB5b3VyIGNoYW5nZXMgd2l0aCBnaXQgc3Rhc2guIik7CiAgICAgICAgIGlmIGxlbihyZWFkX3BpcGUoImdpdCBkaWZmLWluZGV4IEhFQUQgLS0iKSkgPiAwOgotICAgICAgICAgICAgZGllKCJZb3UgaGF2ZSB1bmNvbW1pdGVkIGNoYW5nZXMuIFBsZWFzZSBjb21taXQgdGhlbSBiZWZvcmUgcmViYXNpbmcgb3Igc3Rhc2ggdGhlbSBhd2F5IHdpdGggZ2l0IHN0YXNoLiIpOworICAgICAgICAgICAgZGllKCJZb3UgaGF2ZSB1bmNvbW1pdHRlZCBjaGFuZ2VzLiBQbGVhc2UgY29tbWl0IHRoZW0gYmVmb3JlIHJlYmFzaW5nIG9yIHN0YXNoIHRoZW0gYXdheSB3aXRoIGdpdCBzdGFzaC4iKTsKIAogICAgICAgICBbdXBzdHJlYW0sIHNldHRpbmdzXSA9IGZpbmRVcHN0cmVhbUJyYW5jaFBvaW50KCkKICAgICAgICAgaWYgbGVuKHVwc3RyZWFtKSA9PSAwOgpkaWZmIC0tZ2l0IGEvZ2l0LXB1bGwuc2ggYi9naXQtcHVsbC5zaAppbmRleCA2MzhhYWJiLi5mMGRmNDFjIDEwMDc1NQotLS0gYS9naXQtcHVsbC5zaAorKysgYi9naXQtcHVsbC5zaApAQCAtNSw3ICs1LDcgQEAKICMgRmV0Y2ggb25lIG9yIG1vcmUgcmVtb3RlIHJlZnMgYW5kIG1lcmdlIGl0L3RoZW0gaW50byB0aGUgY3VycmVudCBIRUFELgogCiBVU0FHRT0nWy1uIHwgLS1uby1zdGF0XSBbLS1bbm8tXWNvbW1pdF0gWy0tW25vLV1zcXVhc2hdIFstLVtuby1dZmZdIFstcyBzdHJhdGVneV0uLi4gWzxmZXRjaC1vcHRpb25zPl0gPHJlcG8+IDxoZWFkPi4uLicKLUxPTkdfVVNBR0U9J0ZldGNoIG9uZSBvciBtb3JlIHJlbW90ZSByZWZzIGFuZCBtZXJnZSBpdC90aGVtIGludG8gdGhlIGN1cnJlbnQgSEVBRC4nCitMT05HX1VTQUdFPSdGZXRjaCBvbmUgb3IgbW9yZSByZW1vdGUgcmVmcyBhbmQgaW50ZWdyYXRlIGl0L3RoZW0gd2l0aCB0aGUgY3VycmVudCBIRUFELicKIFNVQkRJUkVDVE9SWV9PSz1ZZXMKIE9QVElPTlNfU1BFQz0KIC4gZ2l0LXNoLXNldHVwCkBAIC0yNjYsMTAgKzI2NiwxNyBAQAogCTs7CiBlc2FjCiAKKyMgUHVsbGluZyBpbnRvIHVuYm9ybiBicmFuY2g6IGEgc2hvcnRoYW5kIGZvciBicmFuY2hpbmcgb2ZmCisjIEZFVENIX0hFQUQsIGZvciBsYXp5IHR5cGVycy4KIGlmIHRlc3QgLXogIiRvcmlnX2hlYWQiCiB0aGVuCi0JZ2l0IHVwZGF0ZS1yZWYgLW0gImluaXRpYWwgcHVsbCIgSEVBRCAkbWVyZ2VfaGVhZCAiJGN1cnJfaGVhZCIgJiYKLQlnaXQgcmVhZC10cmVlIC1tIC11IEhFQUQgfHwgZXhpdCAxCisJIyBUd28td2F5IG1lcmdlOiB3ZSBjbGFpbSB0aGUgaW5kZXggaXMgYmFzZWQgb24gYW4gZW1wdHkgdHJlZSwKKwkjIGFuZCB0cnkgdG8gZmFzdC1mb3J3YXJkIHRvIEhFQUQuICBUaGlzIGVuc3VyZXMgd2Ugd2lsbCBub3QKKwkjIGxvc2UgaW5kZXgvd29ya3RyZWUgY2hhbmdlcyB0aGF0IHRoZSB1c2VyIGFscmVhZHkgbWFkZSBvbgorCSMgdGhlIHVuYm9ybiBicmFuY2guCisJZW1wdHlfdHJlZT00YjgyNWRjNjQyY2I2ZWI5YTA2MGU1NGJmOGQ2OTI4OGZiZWU0OTA0CisJZ2l0IHJlYWQtdHJlZSAtbSAtdSAkZW1wdHlfdHJlZSAkbWVyZ2VfaGVhZCAmJgorCWdpdCB1cGRhdGUtcmVmIC1tICJpbml0aWFsIHB1bGwiIEhFQUQgJG1lcmdlX2hlYWQgIiRjdXJyX2hlYWQiCiAJZXhpdAogZmkKIApkaWZmIC0tZ2l0IGEvZ2l0LXJlYmFzZS0tYW0uc2ggYi9naXQtcmViYXNlLS1hbS5zaAppbmRleCBmODQ4NTRmLi4zNGUzMTAyIDEwMDY0NAotLS0gYS9naXQtcmViYXNlLS1hbS5zaAorKysgYi9naXQtcmViYXNlLS1hbS5zaApAQCAtNywxMiArNywxMiBAQAogY29udGludWUpCiAJZ2l0IGFtIC0tcmVzb2x2ZWQgLS1yZXNvbHZlbXNnPSIkcmVzb2x2ZW1zZyIgJiYKIAltb3ZlX3RvX29yaWdpbmFsX2JyYW5jaAotCWV4aXQKKwlyZXR1cm4KIAk7Owogc2tpcCkKIAlnaXQgYW0gLS1za2lwIC0tcmVzb2x2ZW1zZz0iJHJlc29sdmVtc2ciICYmCiAJbW92ZV90b19vcmlnaW5hbF9icmFuY2gKLQlleGl0CisJcmV0dXJuCiAJOzsKIGVzYWMKIApAQCAtNTYsNyArNTYsNyBAQAogCiAJCUFzIGEgcmVzdWx0LCBnaXQgY2Fubm90IHJlYmFzZSB0aGVtLgogCQlFT0YKLQkJZXhpdCAkPworCQlyZXR1cm4gJD8KIAlmaQogCiAJZ2l0IGFtICRnaXRfYW1fb3B0IC0tcmViYXNpbmcgLS1yZXNvbHZlbXNnPSIkcmVzb2x2ZW1zZyIgPCIkR0lUX0RJUi9yZWJhc2VkLXBhdGNoZXMiCkBAIC02OCw3ICs2OCw3IEBACiBpZiB0ZXN0IDAgIT0gJHJldAogdGhlbgogCXRlc3QgLWQgIiRzdGF0ZV9kaXIiICYmIHdyaXRlX2Jhc2ljX3N0YXRlCi0JZXhpdCAkcmV0CisJcmV0dXJuICRyZXQKIGZpCiAKIG1vdmVfdG9fb3JpZ2luYWxfYnJhbmNoCmRpZmYgLS1naXQgYS9naXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaCBiL2dpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoCmluZGV4IDU4MjJiMmMuLjgzZDZkNDYgMTAwNjQ0Ci0tLSBhL2dpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoCisrKyBiL2dpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoCkBAIC04MCw2ICs4MCwxOCBAQAogcmV3cml0dGVuX2xpc3Q9IiRzdGF0ZV9kaXIiL3Jld3JpdHRlbi1saXN0CiByZXdyaXR0ZW5fcGVuZGluZz0iJHN0YXRlX2RpciIvcmV3cml0dGVuLXBlbmRpbmcKIAorc3RyYXRlZ3lfYXJncz0KK2lmIHRlc3QgLW4gIiRkb19tZXJnZSIKK3RoZW4KKwlzdHJhdGVneV9hcmdzPSR7c3RyYXRlZ3k6Ky0tc3RyYXRlZ3k9JHN0cmF0ZWd5fQorCWV2YWwgJworCQlmb3Igc3RyYXRlZ3lfb3B0IGluICciJHN0cmF0ZWd5X29wdHMiJworCQlkbworCQkJc3RyYXRlZ3lfYXJncz0iJHN0cmF0ZWd5X2FyZ3MgLVgkKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJHtzdHJhdGVneV9vcHQjLS19IikiCisJCWRvbmUKKwknCitmaQorCiBHSVRfQ0hFUlJZX1BJQ0tfSEVMUD0iJHJlc29sdmVtc2ciCiBleHBvcnQgR0lUX0NIRVJSWV9QSUNLX0hFTFAKIApAQCAtMjM5LDcgKzI1MSw3IEBACiAKIAl0ZXN0IC1kICIkcmV3cml0dGVuIiAmJgogCQlwaWNrX29uZV9wcmVzZXJ2aW5nX21lcmdlcyAiJEAiICYmIHJldHVybgotCW91dHB1dCBnaXQgY2hlcnJ5LXBpY2sgJGVtcHR5X2FyZ3MgJGZmICIkQCIKKwlvdXRwdXQgZXZhbCBnaXQgY2hlcnJ5LXBpY2sgIiRzdHJhdGVneV9hcmdzIiAkZW1wdHlfYXJncyAkZmYgIiRAIgogfQogCiBwaWNrX29uZV9wcmVzZXJ2aW5nX21lcmdlcyAoKSB7CkBAIC0zNDAsOSArMzUyLDggQEAKIAkJCW1zZ19jb250ZW50PSIkKGNvbW1pdF9tZXNzYWdlICRzaGExKSIKIAkJCSMgTm8gcG9pbnQgaW4gbWVyZ2luZyB0aGUgZmlyc3QgcGFyZW50LCB0aGF0J3MgSEVBRAogCQkJbmV3X3BhcmVudHM9JHtuZXdfcGFyZW50cyMgJGZpcnN0X3BhcmVudH0KLQkJCWlmICEgZG9fd2l0aF9hdXRob3Igb3V0cHV0IFwKLQkJCQlnaXQgbWVyZ2UgLS1uby1mZiAke3N0cmF0ZWd5OistcyAkc3RyYXRlZ3l9IC1tIFwKLQkJCQkJIiRtc2dfY29udGVudCIgJG5ld19wYXJlbnRzCisJCQlpZiAhIGRvX3dpdGhfYXV0aG9yIG91dHB1dCBldmFsIFwKKwkJCSdnaXQgbWVyZ2UgLS1uby1mZiAkc3RyYXRlZ3lfYXJncyAtbSAiJG1zZ19jb250ZW50IiAkbmV3X3BhcmVudHMnCiAJCQl0aGVuCiAJCQkJcHJpbnRmICIlc1xuIiAiJG1zZ19jb250ZW50IiA+ICIkR0lUX0RJUiIvTUVSR0VfTVNHCiAJCQkJZGllX3dpdGhfcGF0Y2ggJHNoYTEgIkVycm9yIHJlZG9pbmcgbWVyZ2UgJHNoYTEiCkBAIC0zNTAsNyArMzYxLDcgQEAKIAkJCWVjaG8gIiRzaGExICQoZ2l0IHJldi1wYXJzZSBIRUFEXjApIiA+PiAiJHJld3JpdHRlbl9saXN0IgogCQkJOzsKIAkJKikKLQkJCW91dHB1dCBnaXQgY2hlcnJ5LXBpY2sgIiRAIiB8fAorCQkJb3V0cHV0IGV2YWwgZ2l0IGNoZXJyeS1waWNrICIkc3RyYXRlZ3lfYXJncyIgIiRAIiB8fAogCQkJCWRpZV93aXRoX3BhdGNoICRzaGExICJDb3VsZCBub3QgcGljayAkc2hhMSIKIAkJCTs7CiAJCWVzYWMKQEAgLTYyOCwxNyArNjM5LDE2IEBACiAJCSIkR0lUX0RJUiIvaG9va3MvcG9zdC1yZXdyaXRlIHJlYmFzZSA8ICIkcmV3cml0dGVuX2xpc3QiCiAJCXRydWUgIyB3ZSBkb24ndCBjYXJlIGlmIHRoaXMgaG9vayBmYWlsZWQKIAlmaSAmJgotCXJtIC1yZiAiJHN0YXRlX2RpciIgJiYKLQlnaXQgZ2MgLS1hdXRvICYmCiAJd2FybiAiU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgJGhlYWRfbmFtZS4iCiAKLQlleGl0CisJcmV0dXJuIDEgIyBub3QgZmFpbHVyZTsganVzdCB0byBicmVhayB0aGUgZG9fcmVzdCBsb29wCiB9CiAKKyMgY2FuIG9ubHkgcmV0dXJuIDAsIHdoZW4gdGhlIGluZmluaXRlIGxvb3AgYnJlYWtzCiBkb19yZXN0ICgpIHsKIAl3aGlsZSA6CiAJZG8KLQkJZG9fbmV4dAorCQlkb19uZXh0IHx8IGJyZWFrCiAJZG9uZQogfQogCkBAIC02OTAsOCArNzAwLDIyIEBACiAJCWNhc2UgIiRtZXNzYWdlIiBpbgogCQkic3F1YXNoISAiKnwiZml4dXAhICIqKQogCQkJYWN0aW9uPSIke21lc3NhZ2UlJSEqfSIKLQkJCXJlc3Q9IiR7bWVzc2FnZSMqISB9IgotCQkJZWNobyAiJHNoYTEgJGFjdGlvbiAkcmVzdCIKKwkJCXJlc3Q9JG1lc3NhZ2UKKwkJCXByZWZpeD0KKwkJCSMgc2tpcCBhbGwgc3F1YXNoISBvciBmaXh1cCEgKGJ1dCBzYXZlIGZvciBsYXRlcikKKwkJCXdoaWxlIDoKKwkJCWRvCisJCQkJY2FzZSAiJHJlc3QiIGluCisJCQkJInNxdWFzaCEgIip8ImZpeHVwISAiKikKKwkJCQkJcHJlZml4PSIkcHJlZml4JHtyZXN0JSUhKn0sIgorCQkJCQlyZXN0PSIke3Jlc3QjKiEgfSIKKwkJCQkJOzsKKwkJCQkqKQorCQkJCQlicmVhaworCQkJCQk7OworCQkJCWVzYWMKKwkJCWRvbmUKKwkJCWVjaG8gIiRzaGExICRhY3Rpb24gJHByZWZpeCAkcmVzdCIKIAkJCSMgaWYgaXQncyBhIHNpbmdsZSB3b3JkLCB0cnkgdG8gcmVzb2x2ZSB0byBhIGZ1bGwgc2hhMSBhbmQKIAkJCSMgZW1pdCBhIHNlY29uZCBjb3B5LiBUaGlzIGFsbG93cyB1cyB0byBtYXRjaCBvbiBib3RoIG1lc3NhZ2UKIAkJCSMgYW5kIG9uIHNoYTEgcHJlZml4CkBAIC03MDAsNyArNzI0LDcgQEAKIAkJCQlpZiB0ZXN0IC1uICIkZnVsbHNoYSI7IHRoZW4KIAkJCQkJIyBwcmVmaXggdGhlIGFjdGlvbiB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGxpbmUgYXMKIAkJCQkJIyBpbnRlbmRlZCBmb3IgZnVsbCBzaGExIG1hdGNoCi0JCQkJCWVjaG8gIiRzaGExICskYWN0aW9uICRmdWxsc2hhIgorCQkJCQllY2hvICIkc2hhMSArJGFjdGlvbiAkcHJlZml4ICRmdWxsc2hhIgogCQkJCWZpCiAJCQlmaQogCQllc2FjCkBAIC03MTUsNyArNzM5LDcgQEAKIAkJZXNhYwogCQlwcmludGYgJyVzXG4nICIkcGljayAkc2hhMSAkbWVzc2FnZSIKIAkJdXNlZD0iJHVzZWQkc2hhMSAiCi0JCXdoaWxlIHJlYWQgLXIgc3F1YXNoIGFjdGlvbiBtc2dfY29udGVudAorCQl3aGlsZSByZWFkIC1yIHNxdWFzaCBhY3Rpb24gbXNnX3ByZWZpeCBtc2dfY29udGVudAogCQlkbwogCQkJY2FzZSAiICR1c2VkIiBpbgogCQkJKiIgJHNxdWFzaCAiKikgY29udGludWUgOzsKQEAgLTczMSw3ICs3NTUsOCBAQAogCQkJCWNhc2UgIiRtZXNzYWdlIiBpbiAiJG1zZ19jb250ZW50IiopIGVtaXQ9MTs7IGVzYWMgOzsKIAkJCWVzYWMKIAkJCWlmIHRlc3QgJGVtaXQgPSAxOyB0aGVuCi0JCQkJcHJpbnRmICclc1xuJyAiJGFjdGlvbiAkc3F1YXNoICRhY3Rpb24hICRtc2dfY29udGVudCIKKwkJCQlyZWFsX3ByZWZpeD0kKGVjaG8gIiRtc2dfcHJlZml4IiB8IHNlZCAicy8sLyEgL2ciKQorCQkJCXByaW50ZiAnJXNcbicgIiRhY3Rpb24gJHNxdWFzaCAke3JlYWxfcHJlZml4fSRtc2dfY29udGVudCIKIAkJCQl1c2VkPSIkdXNlZCRzcXVhc2ggIgogCQkJZmkKIAkJZG9uZSA8IiQxLnNxIgpAQCAtODA1LDExICs4MzAsMTMgQEAKIAogCXJlcXVpcmVfY2xlYW5fd29ya190cmVlICJyZWJhc2UiCiAJZG9fcmVzdAorCXJldHVybiAwCiAJOzsKIHNraXApCiAJZ2l0IHJlcmVyZSBjbGVhcgogCiAJZG9fcmVzdAorCXJldHVybiAwCiAJOzsKIGVkaXQtdG9kbykKIAlnaXQgc3RyaXBzcGFjZSAtLXN0cmlwLWNvbW1lbnRzIDwiJHRvZG8iID4iJHRvZG8iLm5ldwpAQCAtODM3LDEyICs4NjQsMTUgQEAKIAogaWYgdGVzdCAhIC16ICIkc3dpdGNoX3RvIgogdGhlbgorCUdJVF9SRUZMT0dfQUNUSU9OPSIkR0lUX1JFRkxPR19BQ1RJT046IGNoZWNrb3V0ICRzd2l0Y2hfdG8iCiAJb3V0cHV0IGdpdCBjaGVja291dCAiJHN3aXRjaF90byIgLS0gfHwKLQkJZGllICJDb3VsZCBub3QgY2hlY2tvdXQgJHN3aXRjaF90byIKKwlkaWUgIkNvdWxkIG5vdCBjaGVja291dCAkc3dpdGNoX3RvIgorCisJY29tbWVudF9mb3JfcmVmbG9nIHN0YXJ0CiBmaQogCiBvcmlnX2hlYWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIHx8IGRpZSAiTm8gSEVBRD8iCi1ta2RpciAiJHN0YXRlX2RpciIgfHwgZGllICJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSAkc3RhdGVfZGlyIgorbWtkaXIgLXAgIiRzdGF0ZV9kaXIiIHx8IGRpZSAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgJHN0YXRlX2RpciIKIAogOiA+ICIkc3RhdGVfZGlyIi9pbnRlcmFjdGl2ZSB8fCBkaWUgIkNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIgogd3JpdGVfYmFzaWNfc3RhdGUKQEAgLTk4MCw2ICsxMDEwLDcgQEAKIAogdGVzdCAtZCAiJHJld3JpdHRlbiIgfHwgdGVzdCAtbiAiJGZvcmNlX3JlYmFzZSIgfHwgc2tpcF91bm5lY2Vzc2FyeV9waWNrcwogCitHSVRfUkVGTE9HX0FDVElPTj0iJEdJVF9SRUZMT0dfQUNUSU9OOiBjaGVja291dCAkb250b19uYW1lIgogb3V0cHV0IGdpdCBjaGVja291dCAkb250byB8fCBkaWVfYWJvcnQgImNvdWxkIG5vdCBkZXRhY2ggSEVBRCIKIGdpdCB1cGRhdGUtcmVmIE9SSUdfSEVBRCAkb3JpZ19oZWFkCiBkb19yZXN0CmRpZmYgLS1naXQgYS9naXQtcmViYXNlLS1tZXJnZS5zaCBiL2dpdC1yZWJhc2UtLW1lcmdlLnNoCmluZGV4IGIxMGYyY2YuLjE2ZDE4MTcgMTAwNjQ0Ci0tLSBhL2dpdC1yZWJhc2UtLW1lcmdlLnNoCisrKyBiL2dpdC1yZWJhc2UtLW1lcmdlLnNoCkBAIC05Niw3ICs5Niw2IEBACiAJCQkiJEdJVF9ESVIiL2hvb2tzL3Bvc3QtcmV3cml0ZSByZWJhc2UgPCIkc3RhdGVfZGlyIi9yZXdyaXR0ZW4KIAkJZmkKIAlmaQotCXJtIC1yICIkc3RhdGVfZGlyIgogCXNheSBBbGwgZG9uZS4KIH0KIApAQCAtMTEwLDcgKzEwOSw3IEBACiAJCWNvbnRpbnVlX21lcmdlCiAJZG9uZQogCWZpbmlzaF9yYl9tZXJnZQotCWV4aXQKKwlyZXR1cm4KIAk7Owogc2tpcCkKIAlyZWFkX3N0YXRlCkBAIC0xMjIsNyArMTIxLDcgQEAKIAkJY29udGludWVfbWVyZ2UKIAlkb25lCiAJZmluaXNoX3JiX21lcmdlCi0JZXhpdAorCXJldHVybgogCTs7CiBlc2FjCiAKZGlmZiAtLWdpdCBhL2dpdC1yZWJhc2Uuc2ggYi9naXQtcmViYXNlLnNoCmluZGV4IDJjNjkyYzMuLjAwMzllY2YgMTAwNzU1Ci0tLSBhL2dpdC1yZWJhc2Uuc2gKKysrIGIvZ2l0LXJlYmFzZS5zaApAQCAtMTMsNiArMTMsNyBAQAogIEF2YWlsYWJsZSBvcHRpb25zIGFyZQogdix2ZXJib3NlISAgICAgICAgIGRpc3BsYXkgYSBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0KIHEscXVpZXQhICAgICAgICAgICBiZSBxdWlldC4gaW1wbGllcyAtLW5vLXN0YXQKK2F1dG9zdGFzaCEgICAgICAgICBhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyCiBvbnRvPSEgICAgICAgICAgICAgcmViYXNlIG9udG8gZ2l2ZW4gYnJhbmNoIGluc3RlYWQgb2YgdXBzdHJlYW0KIHAscHJlc2VydmUtbWVyZ2VzISB0cnkgdG8gcmVjcmVhdGUgbWVyZ2VzIGluc3RlYWQgb2YgaWdub3JpbmcgdGhlbQogcyxzdHJhdGVneT0hICAgICAgIHVzZSB0aGUgZ2l2ZW4gbWVyZ2Ugc3RyYXRlZ3kKQEAgLTY0LDYgKzY1LDcgQEAKIHZlcmJvc2U9CiBkaWZmc3RhdD0KIHRlc3QgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgcmViYXNlLnN0YXQpIiA9IHRydWUgJiYgZGlmZnN0YXQ9dAorYXV0b3N0YXNoPSIkKGdpdCBjb25maWcgLS1ib29sIHJlYmFzZS5hdXRvc3Rhc2ggfHwgZWNobyBmYWxzZSkiCiBnaXRfYW1fb3B0PQogcmViYXNlX3Jvb3Q9CiBmb3JjZV9yZWJhc2U9CkBAIC04Miw2ICs4NCw4IEBACiB0ZXN0ICIkKGdpdCBjb25maWcgLS1ib29sIHJlYmFzZS5hdXRvc3F1YXNoKSIgPSAidHJ1ZSIgJiYgYXV0b3NxdWFzaD10CiAKIHJlYWRfYmFzaWNfc3RhdGUgKCkgeworCXRlc3QgLWYgIiRzdGF0ZV9kaXIvaGVhZC1uYW1lIiAmJgorCXRlc3QgLWYgIiRzdGF0ZV9kaXIvb250byIgJiYKIAloZWFkX25hbWU9JChjYXQgIiRzdGF0ZV9kaXIiL2hlYWQtbmFtZSkgJiYKIAlvbnRvPSQoY2F0ICIkc3RhdGVfZGlyIi9vbnRvKSAmJgogCSMgV2UgYWx3YXlzIHdyaXRlIHRvIG9yaWctaGVhZCwgYnV0IGludGVyYWN0aXZlIHJlYmFzZSB1c2VkIHRvIHdyaXRlIHRvCkBAIC0xNDMsNiArMTQ3LDI2IEBACiAJZXNhYwogfQogCitmaW5pc2hfcmViYXNlICgpIHsKKwlpZiB0ZXN0IC1mICIkc3RhdGVfZGlyL2F1dG9zdGFzaCIKKwl0aGVuCisJCXN0YXNoX3NoYTE9JChjYXQgIiRzdGF0ZV9kaXIvYXV0b3N0YXNoIikKKwkJaWYgZ2l0IHN0YXNoIGFwcGx5ICRzdGFzaF9zaGExIDI+JjEgPi9kZXYvbnVsbAorCQl0aGVuCisJCQllY2hvICIkKGdldHRleHQgJ0FwcGxpZWQgYXV0b3N0YXNoLicpIgorCQllbHNlCisJCQlnaXQgc3Rhc2ggc3RvcmUgLW0gImF1dG9zdGFzaCIgLXEgJHN0YXNoX3NoYTEgfHwKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIkNhbm5vdCBzdG9yZSBcJHN0YXNoX3NoYTEiKSIKKwkJCWdldHRleHQgJ0FwcGx5aW5nIGF1dG9zdGFzaCByZXN1bHRlZCBpbiBjb25mbGljdHMuCitZb3VyIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGhlIHN0YXNoLgorWW91IGNhbiBydW4gImdpdCBzdGFzaCBwb3AiIG9yICJnaXQgc3Rhc2ggZHJvcCIgaXQgYXQgYW55IHRpbWUuCisnCisJCWZpCisJZmkKKwlnaXQgZ2MgLS1hdXRvICYmCisJcm0gLXJmICIkc3RhdGVfZGlyIgorfQorCiBydW5fc3BlY2lmaWNfcmViYXNlICgpIHsKIAlpZiBbICIkaW50ZXJhY3RpdmVfcmViYXNlIiA9IGltcGxpZWQgXTsgdGhlbgogCQlHSVRfRURJVE9SPToKQEAgLTE1MCw2ICsxNzQsMTIgQEAKIAkJYXV0b3NxdWFzaD0KIAlmaQogCS4gZ2l0LXJlYmFzZS0tJHR5cGUKKwlyZXQ9JD8KKwlpZiB0ZXN0ICRyZXQgLWVxIDAKKwl0aGVuCisJCWZpbmlzaF9yZWJhc2UKKwlmaQorCWV4aXQgJHJldAogfQogCiBydW5fcHJlX3JlYmFzZV9ob29rICgpIHsKQEAgLTI0MSw2ICsyNzEsOSBAQAogCS0tc3RhdCkKIAkJZGlmZnN0YXQ9dAogCQk7OworCS0tYXV0b3N0YXNoKQorCQlhdXRvc3Rhc2g9dHJ1ZQorCQk7OwogCS12KQogCQl2ZXJib3NlPXQKIAkJZGlmZnN0YXQ9dApAQCAtMzQxLDcgKzM3NCw3IEBACiAJCTs7CiAJZXNhYwogCW91dHB1dCBnaXQgcmVzZXQgLS1oYXJkICRvcmlnX2hlYWQKLQlybSAtciAiJHN0YXRlX2RpciIKKwlmaW5pc2hfcmViYXNlCiAJZXhpdAogCTs7CiBlZGl0LXRvZG8pCkBAIC00MDAsNyArNDMzLDcgQEAKIAkJc2hpZnQKIAkJOzsKIAllc2FjCi0JdXBzdHJlYW09YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiR7dXBzdHJlYW1fbmFtZX1eMCJgIHx8CisJdXBzdHJlYW09JChwZWVsX2NvbW1pdHRpc2ggIiR7dXBzdHJlYW1fbmFtZX0iKSB8fAogCWRpZSAiJChldmFsX2dldHRleHQgImludmFsaWQgdXBzdHJlYW0gXCR1cHN0cmVhbV9uYW1lIikiCiAJdXBzdHJlYW1fYXJnPSIkdXBzdHJlYW1fbmFtZSIKIGVsc2UKQEAgLTQzNiw3ICs0NjksNyBAQAogCWZpCiAJOzsKICopCi0Jb250bz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiR7b250b19uYW1lfV4wIikgfHwKKwlvbnRvPSQocGVlbF9jb21taXR0aXNoICIkb250b19uYW1lIikgfHwKIAlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdDogXCRvbnRvX25hbWUiKSIKIAk7OwogZXNhYwpAQCAtNDgwLDYgKzUxMywxOCBAQAogCTs7CiBlc2FjCiAKK2lmIHRlc3QgIiRhdXRvc3Rhc2giID0gdHJ1ZSAmJiAhIChyZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSkgMj4vZGV2L251bGwKK3RoZW4KKwlzdGFzaF9zaGExPSQoZ2l0IHN0YXNoIGNyZWF0ZSAiYXV0b3N0YXNoIikgfHwKKwlkaWUgIiQoZ2V0dGV4dCAnQ2Fubm90IGF1dG9zdGFzaCcpIgorCisJbWtkaXIgLXAgIiRzdGF0ZV9kaXIiICYmCisJZWNobyAkc3Rhc2hfc2hhMSA+IiRzdGF0ZV9kaXIvYXV0b3N0YXNoIiAmJgorCXN0YXNoX2FiYnJldj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkc3Rhc2hfc2hhMSkgJiYKKwllY2hvICIkKGV2YWxfZ2V0dGV4dCAnQ3JlYXRlZCBhdXRvc3Rhc2g6ICRzdGFzaF9hYmJyZXYnKSIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkCitmaQorCiByZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSAicmViYXNlIiAiJChnZXR0ZXh0ICJQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIikiCiAKICMgTm93IHdlIGFyZSByZWJhc2luZyBjb21taXRzICR1cHN0cmVhbS4uJG9yaWdfaGVhZCAob3Igd2l0aCAtLXJvb3QsCkBAIC00OTcsOCArNTQyLDExIEBACiAJaWYgdGVzdCAteiAiJGZvcmNlX3JlYmFzZSIKIAl0aGVuCiAJCSMgTGF6aWx5IHN3aXRjaCB0byB0aGUgdGFyZ2V0IGJyYW5jaCBpZiBuZWVkZWQuLi4KLQkJdGVzdCAteiAiJHN3aXRjaF90byIgfHwgZ2l0IGNoZWNrb3V0ICIkc3dpdGNoX3RvIiAtLQorCQl0ZXN0IC16ICIkc3dpdGNoX3RvIiB8fAorCQlHSVRfUkVGTE9HX0FDVElPTj0iJEdJVF9SRUZMT0dfQUNUSU9OOiBjaGVja291dCAkc3dpdGNoX3RvIiBcCisJCQlnaXQgY2hlY2tvdXQgIiRzd2l0Y2hfdG8iIC0tCiAJCXNheSAiJChldmFsX2dldHRleHQgIkN1cnJlbnQgYnJhbmNoIFwkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZS4iKSIKKwkJZmluaXNoX3JlYmFzZQogCQlleGl0IDAKIAllbHNlCiAJCXNheSAiJChldmFsX2dldHRleHQgIkN1cnJlbnQgYnJhbmNoIFwkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC4iKSIKQEAgLTUyMiw3ICs1NzAsOSBAQAogCiAjIERldGFjaCBIRUFEIGFuZCByZXNldCB0aGUgdHJlZQogc2F5ICIkKGdldHRleHQgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLiIpIgotZ2l0IGNoZWNrb3V0IC1xICIkb250b14wIiB8fCBkaWUgImNvdWxkIG5vdCBkZXRhY2ggSEVBRCIKKworR0lUX1JFRkxPR19BQ1RJT049IiRHSVRfUkVGTE9HX0FDVElPTjogY2hlY2tvdXQgJG9udG9fbmFtZSIgXAorCWdpdCBjaGVja291dCAtcSAiJG9udG9eMCIgfHwgZGllICJjb3VsZCBub3QgZGV0YWNoIEhFQUQiCiBnaXQgdXBkYXRlLXJlZiBPUklHX0hFQUQgJG9yaWdfaGVhZAogCiAjIElmIHRoZSAkb250byBpcyBhIHByb3BlciBkZXNjZW5kYW50IG9mIHRoZSB0aXAgb2YgdGhlIGJyYW5jaCwgdGhlbgpAQCAtNTMxLDYgKzU4MSw3IEBACiB0aGVuCiAJc2F5ICIkKGV2YWxfZ2V0dGV4dCAiRmFzdC1mb3J3YXJkZWQgXCRicmFuY2hfbmFtZSB0byBcJG9udG9fbmFtZS4iKSIKIAltb3ZlX3RvX29yaWdpbmFsX2JyYW5jaAorCWZpbmlzaF9yZWJhc2UKIAlleGl0IDAKIGZpCiAKZGlmZiAtLWdpdCBhL2dpdC1yZW1vdGUtdGVzdGdpdCBiL2dpdC1yZW1vdGUtdGVzdGdpdApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZTdlZDNhMy4uMDAwMDAwMAotLS0gYS9naXQtcmVtb3RlLXRlc3RnaXQKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0jIS91c3IvYmluL2VudiBiYXNoCi0jIENvcHlyaWdodCAoYykgMjAxMiBGZWxpcGUgQ29udHJlcmFzCi0KLWFsaWFzPSQxCi11cmw9JDIKLQotZGlyPSIkR0lUX0RJUi90ZXN0Z2l0LyRhbGlhcyIKLXByZWZpeD0icmVmcy90ZXN0Z2l0LyRhbGlhcyIKLQotZGVmYXVsdF9yZWZzcGVjPSJyZWZzL2hlYWRzLyo6JHtwcmVmaXh9L2hlYWRzLyoiCi0KLXJlZnNwZWM9IiR7R0lUX1JFTU9URV9URVNUR0lUX1JFRlNQRUMtJGRlZmF1bHRfcmVmc3BlY30iCi0KLXRlc3QgLXogIiRyZWZzcGVjIiAmJiBwcmVmaXg9InJlZnMiCi0KLWV4cG9ydCBHSVRfRElSPSIkdXJsLy5naXQiCi0KLW1rZGlyIC1wICIkZGlyIgotCi1pZiB0ZXN0IC16ICIkR0lUX1JFTU9URV9URVNUR0lUX05PX01BUktTIgotdGhlbgotCWdpdG1hcmtzPSIkZGlyL2dpdC5tYXJrcyIKLQl0ZXN0Z2l0bWFya3M9IiRkaXIvdGVzdGdpdC5tYXJrcyIKLQl0ZXN0IC1lICIkZ2l0bWFya3MiIHx8ID4iJGdpdG1hcmtzIgotCXRlc3QgLWUgIiR0ZXN0Z2l0bWFya3MiIHx8ID4iJHRlc3RnaXRtYXJrcyIKLQl0ZXN0Z2l0bWFya3NfYXJncz0oICItLSJ7aW1wb3J0LGV4cG9ydH0iLW1hcmtzPSR0ZXN0Z2l0bWFya3MiICkKLWZpCi0KLXdoaWxlIHJlYWQgbGluZQotZG8KLQljYXNlICRsaW5lIGluCi0JY2FwYWJpbGl0aWVzKQotCQllY2hvICdpbXBvcnQnCi0JCWVjaG8gJ2V4cG9ydCcKLQkJdGVzdCAtbiAiJHJlZnNwZWMiICYmIGVjaG8gInJlZnNwZWMgJHJlZnNwZWMiCi0JCWlmIHRlc3QgLW4gIiRnaXRtYXJrcyIKLQkJdGhlbgotCQkJZWNobyAiKmltcG9ydC1tYXJrcyAkZ2l0bWFya3MiCi0JCQllY2hvICIqZXhwb3J0LW1hcmtzICRnaXRtYXJrcyIKLQkJZmkKLQkJdGVzdCAtbiAiJEdJVF9SRU1PVEVfVEVTVEdJVF9TSUdORURfVEFHUyIgJiYgZWNobyAic2lnbmVkLXRhZ3MiCi0JCWVjaG8KLQkJOzsKLQlsaXN0KQotCQlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSc/ICUocmVmbmFtZSknICdyZWZzL2hlYWRzLycKLQkJaGVhZD0kKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkKLQkJZWNobyAiQCRoZWFkIEhFQUQiCi0JCWVjaG8KLQkJOzsKLQlpbXBvcnQqKQotCQkjIHJlYWQgYWxsIGltcG9ydCBsaW5lcwotCQl3aGlsZSB0cnVlCi0JCWRvCi0JCQlyZWY9IiR7bGluZSMqIH0iCi0JCQlyZWZzPSIkcmVmcyAkcmVmIgotCQkJcmVhZCBsaW5lCi0JCQl0ZXN0ICIke2xpbmUlJSAqfSIgIT0gImltcG9ydCIgJiYgYnJlYWsKLQkJZG9uZQotCi0JCWlmIHRlc3QgLW4gIiRnaXRtYXJrcyIKLQkJdGhlbgotCQkJZWNobyAiZmVhdHVyZSBpbXBvcnQtbWFya3M9JGdpdG1hcmtzIgotCQkJZWNobyAiZmVhdHVyZSBleHBvcnQtbWFya3M9JGdpdG1hcmtzIgotCQlmaQotCQllY2hvICJmZWF0dXJlIGRvbmUiCi0JCWdpdCBmYXN0LWV4cG9ydCAiJHt0ZXN0Z2l0bWFya3NfYXJnc1tAXX0iICRyZWZzIHwKLQkJc2VkIC1lICJzI3JlZnMvaGVhZHMvIyR7cHJlZml4fS9oZWFkcy8jZyIKLQkJZWNobyAiZG9uZSIKLQkJOzsKLQlleHBvcnQpCi0JCWJlZm9yZT0kKGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyUocmVmbmFtZSkgJShvYmplY3RuYW1lKScpCi0KLQkJZ2l0IGZhc3QtaW1wb3J0ICIke3Rlc3RnaXRtYXJrc19hcmdzW0BdfSIgLS1xdWlldAotCi0JCWFmdGVyPSQoZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0nJShyZWZuYW1lKSAlKG9iamVjdG5hbWUpJykKLQotCQkjIGZpZ3VyZSBvdXQgd2hpY2ggcmVmcyB3ZXJlIHVwZGF0ZWQKLQkJam9pbiAtZSAwIC1vICcwIDEuMiAyLjInIC1hIDIgPChlY2hvICIkYmVmb3JlIikgPChlY2hvICIkYWZ0ZXIiKSB8Ci0JCXdoaWxlIHJlYWQgcmVmIGEgYgotCQlkbwotCQkJdGVzdCAkYSA9PSAkYiAmJiBjb250aW51ZQotCQkJZWNobyAib2sgJHJlZiIKLQkJZG9uZQotCi0JCWVjaG8KLQkJOzsKLQknJykKLQkJZXhpdAotCQk7OwotCWVzYWMKLWRvbmUKZGlmZiAtLWdpdCBhL2dpdC1yZW1vdGUtdGVzdGdpdC5zaCBiL2dpdC1yZW1vdGUtdGVzdGdpdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMTA5MDcwCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LXJlbW90ZS10ZXN0Z2l0LnNoCkBAIC0wLDAgKzEsMTIxIEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChjKSAyMDEyIEZlbGlwZSBDb250cmVyYXMKKworYWxpYXM9JDEKK3VybD0kMgorCitkaXI9IiRHSVRfRElSL3Rlc3RnaXQvJGFsaWFzIgorcHJlZml4PSJyZWZzL3Rlc3RnaXQvJGFsaWFzIgorCitkZWZhdWx0X3JlZnNwZWM9InJlZnMvaGVhZHMvKjoke3ByZWZpeH0vaGVhZHMvKiIKKworcmVmc3BlYz0iJHtHSVRfUkVNT1RFX1RFU1RHSVRfUkVGU1BFQy0kZGVmYXVsdF9yZWZzcGVjfSIKKwordGVzdCAteiAiJHJlZnNwZWMiICYmIHByZWZpeD0icmVmcyIKKworZXhwb3J0IEdJVF9ESVI9IiR1cmwvLmdpdCIKKworbWtkaXIgLXAgIiRkaXIiCisKK2lmIHRlc3QgLXogIiRHSVRfUkVNT1RFX1RFU1RHSVRfTk9fTUFSS1MiCit0aGVuCisJZ2l0bWFya3M9IiRkaXIvZ2l0Lm1hcmtzIgorCXRlc3RnaXRtYXJrcz0iJGRpci90ZXN0Z2l0Lm1hcmtzIgorCXRlc3QgLWUgIiRnaXRtYXJrcyIgfHwgPiIkZ2l0bWFya3MiCisJdGVzdCAtZSAiJHRlc3RnaXRtYXJrcyIgfHwgPiIkdGVzdGdpdG1hcmtzIgorZmkKKword2hpbGUgcmVhZCBsaW5lCitkbworCWNhc2UgJGxpbmUgaW4KKwljYXBhYmlsaXRpZXMpCisJCWVjaG8gJ2ltcG9ydCcKKwkJZWNobyAnZXhwb3J0JworCQl0ZXN0IC1uICIkcmVmc3BlYyIgJiYgZWNobyAicmVmc3BlYyAkcmVmc3BlYyIKKwkJaWYgdGVzdCAtbiAiJGdpdG1hcmtzIgorCQl0aGVuCisJCQllY2hvICIqaW1wb3J0LW1hcmtzICRnaXRtYXJrcyIKKwkJCWVjaG8gIipleHBvcnQtbWFya3MgJGdpdG1hcmtzIgorCQlmaQorCQl0ZXN0IC1uICIkR0lUX1JFTU9URV9URVNUR0lUX1NJR05FRF9UQUdTIiAmJiBlY2hvICJzaWduZWQtdGFncyIKKwkJZWNobworCQk7OworCWxpc3QpCisJCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9Jz8gJShyZWZuYW1lKScgJ3JlZnMvaGVhZHMvJworCQloZWFkPSQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKQorCQllY2hvICJAJGhlYWQgSEVBRCIKKwkJZWNobworCQk7OworCWltcG9ydCopCisJCSMgcmVhZCBhbGwgaW1wb3J0IGxpbmVzCisJCXdoaWxlIHRydWUKKwkJZG8KKwkJCXJlZj0iJHtsaW5lIyogfSIKKwkJCXJlZnM9IiRyZWZzICRyZWYiCisJCQlyZWFkIGxpbmUKKwkJCXRlc3QgIiR7bGluZSUlICp9IiAhPSAiaW1wb3J0IiAmJiBicmVhaworCQlkb25lCisKKwkJaWYgdGVzdCAtbiAiJGdpdG1hcmtzIgorCQl0aGVuCisJCQllY2hvICJmZWF0dXJlIGltcG9ydC1tYXJrcz0kZ2l0bWFya3MiCisJCQllY2hvICJmZWF0dXJlIGV4cG9ydC1tYXJrcz0kZ2l0bWFya3MiCisJCWZpCisKKwkJaWYgdGVzdCAtbiAiJEdJVF9SRU1PVEVfVEVTVEdJVF9GQUlMVVJFIgorCQl0aGVuCisJCQllY2hvICJmZWF0dXJlIGRvbmUiCisJCQlleGl0IDEKKwkJZmkKKworCQllY2hvICJmZWF0dXJlIGRvbmUiCisJCWdpdCBmYXN0LWV4cG9ydCBcCisJCQkke3Rlc3RnaXRtYXJrczorIi0taW1wb3J0LW1hcmtzPSR0ZXN0Z2l0bWFya3MifSBcCisJCQkke3Rlc3RnaXRtYXJrczorIi0tZXhwb3J0LW1hcmtzPSR0ZXN0Z2l0bWFya3MifSBcCisJCQkkcmVmcyB8CisJCXNlZCAtZSAicyNyZWZzL2hlYWRzLyMke3ByZWZpeH0vaGVhZHMvI2ciCisJCWVjaG8gImRvbmUiCisJCTs7CisJZXhwb3J0KQorCQlpZiB0ZXN0IC1uICIkR0lUX1JFTU9URV9URVNUR0lUX0ZBSUxVUkUiCisJCXRoZW4KKwkJCSMgY29uc3VtZSBpbnB1dCBzbyBmYXN0LWV4cG9ydCBkb2Vzbid0IGdldCBTSUdQSVBFOworCQkJIyBnaXQgd291bGQgYWxzbyBub3RpY2UgdGhhdCBjYXNlLCBidXQgd2Ugd2FudAorCQkJIyB0byBtYWtlIHN1cmUgd2UgYXJlIGV4ZXJjaXNpbmcgdGhlIGxhdGVyCisJCQkjIGVycm9yIGNoZWNrcworCQkJd2hpbGUgcmVhZCBsaW5lOyBkbworCQkJCXRlc3QgImRvbmUiID0gIiRsaW5lIiAmJiBicmVhaworCQkJZG9uZQorCQkJZXhpdCAxCisJCWZpCisKKwkJYmVmb3JlPSQoZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0nICUocmVmbmFtZSkgJShvYmplY3RuYW1lKSAnKQorCisJCWdpdCBmYXN0LWltcG9ydCBcCisJCQkke3Rlc3RnaXRtYXJrczorIi0taW1wb3J0LW1hcmtzPSR0ZXN0Z2l0bWFya3MifSBcCisJCQkke3Rlc3RnaXRtYXJrczorIi0tZXhwb3J0LW1hcmtzPSR0ZXN0Z2l0bWFya3MifSBcCisJCQktLXF1aWV0CisKKwkJIyBmaWd1cmUgb3V0IHdoaWNoIHJlZnMgd2VyZSB1cGRhdGVkCisJCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyUocmVmbmFtZSkgJShvYmplY3RuYW1lKScgfAorCQl3aGlsZSByZWFkIHJlZiBhCisJCWRvCisJCQljYXNlICIkYmVmb3JlIiBpbgorCQkJKiIgJHJlZiAkYSAiKikKKwkJCQljb250aW51ZSA7OwkjIHVuY2hhbmdlZAorCQkJZXNhYworCQkJaWYgdGVzdCAteiAiJEdJVF9SRU1PVEVfVEVTVEdJVF9QVVNIX0VSUk9SIgorCQkJdGhlbgorCQkJCWVjaG8gIm9rICRyZWYiCisJCQllbHNlCisJCQkJZWNobyAiZXJyb3IgJHJlZiAkR0lUX1JFTU9URV9URVNUR0lUX1BVU0hfRVJST1IiCisJCQlmaQorCQlkb25lCisKKwkJZWNobworCQk7OworCScnKQorCQlleGl0CisJCTs7CisJZXNhYworZG9uZQpkaWZmIC0tZ2l0IGEvZ2l0LXJlcXVlc3QtcHVsbC5zaCBiL2dpdC1yZXF1ZXN0LXB1bGwuc2gKaW5kZXggZDU2NjAxNS4uZWJmMTI2OSAxMDA3NTUKLS0tIGEvZ2l0LXJlcXVlc3QtcHVsbC5zaAorKysgYi9naXQtcmVxdWVzdC1wdWxsLnNoCkBAIC01MSw4ICs1MSwxOCBAQAogdGFnX25hbWU9JChnaXQgZGVzY3JpYmUgLS1leGFjdCAiJGhlYWReMCIgMj4vZGV2L251bGwpCiAKIHRlc3QgLW4gIiRiYXNlIiAmJiB0ZXN0IC1uICIkdXJsIiB8fCB1c2FnZQotYmFzZXJldj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRiYXNlIl4wKSAmJgotaGVhZHJldj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRoZWFkIl4wKSB8fCBleGl0CisKK2Jhc2VyZXY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tcXVpZXQgIiRiYXNlIl4wKQoraWYgdGVzdCAteiAiJGJhc2VyZXYiCit0aGVuCisgICAgZGllICJmYXRhbDogTm90IGEgdmFsaWQgcmV2aXNpb246ICRiYXNlIgorZmkKKworaGVhZHJldj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1xdWlldCAiJGhlYWQiXjApCitpZiB0ZXN0IC16ICIkaGVhZHJldiIKK3RoZW4KKyAgICBkaWUgImZhdGFsOiBOb3QgYSB2YWxpZCByZXZpc2lvbjogJGhlYWQiCitmaQogCiBtZXJnZV9iYXNlPSQoZ2l0IG1lcmdlLWJhc2UgJGJhc2VyZXYgJGhlYWRyZXYpIHx8CiBkaWUgImZhdGFsOiBObyBjb21taXRzIGluIGNvbW1vbiBiZXR3ZWVuICRiYXNlIGFuZCAkaGVhZCIKZGlmZiAtLWdpdCBhL2dpdC1zZW5kLWVtYWlsLnBlcmwgYi9naXQtc2VuZC1lbWFpbC5wZXJsCmluZGV4IGJkMTNjYzguLjIxNjI0NzggMTAwNzU1Ci0tLSBhL2dpdC1zZW5kLWVtYWlsLnBlcmwKKysrIGIvZ2l0LXNlbmQtZW1haWwucGVybApAQCAtNjksNiArNjksOSBAQAogICAgIC0tc210cC1wYXNzICAgICAgICAgICAgIDxzdHI+ICAqIFBhc3N3b3JkIGZvciBTTVRQLUFVVEg7IG5vdCBuZWNlc3NhcnkuCiAgICAgLS1zbXRwLWVuY3J5cHRpb24gICAgICAgPHN0cj4gICogdGxzIG9yIHNzbDsgYW55dGhpbmcgZWxzZSBkaXNhYmxlcy4KICAgICAtLXNtdHAtc3NsICAgICAgICAgICAgICAgICAgICAgKiBEZXByZWNhdGVkLiBVc2UgJy0tc210cC1lbmNyeXB0aW9uIHNzbCcuCisgICAgLS1zbXRwLXNzbC1jZXJ0LXBhdGggICAgPHN0cj4gICogUGF0aCB0byBjYS1jZXJ0aWZpY2F0ZXMgKGVpdGhlciBkaXJlY3Rvcnkgb3IgZmlsZSkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzcyBhbiBlbXB0eSBzdHJpbmcgdG8gZGlzYWJsZSBjZXJ0aWZpY2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbi4KICAgICAtLXNtdHAtZG9tYWluICAgICAgICAgICA8c3RyPiAgKiBUaGUgZG9tYWluIG5hbWUgc2VudCB0byBIRUxPL0VITE8gaGFuZHNoYWtlCiAgICAgLS1zbXRwLWRlYnVnICAgICAgICAgICAgPDB8MT4gICogRGlzYWJsZSwgZW5hYmxlIE5ldDo6U01UUCBkZWJ1Zy4KIApAQCAtMTk0LDcgKzE5Nyw3IEBACiBteSAoJHRocmVhZCwgJGNoYWluX3JlcGx5X3RvLCAkc3VwcHJlc3NfZnJvbSwgJHNpZ25lZF9vZmZfYnlfY2MpOwogbXkgKCR0b19jbWQsICRjY19jbWQpOwogbXkgKCRzbXRwX3NlcnZlciwgJHNtdHBfc2VydmVyX3BvcnQsIEBzbXRwX3NlcnZlcl9vcHRpb25zKTsKLW15ICgkc210cF9hdXRodXNlciwgJHNtdHBfZW5jcnlwdGlvbik7CitteSAoJHNtdHBfYXV0aHVzZXIsICRzbXRwX2VuY3J5cHRpb24sICRzbXRwX3NzbF9jZXJ0X3BhdGgpOwogbXkgKCRpZGVudGl0eSwgJGFsaWFzZmlsZXR5cGUsIEBhbGlhc19maWxlcywgJHNtdHBfZG9tYWluKTsKIG15ICgkdmFsaWRhdGUsICRjb25maXJtKTsKIG15IChAc3VwcHJlc3NfY2MpOwpAQCAtMjAzLDExICsyMDYsOSBAQAogCiBteSAoJGRlYnVnX25ldF9zbXRwKSA9IDA7CQkjIE5ldDo6U01UUCwgc2VlIHNlbmRfbWVzc2FnZSgpCiAKLW15ICRub3Rfc2V0X2J5X3VzZXIgPSAidHJ1ZSBidXQgbm90IHNldCBieSB0aGUgdXNlciI7Ci0KIG15ICVjb25maWdfYm9vbF9zZXR0aW5ncyA9ICgKICAgICAidGhyZWFkIiA9PiBbXCR0aHJlYWQsIDFdLAotICAgICJjaGFpbnJlcGx5dG8iID0+IFtcJGNoYWluX3JlcGx5X3RvLCAkbm90X3NldF9ieV91c2VyXSwKKyAgICAiY2hhaW5yZXBseXRvIiA9PiBbXCRjaGFpbl9yZXBseV90bywgMF0sCiAgICAgInN1cHByZXNzZnJvbSIgPT4gW1wkc3VwcHJlc3NfZnJvbSwgdW5kZWZdLAogICAgICJzaWduZWRvZmZieWNjIiA9PiBbXCRzaWduZWRfb2ZmX2J5X2NjLCB1bmRlZl0sCiAgICAgInNpZ25lZG9mZmNjIiA9PiBbXCRzaWduZWRfb2ZmX2J5X2NjLCB1bmRlZl0sICAgICAgIyBEZXByZWNhdGVkCkBAIC0yMjIsNiArMjIzLDcgQEAKICAgICAic210cHNlcnZlcm9wdGlvbiIgPT4gXEBzbXRwX3NlcnZlcl9vcHRpb25zLAogICAgICJzbXRwdXNlciIgPT4gXCRzbXRwX2F1dGh1c2VyLAogICAgICJzbXRwcGFzcyIgPT4gXCRzbXRwX2F1dGhwYXNzLAorICAgICJzbXRwc3NsY2VydHBhdGgiID0+IFwkc210cF9zc2xfY2VydF9wYXRoLAogICAgICJzbXRwZG9tYWluIiA9PiBcJHNtdHBfZG9tYWluLAogICAgICJ0byIgPT4gXEBpbml0aWFsX3RvLAogICAgICJ0b2NtZCIgPT4gXCR0b19jbWQsCkBAIC0yNDEsMTkgKzI0Myw2IEBACiAgICAgImFsaWFzZXNmaWxlIiA9PiBcQGFsaWFzX2ZpbGVzLAogKTsKIAotIyBIZWxwIHVzZXJzIHByZXBhcmUgZm9yIDEuNy4wCi1zdWIgY2hhaW5fcmVwbHlfdG8gewotCWlmIChkZWZpbmVkICRjaGFpbl9yZXBseV90byAmJgotCSAgICAkY2hhaW5fcmVwbHlfdG8gZXEgJG5vdF9zZXRfYnlfdXNlcikgewotCQlwcmludCBTVERFUlIKLQkJICAgICJJbiBnaXQgMS43LjAsIHRoZSBkZWZhdWx0IGhhcyBjaGFuZ2VkIHRvIC0tbm8tY2hhaW4tcmVwbHktdG9cbiIgLgotCQkgICAgIlNldCBzZW5kZW1haWwuY2hhaW5yZXBseXRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gdHJ1ZSBpZlxuIiAuCi0JCSAgICAieW91IHdhbnQgdG8ga2VlcCAtLWNoYWluLXJlcGx5LXRvIGFzIHlvdXIgZGVmYXVsdC5cbiI7Ci0JCSRjaGFpbl9yZXBseV90byA9IDA7Ci0JfQotCXJldHVybiAkY2hhaW5fcmVwbHlfdG87Ci19Ci0KICMgSGFuZGxlIFVuY291dGggVGVybWluYXRpb24KIHN1YiBzaWduYWxfaGFuZGxlciB7CiAKQEAgLTMwMiw2ICsyOTEsNyBAQAogCQkgICAgInNtdHAtcGFzczpzIiA9PiBcJHNtdHBfYXV0aHBhc3MsCiAJCSAgICAic210cC1zc2wiID0+IHN1YiB7ICRzbXRwX2VuY3J5cHRpb24gPSAnc3NsJyB9LAogCQkgICAgInNtdHAtZW5jcnlwdGlvbj1zIiA9PiBcJHNtdHBfZW5jcnlwdGlvbiwKKwkJICAgICJzbXRwLXNzbC1jZXJ0LXBhdGgiID0+IFwkc210cF9zc2xfY2VydF9wYXRoLAogCQkgICAgInNtdHAtZGVidWc6aSIgPT4gXCRkZWJ1Z19uZXRfc210cCwKIAkJICAgICJzbXRwLWRvbWFpbjpzIiA9PiBcJHNtdHBfZG9tYWluLAogCQkgICAgImlkZW50aXR5PXMiID0+IFwkaWRlbnRpdHksCkBAIC03NjAsNiArNzUwLDExIEBACiAJJHNlbmRlciA9ICRyZXBvYXV0aG9yIHx8ICRyZXBvY29tbWl0dGVyIHx8ICcnOwogfQogCisjICRzZW5kZXIgY291bGQgYmUgYW4gYWxyZWFkeSBzYW5pdGl6ZWQgYWRkcmVzcworIyAoZS5nLiBzZW5kZW1haWwuZnJvbSBjb3VsZCBiZSBtYW51YWxseSBzYW5pdGl6ZWQgYnkgdXNlcikuCisjIEJ1dCBpdCdzIGEgbm8tb3AgdG8gcnVuIHNhbml0aXplX2FkZHJlc3Mgb24gYW4gYWxyZWFkeSBzYW5pdGl6ZWQgYWRkcmVzcy4KKyRzZW5kZXIgPSBzYW5pdGl6ZV9hZGRyZXNzKCRzZW5kZXIpOworCiBteSAkcHJvbXB0aW5nID0gMDsKIGlmICghQGluaXRpYWxfdG8gJiYgIWRlZmluZWQgJHRvX2NtZCkgewogCW15ICR0byA9IGFzaygiV2hvIHNob3VsZCB0aGUgZW1haWxzIGJlIHNlbnQgdG8gKGlmIGFueSk/ICIsCkBAIC0xMDg5LDYgKzEwODQsMzQgQEAKIAlyZXR1cm4gJGF1dGg7CiB9CiAKK3N1YiBzc2xfdmVyaWZ5X3BhcmFtcyB7CisJZXZhbCB7CisJCXJlcXVpcmUgSU86OlNvY2tldDo6U1NMOworCQlJTzo6U29ja2V0OjpTU0wtPmltcG9ydChxdy9TU0xfVkVSSUZZX1BFRVIgU1NMX1ZFUklGWV9OT05FLyk7CisJfTsKKwlpZiAoJEApIHsKKwkJcHJpbnQgU1RERVJSICJOb3QgdXNpbmcgU1NMX1ZFUklGWV9QRUVSIGR1ZSB0byBvdXQtb2YtZGF0ZSBJTzo6U29ja2V0OjpTU0wuXG4iOworCQlyZXR1cm47CisJfQorCisJaWYgKCFkZWZpbmVkICRzbXRwX3NzbF9jZXJ0X3BhdGgpIHsKKwkJJHNtdHBfc3NsX2NlcnRfcGF0aCA9ICIvZXRjL3NzbC9jZXJ0cyI7CisJfQorCisJaWYgKCRzbXRwX3NzbF9jZXJ0X3BhdGggZXEgIiIpIHsKKwkJcmV0dXJuIChTU0xfdmVyaWZ5X21vZGUgPT4gU1NMX1ZFUklGWV9OT05FKCkpOworCX0gZWxzaWYgKC1kICRzbXRwX3NzbF9jZXJ0X3BhdGgpIHsKKwkJcmV0dXJuIChTU0xfdmVyaWZ5X21vZGUgPT4gU1NMX1ZFUklGWV9QRUVSKCksCisJCQlTU0xfY2FfcGF0aCA9PiAkc210cF9zc2xfY2VydF9wYXRoKTsKKwl9IGVsc2lmICgtZiAkc210cF9zc2xfY2VydF9wYXRoKSB7CisJCXJldHVybiAoU1NMX3ZlcmlmeV9tb2RlID0+IFNTTF9WRVJJRllfUEVFUigpLAorCQkJU1NMX2NhX2ZpbGUgPT4gJHNtdHBfc3NsX2NlcnRfcGF0aCk7CisJfSBlbHNlIHsKKwkJcHJpbnQgU1RERVJSICJOb3QgdXNpbmcgU1NMX1ZFUklGWV9QRUVSIGJlY2F1c2UgdGhlIENBIHBhdGggZG9lcyBub3QgZXhpc3QuXG4iOworCQlyZXR1cm4gKFNTTF92ZXJpZnlfbW9kZSA9PiBTU0xfVkVSSUZZX05PTkUoKSk7CisJfQorfQorCiAjIFJldHVybnMgMSBpZiB0aGUgbWVzc2FnZSB3YXMgc2VudCwgYW5kIDAgb3RoZXJ3aXNlLgogIyBJbiBhY3R1YWxpdHksIHRoZSB3aG9sZSBwcm9ncmFtIGRpZXMgd2hlbiB0aGVyZQogIyBpcyBhbiBlcnJvciBzZW5kaW5nIGEgbWVzc2FnZS4KQEAgLTExMTMsMTAgKzExMzYsOSBAQAogCWlmICgkY2MgbmUgJycpIHsKIAkJJGNjbGluZSA9ICJcbkNjOiAkY2MiOwogCX0KLQlteSAkc2FuaXRpemVkX3NlbmRlciA9IHNhbml0aXplX2FkZHJlc3MoJHNlbmRlcik7CiAJbWFrZV9tZXNzYWdlX2lkKCkgdW5sZXNzIGRlZmluZWQoJG1lc3NhZ2VfaWQpOwogCi0JbXkgJGhlYWRlciA9ICJGcm9tOiAkc2FuaXRpemVkX3NlbmRlcgorCW15ICRoZWFkZXIgPSAiRnJvbTogJHNlbmRlcgogVG86ICR0byR7Y2NsaW5lfQogU3ViamVjdDogJHN1YmplY3QKIERhdGU6ICRkYXRlCkBAIC0xMTMzLDcgKzExNTUsNyBAQAogCX0KIAogCW15IEBzZW5kbWFpbF9wYXJhbWV0ZXJzID0gKCctaScsIEByZWNpcGllbnRzKTsKLQlteSAkcmF3X2Zyb20gPSAkc2FuaXRpemVkX3NlbmRlcjsKKwlteSAkcmF3X2Zyb20gPSAkc2VuZGVyOwogCWlmIChkZWZpbmVkICRlbnZlbG9wZV9zZW5kZXIgJiYgJGVudmVsb3BlX3NlbmRlciBuZSAiYXV0byIpIHsKIAkJJHJhd19mcm9tID0gJGVudmVsb3BlX3NlbmRlcjsKIAl9CkBAIC0xMTk0LDIwICsxMjE2LDI0IEBACiAJCQkkc210cF9kb21haW4gfHw9IG1haWxkb21haW4oKTsKIAkJCSRzbXRwIHx8PSBOZXQ6OlNNVFA6OlNTTC0+bmV3KCRzbXRwX3NlcnZlciwKIAkJCQkJCSAgICAgIEhlbGxvID0+ICRzbXRwX2RvbWFpbiwKLQkJCQkJCSAgICAgIFBvcnQgPT4gJHNtdHBfc2VydmVyX3BvcnQpOworCQkJCQkJICAgICAgUG9ydCA9PiAkc210cF9zZXJ2ZXJfcG9ydCwKKwkJCQkJCSAgICAgIHNzbF92ZXJpZnlfcGFyYW1zKCkpOwogCQl9CiAJCWVsc2UgewogCQkJcmVxdWlyZSBOZXQ6OlNNVFA7CiAJCQkkc210cF9kb21haW4gfHw9IG1haWxkb21haW4oKTsKLQkJCSRzbXRwIHx8PSBOZXQ6OlNNVFAtPm5ldyhzbXRwX2hvc3Rfc3RyaW5nKCksCisJCQkkc210cF9zZXJ2ZXJfcG9ydCB8fD0gMjU7CisJCQkkc210cCB8fD0gTmV0OjpTTVRQLT5uZXcoJHNtdHBfc2VydmVyLAogCQkJCQkJIEhlbGxvID0+ICRzbXRwX2RvbWFpbiwKLQkJCQkJCSBEZWJ1ZyA9PiAkZGVidWdfbmV0X3NtdHApOworCQkJCQkJIERlYnVnID0+ICRkZWJ1Z19uZXRfc210cCwKKwkJCQkJCSBQb3J0ID0+ICRzbXRwX3NlcnZlcl9wb3J0KTsKIAkJCWlmICgkc210cF9lbmNyeXB0aW9uIGVxICd0bHMnICYmICRzbXRwKSB7CiAJCQkJcmVxdWlyZSBOZXQ6OlNNVFA6OlNTTDsKIAkJCQkkc210cC0+Y29tbWFuZCgnU1RBUlRUTFMnKTsKIAkJCQkkc210cC0+cmVzcG9uc2UoKTsKIAkJCQlpZiAoJHNtdHAtPmNvZGUgPT0gMjIwKSB7Ci0JCQkJCSRzbXRwID0gTmV0OjpTTVRQOjpTU0wtPnN0YXJ0X1NTTCgkc210cCkKKwkJCQkJJHNtdHAgPSBOZXQ6OlNNVFA6OlNTTC0+c3RhcnRfU1NMKCRzbXRwLAorCQkJCQkJCQkJICBzc2xfdmVyaWZ5X3BhcmFtcygpKQogCQkJCQkJb3IgZGllICJTVEFSVFRMUyBmYWlsZWQhICIuJHNtdHAtPm1lc3NhZ2U7CiAJCQkJCSRzbXRwX2VuY3J5cHRpb24gPSAnJzsKIAkJCQkJIyBTZW5kIEVITE8gYWdhaW4gdG8gcmVjZWl2ZSBmcmVzaApAQCAtMTI3MCw2ICsxMjk2LDcgQEAKIAlvcGVuIG15ICRmaCwgIjwiLCAkdCBvciBkaWUgImNhbid0IG9wZW4gZmlsZSAkdCI7CiAKIAlteSAkYXV0aG9yID0gdW5kZWY7CisJbXkgJHNhdXRob3IgPSB1bmRlZjsKIAlteSAkYXV0aG9yX2VuY29kaW5nOwogCW15ICRoYXNfY29udGVudF90eXBlOwogCW15ICRib2R5X2VuY29kaW5nOwpAQCAtMTMwOCw4ICsxMzM1LDkgQEAKIAkJCX0KIAkJCWVsc2lmICgvXkZyb206XHMrKC4qKSQvaSkgewogCQkJCSgkYXV0aG9yLCAkYXV0aG9yX2VuY29kaW5nKSA9IHVucXVvdGVfcmZjMjA0NygkMSk7CisJCQkJJHNhdXRob3IgPSBzYW5pdGl6ZV9hZGRyZXNzKCRhdXRob3IpOwogCQkJCW5leHQgaWYgJHN1cHByZXNzX2NjeydhdXRob3InfTsKLQkJCQluZXh0IGlmICRzdXBwcmVzc19jY3snc2VsZid9IGFuZCAkYXV0aG9yIGVxICRzZW5kZXI7CisJCQkJbmV4dCBpZiAkc3VwcHJlc3NfY2N7J3NlbGYnfSBhbmQgJHNhdXRob3IgZXEgJHNlbmRlcjsKIAkJCQlwcmludGYoIihtYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iLAogCQkJCQkkMSwgJF8pIHVubGVzcyAkcXVpZXQ7CiAJCQkJcHVzaCBAY2MsICQxOwpAQCAtMTMyMyw3ICsxMzUxLDkgQEAKIAkJCX0KIAkJCWVsc2lmICgvXkNjOlxzKyguKikkL2kpIHsKIAkJCQlmb3JlYWNoIG15ICRhZGRyIChwYXJzZV9hZGRyZXNzX2xpbmUoJDEpKSB7Ci0JCQkJCWlmICh1bnF1b3RlX3JmYzIwNDcoJGFkZHIpIGVxICRzZW5kZXIpIHsKKwkJCQkJbXkgJHFhZGRyID0gdW5xdW90ZV9yZmMyMDQ3KCRhZGRyKTsKKwkJCQkJbXkgJHNhZGRyID0gc2FuaXRpemVfYWRkcmVzcygkcWFkZHIpOworCQkJCQlpZiAoJHNhZGRyIGVxICRzZW5kZXIpIHsKIAkJCQkJCW5leHQgaWYgKCRzdXBwcmVzc19jY3snc2VsZid9KTsKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCW5leHQgaWYgKCRzdXBwcmVzc19jY3snY2MnfSk7CkBAIC0xMzcwLDcgKzE0MDAsOCBAQAogCQkJY2hvbXA7CiAJCQlteSAoJHdoYXQsICRjKSA9ICgkMSwgJDIpOwogCQkJY2hvbXAgJGM7Ci0JCQlpZiAoJGMgZXEgJHNlbmRlcikgeworCQkJbXkgJHNjID0gc2FuaXRpemVfYWRkcmVzcygkYyk7CisJCQlpZiAoJHNjIGVxICRzZW5kZXIpIHsKIAkJCQluZXh0IGlmICgkc3VwcHJlc3NfY2N7J3NlbGYnfSk7CiAJCQl9IGVsc2UgewogCQkJCW5leHQgaWYgJHN1cHByZXNzX2Njeydzb2InfSBhbmQgJHdoYXQgPX4gL1NpZ25lZC1vZmYtYnkvaTsKQEAgLTE0MDAsNyArMTQzMSw3IEBACiAJCSRzdWJqZWN0ID0gcXVvdGVfc3ViamVjdCgkc3ViamVjdCwgJGF1dG9fOGJpdF9lbmNvZGluZyk7CiAJfQogCi0JaWYgKGRlZmluZWQgJGF1dGhvciBhbmQgJGF1dGhvciBuZSAkc2VuZGVyKSB7CisJaWYgKGRlZmluZWQgJHNhdXRob3IgYW5kICRzYXV0aG9yIG5lICRzZW5kZXIpIHsKIAkJJG1lc3NhZ2UgPSAiRnJvbTogJGF1dGhvclxuXG4kbWVzc2FnZSI7CiAJCWlmIChkZWZpbmVkICRhdXRob3JfZW5jb2RpbmcpIHsKIAkJCWlmICgkaGFzX2NvbnRlbnRfdHlwZSkgewpAQCAtMTQzNyw3ICsxNDY4LDcgQEAKIAogCSMgc2V0IHVwIGZvciB0aGUgbmV4dCBtZXNzYWdlCiAJaWYgKCR0aHJlYWQgJiYgJG1lc3NhZ2Vfd2FzX3NlbnQgJiYKLQkJKGNoYWluX3JlcGx5X3RvKCkgfHwgIWRlZmluZWQgJHJlcGx5X3RvIHx8IGxlbmd0aCgkcmVwbHlfdG8pID09IDAgfHwKKwkJKCRjaGFpbl9yZXBseV90byB8fCAhZGVmaW5lZCAkcmVwbHlfdG8gfHwgbGVuZ3RoKCRyZXBseV90bykgPT0gMCB8fAogCQkkbWVzc2FnZV9udW0gPT0gMSkpIHsKIAkJJHJlcGx5X3RvID0gJG1lc3NhZ2VfaWQ7CiAJCWlmIChsZW5ndGggJHJlZmVyZW5jZXMgPiAwKSB7CkBAIC0xNDU0LDcgKzE0ODUsNiBAQAogc3ViIHJlY2lwaWVudHNfY21kIHsKIAlteSAoJHByZWZpeCwgJHdoYXQsICRjbWQsICRmaWxlKSA9IEBfOwogCi0JbXkgJHNhbml0aXplZF9zZW5kZXIgPSBzYW5pdGl6ZV9hZGRyZXNzKCRzZW5kZXIpOwogCW15IEBhZGRyZXNzZXMgPSAoKTsKIAlvcGVuIG15ICRmaCwgIi18IiwgIiRjbWQgXFEkZmlsZVxFIgogCSAgICBvciBkaWUgIigkcHJlZml4KSBDb3VsZCBub3QgZXhlY3V0ZSAnJGNtZCciOwpAQCAtMTQ2Miw3ICsxNDkyLDcgQEAKIAkJJGFkZHJlc3MgPX4gcy9eXHMqLy9nOwogCQkkYWRkcmVzcyA9fiBzL1xzKiQvL2c7CiAJCSRhZGRyZXNzID0gc2FuaXRpemVfYWRkcmVzcygkYWRkcmVzcyk7Ci0JCW5leHQgaWYgKCRhZGRyZXNzIGVxICRzYW5pdGl6ZWRfc2VuZGVyIGFuZCAkc3VwcHJlc3NfZnJvbSk7CisJCW5leHQgaWYgKCRhZGRyZXNzIGVxICRzZW5kZXIgYW5kICRzdXBwcmVzc19jY3snc2VsZid9KTsKIAkJcHVzaCBAYWRkcmVzc2VzLCAkYWRkcmVzczsKIAkJcHJpbnRmKCIoJHByZWZpeCkgQWRkaW5nICVzOiAlcyBmcm9tOiAnJXMnXG4iLAogCQkgICAgICAgJHdoYXQsICRhZGRyZXNzLCAkY21kKSB1bmxlc3MgJHF1aWV0OwpkaWZmIC0tZ2l0IGEvZ2l0LXNoLXNldHVwLnNoIGIvZ2l0LXNoLXNldHVwLnNoCmluZGV4IDJmNzgzNTkuLjdhOTY0YWQgMTAwNjQ0Ci0tLSBhL2dpdC1zaC1zZXR1cC5zaAorKysgYi9naXQtc2gtc2V0dXAuc2gKQEAgLTMxMywzICszMTMsMTUgQEAKIAl9CiAJOiAke0dJVF9PQkpFQ1RfRElSRUNUT1JZPSIkR0lUX0RJUi9vYmplY3RzIn0KIGZpCisKK3BlZWxfY29tbWl0dGlzaCAoKSB7CisJY2FzZSAiJDEiIGluCisJOi8qKQorCQlwZWVsdG1wPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJDEiKSAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIke3BlZWx0bXB9XjAiCisJCTs7CisJKikKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJHsxfV4wIgorCQk7OworCWVzYWMKK30KZGlmZiAtLWdpdCBhL2dpdC1zdGFzaC5zaCBiL2dpdC1zdGFzaC5zaAppbmRleCBiYmVmZGY2Li44NWM5ZTJjIDEwMDc1NQotLS0gYS9naXQtc3Rhc2guc2gKKysrIGIvZ2l0LXN0YXNoLnNoCkBAIC0xNTYsMTAgKzE1Niw0NiBAQAogCWRpZSAiJChnZXR0ZXh0ICJDYW5ub3QgcmVjb3JkIHdvcmtpbmcgdHJlZSBzdGF0ZSIpIgogfQogCitzdG9yZV9zdGFzaCAoKSB7CisJd2hpbGUgdGVzdCAkIyAhPSAwCisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS1tfC0tbWVzc2FnZSkKKwkJCXNoaWZ0CisJCQlzdGFzaF9tc2c9IiQxIgorCQkJOzsKKwkJLXF8LS1xdWlldCkKKwkJCXF1aWV0PXQKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKwl0ZXN0ICQjID0gMSB8fAorCWRpZSAiJChldmFsX2dldHRleHQgIlwiJGRhc2hsZXNzIHN0b3JlXCIgcmVxdWlyZXMgb25lIDxjb21taXQ+IGFyZ3VtZW50IikiCisKKwl3X2NvbW1pdD0iJDEiCisJaWYgdGVzdCAteiAiJHN0YXNoX21zZyIKKwl0aGVuCisJCXN0YXNoX21zZz0iQ3JlYXRlZCB2aWEgXCJnaXQgc3Rhc2ggc3RvcmVcIi4iCisJZmkKKworCSMgTWFrZSBzdXJlIHRoZSByZWZsb2cgZm9yIHN0YXNoIGlzIGtlcHQuCisJOiA+PiIkR0lUX0RJUi9sb2dzLyRyZWZfc3Rhc2giCisJZ2l0IHVwZGF0ZS1yZWYgLW0gIiRzdGFzaF9tc2ciICRyZWZfc3Rhc2ggJHdfY29tbWl0CisJcmV0PSQ/CisJdGVzdCAkcmV0ICE9IDAgJiYgdGVzdCAteiAkcXVpZXQgJiYKKwlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJDYW5ub3QgdXBkYXRlIFwkcmVmX3N0YXNoIHdpdGggXCR3X2NvbW1pdCIpIgorCXJldHVybiAkcmV0Cit9CisKIHNhdmVfc3Rhc2ggKCkgewogCWtlZXBfaW5kZXg9CiAJcGF0Y2hfbW9kZT0KIAl1bnRyYWNrZWQ9CisJZm9yY2U9CiAJd2hpbGUgdGVzdCAkIyAhPSAwCiAJZG8KIAkJY2FzZSAiJDEiIGluCkBAIC0xODAsNiArMjE2LDkgQEAKIAkJLXV8LS1pbmNsdWRlLXVudHJhY2tlZCkKIAkJCXVudHJhY2tlZD11bnRyYWNrZWQKIAkJCTs7CisJCS1mfC0tZm9yY2UpCisJCQlmb3JjZT10CisJCQk7OwogCQktYXwtLWFsbCkKIAkJCXVudHJhY2tlZD1hbGwKIAkJCTs7CkBAIC0yMjMsMTYgKzI2MiwyMCBAQAogCQlzYXkgIiQoZ2V0dGV4dCAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIikiCiAJCWV4aXQgMAogCWZpCisJaWYgdGVzdCAteiAiJHVudHJhY2tlZCRmb3JjZSIgJiYKKwkgICB0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtLWtpbGxlZCB8IGhlYWQgLW4gMSkiCisJdGhlbgorCQlzYXkgIiQoZ2V0dGV4dCAiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgZmlsZXMgd291bGQgTk9UIGJlIHNhdmVkIGJ1dCBuZWVkIHRvIGJlIHJlbW92ZWQgYnkgc3Rhc2ggc2F2ZToiKSIKKwkJdGVzdCAtbiAiJEdJVF9RVUlFVCIgfHwgZ2l0IGxzLWZpbGVzIC0ta2lsbGVkIHwgc2VkICdzL14vXHQvJworCQlzYXkgIiQoZ2V0dGV4dCAiQWJvcnRpbmcuIENvbnNpZGVyIHVzaW5nIGVpdGhlciB0aGUgLS1mb3JjZSBvciAtLWluY2x1ZGUtdW50cmFja2VkIG9wdGlvbi4iKSIgPiYyCisJCWV4aXQgMQorCWZpCiAJdGVzdCAtZiAiJEdJVF9ESVIvbG9ncy8kcmVmX3N0YXNoIiB8fAogCQljbGVhcl9zdGFzaCB8fCBkaWUgIiQoZ2V0dGV4dCAiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giKSIKIAogCWNyZWF0ZV9zdGFzaCAiJHN0YXNoX21zZyIgJHVudHJhY2tlZAotCi0JIyBNYWtlIHN1cmUgdGhlIHJlZmxvZyBmb3Igc3Rhc2ggaXMga2VwdC4KLQk6ID4+IiRHSVRfRElSL2xvZ3MvJHJlZl9zdGFzaCIKLQotCWdpdCB1cGRhdGUtcmVmIC1tICIkc3Rhc2hfbXNnIiAkcmVmX3N0YXNoICR3X2NvbW1pdCB8fAotCQlkaWUgIiQoZ2V0dGV4dCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIikiCisJc3RvcmVfc3Rhc2ggLW0gIiRzdGFzaF9tc2ciIC1xICR3X2NvbW1pdCB8fAorCWRpZSAiJChnZXR0ZXh0ICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiKSIKIAlzYXkgU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICIkc3Rhc2hfbXNnIgogCiAJaWYgdGVzdCAteiAiJHBhdGNoX21vZGUiCkBAIC01NDYsMTIgKzU4OSwxMyBAQAogCWNsZWFyX3N0YXNoICIkQCIKIAk7OwogY3JlYXRlKQotCWlmIHRlc3QgJCMgLWd0IDAgJiYgdGVzdCAiJDEiID0gY3JlYXRlCi0JdGhlbgotCQlzaGlmdAotCWZpCisJc2hpZnQKIAljcmVhdGVfc3Rhc2ggIiQqIiAmJiBlY2hvICIkd19jb21taXQiCiAJOzsKK3N0b3JlKQorCXNoaWZ0CisJc3RvcmVfc3Rhc2ggIiRAIgorCTs7CiBkcm9wKQogCXNoaWZ0CiAJZHJvcF9zdGFzaCAiJEAiCmRpZmYgLS1naXQgYS9naXQtc3VibW9kdWxlLnNoIGIvZ2l0LXN1Ym1vZHVsZS5zaAppbmRleCA3OWJmYWFjLi4yOTc5MTk3IDEwMDc1NQotLS0gYS9naXQtc3VibW9kdWxlLnNoCisrKyBiL2dpdC1zdWJtb2R1bGUuc2gKQEAgLTE0LDEwICsxNCwxMyBAQAogICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gZm9yZWFjaCBbLS1yZWN1cnNpdmVdIDxjb21tYW5kPgogICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gc3luYyBbLS1yZWN1cnNpdmVdIFstLV0gWzxwYXRoPi4uLl0iCiBPUFRJT05TX1NQRUM9CitTVUJESVJFQ1RPUllfT0s9WWVzCiAuIGdpdC1zaC1zZXR1cAogLiBnaXQtc2gtaTE4bgogLiBnaXQtcGFyc2UtcmVtb3RlCiByZXF1aXJlX3dvcmtfdHJlZQord3RfcHJlZml4PSQoZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4KQorY2RfdG9fdG9wbGV2ZWwKIAogY29tbWFuZD0KIGJyYW5jaD0KQEAgLTMyLDYgKzM1LDcgQEAKIHVwZGF0ZT0KIHByZWZpeD0KIGN1c3RvbV9uYW1lPQorZGVwdGg9CiAKICMgVGhlIGZ1bmN0aW9uIHRha2VzIGF0IG1vc3QgMiBhcmd1bWVudHMuIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUKICMgVVJMIHRoYXQgbmF2aWdhdGVzIHRvIHRoZSBzdWJtb2R1bGUgb3JpZ2luIHJlcG8uIFdoZW4gcmVsYXRpdmUsIHRoaXMgVVJMCkBAIC0xMDYsMTQgKzExMCw1MCBAQAogCWVjaG8gIiR7aXNfcmVsYXRpdmU6KyR7dXBfcGF0aH19JHtyZW1vdGV1cmwjLi99IgogfQogCisjIFJlc29sdmUgYSBwYXRoIHRvIGJlIHJlbGF0aXZlIHRvIGFub3RoZXIgcGF0aC4gIFRoaXMgaXMgaW50ZW5kZWQgZm9yCisjIGNvbnZlcnRpbmcgc3VibW9kdWxlIHBhdGhzIHdoZW4gZ2l0LXN1Ym1vZHVsZSBpcyBydW4gaW4gYSBzdWJkaXJlY3RvcnkKKyMgYW5kIG9ubHkgaGFuZGxlcyBwYXRocyB3aGVyZSB0aGUgZGlyZWN0b3J5IHNlcGFyYXRvciBpcyAnLycuCisjCisjIFRoZSBvdXRwdXQgaXMgdGhlIGZpcnN0IGFyZ3VtZW50IGFzIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgc2Vjb25kIGFyZ3VtZW50LAorIyB3aGljaCBkZWZhdWx0cyB0byAkd3RfcHJlZml4IGlmIGl0IGlzIG9taXR0ZWQuCityZWxhdGl2ZV9wYXRoICgpCit7CisJbG9jYWwgdGFyZ2V0IGN1cmRpciByZXN1bHQKKwl0YXJnZXQ9JDEKKwljdXJkaXI9JHsyLSR3dF9wcmVmaXh9CisJY3VyZGlyPSR7Y3VyZGlyJS99CisJcmVzdWx0PQorCisJd2hpbGUgdGVzdCAtbiAiJGN1cmRpciIKKwlkbworCQljYXNlICIkdGFyZ2V0IiBpbgorCQkiJGN1cmRpci8iKikKKwkJCXRhcmdldD0ke3RhcmdldCMiJGN1cmRpciIvfQorCQkJYnJlYWsKKwkJCTs7CisJCWVzYWMKKworCQlyZXN1bHQ9IiR7cmVzdWx0fS4uLyIKKwkJaWYgdGVzdCAiJGN1cmRpciIgPSAiJHtjdXJkaXIlLyp9IgorCQl0aGVuCisJCQljdXJkaXI9CisJCWVsc2UKKwkJCWN1cmRpcj0iJHtjdXJkaXIlLyp9IgorCQlmaQorCWRvbmUKKworCWVjaG8gIiRyZXN1bHQkdGFyZ2V0IgorfQorCiAjCiAjIEdldCBzdWJtb2R1bGUgaW5mbyBmb3IgcmVnaXN0ZXJlZCBzdWJtb2R1bGVzCiAjICRAID0gcGF0aCB0byBsaW1pdCBzdWJtb2R1bGUgbGlzdAogIwogbW9kdWxlX2xpc3QoKQogeworCWV2YWwgInNldCAkKGdpdCByZXYtcGFyc2UgLS1zcSAtLXByZWZpeCAiJHd0X3ByZWZpeCIgLS0gIiRAIikiCiAJKAotCQlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIC0tc3RhZ2UgLS0gIiRAIiB8fAorCQlnaXQgbHMtZmlsZXMgLXogLS1lcnJvci11bm1hdGNoIC0tc3RhZ2UgLS0gIiRAIiB8fAogCQllY2hvICJ1bm1hdGNoZWQgcGF0aHNwZWMgZXhpc3RzIgogCSkgfAogCXBlcmwgLWUgJwpAQCAtMTIxLDYgKzE2MSw3IEBACiAJbXkgKCRudWxsX3NoYTEpID0gKCIwIiB4IDQwKTsKIAlteSBAb3V0ID0gKCk7CiAJbXkgJHVubWF0Y2hlZCA9IDA7CisJJC8gPSAiXDAiOwogCXdoaWxlICg8U1RESU4+KSB7CiAJCWlmICgvXnVubWF0Y2hlZCBwYXRoc3BlYy8pIHsKIAkJCSR1bm1hdGNoZWQgPSAxOwpAQCAtMjExLDYgKzI1Miw3IEBACiAJbmFtZT0kMgogCXVybD0kMwogCXJlZmVyZW5jZT0iJDQiCisJZGVwdGg9IiQ1IgogCXF1aWV0PQogCWlmIHRlc3QgLW4gIiRHSVRfUVVJRVQiCiAJdGhlbgpAQCAtMjMzLDcgKzI3NSw3IEBACiAJCW1rZGlyIC1wICIkZ2l0ZGlyX2Jhc2UiCiAJCSgKIAkJCWNsZWFyX2xvY2FsX2dpdF9lbnYKLQkJCWdpdCBjbG9uZSAkcXVpZXQgLW4gJHtyZWZlcmVuY2U6KyIkcmVmZXJlbmNlIn0gXAorCQkJZ2l0IGNsb25lICRxdWlldCAke2RlcHRoOisiJGRlcHRoIn0gLW4gJHtyZWZlcmVuY2U6KyIkcmVmZXJlbmNlIn0gXAogCQkJCS0tc2VwYXJhdGUtZ2l0LWRpciAiJGdpdGRpciIgIiR1cmwiICIkc21fcGF0aCIKIAkJKSB8fAogCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJDbG9uZSBvZiAnXCR1cmwnIGludG8gc3VibW9kdWxlIHBhdGggJ1wkc21fcGF0aCcgZmFpbGVkIikiCkBAIC0yODIsNiArMzI0LDcgQEAKIGNtZF9hZGQoKQogewogCSMgcGFyc2UgJGFyZ3MgYWZ0ZXIgInN1Ym1vZHVsZSAuLi4gYWRkIi4KKwlyZWZlcmVuY2VfcGF0aD0KIAl3aGlsZSB0ZXN0ICQjIC1uZSAwCiAJZG8KIAkJY2FzZSAiJDEiIGluCkBAIC0yOTgsMTcgKzM0MSwyNSBAQAogCQkJOzsKIAkJLS1yZWZlcmVuY2UpCiAJCQljYXNlICIkMiIgaW4gJycpIHVzYWdlIDs7IGVzYWMKLQkJCXJlZmVyZW5jZT0iLS1yZWZlcmVuY2U9JDIiCisJCQlyZWZlcmVuY2VfcGF0aD0kMgogCQkJc2hpZnQKIAkJCTs7CiAJCS0tcmVmZXJlbmNlPSopCi0JCQlyZWZlcmVuY2U9IiQxIgorCQkJcmVmZXJlbmNlX3BhdGg9IiR7MSMtLXJlZmVyZW5jZT19IgogCQkJOzsKIAkJLS1uYW1lKQogCQkJY2FzZSAiJDIiIGluICcnKSB1c2FnZSA7OyBlc2FjCiAJCQljdXN0b21fbmFtZT0kMgogCQkJc2hpZnQKIAkJCTs7CisJCS0tZGVwdGgpCisJCQljYXNlICIkMiIgaW4gJycpIHVzYWdlIDs7IGVzYWMKKwkJCWRlcHRoPSItLWRlcHRoPSQyIgorCQkJc2hpZnQKKwkJCTs7CisJCS0tZGVwdGg9KikKKwkJCWRlcHRoPSQxCisJCQk7OwogCQktLSkKIAkJCXNoaWZ0CiAJCQlicmVhawpAQCAtMzIzLDYgKzM3NCwxNCBAQAogCQlzaGlmdAogCWRvbmUKIAorCWlmIHRlc3QgLW4gIiRyZWZlcmVuY2VfcGF0aCIKKwl0aGVuCisJCWlzX2Fic29sdXRlX3BhdGggIiRyZWZlcmVuY2VfcGF0aCIgfHwKKwkJcmVmZXJlbmNlX3BhdGg9IiR3dF9wcmVmaXgkcmVmZXJlbmNlX3BhdGgiCisKKwkJcmVmZXJlbmNlPSItLXJlZmVyZW5jZT0kcmVmZXJlbmNlX3BhdGgiCisJZmkKKwogCXJlcG89JDEKIAlzbV9wYXRoPSQyCiAKQEAgLTMzNSw5ICszOTQsMTQgQEAKIAkJdXNhZ2UKIAlmaQogCisJaXNfYWJzb2x1dGVfcGF0aCAiJHNtX3BhdGgiIHx8IHNtX3BhdGg9IiR3dF9wcmVmaXgkc21fcGF0aCIKKwogCSMgYXNzdXJlIHJlcG8gaXMgYWJzb2x1dGUgb3IgcmVsYXRpdmUgdG8gcGFyZW50CiAJY2FzZSAiJHJlcG8iIGluCiAJLi8qfC4uLyopCisJCXRlc3QgLXogIiR3dF9wcmVmaXgiIHx8CisJCWRpZSAiJChnZXR0ZXh0ICJSZWxhdGl2ZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIpIgorCiAJCSMgZGVyZWZlcmVuY2Ugc291cmNlIHVybCByZWxhdGl2ZSB0byBwYXJlbnQncyB1cmwKIAkJcmVhbHJlcG89JChyZXNvbHZlX3JlbGF0aXZlX3VybCAiJHJlcG8iKSB8fCBleGl0CiAJCTs7CkBAIC00MDUsNyArNDY5LDcgQEAKIAkJCQllY2hvICIkKGV2YWxfZ2V0dGV4dCAiUmVhY3RpdmF0aW5nIGxvY2FsIGdpdCBkaXJlY3RvcnkgZm9yIHN1Ym1vZHVsZSAnXCRzbV9uYW1lJy4iKSIKIAkJCWZpCiAJCWZpCi0JCW1vZHVsZV9jbG9uZSAiJHNtX3BhdGgiICIkc21fbmFtZSIgIiRyZWFscmVwbyIgIiRyZWZlcmVuY2UiIHx8IGV4aXQKKwkJbW9kdWxlX2Nsb25lICIkc21fcGF0aCIgIiRzbV9uYW1lIiAiJHJlYWxyZXBvIiAiJHJlZmVyZW5jZSIgIiRkZXB0aCIgfHwgZXhpdAogCQkoCiAJCQljbGVhcl9sb2NhbF9naXRfZW52CiAJCQljZCAiJHNtX3BhdGgiICYmCkBAIC00NzEsMjEgKzUzNSwyMyBAQAogCQlkaWVfaWZfdW5tYXRjaGVkICIkbW9kZSIKIAkJaWYgdGVzdCAtZSAiJHNtX3BhdGgiLy5naXQKIAkJdGhlbgotCQkJc2F5ICIkKGV2YWxfZ2V0dGV4dCAiRW50ZXJpbmcgJ1wkcHJlZml4XCRzbV9wYXRoJyIpIgorCQkJZGlzcGxheXBhdGg9JChyZWxhdGl2ZV9wYXRoICIkc21fcGF0aCIpCisJCQlzYXkgIiQoZXZhbF9nZXR0ZXh0ICJFbnRlcmluZyAnXCRwcmVmaXhcJGRpc3BsYXlwYXRoJyIpIgogCQkJbmFtZT0kKG1vZHVsZV9uYW1lICIkc21fcGF0aCIpCiAJCQkoCiAJCQkJcHJlZml4PSIkcHJlZml4JHNtX3BhdGgvIgogCQkJCWNsZWFyX2xvY2FsX2dpdF9lbnYKLQkJCQkjIHdlIG1ha2UgJHBhdGggYXZhaWxhYmxlIHRvIHNjcmlwdHMgLi4uCi0JCQkJcGF0aD0kc21fcGF0aAogCQkJCWNkICIkc21fcGF0aCIgJiYKKwkJCQlzbV9wYXRoPSQocmVsYXRpdmVfcGF0aCAiJHNtX3BhdGgiKSAmJgorCQkJCSMgd2UgbWFrZSAkcGF0aCBhdmFpbGFibGUgdG8gc2NyaXB0cyAuLi4KKwkJCQlwYXRoPSRzbV9wYXRoICYmCiAJCQkJZXZhbCAiJEAiICYmCiAJCQkJaWYgdGVzdCAtbiAiJHJlY3Vyc2l2ZSIKIAkJCQl0aGVuCiAJCQkJCWNtZF9mb3JlYWNoICItLXJlY3Vyc2l2ZSIgIiRAIgogCQkJCWZpCiAJCQkpIDwmMyAzPCYtIHx8Ci0JCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJTdG9wcGluZyBhdCAnXCRzbV9wYXRoJzsgc2NyaXB0IHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cy4iKSIKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIlN0b3BwaW5nIGF0ICdcJHByZWZpeFwkZGlzcGxheXBhdGgnOyBzY3JpcHQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzLiIpIgogCQlmaQogCWRvbmUKIH0KQEAgLTUyNCwxMiArNTkwLDE0IEBACiAJCWRpZV9pZl91bm1hdGNoZWQgIiRtb2RlIgogCQluYW1lPSQobW9kdWxlX25hbWUgIiRzbV9wYXRoIikgfHwgZXhpdAogCisJCWRpc3BsYXlwYXRoPSQocmVsYXRpdmVfcGF0aCAiJHNtX3BhdGgiKQorCiAJCSMgQ29weSB1cmwgc2V0dGluZyB3aGVuIGl0IGlzIG5vdCBzZXQgeWV0CiAJCWlmIHRlc3QgLXogIiQoZ2l0IGNvbmZpZyAic3VibW9kdWxlLiRuYW1lLnVybCIpIgogCQl0aGVuCiAJCQl1cmw9JChnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS4iJG5hbWUiLnVybCkKIAkJCXRlc3QgLXogIiR1cmwiICYmCi0JCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICdcJHNtX3BhdGgnIGluIC5naXRtb2R1bGVzIikiCisJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJyBpbiAuZ2l0bW9kdWxlcyIpIgogCiAJCQkjIFBvc3NpYmx5IGEgdXJsIHJlbGF0aXZlIHRvIHBhcmVudAogCQkJY2FzZSAiJHVybCIgaW4KQEAgLTUzOCw5ICs2MDYsOSBAQAogCQkJCTs7CiAJCQllc2FjCiAJCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJG5hbWUiLnVybCAiJHVybCIgfHwKLQkJCWRpZSAiJChldmFsX2dldHRleHQgIkZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICdcJHNtX3BhdGgnIikiCisJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnXCRkaXNwbGF5cGF0aCciKSIKIAotCQkJc2F5ICIkKGV2YWxfZ2V0dGV4dCAiU3VibW9kdWxlICdcJG5hbWUnIChcJHVybCkgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnXCRzbV9wYXRoJyIpIgorCQkJc2F5ICIkKGV2YWxfZ2V0dGV4dCAiU3VibW9kdWxlICdcJG5hbWUnIChcJHVybCkgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnXCRkaXNwbGF5cGF0aCciKSIKIAkJZmkKIAogCQkjIENvcHkgInVwZGF0ZSIgc2V0dGluZyB3aGVuIGl0IGlzIG5vdCBzZXQgeWV0CkBAIC01NDgsNyArNjE2LDcgQEAKIAkJdGVzdCAteiAiJHVwZCIgfHwKIAkJdGVzdCAtbiAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJG5hbWUiLnVwZGF0ZSkiIHx8CiAJCWdpdCBjb25maWcgc3VibW9kdWxlLiIkbmFtZSIudXBkYXRlICIkdXBkIiB8fAotCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXBkYXRlIG1vZGUgZm9yIHN1Ym1vZHVsZSBwYXRoICdcJHNtX3BhdGgnIikiCisJCWRpZSAiJChldmFsX2dldHRleHQgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJ1wkZGlzcGxheXBhdGgnIikiCiAJZG9uZQogfQogCkBAIC01OTQsMjcgKzY2MiwyOSBAQAogCQlkaWVfaWZfdW5tYXRjaGVkICIkbW9kZSIKIAkJbmFtZT0kKG1vZHVsZV9uYW1lICIkc21fcGF0aCIpIHx8IGV4aXQKIAorCQlkaXNwbGF5cGF0aD0kKHJlbGF0aXZlX3BhdGggIiRzbV9wYXRoIikKKwogCQkjIFJlbW92ZSB0aGUgc3VibW9kdWxlIHdvcmsgdHJlZSAodW5sZXNzIHRoZSB1c2VyIGFscmVhZHkgZGlkIGl0KQogCQlpZiB0ZXN0IC1kICIkc21fcGF0aCIKIAkJdGhlbgogCQkJIyBQcm90ZWN0IHN1Ym1vZHVsZXMgY29udGFpbmluZyBhIC5naXQgZGlyZWN0b3J5CiAJCQlpZiB0ZXN0IC1kICIkc21fcGF0aC8uZ2l0IgogCQkJdGhlbgotCQkJCWVjaG8gPiYyICIkKGV2YWxfZ2V0dGV4dCAiU3VibW9kdWxlIHdvcmsgdHJlZSAnXCRzbV9wYXRoJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5IikiCisJCQkJZWNobyA+JjIgIiQoZXZhbF9nZXR0ZXh0ICJTdWJtb2R1bGUgd29yayB0cmVlICdcJGRpc3BsYXlwYXRoJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5IikiCiAJCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiKHVzZSAncm0gLXJmJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlIGl0IGluY2x1ZGluZyBhbGwgb2YgaXRzIGhpc3RvcnkpIikiCiAJCQlmaQogCiAJCQlpZiB0ZXN0IC16ICIkZm9yY2UiCiAJCQl0aGVuCiAJCQkJZ2l0IHJtIC1xbiAiJHNtX3BhdGgiIHx8Ci0JCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiU3VibW9kdWxlIHdvcmsgdHJlZSAnXCRzbV9wYXRoJyBjb250YWlucyBsb2NhbCBtb2RpZmljYXRpb25zOyB1c2UgJy1mJyB0byBkaXNjYXJkIHRoZW0iKSIKKwkJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJTdWJtb2R1bGUgd29yayB0cmVlICdcJGRpc3BsYXlwYXRoJyBjb250YWlucyBsb2NhbCBtb2RpZmljYXRpb25zOyB1c2UgJy1mJyB0byBkaXNjYXJkIHRoZW0iKSIKIAkJCWZpCiAJCQlybSAtcmYgIiRzbV9wYXRoIiAmJgotCQkJc2F5ICIkKGV2YWxfZ2V0dGV4dCAiQ2xlYXJlZCBkaXJlY3RvcnkgJ1wkc21fcGF0aCciKSIgfHwKLQkJCXNheSAiJChldmFsX2dldHRleHQgIkNvdWxkIG5vdCByZW1vdmUgc3VibW9kdWxlIHdvcmsgdHJlZSAnXCRzbV9wYXRoJyIpIgorCQkJc2F5ICIkKGV2YWxfZ2V0dGV4dCAiQ2xlYXJlZCBkaXJlY3RvcnkgJ1wkZGlzcGxheXBhdGgnIikiIHx8CisJCQlzYXkgIiQoZXZhbF9nZXR0ZXh0ICJDb3VsZCBub3QgcmVtb3ZlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgJ1wkZGlzcGxheXBhdGgnIikiCiAJCWZpCiAKLQkJbWtkaXIgIiRzbV9wYXRoIiB8fCBzYXkgIiQoZXZhbF9nZXR0ZXh0ICJDb3VsZCBub3QgY3JlYXRlIGVtcHR5IHN1Ym1vZHVsZSBkaXJlY3RvcnkgJ1wkc21fcGF0aCciKSIKKwkJbWtkaXIgIiRzbV9wYXRoIiB8fCBzYXkgIiQoZXZhbF9nZXR0ZXh0ICJDb3VsZCBub3QgY3JlYXRlIGVtcHR5IHN1Ym1vZHVsZSBkaXJlY3RvcnkgJ1wkZGlzcGxheXBhdGgnIikiCiAKIAkJIyBSZW1vdmUgdGhlIC5naXQvY29uZmlnIGVudHJpZXMgKHVubGVzcyB0aGUgdXNlciBhbHJlYWR5IGRpZCBpdCkKIAkJaWYgdGVzdCAtbiAiJChnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCBzdWJtb2R1bGUuIiRuYW1lXC4iKSIKQEAgLTYyMyw3ICs2OTMsNyBAQAogCQkJIyB0aGUgdXNlciBsYXRlciBkZWNpZGVzIHRvIGluaXQgdGhpcyBzdWJtb2R1bGUgYWdhaW4KIAkJCXVybD0kKGdpdCBjb25maWcgc3VibW9kdWxlLiIkbmFtZSIudXJsKQogCQkJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS4iJG5hbWUiIDI+L2Rldi9udWxsICYmCi0JCQlzYXkgIiQoZXZhbF9nZXR0ZXh0ICJTdWJtb2R1bGUgJ1wkbmFtZScgKFwkdXJsKSB1bnJlZ2lzdGVyZWQgZm9yIHBhdGggJ1wkc21fcGF0aCciKSIKKwkJCXNheSAiJChldmFsX2dldHRleHQgIlN1Ym1vZHVsZSAnXCRuYW1lJyAoXCR1cmwpIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAnXCRkaXNwbGF5cGF0aCciKSIKIAkJZmkKIAlkb25lCiB9CkBAIC02NzYsNiArNzQ2LDE0IEBACiAJCS0tY2hlY2tvdXQpCiAJCQl1cGRhdGU9ImNoZWNrb3V0IgogCQkJOzsKKwkJLS1kZXB0aCkKKwkJCWNhc2UgIiQyIiBpbiAnJykgdXNhZ2UgOzsgZXNhYworCQkJZGVwdGg9Ii0tZGVwdGg9JDIiCisJCQlzaGlmdAorCQkJOzsKKwkJLS1kZXB0aD0qKQorCQkJZGVwdGg9JDEKKwkJCTs7CiAJCS0tKQogCQkJc2hpZnQKIAkJCWJyZWFrCkBAIC03MTcsOSArNzk1LDExIEBACiAJCQl1cGRhdGVfbW9kdWxlPSQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuIiRuYW1lIi51cGRhdGUpCiAJCWZpCiAKKwkJZGlzcGxheXBhdGg9JChyZWxhdGl2ZV9wYXRoICIkcHJlZml4JHNtX3BhdGgiKQorCiAJCWlmIHRlc3QgIiR1cGRhdGVfbW9kdWxlIiA9ICJub25lIgogCQl0aGVuCi0JCQllY2hvICJTa2lwcGluZyBzdWJtb2R1bGUgJyRwcmVmaXgkc21fcGF0aCciCisJCQllY2hvICJTa2lwcGluZyBzdWJtb2R1bGUgJyRkaXNwbGF5cGF0aCciCiAJCQljb250aW51ZQogCQlmaQogCkBAIC03MjgsMjAgKzgwOCwyMCBAQAogCQkJIyBPbmx5IG1lbnRpb24gdW5pbml0aWFsaXplZCBzdWJtb2R1bGVzIHdoZW4gaXRzCiAJCQkjIHBhdGggaGF2ZSBiZWVuIHNwZWNpZmllZAogCQkJdGVzdCAiJCMiICE9ICIwIiAmJgotCQkJc2F5ICIkKGV2YWxfZ2V0dGV4dCAiU3VibW9kdWxlIHBhdGggJ1wkcHJlZml4XCRzbV9wYXRoJyBub3QgaW5pdGlhbGl6ZWQKKwkJCXNheSAiJChldmFsX2dldHRleHQgIlN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJyBub3QgaW5pdGlhbGl6ZWQKIE1heWJlIHlvdSB3YW50IHRvIHVzZSAndXBkYXRlIC0taW5pdCc/IikiCiAJCQljb250aW51ZQogCQlmaQogCiAJCWlmICEgdGVzdCAtZCAiJHNtX3BhdGgiLy5naXQgLW8gLWYgIiRzbV9wYXRoIi8uZ2l0CiAJCXRoZW4KLQkJCW1vZHVsZV9jbG9uZSAiJHNtX3BhdGgiICIkbmFtZSIgIiR1cmwiICIkcmVmZXJlbmNlIiB8fCBleGl0CisJCQltb2R1bGVfY2xvbmUgIiRzbV9wYXRoIiAiJG5hbWUiICIkdXJsIiAiJHJlZmVyZW5jZSIgIiRkZXB0aCIgfHwgZXhpdAogCQkJY2xvbmVkX21vZHVsZXM9IiRjbG9uZWRfbW9kdWxlczskbmFtZSIKIAkJCXN1YnNoYTE9CiAJCWVsc2UKIAkJCXN1YnNoYTE9JChjbGVhcl9sb2NhbF9naXRfZW52OyBjZCAiJHNtX3BhdGgiICYmCiAJCQkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSB8fAotCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiVW5hYmxlIHRvIGZpbmQgY3VycmVudCByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAnXCRwcmVmaXhcJHNtX3BhdGgnIikiCisJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJVbmFibGUgdG8gZmluZCBjdXJyZW50IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJyIpIgogCQlmaQogCiAJCWlmIHRlc3QgLW4gIiRyZW1vdGUiCkBAIC03NzQsNyArODU0LDcgQEAKIAkJCQkoY2xlYXJfbG9jYWxfZ2l0X2VudjsgY2QgIiRzbV9wYXRoIiAmJgogCQkJCQkoIChyZXY9JChnaXQgcmV2LWxpc3QgLW4gMSAkc2hhMSAtLW5vdCAtLWFsbCAyPi9kZXYvbnVsbCkgJiYKIAkJCQkJIHRlc3QgLXogIiRyZXYiKSB8fCBnaXQtZmV0Y2gpKSB8fAotCQkJCWRpZSAiJChldmFsX2dldHRleHQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnXCRwcmVmaXhcJHNtX3BhdGgnIikiCisJCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJyIpIgogCQkJZmkKIAogCQkJIyBJcyB0aGlzIHNvbWV0aGluZyB3ZSBqdXN0IGNsb25lZD8KQEAgLTc4OCwyMCArODY4LDI2IEBACiAJCQljYXNlICIkdXBkYXRlX21vZHVsZSIgaW4KIAkJCXJlYmFzZSkKIAkJCQljb21tYW5kPSJnaXQgcmViYXNlIgotCQkJCWRpZV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJVbmFibGUgdG8gcmViYXNlICdcJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICdcJHByZWZpeFwkc21fcGF0aCciKSIKLQkJCQlzYXlfbXNnPSIkKGV2YWxfZ2V0dGV4dCAiU3VibW9kdWxlIHBhdGggJ1wkcHJlZml4XCRzbV9wYXRoJzogcmViYXNlZCBpbnRvICdcJHNoYTEnIikiCisJCQkJZGllX21zZz0iJChldmFsX2dldHRleHQgIlVuYWJsZSB0byByZWJhc2UgJ1wkc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJ1wkZGlzcGxheXBhdGgnIikiCisJCQkJc2F5X21zZz0iJChldmFsX2dldHRleHQgIlN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJzogcmViYXNlZCBpbnRvICdcJHNoYTEnIikiCiAJCQkJbXVzdF9kaWVfb25fZmFpbHVyZT15ZXMKIAkJCQk7OwogCQkJbWVyZ2UpCiAJCQkJY29tbWFuZD0iZ2l0IG1lcmdlIgotCQkJCWRpZV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJVbmFibGUgdG8gbWVyZ2UgJ1wkc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJ1wkcHJlZml4XCRzbV9wYXRoJyIpIgotCQkJCXNheV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJTdWJtb2R1bGUgcGF0aCAnXCRwcmVmaXhcJHNtX3BhdGgnOiBtZXJnZWQgaW4gJ1wkc2hhMSciKSIKKwkJCQlkaWVfbXNnPSIkKGV2YWxfZ2V0dGV4dCAiVW5hYmxlIHRvIG1lcmdlICdcJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJyIpIgorCQkJCXNheV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJTdWJtb2R1bGUgcGF0aCAnXCRkaXNwbGF5cGF0aCc6IG1lcmdlZCBpbiAnXCRzaGExJyIpIgorCQkJCW11c3RfZGllX29uX2ZhaWx1cmU9eWVzCisJCQkJOzsKKwkJCSEqKQorCQkJCWNvbW1hbmQ9IiR7dXBkYXRlX21vZHVsZSMhfSIKKwkJCQlkaWVfbXNnPSIkKGV2YWxfZ2V0dGV4dCAiRXhlY3V0aW9uIG9mICdcJGNvbW1hbmQgXCRzaGExJyBmYWlsZWQgaW4gc3VibW9kdWxlICBwYXRoICdcJHByZWZpeFwkc21fcGF0aCciKSIKKwkJCQlzYXlfbXNnPSIkKGV2YWxfZ2V0dGV4dCAiU3VibW9kdWxlIHBhdGggJ1wkcHJlZml4XCRzbV9wYXRoJzogJ1wkY29tbWFuZCBcJHNoYTEnIikiCiAJCQkJbXVzdF9kaWVfb25fZmFpbHVyZT15ZXMKIAkJCQk7OwogCQkJKikKIAkJCQljb21tYW5kPSJnaXQgY2hlY2tvdXQgJHN1YmZvcmNlIC1xIgotCQkJCWRpZV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJVbmFibGUgdG8gY2hlY2tvdXQgJ1wkc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJ1wkcHJlZml4XCRzbV9wYXRoJyIpIgotCQkJCXNheV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJTdWJtb2R1bGUgcGF0aCAnXCRwcmVmaXhcJHNtX3BhdGgnOiBjaGVja2VkIG91dCAnXCRzaGExJyIpIgorCQkJCWRpZV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJVbmFibGUgdG8gY2hlY2tvdXQgJ1wkc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJ1wkZGlzcGxheXBhdGgnIikiCisJCQkJc2F5X21zZz0iJChldmFsX2dldHRleHQgIlN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJzogY2hlY2tlZCBvdXQgJ1wkc2hhMSciKSIKIAkJCQk7OwogCQkJZXNhYwogCkBAIC04MjgsNyArOTE0LDcgQEAKIAkJCXJlcz0kPwogCQkJaWYgdGVzdCAkcmVzIC1ndCAwCiAJCQl0aGVuCi0JCQkJZGllX21zZz0iJChldmFsX2dldHRleHQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJ1wkcHJlZml4XCRzbV9wYXRoJyIpIgorCQkJCWRpZV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJyIpIgogCQkJCWlmIHRlc3QgJHJlcyAtZXEgMQogCQkJCXRoZW4KIAkJCQkJZXJyPSIke2Vycn07JGRpZV9tc2ciCkBAIC05NDIsNiArMTAyOCw3IEBACiAJZmkKIAogCWNkX3RvX3RvcGxldmVsCisJZXZhbCAic2V0ICQoZ2l0IHJldi1wYXJzZSAtLXNxIC0tcHJlZml4ICIkd3RfcHJlZml4IiAtLSAiJEAiKSIKIAkjIEdldCBtb2RpZmllZCBtb2R1bGVzIGNhcmVkIGJ5IHVzZXIKIAltb2R1bGVzPSQoZ2l0ICRkaWZmX2NtZCAkY2FjaGVkIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgLS1yYXcgJGhlYWQgLS0gIiRAIiB8CiAJCXNhbmVfZWdyZXAgJ146KFswLTddKiApPzE2MDAwMCcgfApAQCAtOTkxLDE2ICsxMDc4LDE4IEBACiAJCSEgR0lUX0RJUj0iJG5hbWUvLmdpdCIgZ2l0LXJldi1wYXJzZSAtcSAtLXZlcmlmeSAkc2hhMV9kc3ReMCA+L2Rldi9udWxsICYmCiAJCW1pc3NpbmdfZHN0PXQKIAorCQlkaXNwbGF5X25hbWU9JChyZWxhdGl2ZV9wYXRoICIkbmFtZSIpCisKIAkJdG90YWxfY29tbWl0cz0KIAkJY2FzZSAiJG1pc3Npbmdfc3JjLCRtaXNzaW5nX2RzdCIgaW4KIAkJdCwpCi0JCQllcnJtc2c9IiQoZXZhbF9nZXR0ZXh0ICIgIFdhcm46IFwkbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0IFwkc2hhMV9zcmMiKSIKKwkJCWVycm1zZz0iJChldmFsX2dldHRleHQgIiAgV2FybjogXCRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCBcJHNoYTFfc3JjIikiCiAJCQk7OwogCQksdCkKLQkJCWVycm1zZz0iJChldmFsX2dldHRleHQgIiAgV2FybjogXCRuYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgXCRzaGExX2RzdCIpIgorCQkJZXJybXNnPSIkKGV2YWxfZ2V0dGV4dCAiICBXYXJuOiBcJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0IFwkc2hhMV9kc3QiKSIKIAkJCTs7CiAJCXQsdCkKLQkJCWVycm1zZz0iJChldmFsX2dldHRleHQgIiAgV2FybjogXCRuYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXRzIFwkc2hhMV9zcmMgYW5kIFwkc2hhMV9kc3QiKSIKKwkJCWVycm1zZz0iJChldmFsX2dldHRleHQgIiAgV2FybjogXCRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdHMgXCRzaGExX3NyYyBhbmQgXCRzaGExX2RzdCIpIgogCQkJOzsKIAkJKikKIAkJCWVycm1zZz0KQEAgLTEwMjksMTIgKzExMTgsMTIgQEAKIAkJCXN1Ym1vZHVsZT0iJChnZXR0ZXh0ICJzdWJtb2R1bGUiKSIKIAkJCWlmIHRlc3QgJG1vZF9kc3QgPSAxNjAwMDAKIAkJCXRoZW4KLQkJCQllY2hvICIqICRuYW1lICRzaGExX2FiYnJfc3JjKCRibG9iKS0+JHNoYTFfYWJicl9kc3QoJHN1Ym1vZHVsZSkkdG90YWxfY29tbWl0czoiCisJCQkJZWNobyAiKiAkZGlzcGxheV9uYW1lICRzaGExX2FiYnJfc3JjKCRibG9iKS0+JHNoYTFfYWJicl9kc3QoJHN1Ym1vZHVsZSkkdG90YWxfY29tbWl0czoiCiAJCQllbHNlCi0JCQkJZWNobyAiKiAkbmFtZSAkc2hhMV9hYmJyX3NyYygkc3VibW9kdWxlKS0+JHNoYTFfYWJicl9kc3QoJGJsb2IpJHRvdGFsX2NvbW1pdHM6IgorCQkJCWVjaG8gIiogJGRpc3BsYXlfbmFtZSAkc2hhMV9hYmJyX3NyYygkc3VibW9kdWxlKS0+JHNoYTFfYWJicl9kc3QoJGJsb2IpJHRvdGFsX2NvbW1pdHM6IgogCQkJZmkKIAkJZWxzZQotCQkJZWNobyAiKiAkbmFtZSAkc2hhMV9hYmJyX3NyYy4uLiRzaGExX2FiYnJfZHN0JHRvdGFsX2NvbW1pdHM6IgorCQkJZWNobyAiKiAkZGlzcGxheV9uYW1lICRzaGExX2FiYnJfc3JjLi4uJHNoYTFfYWJicl9kc3QkdG90YWxfY29tbWl0czoiCiAJCWZpCiAJCWlmIHRlc3QgLW4gIiRlcnJtc2ciCiAJCXRoZW4KQEAgLTExMTgsNyArMTIwNyw3IEBACiAJCWRpZV9pZl91bm1hdGNoZWQgIiRtb2RlIgogCQluYW1lPSQobW9kdWxlX25hbWUgIiRzbV9wYXRoIikgfHwgZXhpdAogCQl1cmw9JChnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJG5hbWUiLnVybCkKLQkJZGlzcGxheXBhdGg9IiRwcmVmaXgkc21fcGF0aCIKKwkJZGlzcGxheXBhdGg9JChyZWxhdGl2ZV9wYXRoICIkcHJlZml4JHNtX3BhdGgiKQogCQlpZiB0ZXN0ICIkc3RhZ2UiID0gVQogCQl0aGVuCiAJCQlzYXkgIlUkc2hhMSAkZGlzcGxheXBhdGgiCkBAIC0xMTI5LDE2ICsxMjE4LDE2IEBACiAJCQlzYXkgIi0kc2hhMSAkZGlzcGxheXBhdGgiCiAJCQljb250aW51ZTsKIAkJZmkKLQkJc2V0X25hbWVfcmV2ICIkc21fcGF0aCIgIiRzaGExIgogCQlpZiBnaXQgZGlmZi1maWxlcyAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IC0tcXVpZXQgLS0gIiRzbV9wYXRoIgogCQl0aGVuCisJCQlzZXRfbmFtZV9yZXYgIiRzbV9wYXRoIiAiJHNoYTEiCiAJCQlzYXkgIiAkc2hhMSAkZGlzcGxheXBhdGgkcmV2bmFtZSIKIAkJZWxzZQogCQkJaWYgdGVzdCAteiAiJGNhY2hlZCIKIAkJCXRoZW4KIAkJCQlzaGExPSQoY2xlYXJfbG9jYWxfZ2l0X2VudjsgY2QgIiRzbV9wYXRoIiAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCi0JCQkJc2V0X25hbWVfcmV2ICIkc21fcGF0aCIgIiRzaGExIgogCQkJZmkKKwkJCXNldF9uYW1lX3JldiAiJHNtX3BhdGgiICIkc2hhMSIKIAkJCXNheSAiKyRzaGExICRkaXNwbGF5cGF0aCRyZXZuYW1lIgogCQlmaQogCkBAIC0xMjEzLDcgKzEzMDIsOCBAQAogCiAJCWlmIGdpdCBjb25maWcgInN1Ym1vZHVsZS4kbmFtZS51cmwiID4vZGV2L251bGwgMj4vZGV2L251bGwKIAkJdGhlbgotCQkJc2F5ICIkKGV2YWxfZ2V0dGV4dCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnXCRwcmVmaXhcJHNtX3BhdGgnIikiCisJCQlkaXNwbGF5cGF0aD0kKHJlbGF0aXZlX3BhdGggIiRwcmVmaXgkc21fcGF0aCIpCisJCQlzYXkgIiQoZXZhbF9nZXR0ZXh0ICJTeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwgZm9yICdcJGRpc3BsYXlwYXRoJyIpIgogCQkJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuIiRuYW1lIi51cmwgIiRzdXBlcl9jb25maWdfdXJsIgogCiAJCQlpZiB0ZXN0IC1lICIkc21fcGF0aCIvLmdpdApkaWZmIC0tZ2l0IGEvZ2l0LXN2bi5wZXJsIGIvZ2l0LXN2bi5wZXJsCmluZGV4IGQwNzBkZTAuLmZmMWNlM2QgMTAwNzU1Ci0tLSBhL2dpdC1zdm4ucGVybAorKysgYi9naXQtc3ZuLnBlcmwKQEAgLTgzMSw3ICs4MzEsNyBAQAogc3ViIGNtZF9kY29tbWl0IHsKIAlteSAkaGVhZCA9IHNoaWZ0OwogCWNvbW1hbmRfbm9pc3kocXcvdXBkYXRlLWluZGV4IC0tcmVmcmVzaC8pOwotCWdpdF9jbWRfdHJ5IHsgY29tbWFuZF9vbmVsaW5lKHF3L2RpZmYtaW5kZXggLS1xdWlldCBIRUFELykgfQorCWdpdF9jbWRfdHJ5IHsgY29tbWFuZF9vbmVsaW5lKHF3L2RpZmYtaW5kZXggLS1xdWlldCBIRUFEIC0tLykgfQogCQknQ2Fubm90IGRjb21taXQgd2l0aCBhIGRpcnR5IGluZGV4LiAgQ29tbWl0IHlvdXIgY2hhbmdlcyBmaXJzdCwgJwogCQkuICJvciBzdGFzaCB0aGVtIHdpdGggYGdpdCBzdGFzaCcuXG4iOwogCSRoZWFkIHx8PSAnSEVBRCc7CkBAIC0xMjQ2LDcgKzEyNDYsNyBAQAogCQlyZXR1cm47CiAJfQogCWlmIChjb21tYW5kKHF3L2RpZmYtaW5kZXggSEVBRCAtLS8pKSB7Ci0JCXByaW50IFNUREVSUiAiQ2Fubm90IHJlYmFzZSB3aXRoIHVuY29tbWl0ZWQgY2hhbmdlczpcbiI7CisJCXByaW50IFNUREVSUiAiQ2Fubm90IHJlYmFzZSB3aXRoIHVuY29tbWl0dGVkIGNoYW5nZXM6XG4iOwogCQljb21tYW5kX25vaXN5KCdzdGF0dXMnKTsKIAkJZXhpdCAxOwogCX0KQEAgLTE5MzIsNyArMTkzMiw3IEBACiBzdWIgd29ya2luZ19oZWFkX2luZm8gewogCW15ICgkaGVhZCwgJHJlZnMpID0gQF87CiAJbXkgQGFyZ3MgPSBxdy9yZXYtbGlzdCAtLWZpcnN0LXBhcmVudCAtLXByZXR0eT1tZWRpdW0vOwotCW15ICgkZmgsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZShAYXJncywgJGhlYWQpOworCW15ICgkZmgsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZShAYXJncywgJGhlYWQsICItLSIpOwogCW15ICRoYXNoOwogCW15ICVtYXg7CiAJd2hpbGUgKDwkZmg+KSB7CmRpZmYgLS1naXQgYS9naXQtd2ViLS1icm93c2Uuc2ggYi9naXQtd2ViLS1icm93c2Uuc2gKaW5kZXggOWY0NDY3OS4uMWQ3MmVjNyAxMDA3NTUKLS0tIGEvZ2l0LXdlYi0tYnJvd3NlLnNoCisrKyBiL2dpdC13ZWItLWJyb3dzZS5zaApAQCAtMzIsOCArMzIsOSBAQAogdmFsaWRfdG9vbCgpIHsKIAljYXNlICIkMSIgaW4KIAlmaXJlZm94IHwgaWNld2Vhc2VsIHwgc2VhbW9ua2V5IHwgaWNlYXBlIHwgXAotCWNocm9tZSB8IGdvb2dsZS1jaHJvbWUgfCBjaHJvbWl1bSB8IGNocm9taXVtLWJyb3dzZXIgfFwKLQlrb25xdWVyb3IgfCBvcGVyYSB8IHczbSB8IGVsaW5rcyB8IGxpbmtzIHwgbHlueCB8IGRpbGxvIHwgb3BlbiB8IHN0YXJ0KQorCWNocm9tZSB8IGdvb2dsZS1jaHJvbWUgfCBjaHJvbWl1bSB8IGNocm9taXVtLWJyb3dzZXIgfCBcCisJa29ucXVlcm9yIHwgb3BlcmEgfCB3M20gfCBlbGlua3MgfCBsaW5rcyB8IGx5bnggfCBkaWxsbyB8IG9wZW4gfCBcCisJc3RhcnQgfCBjeWdzdGFydCkKIAkJOzsgIyBoYXBweQogCSopCiAJCXZhbGlkX2N1c3RvbV90b29sICIkMSIgfHwgcmV0dXJuIDEKQEAgLTEyNyw2ICsxMjgsMTAgQEAKIAlpZiB0ZXN0IC14IC9iaW4vc3RhcnQ7IHRoZW4KIAkJYnJvd3Nlcl9jYW5kaWRhdGVzPSJzdGFydCAkYnJvd3Nlcl9jYW5kaWRhdGVzIgogCWZpCisJIyAvdXNyL2Jpbi9jeWdzdGFydCBpbmRpY2F0ZXMgQ3lnd2luCisJaWYgdGVzdCAteCAvdXNyL2Jpbi9jeWdzdGFydDsgdGhlbgorCQlicm93c2VyX2NhbmRpZGF0ZXM9ImN5Z3N0YXJ0ICRicm93c2VyX2NhbmRpZGF0ZXMiCisJZmkKIAogCWZvciBpIGluICRicm93c2VyX2NhbmRpZGF0ZXM7IGRvCiAJCWluaXRfYnJvd3Nlcl9wYXRoICRpCkBAIC0xNzQsNyArMTc5LDcgQEAKIAkJOzsKIAllc2FjCiAJOzsKLXczbXxlbGlua3N8bGlua3N8bHlueHxvcGVuKQordzNtfGVsaW5rc3xsaW5rc3xseW54fG9wZW58Y3lnc3RhcnQpCiAJIiRicm93c2VyX3BhdGgiICIkQCIKIAk7Owogc3RhcnQpCmRpZmYgLS1naXQgYS9naXQuYyBiL2dpdC5jCmluZGV4IDFhZGExNjkuLjIwMjVmNzcgMTAwNjQ0Ci0tLSBhL2dpdC5jCisrKyBiL2dpdC5jCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgImhlbHAuaCIKICNpbmNsdWRlICJxdW90ZS5oIgogI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCiAKIGNvbnN0IGNoYXIgZ2l0X3VzYWdlX3N0cmluZ1tdID0KIAkiZ2l0IFstLXZlcnNpb25dIFstLWhlbHBdIFstYyBuYW1lPXZhbHVlXVxuIgpAQCAtMTQ2LDYgKzE0NywxMiBAQAogCQkJc2V0ZW52KEdJVF9MSVRFUkFMX1BBVEhTUEVDU19FTlZJUk9OTUVOVCwgIjAiLCAxKTsKIAkJCWlmIChlbnZjaGFuZ2VkKQogCQkJCSplbnZjaGFuZ2VkID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0tc2hhbGxvdy1maWxlIikpIHsKKwkJCSgqYXJndikrKzsKKwkJCSgqYXJnYyktLTsKKwkJCXNldF9hbHRlcm5hdGVfc2hhbGxvd19maWxlKCgqYXJndilbMF0pOworCQkJaWYgKGVudmNoYW5nZWQpCisJCQkJKmVudmNoYW5nZWQgPSAxOwogCQl9IGVsc2UgewogCQkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9wdGlvbjogJXNcbiIsIGNtZCk7CiAJCQl1c2FnZShnaXRfdXNhZ2Vfc3RyaW5nKTsKQEAgLTMxNyw2ICszMjQsNyBAQAogCQl7ICJjYXQtZmlsZSIsIGNtZF9jYXRfZmlsZSwgUlVOX1NFVFVQIH0sCiAJCXsgImNoZWNrLWF0dHIiLCBjbWRfY2hlY2tfYXR0ciwgUlVOX1NFVFVQIH0sCiAJCXsgImNoZWNrLWlnbm9yZSIsIGNtZF9jaGVja19pZ25vcmUsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJCXsgImNoZWNrLW1haWxtYXAiLCBjbWRfY2hlY2tfbWFpbG1hcCwgUlVOX1NFVFVQIH0sCiAJCXsgImNoZWNrLXJlZi1mb3JtYXQiLCBjbWRfY2hlY2tfcmVmX2Zvcm1hdCB9LAogCQl7ICJjaGVja291dCIsIGNtZF9jaGVja291dCwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKIAkJeyAiY2hlY2tvdXQtaW5kZXgiLCBjbWRfY2hlY2tvdXRfaW5kZXgsCkBAIC01MDcsOCArNTE1LDkgQEAKIH0KIAogCi1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmF2KQogeworCWNvbnN0IGNoYXIgKiphcmd2ID0gKGNvbnN0IGNoYXIgKiopIGF2OwogCWNvbnN0IGNoYXIgKmNtZDsKIAogCXN0YXJ0dXBfaW5mbyA9ICZnaXRfc3RhcnR1cF9pbmZvOwpAQCAtNTE3LDYgKzUyNiwxMyBAQAogCWlmICghY21kKQogCQljbWQgPSAiZ2l0LWhlbHAiOwogCisJLyoKKwkgKiBBbHdheXMgb3BlbiBmaWxlIGRlc2NyaXB0b3JzIDAvMS8yIHRvIGF2b2lkIGNsb2JiZXJpbmcgZmlsZXMKKwkgKiBpbiBkaWUoKS4gIEl0IGFsc28gYXZvaWRzIG1lc3NpbmcgdXAgd2hlbiB0aGUgcGlwZXMgYXJlIGR1cCdlZAorCSAqIG9udG8gc3RkaW4vc3Rkb3V0L3N0ZGVyciBpbiB0aGUgY2hpbGQgcHJvY2Vzc2VzIHdlIHNwYXduLgorCSAqLworCXNhbml0aXplX3N0ZGZkcygpOworCiAJZ2l0X3NldHVwX2dldHRleHQoKTsKIAogCS8qCmRpZmYgLS1naXQgYS9naXQucmMgYi9naXQucmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNlNmRiOQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC5yYwpAQCAtMCwwICsxLDIyIEBACisxIFZFUlNJT05JTkZPCitGSUxFVkVSU0lPTiAgICAgTUFKT1IsTUlOT1IsUEFUQ0gsMAorUFJPRFVDVFZFUlNJT04gIE1BSk9SLE1JTk9SLFBBVENILDAKK0JFR0lOCisgIEJMT0NLICJTdHJpbmdGaWxlSW5mbyIKKyAgQkVHSU4KKyAgICBCTE9DSyAiMDQwOTA0YjAiICAgLyogTEFOR19FTkdMSVNIL1NVQkxBTkdfRU5HTElTSF9VUywgVW5pY29kZSBDUCAqLworICAgIEJFR0lOCisgICAgICBWQUxVRSAiQ29tcGFueU5hbWUiLCAiVGhlIEdpdCBEZXZlbG9wbWVudCBDb21tdW5pdHlcMCIKKyAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiR2l0IGZvciBXaW5kb3dzXDAiCisgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgImdpdFwwIgorICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAiZ2l0LmV4ZVwwIgorICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIkdpdFwwIgorICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgR0lUX1ZFUlNJT04gIlwwIgorICAgIEVORAorICBFTkQKKworICBCTE9DSyAiVmFyRmlsZUluZm8iCisgIEJFR0lOCisgICAgVkFMVUUgIlRyYW5zbGF0aW9uIiwgMHg0MDksIDEyMDAKKyAgRU5ECitFTkQKZGlmZiAtLWdpdCBhL2dpdHdlYi9naXR3ZWIucGVybCBiL2dpdHdlYi9naXR3ZWIucGVybAppbmRleCA4MDk1MGMwLi5mNDI5Zjc1IDEwMDc1NQotLS0gYS9naXR3ZWIvZ2l0d2ViLnBlcmwKKysrIGIvZ2l0d2ViL2dpdHdlYi5wZXJsCkBAIC04NSw2ICs4NSw5IEBACiAjIHN0cmluZyBvZiB0aGUgaG9tZSBsaW5rIG9uIHRvcCBvZiBhbGwgcGFnZXMKIG91ciAkaG9tZV9saW5rX3N0ciA9ICIrK0dJVFdFQl9IT01FX0xJTktfU1RSKysiOwogCisjIGV4dHJhIGJyZWFkY3J1bWJzIHByZWNlZGluZyB0aGUgaG9tZSBsaW5rCitvdXIgQGV4dHJhX2JyZWFkY3J1bWJzID0gKCk7CisKICMgbmFtZSBvZiB5b3VyIHNpdGUgb3Igb3JnYW5pemF0aW9uIHRvIGFwcGVhciBpbiBwYWdlIHRpdGxlcwogIyByZXBsYWNlIHRoaXMgd2l0aCBzb21ldGhpbmcgbW9yZSBkZXNjcmlwdGl2ZSBmb3IgY2xlYXJlciBib29rbWFya3MKIG91ciAkc2l0ZV9uYW1lID0gIisrR0lUV0VCX1NJVEVOQU1FKysiCkBAIC0xMDg2LDcgKzEwODksNyBAQAogCW91ciAkc2VhcmNoX3VzZV9yZWdleHAgPSAkaW5wdXRfcGFyYW1zeydzZWFyY2hfdXNlX3JlZ2V4cCd9OwogCiAJb3VyICRzZWFyY2h0ZXh0ID0gJGlucHV0X3BhcmFtc3snc2VhcmNodGV4dCd9OwotCW91ciAkc2VhcmNoX3JlZ2V4cDsKKwlvdXIgJHNlYXJjaF9yZWdleHAgPSB1bmRlZjsKIAlpZiAoZGVmaW5lZCAkc2VhcmNodGV4dCkgewogCQlpZiAobGVuZ3RoKCRzZWFyY2h0ZXh0KSA8IDIpIHsKIAkJCWRpZV9lcnJvcig0MDMsICJBdCBsZWFzdCB0d28gY2hhcmFjdGVycyBhcmUgcmVxdWlyZWQgZm9yIHNlYXJjaCBwYXJhbWV0ZXIiKTsKQEAgLTM5ODIsNyArMzk4NSw5IEBACiBzdWIgcHJpbnRfbmF2X2JyZWFkY3J1bWJzIHsKIAlteSAlb3B0cyA9IEBfOwogCi0JcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gZXNjX3VybCgkaG9tZV9saW5rKX0sICRob21lX2xpbmtfc3RyKSAuICIgLyAiOworCWZvciBteSAkY3J1bWIgKEBleHRyYV9icmVhZGNydW1icywgWyAkaG9tZV9saW5rX3N0ciA9PiAkaG9tZV9saW5rIF0pIHsKKwkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gZXNjX3VybCgkY3J1bWItPlsxXSl9LCAkY3J1bWItPlswXSkgLiAiIC8gIjsKKwl9CiAJaWYgKGRlZmluZWQgJHByb2plY3QpIHsKIAkJbXkgQGRpcm5hbWUgPSBzcGxpdCAnLycsICRwcm9qZWN0OwogCQlteSAkcHJvamVjdGJhc2VuYW1lID0gcG9wIEBkaXJuYW1lOwpkaWZmIC0tZ2l0IGEvaGVscC5jIGIvaGVscC5jCmluZGV4IDAyYmEwNDMuLjA4YzU0ZWYgMTAwNjQ0Ci0tLSBhL2hlbHAuYworKysgYi9oZWxwLmMKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKICNpbmNsdWRlICJjb2x1bW4uaCIKICNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAicmVmcy5oIgogCiB2b2lkIGFkZF9jbWRuYW1lKHN0cnVjdCBjbWRuYW1lcyAqY21kcywgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKIHsKQEAgLTEwNiw3ICsxMDcsNyBAQAogCSAgICAhU19JU1JFRyhzdC5zdF9tb2RlKSkKIAkJcmV0dXJuIDA7CiAKLSNpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCisjaWYgZGVmaW5lZChHSVRfV0lORE9XU19OQVRJVkUpIHx8IGRlZmluZWQoX19DWUdXSU5fXykKICNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCiBpZiAoKHN0LnN0X21vZGUgJiBTX0lYVVNSKSA9PSAwKQogI2VuZGlmCkBAIC00MDQsMyArNDA1LDUyIEBACiAJcHJpbnRmKCJnaXQgdmVyc2lvbiAlc1xuIiwgZ2l0X3ZlcnNpb25fc3RyaW5nKTsKIAlyZXR1cm4gMDsKIH0KKworc3RydWN0IHNpbWlsYXJfcmVmX2NiIHsKKwljb25zdCBjaGFyICpiYXNlX3JlZjsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnNpbWlsYXJfcmVmczsKK307CisKK3N0YXRpYyBpbnQgYXBwZW5kX3NpbWlsYXJfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICAgICBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHNpbWlsYXJfcmVmX2NiICpjYiA9IChzdHJ1Y3Qgc2ltaWxhcl9yZWZfY2IgKikoY2JfZGF0YSk7CisJY2hhciAqYnJhbmNoID0gc3RycmNocihyZWZuYW1lLCAnLycpICsgMTsKKwkvKiBBIHJlbW90ZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBpcyBkZWVtZWQgc2ltaWxhciAqLworCWlmICghcHJlZml4Y21wKHJlZm5hbWUsICJyZWZzL3JlbW90ZXMvIikgJiYKKwkgICAgIXN0cmNtcChicmFuY2gsIGNiLT5iYXNlX3JlZikpCisJCXN0cmluZ19saXN0X2FwcGVuZChjYi0+c2ltaWxhcl9yZWZzLAorCQkJCSAgIHJlZm5hbWUgKyBzdHJsZW4oInJlZnMvcmVtb3Rlcy8iKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZ3Vlc3NfcmVmcyhjb25zdCBjaGFyICpyZWYpCit7CisJc3RydWN0IHNpbWlsYXJfcmVmX2NiIHJlZl9jYjsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc2ltaWxhcl9yZWZzID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKworCXJlZl9jYi5iYXNlX3JlZiA9IHJlZjsKKwlyZWZfY2Iuc2ltaWxhcl9yZWZzID0gJnNpbWlsYXJfcmVmczsKKwlmb3JfZWFjaF9yZWYoYXBwZW5kX3NpbWlsYXJfcmVmLCAmcmVmX2NiKTsKKwlyZXR1cm4gc2ltaWxhcl9yZWZzOworfQorCit2b2lkIGhlbHBfdW5rbm93bl9yZWYoY29uc3QgY2hhciAqcmVmLCBjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKmVycm9yKQoreworCWludCBpOworCXN0cnVjdCBzdHJpbmdfbGlzdCBzdWdnZXN0ZWRfcmVmcyA9IGd1ZXNzX3JlZnMocmVmKTsKKworCWZwcmludGZfbG4oc3RkZXJyLCBfKCIlczogJXMgLSAlcyIpLCBjbWQsIHJlZiwgZXJyb3IpOworCisJaWYgKHN1Z2dlc3RlZF9yZWZzLm5yID4gMCkgeworCQlmcHJpbnRmX2xuKHN0ZGVyciwKKwkJCSAgIFFfKCJcbkRpZCB5b3UgbWVhbiB0aGlzPyIsCisJCQkgICAgICAiXG5EaWQgeW91IG1lYW4gb25lIG9mIHRoZXNlPyIsCisJCQkgICAgICBzdWdnZXN0ZWRfcmVmcy5ucikpOworCQlmb3IgKGkgPSAwOyBpIDwgc3VnZ2VzdGVkX3JlZnMubnI7IGkrKykKKwkJCWZwcmludGYoc3RkZXJyLCAiXHQlc1xuIiwgc3VnZ2VzdGVkX3JlZnMuaXRlbXNbaV0uc3RyaW5nKTsKKwl9CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmc3VnZ2VzdGVkX3JlZnMsIDApOworCWV4aXQoMSk7Cit9CmRpZmYgLS1naXQgYS9oZWxwLmggYi9oZWxwLmgKaW5kZXggMGFlNWExMi4uYjIxZDdjOSAxMDA2NDQKLS0tIGEvaGVscC5oCisrKyBiL2hlbHAuaApAQCAtMjcsNCArMjcsOSBAQAogZXh0ZXJuIGludCBpc19pbl9jbWRsaXN0KHN0cnVjdCBjbWRuYW1lcyAqY21kcywgY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCBsaXN0X2NvbW1hbmRzKHVuc2lnbmVkIGludCBjb2xvcHRzLCBzdHJ1Y3QgY21kbmFtZXMgKm1haW5fY21kcywgc3RydWN0IGNtZG5hbWVzICpvdGhlcl9jbWRzKTsKIAorLyoKKyAqIGNhbGwgdGhpcyB0byBkaWUoKSwgd2hlbiBpdCBpcyBzdXNwZWN0ZWQgdGhhdCB0aGUgdXNlciBtaXN0eXBlZCBhCisgKiByZWYgdG8gdGhlIGNvbW1hbmQsIHRvIGdpdmUgc3VnZ2VzdGVkICJjb3JyZWN0IiByZWZzLgorICovCitleHRlcm4gdm9pZCBoZWxwX3Vua25vd25fcmVmKGNvbnN0IGNoYXIgKnJlZiwgY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICplcnJvcik7CiAjZW5kaWYgLyogSEVMUF9IICovCmRpZmYgLS1naXQgYS9odHRwLWJhY2tlbmQuYyBiL2h0dHAtYmFja2VuZC5jCmluZGV4IDZiODVmZmEuLjAzMjQ0MTcgMTAwNjQ0Ci0tLSBhL2h0dHAtYmFja2VuZC5jCisrKyBiL2h0dHAtYmFja2VuZC5jCkBAIC00MTAsMTQgKzQxMCwxNCBAQAogCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOwogfQogCi1zdGF0aWMgaW50IHNob3dfaGVhZF9yZWYoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKK3N0YXRpYyBpbnQgc2hvd19oZWFkX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAogCWludCBmbGFnLCB2b2lkICpjYl9kYXRhKQogewogCXN0cnVjdCBzdHJidWYgKmJ1ZiA9IGNiX2RhdGE7CiAKIAlpZiAoZmxhZyAmIFJFRl9JU1NZTVJFRikgewotCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwotCQljb25zdCBjaGFyICp0YXJnZXQgPSByZXNvbHZlX3JlZl91bnNhZmUobmFtZSwgc2hhMSwgMSwgTlVMTCk7CisJCXVuc2lnbmVkIGNoYXIgdW51c2VkWzIwXTsKKwkJY29uc3QgY2hhciAqdGFyZ2V0ID0gcmVzb2x2ZV9yZWZfdW5zYWZlKHJlZm5hbWUsIHVudXNlZCwgMSwgTlVMTCk7CiAJCWNvbnN0IGNoYXIgKnRhcmdldF9ub25zID0gc3RyaXBfbmFtZXNwYWNlKHRhcmdldCk7CiAKIAkJc3RyYnVmX2FkZGYoYnVmLCAicmVmOiAlc1xuIiwgdGFyZ2V0X25vbnMpOwpkaWZmIC0tZ2l0IGEvaHR0cC1wdXNoLmMgYi9odHRwLXB1c2guYwppbmRleCAzOTVhOGNmLi42ZGFkMTg4IDEwMDY0NAotLS0gYS9odHRwLXB1c2guYworKysgYi9odHRwLXB1c2guYwpAQCAtNjYzLDcgKzY2Myw3IEBACiAKIHN0YXRpYyBpbnQgYWRkX3NlbmRfcmVxdWVzdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIHN0cnVjdCByZW1vdGVfbG9jayAqbG9jaykKIHsKLQlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCA9IHJlcXVlc3RfcXVldWVfaGVhZDsKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdDsKIAlzdHJ1Y3QgcGFja2VkX2dpdCAqdGFyZ2V0OwogCiAJLyogS2VlcCBsb2NrcyBhY3RpdmUgKi8KZGlmZiAtLWdpdCBhL2h0dHAuYyBiL2h0dHAuYwppbmRleCA5MmFiYTU5Li4yZDA4NmFlIDEwMDY0NAotLS0gYS9odHRwLmMKKysrIGIvaHR0cC5jCkBAIC0yMjgsOSArMjI4LDE1IEBACiAjZWxzZQogCXsKIAkJc3RhdGljIHN0cnVjdCBzdHJidWYgdXAgPSBTVFJCVUZfSU5JVDsKLQkJc3RyYnVmX3Jlc2V0KCZ1cCk7Ci0JCXN0cmJ1Zl9hZGRmKCZ1cCwgIiVzOiVzIiwKLQkJCSAgICBodHRwX2F1dGgudXNlcm5hbWUsIGh0dHBfYXV0aC5wYXNzd29yZCk7CisJCS8qCisJCSAqIE5vdGUgdGhhdCB3ZSBhc3N1bWUgd2Ugb25seSBldmVyIGhhdmUgYSBzaW5nbGUgc2V0IG9mCisJCSAqIGNyZWRlbnRpYWxzIGluIGEgZ2l2ZW4gcHJvZ3JhbSBydW4sIHNvIHdlIGRvIG5vdCBoYXZlCisJCSAqIHRvIHdvcnJ5IGFib3V0IHVwZGF0aW5nIHRoaXMgYnVmZmVyLCBvbmx5IHNldHRpbmcgaXRzCisJCSAqIGluaXRpYWwgdmFsdWUuCisJCSAqLworCQlpZiAoIXVwLmxlbikKKwkJCXN0cmJ1Zl9hZGRmKCZ1cCwgIiVzOiVzIiwKKwkJCQlodHRwX2F1dGgudXNlcm5hbWUsIGh0dHBfYXV0aC5wYXNzd29yZCk7CiAJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1VTRVJQV0QsIHVwLmJ1Zik7CiAJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbWFwLXNlbmQuYyBiL2ltYXAtc2VuZC5jCmluZGV4IGQ5YmNmYjQuLmQ2YjY1ZTIgMTAwNjQ0Ci0tLSBhL2ltYXAtc2VuZC5jCisrKyBiL2ltYXAtc2VuZC5jCkBAIC0yOSw4ICsyOSwxOCBAQAogI2lmZGVmIE5PX09QRU5TU0wKIHR5cGVkZWYgdm9pZCAqU1NMOwogI2Vsc2UKKyNpZmRlZiBBUFBMRV9DT01NT05fQ1JZUFRPCisjaW5jbHVkZSA8Q29tbW9uQ3J5cHRvL0NvbW1vbkhNQUMuaD4KKyNkZWZpbmUgSE1BQ19DVFggQ0NIbWFjQ29udGV4dAorI2RlZmluZSBITUFDX0luaXQoaG1hYywga2V5LCBsZW4sIGFsZ28pIENDSG1hY0luaXQoaG1hYywgYWxnbywga2V5LCBsZW4pCisjZGVmaW5lIEhNQUNfVXBkYXRlIENDSG1hY1VwZGF0ZQorI2RlZmluZSBITUFDX0ZpbmFsKGhtYWMsIGhhc2gsIHB0cikgQ0NIbWFjRmluYWwoaG1hYywgaGFzaCkKKyNkZWZpbmUgSE1BQ19DVFhfY2xlYW51cChpZ25vcmUpCisjZGVmaW5lIEVWUF9tZDUoKSBrQ0NIbWFjQWxnTUQ1CisjZWxzZQogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisjZW5kaWYKICNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2t3c2V0LmMgYi9rd3NldC5jCmluZGV4IDU4MDA5OTkuLmEwZjQ5YjMgMTAwNjQ0Ci0tLSBhL2t3c2V0LmMKKysrIGIva3dzZXQuYwpAQCAtNjUsNyArNjUsNyBAQAogICBzdHJ1Y3QgdHJpZSAqZmFpbDsJCS8qIEFoby1Db3Jhc2ljayBmYWlsdXJlIGZ1bmN0aW9uLiAqLwogICBpbnQgZGVwdGg7CQkJLyogRGVwdGggb2YgdGhpcyBub2RlIGZyb20gdGhlIHJvb3QuICovCiAgIGludCBzaGlmdDsJCQkvKiBTaGlmdCBmdW5jdGlvbiBmb3Igc2VhcmNoIGZhaWx1cmVzLiAqLwotICBpbnQgbWF4c2hpZnQ7CQkJLyogTWF4IHNoaWZ0IG9mIHNlbGYgYW5kIGRlc2NlbmRlbnRzLiAqLworICBpbnQgbWF4c2hpZnQ7CQkJLyogTWF4IHNoaWZ0IG9mIHNlbGYgYW5kIGRlc2NlbmRhbnRzLiAqLwogfTsKIAogLyogU3RydWN0dXJlIHJldHVybmVkIG9wYXF1ZWx5IHRvIHRoZSBjYWxsZXIsIGNvbnRhaW5pbmcgZXZlcnl0aGluZy4gKi8KQEAgLTMwOCw3ICszMDgsNyBAQAogICB0cmVlZmFpbHModHJlZS0+cmxpbmssIGZhaWwsIHJlY291cnNlKTsKIAogICAvKiBGaW5kLCBpbiB0aGUgY2hhaW4gb2YgZmFpbHMgZ29pbmcgYmFjayB0byB0aGUgcm9vdCwgdGhlIGZpcnN0Ci0gICAgIG5vZGUgdGhhdCBoYXMgYSBkZXNjZW5kZW50IG9uIHRoZSBjdXJyZW50IGxhYmVsLiAqLworICAgICBub2RlIHRoYXQgaGFzIGEgZGVzY2VuZGFudCBvbiB0aGUgY3VycmVudCBsYWJlbC4gKi8KICAgd2hpbGUgKGZhaWwpCiAgICAgewogICAgICAgbGluayA9IGZhaWwtPmxpbmtzOwpAQCAtNDI2LDEzICs0MjYsMTMgQEAKIAkgY29tcHV0aW5nIHRoZSBkZWx0YSB0YWJsZSwgZmFpbHVyZSBmdW5jdGlvbiwgYW5kIHNoaWZ0IGZ1bmN0aW9uLiAqLwogICAgICAgZm9yIChjdXJyID0gbGFzdCA9IGt3c2V0LT50cmllOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dCkKIAl7Ci0JICAvKiBFbnF1ZXVlIHRoZSBpbW1lZGlhdGUgZGVzY2VuZGVudHMgaW4gdGhlIGxldmVsIG9yZGVyIHF1ZXVlLiAqLworCSAgLyogRW5xdWV1ZSB0aGUgaW1tZWRpYXRlIGRlc2NlbmRhbnRzIGluIHRoZSBsZXZlbCBvcmRlciBxdWV1ZS4gKi8KIAkgIGVucXVldWUoY3Vyci0+bGlua3MsICZsYXN0KTsKIAogCSAgY3Vyci0+c2hpZnQgPSBrd3NldC0+bWluZDsKIAkgIGN1cnItPm1heHNoaWZ0ID0ga3dzZXQtPm1pbmQ7CiAKLQkgIC8qIFVwZGF0ZSB0aGUgZGVsdGEgdGFibGUgZm9yIHRoZSBkZXNjZW5kZW50cyBvZiB0aGlzIG5vZGUuICovCisJICAvKiBVcGRhdGUgdGhlIGRlbHRhIHRhYmxlIGZvciB0aGUgZGVzY2VuZGFudHMgb2YgdGhpcyBub2RlLiAqLwogCSAgdHJlZWRlbHRhKGN1cnItPmxpbmtzLCBjdXJyLT5kZXB0aCwgZGVsdGEpOwogCiAJICAvKiBDb21wdXRlIHRoZSBmYWlsdXJlIGZ1bmN0aW9uIGZvciB0aGUgZGVzY2VuZGFudHMgb2YgdGhpcyBub2RlLiAqLwpAQCAtNDUwLDcgKzQ1MCw3IEBACiAJCSAgZmFpbC0+c2hpZnQgPSBjdXJyLT5kZXB0aCAtIGZhaWwtPmRlcHRoOwogCiAJICAgICAgLyogSWYgdGhlIGN1cnJlbnQgbm9kZSBpcyBhY2NlcHRpbmcgdGhlbiB0aGUgc2hpZnQgYXQgdGhlCi0JCSBmYWlsIGFuZCBpdHMgZGVzY2VuZGVudHMgc2hvdWxkIGJlIG5vIGxhcmdlciB0aGFuIHRoZQorCQkgZmFpbCBhbmQgaXRzIGRlc2NlbmRhbnRzIHNob3VsZCBiZSBubyBsYXJnZXIgdGhhbiB0aGUKIAkJIGRpZmZlcmVuY2Ugb2YgdGhlaXIgZGVwdGhzLiAqLwogCSAgICAgIGlmIChjdXJyLT5hY2NlcHRpbmcgJiYgZmFpbC0+bWF4c2hpZnQgPiBjdXJyLT5kZXB0aCAtIGZhaWwtPmRlcHRoKQogCQlmYWlsLT5tYXhzaGlmdCA9IGN1cnItPmRlcHRoIC0gZmFpbC0+ZGVwdGg7CmRpZmYgLS1naXQgYS9saW5lLWxvZy5jIGIvbGluZS1sb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmQwMWRjCi0tLSAvZGV2L251bGwKKysrIGIvbGluZS1sb2cuYwpAQCAtMCwwICsxLDEyNzcgQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJsaW5lLXJhbmdlLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkZWNvcmF0ZS5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAibG9nLXRyZWUuaCIKKyNpbmNsdWRlICJncmFwaC5oIgorI2luY2x1ZGUgInVzZXJkaWZmLmgiCisjaW5jbHVkZSAibGluZS1sb2cuaCIKKworc3RhdGljIHZvaWQgcmFuZ2Vfc2V0X2dyb3coc3RydWN0IHJhbmdlX3NldCAqcnMsIHNpemVfdCBleHRyYSkKK3sKKwlBTExPQ19HUk9XKHJzLT5yYW5nZXMsIHJzLT5uciArIGV4dHJhLCBycy0+YWxsb2MpOworfQorCisvKiBFaXRoZXIgaW5pdGlhbGl6YXRpb24gd291bGQgYmUgZmluZSAqLworI2RlZmluZSBSQU5HRV9TRVRfSU5JVCB7MH0KKworc3RhdGljIHZvaWQgcmFuZ2Vfc2V0X2luaXQoc3RydWN0IHJhbmdlX3NldCAqcnMsIHNpemVfdCBwcmVhbGxvYykKK3sKKwlycy0+YWxsb2MgPSBycy0+bnIgPSAwOworCXJzLT5yYW5nZXMgPSBOVUxMOworCWlmIChwcmVhbGxvYykKKwkJcmFuZ2Vfc2V0X2dyb3cocnMsIHByZWFsbG9jKTsKK30KKworc3RhdGljIHZvaWQgcmFuZ2Vfc2V0X3JlbGVhc2Uoc3RydWN0IHJhbmdlX3NldCAqcnMpCit7CisJZnJlZShycy0+cmFuZ2VzKTsKKwlycy0+YWxsb2MgPSBycy0+bnIgPSAwOworCXJzLT5yYW5nZXMgPSBOVUxMOworfQorCisvKiBkc3QgbXVzdCBiZSB1bmluaXRpYWxpemVkISAqLworc3RhdGljIHZvaWQgcmFuZ2Vfc2V0X2NvcHkoc3RydWN0IHJhbmdlX3NldCAqZHN0LCBzdHJ1Y3QgcmFuZ2Vfc2V0ICpzcmMpCit7CisJcmFuZ2Vfc2V0X2luaXQoZHN0LCBzcmMtPm5yKTsKKwltZW1jcHkoZHN0LT5yYW5nZXMsIHNyYy0+cmFuZ2VzLCBzcmMtPm5yKnNpemVvZihzdHJ1Y3QgcmFuZ2Vfc2V0KSk7CisJZHN0LT5uciA9IHNyYy0+bnI7Cit9CitzdGF0aWMgdm9pZCByYW5nZV9zZXRfbW92ZShzdHJ1Y3QgcmFuZ2Vfc2V0ICpkc3QsIHN0cnVjdCByYW5nZV9zZXQgKnNyYykKK3sKKwlyYW5nZV9zZXRfcmVsZWFzZShkc3QpOworCWRzdC0+cmFuZ2VzID0gc3JjLT5yYW5nZXM7CisJZHN0LT5uciA9IHNyYy0+bnI7CisJZHN0LT5hbGxvYyA9IHNyYy0+YWxsb2M7CisJc3JjLT5yYW5nZXMgPSBOVUxMOworCXNyYy0+YWxsb2MgPSBzcmMtPm5yID0gMDsKK30KKworLyogdGFjayBvbiBhIF9uZXdfIHJhbmdlIF9hdCB0aGUgZW5kXyAqLworc3RhdGljIHZvaWQgcmFuZ2Vfc2V0X2FwcGVuZF91bnNhZmUoc3RydWN0IHJhbmdlX3NldCAqcnMsIGxvbmcgYSwgbG9uZyBiKQoreworCWFzc2VydChhIDw9IGIpOworCXJhbmdlX3NldF9ncm93KHJzLCAxKTsKKwlycy0+cmFuZ2VzW3JzLT5ucl0uc3RhcnQgPSBhOworCXJzLT5yYW5nZXNbcnMtPm5yXS5lbmQgPSBiOworCXJzLT5ucisrOworfQorCitzdGF0aWMgdm9pZCByYW5nZV9zZXRfYXBwZW5kKHN0cnVjdCByYW5nZV9zZXQgKnJzLCBsb25nIGEsIGxvbmcgYikKK3sKKwlhc3NlcnQocnMtPm5yID09IDAgfHwgcnMtPnJhbmdlc1tycy0+bnItMV0uZW5kIDw9IGEpOworCXJhbmdlX3NldF9hcHBlbmRfdW5zYWZlKHJzLCBhLCBiKTsKK30KKworc3RhdGljIGludCByYW5nZV9jbXAoY29uc3Qgdm9pZCAqX3IsIGNvbnN0IHZvaWQgKl9zKQoreworCWNvbnN0IHN0cnVjdCByYW5nZSAqciA9IF9yOworCWNvbnN0IHN0cnVjdCByYW5nZSAqcyA9IF9zOworCisJLyogdGhpcyBjb3VsZCBiZSBzaW1wbHkgJ3JldHVybiByLnN0YXJ0LXMuc3RhcnQnLCBidXQgZm9yIHRoZSB0eXBlcyAqLworCWlmIChyLT5zdGFydCA9PSBzLT5zdGFydCkKKwkJcmV0dXJuIDA7CisJaWYgKHItPnN0YXJ0IDwgcy0+c3RhcnQpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIENoZWNrIHRoYXQgdGhlIHJhbmdlcyBhcmUgbm9uLWVtcHR5LCBzb3J0ZWQgYW5kIG5vbi1vdmVybGFwcGluZworICovCitzdGF0aWMgdm9pZCByYW5nZV9zZXRfY2hlY2tfaW52YXJpYW50cyhzdHJ1Y3QgcmFuZ2Vfc2V0ICpycykKK3sKKwlpbnQgaTsKKworCWlmICghcnMpCisJCXJldHVybjsKKworCWlmIChycy0+bnIpCisJCWFzc2VydChycy0+cmFuZ2VzWzBdLnN0YXJ0IDwgcnMtPnJhbmdlc1swXS5lbmQpOworCisJZm9yIChpID0gMTsgaSA8IHJzLT5ucjsgaSsrKSB7CisJCWFzc2VydChycy0+cmFuZ2VzW2ktMV0uZW5kIDwgcnMtPnJhbmdlc1tpXS5zdGFydCk7CisJCWFzc2VydChycy0+cmFuZ2VzW2ldLnN0YXJ0IDwgcnMtPnJhbmdlc1tpXS5lbmQpOworCX0KK30KKworLyoKKyAqIEluLXBsYWNlIHBhc3Mgb2Ygc29ydGluZyBhbmQgbWVyZ2luZyB0aGUgcmFuZ2VzIGluIHRoZSByYW5nZSBzZXQsCisgKiB0byBlc3RhYmxpc2ggdGhlIGludmFyaWFudHMgd2hlbiB3ZSBnZXQgdGhlIHJhbmdlcyBmcm9tIHRoZSB1c2VyCisgKi8KK3N0YXRpYyB2b2lkIHNvcnRfYW5kX21lcmdlX3JhbmdlX3NldChzdHJ1Y3QgcmFuZ2Vfc2V0ICpycykKK3sKKwlpbnQgaTsKKwlpbnQgbyA9IDA7IC8qIG91dHB1dCBjdXJzb3IgKi8KKworCXFzb3J0KHJzLT5yYW5nZXMsIHJzLT5uciwgc2l6ZW9mKHN0cnVjdCByYW5nZSksIHJhbmdlX2NtcCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcnMtPm5yOyBpKyspIHsKKwkJaWYgKHJzLT5yYW5nZXNbaV0uc3RhcnQgPT0gcnMtPnJhbmdlc1tpXS5lbmQpCisJCQljb250aW51ZTsKKwkJaWYgKG8gPiAwICYmIHJzLT5yYW5nZXNbaV0uc3RhcnQgPD0gcnMtPnJhbmdlc1tvLTFdLmVuZCkgeworCQkJaWYgKHJzLT5yYW5nZXNbby0xXS5lbmQgPCBycy0+cmFuZ2VzW2ldLmVuZCkKKwkJCQlycy0+cmFuZ2VzW28tMV0uZW5kID0gcnMtPnJhbmdlc1tpXS5lbmQ7CisJCX0gZWxzZSB7CisJCQlycy0+cmFuZ2VzW29dLnN0YXJ0ID0gcnMtPnJhbmdlc1tpXS5zdGFydDsKKwkJCXJzLT5yYW5nZXNbb10uZW5kID0gcnMtPnJhbmdlc1tpXS5lbmQ7CisJCQlvKys7CisJCX0KKwl9CisJYXNzZXJ0KG8gPD0gcnMtPm5yKTsKKwlycy0+bnIgPSBvOworCisJcmFuZ2Vfc2V0X2NoZWNrX2ludmFyaWFudHMocnMpOworfQorCisvKgorICogVW5pb24gb2YgcmFuZ2Ugc2V0cyAoaS5lLiwgc2V0cyBvZiBsaW5lIG51bWJlcnMpLiAgVXNlZCB0byBtZXJnZQorICogdGhlbSB3aGVuIHNlYXJjaGVzIG1lZXQgYXQgYSBjb21tb24gYW5jZXN0b3IuCisgKgorICogVGhpcyBpcyBhbHNvIHdoZXJlIHRoZSByYW5nZXMgYXJlIGNvbnNvbGlkYXRlZCBpbnRvIGNhbm9uaWNhbCBmb3JtOgorICogb3ZlcmxhcHBpbmcgYW5kIGFkamFjZW50IHJhbmdlcyBhcmUgbWVyZ2VkLCBhbmQgZW1wdHkgcmFuZ2VzIGFyZQorICogcmVtb3ZlZC4KKyAqLworc3RhdGljIHZvaWQgcmFuZ2Vfc2V0X3VuaW9uKHN0cnVjdCByYW5nZV9zZXQgKm91dCwKKwkJCSAgICAgc3RydWN0IHJhbmdlX3NldCAqYSwgc3RydWN0IHJhbmdlX3NldCAqYikKK3sKKwlpbnQgaSA9IDAsIGogPSAwLCBvID0gMDsKKwlzdHJ1Y3QgcmFuZ2UgKnJhID0gYS0+cmFuZ2VzOworCXN0cnVjdCByYW5nZSAqcmIgPSBiLT5yYW5nZXM7CisJLyogY2Fubm90IG1ha2UgYW4gYWxpYXMgb2Ygb3V0LT5yYW5nZXM6IGl0IG1heSBjaGFuZ2UgZHVyaW5nIGdyb3cgKi8KKworCWFzc2VydChvdXQtPm5yID09IDApOworCXdoaWxlIChpIDwgYS0+bnIgfHwgaiA8IGItPm5yKSB7CisJCXN0cnVjdCByYW5nZSAqbmV3OworCQlpZiAoaSA8IGEtPm5yICYmIGogPCBiLT5ucikgeworCQkJaWYgKHJhW2ldLnN0YXJ0IDwgcmJbal0uc3RhcnQpCisJCQkJbmV3ID0gJnJhW2krK107CisJCQllbHNlIGlmIChyYVtpXS5zdGFydCA+IHJiW2pdLnN0YXJ0KQorCQkJCW5ldyA9ICZyYltqKytdOworCQkJZWxzZSBpZiAocmFbaV0uZW5kIDwgcmJbal0uZW5kKQorCQkJCW5ldyA9ICZyYVtpKytdOworCQkJZWxzZQorCQkJCW5ldyA9ICZyYltqKytdOworCQl9IGVsc2UgaWYgKGkgPCBhLT5ucikgICAgICAvKiBiIGV4aGF1c3RlZCAqLworCQkJbmV3ID0gJnJhW2krK107CisJCWVsc2UgICAgICAgICAgICAgICAgICAgICAgIC8qIGEgZXhoYXVzdGVkICovCisJCQluZXcgPSAmcmJbaisrXTsKKwkJaWYgKG5ldy0+c3RhcnQgPT0gbmV3LT5lbmQpCisJCQk7IC8qIGVtcHR5IHJhbmdlICovCisJCWVsc2UgaWYgKCFvIHx8IG91dC0+cmFuZ2VzW28tMV0uZW5kIDwgbmV3LT5zdGFydCkgeworCQkJcmFuZ2Vfc2V0X2dyb3cob3V0LCAxKTsKKwkJCW91dC0+cmFuZ2VzW29dLnN0YXJ0ID0gbmV3LT5zdGFydDsKKwkJCW91dC0+cmFuZ2VzW29dLmVuZCA9IG5ldy0+ZW5kOworCQkJbysrOworCQl9IGVsc2UgaWYgKG91dC0+cmFuZ2VzW28tMV0uZW5kIDwgbmV3LT5lbmQpIHsKKwkJCW91dC0+cmFuZ2VzW28tMV0uZW5kID0gbmV3LT5lbmQ7CisJCX0KKwl9CisJb3V0LT5uciA9IG87Cit9CisKKy8qCisgKiBEaWZmZXJlbmNlIG9mIHJhbmdlIHNldHMgKG91dCA9IGEgXCBiKS4gIFBhc3MgdGhlICJpbnRlcmVzdGluZyIKKyAqIHJhbmdlcyBhcyAnYScgYW5kIHRoZSB0YXJnZXQgc2lkZSBvZiB0aGUgZGlmZiBhcyAnYic6IGl0IHJlbW92ZXMKKyAqIHRoZSByYW5nZXMgZm9yIHdoaWNoIHRoZSBjb21taXQgaXMgcmVzcG9uc2libGUuCisgKi8KK3N0YXRpYyB2b2lkIHJhbmdlX3NldF9kaWZmZXJlbmNlKHN0cnVjdCByYW5nZV9zZXQgKm91dCwKKwkJCQkgIHN0cnVjdCByYW5nZV9zZXQgKmEsIHN0cnVjdCByYW5nZV9zZXQgKmIpCit7CisJaW50IGksIGogPSAgMDsKKwlmb3IgKGkgPSAwOyBpIDwgYS0+bnI7IGkrKykgeworCQlsb25nIHN0YXJ0ID0gYS0+cmFuZ2VzW2ldLnN0YXJ0OworCQlsb25nIGVuZCA9IGEtPnJhbmdlc1tpXS5lbmQ7CisJCXdoaWxlIChzdGFydCA8IGVuZCkgeworCQkJd2hpbGUgKGogPCBiLT5uciAmJiBzdGFydCA+PSBiLT5yYW5nZXNbal0uZW5kKQorCQkJCS8qCisJCQkJICogYTogICAgICAgICB8LS0tLS0tLQorCQkJCSAqIGI6IC0tLS0tLXwKKwkJCQkgKi8KKwkJCQlqKys7CisJCQlpZiAoaiA+PSBiLT5uciB8fCBlbmQgPCBiLT5yYW5nZXNbal0uc3RhcnQpIHsKKwkJCQkvKgorCQkJCSAqIGIgZXhoYXVzdGVkLCBvcgorCQkJCSAqIGE6ICAtLS0tfAorCQkJCSAqIGI6ICAgICAgICAgfC0tLS0KKwkJCQkgKi8KKwkJCQlyYW5nZV9zZXRfYXBwZW5kKG91dCwgc3RhcnQsIGVuZCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoc3RhcnQgPj0gYi0+cmFuZ2VzW2pdLnN0YXJ0KSB7CisJCQkJLyoKKwkJCQkgKiBhOiAgICAgfC0tPz8/PworCQkJCSAqIGI6IHwtLS0tLS18CisJCQkJICovCisJCQkJc3RhcnQgPSBiLT5yYW5nZXNbal0uZW5kOworCQkJfSBlbHNlIGlmIChlbmQgPiBiLT5yYW5nZXNbal0uc3RhcnQpIHsKKwkJCQkvKgorCQkJCSAqIGE6IHwtLS0tLXwKKwkJCQkgKiBiOiAgICB8LS0/Pz8/PworCQkJCSAqLworCQkJCWlmIChzdGFydCA8IGItPnJhbmdlc1tqXS5zdGFydCkKKwkJCQkJcmFuZ2Vfc2V0X2FwcGVuZChvdXQsIHN0YXJ0LCBiLT5yYW5nZXNbal0uc3RhcnQpOworCQkJCXN0YXJ0ID0gYi0+cmFuZ2VzW2pdLmVuZDsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZGlmZl9yYW5nZXNfaW5pdChzdHJ1Y3QgZGlmZl9yYW5nZXMgKmRpZmYpCit7CisJcmFuZ2Vfc2V0X2luaXQoJmRpZmYtPnBhcmVudCwgMCk7CisJcmFuZ2Vfc2V0X2luaXQoJmRpZmYtPnRhcmdldCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZmZfcmFuZ2VzX3JlbGVhc2Uoc3RydWN0IGRpZmZfcmFuZ2VzICpkaWZmKQoreworCXJhbmdlX3NldF9yZWxlYXNlKCZkaWZmLT5wYXJlbnQpOworCXJhbmdlX3NldF9yZWxlYXNlKCZkaWZmLT50YXJnZXQpOworfQorCit2b2lkIGxpbmVfbG9nX2RhdGFfaW5pdChzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcikKK3sKKwltZW1zZXQociwgMCwgc2l6ZW9mKHN0cnVjdCBsaW5lX2xvZ19kYXRhKSk7CisJcmFuZ2Vfc2V0X2luaXQoJnItPnJhbmdlcywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGxpbmVfbG9nX2RhdGFfY2xlYXIoc3RydWN0IGxpbmVfbG9nX2RhdGEgKnIpCit7CisJcmFuZ2Vfc2V0X3JlbGVhc2UoJnItPnJhbmdlcyk7CisJaWYgKHItPnBhaXIpCisJCWRpZmZfZnJlZV9maWxlcGFpcihyLT5wYWlyKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9saW5lX2xvZ19kYXRhKHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyKQoreworCXdoaWxlIChyKSB7CisJCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpuZXh0ID0gci0+bmV4dDsKKwkJbGluZV9sb2dfZGF0YV9jbGVhcihyKTsKKwkJZnJlZShyKTsKKwkJciA9IG5leHQ7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGxpbmVfbG9nX2RhdGEgKgorc2VhcmNoX2xpbmVfbG9nX2RhdGEoc3RydWN0IGxpbmVfbG9nX2RhdGEgKmxpc3QsIGNvbnN0IGNoYXIgKnBhdGgsCisJCSAgICAgc3RydWN0IGxpbmVfbG9nX2RhdGEgKippbnNlcnRpb25fcG9pbnQpCit7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnAgPSBsaXN0OworCWlmIChpbnNlcnRpb25fcG9pbnQpCisJCSppbnNlcnRpb25fcG9pbnQgPSBOVUxMOworCXdoaWxlIChwKSB7CisJCWludCBjbXAgPSBzdHJjbXAocC0+cGF0aCwgcGF0aCk7CisJCWlmICghY21wKQorCQkJcmV0dXJuIHA7CisJCWlmIChpbnNlcnRpb25fcG9pbnQgJiYgY21wIDwgMCkKKwkJCSppbnNlcnRpb25fcG9pbnQgPSBwOworCQlwID0gcC0+bmV4dDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBOb3RlOiB0YWtlcyBvd25lcnNoaXAgb2YgJ3BhdGgnLCB3aGljaCBoYXBwZW5zIHRvIGJlIHdoYXQgdGhlIG9ubHkKKyAqIGNhbGxlciBuZWVkcy4KKyAqLworc3RhdGljIHZvaWQgbGluZV9sb2dfZGF0YV9pbnNlcnQoc3RydWN0IGxpbmVfbG9nX2RhdGEgKipsaXN0LAorCQkJCSBjaGFyICpwYXRoLAorCQkJCSBsb25nIGJlZ2luLCBsb25nIGVuZCkKK3sKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqaXA7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnAgPSBzZWFyY2hfbGluZV9sb2dfZGF0YSgqbGlzdCwgcGF0aCwgJmlwKTsKKworCWlmIChwKSB7CisJCXJhbmdlX3NldF9hcHBlbmRfdW5zYWZlKCZwLT5yYW5nZXMsIGJlZ2luLCBlbmQpOworCQlzb3J0X2FuZF9tZXJnZV9yYW5nZV9zZXQoJnAtPnJhbmdlcyk7CisJCWZyZWUocGF0aCk7CisJCXJldHVybjsKKwl9CisKKwlwID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxpbmVfbG9nX2RhdGEpKTsKKwlwLT5wYXRoID0gcGF0aDsKKwlyYW5nZV9zZXRfYXBwZW5kKCZwLT5yYW5nZXMsIGJlZ2luLCBlbmQpOworCXNvcnRfYW5kX21lcmdlX3JhbmdlX3NldCgmcC0+cmFuZ2VzKTsKKwlpZiAoaXApIHsKKwkJcC0+bmV4dCA9IGlwLT5uZXh0OworCQlpcC0+bmV4dCA9IHA7CisJfSBlbHNlIHsKKwkJcC0+bmV4dCA9ICpsaXN0OworCQkqbGlzdCA9IHA7CisJfQorfQorCitzdHJ1Y3QgY29sbGVjdF9kaWZmX2NiZGF0YSB7CisJc3RydWN0IGRpZmZfcmFuZ2VzICpkaWZmOworfTsKKworc3RhdGljIGludCBjb2xsZWN0X2RpZmZfY2IobG9uZyBzdGFydF9hLCBsb25nIGNvdW50X2EsCisJCQkgICBsb25nIHN0YXJ0X2IsIGxvbmcgY291bnRfYiwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNvbGxlY3RfZGlmZl9jYmRhdGEgKmQgPSBkYXRhOworCisJaWYgKGNvdW50X2EgPj0gMCkKKwkJcmFuZ2Vfc2V0X2FwcGVuZCgmZC0+ZGlmZi0+cGFyZW50LCBzdGFydF9hLCBzdGFydF9hICsgY291bnRfYSk7CisJaWYgKGNvdW50X2IgPj0gMCkKKwkJcmFuZ2Vfc2V0X2FwcGVuZCgmZC0+ZGlmZi0+dGFyZ2V0LCBzdGFydF9iLCBzdGFydF9iICsgY291bnRfYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY29sbGVjdF9kaWZmKG1tZmlsZV90ICpwYXJlbnQsIG1tZmlsZV90ICp0YXJnZXQsIHN0cnVjdCBkaWZmX3JhbmdlcyAqb3V0KQoreworCXN0cnVjdCBjb2xsZWN0X2RpZmZfY2JkYXRhIGNiZGF0YSA9IHtOVUxMfTsKKwl4cHBhcmFtX3QgeHBwOworCXhkZW1pdGNvbmZfdCB4ZWNmZzsKKwl4ZGVtaXRjYl90IGVjYjsKKworCW1lbXNldCgmeHBwLCAwLCBzaXplb2YoeHBwKSk7CisJbWVtc2V0KCZ4ZWNmZywgMCwgc2l6ZW9mKHhlY2ZnKSk7CisJeGVjZmcuY3R4bGVuID0geGVjZmcuaW50ZXJodW5rY3R4bGVuID0gMDsKKworCWNiZGF0YS5kaWZmID0gb3V0OworCXhlY2ZnLmh1bmtfZnVuYyA9IGNvbGxlY3RfZGlmZl9jYjsKKwltZW1zZXQoJmVjYiwgMCwgc2l6ZW9mKGVjYikpOworCWVjYi5wcml2ID0gJmNiZGF0YTsKKwl4ZGlfZGlmZihwYXJlbnQsIHRhcmdldCwgJnhwcCwgJnhlY2ZnLCAmZWNiKTsKK30KKworLyoKKyAqIFRoZXNlIGFyZSBoYW5keSBmb3IgZGVidWdnaW5nLiAgUmVtb3ZpbmcgdGhlbSB3aXRoICNpZiAwIHNpbGVuY2VzCisgKiB0aGUgInVudXNlZCBmdW5jdGlvbiIgd2FybmluZy4KKyAqLworI2lmIDAKK3N0YXRpYyB2b2lkIGR1bXBfcmFuZ2Vfc2V0KHN0cnVjdCByYW5nZV9zZXQgKnJzLCBjb25zdCBjaGFyICpkZXNjKQoreworCWludCBpOworCXByaW50ZigicmFuZ2Ugc2V0ICVzICglZCBpdGVtcyk6XG4iLCBkZXNjLCBycy0+bnIpOworCWZvciAoaSA9IDA7IGkgPCBycy0+bnI7IGkrKykKKwkJcHJpbnRmKCJcdFslbGQsJWxkXVxuIiwgcnMtPnJhbmdlc1tpXS5zdGFydCwgcnMtPnJhbmdlc1tpXS5lbmQpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX2xpbmVfbG9nX2RhdGEoc3RydWN0IGxpbmVfbG9nX2RhdGEgKnIpCit7CisJY2hhciBidWZbNDA5Nl07CisJd2hpbGUgKHIpIHsKKwkJc25wcmludGYoYnVmLCA0MDk2LCAiZmlsZSAlc1xuIiwgci0+cGF0aCk7CisJCWR1bXBfcmFuZ2Vfc2V0KCZyLT5yYW5nZXMsIGJ1Zik7CisJCXIgPSByLT5uZXh0OworCX0KK30KKworc3RhdGljIHZvaWQgZHVtcF9kaWZmX3JhbmdlcyhzdHJ1Y3QgZGlmZl9yYW5nZXMgKmRpZmYsIGNvbnN0IGNoYXIgKmRlc2MpCit7CisJaW50IGk7CisJYXNzZXJ0KGRpZmYtPnBhcmVudC5uciA9PSBkaWZmLT50YXJnZXQubnIpOworCXByaW50ZigiZGlmZiByYW5nZXMgJXMgKCVkIGl0ZW1zKTpcbiIsIGRlc2MsIGRpZmYtPnBhcmVudC5ucik7CisJcHJpbnRmKCJcdHBhcmVudFx0dGFyZ2V0XG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlmZi0+cGFyZW50Lm5yOyBpKyspIHsKKwkJcHJpbnRmKCJcdFslbGQsJWxkXVx0WyVsZCwlbGRdXG4iLAorCQkgICAgICAgZGlmZi0+cGFyZW50LnJhbmdlc1tpXS5zdGFydCwKKwkJICAgICAgIGRpZmYtPnBhcmVudC5yYW5nZXNbaV0uZW5kLAorCQkgICAgICAgZGlmZi0+dGFyZ2V0LnJhbmdlc1tpXS5zdGFydCwKKwkJICAgICAgIGRpZmYtPnRhcmdldC5yYW5nZXNbaV0uZW5kKTsKKwl9Cit9CisjZW5kaWYKKworCitzdGF0aWMgaW50IHJhbmdlc19vdmVybGFwKHN0cnVjdCByYW5nZSAqYSwgc3RydWN0IHJhbmdlICpiKQoreworCXJldHVybiAhKGEtPmVuZCA8PSBiLT5zdGFydCB8fCBiLT5lbmQgPD0gYS0+c3RhcnQpOworfQorCisvKgorICogR2l2ZW4gYSBkaWZmIGFuZCB0aGUgc2V0IG9mIGludGVyZXN0aW5nIHJhbmdlcywgZGV0ZXJtaW5lIGFsbCBodW5rcworICogb2YgdGhlIGRpZmYgd2hpY2ggdG91Y2ggKG92ZXJsYXApIGF0IGxlYXN0IG9uZSBvZiB0aGUgaW50ZXJlc3RpbmcKKyAqIHJhbmdlcyBpbiB0aGUgdGFyZ2V0LgorICovCitzdGF0aWMgdm9pZCBkaWZmX3Jhbmdlc19maWx0ZXJfdG91Y2hlZChzdHJ1Y3QgZGlmZl9yYW5nZXMgKm91dCwKKwkJCQkgICAgICAgc3RydWN0IGRpZmZfcmFuZ2VzICpkaWZmLAorCQkJCSAgICAgICBzdHJ1Y3QgcmFuZ2Vfc2V0ICpycykKK3sKKwlpbnQgaSwgaiA9IDA7CisKKwlhc3NlcnQob3V0LT50YXJnZXQubnIgPT0gMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGlmZi0+dGFyZ2V0Lm5yOyBpKyspIHsKKwkJd2hpbGUgKGRpZmYtPnRhcmdldC5yYW5nZXNbaV0uc3RhcnQgPiBycy0+cmFuZ2VzW2pdLmVuZCkgeworCQkJaisrOworCQkJaWYgKGogPT0gcnMtPm5yKQorCQkJCXJldHVybjsKKwkJfQorCQlpZiAocmFuZ2VzX292ZXJsYXAoJmRpZmYtPnRhcmdldC5yYW5nZXNbaV0sICZycy0+cmFuZ2VzW2pdKSkgeworCQkJcmFuZ2Vfc2V0X2FwcGVuZCgmb3V0LT5wYXJlbnQsCisJCQkJCSBkaWZmLT5wYXJlbnQucmFuZ2VzW2ldLnN0YXJ0LAorCQkJCQkgZGlmZi0+cGFyZW50LnJhbmdlc1tpXS5lbmQpOworCQkJcmFuZ2Vfc2V0X2FwcGVuZCgmb3V0LT50YXJnZXQsCisJCQkJCSBkaWZmLT50YXJnZXQucmFuZ2VzW2ldLnN0YXJ0LAorCQkJCQkgZGlmZi0+dGFyZ2V0LnJhbmdlc1tpXS5lbmQpOworCQl9CisJfQorfQorCisvKgorICogQWRqdXN0IHRoZSBsaW5lIGNvdW50cyBpbiAncnMnIHRvIGFjY291bnQgZm9yIHRoZSBsaW5lcworICogYWRkZWQvcmVtb3ZlZCBpbiB0aGUgZGlmZi4KKyAqLworc3RhdGljIHZvaWQgcmFuZ2Vfc2V0X3NoaWZ0X2RpZmYoc3RydWN0IHJhbmdlX3NldCAqb3V0LAorCQkJCSBzdHJ1Y3QgcmFuZ2Vfc2V0ICpycywKKwkJCQkgc3RydWN0IGRpZmZfcmFuZ2VzICpkaWZmKQoreworCWludCBpLCBqID0gMDsKKwlsb25nIG9mZnNldCA9IDA7CisJc3RydWN0IHJhbmdlICpzcmMgPSBycy0+cmFuZ2VzOworCXN0cnVjdCByYW5nZSAqdGFyZ2V0ID0gZGlmZi0+dGFyZ2V0LnJhbmdlczsKKwlzdHJ1Y3QgcmFuZ2UgKnBhcmVudCA9IGRpZmYtPnBhcmVudC5yYW5nZXM7CisKKwlmb3IgKGkgPSAwOyBpIDwgcnMtPm5yOyBpKyspIHsKKwkJd2hpbGUgKGogPCBkaWZmLT50YXJnZXQubnIgJiYgc3JjW2ldLnN0YXJ0ID49IHRhcmdldFtqXS5zdGFydCkgeworCQkJb2Zmc2V0ICs9IChwYXJlbnRbal0uZW5kLXBhcmVudFtqXS5zdGFydCkKKwkJCQktICh0YXJnZXRbal0uZW5kLXRhcmdldFtqXS5zdGFydCk7CisJCQlqKys7CisJCX0KKwkJcmFuZ2Vfc2V0X2FwcGVuZChvdXQsIHNyY1tpXS5zdGFydCtvZmZzZXQsIHNyY1tpXS5lbmQrb2Zmc2V0KTsKKwl9Cit9CisKKy8qCisgKiBHaXZlbiBhIGRpZmYgYW5kIHRoZSBzZXQgb2YgaW50ZXJlc3RpbmcgcmFuZ2VzLCBtYXAgdGhlIHJhbmdlcworICogYWNyb3NzIHRoZSBkaWZmLiAgVGhhdCBpczogb2JzZXJ2ZSB0aGF0IHRoZSB0YXJnZXQgY29tbWl0IHRha2VzCisgKiBibGFtZSBmb3IgYWxsIHRoZSArICh0YXJnZXQtc2lkZSkgcmFuZ2VzLiAgU28gZm9yIGV2ZXJ5IHBhaXIgb2YKKyAqIHJhbmdlcyBpbiB0aGUgZGlmZiB0aGF0IHdhcyB0b3VjaGVkLCB3ZSByZW1vdmUgdGhlIGxhdHRlciBhbmQgYWRkCisgKiBpdHMgcGFyZW50IHNpZGUuCisgKi8KK3N0YXRpYyB2b2lkIHJhbmdlX3NldF9tYXBfYWNyb3NzX2RpZmYoc3RydWN0IHJhbmdlX3NldCAqb3V0LAorCQkJCSAgICAgIHN0cnVjdCByYW5nZV9zZXQgKnJzLAorCQkJCSAgICAgIHN0cnVjdCBkaWZmX3JhbmdlcyAqZGlmZiwKKwkJCQkgICAgICBzdHJ1Y3QgZGlmZl9yYW5nZXMgKip0b3VjaGVkX291dCkKK3sKKwlzdHJ1Y3QgZGlmZl9yYW5nZXMgKnRvdWNoZWQgPSB4bWFsbG9jKHNpemVvZigqdG91Y2hlZCkpOworCXN0cnVjdCByYW5nZV9zZXQgdG1wMSA9IFJBTkdFX1NFVF9JTklUOworCXN0cnVjdCByYW5nZV9zZXQgdG1wMiA9IFJBTkdFX1NFVF9JTklUOworCisJZGlmZl9yYW5nZXNfaW5pdCh0b3VjaGVkKTsKKwlkaWZmX3Jhbmdlc19maWx0ZXJfdG91Y2hlZCh0b3VjaGVkLCBkaWZmLCBycyk7CisJcmFuZ2Vfc2V0X2RpZmZlcmVuY2UoJnRtcDEsIHJzLCAmdG91Y2hlZC0+dGFyZ2V0KTsKKwlyYW5nZV9zZXRfc2hpZnRfZGlmZigmdG1wMiwgJnRtcDEsIGRpZmYpOworCXJhbmdlX3NldF91bmlvbihvdXQsICZ0bXAyLCAmdG91Y2hlZC0+cGFyZW50KTsKKwlyYW5nZV9zZXRfcmVsZWFzZSgmdG1wMSk7CisJcmFuZ2Vfc2V0X3JlbGVhc2UoJnRtcDIpOworCisJKnRvdWNoZWRfb3V0ID0gdG91Y2hlZDsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKmNoZWNrX3NpbmdsZV9jb21taXQoc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCBvYmplY3QgKmNvbW1pdCA9IE5VTEw7CisJaW50IGZvdW5kID0gLTE7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmV2cy0+cGVuZGluZy5ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3QgKm9iaiA9IHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5pdGVtOworCQlpZiAob2JqLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQljb250aW51ZTsKKwkJd2hpbGUgKG9iai0+dHlwZSA9PSBPQkpfVEFHKQorCQkJb2JqID0gZGVyZWZfdGFnKG9iaiwgTlVMTCwgMCk7CisJCWlmIChvYmotPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJCWRpZSgiTm9uIGNvbW1pdCAlcz8iLCByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0ubmFtZSk7CisJCWlmIChjb21taXQpCisJCQlkaWUoIk1vcmUgdGhhbiBvbmUgY29tbWl0IHRvIGRpZyBmcm9tOiAlcyBhbmQgJXM/IiwKKwkJCSAgICByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0ubmFtZSwKKwkJCSAgICByZXZzLT5wZW5kaW5nLm9iamVjdHNbZm91bmRdLm5hbWUpOworCQljb21taXQgPSBvYmo7CisJCWZvdW5kID0gaTsKKwl9CisKKwlpZiAoIWNvbW1pdCkKKwkJZGllKCJObyBjb21taXQgc3BlY2lmaWVkPyIpOworCisJcmV0dXJuIChzdHJ1Y3QgY29tbWl0ICopIGNvbW1pdDsKK30KKworc3RhdGljIHZvaWQgZmlsbF9ibG9iX3NoYTEoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc3BlYykKK3sKKwl1bnNpZ25lZCBtb2RlOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwlpZiAoZ2V0X3RyZWVfZW50cnkoY29tbWl0LT5vYmplY3Quc2hhMSwgc3BlYy0+cGF0aCwKKwkJCSAgIHNoYTEsICZtb2RlKSkKKwkJZGllKCJUaGVyZSBpcyBubyBwYXRoICVzIGluIHRoZSBjb21taXQiLCBzcGVjLT5wYXRoKTsKKwlmaWxsX2ZpbGVzcGVjKHNwZWMsIHNoYTEsIDEsIG1vZGUpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBmaWxsX2xpbmVfZW5kcyhzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc3BlYywgbG9uZyAqbGluZXMsCisJCQkgICB1bnNpZ25lZCBsb25nICoqbGluZV9lbmRzKQoreworCWludCBudW0gPSAwLCBzaXplID0gNTA7CisJbG9uZyBjdXIgPSAwOworCXVuc2lnbmVkIGxvbmcgKmVuZHMgPSBOVUxMOworCWNoYXIgKmRhdGEgPSBOVUxMOworCisJaWYgKGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMoc3BlYywgMCkpCisJCWRpZSgiQ2Fubm90IHJlYWQgYmxvYiAlcyIsIHNoYTFfdG9faGV4KHNwZWMtPnNoYTEpKTsKKworCWVuZHMgPSB4bWFsbG9jKHNpemUgKiBzaXplb2YoKmVuZHMpKTsKKwllbmRzW2N1cisrXSA9IDA7CisJZGF0YSA9IHNwZWMtPmRhdGE7CisJd2hpbGUgKG51bSA8IHNwZWMtPnNpemUpIHsKKwkJaWYgKGRhdGFbbnVtXSA9PSAnXG4nIHx8IG51bSA9PSBzcGVjLT5zaXplIC0gMSkgeworCQkJQUxMT0NfR1JPVyhlbmRzLCAoY3VyICsgMSksIHNpemUpOworCQkJZW5kc1tjdXIrK10gPSBudW07CisJCX0KKwkJbnVtKys7CisJfQorCisJLyogc2hyaW5rIHRoZSBhcnJheSB0byBmaXQgdGhlIGVsZW1lbnRzICovCisJZW5kcyA9IHhyZWFsbG9jKGVuZHMsIGN1ciAqIHNpemVvZigqZW5kcykpOworCSpsaW5lcyA9IGN1ci0xOworCSpsaW5lX2VuZHMgPSBlbmRzOworfQorCitzdHJ1Y3QgbnRoX2xpbmVfY2IgeworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcGVjOworCWxvbmcgbGluZXM7CisJdW5zaWduZWQgbG9uZyAqbGluZV9lbmRzOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKm50aF9saW5lKHZvaWQgKmRhdGEsIGxvbmcgbGluZSkKK3sKKwlzdHJ1Y3QgbnRoX2xpbmVfY2IgKmQgPSBkYXRhOworCWFzc2VydChkICYmIGxpbmUgPD0gZC0+bGluZXMpOworCWFzc2VydChkLT5zcGVjICYmIGQtPnNwZWMtPmRhdGEpOworCisJaWYgKGxpbmUgPT0gMCkKKwkJcmV0dXJuIChjaGFyICopZC0+c3BlYy0+ZGF0YTsKKwllbHNlCisJCXJldHVybiAoY2hhciAqKWQtPnNwZWMtPmRhdGEgKyBkLT5saW5lX2VuZHNbbGluZV0gKyAxOworfQorCitzdGF0aWMgc3RydWN0IGxpbmVfbG9nX2RhdGEgKgorcGFyc2VfbGluZXMoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBjb25zdCBjaGFyICpwcmVmaXgsIHN0cnVjdCBzdHJpbmdfbGlzdCAqYXJncykKK3sKKwlsb25nIGxpbmVzID0gMDsKKwl1bnNpZ25lZCBsb25nICplbmRzID0gTlVMTDsKKwlzdHJ1Y3QgbnRoX2xpbmVfY2IgY2JfZGF0YTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2VzID0gTlVMTDsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgYXJncykgeworCQljb25zdCBjaGFyICpuYW1lX3BhcnQsICpyYW5nZV9wYXJ0OworCQljaGFyICpmdWxsX25hbWU7CisJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcGVjOworCQlsb25nIGJlZ2luID0gMCwgZW5kID0gMDsKKworCQluYW1lX3BhcnQgPSBza2lwX3JhbmdlX2FyZyhpdGVtLT5zdHJpbmcpOworCQlpZiAoIW5hbWVfcGFydCB8fCAqbmFtZV9wYXJ0ICE9ICc6JyB8fCAhbmFtZV9wYXJ0WzFdKQorCQkJZGllKCItTCBhcmd1bWVudCAnJXMnIG5vdCBvZiB0aGUgZm9ybSBzdGFydCxlbmQ6ZmlsZSIsCisJCQkgICAgaXRlbS0+c3RyaW5nKTsKKwkJcmFuZ2VfcGFydCA9IHhzdHJuZHVwKGl0ZW0tPnN0cmluZywgbmFtZV9wYXJ0IC0gaXRlbS0+c3RyaW5nKTsKKwkJbmFtZV9wYXJ0Kys7CisKKwkJZnVsbF9uYW1lID0gcHJlZml4X3BhdGgocHJlZml4LCBwcmVmaXggPyBzdHJsZW4ocHJlZml4KSA6IDAsCisJCQkJCW5hbWVfcGFydCk7CisKKwkJc3BlYyA9IGFsbG9jX2ZpbGVzcGVjKGZ1bGxfbmFtZSk7CisJCWZpbGxfYmxvYl9zaGExKGNvbW1pdCwgc3BlYyk7CisJCWZpbGxfbGluZV9lbmRzKHNwZWMsICZsaW5lcywgJmVuZHMpOworCQljYl9kYXRhLnNwZWMgPSBzcGVjOworCQljYl9kYXRhLmxpbmVzID0gbGluZXM7CisJCWNiX2RhdGEubGluZV9lbmRzID0gZW5kczsKKworCQlpZiAocGFyc2VfcmFuZ2VfYXJnKHJhbmdlX3BhcnQsIG50aF9saW5lLCAmY2JfZGF0YSwKKwkJCQkgICAgbGluZXMsICZiZWdpbiwgJmVuZCwKKwkJCQkgICAgZnVsbF9uYW1lKSkKKwkJCWRpZSgibWFsZm9ybWVkIC1MIGFyZ3VtZW50ICclcyciLCByYW5nZV9wYXJ0KTsKKwkJaWYgKGJlZ2luIDwgMSkKKwkJCWJlZ2luID0gMTsKKwkJaWYgKGVuZCA8IDEpCisJCQllbmQgPSBsaW5lczsKKwkJYmVnaW4tLTsKKwkJaWYgKGxpbmVzIDwgZW5kIHx8IGxpbmVzIDwgYmVnaW4pCisJCQlkaWUoImZpbGUgJXMgaGFzIG9ubHkgJWxkIGxpbmVzIiwgbmFtZV9wYXJ0LCBsaW5lcyk7CisJCWxpbmVfbG9nX2RhdGFfaW5zZXJ0KCZyYW5nZXMsIGZ1bGxfbmFtZSwgYmVnaW4sIGVuZCk7CisKKwkJZnJlZV9maWxlc3BlYyhzcGVjKTsKKwkJZnJlZShlbmRzKTsKKwkJZW5kcyA9IE5VTEw7CisJfQorCisJcmV0dXJuIHJhbmdlczsKK30KKworc3RhdGljIHN0cnVjdCBsaW5lX2xvZ19kYXRhICpsaW5lX2xvZ19kYXRhX2NvcHlfb25lKHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyKQoreworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpyZXQgPSB4bWFsbG9jKHNpemVvZigqcmV0KSk7CisKKwlhc3NlcnQocik7CisJbGluZV9sb2dfZGF0YV9pbml0KHJldCk7CisJcmFuZ2Vfc2V0X2NvcHkoJnJldC0+cmFuZ2VzLCAmci0+cmFuZ2VzKTsKKworCXJldC0+cGF0aCA9IHhzdHJkdXAoci0+cGF0aCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGxpbmVfbG9nX2RhdGEgKgorbGluZV9sb2dfZGF0YV9jb3B5KHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyKQoreworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpyZXQgPSBOVUxMOworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICp0bXAgPSBOVUxMLCAqcHJldiA9IE5VTEw7CisKKwlhc3NlcnQocik7CisJcmV0ID0gdG1wID0gcHJldiA9IGxpbmVfbG9nX2RhdGFfY29weV9vbmUocik7CisJciA9IHItPm5leHQ7CisJd2hpbGUgKHIpIHsKKwkJdG1wID0gbGluZV9sb2dfZGF0YV9jb3B5X29uZShyKTsKKwkJcHJldi0+bmV4dCA9IHRtcDsKKwkJcHJldiA9IHRtcDsKKwkJciA9IHItPm5leHQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogbWVyZ2UgdHdvIHJhbmdlIHNldHMgYWNyb3NzIGZpbGVzICovCitzdGF0aWMgc3RydWN0IGxpbmVfbG9nX2RhdGEgKmxpbmVfbG9nX2RhdGFfbWVyZ2Uoc3RydWN0IGxpbmVfbG9nX2RhdGEgKmEsCisJCQkJCQkgc3RydWN0IGxpbmVfbG9nX2RhdGEgKmIpCit7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKmhlYWQgPSBOVUxMLCAqKnBwID0gJmhlYWQ7CisKKwl3aGlsZSAoYSB8fCBiKSB7CisJCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpzcmM7CisJCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpzcmMyID0gTlVMTDsKKwkJc3RydWN0IGxpbmVfbG9nX2RhdGEgKmQ7CisJCWludCBjbXA7CisJCWlmICghYSkKKwkJCWNtcCA9IDE7CisJCWVsc2UgaWYgKCFiKQorCQkJY21wID0gLTE7CisJCWVsc2UKKwkJCWNtcCA9IHN0cmNtcChhLT5wYXRoLCBiLT5wYXRoKTsKKwkJaWYgKGNtcCA8IDApIHsKKwkJCXNyYyA9IGE7CisJCQlhID0gYS0+bmV4dDsKKwkJfSBlbHNlIGlmIChjbXAgPT0gMCkgeworCQkJc3JjID0gYTsKKwkJCWEgPSBhLT5uZXh0OworCQkJc3JjMiA9IGI7CisJCQliID0gYi0+bmV4dDsKKwkJfSBlbHNlIHsKKwkJCXNyYyA9IGI7CisJCQliID0gYi0+bmV4dDsKKwkJfQorCQlkID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGxpbmVfbG9nX2RhdGEpKTsKKwkJbGluZV9sb2dfZGF0YV9pbml0KGQpOworCQlkLT5wYXRoID0geHN0cmR1cChzcmMtPnBhdGgpOworCQkqcHAgPSBkOworCQlwcCA9ICZkLT5uZXh0OworCQlpZiAoc3JjMikKKwkJCXJhbmdlX3NldF91bmlvbigmZC0+cmFuZ2VzLCAmc3JjLT5yYW5nZXMsICZzcmMyLT5yYW5nZXMpOworCQllbHNlCisJCQlyYW5nZV9zZXRfY29weSgmZC0+cmFuZ2VzLCAmc3JjLT5yYW5nZXMpOworCX0KKworCXJldHVybiBoZWFkOworfQorCitzdGF0aWMgdm9pZCBhZGRfbGluZV9yYW5nZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgIHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyYW5nZSkKK3sKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqb2xkID0gTlVMTDsKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqbmV3ID0gTlVMTDsKKworCW9sZCA9IGxvb2t1cF9kZWNvcmF0aW9uKCZyZXZzLT5saW5lX2xvZ19kYXRhLCAmY29tbWl0LT5vYmplY3QpOworCWlmIChvbGQgJiYgcmFuZ2UpIHsKKwkJbmV3ID0gbGluZV9sb2dfZGF0YV9tZXJnZShvbGQsIHJhbmdlKTsKKwkJZnJlZV9saW5lX2xvZ19kYXRhKG9sZCk7CisJfSBlbHNlIGlmIChyYW5nZSkKKwkJbmV3ID0gbGluZV9sb2dfZGF0YV9jb3B5KHJhbmdlKTsKKworCWlmIChuZXcpCisJCWFkZF9kZWNvcmF0aW9uKCZyZXZzLT5saW5lX2xvZ19kYXRhLCAmY29tbWl0LT5vYmplY3QsIG5ldyk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX2NvbW1pdF9saW5lX3JhbmdlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpyOworCXIgPSBsb29rdXBfZGVjb3JhdGlvbigmcmV2cy0+bGluZV9sb2dfZGF0YSwgJmNvbW1pdC0+b2JqZWN0KTsKKwlpZiAoIXIpCisJCXJldHVybjsKKwlmcmVlX2xpbmVfbG9nX2RhdGEocik7CisJYWRkX2RlY29yYXRpb24oJnJldnMtPmxpbmVfbG9nX2RhdGEsICZjb21taXQtPm9iamVjdCwgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqbG9va3VwX2xpbmVfcmFuZ2Uoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCQkgICAgICAgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpyZXQgPSBOVUxMOworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpkOworCisJcmV0ID0gbG9va3VwX2RlY29yYXRpb24oJnJldnMtPmxpbmVfbG9nX2RhdGEsICZjb21taXQtPm9iamVjdCk7CisKKwlmb3IgKGQgPSByZXQ7IGQ7IGQgPSBkLT5uZXh0KQorCQlyYW5nZV9zZXRfY2hlY2tfaW52YXJpYW50cygmZC0+cmFuZ2VzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgbGluZV9sb2dfaW5pdChzdHJ1Y3QgcmV2X2luZm8gKnJldiwgY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmFyZ3MpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gTlVMTDsKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2U7CisKKwljb21taXQgPSBjaGVja19zaW5nbGVfY29tbWl0KHJldik7CisJcmFuZ2UgPSBwYXJzZV9saW5lcyhjb21taXQsIHByZWZpeCwgYXJncyk7CisJYWRkX2xpbmVfcmFuZ2UocmV2LCBjb21taXQsIHJhbmdlKTsKKworCWlmICghcmV2LT5kaWZmb3B0LmRldGVjdF9yZW5hbWUpIHsKKwkJaW50IGksIGNvdW50ID0gMDsKKwkJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnIgPSByYW5nZTsKKwkJY29uc3QgY2hhciAqKnBhdGhzOworCQl3aGlsZSAocikgeworCQkJY291bnQrKzsKKwkJCXIgPSByLT5uZXh0OworCQl9CisJCXBhdGhzID0geG1hbGxvYygoY291bnQrMSkqc2l6ZW9mKGNoYXIgKikpOworCQlyID0gcmFuZ2U7CisJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCQlwYXRoc1tpXSA9IHhzdHJkdXAoci0+cGF0aCk7CisJCQlyID0gci0+bmV4dDsKKwkJfQorCQlwYXRoc1tjb3VudF0gPSBOVUxMOworCQlpbml0X3BhdGhzcGVjKCZyZXYtPmRpZmZvcHQucGF0aHNwZWMsIHBhdGhzKTsKKwkJZnJlZShwYXRocyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBsb2FkX3RyZWVfZGVzYyhzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLCB2b2lkICoqdHJlZSwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJdW5zaWduZWQgbG9uZyBzaXplOworCSp0cmVlID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uoc2hhMSwgdHJlZV90eXBlLCAmc2l6ZSwgTlVMTCk7CisJaWYgKCEqdHJlZSkKKwkJZGllKCJVbmFibGUgdG8gcmVhZCB0cmVlICglcykiLCBzaGExX3RvX2hleChzaGExKSk7CisJaW5pdF90cmVlX2Rlc2MoZGVzYywgKnRyZWUsIHNpemUpOworfQorCitzdGF0aWMgaW50IGNvdW50X3BhcmVudHMoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsKKwlpbnQgY291bnQgPSAwOworCXdoaWxlIChwYXJlbnRzKSB7CisJCWNvdW50Kys7CisJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0OworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyB2b2lkIG1vdmVfZGlmZl9xdWV1ZShzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKmRzdCwKKwkJCSAgICBzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnNyYykKK3sKKwlhc3NlcnQoc3JjICE9IGRzdCk7CisJbWVtY3B5KGRzdCwgc3JjLCBzaXplb2Yoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0KSk7CisJRElGRl9RVUVVRV9DTEVBUihzcmMpOworfQorCitzdGF0aWMgdm9pZCBmaWx0ZXJfZGlmZnNfZm9yX3BhdGhzKHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyYW5nZSwgaW50IGtlZXBfZGVsZXRpb25zKQoreworCWludCBpOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCBvdXRxOworCURJRkZfUVVFVUVfQ0xFQVIoJm91dHEpOworCisJZm9yIChpID0gMDsgaSA8IGRpZmZfcXVldWVkX2RpZmYubnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IGRpZmZfcXVldWVkX2RpZmYucXVldWVbaV07CisJCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpyZyA9IE5VTEw7CisKKwkJaWYgKCFESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSkgeworCQkJaWYgKGtlZXBfZGVsZXRpb25zKQorCQkJCWRpZmZfcSgmb3V0cSwgcCk7CisJCQllbHNlCisJCQkJZGlmZl9mcmVlX2ZpbGVwYWlyKHApOworCQkJY29udGludWU7CisJCX0KKwkJZm9yIChyZyA9IHJhbmdlOyByZzsgcmcgPSByZy0+bmV4dCkgeworCQkJaWYgKCFzdHJjbXAocmctPnBhdGgsIHAtPnR3by0+cGF0aCkpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKHJnKQorCQkJZGlmZl9xKCZvdXRxLCBwKTsKKwkJZWxzZQorCQkJZGlmZl9mcmVlX2ZpbGVwYWlyKHApOworCX0KKwlmcmVlKGRpZmZfcXVldWVkX2RpZmYucXVldWUpOworCWRpZmZfcXVldWVkX2RpZmYgPSBvdXRxOworfQorCitzdGF0aWMgaW5saW5lIGludCBkaWZmX21pZ2h0X2JlX3JlbmFtZSh2b2lkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBkaWZmX3F1ZXVlZF9kaWZmLm5yOyBpKyspCisJCWlmICghRElGRl9GSUxFX1ZBTElEKGRpZmZfcXVldWVkX2RpZmYucXVldWVbaV0tPm9uZSkpIHsKKwkJCS8qIGZwcmludGYoc3RkZXJyLCAiZGlmZl9taWdodF9iZV9yZW5hbWUgZm91bmQgY3JlYXRpb24gb2Y6ICVzXG4iLCAqLworCQkJLyogCWRpZmZfcXVldWVkX2RpZmYucXVldWVbaV0tPnR3by0+cGF0aCk7ICovCisJCQlyZXR1cm4gMTsKKwkJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBxdWV1ZV9kaWZmcyhzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2UsCisJCQlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsCisJCQlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnF1ZXVlLAorCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgY29tbWl0ICpwYXJlbnQpCit7CisJdm9pZCAqdHJlZTEgPSBOVUxMLCAqdHJlZTIgPSBOVUxMOworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzEsIGRlc2MyOworCisJYXNzZXJ0KGNvbW1pdCk7CisJbG9hZF90cmVlX2Rlc2MoJmRlc2MyLCAmdHJlZTIsIGNvbW1pdC0+dHJlZS0+b2JqZWN0LnNoYTEpOworCWlmIChwYXJlbnQpCisJCWxvYWRfdHJlZV9kZXNjKCZkZXNjMSwgJnRyZWUxLCBwYXJlbnQtPnRyZWUtPm9iamVjdC5zaGExKTsKKwllbHNlCisJCWluaXRfdHJlZV9kZXNjKCZkZXNjMSwgIiIsIDApOworCisJRElGRl9RVUVVRV9DTEVBUigmZGlmZl9xdWV1ZWRfZGlmZik7CisJZGlmZl90cmVlKCZkZXNjMSwgJmRlc2MyLCAiIiwgb3B0KTsKKwlpZiAob3B0LT5kZXRlY3RfcmVuYW1lKSB7CisJCWZpbHRlcl9kaWZmc19mb3JfcGF0aHMocmFuZ2UsIDEpOworCQlpZiAoZGlmZl9taWdodF9iZV9yZW5hbWUoKSkKKwkJCWRpZmZjb3JlX3N0ZChvcHQpOworCQlmaWx0ZXJfZGlmZnNfZm9yX3BhdGhzKHJhbmdlLCAwKTsKKwl9CisJbW92ZV9kaWZmX3F1ZXVlKHF1ZXVlLCAmZGlmZl9xdWV1ZWRfZGlmZik7CisKKwlpZiAodHJlZTEpCisJCWZyZWUodHJlZTEpOworCWlmICh0cmVlMikKKwkJZnJlZSh0cmVlMik7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRfbnRoX2xpbmUobG9uZyBsaW5lLCB1bnNpZ25lZCBsb25nICplbmRzLCB2b2lkICpkYXRhKQoreworCWlmIChsaW5lID09IDApCisJCXJldHVybiAoY2hhciAqKWRhdGE7CisJZWxzZQorCQlyZXR1cm4gKGNoYXIgKilkYXRhICsgZW5kc1tsaW5lXSArIDE7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2xpbmUoY29uc3QgY2hhciAqcHJlZml4LCBjaGFyIGZpcnN0LAorCQkgICAgICAgbG9uZyBsaW5lLCB1bnNpZ25lZCBsb25nICplbmRzLCB2b2lkICpkYXRhLAorCQkgICAgICAgY29uc3QgY2hhciAqY29sb3IsIGNvbnN0IGNoYXIgKnJlc2V0KQoreworCWNoYXIgKmJlZ2luID0gZ2V0X250aF9saW5lKGxpbmUsIGVuZHMsIGRhdGEpOworCWNoYXIgKmVuZCA9IGdldF9udGhfbGluZShsaW5lKzEsIGVuZHMsIGRhdGEpOworCWludCBoYWRfbmwgPSAwOworCisJaWYgKGVuZCA+IGJlZ2luICYmIGVuZFstMV0gPT0gJ1xuJykgeworCQllbmQtLTsKKwkJaGFkX25sID0gMTsKKwl9CisKKwlmcHV0cyhwcmVmaXgsIHN0ZG91dCk7CisJZnB1dHMoY29sb3IsIHN0ZG91dCk7CisJcHV0Y2hhcihmaXJzdCk7CisJZndyaXRlKGJlZ2luLCAxLCBlbmQtYmVnaW4sIHN0ZG91dCk7CisJZnB1dHMocmVzZXQsIHN0ZG91dCk7CisJcHV0Y2hhcignXG4nKTsKKwlpZiAoIWhhZF9ubCkKKwkJZnB1dHMoIlxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbiIsIHN0ZG91dCk7Cit9CisKK3N0YXRpYyBjaGFyICpvdXRwdXRfcHJlZml4KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKK3sKKwljaGFyICpwcmVmaXggPSAiIjsKKworCWlmIChvcHQtPm91dHB1dF9wcmVmaXgpIHsKKwkJc3RydWN0IHN0cmJ1ZiAqc2IgPSBvcHQtPm91dHB1dF9wcmVmaXgob3B0LCBvcHQtPm91dHB1dF9wcmVmaXhfZGF0YSk7CisJCXByZWZpeCA9IHNiLT5idWY7CisJfQorCisJcmV0dXJuIHByZWZpeDsKK30KKworc3RhdGljIHZvaWQgZHVtcF9kaWZmX2hhY2t5X29uZShzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IGxpbmVfbG9nX2RhdGEgKnJhbmdlKQoreworCWludCBpLCBqID0gMDsKKwlsb25nIHBfbGluZXMsIHRfbGluZXM7CisJdW5zaWduZWQgbG9uZyAqcF9lbmRzID0gTlVMTCwgKnRfZW5kcyA9IE5VTEw7CisJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXIgPSByYW5nZS0+cGFpcjsKKwlzdHJ1Y3QgZGlmZl9yYW5nZXMgKmRpZmYgPSAmcmFuZ2UtPmRpZmY7CisKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQgPSAmcmV2LT5kaWZmb3B0OworCWNoYXIgKnByZWZpeCA9IG91dHB1dF9wcmVmaXgob3B0KTsKKwljb25zdCBjaGFyICpjX3Jlc2V0ID0gZGlmZl9nZXRfY29sb3Iob3B0LT51c2VfY29sb3IsIERJRkZfUkVTRVQpOworCWNvbnN0IGNoYXIgKmNfZnJhZyA9IGRpZmZfZ2V0X2NvbG9yKG9wdC0+dXNlX2NvbG9yLCBESUZGX0ZSQUdJTkZPKTsKKwljb25zdCBjaGFyICpjX21ldGEgPSBkaWZmX2dldF9jb2xvcihvcHQtPnVzZV9jb2xvciwgRElGRl9NRVRBSU5GTyk7CisJY29uc3QgY2hhciAqY19vbGQgPSBkaWZmX2dldF9jb2xvcihvcHQtPnVzZV9jb2xvciwgRElGRl9GSUxFX09MRCk7CisJY29uc3QgY2hhciAqY19uZXcgPSBkaWZmX2dldF9jb2xvcihvcHQtPnVzZV9jb2xvciwgRElGRl9GSUxFX05FVyk7CisJY29uc3QgY2hhciAqY19wbGFpbiA9IGRpZmZfZ2V0X2NvbG9yKG9wdC0+dXNlX2NvbG9yLCBESUZGX1BMQUlOKTsKKworCWlmICghcGFpciB8fCAhZGlmZikKKwkJcmV0dXJuOworCisJaWYgKHBhaXItPm9uZS0+c2hhMV92YWxpZCkKKwkJZmlsbF9saW5lX2VuZHMocGFpci0+b25lLCAmcF9saW5lcywgJnBfZW5kcyk7CisJZmlsbF9saW5lX2VuZHMocGFpci0+dHdvLCAmdF9saW5lcywgJnRfZW5kcyk7CisKKwlwcmludGYoIiVzJXNkaWZmIC0tZ2l0IGEvJXMgYi8lcyVzXG4iLCBwcmVmaXgsIGNfbWV0YSwgcGFpci0+b25lLT5wYXRoLCBwYWlyLT50d28tPnBhdGgsIGNfcmVzZXQpOworCXByaW50ZigiJXMlcy0tLSAlcyVzJXNcbiIsIHByZWZpeCwgY19tZXRhLAorCSAgICAgICBwYWlyLT5vbmUtPnNoYTFfdmFsaWQgPyAiYS8iIDogIiIsCisJICAgICAgIHBhaXItPm9uZS0+c2hhMV92YWxpZCA/IHBhaXItPm9uZS0+cGF0aCA6ICIvZGV2L251bGwiLAorCSAgICAgICBjX3Jlc2V0KTsKKwlwcmludGYoIiVzJXMrKysgYi8lcyVzXG4iLCBwcmVmaXgsIGNfbWV0YSwgcGFpci0+dHdvLT5wYXRoLCBjX3Jlc2V0KTsKKwlmb3IgKGkgPSAwOyBpIDwgcmFuZ2UtPnJhbmdlcy5ucjsgaSsrKSB7CisJCWxvbmcgcF9zdGFydCwgcF9lbmQ7CisJCWxvbmcgdF9zdGFydCA9IHJhbmdlLT5yYW5nZXMucmFuZ2VzW2ldLnN0YXJ0OworCQlsb25nIHRfZW5kID0gcmFuZ2UtPnJhbmdlcy5yYW5nZXNbaV0uZW5kOworCQlsb25nIHRfY3VyID0gdF9zdGFydDsKKwkJaW50IGpfbGFzdDsKKworCQl3aGlsZSAoaiA8IGRpZmYtPnRhcmdldC5uciAmJiBkaWZmLT50YXJnZXQucmFuZ2VzW2pdLmVuZCA8IHRfc3RhcnQpCisJCQlqKys7CisJCWlmIChqID09IGRpZmYtPnRhcmdldC5uciB8fCBkaWZmLT50YXJnZXQucmFuZ2VzW2pdLnN0YXJ0ID4gdF9lbmQpCisJCQljb250aW51ZTsKKworCQkvKiBTY2FuIGFoZWFkIHRvIGRldGVybWluZSB0aGUgbGFzdCBkaWZmIHRoYXQgZmFsbHMgaW4gdGhpcyByYW5nZSAqLworCQlqX2xhc3QgPSBqOworCQl3aGlsZSAoal9sYXN0IDwgZGlmZi0+dGFyZ2V0Lm5yICYmIGRpZmYtPnRhcmdldC5yYW5nZXNbal9sYXN0XS5zdGFydCA8IHRfZW5kKQorCQkJal9sYXN0Kys7CisJCWlmIChqX2xhc3QgPiBqKQorCQkJal9sYXN0LS07CisKKwkJLyoKKwkJICogQ29tcHV0ZSBwYXJlbnQgaHVuayBoZWFkZXJzOiB3ZSBrbm93IHRoYXQgdGhlIGRpZmYKKwkJICogaGFzIHRoZSBjb3JyZWN0IGxpbmUgbnVtYmVycyAoYnV0IG5vdCBhbGwgaHVua3MpLgorCQkgKiBTbyBpdCBzdWZmaWNlcyB0byBzaGlmdCB0aGUgc3RhcnQvZW5kIGFjY29yZGluZyB0bworCQkgKiB0aGUgbGluZSBudW1iZXJzIG9mIHRoZSBmaXJzdC9sYXN0IGh1bmsocykgdGhhdAorCQkgKiBmYWxsIGluIHRoaXMgcmFuZ2UuCisJCSAqLworCQlpZiAodF9zdGFydCA8IGRpZmYtPnRhcmdldC5yYW5nZXNbal0uc3RhcnQpCisJCQlwX3N0YXJ0ID0gZGlmZi0+cGFyZW50LnJhbmdlc1tqXS5zdGFydCAtIChkaWZmLT50YXJnZXQucmFuZ2VzW2pdLnN0YXJ0LXRfc3RhcnQpOworCQllbHNlCisJCQlwX3N0YXJ0ID0gZGlmZi0+cGFyZW50LnJhbmdlc1tqXS5zdGFydDsKKwkJaWYgKHRfZW5kID4gZGlmZi0+dGFyZ2V0LnJhbmdlc1tqX2xhc3RdLmVuZCkKKwkJCXBfZW5kID0gZGlmZi0+cGFyZW50LnJhbmdlc1tqX2xhc3RdLmVuZCArICh0X2VuZC1kaWZmLT50YXJnZXQucmFuZ2VzW2pfbGFzdF0uZW5kKTsKKwkJZWxzZQorCQkJcF9lbmQgPSBkaWZmLT5wYXJlbnQucmFuZ2VzW2pfbGFzdF0uZW5kOworCisJCWlmICghcF9zdGFydCAmJiAhcF9lbmQpIHsKKwkJCXBfc3RhcnQgPSAtMTsKKwkJCXBfZW5kID0gLTE7CisJCX0KKworCQkvKiBOb3cgb3V0cHV0IGEgZGlmZiBodW5rIGZvciB0aGlzIHJhbmdlICovCisJCXByaW50ZigiJXMlc0BAIC0lbGQsJWxkICslbGQsJWxkIEBAJXNcbiIsCisJCSAgICAgICBwcmVmaXgsIGNfZnJhZywKKwkJICAgICAgIHBfc3RhcnQrMSwgcF9lbmQtcF9zdGFydCwgdF9zdGFydCsxLCB0X2VuZC10X3N0YXJ0LAorCQkgICAgICAgY19yZXNldCk7CisJCXdoaWxlIChqIDwgZGlmZi0+dGFyZ2V0Lm5yICYmIGRpZmYtPnRhcmdldC5yYW5nZXNbal0uc3RhcnQgPCB0X2VuZCkgeworCQkJaW50IGs7CisJCQlmb3IgKDsgdF9jdXIgPCBkaWZmLT50YXJnZXQucmFuZ2VzW2pdLnN0YXJ0OyB0X2N1cisrKQorCQkJCXByaW50X2xpbmUocHJlZml4LCAnICcsIHRfY3VyLCB0X2VuZHMsIHBhaXItPnR3by0+ZGF0YSwKKwkJCQkJICAgY19wbGFpbiwgY19yZXNldCk7CisJCQlmb3IgKGsgPSBkaWZmLT5wYXJlbnQucmFuZ2VzW2pdLnN0YXJ0OyBrIDwgZGlmZi0+cGFyZW50LnJhbmdlc1tqXS5lbmQ7IGsrKykKKwkJCQlwcmludF9saW5lKHByZWZpeCwgJy0nLCBrLCBwX2VuZHMsIHBhaXItPm9uZS0+ZGF0YSwKKwkJCQkJICAgY19vbGQsIGNfcmVzZXQpOworCQkJZm9yICg7IHRfY3VyIDwgZGlmZi0+dGFyZ2V0LnJhbmdlc1tqXS5lbmQgJiYgdF9jdXIgPCB0X2VuZDsgdF9jdXIrKykKKwkJCQlwcmludF9saW5lKHByZWZpeCwgJysnLCB0X2N1ciwgdF9lbmRzLCBwYWlyLT50d28tPmRhdGEsCisJCQkJCSAgIGNfbmV3LCBjX3Jlc2V0KTsKKwkJCWorKzsKKwkJfQorCQlmb3IgKDsgdF9jdXIgPCB0X2VuZDsgdF9jdXIrKykKKwkJCXByaW50X2xpbmUocHJlZml4LCAnICcsIHRfY3VyLCB0X2VuZHMsIHBhaXItPnR3by0+ZGF0YSwKKwkJCQkgICBjX3BsYWluLCBjX3Jlc2V0KTsKKwl9CisKKwlmcmVlKHBfZW5kcyk7CisJZnJlZSh0X2VuZHMpOworfQorCisvKgorICogTkVFRFNXT1JLOiBtYW51YWxseSBidWlsZGluZyBhIGRpZmYgaGVyZSBpcyBub3QgdGhlIFJpZ2h0CisgKiBUaGluZyh0bSkuICBsb2cgLUwgc2hvdWxkIGJlIGJ1aWx0IGludG8gdGhlIGRpZmYgcGlwZWxpbmUuCisgKi8KK3N0YXRpYyB2b2lkIGR1bXBfZGlmZl9oYWNreShzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IGxpbmVfbG9nX2RhdGEgKnJhbmdlKQoreworCXB1dHMob3V0cHV0X3ByZWZpeCgmcmV2LT5kaWZmb3B0KSk7CisJd2hpbGUgKHJhbmdlKSB7CisJCWR1bXBfZGlmZl9oYWNreV9vbmUocmV2LCByYW5nZSk7CisJCXJhbmdlID0gcmFuZ2UtPm5leHQ7CisJfQorfQorCisvKgorICogVW5saWtlIG1vc3Qgb3RoZXIgZnVuY3Rpb25zLCB0aGlzIGRlc3RydWN0aXZlbHkgb3BlcmF0ZXMgb24KKyAqICdyYW5nZScuCisgKi8KK3N0YXRpYyBpbnQgcHJvY2Vzc19kaWZmX2ZpbGVwYWlyKHN0cnVjdCByZXZfaW5mbyAqcmV2LAorCQkJCSBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpciwKKwkJCQkgc3RydWN0IGxpbmVfbG9nX2RhdGEgKnJhbmdlLAorCQkJCSBzdHJ1Y3QgZGlmZl9yYW5nZXMgKipkaWZmX291dCkKK3sKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmcgPSByYW5nZTsKKwlzdHJ1Y3QgcmFuZ2Vfc2V0IHRtcDsKKwlzdHJ1Y3QgZGlmZl9yYW5nZXMgZGlmZjsKKwltbWZpbGVfdCBmaWxlX3BhcmVudCwgZmlsZV90YXJnZXQ7CisKKwlhc3NlcnQocGFpci0+dHdvLT5wYXRoKTsKKwl3aGlsZSAocmcpIHsKKwkJYXNzZXJ0KHJnLT5wYXRoKTsKKwkJaWYgKCFzdHJjbXAocmctPnBhdGgsIHBhaXItPnR3by0+cGF0aCkpCisJCQlicmVhazsKKwkJcmcgPSByZy0+bmV4dDsKKwl9CisKKwlpZiAoIXJnKQorCQlyZXR1cm4gMDsKKwlpZiAocmctPnJhbmdlcy5uciA9PSAwKQorCQlyZXR1cm4gMDsKKworCWFzc2VydChwYWlyLT50d28tPnNoYTFfdmFsaWQpOworCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMocGFpci0+dHdvLCAwKTsKKwlmaWxlX3RhcmdldC5wdHIgPSBwYWlyLT50d28tPmRhdGE7CisJZmlsZV90YXJnZXQuc2l6ZSA9IHBhaXItPnR3by0+c2l6ZTsKKworCWlmIChwYWlyLT5vbmUtPnNoYTFfdmFsaWQpIHsKKwkJZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhwYWlyLT5vbmUsIDApOworCQlmaWxlX3BhcmVudC5wdHIgPSBwYWlyLT5vbmUtPmRhdGE7CisJCWZpbGVfcGFyZW50LnNpemUgPSBwYWlyLT5vbmUtPnNpemU7CisJfSBlbHNlIHsKKwkJZmlsZV9wYXJlbnQucHRyID0gIiI7CisJCWZpbGVfcGFyZW50LnNpemUgPSAwOworCX0KKworCWRpZmZfcmFuZ2VzX2luaXQoJmRpZmYpOworCWNvbGxlY3RfZGlmZigmZmlsZV9wYXJlbnQsICZmaWxlX3RhcmdldCwgJmRpZmYpOworCisJLyogTkVFRFNXT1JLIHNob3VsZCBhcHBseSBzb21lIGhldXJpc3RpY3MgdG8gcHJldmVudCBtaXNtYXRjaGVzICovCisJZnJlZShyZy0+cGF0aCk7CisJcmctPnBhdGggPSB4c3RyZHVwKHBhaXItPm9uZS0+cGF0aCk7CisKKwlyYW5nZV9zZXRfaW5pdCgmdG1wLCAwKTsKKwlyYW5nZV9zZXRfbWFwX2Fjcm9zc19kaWZmKCZ0bXAsICZyZy0+cmFuZ2VzLCAmZGlmZiwgZGlmZl9vdXQpOworCXJhbmdlX3NldF9yZWxlYXNlKCZyZy0+cmFuZ2VzKTsKKwlyYW5nZV9zZXRfbW92ZSgmcmctPnJhbmdlcywgJnRtcCk7CisKKwlkaWZmX3Jhbmdlc19yZWxlYXNlKCZkaWZmKTsKKworCXJldHVybiAoKCpkaWZmX291dCktPnBhcmVudC5uciA+IDApOworfQorCitzdGF0aWMgc3RydWN0IGRpZmZfZmlsZXBhaXIgKmRpZmZfZmlsZXBhaXJfZHVwKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyKQoreworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpuZXcgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgZGlmZl9maWxlcGFpcikpOworCW5ldy0+b25lID0gcGFpci0+b25lOworCW5ldy0+dHdvID0gcGFpci0+dHdvOworCW5ldy0+b25lLT5jb3VudCsrOworCW5ldy0+dHdvLT5jb3VudCsrOworCXJldHVybiBuZXc7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfZGlmZnF1ZXVlcyhpbnQgbiwgc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpkcSkKK3sKKwlpbnQgaSwgajsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgZHFbaV0ubnI7IGorKykKKwkJCWRpZmZfZnJlZV9maWxlcGFpcihkcVtpXS5xdWV1ZVtqXSk7CisJZnJlZShkcSk7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19hbGxfZmlsZXMoc3RydWN0IGxpbmVfbG9nX2RhdGEgKipyYW5nZV9vdXQsCisJCQkgICAgIHN0cnVjdCByZXZfaW5mbyAqcmV2LAorCQkJICAgICBzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnF1ZXVlLAorCQkJICAgICBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2UpCit7CisJaW50IGksIGNoYW5nZWQgPSAwOworCisJKnJhbmdlX291dCA9IGxpbmVfbG9nX2RhdGFfY29weShyYW5nZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcXVldWUtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfcmFuZ2VzICpwYWlyZGlmZiA9IE5VTEw7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyID0gcXVldWUtPnF1ZXVlW2ldOworCQlpZiAocHJvY2Vzc19kaWZmX2ZpbGVwYWlyKHJldiwgcGFpciwgKnJhbmdlX291dCwgJnBhaXJkaWZmKSkgeworCQkJLyoKKwkJCSAqIFN0b3JlIGF3YXkgdGhlIGRpZmYgZm9yIGxhdGVyIG91dHB1dC4gIFdlCisJCQkgKiB0dWNrIGl0IGluIHRoZSByYW5nZXMgd2UgZ290IGFzIF9pbnB1dF8sCisJCQkgKiBzaW5jZSB0aGF0J3MgdGhlIGNvbW1pdCB0aGF0IGNhdXNlZCB0aGUKKwkJCSAqIGRpZmYuCisJCQkgKgorCQkJICogTkVFRFNXT1JLIG5vdCBlbm91Z2ggd2hlbiB3ZSBnZXQgYXJvdW5kIHRvCisJCQkgKiBkb2luZyBzb21ldGhpbmcgaW50ZXJlc3Rpbmcgd2l0aCBtZXJnZXM7CisJCQkgKiBjdXJyZW50bHkgZWFjaCBpbnZvY2F0aW9uIG9uIGEgbWVyZ2UgcGFyZW50CisJCQkgKiB0cmFzaGVzIHRoZSBwcmV2aW91cyBvbmUncyBkaWZmLgorCQkJICoKKwkJCSAqIE5FRURTV09SSyB0cmFtcGxlcyBvdmVyIGRhdGEgc3RydWN0dXJlcyBub3Qgb3duZWQgaGVyZQorCQkJICovCisJCQlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmcgPSByYW5nZTsKKwkJCWNoYW5nZWQrKzsKKwkJCXdoaWxlIChyZyAmJiBzdHJjbXAocmctPnBhdGgsIHBhaXItPnR3by0+cGF0aCkpCisJCQkJcmcgPSByZy0+bmV4dDsKKwkJCWFzc2VydChyZyk7CisJCQlyZy0+cGFpciA9IGRpZmZfZmlsZXBhaXJfZHVwKHF1ZXVlLT5xdWV1ZVtpXSk7CisJCQltZW1jcHkoJnJnLT5kaWZmLCBwYWlyZGlmZiwgc2l6ZW9mKHN0cnVjdCBkaWZmX3JhbmdlcykpOworCQl9CisJfQorCisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK2ludCBsaW5lX2xvZ19wcmludChzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpyYW5nZSA9IGxvb2t1cF9saW5lX3JhbmdlKHJldiwgY29tbWl0KTsKKworCXNob3dfbG9nKHJldik7CisJZHVtcF9kaWZmX2hhY2t5KHJldiwgcmFuZ2UpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfcmFuZ2VzX29yZGluYXJ5X2NvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJCQkgIHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyYW5nZSkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCBxdWV1ZTsKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcGFyZW50X3JhbmdlOworCWludCBjaGFuZ2VkOworCisJaWYgKGNvbW1pdC0+cGFyZW50cykKKwkJcGFyZW50ID0gY29tbWl0LT5wYXJlbnRzLT5pdGVtOworCisJcXVldWVfZGlmZnMocmFuZ2UsICZyZXYtPmRpZmZvcHQsICZxdWV1ZSwgY29tbWl0LCBwYXJlbnQpOworCWNoYW5nZWQgPSBwcm9jZXNzX2FsbF9maWxlcygmcGFyZW50X3JhbmdlLCByZXYsICZxdWV1ZSwgcmFuZ2UpOworCWlmIChwYXJlbnQpCisJCWFkZF9saW5lX3JhbmdlKHJldiwgcGFyZW50LCBwYXJlbnRfcmFuZ2UpOworCXJldHVybiBjaGFuZ2VkOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfcmFuZ2VzX21lcmdlX2NvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJCSAgICAgICBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2UpCit7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpkaWZmcXVldWVzOworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICoqY2FuZDsKKwlzdHJ1Y3QgY29tbWl0ICoqcGFyZW50czsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJaW50IGk7CisJaW50IG5wYXJlbnRzID0gY291bnRfcGFyZW50cyhjb21taXQpOworCisJZGlmZnF1ZXVlcyA9IHhtYWxsb2MobnBhcmVudHMgKiBzaXplb2YoKmRpZmZxdWV1ZXMpKTsKKwljYW5kID0geG1hbGxvYyhucGFyZW50cyAqIHNpemVvZigqY2FuZCkpOworCXBhcmVudHMgPSB4bWFsbG9jKG5wYXJlbnRzICogc2l6ZW9mKCpwYXJlbnRzKSk7CisKKwlwID0gY29tbWl0LT5wYXJlbnRzOworCWZvciAoaSA9IDA7IGkgPCBucGFyZW50czsgaSsrKSB7CisJCXBhcmVudHNbaV0gPSBwLT5pdGVtOworCQlwID0gcC0+bmV4dDsKKwkJcXVldWVfZGlmZnMocmFuZ2UsICZyZXYtPmRpZmZvcHQsICZkaWZmcXVldWVzW2ldLCBjb21taXQsIHBhcmVudHNbaV0pOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBucGFyZW50czsgaSsrKSB7CisJCWludCBjaGFuZ2VkOworCQljYW5kW2ldID0gTlVMTDsKKwkJY2hhbmdlZCA9IHByb2Nlc3NfYWxsX2ZpbGVzKCZjYW5kW2ldLCByZXYsICZkaWZmcXVldWVzW2ldLCByYW5nZSk7CisJCWlmICghY2hhbmdlZCkgeworCQkJLyoKKwkJCSAqIFRoaXMgcGFyZW50IGNhbiB0YWtlIGFsbCB0aGUgYmxhbWUsIHNvIHdlCisJCQkgKiBkb24ndCBmb2xsb3cgYW55IG90aGVyIHBhdGggaW4gaGlzdG9yeQorCQkJICovCisJCQlhZGRfbGluZV9yYW5nZShyZXYsIHBhcmVudHNbaV0sIGNhbmRbaV0pOworCQkJY2xlYXJfY29tbWl0X2xpbmVfcmFuZ2UocmV2LCBjb21taXQpOworCQkJY29tbWl0LT5wYXJlbnRzID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGNvbW1pdF9saXN0KSk7CisJCQljb21taXQtPnBhcmVudHMtPml0ZW0gPSBwYXJlbnRzW2ldOworCQkJY29tbWl0LT5wYXJlbnRzLT5uZXh0ID0gTlVMTDsKKwkJCWZyZWUocGFyZW50cyk7CisJCQlmcmVlKGNhbmQpOworCQkJZnJlZV9kaWZmcXVldWVzKG5wYXJlbnRzLCBkaWZmcXVldWVzKTsKKwkJCS8qIE5FRURTV09SSyBsZWFraW5nIGxpa2UgYSBzaWV2ZSAqLworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKgorCSAqIE5vIHNpbmdsZSBwYXJlbnQgdG9vayB0aGUgYmxhbWUuICBXZSBhZGQgdGhlIGNhbmRpZGF0ZXMKKwkgKiBmcm9tIHRoZSBhYm92ZSBsb29wIHRvIHRoZSBwYXJlbnRzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBucGFyZW50czsgaSsrKSB7CisJCWFkZF9saW5lX3JhbmdlKHJldiwgcGFyZW50c1tpXSwgY2FuZFtpXSk7CisJfQorCisJY2xlYXJfY29tbWl0X2xpbmVfcmFuZ2UocmV2LCBjb21taXQpOworCWZyZWUocGFyZW50cyk7CisJZnJlZShjYW5kKTsKKwlmcmVlX2RpZmZxdWV1ZXMobnBhcmVudHMsIGRpZmZxdWV1ZXMpOworCXJldHVybiAxOworCisJLyogTkVFRFNXT1JLIGV2aWwgbWVyZ2UgZGV0ZWN0aW9uIHN0dWZmICovCisJLyogTkVFRFNXT1JLIGxlYWtpbmcgbGlrZSBhIHNpZXZlICovCit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19yYW5nZXNfYXJiaXRyYXJ5X2NvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpyYW5nZSA9IGxvb2t1cF9saW5lX3JhbmdlKHJldiwgY29tbWl0KTsKKwlpbnQgY2hhbmdlZCA9IDA7CisKKwlpZiAocmFuZ2UpIHsKKwkJaWYgKCFjb21taXQtPnBhcmVudHMgfHwgIWNvbW1pdC0+cGFyZW50cy0+bmV4dCkKKwkJCWNoYW5nZWQgPSBwcm9jZXNzX3Jhbmdlc19vcmRpbmFyeV9jb21taXQocmV2LCBjb21taXQsIHJhbmdlKTsKKwkJZWxzZQorCQkJY2hhbmdlZCA9IHByb2Nlc3NfcmFuZ2VzX21lcmdlX2NvbW1pdChyZXYsIGNvbW1pdCwgcmFuZ2UpOworCX0KKworCWlmICghY2hhbmdlZCkKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVFJFRVNBTUU7CisKKwlyZXR1cm4gY2hhbmdlZDsKK30KKworc3RhdGljIGVudW0gcmV3cml0ZV9yZXN1bHQgbGluZV9sb2dfcmV3cml0ZV9vbmUoc3RydWN0IHJldl9pbmZvICpyZXYsIHN0cnVjdCBjb21taXQgKipwcCkKK3sKKwlmb3IgKDs7KSB7CisJCXN0cnVjdCBjb21taXQgKnAgPSAqcHA7CisJCWlmIChwLT5wYXJlbnRzICYmIHAtPnBhcmVudHMtPm5leHQpCisJCQlyZXR1cm4gcmV3cml0ZV9vbmVfb2s7CisJCWlmIChwLT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJcmV0dXJuIHJld3JpdGVfb25lX29rOworCQlpZiAoIShwLT5vYmplY3QuZmxhZ3MgJiBUUkVFU0FNRSkpCisJCQlyZXR1cm4gcmV3cml0ZV9vbmVfb2s7CisJCWlmICghcC0+cGFyZW50cykKKwkJCXJldHVybiByZXdyaXRlX29uZV9ub3BhcmVudHM7CisJCSpwcCA9IHAtPnBhcmVudHMtPml0ZW07CisJfQorfQorCitpbnQgbGluZV9sb2dfZmlsdGVyKHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSByZXYtPmNvbW1pdHM7CisJc3RydWN0IGNvbW1pdF9saXN0ICpvdXQgPSBOVUxMLCAqKnBwID0gJm91dDsKKworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqdG9fZnJlZSA9IE5VTEw7CisJCWNvbW1pdCA9IGxpc3QtPml0ZW07CisJCWlmIChwcm9jZXNzX3Jhbmdlc19hcmJpdHJhcnlfY29tbWl0KHJldiwgY29tbWl0KSkgeworCQkJKnBwID0gbGlzdDsKKwkJCXBwID0gJmxpc3QtPm5leHQ7CisJCX0gZWxzZQorCQkJdG9fZnJlZSA9IGxpc3Q7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCQlmcmVlKHRvX2ZyZWUpOworCX0KKwkqcHAgPSBOVUxMOworCisJZm9yIChsaXN0ID0gb3V0OyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKKwkJcmV3cml0ZV9wYXJlbnRzKHJldiwgbGlzdC0+aXRlbSwgbGluZV9sb2dfcmV3cml0ZV9vbmUpOworCisJcmV2LT5jb21taXRzID0gb3V0OworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saW5lLWxvZy5oIGIvbGluZS1sb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmVhNDVmCi0tLSAvZGV2L251bGwKKysrIGIvbGluZS1sb2cuaApAQCAtMCwwICsxLDUzIEBACisjaWZuZGVmIExJTkVfTE9HX0gKKyNkZWZpbmUgTElORV9MT0dfSAorCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKworc3RydWN0IHJldl9pbmZvOworc3RydWN0IGNvbW1pdDsKKworLyogQSByYW5nZSBbc3RhcnQsZW5kXS4gIExpbmVzIGFyZSBudW1iZXJlZCBzdGFydGluZyBhdCAwLCBhbmQgdGhlCisgKiByYW5nZXMgaW5jbHVkZSBzdGFydCBidXQgZXhjbHVkZSBlbmQuICovCitzdHJ1Y3QgcmFuZ2UgeworCWxvbmcgc3RhcnQsIGVuZDsKK307CisKKy8qIEEgc2V0IG9mIHJhbmdlcy4gIFRoZSByYW5nZXMgbXVzdCBhbHdheXMgYmUgZGlzam9pbnQgYW5kIHNvcnRlZC4gKi8KK3N0cnVjdCByYW5nZV9zZXQgeworCWludCBhbGxvYywgbnI7CisJc3RydWN0IHJhbmdlICpyYW5nZXM7Cit9OworCisvKiBBIGRpZmYsIGVuY29kZWQgYXMgdGhlIHNldCBvZiBwcmUtIGFuZCBwb3N0LWltYWdlIHJhbmdlcyB3aGVyZSB0aGUKKyAqIGZpbGVzIGRpZmZlci4gQSBwYWlyIG9mIHJhbmdlcyBjb3JyZXNwb25kcyB0byBhIGh1bmsuICovCitzdHJ1Y3QgZGlmZl9yYW5nZXMgeworCXN0cnVjdCByYW5nZV9zZXQgcGFyZW50OworCXN0cnVjdCByYW5nZV9zZXQgdGFyZ2V0OworfTsKKworLyogTGlua2VkIGxpc3Qgb2YgaW50ZXJlc3RpbmcgZmlsZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgcmFuZ2VzLiAgVGhlCisgKiBsaXN0IG11c3QgYmUga2VwdCBzb3J0ZWQgYnkgcGF0aC4KKyAqCisgKiBGb3Igc2ltcGxpY2l0eSwgZXZlbiB0aG91Z2ggdGhpcyBpcyBoaWdobHkgcmVkdW5kYW50LCBlYWNoCisgKiBsaW5lX2xvZ19kYXRhIG93bnMgaXRzICdwYXRoJy4KKyAqLworc3RydWN0IGxpbmVfbG9nX2RhdGEgeworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpuZXh0OworCWNoYXIgKnBhdGg7CisJY2hhciBzdGF0dXM7CisJc3RydWN0IHJhbmdlX3NldCByYW5nZXM7CisJaW50IGFyZ19hbGxvYywgYXJnX25yOworCWNvbnN0IGNoYXIgKiphcmdzOworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyOworCXN0cnVjdCBkaWZmX3JhbmdlcyBkaWZmOworfTsKKworZXh0ZXJuIHZvaWQgbGluZV9sb2dfZGF0YV9pbml0KHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyKTsKKworZXh0ZXJuIHZvaWQgbGluZV9sb2dfaW5pdChzdHJ1Y3QgcmV2X2luZm8gKnJldiwgY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmFyZ3MpOworCitleHRlcm4gaW50IGxpbmVfbG9nX2ZpbHRlcihzdHJ1Y3QgcmV2X2luZm8gKnJldik7CisKK2V4dGVybiBpbnQgbGluZV9sb2dfcHJpbnQoc3RydWN0IHJldl9pbmZvICpyZXYsIHN0cnVjdCBjb21taXQgKmNvbW1pdCk7CisKKyNlbmRpZiAvKiBMSU5FX0xPR19IICovCmRpZmYgLS1naXQgYS9saW5lLXJhbmdlLmMgYi9saW5lLXJhbmdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk0MjQ3NQotLS0gL2Rldi9udWxsCisrKyBiL2xpbmUtcmFuZ2UuYwpAQCAtMCwwICsxLDI1MCBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImxpbmUtcmFuZ2UuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJ1c2VyZGlmZi5oIgorCisvKgorICogUGFyc2Ugb25lIGl0ZW0gaW4gdGhlIC1MIG9wdGlvbgorICovCitzdGF0aWMgY29uc3QgY2hhciAqcGFyc2VfbG9jKGNvbnN0IGNoYXIgKnNwZWMsIG50aF9saW5lX2ZuX3QgbnRoX2xpbmUsCisJCQkgICAgIHZvaWQgKmRhdGEsIGxvbmcgbGluZXMsIGxvbmcgYmVnaW4sIGxvbmcgKnJldCkKK3sKKwljaGFyICp0ZXJtOworCWNvbnN0IGNoYXIgKmxpbmU7CisJbG9uZyBudW07CisJaW50IHJlZ19lcnJvcjsKKwlyZWdleF90IHJlZ2V4cDsKKwlyZWdtYXRjaF90IG1hdGNoWzFdOworCisJLyogQWxsb3cgIi1MIDxzb21ldGhpbmc+LCsyMCIgdG8gbWVhbiBzdGFydGluZyBhdCA8c29tZXRoaW5nPgorCSAqIGZvciAyMCBsaW5lcywgb3IgIi1MIDxzb21ldGhpbmc+LC01IiBmb3IgNSBsaW5lcyBlbmRpbmcgYXQKKwkgKiA8c29tZXRoaW5nPi4KKwkgKi8KKwlpZiAoMSA8IGJlZ2luICYmIChzcGVjWzBdID09ICcrJyB8fCBzcGVjWzBdID09ICctJykpIHsKKwkJbnVtID0gc3RydG9sKHNwZWMgKyAxLCAmdGVybSwgMTApOworCQlpZiAodGVybSAhPSBzcGVjICsgMSkgeworCQkJaWYgKCFyZXQpCisJCQkJcmV0dXJuIHRlcm07CisJCQlpZiAoc3BlY1swXSA9PSAnLScpCisJCQkJbnVtID0gMCAtIG51bTsKKwkJCWlmICgwIDwgbnVtKQorCQkJCSpyZXQgPSBiZWdpbiArIG51bSAtIDI7CisJCQllbHNlIGlmICghbnVtKQorCQkJCSpyZXQgPSBiZWdpbjsKKwkJCWVsc2UKKwkJCQkqcmV0ID0gYmVnaW4gKyBudW07CisJCQlyZXR1cm4gdGVybTsKKwkJfQorCQlyZXR1cm4gc3BlYzsKKwl9CisJbnVtID0gc3RydG9sKHNwZWMsICZ0ZXJtLCAxMCk7CisJaWYgKHRlcm0gIT0gc3BlYykgeworCQlpZiAocmV0KQorCQkJKnJldCA9IG51bTsKKwkJcmV0dXJuIHRlcm07CisJfQorCWlmIChzcGVjWzBdICE9ICcvJykKKwkJcmV0dXJuIHNwZWM7CisKKwkvKiBpdCBjb3VsZCBiZSBhIHJlZ2V4cCBvZiBmb3JtIC8uLi4vICovCisJZm9yICh0ZXJtID0gKGNoYXIgKikgc3BlYyArIDE7ICp0ZXJtICYmICp0ZXJtICE9ICcvJzsgdGVybSsrKSB7CisJCWlmICgqdGVybSA9PSAnXFwnKQorCQkJdGVybSsrOworCX0KKwlpZiAoKnRlcm0gIT0gJy8nKQorCQlyZXR1cm4gc3BlYzsKKworCS8qIGluIHRoZSBzY2FuLW9ubHkgY2FzZSB3ZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gdGhlIHJlZ2V4ICovCisJaWYgKCFyZXQpCisJCXJldHVybiB0ZXJtKzE7CisKKwkvKiB0cnkgW3NwZWMrMSAuLiB0ZXJtLTFdIGFzIHJlZ2V4cCAqLworCSp0ZXJtID0gMDsKKwliZWdpbi0tOyAvKiBpbnB1dCBpcyBpbiBodW1hbiB0ZXJtcyAqLworCWxpbmUgPSBudGhfbGluZShkYXRhLCBiZWdpbik7CisKKwlpZiAoIShyZWdfZXJyb3IgPSByZWdjb21wKCZyZWdleHAsIHNwZWMgKyAxLCBSRUdfTkVXTElORSkpICYmCisJICAgICEocmVnX2Vycm9yID0gcmVnZXhlYygmcmVnZXhwLCBsaW5lLCAxLCBtYXRjaCwgMCkpKSB7CisJCWNvbnN0IGNoYXIgKmNwID0gbGluZSArIG1hdGNoWzBdLnJtX3NvOworCQljb25zdCBjaGFyICpubGluZTsKKworCQl3aGlsZSAoYmVnaW4rKyA8IGxpbmVzKSB7CisJCQlubGluZSA9IG50aF9saW5lKGRhdGEsIGJlZ2luKTsKKwkJCWlmIChsaW5lIDw9IGNwICYmIGNwIDwgbmxpbmUpCisJCQkJYnJlYWs7CisJCQlsaW5lID0gbmxpbmU7CisJCX0KKwkJKnJldCA9IGJlZ2luOworCQlyZWdmcmVlKCZyZWdleHApOworCQkqdGVybSsrID0gJy8nOworCQlyZXR1cm4gdGVybTsKKwl9CisJZWxzZSB7CisJCWNoYXIgZXJyYnVmWzEwMjRdOworCQlyZWdlcnJvcihyZWdfZXJyb3IsICZyZWdleHAsIGVycmJ1ZiwgMTAyNCk7CisJCWRpZSgiLUwgcGFyYW1ldGVyICclcyc6ICVzIiwgc3BlYyArIDEsIGVycmJ1Zik7CisJfQorfQorCitzdGF0aWMgaW50IG1hdGNoX2Z1bmNuYW1lKHhkZW1pdGNvbmZfdCAqeGVjZmcsIGNvbnN0IGNoYXIgKmJvbCwgY29uc3QgY2hhciAqZW9sKQoreworCWlmICh4ZWNmZykgeworCQljaGFyIGJ1ZlsxXTsKKwkJcmV0dXJuIHhlY2ZnLT5maW5kX2Z1bmMoYm9sLCBlb2wgLSBib2wsIGJ1ZiwgMSwKKwkJCQkJeGVjZmctPmZpbmRfZnVuY19wcml2KSA+PSAwOworCX0KKworCWlmIChib2wgPT0gZW9sKQorCQlyZXR1cm4gMDsKKwlpZiAoaXNhbHBoYSgqYm9sKSB8fCAqYm9sID09ICdfJyB8fCAqYm9sID09ICckJykKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpmaW5kX2Z1bmNuYW1lX21hdGNoaW5nX3JlZ2V4cCh4ZGVtaXRjb25mX3QgKnhlY2ZnLCBjb25zdCBjaGFyICpzdGFydCwKKwkJCQkJCSByZWdleF90ICpyZWdleHApCit7CisJaW50IHJlZ19lcnJvcjsKKwlyZWdtYXRjaF90IG1hdGNoWzFdOworCXdoaWxlICgxKSB7CisJCWNvbnN0IGNoYXIgKmJvbCwgKmVvbDsKKwkJcmVnX2Vycm9yID0gcmVnZXhlYyhyZWdleHAsIHN0YXJ0LCAxLCBtYXRjaCwgMCk7CisJCWlmIChyZWdfZXJyb3IgPT0gUkVHX05PTUFUQ0gpCisJCQlyZXR1cm4gTlVMTDsKKwkJZWxzZSBpZiAocmVnX2Vycm9yKSB7CisJCQljaGFyIGVycmJ1ZlsxMDI0XTsKKwkJCXJlZ2Vycm9yKHJlZ19lcnJvciwgcmVnZXhwLCBlcnJidWYsIDEwMjQpOworCQkJZGllKCItTCBwYXJhbWV0ZXI6IHJlZ2V4ZWMoKSBmYWlsZWQ6ICVzIiwgZXJyYnVmKTsKKwkJfQorCQkvKiBkZXRlcm1pbmUgZXh0ZW50IG9mIGxpbmUgbWF0Y2hlZCAqLworCQlib2wgPSBzdGFydCttYXRjaFswXS5ybV9zbzsKKwkJZW9sID0gc3RhcnQrbWF0Y2hbMF0ucm1fZW87CisJCXdoaWxlIChib2wgPiBzdGFydCAmJiAqYm9sICE9ICdcbicpCisJCQlib2wtLTsKKwkJaWYgKCpib2wgPT0gJ1xuJykKKwkJCWJvbCsrOworCQl3aGlsZSAoKmVvbCAmJiAqZW9sICE9ICdcbicpCisJCQllb2wrKzsKKwkJaWYgKCplb2wgPT0gJ1xuJykKKwkJCWVvbCsrOworCQkvKiBpcyBpdCBhIGZ1bmNuYW1lIGxpbmU/ICovCisJCWlmIChtYXRjaF9mdW5jbmFtZSh4ZWNmZywgKGNoYXIqKSBib2wsIChjaGFyKikgZW9sKSkKKwkJCXJldHVybiBib2w7CisJCXN0YXJ0ID0gZW9sOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX3JhbmdlX2Z1bmNuYW1lKGNvbnN0IGNoYXIgKmFyZywgbnRoX2xpbmVfZm5fdCBudGhfbGluZV9jYiwKKwkJCQkJdm9pZCAqY2JfZGF0YSwgbG9uZyBsaW5lcywgbG9uZyAqYmVnaW4sIGxvbmcgKmVuZCwKKwkJCQkJY29uc3QgY2hhciAqcGF0aCkKK3sKKwljaGFyICpwYXR0ZXJuOworCWNvbnN0IGNoYXIgKnRlcm07CisJc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZHJ2OworCXhkZW1pdGNvbmZfdCAqeGVjZmcgPSBOVUxMOworCWNvbnN0IGNoYXIgKnN0YXJ0OworCWNvbnN0IGNoYXIgKnA7CisJaW50IHJlZ19lcnJvcjsKKwlyZWdleF90IHJlZ2V4cDsKKworCWFzc2VydCgqYXJnID09ICc6Jyk7CisJdGVybSA9IGFyZysxOworCXdoaWxlICgqdGVybSAmJiAqdGVybSAhPSAnOicpIHsKKwkJaWYgKCp0ZXJtID09ICdcXCcgJiYgKih0ZXJtKzEpKQorCQkJdGVybSsrOworCQl0ZXJtKys7CisJfQorCWlmICh0ZXJtID09IGFyZysxKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoIWJlZ2luKSAvKiBza2lwX3JhbmdlX2FyZyBjYXNlICovCisJCXJldHVybiB0ZXJtOworCisJcGF0dGVybiA9IHhzdHJuZHVwKGFyZysxLCB0ZXJtLShhcmcrMSkpOworCisJc3RhcnQgPSBudGhfbGluZV9jYihjYl9kYXRhLCAwKTsKKworCWRydiA9IHVzZXJkaWZmX2ZpbmRfYnlfcGF0aChwYXRoKTsKKwlpZiAoZHJ2ICYmIGRydi0+ZnVuY25hbWUucGF0dGVybikgeworCQljb25zdCBzdHJ1Y3QgdXNlcmRpZmZfZnVuY25hbWUgKnBlID0gJmRydi0+ZnVuY25hbWU7CisJCXhlY2ZnID0geGNhbGxvYygxLCBzaXplb2YoKnhlY2ZnKSk7CisJCXhkaWZmX3NldF9maW5kX2Z1bmMoeGVjZmcsIHBlLT5wYXR0ZXJuLCBwZS0+Y2ZsYWdzKTsKKwl9CisKKwlyZWdfZXJyb3IgPSByZWdjb21wKCZyZWdleHAsIHBhdHRlcm4sIFJFR19ORVdMSU5FKTsKKwlpZiAocmVnX2Vycm9yKSB7CisJCWNoYXIgZXJyYnVmWzEwMjRdOworCQlyZWdlcnJvcihyZWdfZXJyb3IsICZyZWdleHAsIGVycmJ1ZiwgMTAyNCk7CisJCWRpZSgiLUwgcGFyYW1ldGVyICclcyc6ICVzIiwgcGF0dGVybiwgZXJyYnVmKTsKKwl9CisKKwlwID0gZmluZF9mdW5jbmFtZV9tYXRjaGluZ19yZWdleHAoeGVjZmcsIChjaGFyKikgc3RhcnQsICZyZWdleHApOworCWlmICghcCkKKwkJZGllKCItTCBwYXJhbWV0ZXIgJyVzJzogbm8gbWF0Y2giLCBwYXR0ZXJuKTsKKwkqYmVnaW4gPSAwOworCXdoaWxlIChwID4gbnRoX2xpbmVfY2IoY2JfZGF0YSwgKmJlZ2luKSkKKwkJKCpiZWdpbikrKzsKKworCWlmICgqYmVnaW4gPj0gbGluZXMpCisJCWRpZSgiLUwgcGFyYW1ldGVyICclcycgbWF0Y2hlcyBhdCBFT0YiLCBwYXR0ZXJuKTsKKworCSplbmQgPSAqYmVnaW4rMTsKKwl3aGlsZSAoKmVuZCA8IGxpbmVzKSB7CisJCWNvbnN0IGNoYXIgKmJvbCA9IG50aF9saW5lX2NiKGNiX2RhdGEsICplbmQpOworCQljb25zdCBjaGFyICplb2wgPSBudGhfbGluZV9jYihjYl9kYXRhLCAqZW5kKzEpOworCQlpZiAobWF0Y2hfZnVuY25hbWUoeGVjZmcsIGJvbCwgZW9sKSkKKwkJCWJyZWFrOworCQkoKmVuZCkrKzsKKwl9CisKKwlyZWdmcmVlKCZyZWdleHApOworCWZyZWUoeGVjZmcpOworCWZyZWUocGF0dGVybik7CisKKwkvKiBjb21wZW5zYXRlIGZvciAxLWJhc2VkIG51bWJlcmluZyAqLworCSgqYmVnaW4pKys7CisKKwlyZXR1cm4gdGVybTsKK30KKworaW50IHBhcnNlX3JhbmdlX2FyZyhjb25zdCBjaGFyICphcmcsIG50aF9saW5lX2ZuX3QgbnRoX2xpbmVfY2IsCisJCSAgICB2b2lkICpjYl9kYXRhLCBsb25nIGxpbmVzLCBsb25nICpiZWdpbiwgbG9uZyAqZW5kLAorCQkgICAgY29uc3QgY2hhciAqcGF0aCkKK3sKKwkqYmVnaW4gPSAqZW5kID0gMDsKKworCWlmICgqYXJnID09ICc6JykgeworCQlhcmcgPSBwYXJzZV9yYW5nZV9mdW5jbmFtZShhcmcsIG50aF9saW5lX2NiLCBjYl9kYXRhLCBsaW5lcywgYmVnaW4sIGVuZCwgcGF0aCk7CisJCWlmICghYXJnIHx8ICphcmcpCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKworCWFyZyA9IHBhcnNlX2xvYyhhcmcsIG50aF9saW5lX2NiLCBjYl9kYXRhLCBsaW5lcywgMSwgYmVnaW4pOworCisJaWYgKCphcmcgPT0gJywnKQorCQlhcmcgPSBwYXJzZV9sb2MoYXJnICsgMSwgbnRoX2xpbmVfY2IsIGNiX2RhdGEsIGxpbmVzLCAqYmVnaW4gKyAxLCBlbmQpOworCisJaWYgKCphcmcpCisJCXJldHVybiAtMTsKKworCWlmICgqYmVnaW4gJiYgKmVuZCAmJiAqZW5kIDwgKmJlZ2luKSB7CisJCWxvbmcgdG1wOworCQl0bXAgPSAqZW5kOyAqZW5kID0gKmJlZ2luOyAqYmVnaW4gPSB0bXA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IGNoYXIgKnNraXBfcmFuZ2VfYXJnKGNvbnN0IGNoYXIgKmFyZykKK3sKKwlpZiAoKmFyZyA9PSAnOicpCisJCXJldHVybiBwYXJzZV9yYW5nZV9mdW5jbmFtZShhcmcsIE5VTEwsIE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5VTEwpOworCisJYXJnID0gcGFyc2VfbG9jKGFyZywgTlVMTCwgTlVMTCwgMCwgLTEsIE5VTEwpOworCisJaWYgKCphcmcgPT0gJywnKQorCQlhcmcgPSBwYXJzZV9sb2MoYXJnKzEsIE5VTEwsIE5VTEwsIDAsIDAsIE5VTEwpOworCisJcmV0dXJuIGFyZzsKK30KZGlmZiAtLWdpdCBhL2xpbmUtcmFuZ2UuaCBiL2xpbmUtcmFuZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTNkMDEyCi0tLSAvZGV2L251bGwKKysrIGIvbGluZS1yYW5nZS5oCkBAIC0wLDAgKzEsMzYgQEAKKyNpZm5kZWYgTElORV9SQU5HRV9ICisjZGVmaW5lIExJTkVfUkFOR0VfSAorCisvKgorICogUGFyc2Ugb25lIGl0ZW0gaW4gYW4gLUwgYmVnaW4sZW5kIG9wdGlvbiB3LnIudC4gdGhlIG5vdGlvbmFsIGZpbGUKKyAqIG9iamVjdCAnY2JfZGF0YScgY29uc2lzdGluZyBvZiAnbGluZXMnIGxpbmVzLgorICoKKyAqIFRoZSAnbnRoX2xpbmVfY2InIGNhbGxiYWNrIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBzdGFydCBvZiB0aGUKKyAqIGxpbmUgJ2xubycgaW5zaWRlIHRoZSAnY2JfZGF0YScuICBUaGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGFscmVhZHkKKyAqIGhhdmUgYSBzdWl0YWJsZSBtYXAgYXQgaGFuZCB0byBtYWtlIHRoaXMgYSBjb25zdGFudC10aW1lIGxvb2t1cC4KKyAqCisgKiBSZXR1cm5zIDAgaW4gY2FzZSBvZiBzdWNjZXNzIGFuZCAtMSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuICBUaGUKKyAqIGFjdHVhbCByYW5nZSBpcyBzdG9yZWQgaW4gKmJlZ2luIGFuZCAqZW5kLiAgVGhlIGNvdW50aW5nIHN0YXJ0cworICogYXQgMSEgIEluIGNhc2Ugb2YgZXJyb3IsIHRoZSBjYWxsZXIgc2hvdWxkIHNob3cgdXNhZ2UgbWVzc2FnZS4KKyAqLworCit0eXBlZGVmIGNvbnN0IGNoYXIgKigqbnRoX2xpbmVfZm5fdCkodm9pZCAqZGF0YSwgbG9uZyBsbm8pOworCitleHRlcm4gaW50IHBhcnNlX3JhbmdlX2FyZyhjb25zdCBjaGFyICphcmcsCisJCQkgICBudGhfbGluZV9mbl90IG50aF9saW5lX2NiLAorCQkJICAgdm9pZCAqY2JfZGF0YSwgbG9uZyBsaW5lcywKKwkJCSAgIGxvbmcgKmJlZ2luLCBsb25nICplbmQsCisJCQkgICBjb25zdCBjaGFyICpwYXRoKTsKKworLyoKKyAqIFNjYW4gcGFzdCBhIHJhbmdlIGFyZ3VtZW50IHRoYXQgY291bGQgYmUgcGFyc2VkIGJ5CisgKiAncGFyc2VfcmFuZ2VfYXJnJywgdG8gaGVscCB0aGUgY2FsbGVyIGRldGVybWluZSB0aGUgc3RhcnQgb2YgdGhlCisgKiBmaWxlbmFtZSBpbiAnLUwgbixtOmZpbGUnIHN5bnRheC4KKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSAnbixtJyBwYXJ0LCBvcgorICogTlVMTCBpbiBjYXNlIHRoZSBhcmd1bWVudCBpcyBvYnZpb3VzbHkgbWFsZm9ybWVkLgorICovCisKK2V4dGVybiBjb25zdCBjaGFyICpza2lwX3JhbmdlX2FyZyhjb25zdCBjaGFyICphcmcpOworCisjZW5kaWYgLyogTElORV9SQU5HRV9IICovCmRpZmYgLS1naXQgYS9sb2NrZmlsZS5jIGIvbG9ja2ZpbGUuYwppbmRleCBjNmZiNzdiLi44ZmJjYjZhIDEwMDY0NAotLS0gYS9sb2NrZmlsZS5jCisrKyBiL2xvY2tmaWxlLmMKQEAgLTEyNCwxNSArMTI0LDE3IEBACiAKIHN0YXRpYyBpbnQgbG9ja19maWxlKHN0cnVjdCBsb2NrX2ZpbGUgKmxrLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MpCiB7Ci0JaWYgKHN0cmxlbihwYXRoKSA+PSBzaXplb2YobGstPmZpbGVuYW1lKSkKLQkJcmV0dXJuIC0xOwotCXN0cmNweShsay0+ZmlsZW5hbWUsIHBhdGgpOwogCS8qCiAJICogc3VidHJhY3QgNSBmcm9tIHNpemUgdG8gbWFrZSBzdXJlIHRoZXJlJ3Mgcm9vbSBmb3IgYWRkaW5nCiAJICogIi5sb2NrIiBmb3IgdGhlIGxvY2sgZmlsZSBuYW1lCiAJICovCisJc3RhdGljIGNvbnN0IHNpemVfdCBtYXhfcGF0aF9sZW4gPSBzaXplb2YobGstPmZpbGVuYW1lKSAtIDU7CisKKwlpZiAoc3RybGVuKHBhdGgpID49IG1heF9wYXRoX2xlbikKKwkJcmV0dXJuIC0xOworCXN0cmNweShsay0+ZmlsZW5hbWUsIHBhdGgpOwogCWlmICghKGZsYWdzICYgTE9DS19OT0RFUkVGKSkKLQkJcmVzb2x2ZV9zeW1saW5rKGxrLT5maWxlbmFtZSwgc2l6ZW9mKGxrLT5maWxlbmFtZSktNSk7CisJCXJlc29sdmVfc3ltbGluayhsay0+ZmlsZW5hbWUsIG1heF9wYXRoX2xlbik7CiAJc3RyY2F0KGxrLT5maWxlbmFtZSwgIi5sb2NrIik7CiAJbGstPmZkID0gb3Blbihsay0+ZmlsZW5hbWUsIE9fUkRXUiB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOwogCWlmICgwIDw9IGxrLT5mZCkgewpkaWZmIC0tZ2l0IGEvbG9nLXRyZWUuYyBiL2xvZy10cmVlLmMKaW5kZXggMTk0NmU5Yy4uYTQ5ZDhlOCAxMDA2NDQKLS0tIGEvbG9nLXRyZWUuYworKysgYi9sb2ctdHJlZS5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSAiY29sb3IuaCIKICNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAic2VxdWVuY2VyLmgiCisjaW5jbHVkZSAibGluZS1sb2cuaCIKIAogc3RydWN0IGRlY29yYXRpb24gbmFtZV9kZWNvcmF0aW9uID0geyAib2JqZWN0IG5hbWVzIiB9OwogCkBAIC02MTYsNiArNjE3LDkgQEAKIAljdHguZm10ID0gb3B0LT5jb21taXRfZm9ybWF0OwogCWN0eC5tYWlsbWFwID0gb3B0LT5tYWlsbWFwOwogCWN0eC5jb2xvciA9IG9wdC0+ZGlmZm9wdC51c2VfY29sb3I7CisJY3R4Lm91dHB1dF9lbmNvZGluZyA9IGdldF9sb2dfb3V0cHV0X2VuY29kaW5nKCk7CisJaWYgKG9wdC0+ZnJvbV9pZGVudC5tYWlsX2JlZ2luICYmIG9wdC0+ZnJvbV9pZGVudC5uYW1lX2JlZ2luKQorCQljdHguZnJvbV9pZGVudCA9ICZvcHQtPmZyb21faWRlbnQ7CiAJcHJldHR5X3ByaW50X2NvbW1pdCgmY3R4LCBjb21taXQsICZtc2didWYpOwogCiAJaWYgKG9wdC0+YWRkX3NpZ25vZmYpCkBAIC03OTYsNiArODAwLDkgQEAKIAlsb2cucGFyZW50ID0gTlVMTDsKIAlvcHQtPmxvZ2luZm8gPSAmbG9nOwogCisJaWYgKG9wdC0+bGluZV9sZXZlbF90cmF2ZXJzZSkKKwkJcmV0dXJuIGxpbmVfbG9nX3ByaW50KG9wdCwgY29tbWl0KTsKKwogCXNob3duID0gbG9nX3RyZWVfZGlmZihvcHQsIGNvbW1pdCwgJmxvZyk7CiAJaWYgKCFzaG93biAmJiBvcHQtPmxvZ2luZm8gJiYgb3B0LT5hbHdheXNfc2hvd19oZWFkZXIpIHsKIAkJbG9nLnBhcmVudCA9IE5VTEw7CmRpZmYgLS1naXQgYS9tYWlsbWFwLmMgYi9tYWlsbWFwLmMKaW5kZXggMmE3YjM2Ni4uNDQ2MTRmYyAxMDA2NDQKLS0tIGEvbWFpbG1hcC5jCisrKyBiL21haWxtYXAuYwpAQCAtNSw4ICs1LDEwIEBACiAjZGVmaW5lIERFQlVHX01BSUxNQVAgMAogI2lmIERFQlVHX01BSUxNQVAKICNkZWZpbmUgZGVidWdfbW0oLi4uKSBmcHJpbnRmKHN0ZGVyciwgX19WQV9BUkdTX18pCisjZGVmaW5lIGRlYnVnX3N0cihYKSAoKFgpID8gKFgpIDogIihub25lKSIpCiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX21tKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSB7fQorc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpkZWJ1Z19zdHIoY29uc3QgY2hhciAqcykgeyByZXR1cm4gczsgfQogI2VuZGlmCiAKIGNvbnN0IGNoYXIgKmdpdF9tYWlsbWFwX2ZpbGU7CkBAIC0yOSw3ICszMSw4IEBACiBzdGF0aWMgdm9pZCBmcmVlX21haWxtYXBfaW5mbyh2b2lkICpwLCBjb25zdCBjaGFyICpzKQogewogCXN0cnVjdCBtYWlsbWFwX2luZm8gKm1pID0gKHN0cnVjdCBtYWlsbWFwX2luZm8gKilwOwotCWRlYnVnX21tKCJtYWlsbWFwOiAtLSBjb21wbGV4OiAnJXMnIC0+ICclcycgPCVzPlxuIiwgcywgbWktPm5hbWUsIG1pLT5lbWFpbCk7CisJZGVidWdfbW0oIm1haWxtYXA6IC0tIGNvbXBsZXg6ICclcycgLT4gJyVzJyA8JXM+XG4iLAorCQkgcywgZGVidWdfc3RyKG1pLT5uYW1lKSwgZGVidWdfc3RyKG1pLT5lbWFpbCkpOwogCWZyZWUobWktPm5hbWUpOwogCWZyZWUobWktPmVtYWlsKTsKIH0KQEAgLTM3LDggKzQwLDExIEBACiBzdGF0aWMgdm9pZCBmcmVlX21haWxtYXBfZW50cnkodm9pZCAqcCwgY29uc3QgY2hhciAqcykKIHsKIAlzdHJ1Y3QgbWFpbG1hcF9lbnRyeSAqbWUgPSAoc3RydWN0IG1haWxtYXBfZW50cnkgKilwOwotCWRlYnVnX21tKCJtYWlsbWFwOiByZW1vdmluZyBlbnRyaWVzIGZvciA8JXM+LCB3aXRoICVkIHN1Yi1lbnRyaWVzXG4iLCBzLCBtZS0+bmFtZW1hcC5ucik7Ci0JZGVidWdfbW0oIm1haWxtYXA6IC0gc2ltcGxlOiAnJXMnIDwlcz5cbiIsIG1lLT5uYW1lLCBtZS0+ZW1haWwpOworCWRlYnVnX21tKCJtYWlsbWFwOiByZW1vdmluZyBlbnRyaWVzIGZvciA8JXM+LCB3aXRoICVkIHN1Yi1lbnRyaWVzXG4iLAorCQkgcywgbWUtPm5hbWVtYXAubnIpOworCWRlYnVnX21tKCJtYWlsbWFwOiAtIHNpbXBsZTogJyVzJyA8JXM+XG4iLAorCQkgZGVidWdfc3RyKG1lLT5uYW1lKSwgZGVidWdfc3RyKG1lLT5lbWFpbCkpOworCiAJZnJlZShtZS0+bmFtZSk7CiAJZnJlZShtZS0+ZW1haWwpOwogCkBAIC00NywxOCArNTMsMTEgQEAKIH0KIAogc3RhdGljIHZvaWQgYWRkX21hcHBpbmcoc3RydWN0IHN0cmluZ19saXN0ICptYXAsCi0JCQljaGFyICpuZXdfbmFtZSwgY2hhciAqbmV3X2VtYWlsLCBjaGFyICpvbGRfbmFtZSwgY2hhciAqb2xkX2VtYWlsKQorCQkJY2hhciAqbmV3X25hbWUsIGNoYXIgKm5ld19lbWFpbCwKKwkJCWNoYXIgKm9sZF9uYW1lLCBjaGFyICpvbGRfZW1haWwpCiB7CiAJc3RydWN0IG1haWxtYXBfZW50cnkgKm1lOwogCWludCBpbmRleDsKLQljaGFyICpwOwotCi0JaWYgKG9sZF9lbWFpbCkKLQkJZm9yIChwID0gb2xkX2VtYWlsOyAqcDsgcCsrKQotCQkJKnAgPSB0b2xvd2VyKCpwKTsKLQlpZiAobmV3X2VtYWlsKQotCQlmb3IgKHAgPSBuZXdfZW1haWw7ICpwOyBwKyspCi0JCQkqcCA9IHRvbG93ZXIoKnApOwogCiAJaWYgKG9sZF9lbWFpbCA9PSBOVUxMKSB7CiAJCW9sZF9lbWFpbCA9IG5ld19lbWFpbDsKQEAgLTY4LDE2ICs2NywyMSBAQAogCWlmICgoaW5kZXggPSBzdHJpbmdfbGlzdF9maW5kX2luc2VydF9pbmRleChtYXAsIG9sZF9lbWFpbCwgMSkpIDwgMCkgewogCQkvKiBtYWlsbWFwIGVudHJ5IGV4aXN0cywgaW52ZXJ0IGluZGV4IHZhbHVlICovCiAJCWluZGV4ID0gLTEgLSBpbmRleDsKKwkJbWUgPSAoc3RydWN0IG1haWxtYXBfZW50cnkgKiltYXAtPml0ZW1zW2luZGV4XS51dGlsOwogCX0gZWxzZSB7CiAJCS8qIGNyZWF0ZSBtYWlsbWFwIGVudHJ5ICovCi0JCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0X2F0X2luZGV4KG1hcCwgaW5kZXgsIG9sZF9lbWFpbCk7Ci0JCWl0ZW0tPnV0aWwgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbWFpbG1hcF9lbnRyeSkpOwotCQkoKHN0cnVjdCBtYWlsbWFwX2VudHJ5ICopaXRlbS0+dXRpbCktPm5hbWVtYXAuc3RyZHVwX3N0cmluZ3MgPSAxOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCQlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0X2F0X2luZGV4KG1hcCwgaW5kZXgsIG9sZF9lbWFpbCk7CisJCW1lID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IG1haWxtYXBfZW50cnkpKTsKKwkJbWUtPm5hbWVtYXAuc3RyZHVwX3N0cmluZ3MgPSAxOworCQltZS0+bmFtZW1hcC5jbXAgPSBzdHJjYXNlY21wOworCQlpdGVtLT51dGlsID0gbWU7CiAJfQotCW1lID0gKHN0cnVjdCBtYWlsbWFwX2VudHJ5ICopbWFwLT5pdGVtc1tpbmRleF0udXRpbDsKIAogCWlmIChvbGRfbmFtZSA9PSBOVUxMKSB7Ci0JCWRlYnVnX21tKCJtYWlsbWFwOiBhZGRpbmcgKHNpbXBsZSkgZW50cnkgZm9yICVzIGF0IGluZGV4ICVkXG4iLCBvbGRfZW1haWwsIGluZGV4KTsKKwkJZGVidWdfbW0oIm1haWxtYXA6IGFkZGluZyAoc2ltcGxlKSBlbnRyeSBmb3IgJXMgYXQgaW5kZXggJWRcbiIsCisJCQkgb2xkX2VtYWlsLCBpbmRleCk7CiAJCS8qIFJlcGxhY2UgY3VycmVudCBuYW1lIGFuZCBuZXcgZW1haWwgZm9yIHNpbXBsZSBlbnRyeSAqLwogCQlpZiAobmV3X25hbWUpIHsKIAkJCWZyZWUobWUtPm5hbWUpOwpAQCAtODksNyArOTMsOCBAQAogCQl9CiAJfSBlbHNlIHsKIAkJc3RydWN0IG1haWxtYXBfaW5mbyAqbWkgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbWFpbG1hcF9pbmZvKSk7Ci0JCWRlYnVnX21tKCJtYWlsbWFwOiBhZGRpbmcgKGNvbXBsZXgpIGVudHJ5IGZvciAlcyBhdCBpbmRleCAlZFxuIiwgb2xkX2VtYWlsLCBpbmRleCk7CisJCWRlYnVnX21tKCJtYWlsbWFwOiBhZGRpbmcgKGNvbXBsZXgpIGVudHJ5IGZvciAlcyBhdCBpbmRleCAlZFxuIiwKKwkJCSBvbGRfZW1haWwsIGluZGV4KTsKIAkJaWYgKG5ld19uYW1lKQogCQkJbWktPm5hbWUgPSB4c3RyZHVwKG5ld19uYW1lKTsKIAkJaWYgKG5ld19lbWFpbCkKQEAgLTk4LDExICsxMDMsMTIgQEAKIAl9CiAKIAlkZWJ1Z19tbSgibWFpbG1hcDogICclcycgPCVzPiAtPiAnJXMnIDwlcz5cbiIsCi0JCSBvbGRfbmFtZSwgb2xkX2VtYWlsLCBuZXdfbmFtZSwgbmV3X2VtYWlsKTsKKwkJIGRlYnVnX3N0cihvbGRfbmFtZSksIG9sZF9lbWFpbCwKKwkJIGRlYnVnX3N0cihuZXdfbmFtZSksIGRlYnVnX3N0cihuZXdfZW1haWwpKTsKIH0KIAogc3RhdGljIGNoYXIgKnBhcnNlX25hbWVfYW5kX2VtYWlsKGNoYXIgKmJ1ZmZlciwgY2hhciAqKm5hbWUsCi0JCWNoYXIgKiplbWFpbCwgaW50IGFsbG93X2VtcHR5X2VtYWlsKQorCQkJCSAgY2hhciAqKmVtYWlsLCBpbnQgYWxsb3dfZW1wdHlfZW1haWwpCiB7CiAJY2hhciAqbGVmdCwgKnJpZ2h0LCAqbnN0YXJ0LCAqbmVuZDsKIAkqbmFtZSA9ICplbWFpbCA9IE5VTEw7CkBAIC0xMjIsNyArMTI4LDcgQEAKIAl3aGlsZSAobmVuZCA+IG5zdGFydCAmJiBpc3NwYWNlKCpuZW5kKSkKIAkJLS1uZW5kOwogCi0JKm5hbWUgPSAobnN0YXJ0IDwgbmVuZCA/IG5zdGFydCA6IE5VTEwpOworCSpuYW1lID0gKG5zdGFydCA8PSBuZW5kID8gbnN0YXJ0IDogTlVMTCk7CiAJKmVtYWlsID0gbGVmdCsxOwogCSoobmVuZCsxKSA9ICdcMCc7CiAJKnJpZ2h0KysgPSAnXDAnOwpAQCAtMzA2LDIxICszMTIsMjUgQEAKIH0KIAogaW50IG1hcF91c2VyKHN0cnVjdCBzdHJpbmdfbGlzdCAqbWFwLAotCQkJIGNvbnN0IGNoYXIgKiplbWFpbCwgc2l6ZV90ICplbWFpbGxlbiwKLQkJCSBjb25zdCBjaGFyICoqbmFtZSwgc2l6ZV90ICpuYW1lbGVuKQorCSAgICAgY29uc3QgY2hhciAqKmVtYWlsLCBzaXplX3QgKmVtYWlsbGVuLAorCSAgICAgY29uc3QgY2hhciAqKm5hbWUsIHNpemVfdCAqbmFtZWxlbikKIHsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKIAlzdHJ1Y3QgbWFpbG1hcF9lbnRyeSAqbWU7CiAKIAlkZWJ1Z19tbSgibWFwX3VzZXI6IG1hcCAnJS4qcycgPCUuKnM+XG4iLAotCQkgKm5hbWUsICpuYW1lbGVuLCAqZW1haWxsZW4sICplbWFpbCk7CisJCSAoaW50KSpuYW1lbGVuLCBkZWJ1Z19zdHIoKm5hbWUpLAorCQkgKGludCkqZW1haWxsZW4sIGRlYnVnX3N0cigqZW1haWwpKTsKIAogCWl0ZW0gPSBsb29rdXBfcHJlZml4KG1hcCwgKmVtYWlsLCAqZW1haWxsZW4pOwogCWlmIChpdGVtICE9IE5VTEwpIHsKIAkJbWUgPSAoc3RydWN0IG1haWxtYXBfZW50cnkgKilpdGVtLT51dGlsOwogCQlpZiAobWUtPm5hbWVtYXAubnIpIHsKLQkJCS8qIFRoZSBpdGVtIGhhcyBtdWx0aXBsZSBpdGVtcywgc28gd2UnbGwgbG9vayB1cCBvbiBuYW1lIHRvbyAqLwotCQkJLyogSWYgdGhlIG5hbWUgaXMgbm90IGZvdW5kLCB3ZSBjaG9vc2UgdGhlIHNpbXBsZSBlbnRyeSAgICAgICovCisJCQkvKgorCQkJICogVGhlIGl0ZW0gaGFzIG11bHRpcGxlIGl0ZW1zLCBzbyB3ZSdsbCBsb29rIHVwIG9uCisJCQkgKiBuYW1lIHRvby4gSWYgdGhlIG5hbWUgaXMgbm90IGZvdW5kLCB3ZSBjaG9vc2UgdGhlCisJCQkgKiBzaW1wbGUgZW50cnkuCisJCQkgKi8KIAkJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzdWJpdGVtOwogCQkJc3ViaXRlbSA9IGxvb2t1cF9wcmVmaXgoJm1lLT5uYW1lbWFwLCAqbmFtZSwgKm5hbWVsZW4pOwogCQkJaWYgKHN1Yml0ZW0pCkBAIC0zNDEsOCArMzUxLDkgQEAKIAkJCQkqbmFtZSA9IG1pLT5uYW1lOwogCQkJCSpuYW1lbGVuID0gc3RybGVuKCpuYW1lKTsKIAkJfQotCQlkZWJ1Z19tbSgibWFwX3VzZXI6ICB0byAnJS4qcycgPC4qJXM+XG4iLCAqbmFtZWxlbiwgKm5hbWUsCi0JCQkJICplbWFpbGxlbiwgKmVtYWlsKTsKKwkJZGVidWdfbW0oIm1hcF91c2VyOiAgdG8gJyUuKnMnIDwlLipzPlxuIiwKKwkJCSAoaW50KSpuYW1lbGVuLCBkZWJ1Z19zdHIoKm5hbWUpLAorCQkJIChpbnQpKmVtYWlsbGVuLCBkZWJ1Z19zdHIoKmVtYWlsKSk7CiAJCXJldHVybiAxOwogCX0KIAlkZWJ1Z19tbSgibWFwX3VzZXI6ICAtLVxuIik7CmRpZmYgLS1naXQgYS9tYXRjaC10cmVlcy5jIGIvbWF0Y2gtdHJlZXMuYwppbmRleCAyYmI3MzRkLi43ODczY2RlIDEwMDY0NAotLS0gYS9tYXRjaC10cmVlcy5jCisrKyBiL21hdGNoLXRyZWVzLmMKQEAgLTQ3LDYgKzQ3LDIyIEBACiAJcmV0dXJuIHNjb3JlOwogfQogCitzdGF0aWMgdm9pZCAqZmlsbF90cmVlX2Rlc2Nfc3RyaWN0KHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsCisJCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCkKK3sKKwl2b2lkICpidWZmZXI7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCWJ1ZmZlciA9IHJlYWRfc2hhMV9maWxlKGhhc2gsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKCFidWZmZXIpCisJCWRpZSgidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIiwgc2hhMV90b19oZXgoaGFzaCkpOworCWlmICh0eXBlICE9IE9CSl9UUkVFKQorCQlkaWUoIiVzIGlzIG5vdCBhIHRyZWUiLCBzaGExX3RvX2hleChoYXNoKSk7CisJaW5pdF90cmVlX2Rlc2MoZGVzYywgYnVmZmVyLCBzaXplKTsKKwlyZXR1cm4gYnVmZmVyOworfQorCiBzdGF0aWMgaW50IGJhc2VfbmFtZV9lbnRyaWVzX2NvbXBhcmUoY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKmEsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgbmFtZV9lbnRyeSAqYikKIHsKQEAgLTYxLDIzICs3NywxMCBAQAogewogCXN0cnVjdCB0cmVlX2Rlc2Mgb25lOwogCXN0cnVjdCB0cmVlX2Rlc2MgdHdvOwotCXZvaWQgKm9uZV9idWYsICp0d29fYnVmOworCXZvaWQgKm9uZV9idWYgPSBmaWxsX3RyZWVfZGVzY19zdHJpY3QoJm9uZSwgaGFzaDEpOworCXZvaWQgKnR3b19idWYgPSBmaWxsX3RyZWVfZGVzY19zdHJpY3QoJnR3bywgaGFzaDIpOwogCWludCBzY29yZSA9IDA7Ci0JZW51bSBvYmplY3RfdHlwZSB0eXBlOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAotCW9uZV9idWYgPSByZWFkX3NoYTFfZmlsZShoYXNoMSwgJnR5cGUsICZzaXplKTsKLQlpZiAoIW9uZV9idWYpCi0JCWRpZSgidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIiwgc2hhMV90b19oZXgoaGFzaDEpKTsKLQlpZiAodHlwZSAhPSBPQkpfVFJFRSkKLQkJZGllKCIlcyBpcyBub3QgYSB0cmVlIiwgc2hhMV90b19oZXgoaGFzaDEpKTsKLQlpbml0X3RyZWVfZGVzYygmb25lLCBvbmVfYnVmLCBzaXplKTsKLQl0d29fYnVmID0gcmVhZF9zaGExX2ZpbGUoaGFzaDIsICZ0eXBlLCAmc2l6ZSk7Ci0JaWYgKCF0d29fYnVmKQotCQlkaWUoInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIsIHNoYTFfdG9faGV4KGhhc2gyKSk7Ci0JaWYgKHR5cGUgIT0gT0JKX1RSRUUpCi0JCWRpZSgiJXMgaXMgbm90IGEgdHJlZSIsIHNoYTFfdG9faGV4KGhhc2gyKSk7Ci0JaW5pdF90cmVlX2Rlc2MoJnR3bywgdHdvX2J1Ziwgc2l6ZSk7CiAJZm9yICg7OykgewogCQlzdHJ1Y3QgbmFtZV9lbnRyeSBlMSwgZTI7CiAJCWludCBnb3RfZW50cnlfZnJvbV9vbmUgPSB0cmVlX2VudHJ5KCZvbmUsICZlMSk7CkBAIC0xMjQsMTYgKzEyNyw3IEBACiAJCQlpbnQgcmVjdXJzZV9saW1pdCkKIHsKIAlzdHJ1Y3QgdHJlZV9kZXNjIG9uZTsKLQl2b2lkICpvbmVfYnVmOwotCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKLQl1bnNpZ25lZCBsb25nIHNpemU7Ci0KLQlvbmVfYnVmID0gcmVhZF9zaGExX2ZpbGUoaGFzaDEsICZ0eXBlLCAmc2l6ZSk7Ci0JaWYgKCFvbmVfYnVmKQotCQlkaWUoInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIsIHNoYTFfdG9faGV4KGhhc2gxKSk7Ci0JaWYgKHR5cGUgIT0gT0JKX1RSRUUpCi0JCWRpZSgiJXMgaXMgbm90IGEgdHJlZSIsIHNoYTFfdG9faGV4KGhhc2gxKSk7Ci0JaW5pdF90cmVlX2Rlc2MoJm9uZSwgb25lX2J1Ziwgc2l6ZSk7CisJdm9pZCAqb25lX2J1ZiA9IGZpbGxfdHJlZV9kZXNjX3N0cmljdCgmb25lLCBoYXNoMSk7CiAKIAl3aGlsZSAob25lLnNpemUpIHsKIAkJY29uc3QgY2hhciAqcGF0aDsKZGlmZiAtLWdpdCBhL21lcmdlLXJlY3Vyc2l2ZS5jIGIvbWVyZ2UtcmVjdXJzaXZlLmMKaW5kZXggZWE5ZGJkMy4uZjk1OTMzYiAxMDA2NDQKLS0tIGEvbWVyZ2UtcmVjdXJzaXZlLmMKKysrIGIvbWVyZ2UtcmVjdXJzaXZlLmMKQEAgLTI1MSw3ICsyNTEsNyBAQAogCQlpbnQgaTsKIAkJZnByaW50ZihzdGRlcnIsICJCVUc6IFRoZXJlIGFyZSB1bm1lcmdlZCBpbmRleCBlbnRyaWVzOlxuIik7CiAJCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgewotCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CiAJCQlpZiAoY2Vfc3RhZ2UoY2UpKQogCQkJCWZwcmludGYoc3RkZXJyLCAiQlVHOiAlZCAlLipzXG4iLCBjZV9zdGFnZShjZSksCiAJCQkJCShpbnQpY2VfbmFtZWxlbihjZSksIGNlLT5uYW1lKTsKQEAgLTI2NCw3ICsyNjQsOCBAQAogCiAJaWYgKCFjYWNoZV90cmVlX2Z1bGx5X3ZhbGlkKGFjdGl2ZV9jYWNoZV90cmVlKSAmJgogCSAgICBjYWNoZV90cmVlX3VwZGF0ZShhY3RpdmVfY2FjaGVfdHJlZSwKLQkJCSAgICAgIGFjdGl2ZV9jYWNoZSwgYWN0aXZlX25yLCAwKSA8IDApCisJCQkgICAgICAoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICogY29uc3QgKilhY3RpdmVfY2FjaGUsCisJCQkgICAgICBhY3RpdmVfbnIsIDApIDwgMCkKIAkJZGllKF8oImVycm9yIGJ1aWxkaW5nIHRyZWVzIikpOwogCiAJcmVzdWx0ID0gbG9va3VwX3RyZWUoYWN0aXZlX2NhY2hlX3RyZWUtPnNoYTEpOwpAQCAtMzM5LDcgKzM0MCw3IEBACiAJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CiAJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOwogCQlzdHJ1Y3Qgc3RhZ2VfZGF0YSAqZTsKLQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKIAkJaWYgKCFjZV9zdGFnZShjZSkpCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvbm90ZXMtbWVyZ2UuYyBiL25vdGVzLW1lcmdlLmMKaW5kZXggMGY2N2JkMy4uYWIxODg1NyAxMDA2NDQKLS0tIGEvbm90ZXMtbWVyZ2UuYworKysgYi9ub3Rlcy1tZXJnZS5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgIm5vdGVzLmgiCiAjaW5jbHVkZSAibm90ZXMtbWVyZ2UuaCIKICNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJub3Rlcy11dGlscy5oIgogCiBzdHJ1Y3Qgbm90ZXNfbWVyZ2VfcGFpciB7CiAJdW5zaWduZWQgY2hhciBvYmpbMjBdLCBiYXNlWzIwXSwgbG9jYWxbMjBdLCByZW1vdGVbMjBdOwpAQCAtNTMwLDMyICs1MzEsNiBAQAogCXJldHVybiBjb25mbGljdHMgPyAtMSA6IDE7CiB9CiAKLXZvaWQgY3JlYXRlX25vdGVzX2NvbW1pdChzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzLAotCQkJIGNvbnN0IHN0cnVjdCBzdHJidWYgKm1zZywgdW5zaWduZWQgY2hhciAqcmVzdWx0X3NoYTEpCi17Ci0JdW5zaWduZWQgY2hhciB0cmVlX3NoYTFbMjBdOwotCi0JYXNzZXJ0KHQtPmluaXRpYWxpemVkKTsKLQotCWlmICh3cml0ZV9ub3Rlc190cmVlKHQsIHRyZWVfc2hhMSkpCi0JCWRpZSgiRmFpbGVkIHRvIHdyaXRlIG5vdGVzIHRyZWUgdG8gZGF0YWJhc2UiKTsKLQotCWlmICghcGFyZW50cykgewotCQkvKiBEZWR1Y2UgcGFyZW50IGNvbW1pdCBmcm9tIHQtPnJlZiAqLwotCQl1bnNpZ25lZCBjaGFyIHBhcmVudF9zaGExWzIwXTsKLQkJaWYgKCFyZWFkX3JlZih0LT5yZWYsIHBhcmVudF9zaGExKSkgewotCQkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gbG9va3VwX2NvbW1pdChwYXJlbnRfc2hhMSk7Ci0JCQlpZiAoIXBhcmVudCB8fCBwYXJzZV9jb21taXQocGFyZW50KSkKLQkJCQlkaWUoIkZhaWxlZCB0byBmaW5kL3BhcnNlIGNvbW1pdCAlcyIsIHQtPnJlZik7Ci0JCQljb21taXRfbGlzdF9pbnNlcnQocGFyZW50LCAmcGFyZW50cyk7Ci0JCX0KLQkJLyogZWxzZTogdC0+cmVmIHBvaW50cyB0byBub3RoaW5nLCBhc3N1bWUgcm9vdC9vcnBoYW4gY29tbWl0ICovCi0JfQotCi0JaWYgKGNvbW1pdF90cmVlKG1zZywgdHJlZV9zaGExLCBwYXJlbnRzLCByZXN1bHRfc2hhMSwgTlVMTCwgTlVMTCkpCi0JCWRpZSgiRmFpbGVkIHRvIGNvbW1pdCBub3RlcyB0cmVlIHRvIGRhdGFiYXNlIik7Ci19Ci0KIGludCBub3Rlc19tZXJnZShzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbywKIAkJc3RydWN0IG5vdGVzX3RyZWUgKmxvY2FsX3RyZWUsCiAJCXVuc2lnbmVkIGNoYXIgKnJlc3VsdF9zaGExKQpkaWZmIC0tZ2l0IGEvbm90ZXMtbWVyZ2UuaCBiL25vdGVzLW1lcmdlLmgKaW5kZXggMGMxMWIxNy4uMWQwMWY2YSAxMDA2NDQKLS0tIGEvbm90ZXMtbWVyZ2UuaAorKysgYi9ub3Rlcy1tZXJnZS5oCkBAIC0yNiwyMCArMjYsNiBAQAogdm9pZCBpbml0X25vdGVzX21lcmdlX29wdGlvbnMoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8pOwogCiAvKgotICogQ3JlYXRlIG5ldyBub3RlcyBjb21taXQgZnJvbSB0aGUgZ2l2ZW4gbm90ZXMgdHJlZQotICoKLSAqIFByb3BlcnRpZXMgb2YgdGhlIGNyZWF0ZWQgY29tbWl0OgotICogLSB0cmVlOiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgdCB0byBhIHRyZWUgb2JqZWN0IHdpdGggd3JpdGVfbm90ZXNfdHJlZSgpLgotICogLSBwYXJlbnRzOiB0aGUgZ2l2ZW4gcGFyZW50cyBPUiAoaWYgTlVMTCkgdGhlIGNvbW1pdCByZWZlcmVuY2VkIGJ5IHQtPnJlZi4KLSAqIC0gYXV0aG9yL2NvbW1pdHRlcjogdGhlIGRlZmF1bHQgZGV0ZXJtaW5lZCBieSBjb21tbWl0X3RyZWUoKS4KLSAqIC0gY29tbWl0IG1lc3NhZ2U6IG1zZwotICoKLSAqIFRoZSByZXN1bHRpbmcgY29tbWl0IFNIQTEgaXMgc3RvcmVkIGluIHJlc3VsdF9zaGExLgotICovCi12b2lkIGNyZWF0ZV9ub3Rlc19jb21taXQoc3RydWN0IG5vdGVzX3RyZWUgKnQsIHN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cywKLQkJCSBjb25zdCBzdHJ1Y3Qgc3RyYnVmICptc2csIHVuc2lnbmVkIGNoYXIgKnJlc3VsdF9zaGExKTsKLQotLyoKICAqIE1lcmdlIG5vdGVzIGZyb20gby0+cmVtb3RlX3JlZiBpbnRvIG8tPmxvY2FsX3JlZgogICoKICAqIFRoZSBnaXZlbiBub3Rlc190cmVlICdsb2NhbF90cmVlJyBtdXN0IGJlIHRoZSBub3Rlc190cmVlIHJlZmVyZW5jZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9ub3Rlcy11dGlscy5jIGIvbm90ZXMtdXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTA3YzM3Ci0tLSAvZGV2L251bGwKKysrIGIvbm90ZXMtdXRpbHMuYwpAQCAtMCwwICsxLDE1NyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgIm5vdGVzLXV0aWxzLmgiCisKK3ZvaWQgY3JlYXRlX25vdGVzX2NvbW1pdChzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzLAorCQkJIGNvbnN0IHN0cnVjdCBzdHJidWYgKm1zZywgdW5zaWduZWQgY2hhciAqcmVzdWx0X3NoYTEpCit7CisJdW5zaWduZWQgY2hhciB0cmVlX3NoYTFbMjBdOworCisJYXNzZXJ0KHQtPmluaXRpYWxpemVkKTsKKworCWlmICh3cml0ZV9ub3Rlc190cmVlKHQsIHRyZWVfc2hhMSkpCisJCWRpZSgiRmFpbGVkIHRvIHdyaXRlIG5vdGVzIHRyZWUgdG8gZGF0YWJhc2UiKTsKKworCWlmICghcGFyZW50cykgeworCQkvKiBEZWR1Y2UgcGFyZW50IGNvbW1pdCBmcm9tIHQtPnJlZiAqLworCQl1bnNpZ25lZCBjaGFyIHBhcmVudF9zaGExWzIwXTsKKwkJaWYgKCFyZWFkX3JlZih0LT5yZWYsIHBhcmVudF9zaGExKSkgeworCQkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gbG9va3VwX2NvbW1pdChwYXJlbnRfc2hhMSk7CisJCQlpZiAoIXBhcmVudCB8fCBwYXJzZV9jb21taXQocGFyZW50KSkKKwkJCQlkaWUoIkZhaWxlZCB0byBmaW5kL3BhcnNlIGNvbW1pdCAlcyIsIHQtPnJlZik7CisJCQljb21taXRfbGlzdF9pbnNlcnQocGFyZW50LCAmcGFyZW50cyk7CisJCX0KKwkJLyogZWxzZTogdC0+cmVmIHBvaW50cyB0byBub3RoaW5nLCBhc3N1bWUgcm9vdC9vcnBoYW4gY29tbWl0ICovCisJfQorCisJaWYgKGNvbW1pdF90cmVlKG1zZywgdHJlZV9zaGExLCBwYXJlbnRzLCByZXN1bHRfc2hhMSwgTlVMTCwgTlVMTCkpCisJCWRpZSgiRmFpbGVkIHRvIGNvbW1pdCBub3RlcyB0cmVlIHRvIGRhdGFiYXNlIik7Cit9CisKK3ZvaWQgY29tbWl0X25vdGVzKHN0cnVjdCBub3Rlc190cmVlICp0LCBjb25zdCBjaGFyICptc2cpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBjaGFyIGNvbW1pdF9zaGExWzIwXTsKKworCWlmICghdCkKKwkJdCA9ICZkZWZhdWx0X25vdGVzX3RyZWU7CisJaWYgKCF0LT5pbml0aWFsaXplZCB8fCAhdC0+cmVmIHx8ICEqdC0+cmVmKQorCQlkaWUoXygiQ2Fubm90IGNvbW1pdCB1bmluaXRpYWxpemVkL3VucmVmZXJlbmNlZCBub3RlcyB0cmVlIikpOworCWlmICghdC0+ZGlydHkpCisJCXJldHVybjsgLyogZG9uJ3QgaGF2ZSB0byBjb21taXQgYW4gdW5jaGFuZ2VkIHRyZWUgKi8KKworCS8qIFByZXBhcmUgY29tbWl0IG1lc3NhZ2UgYW5kIHJlZmxvZyBtZXNzYWdlICovCisJc3RyYnVmX2FkZHN0cigmYnVmLCBtc2cpOworCWlmIChidWYuYnVmW2J1Zi5sZW4gLSAxXSAhPSAnXG4nKQorCQlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7IC8qIE1ha2Ugc3VyZSBtc2cgZW5kcyB3aXRoIG5ld2xpbmUgKi8KKworCWNyZWF0ZV9ub3Rlc19jb21taXQodCwgTlVMTCwgJmJ1ZiwgY29tbWl0X3NoYTEpOworCXN0cmJ1Zl9pbnNlcnQoJmJ1ZiwgMCwgIm5vdGVzOiAiLCA3KTsgLyogY29tbWl0IG1lc3NhZ2Ugc3RhcnRzIGF0IGluZGV4IDcgKi8KKwl1cGRhdGVfcmVmKGJ1Zi5idWYsIHQtPnJlZiwgY29tbWl0X3NoYTEsIE5VTEwsIDAsIERJRV9PTl9FUlIpOworCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyBjb21iaW5lX25vdGVzX2ZuIHBhcnNlX2NvbWJpbmVfbm90ZXNfZm4oY29uc3QgY2hhciAqdikKK3sKKwlpZiAoIXN0cmNhc2VjbXAodiwgIm92ZXJ3cml0ZSIpKQorCQlyZXR1cm4gY29tYmluZV9ub3Rlc19vdmVyd3JpdGU7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAodiwgImlnbm9yZSIpKQorCQlyZXR1cm4gY29tYmluZV9ub3Rlc19pZ25vcmU7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAodiwgImNvbmNhdGVuYXRlIikpCisJCXJldHVybiBjb21iaW5lX25vdGVzX2NvbmNhdGVuYXRlOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKHYsICJjYXRfc29ydF91bmlxIikpCisJCXJldHVybiBjb21iaW5lX25vdGVzX2NhdF9zb3J0X3VuaXE7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBub3Rlc19yZXdyaXRlX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKK3sKKwlzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmMgPSBjYjsKKwlpZiAoIXByZWZpeGNtcChrLCAibm90ZXMucmV3cml0ZS4iKSAmJiAhc3RyY21wKGsrMTQsIGMtPmNtZCkpIHsKKwkJYy0+ZW5hYmxlZCA9IGdpdF9jb25maWdfYm9vbChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghYy0+bW9kZV9mcm9tX2VudiAmJiAhc3RyY21wKGssICJub3Rlcy5yZXdyaXRlbW9kZSIpKSB7CisJCWlmICghdikKKwkJCWNvbmZpZ19lcnJvcl9ub25ib29sKGspOworCQljLT5jb21iaW5lID0gcGFyc2VfY29tYmluZV9ub3Rlc19mbih2KTsKKwkJaWYgKCFjLT5jb21iaW5lKSB7CisJCQllcnJvcihfKCJCYWQgbm90ZXMucmV3cml0ZU1vZGUgdmFsdWU6ICclcyciKSwgdik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCFjLT5yZWZzX2Zyb21fZW52ICYmICFzdHJjbXAoaywgIm5vdGVzLnJld3JpdGVyZWYiKSkgeworCQkvKiBub3RlIHRoYXQgYSByZWZzLyBwcmVmaXggaXMgaW1wbGllZCBpbiB0aGUKKwkJICogdW5kZXJseWluZyBmb3JfZWFjaF9nbG9iX3JlZiAqLworCQlpZiAoIXByZWZpeGNtcCh2LCAicmVmcy9ub3Rlcy8iKSkKKwkJCXN0cmluZ19saXN0X2FkZF9yZWZzX2J5X2dsb2IoYy0+cmVmcywgdik7CisJCWVsc2UKKwkJCXdhcm5pbmcoXygiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyIKKwkJCQkiIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIpLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnICppbml0X2NvcHlfbm90ZXNfZm9yX3Jld3JpdGUoY29uc3QgY2hhciAqY21kKQoreworCXN0cnVjdCBub3Rlc19yZXdyaXRlX2NmZyAqYyA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBub3Rlc19yZXdyaXRlX2NmZykpOworCWNvbnN0IGNoYXIgKnJld3JpdGVfbW9kZV9lbnYgPSBnZXRlbnYoR0lUX05PVEVTX1JFV1JJVEVfTU9ERV9FTlZJUk9OTUVOVCk7CisJY29uc3QgY2hhciAqcmV3cml0ZV9yZWZzX2VudiA9IGdldGVudihHSVRfTk9URVNfUkVXUklURV9SRUZfRU5WSVJPTk1FTlQpOworCWMtPmNtZCA9IGNtZDsKKwljLT5lbmFibGVkID0gMTsKKwljLT5jb21iaW5lID0gY29tYmluZV9ub3Rlc19jb25jYXRlbmF0ZTsKKwljLT5yZWZzID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHN0cmluZ19saXN0KSk7CisJYy0+cmVmcy0+c3RyZHVwX3N0cmluZ3MgPSAxOworCWMtPnJlZnNfZnJvbV9lbnYgPSAwOworCWMtPm1vZGVfZnJvbV9lbnYgPSAwOworCWlmIChyZXdyaXRlX21vZGVfZW52KSB7CisJCWMtPm1vZGVfZnJvbV9lbnYgPSAxOworCQljLT5jb21iaW5lID0gcGFyc2VfY29tYmluZV9ub3Rlc19mbihyZXdyaXRlX21vZGVfZW52KTsKKwkJaWYgKCFjLT5jb21iaW5lKQorCQkJLyogVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiB0aGUKKwkJCSAgIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgc2Vjb25kICVzIGlzIGl0cyB2YWx1ZSAqLworCQkJZXJyb3IoXygiQmFkICVzIHZhbHVlOiAnJXMnIiksIEdJVF9OT1RFU19SRVdSSVRFX01PREVfRU5WSVJPTk1FTlQsCisJCQkJCXJld3JpdGVfbW9kZV9lbnYpOworCX0KKwlpZiAocmV3cml0ZV9yZWZzX2VudikgeworCQljLT5yZWZzX2Zyb21fZW52ID0gMTsKKwkJc3RyaW5nX2xpc3RfYWRkX3JlZnNfZnJvbV9jb2xvbl9zZXAoYy0+cmVmcywgcmV3cml0ZV9yZWZzX2Vudik7CisJfQorCWdpdF9jb25maWcobm90ZXNfcmV3cml0ZV9jb25maWcsIGMpOworCWlmICghYy0+ZW5hYmxlZCB8fCAhYy0+cmVmcy0+bnIpIHsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoYy0+cmVmcywgMCk7CisJCWZyZWUoYy0+cmVmcyk7CisJCWZyZWUoYyk7CisJCXJldHVybiBOVUxMOworCX0KKwljLT50cmVlcyA9IGxvYWRfbm90ZXNfdHJlZXMoYy0+cmVmcyk7CisJc3RyaW5nX2xpc3RfY2xlYXIoYy0+cmVmcywgMCk7CisJZnJlZShjLT5yZWZzKTsKKwlyZXR1cm4gYzsKK30KKworaW50IGNvcHlfbm90ZV9mb3JfcmV3cml0ZShzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmMsCisJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb21fb2JqLCBjb25zdCB1bnNpZ25lZCBjaGFyICp0b19vYmopCit7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisJZm9yIChpID0gMDsgYy0+dHJlZXNbaV07IGkrKykKKwkJcmV0ID0gY29weV9ub3RlKGMtPnRyZWVzW2ldLCBmcm9tX29iaiwgdG9fb2JqLCAxLCBjLT5jb21iaW5lKSB8fCByZXQ7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBmaW5pc2hfY29weV9ub3Rlc19mb3JfcmV3cml0ZShzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmMsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBjLT50cmVlc1tpXTsgaSsrKSB7CisJCWNvbW1pdF9ub3RlcyhjLT50cmVlc1tpXSwgbXNnKTsKKwkJZnJlZV9ub3RlcyhjLT50cmVlc1tpXSk7CisJfQorCWZyZWUoYy0+dHJlZXMpOworCWZyZWUoYyk7Cit9CmRpZmYgLS1naXQgYS9ub3Rlcy11dGlscy5oIGIvbm90ZXMtdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGNiMWJmCi0tLSAvZGV2L251bGwKKysrIGIvbm90ZXMtdXRpbHMuaApAQCAtMCwwICsxLDM3IEBACisjaWZuZGVmIE5PVEVTX1VUSUxTX0gKKyNkZWZpbmUgTk9URVNfVVRJTFNfSAorCisjaW5jbHVkZSAibm90ZXMuaCIKKworLyoKKyAqIENyZWF0ZSBuZXcgbm90ZXMgY29tbWl0IGZyb20gdGhlIGdpdmVuIG5vdGVzIHRyZWUKKyAqCisgKiBQcm9wZXJ0aWVzIG9mIHRoZSBjcmVhdGVkIGNvbW1pdDoKKyAqIC0gdHJlZTogdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHQgdG8gYSB0cmVlIG9iamVjdCB3aXRoIHdyaXRlX25vdGVzX3RyZWUoKS4KKyAqIC0gcGFyZW50czogdGhlIGdpdmVuIHBhcmVudHMgT1IgKGlmIE5VTEwpIHRoZSBjb21taXQgcmVmZXJlbmNlZCBieSB0LT5yZWYuCisgKiAtIGF1dGhvci9jb21taXR0ZXI6IHRoZSBkZWZhdWx0IGRldGVybWluZWQgYnkgY29tbW1pdF90cmVlKCkuCisgKiAtIGNvbW1pdCBtZXNzYWdlOiBtc2cKKyAqCisgKiBUaGUgcmVzdWx0aW5nIGNvbW1pdCBTSEExIGlzIHN0b3JlZCBpbiByZXN1bHRfc2hhMS4KKyAqLwordm9pZCBjcmVhdGVfbm90ZXNfY29tbWl0KHN0cnVjdCBub3Rlc190cmVlICp0LCBzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsCisJCQkgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbXNnLCB1bnNpZ25lZCBjaGFyICpyZXN1bHRfc2hhMSk7CisKK3ZvaWQgY29tbWl0X25vdGVzKHN0cnVjdCBub3Rlc190cmVlICp0LCBjb25zdCBjaGFyICptc2cpOworCitzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgeworCXN0cnVjdCBub3Rlc190cmVlICoqdHJlZXM7CisJY29uc3QgY2hhciAqY21kOworCWludCBlbmFibGVkOworCWNvbWJpbmVfbm90ZXNfZm4gY29tYmluZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZnM7CisJaW50IHJlZnNfZnJvbV9lbnY7CisJaW50IG1vZGVfZnJvbV9lbnY7Cit9OworCitzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmluaXRfY29weV9ub3Rlc19mb3JfcmV3cml0ZShjb25zdCBjaGFyICpjbWQpOworaW50IGNvcHlfbm90ZV9mb3JfcmV3cml0ZShzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmMsCisJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb21fb2JqLCBjb25zdCB1bnNpZ25lZCBjaGFyICp0b19vYmopOwordm9pZCBmaW5pc2hfY29weV9ub3Rlc19mb3JfcmV3cml0ZShzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmMsIGNvbnN0IGNoYXIgKm1zZyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbm90ZXMuYyBiL25vdGVzLmMKaW5kZXggZjYzZmQ1Ny4uYjY5YzBiOCAxMDA2NDQKLS0tIGEvbm90ZXMuYworKysgYi9ub3Rlcy5jCkBAIC05MTgsMTcgKzkxOCwyMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgc3RyaW5nX2xpc3RfYWRkX29uZV9yZWYoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKK3N0YXRpYyBpbnQgc3RyaW5nX2xpc3RfYWRkX29uZV9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKIAkJCQkgICBpbnQgZmxhZywgdm9pZCAqY2IpCiB7CiAJc3RydWN0IHN0cmluZ19saXN0ICpyZWZzID0gY2I7Ci0JaWYgKCF1bnNvcnRlZF9zdHJpbmdfbGlzdF9oYXNfc3RyaW5nKHJlZnMsIHBhdGgpKQotCQlzdHJpbmdfbGlzdF9hcHBlbmQocmVmcywgcGF0aCk7CisJaWYgKCF1bnNvcnRlZF9zdHJpbmdfbGlzdF9oYXNfc3RyaW5nKHJlZnMsIHJlZm5hbWUpKQorCQlzdHJpbmdfbGlzdF9hcHBlbmQocmVmcywgcmVmbmFtZSk7CiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBUaGUgbGlzdCBhcmd1bWVudCBtdXN0IGhhdmUgc3RyZHVwX3N0cmluZ3Mgc2V0IG9uIGl0LgorICovCiB2b2lkIHN0cmluZ19saXN0X2FkZF9yZWZzX2J5X2dsb2Ioc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpnbG9iKQogeworCWFzc2VydChsaXN0LT5zdHJkdXBfc3RyaW5ncyk7CiAJaWYgKGhhc19nbG9iX3NwZWNpYWxzKGdsb2IpKSB7CiAJCWZvcl9lYWNoX2dsb2JfcmVmKHN0cmluZ19saXN0X2FkZF9vbmVfcmVmLCBnbG9iLCBsaXN0KTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvb2JqZWN0LmMgYi9vYmplY3QuYwppbmRleCAyMDcwM2Y1Li5kOGE0YjFmIDEwMDY0NAotLS0gYS9vYmplY3QuYworKysgYi9vYmplY3QuYwpAQCAtNzEsMTMgKzcxLDEzIEBACiAKIHN0cnVjdCBvYmplY3QgKmxvb2t1cF9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgaSwgZmlyc3Q7CiAJc3RydWN0IG9iamVjdCAqb2JqOwogCiAJaWYgKCFvYmpfaGFzaCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpID0gaGFzaHRhYmxlX2luZGV4KHNoYTEpOworCWZpcnN0ID0gaSA9IGhhc2h0YWJsZV9pbmRleChzaGExKTsKIAl3aGlsZSAoKG9iaiA9IG9ial9oYXNoW2ldKSAhPSBOVUxMKSB7CiAJCWlmICghaGFzaGNtcChzaGExLCBvYmotPnNoYTEpKQogCQkJYnJlYWs7CkBAIC04NSw2ICs4NSwxNiBAQAogCQlpZiAoaSA9PSBvYmpfaGFzaF9zaXplKQogCQkJaSA9IDA7CiAJfQorCWlmIChvYmogJiYgaSAhPSBmaXJzdCkgeworCQkvKgorCQkgKiBNb3ZlIG9iamVjdCB0byB3aGVyZSB3ZSBzdGFydGVkIHRvIGxvb2sgZm9yIGl0IHNvCisJCSAqIHRoYXQgd2UgZG8gbm90IG5lZWQgdG8gd2FsayB0aGUgaGFzaCB0YWJsZSB0aGUgbmV4dAorCQkgKiB0aW1lIHdlIGxvb2sgZm9yIGl0LgorCQkgKi8KKwkJc3RydWN0IG9iamVjdCAqdG1wID0gb2JqX2hhc2hbaV07CisJCW9ial9oYXNoW2ldID0gb2JqX2hhc2hbZmlyc3RdOworCQlvYmpfaGFzaFtmaXJzdF0gPSB0bXA7CisJfQogCXJldHVybiBvYmo7CiB9CiAKQEAgLTEzNSw3ICsxNDUsNyBAQAogc3RydWN0IG9iamVjdCAqcGFyc2Vfb2JqZWN0X2J1ZmZlcihjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdm9pZCAqYnVmZmVyLCBpbnQgKmVhdGVuX3ApCiB7CiAJc3RydWN0IG9iamVjdCAqb2JqOwotCWludCBlYXRlbiA9IDA7CisJKmVhdGVuX3AgPSAwOwogCiAJb2JqID0gTlVMTDsKIAlpZiAodHlwZSA9PSBPQkpfQkxPQikgewpAQCAtMTU0LDcgKzE2NCw3IEBACiAJCQlpZiAoIXRyZWUtPm9iamVjdC5wYXJzZWQpIHsKIAkJCQlpZiAocGFyc2VfdHJlZV9idWZmZXIodHJlZSwgYnVmZmVyLCBzaXplKSkKIAkJCQkJcmV0dXJuIE5VTEw7Ci0JCQkJZWF0ZW4gPSAxOworCQkJCSplYXRlbl9wID0gMTsKIAkJCX0KIAkJfQogCX0gZWxzZSBpZiAodHlwZSA9PSBPQkpfQ09NTUlUKSB7CkBAIC0xNjQsNyArMTc0LDcgQEAKIAkJCQlyZXR1cm4gTlVMTDsKIAkJCWlmICghY29tbWl0LT5idWZmZXIpIHsKIAkJCQljb21taXQtPmJ1ZmZlciA9IGJ1ZmZlcjsKLQkJCQllYXRlbiA9IDE7CisJCQkJKmVhdGVuX3AgPSAxOwogCQkJfQogCQkJb2JqID0gJmNvbW1pdC0+b2JqZWN0OwogCQl9CkBAIC0xODEsNyArMTkxLDYgQEAKIAl9CiAJaWYgKG9iaiAmJiBvYmotPnR5cGUgPT0gT0JKX05PTkUpCiAJCW9iai0+dHlwZSA9IHR5cGU7Ci0JKmVhdGVuX3AgPSBlYXRlbjsKIAlyZXR1cm4gb2JqOwogfQogCkBAIC0yNjAsMTEgKzI2OSwxOCBAQAogCWFkZF9vYmplY3RfYXJyYXlfd2l0aF9tb2RlKG9iaiwgbmFtZSwgYXJyYXksIFNfSUZJTlZBTElEKTsKIH0KIAorLyoKKyAqIEEgemVyby1sZW5ndGggc3RyaW5nIHRvIHdoaWNoIG9iamVjdF9hcnJheV9lbnRyeTo6bmFtZSBjYW4gYmUKKyAqIGluaXRpYWxpemVkIHdpdGhvdXQgcmVxdWlyaW5nIGEgbWFsbG9jL2ZyZWUuCisgKi8KK3N0YXRpYyBjaGFyIG9iamVjdF9hcnJheV9zbG9wYnVmWzFdOworCiB2b2lkIGFkZF9vYmplY3RfYXJyYXlfd2l0aF9tb2RlKHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG9iamVjdF9hcnJheSAqYXJyYXksIHVuc2lnbmVkIG1vZGUpCiB7CiAJdW5zaWduZWQgbnIgPSBhcnJheS0+bnI7CiAJdW5zaWduZWQgYWxsb2MgPSBhcnJheS0+YWxsb2M7CiAJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqb2JqZWN0cyA9IGFycmF5LT5vYmplY3RzOworCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKmVudHJ5OwogCiAJaWYgKG5yID49IGFsbG9jKSB7CiAJCWFsbG9jID0gKGFsbG9jICsgMzIpICogMjsKQEAgLTI3MiwyOCArMjg4LDY3IEBACiAJCWFycmF5LT5hbGxvYyA9IGFsbG9jOwogCQlhcnJheS0+b2JqZWN0cyA9IG9iamVjdHM7CiAJfQotCW9iamVjdHNbbnJdLml0ZW0gPSBvYmo7Ci0Jb2JqZWN0c1tucl0ubmFtZSA9IG5hbWU7Ci0Jb2JqZWN0c1tucl0ubW9kZSA9IG1vZGU7CisJZW50cnkgPSAmb2JqZWN0c1tucl07CisJZW50cnktPml0ZW0gPSBvYmo7CisJaWYgKCFuYW1lKQorCQllbnRyeS0+bmFtZSA9IE5VTEw7CisJZWxzZSBpZiAoISpuYW1lKQorCQkvKiBVc2Ugb3VyIG93biBlbXB0eSBzdHJpbmcgaW5zdGVhZCBvZiBhbGxvY2F0aW5nIG9uZTogKi8KKwkJZW50cnktPm5hbWUgPSBvYmplY3RfYXJyYXlfc2xvcGJ1ZjsKKwllbHNlCisJCWVudHJ5LT5uYW1lID0geHN0cmR1cChuYW1lKTsKKwllbnRyeS0+bW9kZSA9IG1vZGU7CiAJYXJyYXktPm5yID0gKytucjsKIH0KIAordm9pZCBvYmplY3RfYXJyYXlfZmlsdGVyKHN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5LAorCQkJIG9iamVjdF9hcnJheV9lYWNoX2Z1bmNfdCB3YW50LCB2b2lkICpjYl9kYXRhKQoreworCXVuc2lnbmVkIG5yID0gYXJyYXktPm5yLCBzcmMsIGRzdDsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICpvYmplY3RzID0gYXJyYXktPm9iamVjdHM7CisKKwlmb3IgKHNyYyA9IGRzdCA9IDA7IHNyYyA8IG5yOyBzcmMrKykgeworCQlpZiAod2FudCgmb2JqZWN0c1tzcmNdLCBjYl9kYXRhKSkgeworCQkJaWYgKHNyYyAhPSBkc3QpCisJCQkJb2JqZWN0c1tkc3RdID0gb2JqZWN0c1tzcmNdOworCQkJZHN0Kys7CisJCX0gZWxzZSB7CisJCQlpZiAob2JqZWN0c1tzcmNdLm5hbWUgIT0gb2JqZWN0X2FycmF5X3Nsb3BidWYpCisJCQkJZnJlZShvYmplY3RzW3NyY10ubmFtZSk7CisJCX0KKwl9CisJYXJyYXktPm5yID0gZHN0OworfQorCisvKgorICogUmV0dXJuIHRydWUgaWZmIGFycmF5IGFscmVhZHkgY29udGFpbnMgYW4gZW50cnkgd2l0aCBuYW1lLgorICovCitzdGF0aWMgaW50IGNvbnRhaW5zX25hbWUoc3RydWN0IG9iamVjdF9hcnJheSAqYXJyYXksIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJdW5zaWduZWQgbnIgPSBhcnJheS0+bnIsIGk7CisJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqb2JqZWN0ID0gYXJyYXktPm9iamVjdHM7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKywgb2JqZWN0KyspCisJCWlmICghc3RyY21wKG9iamVjdC0+bmFtZSwgbmFtZSkpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKwogdm9pZCBvYmplY3RfYXJyYXlfcmVtb3ZlX2R1cGxpY2F0ZXMoc3RydWN0IG9iamVjdF9hcnJheSAqYXJyYXkpCiB7Ci0JdW5zaWduZWQgaW50IHJlZiwgc3JjLCBkc3Q7CisJdW5zaWduZWQgbnIgPSBhcnJheS0+bnIsIHNyYzsKIAlzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICpvYmplY3RzID0gYXJyYXktPm9iamVjdHM7CiAKLQlmb3IgKHJlZiA9IDA7IHJlZiArIDEgPCBhcnJheS0+bnI7IHJlZisrKSB7Ci0JCWZvciAoc3JjID0gcmVmICsgMSwgZHN0ID0gc3JjOwotCQkgICAgIHNyYyA8IGFycmF5LT5ucjsKLQkJICAgICBzcmMrKykgewotCQkJaWYgKCFzdHJjbXAob2JqZWN0c1tyZWZdLm5hbWUsIG9iamVjdHNbc3JjXS5uYW1lKSkKLQkJCQljb250aW51ZTsKLQkJCWlmIChzcmMgIT0gZHN0KQotCQkJCW9iamVjdHNbZHN0XSA9IG9iamVjdHNbc3JjXTsKLQkJCWRzdCsrOworCWFycmF5LT5uciA9IDA7CisJZm9yIChzcmMgPSAwOyBzcmMgPCBucjsgc3JjKyspIHsKKwkJaWYgKCFjb250YWluc19uYW1lKGFycmF5LCBvYmplY3RzW3NyY10ubmFtZSkpIHsKKwkJCWlmIChzcmMgIT0gYXJyYXktPm5yKQorCQkJCW9iamVjdHNbYXJyYXktPm5yXSA9IG9iamVjdHNbc3JjXTsKKwkJCWFycmF5LT5ucisrOworCQl9IGVsc2UgeworCQkJaWYgKG9iamVjdHNbc3JjXS5uYW1lICE9IG9iamVjdF9hcnJheV9zbG9wYnVmKQorCQkJCWZyZWUob2JqZWN0c1tzcmNdLm5hbWUpOwogCQl9Ci0JCWFycmF5LT5uciA9IGRzdDsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL29iamVjdC5oIGIvb2JqZWN0LmgKaW5kZXggOTdkMzg0Yi4uMmZmNjhjNSAxMDA2NDQKLS0tIGEvb2JqZWN0LmgKKysrIGIvb2JqZWN0LmgKQEAgLTExLDcgKzExLDEzIEBACiAJdW5zaWduZWQgaW50IGFsbG9jOwogCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgewogCQlzdHJ1Y3Qgb2JqZWN0ICppdGVtOwotCQljb25zdCBjaGFyICpuYW1lOworCQkvKgorCQkgKiBuYW1lIG9yIE5VTEwuICBJZiBub24tTlVMTCwgdGhlIG1lbW9yeSBwb2ludGVkIHRvCisJCSAqIGlzIG93bmVkIGJ5IHRoaXMgb2JqZWN0ICpleGNlcHQqIGlmIGl0IHBvaW50cyBhdAorCQkgKiBvYmplY3RfYXJyYXlfc2xvcGJ1Ziwgd2hpY2ggaXMgYSBzdGF0aWMgY29weSBvZiB0aGUKKwkJICogZW1wdHkgc3RyaW5nLgorCQkgKi8KKwkJY2hhciAqbmFtZTsKIAkJdW5zaWduZWQgbW9kZTsKIAl9ICpvYmplY3RzOwogfTsKQEAgLTg1LDcgKzkxLDIyIEBACiAvKiBPYmplY3QgYXJyYXkgaGFuZGxpbmcgLi4gKi8KIHZvaWQgYWRkX29iamVjdF9hcnJheShzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5KTsKIHZvaWQgYWRkX29iamVjdF9hcnJheV93aXRoX21vZGUoc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICphcnJheSwgdW5zaWduZWQgbW9kZSk7Ci12b2lkIG9iamVjdF9hcnJheV9yZW1vdmVfZHVwbGljYXRlcyhzdHJ1Y3Qgb2JqZWN0X2FycmF5ICopOworCit0eXBlZGVmIGludCAoKm9iamVjdF9hcnJheV9lYWNoX2Z1bmNfdCkoc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqLCB2b2lkICopOworCisvKgorICogQXBwbHkgd2FudCB0byBlYWNoIGVudHJ5IGluIGFycmF5LCByZXRhaW5pbmcgb25seSB0aGUgZW50cmllcyBmb3IKKyAqIHdoaWNoIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUuICBQcmVzZXJ2ZSB0aGUgb3JkZXIgb2YgdGhlIGVudHJpZXMKKyAqIHRoYXQgYXJlIHJldGFpbmVkLgorICovCit2b2lkIG9iamVjdF9hcnJheV9maWx0ZXIoc3RydWN0IG9iamVjdF9hcnJheSAqYXJyYXksCisJCQkgb2JqZWN0X2FycmF5X2VhY2hfZnVuY190IHdhbnQsIHZvaWQgKmNiX2RhdGEpOworCisvKgorICogUmVtb3ZlIGZyb20gYXJyYXkgYWxsIGJ1dCB0aGUgZmlyc3QgZW50cnkgd2l0aCBhIGdpdmVuIG5hbWUuCisgKiBXYXJuaW5nOiB0aGlzIGZ1bmN0aW9uIHVzZXMgYW4gTyhOXjIpIGFsZ29yaXRobS4KKyAqLwordm9pZCBvYmplY3RfYXJyYXlfcmVtb3ZlX2R1cGxpY2F0ZXMoc3RydWN0IG9iamVjdF9hcnJheSAqYXJyYXkpOwogCiB2b2lkIGNsZWFyX29iamVjdF9mbGFncyh1bnNpZ25lZCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL3BhY2stcmVmcy5jIGIvcGFjay1yZWZzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0NjFmNzEuLjAwMDAwMDAKLS0tIGEvcGFjay1yZWZzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotI2luY2x1ZGUgImNhY2hlLmgiCi0jaW5jbHVkZSAicmVmcy5oIgotI2luY2x1ZGUgInRhZy5oIgotI2luY2x1ZGUgInBhY2stcmVmcy5oIgotCi1zdHJ1Y3QgcmVmX3RvX3BydW5lIHsKLQlzdHJ1Y3QgcmVmX3RvX3BydW5lICpuZXh0OwotCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Ci0JY2hhciBuYW1lW0ZMRVhfQVJSQVldOwotfTsKLQotc3RydWN0IHBhY2tfcmVmc19jYl9kYXRhIHsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0Jc3RydWN0IHJlZl90b19wcnVuZSAqcmVmX3RvX3BydW5lOwotCUZJTEUgKnJlZnNfZmlsZTsKLX07Ci0KLXN0YXRpYyBpbnQgZG9fbm90X3BydW5lKGludCBmbGFncykKLXsKLQkvKiBJZiBpdCBpcyBhbHJlYWR5IHBhY2tlZCBvciBpZiBpdCBpcyBhIHN5bXJlZiwKLQkgKiBkbyBub3QgcHJ1bmUgaXQuCi0JICovCi0JcmV0dXJuIChmbGFncyAmIChSRUZfSVNTWU1SRUZ8UkVGX0lTUEFDS0VEKSk7Ci19Ci0KLXN0YXRpYyBpbnQgaGFuZGxlX29uZV9yZWYoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKLQkJCSAgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQotewotCXN0cnVjdCBwYWNrX3JlZnNfY2JfZGF0YSAqY2IgPSBjYl9kYXRhOwotCXN0cnVjdCBvYmplY3QgKm87Ci0JaW50IGlzX3RhZ19yZWY7Ci0KLQkvKiBEbyBub3QgcGFjayB0aGUgc3ltYm9saWMgcmVmcyAqLwotCWlmICgoZmxhZ3MgJiBSRUZfSVNTWU1SRUYpKQotCQlyZXR1cm4gMDsKLQlpc190YWdfcmVmID0gIXByZWZpeGNtcChwYXRoLCAicmVmcy90YWdzLyIpOwotCi0JLyogQUxXQVlTIHBhY2sgcmVmcyB0aGF0IHdlcmUgYWxyZWFkeSBwYWNrZWQgb3IgYXJlIHRhZ3MgKi8KLQlpZiAoIShjYi0+ZmxhZ3MgJiBQQUNLX1JFRlNfQUxMKSAmJiAhaXNfdGFnX3JlZiAmJiAhKGZsYWdzICYgUkVGX0lTUEFDS0VEKSkKLQkJcmV0dXJuIDA7Ci0KLQlmcHJpbnRmKGNiLT5yZWZzX2ZpbGUsICIlcyAlc1xuIiwgc2hhMV90b19oZXgoc2hhMSksIHBhdGgpOwotCi0JbyA9IHBhcnNlX29iamVjdF9vcl9kaWUoc2hhMSwgcGF0aCk7Ci0JaWYgKG8tPnR5cGUgPT0gT0JKX1RBRykgewotCQlvID0gZGVyZWZfdGFnKG8sIHBhdGgsIDApOwotCQlpZiAobykKLQkJCWZwcmludGYoY2ItPnJlZnNfZmlsZSwgIl4lc1xuIiwKLQkJCQlzaGExX3RvX2hleChvLT5zaGExKSk7Ci0JfQotCi0JaWYgKChjYi0+ZmxhZ3MgJiBQQUNLX1JFRlNfUFJVTkUpICYmICFkb19ub3RfcHJ1bmUoZmxhZ3MpKSB7Ci0JCWludCBuYW1lbGVuID0gc3RybGVuKHBhdGgpICsgMTsKLQkJc3RydWN0IHJlZl90b19wcnVuZSAqbiA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpuKSArIG5hbWVsZW4pOwotCQloYXNoY3B5KG4tPnNoYTEsIHNoYTEpOwotCQlzdHJjcHkobi0+bmFtZSwgcGF0aCk7Ci0JCW4tPm5leHQgPSBjYi0+cmVmX3RvX3BydW5lOwotCQljYi0+cmVmX3RvX3BydW5lID0gbjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBSZW1vdmUgZW1wdHkgcGFyZW50cywgYnV0IHNwYXJlIHJlZnMvIGFuZCBpbW1lZGlhdGUgc3ViZGlycy4KLSAqIE5vdGU6IG11bmdlcyAqbmFtZS4KLSAqLwotc3RhdGljIHZvaWQgdHJ5X3JlbW92ZV9lbXB0eV9wYXJlbnRzKGNoYXIgKm5hbWUpCi17Ci0JY2hhciAqcCwgKnE7Ci0JaW50IGk7Ci0JcCA9IG5hbWU7Ci0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeyAvKiByZWZzL3toZWFkcyx0YWdzLC4uLn0vICovCi0JCXdoaWxlICgqcCAmJiAqcCAhPSAnLycpCi0JCQlwKys7Ci0JCS8qIHRvbGVyYXRlIGR1cGxpY2F0ZSBzbGFzaGVzOyBzZWUgY2hlY2tfcmVmbmFtZV9mb3JtYXQoKSAqLwotCQl3aGlsZSAoKnAgPT0gJy8nKQotCQkJcCsrOwotCX0KLQlmb3IgKHEgPSBwOyAqcTsgcSsrKQotCQk7Ci0Jd2hpbGUgKDEpIHsKLQkJd2hpbGUgKHEgPiBwICYmICpxICE9ICcvJykKLQkJCXEtLTsKLQkJd2hpbGUgKHEgPiBwICYmICoocS0xKSA9PSAnLycpCi0JCQlxLS07Ci0JCWlmIChxID09IHApCi0JCQlicmVhazsKLQkJKnEgPSAnXDAnOwotCQlpZiAocm1kaXIoZ2l0X3BhdGgoIiVzIiwgbmFtZSkpKQotCQkJYnJlYWs7Ci0JfQotfQotCi0vKiBtYWtlIHN1cmUgbm9ib2R5IHRvdWNoZWQgdGhlIHJlZiwgYW5kIHVubGluayAqLwotc3RhdGljIHZvaWQgcHJ1bmVfcmVmKHN0cnVjdCByZWZfdG9fcHJ1bmUgKnIpCi17Ci0Jc3RydWN0IHJlZl9sb2NrICpsb2NrID0gbG9ja19yZWZfc2hhMShyLT5uYW1lICsgNSwgci0+c2hhMSk7Ci0KLQlpZiAobG9jaykgewotCQl1bmxpbmtfb3Jfd2FybihnaXRfcGF0aCgiJXMiLCByLT5uYW1lKSk7Ci0JCXVubG9ja19yZWYobG9jayk7Ci0JCXRyeV9yZW1vdmVfZW1wdHlfcGFyZW50cyhyLT5uYW1lKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHBydW5lX3JlZnMoc3RydWN0IHJlZl90b19wcnVuZSAqcikKLXsKLQl3aGlsZSAocikgewotCQlwcnVuZV9yZWYocik7Ci0JCXIgPSByLT5uZXh0OwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgcGFja2VkOwotCi1pbnQgcGFja19yZWZzKHVuc2lnbmVkIGludCBmbGFncykKLXsKLQlpbnQgZmQ7Ci0Jc3RydWN0IHBhY2tfcmVmc19jYl9kYXRhIGNiZGF0YTsKLQotCW1lbXNldCgmY2JkYXRhLCAwLCBzaXplb2YoY2JkYXRhKSk7Ci0JY2JkYXRhLmZsYWdzID0gZmxhZ3M7Ci0KLQlmZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJnBhY2tlZCwgZ2l0X3BhdGgoInBhY2tlZC1yZWZzIiksCi0JCQkJICAgICAgIExPQ0tfRElFX09OX0VSUk9SKTsKLQljYmRhdGEucmVmc19maWxlID0gZmRvcGVuKGZkLCAidyIpOwotCWlmICghY2JkYXRhLnJlZnNfZmlsZSkKLQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY3JlYXRlIHJlZi1wYWNrIGZpbGUgc3RydWN0dXJlIik7Ci0KLQkvKiBwZXJoYXBzIG90aGVyIHRyYWl0cyBsYXRlciBhcyB3ZWxsICovCi0JZnByaW50ZihjYmRhdGEucmVmc19maWxlLCAiIyBwYWNrLXJlZnMgd2l0aDogcGVlbGVkIGZ1bGx5LXBlZWxlZCBcbiIpOwotCi0JZm9yX2VhY2hfcmVmKGhhbmRsZV9vbmVfcmVmLCAmY2JkYXRhKTsKLQlpZiAoZmVycm9yKGNiZGF0YS5yZWZzX2ZpbGUpKQotCQlkaWUoImZhaWxlZCB0byB3cml0ZSByZWYtcGFjayBmaWxlIik7Ci0JaWYgKGZmbHVzaChjYmRhdGEucmVmc19maWxlKSB8fCBmc3luYyhmZCkgfHwgZmNsb3NlKGNiZGF0YS5yZWZzX2ZpbGUpKQotCQlkaWVfZXJybm8oImZhaWxlZCB0byB3cml0ZSByZWYtcGFjayBmaWxlIik7Ci0JLyoKLQkgKiBTaW5jZSB0aGUgbG9jayBmaWxlIHdhcyBmZG9wZW4oKSdlZCBhbmQgdGhlbiBmY2xvc2UoKSdlZCBhYm92ZSwKLQkgKiBhc3NpZ24gLTEgdG8gdGhlIGxvY2sgZmlsZSBkZXNjcmlwdG9yIHNvIHRoYXQgY29tbWl0X2xvY2tfZmlsZSgpCi0JICogd29uJ3QgdHJ5IHRvIGNsb3NlKCkgaXQuCi0JICovCi0JcGFja2VkLmZkID0gLTE7Ci0JaWYgKGNvbW1pdF9sb2NrX2ZpbGUoJnBhY2tlZCkgPCAwKQotCQlkaWVfZXJybm8oInVuYWJsZSB0byBvdmVyd3JpdGUgb2xkIHJlZi1wYWNrIGZpbGUiKTsKLQlwcnVuZV9yZWZzKGNiZGF0YS5yZWZfdG9fcHJ1bmUpOwotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvcGFjay1yZWZzLmggYi9wYWNrLXJlZnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE4YWNmYi4uMDAwMDAwMAotLS0gYS9wYWNrLXJlZnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSNpZm5kZWYgUEFDS19SRUZTX0gKLSNkZWZpbmUgUEFDS19SRUZTX0gKLQotLyoKLSAqIEZsYWdzIGZvciBjb250cm9sbGluZyBiZWhhdmlvdXIgb2YgcGFja19yZWZzKCkKLSAqIFBBQ0tfUkVGU19QUlVORTogUHJ1bmUgbG9vc2UgcmVmcyBhZnRlciBwYWNraW5nCi0gKiBQQUNLX1JFRlNfQUxMOiAgIFBhY2sgX2FsbF8gcmVmcywgbm90IGp1c3QgdGFncyBhbmQgYWxyZWFkeSBwYWNrZWQgcmVmcwotICovCi0jZGVmaW5lIFBBQ0tfUkVGU19QUlVORSAweDAwMDEKLSNkZWZpbmUgUEFDS19SRUZTX0FMTCAgIDB4MDAwMgotCi0vKgotICogV3JpdGUgYSBwYWNrZWQtcmVmcyBmaWxlIGZvciB0aGUgY3VycmVudCByZXBvc2l0b3J5LgotICogZmxhZ3M6IENvbWJpbmF0aW9uIG9mIHRoZSBhYm92ZSBQQUNLX1JFRlNfKiBmbGFncy4KLSAqLwotaW50IHBhY2tfcmVmcyh1bnNpZ25lZCBpbnQgZmxhZ3MpOwotCi0jZW5kaWYgLyogUEFDS19SRUZTX0ggKi8KZGlmZiAtLWdpdCBhL3BhY2stcmV2aW5kZXguYyBiL3BhY2stcmV2aW5kZXguYwppbmRleCA3N2EwNDY1Li5iNGQyYjM1IDEwMDY0NAotLS0gYS9wYWNrLXJldmluZGV4LmMKKysrIGIvcGFjay1yZXZpbmRleC5jCkBAIC01OSwxMSArNTksMTAxIEBACiAJLyogcmV2aW5kZXggZWxlbWVudHMgYXJlIGxhemlseSBpbml0aWFsaXplZCAqLwogfQogCi1zdGF0aWMgaW50IGNtcF9vZmZzZXQoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQorLyoKKyAqIFRoaXMgaXMgYSBsZWFzdC1zaWduaWZpY2FudC1kaWdpdCByYWRpeCBzb3J0LgorICoKKyAqIEl0IHNvcnRzIGVhY2ggb2YgdGhlICJuIiBpdGVtcyBpbiAiZW50cmllcyIgYnkgaXRzIG9mZnNldCBmaWVsZC4gVGhlICJtYXgiCisgKiBwYXJhbWV0ZXIgbXVzdCBiZSBhdCBsZWFzdCBhcyBsYXJnZSBhcyB0aGUgbGFyZ2VzdCBvZmZzZXQgaW4gdGhlIGFycmF5LAorICogYW5kIGxldHMgdXMgcXVpdCB0aGUgc29ydCBlYXJseS4KKyAqLworc3RhdGljIHZvaWQgc29ydF9yZXZpbmRleChzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKmVudHJpZXMsIHVuc2lnbmVkIG4sIG9mZl90IG1heCkKIHsKLQljb25zdCBzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKmEgPSBhXzsKLQljb25zdCBzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKmIgPSBiXzsKLQlyZXR1cm4gKGEtPm9mZnNldCA8IGItPm9mZnNldCkgPyAtMSA6IChhLT5vZmZzZXQgPiBiLT5vZmZzZXQpID8gMSA6IDA7CisJLyoKKwkgKiBXZSB1c2UgYSAiZGlnaXQiIHNpemUgb2YgMTYgYml0cy4gVGhhdCBrZWVwcyBvdXIgbWVtb3J5CisJICogdXNhZ2UgcmVhc29uYWJsZSwgYW5kIHdlIGNhbiBnZW5lcmFsbHkgKGZvciBhIDRHIG9yIHNtYWxsZXIKKwkgKiBwYWNrZmlsZSkgcXVpdCBhZnRlciB0d28gcm91bmRzIG9mIHJhZGl4LXNvcnRpbmcuCisJICovCisjZGVmaW5lIERJR0lUX1NJWkUgKDE2KQorI2RlZmluZSBCVUNLRVRTICgxIDw8IERJR0lUX1NJWkUpCisJLyoKKwkgKiBXZSB3YW50IHRvIGtub3cgdGhlIGJ1Y2tldCB0aGF0IGFbaV0gd2lsbCBnbyBpbnRvIHdoZW4gd2UgYXJlIHVzaW5nCisJICogdGhlIGRpZ2l0IHRoYXQgaXMgTiBiaXRzIGZyb20gdGhlIChsZWFzdCBzaWduaWZpY2FudCkgZW5kLgorCSAqLworI2RlZmluZSBCVUNLRVRfRk9SKGEsIGksIGJpdHMpICgoKGEpWyhpKV0ub2Zmc2V0ID4+IChiaXRzKSkgJiAoQlVDS0VUUy0xKSkKKworCS8qCisJICogV2UgbmVlZCBPKG4pIHRlbXBvcmFyeSBzdG9yYWdlLiBSYXRoZXIgdGhhbiBkbyBhbiBleHRyYSBjb3B5IG9mIHRoZQorCSAqIHBhcnRpYWwgcmVzdWx0cyBpbnRvICJlbnRyaWVzIiwgd2Ugc29ydCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRoZQorCSAqIHJlYWwgYXJyYXkgYW5kIHRlbXBvcmFyeSBzdG9yYWdlLiBJbiBlYWNoIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcCwgd2UKKwkgKiBrZWVwIHRyYWNrIG9mIHRoZW0gd2l0aCBhbGlhcyBwb2ludGVycywgYWx3YXlzIHNvcnRpbmcgZnJvbSAiZnJvbSIKKwkgKiB0byAidG8iLgorCSAqLworCXN0cnVjdCByZXZpbmRleF9lbnRyeSAqdG1wID0geG1hbGxvYyhuICogc2l6ZW9mKCp0bXApKTsKKwlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKmZyb20gPSBlbnRyaWVzLCAqdG8gPSB0bXA7CisJaW50IGJpdHM7CisJdW5zaWduZWQgKnBvcyA9IHhtYWxsb2MoQlVDS0VUUyAqIHNpemVvZigqcG9zKSk7CisKKwkvKgorCSAqIElmIChtYXggPj4gYml0cykgaXMgemVybywgdGhlbiB3ZSBrbm93IHRoYXQgdGhlIHJhZGl4IGRpZ2l0IHdlIGFyZQorCSAqIG9uIChhbmQgYW55IGhpZ2hlcikgd2lsbCBiZSB6ZXJvIGZvciBhbGwgZW50cmllcywgYW5kIG91ciBsb29wIHdpbGwKKwkgKiBiZSBhIG5vLW9wLCBhcyBldmVyeWJvZHkgbGFuZHMgaW4gdGhlIHNhbWUgemVyby10aCBidWNrZXQuCisJICovCisJZm9yIChiaXRzID0gMDsgbWF4ID4+IGJpdHM7IGJpdHMgKz0gRElHSVRfU0laRSkgeworCQlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKnN3YXA7CisJCXVuc2lnbmVkIGk7CisKKwkJbWVtc2V0KHBvcywgMCwgQlVDS0VUUyAqIHNpemVvZigqcG9zKSk7CisKKwkJLyoKKwkJICogV2Ugd2FudCBwb3NbaV0gdG8gc3RvcmUgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGVsZW1lbnQgdGhhdAorCQkgKiB3aWxsIGdvIGluIGJ1Y2tldCAiaSIgKGFjdHVhbGx5IG9uZSBwYXN0IHRoZSBsYXN0IGVsZW1lbnQpLgorCQkgKiBUbyBkbyB0aGlzLCB3ZSBmaXJzdCBjb3VudCB0aGUgaXRlbXMgdGhhdCB3aWxsIGdvIGluIGVhY2gKKwkJICogYnVja2V0LCB3aGljaCBnaXZlcyB1cyBhIHJlbGF0aXZlIG9mZnNldCBmcm9tIHRoZSBsYXN0CisJCSAqIGJ1Y2tldC4gV2UgY2FuIHRoZW4gY3VtdWxhdGl2ZWx5IGFkZCB0aGUgaW5kZXggZnJvbSB0aGUKKwkJICogcHJldmlvdXMgYnVja2V0IHRvIGdldCB0aGUgdHJ1ZSBpbmRleC4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCQlwb3NbQlVDS0VUX0ZPUihmcm9tLCBpLCBiaXRzKV0rKzsKKwkJZm9yIChpID0gMTsgaSA8IEJVQ0tFVFM7IGkrKykKKwkJCXBvc1tpXSArPSBwb3NbaS0xXTsKKworCQkvKgorCQkgKiBOb3cgd2UgY2FuIGRyb3AgdGhlIGVsZW1lbnRzIGludG8gdGhlaXIgY29ycmVjdCBidWNrZXRzIChpbgorCQkgKiBvdXIgdGVtcG9yYXJ5IGFycmF5KS4gIFdlIGl0ZXJhdGUgdGhlIHBvcyBjb3VudGVyIGJhY2t3YXJkcworCQkgKiB0byBhdm9pZCB1c2luZyBhbiBleHRyYSBpbmRleCB0byBjb3VudCB1cC4gQW5kIHNpbmNlIHdlIGFyZQorCQkgKiBnb2luZyBiYWNrd2FyZHMgdGhlcmUsIHdlIG11c3QgYWxzbyBnbyBiYWNrd2FyZHMgdGhyb3VnaCB0aGUKKwkJICogYXJyYXkgaXRzZWxmLCB0byBrZWVwIHRoZSBzb3J0IHN0YWJsZS4KKwkJICoKKwkJICogTm90ZSB0aGF0IHdlIHVzZSBhbiB1bnNpZ25lZCBpdGVyYXRvciB0byBtYWtlIHN1cmUgd2UgY2FuCisJCSAqIGhhbmRsZSAyXjMyLTEgb2JqZWN0cywgZXZlbiBvbiBhIDMyLWJpdCBzeXN0ZW0uIEJ1dCB0aGlzCisJCSAqIG1lYW5zIHdlIGNhbm5vdCB1c2UgdGhlIG1vcmUgb2J2aW91cyAiaSA+PSAwIiBsb29wIGNvbmRpdGlvbgorCQkgKiBmb3IgY291bnRpbmcgYmFja3dhcmRzLCBhbmQgbXVzdCBpbnN0ZWFkIGNoZWNrIGZvcgorCQkgKiB3cmFwLWFyb3VuZCB3aXRoIFVJTlRfTUFYLgorCQkgKi8KKwkJZm9yIChpID0gbiAtIDE7IGkgIT0gVUlOVF9NQVg7IGktLSkKKwkJCXRvWy0tcG9zW0JVQ0tFVF9GT1IoZnJvbSwgaSwgYml0cyldXSA9IGZyb21baV07CisKKwkJLyoKKwkJICogTm93ICJ0byIgY29udGFpbnMgdGhlIG1vc3Qgc29ydGVkIGxpc3QsIHNvIHdlIHN3YXAgImZyb20iIGFuZAorCQkgKiAidG8iIGZvciB0aGUgbmV4dCBpdGVyYXRpb24uCisJCSAqLworCQlzd2FwID0gZnJvbTsKKwkJZnJvbSA9IHRvOworCQl0byA9IHN3YXA7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBlbmRlZCB3aXRoIG91ciBkYXRhIGluIHRoZSBvcmlnaW5hbCBhcnJheSwgZ3JlYXQuIElmIG5vdCwKKwkgKiB3ZSBoYXZlIHRvIG1vdmUgaXQgYmFjayBmcm9tIHRoZSB0ZW1wb3Jhcnkgc3RvcmFnZS4KKwkgKi8KKwlpZiAoZnJvbSAhPSBlbnRyaWVzKQorCQltZW1jcHkoZW50cmllcywgdG1wLCBuICogc2l6ZW9mKCplbnRyaWVzKSk7CisJZnJlZSh0bXApOworCWZyZWUocG9zKTsKKworI3VuZGVmIEJVQ0tFVF9GT1IKKyN1bmRlZiBCVUNLRVRTCisjdW5kZWYgRElHSVRfU0laRQogfQogCiAvKgpAQCAtNzIsOCArMTYyLDggQEAKIHN0YXRpYyB2b2lkIGNyZWF0ZV9wYWNrX3JldmluZGV4KHN0cnVjdCBwYWNrX3JldmluZGV4ICpyaXgpCiB7CiAJc3RydWN0IHBhY2tlZF9naXQgKnAgPSByaXgtPnA7Ci0JaW50IG51bV9lbnQgPSBwLT5udW1fb2JqZWN0czsKLQlpbnQgaTsKKwl1bnNpZ25lZCBudW1fZW50ID0gcC0+bnVtX29iamVjdHM7CisJdW5zaWduZWQgaTsKIAljb25zdCBjaGFyICppbmRleCA9IHAtPmluZGV4X2RhdGE7CiAKIAlyaXgtPnJldmluZGV4ID0geG1hbGxvYyhzaXplb2YoKnJpeC0+cmV2aW5kZXgpICogKG51bV9lbnQgKyAxKSk7CkBAIC0xMDgsMTMgKzE5OCwxMyBAQAogCSAqLwogCXJpeC0+cmV2aW5kZXhbbnVtX2VudF0ub2Zmc2V0ID0gcC0+cGFja19zaXplIC0gMjA7CiAJcml4LT5yZXZpbmRleFtudW1fZW50XS5uciA9IC0xOwotCXFzb3J0KHJpeC0+cmV2aW5kZXgsIG51bV9lbnQsIHNpemVvZigqcml4LT5yZXZpbmRleCksIGNtcF9vZmZzZXQpOworCXNvcnRfcmV2aW5kZXgocml4LT5yZXZpbmRleCwgbnVtX2VudCwgcC0+cGFja19zaXplKTsKIH0KIAogc3RydWN0IHJldmluZGV4X2VudHJ5ICpmaW5kX3BhY2tfcmV2aW5kZXgoc3RydWN0IHBhY2tlZF9naXQgKnAsIG9mZl90IG9mcykKIHsKIAlpbnQgbnVtOwotCWludCBsbywgaGk7CisJdW5zaWduZWQgbG8sIGhpOwogCXN0cnVjdCBwYWNrX3JldmluZGV4ICpyaXg7CiAJc3RydWN0IHJldmluZGV4X2VudHJ5ICpyZXZpbmRleDsKIApAQCAtMTMyLDcgKzIyMiw3IEBACiAJbG8gPSAwOwogCWhpID0gcC0+bnVtX29iamVjdHMgKyAxOwogCWRvIHsKLQkJaW50IG1pID0gKGxvICsgaGkpIC8gMjsKKwkJdW5zaWduZWQgbWkgPSBsbyArIChoaSAtIGxvKSAvIDI7CiAJCWlmIChyZXZpbmRleFttaV0ub2Zmc2V0ID09IG9mcykgewogCQkJcmV0dXJuIHJldmluZGV4ICsgbWk7CiAJCX0gZWxzZSBpZiAob2ZzIDwgcmV2aW5kZXhbbWldLm9mZnNldCkKZGlmZiAtLWdpdCBhL3BhcnNlLW9wdGlvbnMtY2IuYyBiL3BhcnNlLW9wdGlvbnMtY2IuYwppbmRleCAwZGU1ZmIxLi5iZThjNDEzIDEwMDY0NAotLS0gYS9wYXJzZS1vcHRpb25zLWNiLmMKKysrIGIvcGFyc2Utb3B0aW9ucy1jYi5jCkBAIC0zMyw2ICszMywxMiBAQAogCXJldHVybiAwOwogfQogCitpbnQgcGFyc2Vfb3B0X2V4cGlyeV9kYXRlX2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJICAgICBpbnQgdW5zZXQpCit7CisJcmV0dXJuIHBhcnNlX2V4cGlyeV9kYXRlKGFyZywgKHVuc2lnbmVkIGxvbmcgKilvcHQtPnZhbHVlKTsKK30KKwogaW50IHBhcnNlX29wdF9jb2xvcl9mbGFnX2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAogCQkJICAgIGludCB1bnNldCkKIHsKZGlmZiAtLWdpdCBhL3BhcnNlLW9wdGlvbnMuaCBiL3BhcnNlLW9wdGlvbnMuaAppbmRleCAxYzhiZDhkLi5jMzc4Yjc1IDEwMDY0NAotLS0gYS9wYXJzZS1vcHRpb25zLmgKKysrIGIvcGFyc2Utb3B0aW9ucy5oCkBAIC0xNDAsNiArMTQwLDkgQEAKICNkZWZpbmUgT1BUX0RBVEUocywgbCwgdiwgaCkgXAogCXsgT1BUSU9OX0NBTExCQUNLLCAocyksIChsKSwgKHYpLCBOXygidGltZSIpLChoKSwgMCwJXAogCSAgcGFyc2Vfb3B0X2FwcHJveGlkYXRlX2NiIH0KKyNkZWZpbmUgT1BUX0VYUElSWV9EQVRFKHMsIGwsIHYsIGgpIFwKKwl7IE9QVElPTl9DQUxMQkFDSywgKHMpLCAobCksICh2KSwgTl8oImV4cGlyeSBkYXRlIiksKGgpLCAwLAlcCisJICBwYXJzZV9vcHRfZXhwaXJ5X2RhdGVfY2IgfQogI2RlZmluZSBPUFRfQ0FMTEJBQ0socywgbCwgdiwgYSwgaCwgZikgXAogCXsgT1BUSU9OX0NBTExCQUNLLCAocyksIChsKSwgKHYpLCAoYSksIChoKSwgMCwgKGYpIH0KICNkZWZpbmUgT1BUX05VTUJFUl9DQUxMQkFDSyh2LCBoLCBmKSBcCkBAIC0yMTksNiArMjIyLDcgQEAKIC8qLS0tLS0gc29tZSBvZnRlbiB1c2VkIG9wdGlvbnMgLS0tLS0qLwogZXh0ZXJuIGludCBwYXJzZV9vcHRfYWJicmV2X2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgY29uc3QgY2hhciAqLCBpbnQpOwogZXh0ZXJuIGludCBwYXJzZV9vcHRfYXBwcm94aWRhdGVfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gaW50IHBhcnNlX29wdF9leHBpcnlfZGF0ZV9jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKIGV4dGVybiBpbnQgcGFyc2Vfb3B0X2NvbG9yX2ZsYWdfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CiBleHRlcm4gaW50IHBhcnNlX29wdF92ZXJib3NpdHlfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CiBleHRlcm4gaW50IHBhcnNlX29wdF93aXRoX2NvbW1pdChjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKZGlmZiAtLWdpdCBhL3BhdGguYyBiL3BhdGguYwppbmRleCAwNGZmMTQ4Li43ZjMzMjRhIDEwMDY0NAotLS0gYS9wYXRoLmMKKysrIGIvcGF0aC5jCkBAIC00NDEsNDIgKzQ0MSwxMDAgQEAKIAlyZXR1cm4gMDsKIH0KIAotY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aChjb25zdCBjaGFyICphYnMsIGNvbnN0IGNoYXIgKmJhc2UpCisvKgorICogR2l2ZSBwYXRoIGFzIHJlbGF0aXZlIHRvIHByZWZpeC4KKyAqCisgKiBUaGUgc3RyYnVmIG1heSBvciBtYXkgbm90IGJlIHVzZWQsIHNvIGRvIG5vdCBhc3N1bWUgaXQgY29udGFpbnMgdGhlCisgKiByZXR1cm5lZCBwYXRoLgorICovCitjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKGNvbnN0IGNoYXIgKmluLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgIHN0cnVjdCBzdHJidWYgKnNiKQogewotCXN0YXRpYyBjaGFyIGJ1ZltQQVRIX01BWCArIDFdOworCWludCBpbl9sZW4gPSBpbiA/IHN0cmxlbihpbikgOiAwOworCWludCBwcmVmaXhfbGVuID0gcHJlZml4ID8gc3RybGVuKHByZWZpeCkgOiAwOworCWludCBpbl9vZmYgPSAwOworCWludCBwcmVmaXhfb2ZmID0gMDsKIAlpbnQgaSA9IDAsIGogPSAwOwogCi0JaWYgKCFiYXNlIHx8ICFiYXNlWzBdKQotCQlyZXR1cm4gYWJzOwotCXdoaWxlIChiYXNlW2ldKSB7Ci0JCWlmIChpc19kaXJfc2VwKGJhc2VbaV0pKSB7Ci0JCQlpZiAoIWlzX2Rpcl9zZXAoYWJzW2pdKSkKLQkJCQlyZXR1cm4gYWJzOwotCQkJd2hpbGUgKGlzX2Rpcl9zZXAoYmFzZVtpXSkpCisJaWYgKCFpbl9sZW4pCisJCXJldHVybiAiLi8iOworCWVsc2UgaWYgKCFwcmVmaXhfbGVuKQorCQlyZXR1cm4gaW47CisKKwl3aGlsZSAoaSA8IHByZWZpeF9sZW4gJiYgaiA8IGluX2xlbiAmJiBwcmVmaXhbaV0gPT0gaW5bal0pIHsKKwkJaWYgKGlzX2Rpcl9zZXAocHJlZml4W2ldKSkgeworCQkJd2hpbGUgKGlzX2Rpcl9zZXAocHJlZml4W2ldKSkKIAkJCQlpKys7Ci0JCQl3aGlsZSAoaXNfZGlyX3NlcChhYnNbal0pKQorCQkJd2hpbGUgKGlzX2Rpcl9zZXAoaW5bal0pKQogCQkJCWorKzsKKwkJCXByZWZpeF9vZmYgPSBpOworCQkJaW5fb2ZmID0gajsKKwkJfSBlbHNlIHsKKwkJCWkrKzsKKwkJCWorKzsKKwkJfQorCX0KKworCWlmICgKKwkgICAgLyogInByZWZpeCIgc2VlbXMgbGlrZSBwcmVmaXggb2YgImluIiAqLworCSAgICBpID49IHByZWZpeF9sZW4gJiYKKwkgICAgLyoKKwkgICAgICogYnV0ICIvZm9vIiBpcyBub3QgYSBwcmVmaXggb2YgIi9mb29iYXIiCisJICAgICAqIChpLmUuIHByZWZpeCBub3QgZW5kIHdpdGggJy8nKQorCSAgICAgKi8KKwkgICAgcHJlZml4X29mZiA8IHByZWZpeF9sZW4pIHsKKwkJaWYgKGogPj0gaW5fbGVuKSB7CisJCQkvKiBpbj0iL2EvYiIsIHByZWZpeD0iL2EvYiIgKi8KKwkJCWluX29mZiA9IGluX2xlbjsKKwkJfSBlbHNlIGlmIChpc19kaXJfc2VwKGluW2pdKSkgeworCQkJLyogaW49Ii9hL2IvYyIsIHByZWZpeD0iL2EvYiIgKi8KKwkJCXdoaWxlIChpc19kaXJfc2VwKGluW2pdKSkKKwkJCQlqKys7CisJCQlpbl9vZmYgPSBqOworCQl9IGVsc2UgeworCQkJLyogaW49Ii9hL2JiYi9jIiwgcHJlZml4PSIvYS9iIiAqLworCQkJaSA9IHByZWZpeF9vZmY7CisJCX0KKwl9IGVsc2UgaWYgKAorCQkgICAvKiAiaW4iIGlzIHNob3J0IHRoYW4gInByZWZpeCIgKi8KKwkJICAgaiA+PSBpbl9sZW4gJiYKKwkJICAgLyogImluIiBub3QgZW5kIHdpdGggJy8nICovCisJCSAgIGluX29mZiA8IGluX2xlbikgeworCQlpZiAoaXNfZGlyX3NlcChwcmVmaXhbaV0pKSB7CisJCQkvKiBpbj0iL2EvYiIsIHByZWZpeD0iL2EvYi9jLyIgKi8KKwkJCXdoaWxlIChpc19kaXJfc2VwKHByZWZpeFtpXSkpCisJCQkJaSsrOworCQkJaW5fb2ZmID0gaW5fbGVuOworCQl9CisJfQorCWluICs9IGluX29mZjsKKwlpbl9sZW4gLT0gaW5fb2ZmOworCisJaWYgKGkgPj0gcHJlZml4X2xlbikgeworCQlpZiAoIWluX2xlbikKKwkJCXJldHVybiAiLi8iOworCQllbHNlCisJCQlyZXR1cm4gaW47CisJfQorCisJc3RyYnVmX3Jlc2V0KHNiKTsKKwlzdHJidWZfZ3JvdyhzYiwgaW5fbGVuKTsKKworCXdoaWxlIChpIDwgcHJlZml4X2xlbikgeworCQlpZiAoaXNfZGlyX3NlcChwcmVmaXhbaV0pKSB7CisJCQlzdHJidWZfYWRkc3RyKHNiLCAiLi4vIik7CisJCQl3aGlsZSAoaXNfZGlyX3NlcChwcmVmaXhbaV0pKQorCQkJCWkrKzsKIAkJCWNvbnRpbnVlOwotCQl9IGVsc2UgaWYgKGFic1tqXSAhPSBiYXNlW2ldKSB7Ci0JCQlyZXR1cm4gYWJzOwogCQl9CiAJCWkrKzsKLQkJaisrOwogCX0KLQlpZiAoCi0JICAgIC8qICIvZm9vIiBpcyBhIHByZWZpeCBvZiAiL2ZvbyIgKi8KLQkgICAgYWJzW2pdICYmCi0JICAgIC8qICIvZm9vIiBpcyBub3QgYSBwcmVmaXggb2YgIi9mb29iYXIiICovCi0JICAgICFpc19kaXJfc2VwKGJhc2VbaS0xXSkgJiYgIWlzX2Rpcl9zZXAoYWJzW2pdKQotCSAgICkKLQkJcmV0dXJuIGFiczsKLQl3aGlsZSAoaXNfZGlyX3NlcChhYnNbal0pKQotCQlqKys7Ci0JaWYgKCFhYnNbal0pCi0JCXN0cmNweShidWYsICIuIik7Ci0JZWxzZQotCQlzdHJjcHkoYnVmLCBhYnMgKyBqKTsKLQlyZXR1cm4gYnVmOworCWlmICghaXNfZGlyX3NlcChwcmVmaXhbcHJlZml4X2xlbiAtIDFdKSkKKwkJc3RyYnVmX2FkZHN0cihzYiwgIi4uLyIpOworCisJc3RyYnVmX2FkZHN0cihzYiwgaW4pOworCisJcmV0dXJuIHNiLT5idWY7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9wYXRoc3BlYy5jIGIvcGF0aHNwZWMuYwppbmRleCAyODRmMzk3Li42ZWEwODY3IDEwMDY0NAotLS0gYS9wYXRoc3BlYy5jCisrKyBiL3BhdGhzcGVjLmMKQEAgLTMyLDcgKzMyLDcgQEAKIAlpZiAoIW51bV91bm1hdGNoZWQpCiAJCXJldHVybjsKIAlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKLQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKIAkJbWF0Y2hfcGF0aHNwZWMocGF0aHNwZWMsIGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSwgMCwgc2Vlbik7CiAJfQogfQpAQCAtNjcsNyArNjcsNyBAQAogewogCWludCBpLCBwYXRoX2xlbiA9IHN0cmxlbihwYXRoKTsKIAlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKLQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKIAkJaWYgKFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkgewogCQkJaW50IGNlX2xlbiA9IGNlX25hbWVsZW4oY2UpOwogCQkJaWYgKHBhdGhfbGVuIDw9IGNlX2xlbiB8fCBwYXRoW2NlX2xlbl0gIT0gJy8nIHx8CmRpZmYgLS1naXQgYS9wcmV0dHkuYyBiL3ByZXR0eS5jCmluZGV4IDllNDMxNTQuLjc0NTYzYzkgMTAwNjQ0Ci0tLSBhL3ByZXR0eS5jCisrKyBiL3ByZXR0eS5jCkBAIC00MDYsNyArNDA2LDcgQEAKIAlyZXR1cm4gc2hvd19kYXRlKGRhdGUsIHR6LCBtb2RlKTsKIH0KIAotdm9pZCBwcF91c2VyX2luZm8oY29uc3Qgc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKK3ZvaWQgcHBfdXNlcl9pbmZvKHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHAsCiAJCSAgY29uc3QgY2hhciAqd2hhdCwgc3RydWN0IHN0cmJ1ZiAqc2IsCiAJCSAgY29uc3QgY2hhciAqbGluZSwgY29uc3QgY2hhciAqZW5jb2RpbmcpCiB7CkBAIC00MzIsNiArNDMyLDIzIEBACiAJCW1hcF91c2VyKHBwLT5tYWlsbWFwLCAmbWFpbGJ1ZiwgJm1haWxsZW4sICZuYW1lYnVmLCAmbmFtZWxlbik7CiAKIAlpZiAocHAtPmZtdCA9PSBDTUlUX0ZNVF9FTUFJTCkgeworCQlpZiAocHAtPmZyb21faWRlbnQpIHsKKwkJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIkZyb206ICIpOworCQkJc3RyYnVmX2FkZCgmYnVmLCBuYW1lYnVmLCBuYW1lbGVuKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIiA8Iik7CisJCQlzdHJidWZfYWRkKCZidWYsIG1haWxidWYsIG1haWxsZW4pOworCQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiPlxuIik7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnBwLT5pbl9ib2R5X2hlYWRlcnMsCisJCQkJCSAgIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCkpOworCisJCQltYWlsYnVmID0gcHAtPmZyb21faWRlbnQtPm1haWxfYmVnaW47CisJCQltYWlsbGVuID0gcHAtPmZyb21faWRlbnQtPm1haWxfZW5kIC0gbWFpbGJ1ZjsKKwkJCW5hbWVidWYgPSBwcC0+ZnJvbV9pZGVudC0+bmFtZV9iZWdpbjsKKwkJCW5hbWVsZW4gPSBwcC0+ZnJvbV9pZGVudC0+bmFtZV9lbmQgLSBuYW1lYnVmOworCQl9CisKIAkJc3RyYnVmX2FkZHN0cihzYiwgIkZyb206ICIpOwogCQlpZiAobmVlZHNfcmZjMjA0N19lbmNvZGluZyhuYW1lYnVmLCBuYW1lbGVuLCBSRkMyMDQ3X0FERFJFU1MpKSB7CiAJCQlhZGRfcmZjMjA0NyhzYiwgbmFtZWJ1ZiwgbmFtZWxlbiwKQEAgLTE1MTQsNyArMTUzMSw3IEBACiAJZnJlZShjb250ZXh0LnNpZ25hdHVyZV9jaGVjay5zaWduZXIpOwogfQogCi1zdGF0aWMgdm9pZCBwcF9oZWFkZXIoY29uc3Qgc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKK3N0YXRpYyB2b2lkIHBwX2hlYWRlcihzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLAogCQkgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKIAkJICAgICAgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAogCQkgICAgICBjb25zdCBjaGFyICoqbXNnX3AsCkBAIC0xNTc1LDcgKzE1OTIsNyBAQAogCX0KIH0KIAotdm9pZCBwcF90aXRsZV9saW5lKGNvbnN0IHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHAsCit2b2lkIHBwX3RpdGxlX2xpbmUoc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKIAkJICAgY29uc3QgY2hhciAqKm1zZ19wLAogCQkgICBzdHJ1Y3Qgc3RyYnVmICpzYiwKIAkJICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCkBAIC0xNjAyLDYgKzE2MTksMTYgQEAKIAl9CiAJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKIAorCWlmIChuZWVkXzhiaXRfY3RlID09IDApIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBwcC0+aW5fYm9keV9oZWFkZXJzLm5yOyBpKyspIHsKKwkJCWlmIChoYXNfbm9uX2FzY2lpKHBwLT5pbl9ib2R5X2hlYWRlcnMuaXRlbXNbaV0uc3RyaW5nKSkgeworCQkJCW5lZWRfOGJpdF9jdGUgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCiAJaWYgKG5lZWRfOGJpdF9jdGUgPiAwKSB7CiAJCWNvbnN0IGNoYXIgKmhlYWRlcl9mbXQgPQogCQkJIk1JTUUtVmVyc2lvbjogMS4wXG4iCkBAIC0xNjE1LDEwICsxNjQyLDIxIEBACiAJaWYgKHBwLT5mbXQgPT0gQ01JVF9GTVRfRU1BSUwpIHsKIAkJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKIAl9CisKKwlpZiAocHAtPmluX2JvZHlfaGVhZGVycy5ucikgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IHBwLT5pbl9ib2R5X2hlYWRlcnMubnI7IGkrKykgeworCQkJc3RyYnVmX2FkZHN0cihzYiwgcHAtPmluX2JvZHlfaGVhZGVycy5pdGVtc1tpXS5zdHJpbmcpOworCQkJZnJlZShwcC0+aW5fYm9keV9oZWFkZXJzLml0ZW1zW2ldLnN0cmluZyk7CisJCX0KKwkJc3RyaW5nX2xpc3RfY2xlYXIoJnBwLT5pbl9ib2R5X2hlYWRlcnMsIDApOworCQlzdHJidWZfYWRkY2goc2IsICdcbicpOworCX0KKwogCXN0cmJ1Zl9yZWxlYXNlKCZ0aXRsZSk7CiB9CiAKLXZvaWQgcHBfcmVtYWluZGVyKGNvbnN0IHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHAsCit2b2lkIHBwX3JlbWFpbmRlcihzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLAogCQkgIGNvbnN0IGNoYXIgKiptc2dfcCwKIAkJICBzdHJ1Y3Qgc3RyYnVmICpzYiwKIAkJICBpbnQgaW5kZW50KQpAQCAtMTY1MCw3ICsxNjg4LDcgQEAKIAl9CiB9CiAKLXZvaWQgcHJldHR5X3ByaW50X2NvbW1pdChjb25zdCBzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLAordm9pZCBwcmV0dHlfcHJpbnRfY29tbWl0KHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHAsCiAJCQkgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAogCQkJIHN0cnVjdCBzdHJidWYgKnNiKQogewpkaWZmIC0tZ2l0IGEvcHJpby1xdWV1ZS5jIGIvcHJpby1xdWV1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZjhjNmQKLS0tIC9kZXYvbnVsbAorKysgYi9wcmlvLXF1ZXVlLmMKQEAgLTAsMCArMSw4NCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicHJpby1xdWV1ZS5oIgorCit2b2lkIHByaW9fcXVldWVfcmV2ZXJzZShzdHJ1Y3QgcHJpb19xdWV1ZSAqcXVldWUpCit7CisJaW50IGksIGo7CisKKwlpZiAocXVldWUtPmNvbXBhcmUgIT0gTlVMTCkKKwkJZGllKCJCVUc6IHByaW9fcXVldWVfcmV2ZXJzZSgpIG9uIG5vbi1MSUZPIHF1ZXVlIik7CisJZm9yIChpID0gMDsgaSA8PSAoaiA9IChxdWV1ZS0+bnIgLSAxKSAtIGkpOyBpKyspIHsKKwkJc3RydWN0IGNvbW1pdCAqc3dhcCA9IHF1ZXVlLT5hcnJheVtpXTsKKwkJcXVldWUtPmFycmF5W2ldID0gcXVldWUtPmFycmF5W2pdOworCQlxdWV1ZS0+YXJyYXlbal0gPSBzd2FwOworCX0KK30KKwordm9pZCBjbGVhcl9wcmlvX3F1ZXVlKHN0cnVjdCBwcmlvX3F1ZXVlICpxdWV1ZSkKK3sKKwlmcmVlKHF1ZXVlLT5hcnJheSk7CisJcXVldWUtPm5yID0gMDsKKwlxdWV1ZS0+YWxsb2MgPSAwOworCXF1ZXVlLT5hcnJheSA9IE5VTEw7Cit9CisKK3ZvaWQgcHJpb19xdWV1ZV9wdXQoc3RydWN0IHByaW9fcXVldWUgKnF1ZXVlLCB2b2lkICp0aGluZykKK3sKKwlwcmlvX3F1ZXVlX2NvbXBhcmVfZm4gY29tcGFyZSA9IHF1ZXVlLT5jb21wYXJlOworCWludCBpeCwgcGFyZW50OworCisJLyogQXBwZW5kIGF0IHRoZSBlbmQgKi8KKwlBTExPQ19HUk9XKHF1ZXVlLT5hcnJheSwgcXVldWUtPm5yICsgMSwgcXVldWUtPmFsbG9jKTsKKwlxdWV1ZS0+YXJyYXlbcXVldWUtPm5yKytdID0gdGhpbmc7CisJaWYgKCFjb21wYXJlKQorCQlyZXR1cm47IC8qIExJRk8gKi8KKworCS8qIEJ1YmJsZSB1cCB0aGUgbmV3IG9uZSAqLworCWZvciAoaXggPSBxdWV1ZS0+bnIgLSAxOyBpeDsgaXggPSBwYXJlbnQpIHsKKwkJcGFyZW50ID0gKGl4IC0gMSkgLyAyOworCQlpZiAoY29tcGFyZShxdWV1ZS0+YXJyYXlbcGFyZW50XSwgcXVldWUtPmFycmF5W2l4XSwKKwkJCSAgICBxdWV1ZS0+Y2JfZGF0YSkgPD0gMCkKKwkJCWJyZWFrOworCisJCXRoaW5nID0gcXVldWUtPmFycmF5W3BhcmVudF07CisJCXF1ZXVlLT5hcnJheVtwYXJlbnRdID0gcXVldWUtPmFycmF5W2l4XTsKKwkJcXVldWUtPmFycmF5W2l4XSA9IHRoaW5nOworCX0KK30KKwordm9pZCAqcHJpb19xdWV1ZV9nZXQoc3RydWN0IHByaW9fcXVldWUgKnF1ZXVlKQoreworCXZvaWQgKnJlc3VsdCwgKnN3YXA7CisJaW50IGl4LCBjaGlsZDsKKwlwcmlvX3F1ZXVlX2NvbXBhcmVfZm4gY29tcGFyZSA9IHF1ZXVlLT5jb21wYXJlOworCisJaWYgKCFxdWV1ZS0+bnIpCisJCXJldHVybiBOVUxMOworCWlmICghY29tcGFyZSkKKwkJcmV0dXJuIHF1ZXVlLT5hcnJheVstLXF1ZXVlLT5ucl07IC8qIExJRk8gKi8KKworCXJlc3VsdCA9IHF1ZXVlLT5hcnJheVswXTsKKwlpZiAoIS0tcXVldWUtPm5yKQorCQlyZXR1cm4gcmVzdWx0OworCisJcXVldWUtPmFycmF5WzBdID0gcXVldWUtPmFycmF5W3F1ZXVlLT5ucl07CisKKwkvKiBQdXNoIGRvd24gdGhlIG9uZSBhdCB0aGUgcm9vdCAqLworCWZvciAoaXggPSAwOyBpeCAqIDIgKyAxIDwgcXVldWUtPm5yOyBpeCA9IGNoaWxkKSB7CisJCWNoaWxkID0gaXggKiAyICsgMTsgLyogbGVmdCAqLworCQlpZiAoKGNoaWxkICsgMSA8IHF1ZXVlLT5ucikgJiYKKwkJICAgIChjb21wYXJlKHF1ZXVlLT5hcnJheVtjaGlsZF0sIHF1ZXVlLT5hcnJheVtjaGlsZCArIDFdLAorCQkJICAgICBxdWV1ZS0+Y2JfZGF0YSkgPj0gMCkpCisJCQljaGlsZCsrOyAvKiB1c2UgcmlnaHQgY2hpbGQgKi8KKworCQlpZiAoY29tcGFyZShxdWV1ZS0+YXJyYXlbaXhdLCBxdWV1ZS0+YXJyYXlbY2hpbGRdLAorCQkJICAgIHF1ZXVlLT5jYl9kYXRhKSA8PSAwKQorCQkJYnJlYWs7CisKKwkJc3dhcCA9IHF1ZXVlLT5hcnJheVtjaGlsZF07CisJCXF1ZXVlLT5hcnJheVtjaGlsZF0gPSBxdWV1ZS0+YXJyYXlbaXhdOworCQlxdWV1ZS0+YXJyYXlbaXhdID0gc3dhcDsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL3ByaW8tcXVldWUuaCBiL3ByaW8tcXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzNjZDFmCi0tLSAvZGV2L251bGwKKysrIGIvcHJpby1xdWV1ZS5oCkBAIC0wLDAgKzEsNDggQEAKKyNpZm5kZWYgUFJJT19RVUVVRV9ICisjZGVmaW5lIFBSSU9fUVVFVUVfSAorCisvKgorICogQSBwcmlvcml0eSBxdWV1ZSBpbXBsZW1lbnRhdGlvbiwgcHJpbWFyaWx5IGZvciBrZWVwaW5nIHRyYWNrIG9mCisgKiBjb21taXRzIGluIHRoZSAnZGF0ZS1vcmRlcicgc28gdGhhdCB3ZSBwcm9jZXNzIHRoZW0gZnJvbSBuZXcgdG8gb2xkCisgKiBhcyB0aGV5IGFyZSBkaXNjb3ZlcmVkLCBidXQgY2FuIGJlIHVzZWQgdG8gaG9sZCBhbnkgcG9pbnRlciB0bworICogc3RydWN0LiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3Igc3VwcGx5aW5nIGEgZnVuY3Rpb24gdG8KKyAqIGNvbXBhcmUgdHdvICJ0aGluZ3MiLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgY2FuIGFsc28gYmUgdXNlZCBhcyBhIExJRk8gc3RhY2sKKyAqIGJ5IHNwZWNpZnlpbmcgTlVMTCBhcyB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbi4KKyAqLworCisvKgorICogQ29tcGFyZSB0d28gInRoaW5ncyIsIG9uZSBhbmQgdHdvOyB0aGUgdGhpcmQgcGFyYW1ldGVyIGlzIGNiX2RhdGEKKyAqIGluIHRoZSBwcmlvX3F1ZXVlIHN0cnVjdHVyZS4gIFRoZSByZXN1bHQgaXMgcmV0dXJuZWQgYXMgYSBzaWduIG9mCisgKiB0aGUgcmV0dXJuIHZhbHVlLCBiZWluZyB0aGUgc2FtZSBhcyB0aGUgc2lnbiBvZiB0aGUgcmVzdWx0IG9mCisgKiBzdWJ0cmFjdGluZyAidHdvIiBmcm9tICJvbmUiIChpLmUuIG5lZ2F0aXZlIGlmICJvbmUiIHNvcnRzIGVhcmxpZXIKKyAqIHRoYW4gInR3byIpLgorICovCit0eXBlZGVmIGludCAoKnByaW9fcXVldWVfY29tcGFyZV9mbikoY29uc3Qgdm9pZCAqb25lLCBjb25zdCB2b2lkICp0d28sIHZvaWQgKmNiX2RhdGEpOworCitzdHJ1Y3QgcHJpb19xdWV1ZSB7CisJcHJpb19xdWV1ZV9jb21wYXJlX2ZuIGNvbXBhcmU7CisJdm9pZCAqY2JfZGF0YTsKKwlpbnQgYWxsb2MsIG5yOworCXZvaWQgKiphcnJheTsKK307CisKKy8qCisgKiBBZGQgdGhlICJ0aGluZyIgdG8gdGhlIHF1ZXVlLgorICovCitleHRlcm4gdm9pZCBwcmlvX3F1ZXVlX3B1dChzdHJ1Y3QgcHJpb19xdWV1ZSAqLCB2b2lkICp0aGluZyk7CisKKy8qCisgKiBFeHRyYWN0IHRoZSAidGhpbmciIHRoYXQgY29tcGFyZXMgdGhlIHNtYWxsZXN0IG91dCBvZiB0aGUgcXVldWUsCisgKiBvciBOVUxMLiAgSWYgY29tcGFyZSBmdW5jdGlvbiBpcyBOVUxMLCB0aGUgcXVldWUgYWN0cyBhcyBhIExJRk8KKyAqIHN0YWNrLgorICovCitleHRlcm4gdm9pZCAqcHJpb19xdWV1ZV9nZXQoc3RydWN0IHByaW9fcXVldWUgKik7CisKK2V4dGVybiB2b2lkIGNsZWFyX3ByaW9fcXVldWUoc3RydWN0IHByaW9fcXVldWUgKik7CisKKy8qIFJldmVyc2UgdGhlIExJRk8gZWxlbWVudHMgKi8KK2V4dGVybiB2b2lkIHByaW9fcXVldWVfcmV2ZXJzZShzdHJ1Y3QgcHJpb19xdWV1ZSAqKTsKKworI2VuZGlmIC8qIFBSSU9fUVVFVUVfSCAqLwpkaWZmIC0tZ2l0IGEvcXVvdGUuYyBiL3F1b3RlLmMKaW5kZXggOTExMjI5Zi4uNWM4ODA4MSAxMDA2NDQKLS0tIGEvcXVvdGUuYworKysgYi9xdW90ZS5jCkBAIC0zMTIsODIgKzMxMiwyNyBAQAogCWZwdXRjKHRlcm1pbmF0b3IsIGZwKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKnBhdGhfcmVsYXRpdmUoY29uc3QgY2hhciAqaW4sIGludCBsZW4sCi0JCQkJIHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpwcmVmaXgsCi0JCQkJIGludCBwcmVmaXhfbGVuKTsKLQotdm9pZCB3cml0ZV9uYW1lX3F1b3RlZF9yZWxhdGl2ZShjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbGVuLAotCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgc2l6ZV90IHByZWZpeF9sZW4sCit2b2lkIHdyaXRlX25hbWVfcXVvdGVkX3JlbGF0aXZlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnByZWZpeCwKIAkJCQlGSUxFICpmcCwgaW50IHRlcm1pbmF0b3IpCiB7CiAJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOwogCi0JbmFtZSA9IHBhdGhfcmVsYXRpdmUobmFtZSwgbGVuLCAmc2IsIHByZWZpeCwgcHJlZml4X2xlbik7CisJbmFtZSA9IHJlbGF0aXZlX3BhdGgobmFtZSwgcHJlZml4LCAmc2IpOwogCXdyaXRlX25hbWVfcXVvdGVkKG5hbWUsIGZwLCB0ZXJtaW5hdG9yKTsKIAogCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CiB9CiAKLS8qCi0gKiBHaXZlIHBhdGggYXMgcmVsYXRpdmUgdG8gcHJlZml4LgotICoKLSAqIFRoZSBzdHJidWYgbWF5IG9yIG1heSBub3QgYmUgdXNlZCwgc28gZG8gbm90IGFzc3VtZSBpdCBjb250YWlucyB0aGUKLSAqIHJldHVybmVkIHBhdGguCi0gKi8KLXN0YXRpYyBjb25zdCBjaGFyICpwYXRoX3JlbGF0aXZlKGNvbnN0IGNoYXIgKmluLCBpbnQgbGVuLAotCQkJCSBzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcHJlZml4LAotCQkJCSBpbnQgcHJlZml4X2xlbikKLXsKLQlpbnQgb2ZmLCBpOwotCi0JaWYgKGxlbiA8IDApCi0JCWxlbiA9IHN0cmxlbihpbik7Ci0JaWYgKHByZWZpeF9sZW4gPCAwKSB7Ci0JCWlmIChwcmVmaXgpCi0JCQlwcmVmaXhfbGVuID0gc3RybGVuKHByZWZpeCk7Ci0JCWVsc2UKLQkJCXByZWZpeF9sZW4gPSAwOwotCX0KLQotCW9mZiA9IDA7Ci0JaSA9IDA7Ci0Jd2hpbGUgKGkgPCBwcmVmaXhfbGVuICYmIGkgPCBsZW4gJiYgcHJlZml4W2ldID09IGluW2ldKSB7Ci0JCWlmIChwcmVmaXhbaV0gPT0gJy8nKQotCQkJb2ZmID0gaSArIDE7Ci0JCWkrKzsKLQl9Ci0JaW4gKz0gb2ZmOwotCWxlbiAtPSBvZmY7Ci0KLQlpZiAoaSA+PSBwcmVmaXhfbGVuKQotCQlyZXR1cm4gaW47Ci0KLQlzdHJidWZfcmVzZXQoc2IpOwotCXN0cmJ1Zl9ncm93KHNiLCBsZW4pOwotCi0Jd2hpbGUgKGkgPCBwcmVmaXhfbGVuKSB7Ci0JCWlmIChwcmVmaXhbaV0gPT0gJy8nKQotCQkJc3RyYnVmX2FkZHN0cihzYiwgIi4uLyIpOwotCQlpKys7Ci0JfQotCXN0cmJ1Zl9hZGQoc2IsIGluLCBsZW4pOwotCi0JcmV0dXJuIHNiLT5idWY7Ci19Ci0KIC8qIHF1b3RlIHBhdGggYXMgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIHByZWZpeCAqLwotY2hhciAqcXVvdGVfcGF0aF9yZWxhdGl2ZShjb25zdCBjaGFyICppbiwgaW50IGxlbiwKLQkJCSAgc3RydWN0IHN0cmJ1ZiAqb3V0LCBjb25zdCBjaGFyICpwcmVmaXgpCitjaGFyICpxdW90ZV9wYXRoX3JlbGF0aXZlKGNvbnN0IGNoYXIgKmluLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgIHN0cnVjdCBzdHJidWYgKm91dCkKIHsKIAlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7Ci0JY29uc3QgY2hhciAqcmVsID0gcGF0aF9yZWxhdGl2ZShpbiwgbGVuLCAmc2IsIHByZWZpeCwgLTEpOworCWNvbnN0IGNoYXIgKnJlbCA9IHJlbGF0aXZlX3BhdGgoaW4sIHByZWZpeCwgJnNiKTsKIAlzdHJidWZfcmVzZXQob3V0KTsKIAlxdW90ZV9jX3N0eWxlX2NvdW50ZWQocmVsLCBzdHJsZW4ocmVsKSwgb3V0LCBOVUxMLCAwKTsKIAlzdHJidWZfcmVsZWFzZSgmc2IpOwogCi0JaWYgKCFvdXQtPmxlbikKLQkJc3RyYnVmX2FkZHN0cihvdXQsICIuLyIpOwotCiAJcmV0dXJuIG91dC0+YnVmOwogfQogCmRpZmYgLS1naXQgYS9xdW90ZS5oIGIvcXVvdGUuaAppbmRleCAxMzMxNTVhLi5lZDExMGE1IDEwMDY0NAotLS0gYS9xdW90ZS5oCisrKyBiL3F1b3RlLmgKQEAgLTYwLDEzICs2MCwxMiBAQAogZXh0ZXJuIHZvaWQgd3JpdGVfbmFtZV9xdW90ZWQoY29uc3QgY2hhciAqbmFtZSwgRklMRSAqLCBpbnQgdGVybWluYXRvcik7CiBleHRlcm4gdm9pZCB3cml0ZV9uYW1lX3F1b3RlZHBmeChjb25zdCBjaGFyICpwZngsIHNpemVfdCBwZnhsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLCBGSUxFICosIGludCB0ZXJtaW5hdG9yKTsKLWV4dGVybiB2b2lkIHdyaXRlX25hbWVfcXVvdGVkX3JlbGF0aXZlKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBsZW4sCi0JCWNvbnN0IGNoYXIgKnByZWZpeCwgc2l6ZV90IHByZWZpeF9sZW4sCitleHRlcm4gdm9pZCB3cml0ZV9uYW1lX3F1b3RlZF9yZWxhdGl2ZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwcmVmaXgsCiAJCUZJTEUgKmZwLCBpbnQgdGVybWluYXRvcik7CiAKIC8qIHF1b3RlIHBhdGggYXMgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIHByZWZpeCAqLwotZXh0ZXJuIGNoYXIgKnF1b3RlX3BhdGhfcmVsYXRpdmUoY29uc3QgY2hhciAqaW4sIGludCBsZW4sCi0JCQkgIHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBjaGFyICpxdW90ZV9wYXRoX3JlbGF0aXZlKGNvbnN0IGNoYXIgKmluLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgIHN0cnVjdCBzdHJidWYgKm91dCk7CiAKIC8qIHF1b3RpbmcgYXMgYSBzdHJpbmcgbGl0ZXJhbCBmb3Igb3RoZXIgbGFuZ3VhZ2VzICovCiBleHRlcm4gdm9pZCBwZXJsX3F1b3RlX3ByaW50KEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqc3JjKTsKZGlmZiAtLWdpdCBhL3JlYWQtY2FjaGUuYyBiL3JlYWQtY2FjaGUuYwppbmRleCAwNGVkNTYxLi5kNDQ3NGVhIDEwMDY0NAotLS0gYS9yZWFkLWNhY2hlLmMKKysrIGIvcmVhZC1jYWNoZS5jCkBAIC02Nyw2ICs2Nyw2MSBAQAogCWFkZF9pbmRleF9lbnRyeShpc3RhdGUsIG5ldywgQUREX0NBQ0hFX09LX1RPX0FERHxBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRSk7CiB9CiAKK3ZvaWQgZmlsbF9zdGF0X2RhdGEoc3RydWN0IHN0YXRfZGF0YSAqc2QsIHN0cnVjdCBzdGF0ICpzdCkKK3sKKwlzZC0+c2RfY3RpbWUuc2VjID0gKHVuc2lnbmVkIGludClzdC0+c3RfY3RpbWU7CisJc2QtPnNkX210aW1lLnNlYyA9ICh1bnNpZ25lZCBpbnQpc3QtPnN0X210aW1lOworCXNkLT5zZF9jdGltZS5uc2VjID0gU1RfQ1RJTUVfTlNFQygqc3QpOworCXNkLT5zZF9tdGltZS5uc2VjID0gU1RfTVRJTUVfTlNFQygqc3QpOworCXNkLT5zZF9kZXYgPSBzdC0+c3RfZGV2OworCXNkLT5zZF9pbm8gPSBzdC0+c3RfaW5vOworCXNkLT5zZF91aWQgPSBzdC0+c3RfdWlkOworCXNkLT5zZF9naWQgPSBzdC0+c3RfZ2lkOworCXNkLT5zZF9zaXplID0gc3QtPnN0X3NpemU7Cit9CisKK2ludCBtYXRjaF9zdGF0X2RhdGEoY29uc3Qgc3RydWN0IHN0YXRfZGF0YSAqc2QsIHN0cnVjdCBzdGF0ICpzdCkKK3sKKwlpbnQgY2hhbmdlZCA9IDA7CisKKwlpZiAoc2QtPnNkX210aW1lLnNlYyAhPSAodW5zaWduZWQgaW50KXN0LT5zdF9tdGltZSkKKwkJY2hhbmdlZCB8PSBNVElNRV9DSEFOR0VEOworCWlmICh0cnVzdF9jdGltZSAmJiBjaGVja19zdGF0ICYmCisJICAgIHNkLT5zZF9jdGltZS5zZWMgIT0gKHVuc2lnbmVkIGludClzdC0+c3RfY3RpbWUpCisJCWNoYW5nZWQgfD0gQ1RJTUVfQ0hBTkdFRDsKKworI2lmZGVmIFVTRV9OU0VDCisJaWYgKGNoZWNrX3N0YXQgJiYgc2QtPnNkX210aW1lLm5zZWMgIT0gU1RfTVRJTUVfTlNFQygqc3QpKQorCQljaGFuZ2VkIHw9IE1USU1FX0NIQU5HRUQ7CisJaWYgKHRydXN0X2N0aW1lICYmIGNoZWNrX3N0YXQgJiYKKwkgICAgc2QtPnNkX2N0aW1lLm5zZWMgIT0gU1RfQ1RJTUVfTlNFQygqc3QpKQorCQljaGFuZ2VkIHw9IENUSU1FX0NIQU5HRUQ7CisjZW5kaWYKKworCWlmIChjaGVja19zdGF0KSB7CisJCWlmIChzZC0+c2RfdWlkICE9ICh1bnNpZ25lZCBpbnQpIHN0LT5zdF91aWQgfHwKKwkJCXNkLT5zZF9naWQgIT0gKHVuc2lnbmVkIGludCkgc3QtPnN0X2dpZCkKKwkJCWNoYW5nZWQgfD0gT1dORVJfQ0hBTkdFRDsKKwkJaWYgKHNkLT5zZF9pbm8gIT0gKHVuc2lnbmVkIGludCkgc3QtPnN0X2lubykKKwkJCWNoYW5nZWQgfD0gSU5PREVfQ0hBTkdFRDsKKwl9CisKKyNpZmRlZiBVU0VfU1RERVYKKwkvKgorCSAqIHN0X2RldiBicmVha3Mgb24gbmV0d29yayBmaWxlc3lzdGVtcyB3aGVyZSBkaWZmZXJlbnQKKwkgKiBjbGllbnRzIHdpbGwgaGF2ZSBkaWZmZXJlbnQgdmlld3Mgb2Ygd2hhdCAiZGV2aWNlIgorCSAqIHRoZSBmaWxlc3lzdGVtIGlzIG9uCisJICovCisJaWYgKGNoZWNrX3N0YXQgJiYgc2QtPnNkX2RldiAhPSAodW5zaWduZWQgaW50KSBzdC0+c3RfZGV2KQorCQkJY2hhbmdlZCB8PSBJTk9ERV9DSEFOR0VEOworI2VuZGlmCisKKwlpZiAoc2QtPnNkX3NpemUgIT0gKHVuc2lnbmVkIGludCkgc3QtPnN0X3NpemUpCisJCWNoYW5nZWQgfD0gREFUQV9DSEFOR0VEOworCisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKIC8qCiAgKiBUaGlzIG9ubHkgdXBkYXRlcyB0aGUgIm5vbi1jcml0aWNhbCIgcGFydHMgb2YgdGhlIGRpcmVjdG9yeQogICogY2FjaGUsIGllIHRoZSBwYXJ0cyB0aGF0IGFyZW4ndCB0cmFja2VkIGJ5IEdJVCwgYW5kIG9ubHkgdXNlZApAQCAtNzQsMTUgKzEyOSw3IEBACiAgKi8KIHZvaWQgZmlsbF9zdGF0X2NhY2hlX2luZm8oc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0KQogewotCWNlLT5jZV9jdGltZS5zZWMgPSAodW5zaWduZWQgaW50KXN0LT5zdF9jdGltZTsKLQljZS0+Y2VfbXRpbWUuc2VjID0gKHVuc2lnbmVkIGludClzdC0+c3RfbXRpbWU7Ci0JY2UtPmNlX2N0aW1lLm5zZWMgPSBTVF9DVElNRV9OU0VDKCpzdCk7Ci0JY2UtPmNlX210aW1lLm5zZWMgPSBTVF9NVElNRV9OU0VDKCpzdCk7Ci0JY2UtPmNlX2RldiA9IHN0LT5zdF9kZXY7Ci0JY2UtPmNlX2lubyA9IHN0LT5zdF9pbm87Ci0JY2UtPmNlX3VpZCA9IHN0LT5zdF91aWQ7Ci0JY2UtPmNlX2dpZCA9IHN0LT5zdF9naWQ7Ci0JY2UtPmNlX3NpemUgPSBzdC0+c3Rfc2l6ZTsKKwlmaWxsX3N0YXRfZGF0YSgmY2UtPmNlX3N0YXRfZGF0YSwgc3QpOwogCiAJaWYgKGFzc3VtZV91bmNoYW5nZWQpCiAJCWNlLT5jZV9mbGFncyB8PSBDRV9WQUxJRDsKQEAgLTkxLDcgKzEzOCw3IEBACiAJCWNlX21hcmtfdXB0b2RhdGUoY2UpOwogfQogCi1zdGF0aWMgaW50IGNlX2NvbXBhcmVfZGF0YShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QpCitzdGF0aWMgaW50IGNlX2NvbXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QpCiB7CiAJaW50IG1hdGNoID0gLTE7CiAJaW50IGZkID0gb3BlbihjZS0+bmFtZSwgT19SRE9OTFkpOwpAQCAtMTA1LDcgKzE1Miw3IEBACiAJcmV0dXJuIG1hdGNoOwogfQogCi1zdGF0aWMgaW50IGNlX2NvbXBhcmVfbGluayhzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzaXplX3QgZXhwZWN0ZWRfc2l6ZSkKK3N0YXRpYyBpbnQgY2VfY29tcGFyZV9saW5rKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHNpemVfdCBleHBlY3RlZF9zaXplKQogewogCWludCBtYXRjaCA9IC0xOwogCXZvaWQgKmJ1ZmZlcjsKQEAgLTEyNiw3ICsxNzMsNyBAQAogCXJldHVybiBtYXRjaDsKIH0KIAotc3RhdGljIGludCBjZV9jb21wYXJlX2dpdGxpbmsoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3N0YXRpYyBpbnQgY2VfY29tcGFyZV9naXRsaW5rKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCiB7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIApAQCAtMTQzLDcgKzE5MCw3IEBACiAJcmV0dXJuIGhhc2hjbXAoc2hhMSwgY2UtPnNoYTEpOwogfQogCi1zdGF0aWMgaW50IGNlX21vZGlmaWVkX2NoZWNrX2ZzKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCkKK3N0YXRpYyBpbnQgY2VfbW9kaWZpZWRfY2hlY2tfZnMoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0KQogewogCXN3aXRjaCAoc3QtPnN0X21vZGUgJiBTX0lGTVQpIHsKIAljYXNlIFNfSUZSRUc6CkBAIC0xNjMsNyArMjEwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjZV9tYXRjaF9zdGF0X2Jhc2ljKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCkKK3N0YXRpYyBpbnQgY2VfbWF0Y2hfc3RhdF9iYXNpYyhjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QpCiB7CiAJdW5zaWduZWQgaW50IGNoYW5nZWQgPSAwOwogCkBAIC0xOTUsNDMgKzI0MiwxMSBAQAogCWRlZmF1bHQ6CiAJCWRpZSgiaW50ZXJuYWwgZXJyb3I6IGNlX21vZGUgaXMgJW8iLCBjZS0+Y2VfbW9kZSk7CiAJfQotCWlmIChjZS0+Y2VfbXRpbWUuc2VjICE9ICh1bnNpZ25lZCBpbnQpc3QtPnN0X210aW1lKQotCQljaGFuZ2VkIHw9IE1USU1FX0NIQU5HRUQ7Ci0JaWYgKHRydXN0X2N0aW1lICYmIGNoZWNrX3N0YXQgJiYKLQkgICAgY2UtPmNlX2N0aW1lLnNlYyAhPSAodW5zaWduZWQgaW50KXN0LT5zdF9jdGltZSkKLQkJY2hhbmdlZCB8PSBDVElNRV9DSEFOR0VEOwogCi0jaWZkZWYgVVNFX05TRUMKLQlpZiAoY2hlY2tfc3RhdCAmJiBjZS0+Y2VfbXRpbWUubnNlYyAhPSBTVF9NVElNRV9OU0VDKCpzdCkpCi0JCWNoYW5nZWQgfD0gTVRJTUVfQ0hBTkdFRDsKLQlpZiAodHJ1c3RfY3RpbWUgJiYgY2hlY2tfc3RhdCAmJgotCSAgICBjZS0+Y2VfY3RpbWUubnNlYyAhPSBTVF9DVElNRV9OU0VDKCpzdCkpCi0JCWNoYW5nZWQgfD0gQ1RJTUVfQ0hBTkdFRDsKLSNlbmRpZgotCi0JaWYgKGNoZWNrX3N0YXQpIHsKLQkJaWYgKGNlLT5jZV91aWQgIT0gKHVuc2lnbmVkIGludCkgc3QtPnN0X3VpZCB8fAotCQkJY2UtPmNlX2dpZCAhPSAodW5zaWduZWQgaW50KSBzdC0+c3RfZ2lkKQotCQkJY2hhbmdlZCB8PSBPV05FUl9DSEFOR0VEOwotCQlpZiAoY2UtPmNlX2lubyAhPSAodW5zaWduZWQgaW50KSBzdC0+c3RfaW5vKQotCQkJY2hhbmdlZCB8PSBJTk9ERV9DSEFOR0VEOwotCX0KLQotI2lmZGVmIFVTRV9TVERFVgotCS8qCi0JICogc3RfZGV2IGJyZWFrcyBvbiBuZXR3b3JrIGZpbGVzeXN0ZW1zIHdoZXJlIGRpZmZlcmVudAotCSAqIGNsaWVudHMgd2lsbCBoYXZlIGRpZmZlcmVudCB2aWV3cyBvZiB3aGF0ICJkZXZpY2UiCi0JICogdGhlIGZpbGVzeXN0ZW0gaXMgb24KLQkgKi8KLQlpZiAoY2hlY2tfc3RhdCAmJiBjZS0+Y2VfZGV2ICE9ICh1bnNpZ25lZCBpbnQpIHN0LT5zdF9kZXYpCi0JCQljaGFuZ2VkIHw9IElOT0RFX0NIQU5HRUQ7Ci0jZW5kaWYKLQotCWlmIChjZS0+Y2Vfc2l6ZSAhPSAodW5zaWduZWQgaW50KSBzdC0+c3Rfc2l6ZSkKLQkJY2hhbmdlZCB8PSBEQVRBX0NIQU5HRUQ7CisJY2hhbmdlZCB8PSBtYXRjaF9zdGF0X2RhdGEoJmNlLT5jZV9zdGF0X2RhdGEsIHN0KTsKIAogCS8qIFJhY2lseSBzbXVkZ2VkIGVudHJ5PyAqLwotCWlmICghY2UtPmNlX3NpemUpIHsKKwlpZiAoIWNlLT5jZV9zdGF0X2RhdGEuc2Rfc2l6ZSkgewogCQlpZiAoIWlzX2VtcHR5X2Jsb2Jfc2hhMShjZS0+c2hhMSkpCiAJCQljaGFuZ2VkIHw9IERBVEFfQ0hBTkdFRDsKIAl9CkBAIC0yMzksMjMgKzI1NCwyNCBAQAogCXJldHVybiBjaGFuZ2VkOwogfQogCi1zdGF0aWMgaW50IGlzX3JhY3lfdGltZXN0YW1wKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQorc3RhdGljIGludCBpc19yYWN5X3RpbWVzdGFtcChjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKIHsKIAlyZXR1cm4gKCFTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkgJiYKIAkJaXN0YXRlLT50aW1lc3RhbXAuc2VjICYmCiAjaWZkZWYgVVNFX05TRUMKIAkJIC8qIG5hbm9zZWNvbmQgdGltZXN0YW1wZWQgZmlsZXMgY2FuIGFsc28gYmUgcmFjeSEgKi8KLQkJKGlzdGF0ZS0+dGltZXN0YW1wLnNlYyA8IGNlLT5jZV9tdGltZS5zZWMgfHwKLQkJIChpc3RhdGUtPnRpbWVzdGFtcC5zZWMgPT0gY2UtPmNlX210aW1lLnNlYyAmJgotCQkgIGlzdGF0ZS0+dGltZXN0YW1wLm5zZWMgPD0gY2UtPmNlX210aW1lLm5zZWMpKQorCQkoaXN0YXRlLT50aW1lc3RhbXAuc2VjIDwgY2UtPmNlX3N0YXRfZGF0YS5zZF9tdGltZS5zZWMgfHwKKwkJIChpc3RhdGUtPnRpbWVzdGFtcC5zZWMgPT0gY2UtPmNlX3N0YXRfZGF0YS5zZF9tdGltZS5zZWMgJiYKKwkJICBpc3RhdGUtPnRpbWVzdGFtcC5uc2VjIDw9IGNlLT5jZV9zdGF0X2RhdGEuc2RfbXRpbWUubnNlYykpCiAjZWxzZQotCQlpc3RhdGUtPnRpbWVzdGFtcC5zZWMgPD0gY2UtPmNlX210aW1lLnNlYworCQlpc3RhdGUtPnRpbWVzdGFtcC5zZWMgPD0gY2UtPmNlX3N0YXRfZGF0YS5zZF9tdGltZS5zZWMKICNlbmRpZgogCQkgKTsKIH0KIAogaW50IGllX21hdGNoX3N0YXQoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCi0JCSAgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0LAorCQkgIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCwKIAkJICB1bnNpZ25lZCBpbnQgb3B0aW9ucykKIHsKIAl1bnNpZ25lZCBpbnQgY2hhbmdlZDsKQEAgLTMxMSw3ICszMjcsOCBAQAogfQogCiBpbnQgaWVfbW9kaWZpZWQoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCi0JCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCwgdW5zaWduZWQgaW50IG9wdGlvbnMpCisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCXN0cnVjdCBzdGF0ICpzdCwgdW5zaWduZWQgaW50IG9wdGlvbnMpCiB7CiAJaW50IGNoYW5nZWQsIGNoYW5nZWRfZnM7CiAKQEAgLTM0MCw3ICszNTcsNyBAQAogCSAqIHRoZW4gd2Uga25vdyBpdCBpcy4KIAkgKi8KIAlpZiAoKGNoYW5nZWQgJiBEQVRBX0NIQU5HRUQpICYmCi0JICAgIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkgfHwgY2UtPmNlX3NpemUgIT0gMCkpCisJICAgIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkgfHwgY2UtPmNlX3N0YXRfZGF0YS5zZF9zaXplICE9IDApKQogCQlyZXR1cm4gY2hhbmdlZDsKIAogCWNoYW5nZWRfZnMgPSBjZV9tb2RpZmllZF9jaGVja19mcyhjZSwgc3QpOwpAQCAtNjI2LDcgKzY0Myw3IEBACiAJCQlpZiAoKnB0ciA9PSAnLycpIHsKIAkJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmZvdW5kY2U7CiAJCQkJKytwdHI7Ci0JCQkJZm91bmRjZSA9IGluZGV4X25hbWVfZXhpc3RzKCZ0aGVfaW5kZXgsIGNlLT5uYW1lLCBwdHIgLSBjZS0+bmFtZSwgaWdub3JlX2Nhc2UpOworCQkJCWZvdW5kY2UgPSBpbmRleF9uYW1lX2V4aXN0cyhpc3RhdGUsIGNlLT5uYW1lLCBwdHIgLSBjZS0+bmFtZSwgaWdub3JlX2Nhc2UpOwogCQkJCWlmIChmb3VuZGNlKSB7CiAJCQkJCW1lbWNweSgodm9pZCAqKXN0YXJ0UHRyLCBmb3VuZGNlLT5uYW1lICsgKHN0YXJ0UHRyIC0gY2UtPm5hbWUpLCBwdHIgLSBzdGFydFB0cik7CiAJCQkJCXN0YXJ0UHRyID0gcHRyOwpAQCAtNzA1LDcgKzcyMiw3IEBACiAJcmV0dXJuIGNlOwogfQogCi1pbnQgY2Vfc2FtZV9uYW1lKHN0cnVjdCBjYWNoZV9lbnRyeSAqYSwgc3RydWN0IGNhY2hlX2VudHJ5ICpiKQoraW50IGNlX3NhbWVfbmFtZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmEsIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqYikKIHsKIAlpbnQgbGVuID0gY2VfbmFtZWxlbihhKTsKIAlyZXR1cm4gY2VfbmFtZWxlbihiKSA9PSBsZW4gJiYgIW1lbWNtcChhLT5uYW1lLCBiLT5uYW1lLCBsZW4pOwpAQCAtOTc5LDcgKzk5Niw3IEBACiAJaWYgKGlzdGF0ZS0+Y2FjaGVfbnIgPT0gaXN0YXRlLT5jYWNoZV9hbGxvYykgewogCQlpc3RhdGUtPmNhY2hlX2FsbG9jID0gYWxsb2NfbnIoaXN0YXRlLT5jYWNoZV9hbGxvYyk7CiAJCWlzdGF0ZS0+Y2FjaGUgPSB4cmVhbGxvYyhpc3RhdGUtPmNhY2hlLAotCQkJCQlpc3RhdGUtPmNhY2hlX2FsbG9jICogc2l6ZW9mKHN0cnVjdCBjYWNoZV9lbnRyeSAqKSk7CisJCQkJCWlzdGF0ZS0+Y2FjaGVfYWxsb2MgKiBzaXplb2YoKmlzdGF0ZS0+Y2FjaGUpKTsKIAl9CiAKIAkvKiBBZGQgaXQgaW4uLiAqLwpAQCAtMTMyMiwxNiArMTMzOSwxNiBAQAogewogCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSB4bWFsbG9jKGNhY2hlX2VudHJ5X3NpemUobGVuKSk7CiAKLQljZS0+Y2VfY3RpbWUuc2VjID0gbnRvaF9sKG9uZGlzay0+Y3RpbWUuc2VjKTsKLQljZS0+Y2VfbXRpbWUuc2VjID0gbnRvaF9sKG9uZGlzay0+bXRpbWUuc2VjKTsKLQljZS0+Y2VfY3RpbWUubnNlYyA9IG50b2hfbChvbmRpc2stPmN0aW1lLm5zZWMpOwotCWNlLT5jZV9tdGltZS5uc2VjID0gbnRvaF9sKG9uZGlzay0+bXRpbWUubnNlYyk7Ci0JY2UtPmNlX2RldiAgID0gbnRvaF9sKG9uZGlzay0+ZGV2KTsKLQljZS0+Y2VfaW5vICAgPSBudG9oX2wob25kaXNrLT5pbm8pOworCWNlLT5jZV9zdGF0X2RhdGEuc2RfY3RpbWUuc2VjID0gbnRvaF9sKG9uZGlzay0+Y3RpbWUuc2VjKTsKKwljZS0+Y2Vfc3RhdF9kYXRhLnNkX210aW1lLnNlYyA9IG50b2hfbChvbmRpc2stPm10aW1lLnNlYyk7CisJY2UtPmNlX3N0YXRfZGF0YS5zZF9jdGltZS5uc2VjID0gbnRvaF9sKG9uZGlzay0+Y3RpbWUubnNlYyk7CisJY2UtPmNlX3N0YXRfZGF0YS5zZF9tdGltZS5uc2VjID0gbnRvaF9sKG9uZGlzay0+bXRpbWUubnNlYyk7CisJY2UtPmNlX3N0YXRfZGF0YS5zZF9kZXYgICA9IG50b2hfbChvbmRpc2stPmRldik7CisJY2UtPmNlX3N0YXRfZGF0YS5zZF9pbm8gICA9IG50b2hfbChvbmRpc2stPmlubyk7CiAJY2UtPmNlX21vZGUgID0gbnRvaF9sKG9uZGlzay0+bW9kZSk7Ci0JY2UtPmNlX3VpZCAgID0gbnRvaF9sKG9uZGlzay0+dWlkKTsKLQljZS0+Y2VfZ2lkICAgPSBudG9oX2wob25kaXNrLT5naWQpOwotCWNlLT5jZV9zaXplICA9IG50b2hfbChvbmRpc2stPnNpemUpOworCWNlLT5jZV9zdGF0X2RhdGEuc2RfdWlkICAgPSBudG9oX2wob25kaXNrLT51aWQpOworCWNlLT5jZV9zdGF0X2RhdGEuc2RfZ2lkICAgPSBudG9oX2wob25kaXNrLT5naWQpOworCWNlLT5jZV9zdGF0X2RhdGEuc2Rfc2l6ZSAgPSBudG9oX2wob25kaXNrLT5zaXplKTsKIAljZS0+Y2VfZmxhZ3MgPSBmbGFncyAmIH5DRV9OQU1FTUFTSzsKIAljZS0+Y2VfbmFtZWxlbiA9IGxlbjsKIAloYXNoY3B5KGNlLT5zaGExLCBvbmRpc2stPnNoYTEpOwpAQCAtMTQ0OSw3ICsxNDY2LDcgQEAKIAlpc3RhdGUtPnZlcnNpb24gPSBudG9obChoZHItPmhkcl92ZXJzaW9uKTsKIAlpc3RhdGUtPmNhY2hlX25yID0gbnRvaGwoaGRyLT5oZHJfZW50cmllcyk7CiAJaXN0YXRlLT5jYWNoZV9hbGxvYyA9IGFsbG9jX25yKGlzdGF0ZS0+Y2FjaGVfbnIpOwotCWlzdGF0ZS0+Y2FjaGUgPSB4Y2FsbG9jKGlzdGF0ZS0+Y2FjaGVfYWxsb2MsIHNpemVvZihzdHJ1Y3QgY2FjaGVfZW50cnkgKikpOworCWlzdGF0ZS0+Y2FjaGUgPSB4Y2FsbG9jKGlzdGF0ZS0+Y2FjaGVfYWxsb2MsIHNpemVvZigqaXN0YXRlLT5jYWNoZSkpOwogCWlzdGF0ZS0+aW5pdGlhbGl6ZWQgPSAxOwogCiAJaWYgKGlzdGF0ZS0+dmVyc2lvbiA9PSA0KQpAQCAtMTUxOCw4ICsxNTM1LDkgQEAKIAlmcmVlX25hbWVfaGFzaChpc3RhdGUpOwogCWNhY2hlX3RyZWVfZnJlZSgmKGlzdGF0ZS0+Y2FjaGVfdHJlZSkpOwogCWlzdGF0ZS0+aW5pdGlhbGl6ZWQgPSAwOwotCi0JLyogbm8gbmVlZCB0byB0aHJvdyBhd2F5IGFsbG9jYXRlZCBhY3RpdmVfY2FjaGUgKi8KKwlmcmVlKGlzdGF0ZS0+Y2FjaGUpOworCWlzdGF0ZS0+Y2FjaGUgPSBOVUxMOworCWlzdGF0ZS0+Y2FjaGVfYWxsb2MgPSAwOwogCXJldHVybiAwOwogfQogCkBAIC0xNjA4LDcgKzE2MjYsNyBAQAogCSAqIFRoZSBvbmx5IHRoaW5nIHdlIGNhcmUgYWJvdXQgaW4gdGhpcyBmdW5jdGlvbiBpcyB0byBzbXVkZ2UgdGhlCiAJICogZmFsc2VseSBjbGVhbiBlbnRyeSBkdWUgdG8gdG91Y2gtdXBkYXRlLXRvdWNoIHJhY2UsIHNvIHdlIGxlYXZlCiAJICogZXZlcnl0aGluZyBlbHNlIGFzIHRoZXkgYXJlLiAgV2UgYXJlIGNhbGxlZCBmb3IgZW50cmllcyB3aG9zZQotCSAqIGNlX210aW1lIG1hdGNoIHRoZSBpbmRleCBmaWxlIG10aW1lLgorCSAqIGNlX3N0YXRfZGF0YS5zZF9tdGltZSBtYXRjaCB0aGUgaW5kZXggZmlsZSBtdGltZS4KIAkgKgogCSAqIE5vdGUgdGhhdCB0aGlzIGFjdHVhbGx5IGRvZXMgbm90IGRvIG11Y2ggZm9yIGdpdGxpbmtzLCBmb3IKIAkgKiB3aGljaCBjZV9tYXRjaF9zdGF0X2Jhc2ljKCkgYWx3YXlzIGdvZXMgdG8gdGhlIGFjdHVhbApAQCAtMTY0Nyw3ICsxNjY1LDcgQEAKIAkJICogZmlsZSwgYW5kIG5ldmVyIGNhbGxzIHVzLCBzbyB0aGUgY2FjaGVkIHNpemUgaW5mb3JtYXRpb24KIAkJICogZm9yICJmcm90eiIgc3RheXMgNiB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgZmlsZXN5c3RlbS4KIAkJICovCi0JCWNlLT5jZV9zaXplID0gMDsKKwkJY2UtPmNlX3N0YXRfZGF0YS5zZF9zaXplID0gMDsKIAl9CiB9CiAKQEAgLTE2NTcsMTYgKzE2NzUsMTYgQEAKIHsKIAlzaG9ydCBmbGFnczsKIAotCW9uZGlzay0+Y3RpbWUuc2VjID0gaHRvbmwoY2UtPmNlX2N0aW1lLnNlYyk7Ci0Jb25kaXNrLT5tdGltZS5zZWMgPSBodG9ubChjZS0+Y2VfbXRpbWUuc2VjKTsKLQlvbmRpc2stPmN0aW1lLm5zZWMgPSBodG9ubChjZS0+Y2VfY3RpbWUubnNlYyk7Ci0Jb25kaXNrLT5tdGltZS5uc2VjID0gaHRvbmwoY2UtPmNlX210aW1lLm5zZWMpOwotCW9uZGlzay0+ZGV2ICA9IGh0b25sKGNlLT5jZV9kZXYpOwotCW9uZGlzay0+aW5vICA9IGh0b25sKGNlLT5jZV9pbm8pOworCW9uZGlzay0+Y3RpbWUuc2VjID0gaHRvbmwoY2UtPmNlX3N0YXRfZGF0YS5zZF9jdGltZS5zZWMpOworCW9uZGlzay0+bXRpbWUuc2VjID0gaHRvbmwoY2UtPmNlX3N0YXRfZGF0YS5zZF9tdGltZS5zZWMpOworCW9uZGlzay0+Y3RpbWUubnNlYyA9IGh0b25sKGNlLT5jZV9zdGF0X2RhdGEuc2RfY3RpbWUubnNlYyk7CisJb25kaXNrLT5tdGltZS5uc2VjID0gaHRvbmwoY2UtPmNlX3N0YXRfZGF0YS5zZF9tdGltZS5uc2VjKTsKKwlvbmRpc2stPmRldiAgPSBodG9ubChjZS0+Y2Vfc3RhdF9kYXRhLnNkX2Rldik7CisJb25kaXNrLT5pbm8gID0gaHRvbmwoY2UtPmNlX3N0YXRfZGF0YS5zZF9pbm8pOwogCW9uZGlzay0+bW9kZSA9IGh0b25sKGNlLT5jZV9tb2RlKTsKLQlvbmRpc2stPnVpZCAgPSBodG9ubChjZS0+Y2VfdWlkKTsKLQlvbmRpc2stPmdpZCAgPSBodG9ubChjZS0+Y2VfZ2lkKTsKLQlvbmRpc2stPnNpemUgPSBodG9ubChjZS0+Y2Vfc2l6ZSk7CisJb25kaXNrLT51aWQgID0gaHRvbmwoY2UtPmNlX3N0YXRfZGF0YS5zZF91aWQpOworCW9uZGlzay0+Z2lkICA9IGh0b25sKGNlLT5jZV9zdGF0X2RhdGEuc2RfZ2lkKTsKKwlvbmRpc2stPnNpemUgPSBodG9ubChjZS0+Y2Vfc3RhdF9kYXRhLnNkX3NpemUpOwogCWhhc2hjcHkob25kaXNrLT5zaGExLCBjZS0+c2hhMSk7CiAKIAlmbGFncyA9IGNlLT5jZV9mbGFnczsKQEAgLTE5MzMsMyArMTk1MSwzMyBAQAogCQkqc2l6ZSA9IHN6OwogCXJldHVybiBkYXRhOwogfQorCit2b2lkIHN0YXRfdmFsaWRpdHlfY2xlYXIoc3RydWN0IHN0YXRfdmFsaWRpdHkgKnN2KQoreworCWZyZWUoc3YtPnNkKTsKKwlzdi0+c2QgPSBOVUxMOworfQorCitpbnQgc3RhdF92YWxpZGl0eV9jaGVjayhzdHJ1Y3Qgc3RhdF92YWxpZGl0eSAqc3YsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoc3RhdChwYXRoLCAmc3QpIDwgMCkKKwkJcmV0dXJuIHN2LT5zZCA9PSBOVUxMOworCWlmICghc3YtPnNkKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gU19JU1JFRyhzdC5zdF9tb2RlKSAmJiAhbWF0Y2hfc3RhdF9kYXRhKHN2LT5zZCwgJnN0KTsKK30KKwordm9pZCBzdGF0X3ZhbGlkaXR5X3VwZGF0ZShzdHJ1Y3Qgc3RhdF92YWxpZGl0eSAqc3YsIGludCBmZCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChmc3RhdChmZCwgJnN0KSA8IDAgfHwgIVNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCXN0YXRfdmFsaWRpdHlfY2xlYXIoc3YpOworCWVsc2UgeworCQlpZiAoIXN2LT5zZCkKKwkJCXN2LT5zZCA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzdGF0X2RhdGEpKTsKKwkJZmlsbF9zdGF0X2RhdGEoc3YtPnNkLCAmc3QpOworCX0KK30KZGlmZiAtLWdpdCBhL3JlZnMuYyBiL3JlZnMuYwppbmRleCBkZTJkOGViLi5hM2YyMzAyIDEwMDY0NAotLS0gYS9yZWZzLmMKKysrIGIvcmVmcy5jCkBAIC03Miw2ICs3MiwxMCBAQAogewogCWludCBjb21wb25lbnRfbGVuLCBjb21wb25lbnRfY291bnQgPSAwOwogCisJaWYgKCFzdHJjbXAocmVmbmFtZSwgIkAiKSkKKwkJLyogUmVmbmFtZSBpcyBhIHNpbmdsZSBjaGFyYWN0ZXIgJ0AnLiAqLworCQlyZXR1cm4gLTE7CisKIAl3aGlsZSAoMSkgewogCQkvKiBXZSBhcmUgYXQgdGhlIHN0YXJ0IG9mIGEgcGF0aCBjb21wb25lbnQuICovCiAJCWNvbXBvbmVudF9sZW4gPSBjaGVja19yZWZuYW1lX2NvbXBvbmVudChyZWZuYW1lLCBmbGFncyk7CkBAIC0xMDksNyArMTEzLDIwIEBACiAgKiAocmVmX2VudHJ5LT5mbGFnICYgUkVGX0RJUikgaXMgemVyby4KICAqLwogc3RydWN0IHJlZl92YWx1ZSB7CisJLyoKKwkgKiBUaGUgbmFtZSBvZiB0aGUgb2JqZWN0IHRvIHdoaWNoIHRoaXMgcmVmZXJlbmNlIHJlc29sdmVzCisJICogKHdoaWNoIG1heSBiZSBhIHRhZyBvYmplY3QpLiAgSWYgUkVGX0lTQlJPS0VOLCB0aGlzIGlzCisJICogbnVsbC4gIElmIFJFRl9JU1NZTVJFRiwgdGhlbiB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QKKwkgKiByZWZlcnJlZCB0byBieSB0aGUgbGFzdCByZWZlcmVuY2UgaW4gdGhlIHN5bWxpbmsgY2hhaW4uCisJICovCiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCS8qCisJICogSWYgUkVGX0tOT1dTX1BFRUxFRCwgdGhlbiB0aGlzIGZpZWxkIGhvbGRzIHRoZSBwZWVsZWQgdmFsdWUKKwkgKiBvZiB0aGlzIHJlZmVyZW5jZSwgb3IgbnVsbCBpZiB0aGUgcmVmZXJlbmNlIGlzIGtub3duIG5vdCB0bworCSAqIGJlIHBlZWxhYmxlLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBwZWVsX3JlZigpIGZvciBhbgorCSAqIGV4YWN0IGRlZmluaXRpb24gb2YgInBlZWxhYmxlIi4KKwkgKi8KIAl1bnNpZ25lZCBjaGFyIHBlZWxlZFsyMF07CiB9OwogCkBAIC0xNTgsNyArMTc1LDE3IEBACiAJc3RydWN0IHJlZl9lbnRyeSAqKmVudHJpZXM7CiB9OwogCi0vKiBJU1NZTVJFRj0weDAxLCBJU1BBQ0tFRD0weDAyLCBhbmQgSVNCUk9LRU49MHgwNCBhcmUgcHVibGljIGludGVyZmFjZXMgKi8KKy8qCisgKiBCaXQgdmFsdWVzIGZvciByZWZfZW50cnk6OmZsYWcuICBSRUZfSVNTWU1SRUY9MHgwMSwKKyAqIFJFRl9JU1BBQ0tFRD0weDAyLCBhbmQgUkVGX0lTQlJPS0VOPTB4MDQgYXJlIHB1YmxpYyB2YWx1ZXM7IHNlZQorICogcmVmcy5oLgorICovCisKKy8qCisgKiBUaGUgZmllbGQgcmVmX2VudHJ5LT51LnZhbHVlLnBlZWxlZCBvZiB0aGlzIHZhbHVlIGVudHJ5IGNvbnRhaW5zCisgKiB0aGUgY29ycmVjdCBwZWVsZWQgdmFsdWUgZm9yIHRoZSByZWZlcmVuY2UsIHdoaWNoIG1pZ2h0IGJlCisgKiBudWxsX3NoYTEgaWYgdGhlIHJlZmVyZW5jZSBpcyBub3QgYSB0YWcgb3IgaWYgaXQgaXMgYnJva2VuLgorICovCiAjZGVmaW5lIFJFRl9LTk9XU19QRUVMRUQgMHgwOAogCiAvKiByZWZfZW50cnkgcmVwcmVzZW50cyBhIGRpcmVjdG9yeSBvZiByZWZlcmVuY2VzICovCkBAIC0zNDMsMTggKzM3MCwxNyBAQAogfQogCiAvKgotICogUmV0dXJuIHRoZSBlbnRyeSB3aXRoIHRoZSBnaXZlbiByZWZuYW1lIGZyb20gdGhlIHJlZl9kaXIKLSAqIChub24tcmVjdXJzaXZlbHkpLCBzb3J0aW5nIGRpciBpZiBuZWNlc3NhcnkuICBSZXR1cm4gTlVMTCBpZiBubwotICogc3VjaCBlbnRyeSBpcyBmb3VuZC4gIGRpciBtdXN0IGFscmVhZHkgYmUgY29tcGxldGUuCisgKiBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBlbnRyeSB3aXRoIHRoZSBnaXZlbiByZWZuYW1lIGZyb20gdGhlCisgKiByZWZfZGlyIChub24tcmVjdXJzaXZlbHkpLCBzb3J0aW5nIGRpciBpZiBuZWNlc3NhcnkuICBSZXR1cm4gLTEgaWYKKyAqIG5vIHN1Y2ggZW50cnkgaXMgZm91bmQuICBkaXIgbXVzdCBhbHJlYWR5IGJlIGNvbXBsZXRlLgogICovCi1zdGF0aWMgc3RydWN0IHJlZl9lbnRyeSAqc2VhcmNoX3JlZl9kaXIoc3RydWN0IHJlZl9kaXIgKmRpciwKLQkJCQkJY29uc3QgY2hhciAqcmVmbmFtZSwgc2l6ZV90IGxlbikKK3N0YXRpYyBpbnQgc2VhcmNoX3JlZl9kaXIoc3RydWN0IHJlZl9kaXIgKmRpciwgY29uc3QgY2hhciAqcmVmbmFtZSwgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3QgcmVmX2VudHJ5ICoqcjsKIAlzdHJ1Y3Qgc3RyaW5nX3NsaWNlIGtleTsKIAogCWlmIChyZWZuYW1lID09IE5VTEwgfHwgIWRpci0+bnIpCi0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gLTE7CiAKIAlzb3J0X3JlZl9kaXIoZGlyKTsKIAlrZXkubGVuID0gbGVuOwpAQCAtMzYzLDkgKzM4OSw5IEBACiAJCSAgICByZWZfZW50cnlfY21wX3NzbGljZSk7CiAKIAlpZiAociA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIC0xOwogCi0JcmV0dXJuICpyOworCXJldHVybiByIC0gZGlyLT5lbnRyaWVzOwogfQogCiAvKgpAQCAtMzc5LDggKzQwNSw5IEBACiAJCQkJCSBjb25zdCBjaGFyICpzdWJkaXJuYW1lLCBzaXplX3QgbGVuLAogCQkJCQkgaW50IG1rZGlyKQogewotCXN0cnVjdCByZWZfZW50cnkgKmVudHJ5ID0gc2VhcmNoX3JlZl9kaXIoZGlyLCBzdWJkaXJuYW1lLCBsZW4pOwotCWlmICghZW50cnkpIHsKKwlpbnQgZW50cnlfaW5kZXggPSBzZWFyY2hfcmVmX2RpcihkaXIsIHN1YmRpcm5hbWUsIGxlbik7CisJc3RydWN0IHJlZl9lbnRyeSAqZW50cnk7CisJaWYgKGVudHJ5X2luZGV4ID09IC0xKSB7CiAJCWlmICghbWtkaXIpCiAJCQlyZXR1cm4gTlVMTDsKIAkJLyoKQEAgLTM5MSw2ICs0MTgsOCBAQAogCQkgKi8KIAkJZW50cnkgPSBjcmVhdGVfZGlyX2VudHJ5KGRpci0+cmVmX2NhY2hlLCBzdWJkaXJuYW1lLCBsZW4sIDApOwogCQlhZGRfZW50cnlfdG9fZGlyKGRpciwgZW50cnkpOworCX0gZWxzZSB7CisJCWVudHJ5ID0gZGlyLT5lbnRyaWVzW2VudHJ5X2luZGV4XTsKIAl9CiAJcmV0dXJuIGdldF9yZWZfZGlyKGVudHJ5KTsKIH0KQEAgLTQyOSwxMiArNDU4LDY3IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVmX2VudHJ5ICpmaW5kX3JlZihzdHJ1Y3QgcmVmX2RpciAqZGlyLCBjb25zdCBjaGFyICpyZWZuYW1lKQogeworCWludCBlbnRyeV9pbmRleDsKIAlzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeTsKIAlkaXIgPSBmaW5kX2NvbnRhaW5pbmdfZGlyKGRpciwgcmVmbmFtZSwgMCk7CiAJaWYgKCFkaXIpCiAJCXJldHVybiBOVUxMOwotCWVudHJ5ID0gc2VhcmNoX3JlZl9kaXIoZGlyLCByZWZuYW1lLCBzdHJsZW4ocmVmbmFtZSkpOwotCXJldHVybiAoZW50cnkgJiYgIShlbnRyeS0+ZmxhZyAmIFJFRl9ESVIpKSA/IGVudHJ5IDogTlVMTDsKKwllbnRyeV9pbmRleCA9IHNlYXJjaF9yZWZfZGlyKGRpciwgcmVmbmFtZSwgc3RybGVuKHJlZm5hbWUpKTsKKwlpZiAoZW50cnlfaW5kZXggPT0gLTEpCisJCXJldHVybiBOVUxMOworCWVudHJ5ID0gZGlyLT5lbnRyaWVzW2VudHJ5X2luZGV4XTsKKwlyZXR1cm4gKGVudHJ5LT5mbGFnICYgUkVGX0RJUikgPyBOVUxMIDogZW50cnk7Cit9CisKKy8qCisgKiBSZW1vdmUgdGhlIGVudHJ5IHdpdGggdGhlIGdpdmVuIG5hbWUgZnJvbSBkaXIsIHJlY3Vyc2luZyBpbnRvCisgKiBzdWJkaXJlY3RvcmllcyBhcyBuZWNlc3NhcnkuICBJZiByZWZuYW1lIGlzIHRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5CisgKiAoaS5lLiwgZW5kcyB3aXRoICcvJyksIHRoZW4gcmVtb3ZlIHRoZSBkaXJlY3RvcnkgYW5kIGl0cyBjb250ZW50cy4KKyAqIElmIHRoZSByZW1vdmFsIHdhcyBzdWNjZXNzZnVsLCByZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzCisgKiByZW1haW5pbmcgaW4gdGhlIGRpcmVjdG9yeSBlbnRyeSB0aGF0IGNvbnRhaW5lZCB0aGUgZGVsZXRlZCBlbnRyeS4KKyAqIElmIHRoZSBuYW1lIHdhcyBub3QgZm91bmQsIHJldHVybiAtMS4gIFBsZWFzZSBub3RlIHRoYXQgdGhpcworICogZnVuY3Rpb24gb25seSBkZWxldGVzIHRoZSBlbnRyeSBmcm9tIHRoZSBjYWNoZTsgaXQgZG9lcyBub3QgZGVsZXRlCisgKiBpdCBmcm9tIHRoZSBmaWxlc3lzdGVtIG9yIGVuc3VyZSB0aGF0IG90aGVyIGNhY2hlIGVudHJpZXMgKHdoaWNoCisgKiBtaWdodCBiZSBzeW1ib2xpYyByZWZlcmVuY2VzIHRvIHRoZSByZW1vdmVkIGVudHJ5KSBhcmUgdXBkYXRlZC4KKyAqIE5vciBkb2VzIGl0IHJlbW92ZSBhbnkgY29udGFpbmluZyBkaXIgZW50cmllcyB0aGF0IG1pZ2h0IGJlIG1hZGUKKyAqIGVtcHR5IGJ5IHRoZSByZW1vdmFsLiAgZGlyIG11c3QgcmVwcmVzZW50IHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5CisgKiBhbmQgbXVzdCBhbHJlYWR5IGJlIGNvbXBsZXRlLgorICovCitzdGF0aWMgaW50IHJlbW92ZV9lbnRyeShzdHJ1Y3QgcmVmX2RpciAqZGlyLCBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCWludCByZWZuYW1lX2xlbiA9IHN0cmxlbihyZWZuYW1lKTsKKwlpbnQgZW50cnlfaW5kZXg7CisJc3RydWN0IHJlZl9lbnRyeSAqZW50cnk7CisJaW50IGlzX2RpciA9IHJlZm5hbWVbcmVmbmFtZV9sZW4gLSAxXSA9PSAnLyc7CisJaWYgKGlzX2RpcikgeworCQkvKgorCQkgKiByZWZuYW1lIHJlcHJlc2VudHMgYSByZWZlcmVuY2UgZGlyZWN0b3J5LiAgUmVtb3ZlCisJCSAqIHRoZSB0cmFpbGluZyBzbGFzaDsgb3RoZXJ3aXNlIHdlIHdpbGwgZ2V0IHRoZQorCQkgKiBkaXJlY3RvcnkgKnJlcHJlc2VudGluZyogcmVmbmFtZSByYXRoZXIgdGhhbiB0aGUKKwkJICogb25lICpjb250YWluaW5nKiBpdC4KKwkJICovCisJCWNoYXIgKmRpcm5hbWUgPSB4bWVtZHVweihyZWZuYW1lLCByZWZuYW1lX2xlbiAtIDEpOworCQlkaXIgPSBmaW5kX2NvbnRhaW5pbmdfZGlyKGRpciwgZGlybmFtZSwgMCk7CisJCWZyZWUoZGlybmFtZSk7CisJfSBlbHNlIHsKKwkJZGlyID0gZmluZF9jb250YWluaW5nX2RpcihkaXIsIHJlZm5hbWUsIDApOworCX0KKwlpZiAoIWRpcikKKwkJcmV0dXJuIC0xOworCWVudHJ5X2luZGV4ID0gc2VhcmNoX3JlZl9kaXIoZGlyLCByZWZuYW1lLCByZWZuYW1lX2xlbik7CisJaWYgKGVudHJ5X2luZGV4ID09IC0xKQorCQlyZXR1cm4gLTE7CisJZW50cnkgPSBkaXItPmVudHJpZXNbZW50cnlfaW5kZXhdOworCisJbWVtbW92ZSgmZGlyLT5lbnRyaWVzW2VudHJ5X2luZGV4XSwKKwkJJmRpci0+ZW50cmllc1tlbnRyeV9pbmRleCArIDFdLAorCQkoZGlyLT5uciAtIGVudHJ5X2luZGV4IC0gMSkgKiBzaXplb2YoKmRpci0+ZW50cmllcykKKwkJKTsKKwlkaXItPm5yLS07CisJaWYgKGRpci0+c29ydGVkID4gZW50cnlfaW5kZXgpCisJCWRpci0+c29ydGVkLS07CisJZnJlZV9yZWZfZW50cnkoZW50cnkpOworCXJldHVybiBkaXItPm5yOwogfQogCiAvKgpAQCAtNTAzLDI3ICs1ODcsNjQgQEAKIAlkaXItPnNvcnRlZCA9IGRpci0+bnIgPSBpOwogfQogCi0jZGVmaW5lIERPX0ZPUl9FQUNIX0lOQ0xVREVfQlJPS0VOIDAxCisvKiBJbmNsdWRlIGJyb2tlbiByZWZlcmVuY2VzIGluIGEgZG9fZm9yX2VhY2hfcmVmKigpIGl0ZXJhdGlvbjogKi8KKyNkZWZpbmUgRE9fRk9SX0VBQ0hfSU5DTFVERV9CUk9LRU4gMHgwMQogCisvKgorICogUmV0dXJuIHRydWUgaWZmIHRoZSByZWZlcmVuY2UgZGVzY3JpYmVkIGJ5IGVudHJ5IGNhbiBiZSByZXNvbHZlZCB0bworICogYW4gb2JqZWN0IGluIHRoZSBkYXRhYmFzZS4gIEVtaXQgYSB3YXJuaW5nIGlmIHRoZSByZWZlcnJlZC10bworICogb2JqZWN0IGRvZXMgbm90IGV4aXN0LgorICovCitzdGF0aWMgaW50IHJlZl9yZXNvbHZlc190b19vYmplY3Qoc3RydWN0IHJlZl9lbnRyeSAqZW50cnkpCit7CisJaWYgKGVudHJ5LT5mbGFnICYgUkVGX0lTQlJPS0VOKQorCQlyZXR1cm4gMDsKKwlpZiAoIWhhc19zaGExX2ZpbGUoZW50cnktPnUudmFsdWUuc2hhMSkpIHsKKwkJZXJyb3IoIiVzIGRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgb2JqZWN0ISIsIGVudHJ5LT5uYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisvKgorICogY3VycmVudF9yZWYgaXMgYSBwZXJmb3JtYW5jZSBoYWNrOiB3aGVuIGl0ZXJhdGluZyBvdmVyIHJlZmVyZW5jZXMKKyAqIHVzaW5nIHRoZSBmb3JfZWFjaF9yZWYqKCkgZnVuY3Rpb25zLCBjdXJyZW50X3JlZiBpcyBzZXQgdG8gdGhlCisgKiBjdXJyZW50IHJlZmVyZW5jZSdzIGVudHJ5IGJlZm9yZSBjYWxsaW5nIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4gIElmCisgKiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gY2FsbHMgcGVlbF9yZWYoKSwgdGhlbiBwZWVsX3JlZigpIGZpcnN0CisgKiBjaGVja3Mgd2hldGhlciB0aGUgcmVmZXJlbmNlIHRvIGJlIHBlZWxlZCBpcyB0aGUgY3VycmVudCByZWZlcmVuY2UKKyAqIChpdCB1c3VhbGx5IGlzKSBhbmQgaWYgc28sIHJldHVybnMgdGhhdCByZWZlcmVuY2UncyBwZWVsZWQgdmVyc2lvbgorICogaWYgaXQgaXMgYXZhaWxhYmxlLiAgVGhpcyBhdm9pZHMgYSByZWZuYW1lIGxvb2t1cCBpbiBhIGNvbW1vbiBjYXNlLgorICovCiBzdGF0aWMgc3RydWN0IHJlZl9lbnRyeSAqY3VycmVudF9yZWY7CiAKLXN0YXRpYyBpbnQgZG9fb25lX3JlZihjb25zdCBjaGFyICpiYXNlLCBlYWNoX3JlZl9mbiBmbiwgaW50IHRyaW0sCi0JCSAgICAgIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSwgc3RydWN0IHJlZl9lbnRyeSAqZW50cnkpCit0eXBlZGVmIGludCBlYWNoX3JlZl9lbnRyeV9mbihzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeSwgdm9pZCAqY2JfZGF0YSk7CisKK3N0cnVjdCByZWZfZW50cnlfY2IgeworCWNvbnN0IGNoYXIgKmJhc2U7CisJaW50IHRyaW07CisJaW50IGZsYWdzOworCWVhY2hfcmVmX2ZuICpmbjsKKwl2b2lkICpjYl9kYXRhOworfTsKKworLyoKKyAqIEhhbmRsZSBvbmUgcmVmZXJlbmNlIGluIGEgZG9fZm9yX2VhY2hfcmVmKigpLXN0eWxlIGl0ZXJhdGlvbiwKKyAqIGNhbGxpbmcgYW4gZWFjaF9yZWZfZm4gZm9yIGVhY2ggZW50cnkuCisgKi8KK3N0YXRpYyBpbnQgZG9fb25lX3JlZihzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeSwgdm9pZCAqY2JfZGF0YSkKIHsKKwlzdHJ1Y3QgcmVmX2VudHJ5X2NiICpkYXRhID0gY2JfZGF0YTsKIAlpbnQgcmV0dmFsOwotCWlmIChwcmVmaXhjbXAoZW50cnktPm5hbWUsIGJhc2UpKQorCWlmIChwcmVmaXhjbXAoZW50cnktPm5hbWUsIGRhdGEtPmJhc2UpKQogCQlyZXR1cm4gMDsKIAotCWlmICghKGZsYWdzICYgRE9fRk9SX0VBQ0hfSU5DTFVERV9CUk9LRU4pKSB7Ci0JCWlmIChlbnRyeS0+ZmxhZyAmIFJFRl9JU0JST0tFTikKLQkJCXJldHVybiAwOyAvKiBpZ25vcmUgYnJva2VuIHJlZnMgZS5nLiBkYW5nbGluZyBzeW1yZWYgKi8KLQkJaWYgKCFoYXNfc2hhMV9maWxlKGVudHJ5LT51LnZhbHVlLnNoYTEpKSB7Ci0JCQllcnJvcigiJXMgZG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBvYmplY3QhIiwgZW50cnktPm5hbWUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9CisJaWYgKCEoZGF0YS0+ZmxhZ3MgJiBET19GT1JfRUFDSF9JTkNMVURFX0JST0tFTikgJiYKKwkgICAgICAhcmVmX3Jlc29sdmVzX3RvX29iamVjdChlbnRyeSkpCisJCXJldHVybiAwOworCiAJY3VycmVudF9yZWYgPSBlbnRyeTsKLQlyZXR2YWwgPSBmbihlbnRyeS0+bmFtZSArIHRyaW0sIGVudHJ5LT51LnZhbHVlLnNoYTEsIGVudHJ5LT5mbGFnLCBjYl9kYXRhKTsKKwlyZXR2YWwgPSBkYXRhLT5mbihlbnRyeS0+bmFtZSArIGRhdGEtPnRyaW0sIGVudHJ5LT51LnZhbHVlLnNoYTEsCisJCQkgIGVudHJ5LT5mbGFnLCBkYXRhLT5jYl9kYXRhKTsKIAljdXJyZW50X3JlZiA9IE5VTEw7CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTUzMiwxMSArNjUzLDExIEBACiAgKiBDYWxsIGZuIGZvciBlYWNoIHJlZmVyZW5jZSBpbiBkaXIgdGhhdCBoYXMgaW5kZXggaW4gdGhlIHJhbmdlCiAgKiBvZmZzZXQgPD0gaW5kZXggPCBkaXItPm5yLiAgUmVjdXJzZSBpbnRvIHN1YmRpcmVjdG9yaWVzIHRoYXQgYXJlIGluCiAgKiB0aGF0IGluZGV4IHJhbmdlLCBzb3J0aW5nIHRoZW0gYmVmb3JlIGl0ZXJhdGluZy4gIFRoaXMgZnVuY3Rpb24KLSAqIGRvZXMgbm90IHNvcnQgZGlyIGl0c2VsZjsgaXQgc2hvdWxkIGJlIHNvcnRlZCBiZWZvcmVoYW5kLgorICogZG9lcyBub3Qgc29ydCBkaXIgaXRzZWxmOyBpdCBzaG91bGQgYmUgc29ydGVkIGJlZm9yZWhhbmQuICBmbiBpcworICogY2FsbGVkIGZvciBhbGwgcmVmZXJlbmNlcywgaW5jbHVkaW5nIGJyb2tlbiBvbmVzLgogICovCi1zdGF0aWMgaW50IGRvX2Zvcl9lYWNoX3JlZl9pbl9kaXIoc3RydWN0IHJlZl9kaXIgKmRpciwgaW50IG9mZnNldCwKLQkJCQkgIGNvbnN0IGNoYXIgKmJhc2UsCi0JCQkJICBlYWNoX3JlZl9mbiBmbiwgaW50IHRyaW0sIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3N0YXRpYyBpbnQgZG9fZm9yX2VhY2hfZW50cnlfaW5fZGlyKHN0cnVjdCByZWZfZGlyICpkaXIsIGludCBvZmZzZXQsCisJCQkJICAgIGVhY2hfcmVmX2VudHJ5X2ZuIGZuLCB2b2lkICpjYl9kYXRhKQogewogCWludCBpOwogCWFzc2VydChkaXItPnNvcnRlZCA9PSBkaXItPm5yKTsKQEAgLTU0NiwxMCArNjY3LDkgQEAKIAkJaWYgKGVudHJ5LT5mbGFnICYgUkVGX0RJUikgewogCQkJc3RydWN0IHJlZl9kaXIgKnN1YmRpciA9IGdldF9yZWZfZGlyKGVudHJ5KTsKIAkJCXNvcnRfcmVmX2RpcihzdWJkaXIpOwotCQkJcmV0dmFsID0gZG9fZm9yX2VhY2hfcmVmX2luX2RpcihzdWJkaXIsIDAsCi0JCQkJCQkJYmFzZSwgZm4sIHRyaW0sIGZsYWdzLCBjYl9kYXRhKTsKKwkJCXJldHZhbCA9IGRvX2Zvcl9lYWNoX2VudHJ5X2luX2RpcihzdWJkaXIsIDAsIGZuLCBjYl9kYXRhKTsKIAkJfSBlbHNlIHsKLQkJCXJldHZhbCA9IGRvX29uZV9yZWYoYmFzZSwgZm4sIHRyaW0sIGZsYWdzLCBjYl9kYXRhLCBlbnRyeSk7CisJCQlyZXR2YWwgPSBmbihlbnRyeSwgY2JfZGF0YSk7CiAJCX0KIAkJaWYgKHJldHZhbCkKIAkJCXJldHVybiByZXR2YWw7CkBAIC01NjIsMTIgKzY4MiwxMiBAQAogICogYnkgcmVmbmFtZS4gIFJlY3Vyc2UgaW50byBzdWJkaXJlY3Rvcmllcy4gIElmIGEgdmFsdWUgZW50cnkgYXBwZWFycwogICogaW4gYm90aCBkaXIxIGFuZCBkaXIyLCB0aGVuIG9ubHkgcHJvY2VzcyB0aGUgdmVyc2lvbiB0aGF0IGlzIGluCiAgKiBkaXIyLiAgVGhlIGlucHV0IGRpcnMgbXVzdCBhbHJlYWR5IGJlIHNvcnRlZCwgYnV0IHN1YmRpcnMgd2lsbCBiZQotICogc29ydGVkIGFzIG5lZWRlZC4KKyAqIHNvcnRlZCBhcyBuZWVkZWQuICBmbiBpcyBjYWxsZWQgZm9yIGFsbCByZWZlcmVuY2VzLCBpbmNsdWRpbmcKKyAqIGJyb2tlbiBvbmVzLgogICovCi1zdGF0aWMgaW50IGRvX2Zvcl9lYWNoX3JlZl9pbl9kaXJzKHN0cnVjdCByZWZfZGlyICpkaXIxLAotCQkJCSAgIHN0cnVjdCByZWZfZGlyICpkaXIyLAotCQkJCSAgIGNvbnN0IGNoYXIgKmJhc2UsIGVhY2hfcmVmX2ZuIGZuLCBpbnQgdHJpbSwKLQkJCQkgICBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCitzdGF0aWMgaW50IGRvX2Zvcl9lYWNoX2VudHJ5X2luX2RpcnMoc3RydWN0IHJlZl9kaXIgKmRpcjEsCisJCQkJICAgICBzdHJ1Y3QgcmVmX2RpciAqZGlyMiwKKwkJCQkgICAgIGVhY2hfcmVmX2VudHJ5X2ZuIGZuLCB2b2lkICpjYl9kYXRhKQogewogCWludCByZXR2YWw7CiAJaW50IGkxID0gMCwgaTIgPSAwOwpAQCAtNTc4LDEyICs2OTgsMTAgQEAKIAkJc3RydWN0IHJlZl9lbnRyeSAqZTEsICplMjsKIAkJaW50IGNtcDsKIAkJaWYgKGkxID09IGRpcjEtPm5yKSB7Ci0JCQlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmX2luX2RpcihkaXIyLCBpMiwKLQkJCQkJCSAgICAgIGJhc2UsIGZuLCB0cmltLCBmbGFncywgY2JfZGF0YSk7CisJCQlyZXR1cm4gZG9fZm9yX2VhY2hfZW50cnlfaW5fZGlyKGRpcjIsIGkyLCBmbiwgY2JfZGF0YSk7CiAJCX0KIAkJaWYgKGkyID09IGRpcjItPm5yKSB7Ci0JCQlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmX2luX2RpcihkaXIxLCBpMSwKLQkJCQkJCSAgICAgIGJhc2UsIGZuLCB0cmltLCBmbGFncywgY2JfZGF0YSk7CisJCQlyZXR1cm4gZG9fZm9yX2VhY2hfZW50cnlfaW5fZGlyKGRpcjEsIGkxLCBmbiwgY2JfZGF0YSk7CiAJCX0KIAkJZTEgPSBkaXIxLT5lbnRyaWVzW2kxXTsKIAkJZTIgPSBkaXIyLT5lbnRyaWVzW2kyXTsKQEAgLTU5NSwxNCArNzEzLDEzIEBACiAJCQkJc3RydWN0IHJlZl9kaXIgKnN1YmRpcjIgPSBnZXRfcmVmX2RpcihlMik7CiAJCQkJc29ydF9yZWZfZGlyKHN1YmRpcjEpOwogCQkJCXNvcnRfcmVmX2RpcihzdWJkaXIyKTsKLQkJCQlyZXR2YWwgPSBkb19mb3JfZWFjaF9yZWZfaW5fZGlycygKLQkJCQkJCXN1YmRpcjEsIHN1YmRpcjIsCi0JCQkJCQliYXNlLCBmbiwgdHJpbSwgZmxhZ3MsIGNiX2RhdGEpOworCQkJCXJldHZhbCA9IGRvX2Zvcl9lYWNoX2VudHJ5X2luX2RpcnMoCisJCQkJCQlzdWJkaXIxLCBzdWJkaXIyLCBmbiwgY2JfZGF0YSk7CiAJCQkJaTErKzsKIAkJCQlpMisrOwogCQkJfSBlbHNlIGlmICghKGUxLT5mbGFnICYgUkVGX0RJUikgJiYgIShlMi0+ZmxhZyAmIFJFRl9ESVIpKSB7CiAJCQkJLyogQm90aCBhcmUgcmVmZXJlbmNlczsgaWdub3JlIHRoZSBvbmUgZnJvbSBkaXIxLiAqLwotCQkJCXJldHZhbCA9IGRvX29uZV9yZWYoYmFzZSwgZm4sIHRyaW0sIGZsYWdzLCBjYl9kYXRhLCBlMik7CisJCQkJcmV0dmFsID0gZm4oZTIsIGNiX2RhdGEpOwogCQkJCWkxKys7CiAJCQkJaTIrKzsKIAkJCX0gZWxzZSB7CkBAIC02MjEsMjYgKzczOCwzMyBAQAogCQkJaWYgKGUtPmZsYWcgJiBSRUZfRElSKSB7CiAJCQkJc3RydWN0IHJlZl9kaXIgKnN1YmRpciA9IGdldF9yZWZfZGlyKGUpOwogCQkJCXNvcnRfcmVmX2RpcihzdWJkaXIpOwotCQkJCXJldHZhbCA9IGRvX2Zvcl9lYWNoX3JlZl9pbl9kaXIoCi0JCQkJCQlzdWJkaXIsIDAsCi0JCQkJCQliYXNlLCBmbiwgdHJpbSwgZmxhZ3MsIGNiX2RhdGEpOworCQkJCXJldHZhbCA9IGRvX2Zvcl9lYWNoX2VudHJ5X2luX2RpcigKKwkJCQkJCXN1YmRpciwgMCwgZm4sIGNiX2RhdGEpOwogCQkJfSBlbHNlIHsKLQkJCQlyZXR2YWwgPSBkb19vbmVfcmVmKGJhc2UsIGZuLCB0cmltLCBmbGFncywgY2JfZGF0YSwgZSk7CisJCQkJcmV0dmFsID0gZm4oZSwgY2JfZGF0YSk7CiAJCQl9CiAJCX0KIAkJaWYgKHJldHZhbCkKIAkJCXJldHVybiByZXR2YWw7CiAJfQotCWlmIChpMSA8IGRpcjEtPm5yKQotCQlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmX2luX2RpcihkaXIxLCBpMSwKLQkJCQkJICAgICAgYmFzZSwgZm4sIHRyaW0sIGZsYWdzLCBjYl9kYXRhKTsKLQlpZiAoaTIgPCBkaXIyLT5ucikKLQkJcmV0dXJuIGRvX2Zvcl9lYWNoX3JlZl9pbl9kaXIoZGlyMiwgaTIsCi0JCQkJCSAgICAgIGJhc2UsIGZuLCB0cmltLCBmbGFncywgY2JfZGF0YSk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCisgKiBMb2FkIGFsbCBvZiB0aGUgcmVmcyBmcm9tIHRoZSBkaXIgaW50byBvdXIgaW4tbWVtb3J5IGNhY2hlLiBUaGUgaGFyZCB3b3JrCisgKiBvZiBsb2FkaW5nIGxvb3NlIHJlZnMgaXMgZG9uZSBieSBnZXRfcmVmX2RpcigpLCBzbyB3ZSBqdXN0IG5lZWQgdG8gcmVjdXJzZQorICogdGhyb3VnaCBhbGwgb2YgdGhlIHN1Yi1kaXJlY3Rvcmllcy4gV2UgZG8gbm90IGV2ZW4gbmVlZCB0byBjYXJlIGFib3V0CisgKiBzb3J0aW5nLCBhcyB0cmF2ZXJzYWwgb3JkZXIgZG9lcyBub3QgbWF0dGVyIHRvIHVzLgorICovCitzdGF0aWMgdm9pZCBwcmltZV9yZWZfZGlyKHN0cnVjdCByZWZfZGlyICpkaXIpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGRpci0+bnI7IGkrKykgeworCQlzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeSA9IGRpci0+ZW50cmllc1tpXTsKKwkJaWYgKGVudHJ5LT5mbGFnICYgUkVGX0RJUikKKwkJCXByaW1lX3JlZl9kaXIoZ2V0X3JlZl9kaXIoZW50cnkpKTsKKwl9Cit9CisvKgogICogUmV0dXJuIHRydWUgaWZmIHJlZm5hbWUxIGFuZCByZWZuYW1lMiBjb25mbGljdCB3aXRoIGVhY2ggb3RoZXIuCiAgKiBUd28gcmVmZXJlbmNlIG5hbWVzIGNvbmZsaWN0IGlmIG9uZSBvZiB0aGVtIGV4YWN0bHkgbWF0Y2hlcyB0aGUKICAqIGxlYWRpbmcgY29tcG9uZW50cyBvZiB0aGUgb3RoZXI7IGUuZy4sICJmb28vYmFyIiBjb25mbGljdHMgd2l0aApAQCAtNjYxLDE0ICs3ODUsMTMgQEAKIAljb25zdCBjaGFyICpjb25mbGljdGluZ19yZWZuYW1lOwogfTsKIAotc3RhdGljIGludCBuYW1lX2NvbmZsaWN0X2ZuKGNvbnN0IGNoYXIgKmV4aXN0aW5ncmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKLQkJCSAgICBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCitzdGF0aWMgaW50IG5hbWVfY29uZmxpY3RfZm4oc3RydWN0IHJlZl9lbnRyeSAqZW50cnksIHZvaWQgKmNiX2RhdGEpCiB7CiAJc3RydWN0IG5hbWVfY29uZmxpY3RfY2IgKmRhdGEgPSAoc3RydWN0IG5hbWVfY29uZmxpY3RfY2IgKiljYl9kYXRhOwotCWlmIChkYXRhLT5vbGRyZWZuYW1lICYmICFzdHJjbXAoZGF0YS0+b2xkcmVmbmFtZSwgZXhpc3RpbmdyZWZuYW1lKSkKKwlpZiAoZGF0YS0+b2xkcmVmbmFtZSAmJiAhc3RyY21wKGRhdGEtPm9sZHJlZm5hbWUsIGVudHJ5LT5uYW1lKSkKIAkJcmV0dXJuIDA7Ci0JaWYgKG5hbWVzX2NvbmZsaWN0KGRhdGEtPnJlZm5hbWUsIGV4aXN0aW5ncmVmbmFtZSkpIHsKLQkJZGF0YS0+Y29uZmxpY3RpbmdfcmVmbmFtZSA9IGV4aXN0aW5ncmVmbmFtZTsKKwlpZiAobmFtZXNfY29uZmxpY3QoZGF0YS0+cmVmbmFtZSwgZW50cnktPm5hbWUpKSB7CisJCWRhdGEtPmNvbmZsaWN0aW5nX3JlZm5hbWUgPSBlbnRyeS0+bmFtZTsKIAkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwpAQCAtNjc2LDcgKzc5OSw3IEBACiAKIC8qCiAgKiBSZXR1cm4gdHJ1ZSBpZmYgYSByZWZlcmVuY2UgbmFtZWQgcmVmbmFtZSBjb3VsZCBiZSBjcmVhdGVkIHdpdGhvdXQKLSAqIGNvbmZsaWN0aW5nIHdpdGggdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgcmVmZXJlbmNlIGluIGFycmF5LiAgSWYKKyAqIGNvbmZsaWN0aW5nIHdpdGggdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgcmVmZXJlbmNlIGluIGRpci4gIElmCiAgKiBvbGRyZWZuYW1lIGlzIG5vbi1OVUxMLCBpZ25vcmUgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIG9sZHJlZm5hbWUKICAqIChlLmcuLCBiZWNhdXNlIG9sZHJlZm5hbWUgaXMgc2NoZWR1bGVkIGZvciBkZWxldGlvbiBpbiB0aGUgc2FtZQogICogb3BlcmF0aW9uKS4KQEAgLTY5MCw5ICs4MTMsNyBAQAogCWRhdGEuY29uZmxpY3RpbmdfcmVmbmFtZSA9IE5VTEw7CiAKIAlzb3J0X3JlZl9kaXIoZGlyKTsKLQlpZiAoZG9fZm9yX2VhY2hfcmVmX2luX2RpcihkaXIsIDAsICIiLCBuYW1lX2NvbmZsaWN0X2ZuLAotCQkJCSAgIDAsIERPX0ZPUl9FQUNIX0lOQ0xVREVfQlJPS0VOLAotCQkJCSAgICZkYXRhKSkgeworCWlmIChkb19mb3JfZWFjaF9lbnRyeV9pbl9kaXIoZGlyLCAwLCBuYW1lX2NvbmZsaWN0X2ZuLCAmZGF0YSkpIHsKIAkJZXJyb3IoIiclcycgZXhpc3RzOyBjYW5ub3QgY3JlYXRlICclcyciLAogCQkgICAgICBkYXRhLmNvbmZsaWN0aW5nX3JlZm5hbWUsIHJlZm5hbWUpOwogCQlyZXR1cm4gMDsKQEAgLTcwMCw2ICs4MjEsMzAgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RydWN0IHBhY2tlZF9yZWZfY2FjaGUgeworCXN0cnVjdCByZWZfZW50cnkgKnJvb3Q7CisKKwkvKgorCSAqIENvdW50IG9mIHJlZmVyZW5jZXMgdG8gdGhlIGRhdGEgc3RydWN0dXJlIGluIHRoaXMgaW5zdGFuY2UsCisJICogaW5jbHVkaW5nIHRoZSBwb2ludGVyIGZyb20gcmVmX2NhY2hlOjpwYWNrZWQgaWYgYW55LiAgVGhlCisJICogZGF0YSB3aWxsIG5vdCBiZSBmcmVlZCBhcyBsb25nIGFzIHRoZSByZWZlcmVuY2UgY291bnQgaXMKKwkgKiBub256ZXJvLgorCSAqLworCXVuc2lnbmVkIGludCByZWZlcnJlcnM7CisKKwkvKgorCSAqIElmZiB0aGUgcGFja2VkLXJlZnMgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbnN0YW5jZSBpcworCSAqIGN1cnJlbnRseSBsb2NrZWQgZm9yIHdyaXRpbmcsIHRoaXMgcG9pbnRzIGF0IHRoZSBhc3NvY2lhdGVkCisJICogbG9jayAod2hpY2ggaXMgb3duZWQgYnkgc29tZWJvZHkgZWxzZSkuICBUaGUgcmVmZXJyZXIgY291bnQKKwkgKiBpcyBhbHNvIGluY3JlbWVudGVkIHdoZW4gdGhlIGZpbGUgaXMgbG9ja2VkIGFuZCBkZWNyZW1lbnRlZAorCSAqIHdoZW4gaXQgaXMgdW5sb2NrZWQuCisJICovCisJc3RydWN0IGxvY2tfZmlsZSAqbG9jazsKKworCS8qIFRoZSBtZXRhZGF0YSBmcm9tIHdoZW4gdGhpcyBwYWNrZWQtcmVmcyBjYWNoZSB3YXMgcmVhZCAqLworCXN0cnVjdCBzdGF0X3ZhbGlkaXR5IHZhbGlkaXR5OworfTsKKwogLyoKICAqIEZ1dHVyZTogbmVlZCB0byBiZSBpbiAic3RydWN0IHJlcG9zaXRvcnkiCiAgKiB3aGVuIGRvaW5nIGEgZnVsbCBsaWJpZmljYXRpb24uCkBAIC03MDcsMTYgKzg1Miw1MSBAQAogc3RhdGljIHN0cnVjdCByZWZfY2FjaGUgewogCXN0cnVjdCByZWZfY2FjaGUgKm5leHQ7CiAJc3RydWN0IHJlZl9lbnRyeSAqbG9vc2U7Ci0Jc3RydWN0IHJlZl9lbnRyeSAqcGFja2VkOwotCS8qIFRoZSBzdWJtb2R1bGUgbmFtZSwgb3IgIiIgZm9yIHRoZSBtYWluIHJlcG8uICovCi0JY2hhciBuYW1lW0ZMRVhfQVJSQVldOwotfSAqcmVmX2NhY2hlOworCXN0cnVjdCBwYWNrZWRfcmVmX2NhY2hlICpwYWNrZWQ7CisJLyoKKwkgKiBUaGUgc3VibW9kdWxlIG5hbWUsIG9yICIiIGZvciB0aGUgbWFpbiByZXBvLiAgV2UgYWxsb2NhdGUKKwkgKiBsZW5ndGggMSByYXRoZXIgdGhhbiBGTEVYX0FSUkFZIHNvIHRoYXQgdGhlIG1haW4gcmVmX2NhY2hlCisJICogaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LgorCSAqLworCWNoYXIgbmFtZVsxXTsKK30gcmVmX2NhY2hlLCAqc3VibW9kdWxlX3JlZl9jYWNoZXM7CisKKy8qIExvY2sgdXNlZCBmb3IgdGhlIG1haW4gcGFja2VkLXJlZnMgZmlsZTogKi8KK3N0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIHBhY2tsb2NrOworCisvKgorICogSW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgKnBhY2tlZF9yZWZzLgorICovCitzdGF0aWMgdm9pZCBhY3F1aXJlX3BhY2tlZF9yZWZfY2FjaGUoc3RydWN0IHBhY2tlZF9yZWZfY2FjaGUgKnBhY2tlZF9yZWZzKQoreworCXBhY2tlZF9yZWZzLT5yZWZlcnJlcnMrKzsKK30KKworLyoKKyAqIERlY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgb2YgKnBhY2tlZF9yZWZzLiAgSWYgaXQgZ29lcyB0byB6ZXJvLAorICogZnJlZSAqcGFja2VkX3JlZnMgYW5kIHJldHVybiB0cnVlOyBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLgorICovCitzdGF0aWMgaW50IHJlbGVhc2VfcGFja2VkX3JlZl9jYWNoZShzdHJ1Y3QgcGFja2VkX3JlZl9jYWNoZSAqcGFja2VkX3JlZnMpCit7CisJaWYgKCEtLXBhY2tlZF9yZWZzLT5yZWZlcnJlcnMpIHsKKwkJZnJlZV9yZWZfZW50cnkocGFja2VkX3JlZnMtPnJvb3QpOworCQlzdGF0X3ZhbGlkaXR5X2NsZWFyKCZwYWNrZWRfcmVmcy0+dmFsaWRpdHkpOworCQlmcmVlKHBhY2tlZF9yZWZzKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDA7CisJfQorfQogCiBzdGF0aWMgdm9pZCBjbGVhcl9wYWNrZWRfcmVmX2NhY2hlKHN0cnVjdCByZWZfY2FjaGUgKnJlZnMpCiB7CiAJaWYgKHJlZnMtPnBhY2tlZCkgewotCQlmcmVlX3JlZl9lbnRyeShyZWZzLT5wYWNrZWQpOworCQlzdHJ1Y3QgcGFja2VkX3JlZl9jYWNoZSAqcGFja2VkX3JlZnMgPSByZWZzLT5wYWNrZWQ7CisKKwkJaWYgKHBhY2tlZF9yZWZzLT5sb2NrKQorCQkJZGllKCJpbnRlcm5hbCBlcnJvcjogcGFja2VkLXJlZiBjYWNoZSBjbGVhcmVkIHdoaWxlIGxvY2tlZCIpOwogCQlyZWZzLT5wYWNrZWQgPSBOVUxMOworCQlyZWxlYXNlX3BhY2tlZF9yZWZfY2FjaGUocGFja2VkX3JlZnMpOwogCX0KIH0KIApAQCAtNzQ4LDE4ICs5MjgsMTggQEAKICAqLwogc3RhdGljIHN0cnVjdCByZWZfY2FjaGUgKmdldF9yZWZfY2FjaGUoY29uc3QgY2hhciAqc3VibW9kdWxlKQogewotCXN0cnVjdCByZWZfY2FjaGUgKnJlZnMgPSByZWZfY2FjaGU7Ci0JaWYgKCFzdWJtb2R1bGUpCi0JCXN1Ym1vZHVsZSA9ICIiOwotCXdoaWxlIChyZWZzKSB7CisJc3RydWN0IHJlZl9jYWNoZSAqcmVmczsKKworCWlmICghc3VibW9kdWxlIHx8ICEqc3VibW9kdWxlKQorCQlyZXR1cm4gJnJlZl9jYWNoZTsKKworCWZvciAocmVmcyA9IHN1Ym1vZHVsZV9yZWZfY2FjaGVzOyByZWZzOyByZWZzID0gcmVmcy0+bmV4dCkKIAkJaWYgKCFzdHJjbXAoc3VibW9kdWxlLCByZWZzLT5uYW1lKSkKIAkJCXJldHVybiByZWZzOwotCQlyZWZzID0gcmVmcy0+bmV4dDsKLQl9CiAKIAlyZWZzID0gY3JlYXRlX3JlZl9jYWNoZShzdWJtb2R1bGUpOwotCXJlZnMtPm5leHQgPSByZWZfY2FjaGU7Ci0JcmVmX2NhY2hlID0gcmVmczsKKwlyZWZzLT5uZXh0ID0gc3VibW9kdWxlX3JlZl9jYWNoZXM7CisJc3VibW9kdWxlX3JlZl9jYWNoZXMgPSByZWZzOwogCXJldHVybiByZWZzOwogfQogCkBAIC03NzAsNiArOTUwLDE2IEBACiAJY2xlYXJfbG9vc2VfcmVmX2NhY2hlKHJlZnMpOwogfQogCisvKiBUaGUgbGVuZ3RoIG9mIGEgcGVlbGVkIHJlZmVyZW5jZSBsaW5lIGluIHBhY2tlZC1yZWZzLCBpbmNsdWRpbmcgRU9MOiAqLworI2RlZmluZSBQRUVMRURfTElORV9MRU5HVEggNDIKKworLyoKKyAqIFRoZSBwYWNrZWQtcmVmcyBoZWFkZXIgbGluZSB0aGF0IHdlIHdyaXRlIG91dC4gIFBlcmhhcHMgb3RoZXIKKyAqIHRyYWl0cyB3aWxsIGJlIGFkZGVkIGxhdGVyLiAgVGhlIHRyYWlsaW5nIHNwYWNlIGlzIHJlcXVpcmVkLgorICovCitzdGF0aWMgY29uc3QgY2hhciBQQUNLRURfUkVGU19IRUFERVJbXSA9CisJIiMgcGFjay1yZWZzIHdpdGg6IHBlZWxlZCBmdWxseS1wZWVsZWQgXG4iOworCiAvKgogICogUGFyc2Ugb25lIGxpbmUgZnJvbSBhIHBhY2tlZC1yZWZzIGZpbGUuICBXcml0ZSB0aGUgU0hBMSB0byBzaGExLgogICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVmbmFtZSB3aXRoaW4gdGhlIGxpbmUgKG51bGwtdGVybWluYXRlZCksCkBAIC04NjIsOCArMTA1Miw4IEBACiAJCX0KIAkJaWYgKGxhc3QgJiYKIAkJICAgIHJlZmxpbmVbMF0gPT0gJ14nICYmCi0JCSAgICBzdHJsZW4ocmVmbGluZSkgPT0gNDIgJiYKLQkJICAgIHJlZmxpbmVbNDFdID09ICdcbicgJiYKKwkJICAgIHN0cmxlbihyZWZsaW5lKSA9PSBQRUVMRURfTElORV9MRU5HVEggJiYKKwkJICAgIHJlZmxpbmVbUEVFTEVEX0xJTkVfTEVOR1RIIC0gMV0gPT0gJ1xuJyAmJgogCQkgICAgIWdldF9zaGExX2hleChyZWZsaW5lICsgMSwgc2hhMSkpIHsKIAkJCWhhc2hjcHkobGFzdC0+dS52YWx1ZS5wZWVsZWQsIHNoYTEpOwogCQkJLyoKQEAgLTg3NiwzMCArMTA2Niw1OCBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCByZWZfZGlyICpnZXRfcGFja2VkX3JlZnMoc3RydWN0IHJlZl9jYWNoZSAqcmVmcykKKy8qCisgKiBHZXQgdGhlIHBhY2tlZF9yZWZfY2FjaGUgZm9yIHRoZSBzcGVjaWZpZWQgcmVmX2NhY2hlLCBjcmVhdGluZyBpdAorICogaWYgbmVjZXNzYXJ5LgorICovCitzdGF0aWMgc3RydWN0IHBhY2tlZF9yZWZfY2FjaGUgKmdldF9wYWNrZWRfcmVmX2NhY2hlKHN0cnVjdCByZWZfY2FjaGUgKnJlZnMpCiB7CisJY29uc3QgY2hhciAqcGFja2VkX3JlZnNfZmlsZTsKKworCWlmICgqcmVmcy0+bmFtZSkKKwkJcGFja2VkX3JlZnNfZmlsZSA9IGdpdF9wYXRoX3N1Ym1vZHVsZShyZWZzLT5uYW1lLCAicGFja2VkLXJlZnMiKTsKKwllbHNlCisJCXBhY2tlZF9yZWZzX2ZpbGUgPSBnaXRfcGF0aCgicGFja2VkLXJlZnMiKTsKKworCWlmIChyZWZzLT5wYWNrZWQgJiYKKwkgICAgIXN0YXRfdmFsaWRpdHlfY2hlY2soJnJlZnMtPnBhY2tlZC0+dmFsaWRpdHksIHBhY2tlZF9yZWZzX2ZpbGUpKQorCQljbGVhcl9wYWNrZWRfcmVmX2NhY2hlKHJlZnMpOworCiAJaWYgKCFyZWZzLT5wYWNrZWQpIHsKLQkJY29uc3QgY2hhciAqcGFja2VkX3JlZnNfZmlsZTsKIAkJRklMRSAqZjsKIAotCQlyZWZzLT5wYWNrZWQgPSBjcmVhdGVfZGlyX2VudHJ5KHJlZnMsICIiLCAwLCAwKTsKLQkJaWYgKCpyZWZzLT5uYW1lKQotCQkJcGFja2VkX3JlZnNfZmlsZSA9IGdpdF9wYXRoX3N1Ym1vZHVsZShyZWZzLT5uYW1lLCAicGFja2VkLXJlZnMiKTsKLQkJZWxzZQotCQkJcGFja2VkX3JlZnNfZmlsZSA9IGdpdF9wYXRoKCJwYWNrZWQtcmVmcyIpOworCQlyZWZzLT5wYWNrZWQgPSB4Y2FsbG9jKDEsIHNpemVvZigqcmVmcy0+cGFja2VkKSk7CisJCWFjcXVpcmVfcGFja2VkX3JlZl9jYWNoZShyZWZzLT5wYWNrZWQpOworCQlyZWZzLT5wYWNrZWQtPnJvb3QgPSBjcmVhdGVfZGlyX2VudHJ5KHJlZnMsICIiLCAwLCAwKTsKIAkJZiA9IGZvcGVuKHBhY2tlZF9yZWZzX2ZpbGUsICJyIik7CiAJCWlmIChmKSB7Ci0JCQlyZWFkX3BhY2tlZF9yZWZzKGYsIGdldF9yZWZfZGlyKHJlZnMtPnBhY2tlZCkpOworCQkJc3RhdF92YWxpZGl0eV91cGRhdGUoJnJlZnMtPnBhY2tlZC0+dmFsaWRpdHksIGZpbGVubyhmKSk7CisJCQlyZWFkX3BhY2tlZF9yZWZzKGYsIGdldF9yZWZfZGlyKHJlZnMtPnBhY2tlZC0+cm9vdCkpOwogCQkJZmNsb3NlKGYpOwogCQl9CiAJfQotCXJldHVybiBnZXRfcmVmX2RpcihyZWZzLT5wYWNrZWQpOworCXJldHVybiByZWZzLT5wYWNrZWQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmX2RpciAqZ2V0X3BhY2tlZF9yZWZfZGlyKHN0cnVjdCBwYWNrZWRfcmVmX2NhY2hlICpwYWNrZWRfcmVmX2NhY2hlKQoreworCXJldHVybiBnZXRfcmVmX2RpcihwYWNrZWRfcmVmX2NhY2hlLT5yb290KTsKK30KKworc3RhdGljIHN0cnVjdCByZWZfZGlyICpnZXRfcGFja2VkX3JlZnMoc3RydWN0IHJlZl9jYWNoZSAqcmVmcykKK3sKKwlyZXR1cm4gZ2V0X3BhY2tlZF9yZWZfZGlyKGdldF9wYWNrZWRfcmVmX2NhY2hlKHJlZnMpKTsKIH0KIAogdm9pZCBhZGRfcGFja2VkX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQogewotCWFkZF9yZWYoZ2V0X3BhY2tlZF9yZWZzKGdldF9yZWZfY2FjaGUoTlVMTCkpLAotCQkJY3JlYXRlX3JlZl9lbnRyeShyZWZuYW1lLCBzaGExLCBSRUZfSVNQQUNLRUQsIDEpKTsKKwlzdHJ1Y3QgcGFja2VkX3JlZl9jYWNoZSAqcGFja2VkX3JlZl9jYWNoZSA9CisJCWdldF9wYWNrZWRfcmVmX2NhY2hlKCZyZWZfY2FjaGUpOworCisJaWYgKCFwYWNrZWRfcmVmX2NhY2hlLT5sb2NrKQorCQlkaWUoImludGVybmFsIGVycm9yOiBwYWNrZWQgcmVmcyBub3QgbG9ja2VkIik7CisJYWRkX3JlZihnZXRfcGFja2VkX3JlZl9kaXIocGFja2VkX3JlZl9jYWNoZSksCisJCWNyZWF0ZV9yZWZfZW50cnkocmVmbmFtZSwgc2hhMSwgUkVGX0lTUEFDS0VELCAxKSk7CiB9CiAKIC8qCkBAIC0xMDY5LDE4ICsxMjg3LDQzIEBACiB9CiAKIC8qCi0gKiBUcnkgdG8gcmVhZCByZWYgZnJvbSB0aGUgcGFja2VkIHJlZmVyZW5jZXMuICBPbiBzdWNjZXNzLCBzZXQgc2hhMQotICogYW5kIHJldHVybiAwOyBvdGhlcndpc2UsIHJldHVybiAtMS4KKyAqIFJldHVybiB0aGUgcmVmX2VudHJ5IGZvciB0aGUgZ2l2ZW4gcmVmbmFtZSBmcm9tIHRoZSBwYWNrZWQKKyAqIHJlZmVyZW5jZXMuICBJZiBpdCBkb2VzIG5vdCBleGlzdCwgcmV0dXJuIE5VTEwuCiAgKi8KLXN0YXRpYyBpbnQgZ2V0X3BhY2tlZF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3N0YXRpYyBzdHJ1Y3QgcmVmX2VudHJ5ICpnZXRfcGFja2VkX3JlZihjb25zdCBjaGFyICpyZWZuYW1lKQogewotCXN0cnVjdCByZWZfZGlyICpwYWNrZWQgPSBnZXRfcGFja2VkX3JlZnMoZ2V0X3JlZl9jYWNoZShOVUxMKSk7Ci0Jc3RydWN0IHJlZl9lbnRyeSAqZW50cnkgPSBmaW5kX3JlZihwYWNrZWQsIHJlZm5hbWUpOworCXJldHVybiBmaW5kX3JlZihnZXRfcGFja2VkX3JlZnMoJnJlZl9jYWNoZSksIHJlZm5hbWUpOworfQorCisvKgorICogQSBsb29zZSByZWYgZmlsZSBkb2Vzbid0IGV4aXN0OyBjaGVjayBmb3IgYSBwYWNrZWQgcmVmLiAgVGhlCisgKiBvcHRpb25zIGFyZSBmb3J3YXJkZWQgZnJvbSByZXNvbHZlX3NhZmVfdW5zYWZlKCkuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpoYW5kbGVfbWlzc2luZ19sb29zZV9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkJICAgIHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJCSAgICBpbnQgcmVhZGluZywKKwkJCQkJICAgIGludCAqZmxhZykKK3sKKwlzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeTsKKworCS8qCisJICogVGhlIGxvb3NlIHJlZmVyZW5jZSBmaWxlIGRvZXMgbm90IGV4aXN0OyBjaGVjayBmb3IgYSBwYWNrZWQKKwkgKiByZWZlcmVuY2UuCisJICovCisJZW50cnkgPSBnZXRfcGFja2VkX3JlZihyZWZuYW1lKTsKIAlpZiAoZW50cnkpIHsKIAkJaGFzaGNweShzaGExLCBlbnRyeS0+dS52YWx1ZS5zaGExKTsKLQkJcmV0dXJuIDA7CisJCWlmIChmbGFnKQorCQkJKmZsYWcgfD0gUkVGX0lTUEFDS0VEOworCQlyZXR1cm4gcmVmbmFtZTsKIAl9Ci0JcmV0dXJuIC0xOworCS8qIFRoZSByZWZlcmVuY2UgaXMgbm90IGEgcGFja2VkIHJlZmVyZW5jZSwgZWl0aGVyLiAqLworCWlmIChyZWFkaW5nKSB7CisJCXJldHVybiBOVUxMOworCX0gZWxzZSB7CisJCWhhc2hjbHIoc2hhMSk7CisJCXJldHVybiByZWZuYW1lOworCX0KIH0KIAogY29uc3QgY2hhciAqcmVzb2x2ZV9yZWZfdW5zYWZlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCByZWFkaW5nLCBpbnQgKmZsYWcpCkBAIC0xMTA3LDMyICsxMzUwLDM0IEBACiAKIAkJZ2l0X3NucGF0aChwYXRoLCBzaXplb2YocGF0aCksICIlcyIsIHJlZm5hbWUpOwogCisJCS8qCisJCSAqIFdlIG1pZ2h0IGhhdmUgdG8gbG9vcCBiYWNrIGhlcmUgdG8gYXZvaWQgYSByYWNlCisJCSAqIGNvbmRpdGlvbjogZmlyc3Qgd2UgbHN0YXQoKSB0aGUgZmlsZSwgdGhlbiB3ZSB0cnkKKwkJICogdG8gcmVhZCBpdCBhcyBhIGxpbmsgb3IgYXMgYSBmaWxlLiAgQnV0IGlmIHNvbWVib2R5CisJCSAqIGNoYW5nZXMgdGhlIHR5cGUgb2YgdGhlIGZpbGUgKGZpbGUgPC0+IGRpcmVjdG9yeQorCQkgKiA8LT4gc3ltbGluaykgYmV0d2VlbiB0aGUgbHN0YXQoKSBhbmQgcmVhZGluZywgdGhlbgorCQkgKiB3ZSBkb24ndCB3YW50IHRvIHJlcG9ydCB0aGF0IGFzIGFuIGVycm9yIGJ1dCByYXRoZXIKKwkJICogdHJ5IGFnYWluIHN0YXJ0aW5nIHdpdGggdGhlIGxzdGF0KCkuCisJCSAqLworCXN0YXRfcmVmOgogCQlpZiAobHN0YXQocGF0aCwgJnN0KSA8IDApIHsKLQkJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJCXJldHVybiBoYW5kbGVfbWlzc2luZ19sb29zZV9yZWYocmVmbmFtZSwgc2hhMSwKKwkJCQkJCQkJcmVhZGluZywgZmxhZyk7CisJCQllbHNlCiAJCQkJcmV0dXJuIE5VTEw7Ci0JCQkvKgotCQkJICogVGhlIGxvb3NlIHJlZmVyZW5jZSBmaWxlIGRvZXMgbm90IGV4aXN0OwotCQkJICogY2hlY2sgZm9yIGEgcGFja2VkIHJlZmVyZW5jZS4KLQkJCSAqLwotCQkJaWYgKCFnZXRfcGFja2VkX3JlZihyZWZuYW1lLCBzaGExKSkgewotCQkJCWlmIChmbGFnKQotCQkJCQkqZmxhZyB8PSBSRUZfSVNQQUNLRUQ7Ci0JCQkJcmV0dXJuIHJlZm5hbWU7Ci0JCQl9Ci0JCQkvKiBUaGUgcmVmZXJlbmNlIGlzIG5vdCBhIHBhY2tlZCByZWZlcmVuY2UsIGVpdGhlci4gKi8KLQkJCWlmIChyZWFkaW5nKSB7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl9IGVsc2UgewotCQkJCWhhc2hjbHIoc2hhMSk7Ci0JCQkJcmV0dXJuIHJlZm5hbWU7Ci0JCQl9CiAJCX0KIAogCQkvKiBGb2xsb3cgIm5vcm1hbGl6ZWQiIC0gaWUgInJlZnMvLi4iIHN5bWxpbmtzIGJ5IGhhbmQgKi8KIAkJaWYgKFNfSVNMTksoc3Quc3RfbW9kZSkpIHsKIAkJCWxlbiA9IHJlYWRsaW5rKHBhdGgsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciktMSk7Ci0JCQlpZiAobGVuIDwgMCkKLQkJCQlyZXR1cm4gTlVMTDsKKwkJCWlmIChsZW4gPCAwKSB7CisJCQkJaWYgKGVycm5vID09IEVOT0VOVCB8fCBlcnJubyA9PSBFSU5WQUwpCisJCQkJCS8qIGluY29uc2lzdGVudCB3aXRoIGxzdGF0OyByZXRyeSAqLworCQkJCQlnb3RvIHN0YXRfcmVmOworCQkJCWVsc2UKKwkJCQkJcmV0dXJuIE5VTEw7CisJCQl9CiAJCQlidWZmZXJbbGVuXSA9IDA7CiAJCQlpZiAoIXByZWZpeGNtcChidWZmZXIsICJyZWZzLyIpICYmCiAJCQkJCSFjaGVja19yZWZuYW1lX2Zvcm1hdChidWZmZXIsIDApKSB7CkBAIC0xMTU1LDggKzE0MDAsMTMgQEAKIAkJICogYSByZWYKIAkJICovCiAJCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7Ci0JCWlmIChmZCA8IDApCi0JCQlyZXR1cm4gTlVMTDsKKwkJaWYgKGZkIDwgMCkgeworCQkJaWYgKGVycm5vID09IEVOT0VOVCkKKwkJCQkvKiBpbmNvbnNpc3RlbnQgd2l0aCBsc3RhdDsgcmV0cnkgKi8KKwkJCQlnb3RvIHN0YXRfcmVmOworCQkJZWxzZQorCQkJCXJldHVybiBOVUxMOworCQl9CiAJCWxlbiA9IHJlYWRfaW5fZnVsbChmZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKS0xKTsKIAkJY2xvc2UoZmQpOwogCQlpZiAobGVuIDwgMCkKQEAgLTExNjgsOCArMTQxOCwxOSBAQAogCQkvKgogCQkgKiBJcyBpdCBhIHN5bWJvbGljIHJlZj8KIAkJICovCi0JCWlmIChwcmVmaXhjbXAoYnVmZmVyLCAicmVmOiIpKQotCQkJYnJlYWs7CisJCWlmIChwcmVmaXhjbXAoYnVmZmVyLCAicmVmOiIpKSB7CisJCQkvKgorCQkJICogUGxlYXNlIG5vdGUgdGhhdCBGRVRDSF9IRUFEIGhhcyBhIHNlY29uZAorCQkJICogbGluZSBjb250YWluaW5nIG90aGVyIGRhdGEuCisJCQkgKi8KKwkJCWlmIChnZXRfc2hhMV9oZXgoYnVmZmVyLCBzaGExKSB8fAorCQkJICAgIChidWZmZXJbNDBdICE9ICdcMCcgJiYgIWlzc3BhY2UoYnVmZmVyWzQwXSkpKSB7CisJCQkJaWYgKGZsYWcpCisJCQkJCSpmbGFnIHw9IFJFRl9JU0JST0tFTjsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCXJldHVybiByZWZuYW1lOworCQl9CiAJCWlmIChmbGFnKQogCQkJKmZsYWcgfD0gUkVGX0lTU1lNUkVGOwogCQlidWYgPSBidWZmZXIgKyA0OwpAQCAtMTE4MiwxMyArMTQ0Myw2IEBACiAJCX0KIAkJcmVmbmFtZSA9IHN0cmNweShyZWZuYW1lX2J1ZmZlciwgYnVmKTsKIAl9Ci0JLyogUGxlYXNlIG5vdGUgdGhhdCBGRVRDSF9IRUFEIGhhcyBhIHNlY29uZCBsaW5lIGNvbnRhaW5pbmcgb3RoZXIgZGF0YS4gKi8KLQlpZiAoZ2V0X3NoYTFfaGV4KGJ1ZmZlciwgc2hhMSkgfHwgKGJ1ZmZlcls0MF0gIT0gJ1wwJyAmJiAhaXNzcGFjZShidWZmZXJbNDBdKSkpIHsKLQkJaWYgKGZsYWcpCi0JCQkqZmxhZyB8PSBSRUZfSVNCUk9LRU47Ci0JCXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gcmVmbmFtZTsKIH0KIAogY2hhciAqcmVzb2x2ZV9yZWZkdXAoY29uc3QgY2hhciAqcmVmLCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgcmVhZGluZywgaW50ICpmbGFnKQpAQCAtMTIzMSw1NCArMTQ4NSwxMzAgQEAKIAlyZXR1cm4gZmlsdGVyLT5mbihyZWZuYW1lLCBzaGExLCBmbGFncywgZmlsdGVyLT5jYl9kYXRhKTsKIH0KIAorZW51bSBwZWVsX3N0YXR1cyB7CisJLyogb2JqZWN0IHdhcyBwZWVsZWQgc3VjY2Vzc2Z1bGx5OiAqLworCVBFRUxfUEVFTEVEID0gMCwKKworCS8qCisJICogb2JqZWN0IGNhbm5vdCBiZSBwZWVsZWQgYmVjYXVzZSB0aGUgbmFtZWQgb2JqZWN0IChvciBhbgorCSAqIG9iamVjdCByZWZlcnJlZCB0byBieSBhIHRhZyBpbiB0aGUgcGVlbCBjaGFpbiksIGRvZXMgbm90CisJICogZXhpc3QuCisJICovCisJUEVFTF9JTlZBTElEID0gLTEsCisKKwkvKiBvYmplY3QgY2Fubm90IGJlIHBlZWxlZCBiZWNhdXNlIGl0IGlzIG5vdCBhIHRhZzogKi8KKwlQRUVMX05PTl9UQUcgPSAtMiwKKworCS8qIHJlZl9lbnRyeSBjb250YWlucyBubyBwZWVsZWQgdmFsdWUgYmVjYXVzZSBpdCBpcyBhIHN5bXJlZjogKi8KKwlQRUVMX0lTX1NZTVJFRiA9IC0zLAorCisJLyoKKwkgKiByZWZfZW50cnkgY2Fubm90IGJlIHBlZWxlZCBiZWNhdXNlIGl0IGlzIGJyb2tlbiAoaS5lLiwgdGhlCisJICogc3ltYm9saWMgcmVmZXJlbmNlIGNhbm5vdCBldmVuIGJlIHJlc29sdmVkIHRvIGFuIG9iamVjdAorCSAqIG5hbWUpOgorCSAqLworCVBFRUxfQlJPS0VOID0gLTQKK307CisKKy8qCisgKiBQZWVsIHRoZSBuYW1lZCBvYmplY3Q7IGkuZS4sIGlmIHRoZSBvYmplY3QgaXMgYSB0YWcsIHJlc29sdmUgdGhlCisgKiB0YWcgcmVjdXJzaXZlbHkgdW50aWwgYSBub24tdGFnIGlzIGZvdW5kLiAgSWYgc3VjY2Vzc2Z1bCwgc3RvcmUgdGhlCisgKiByZXN1bHQgdG8gc2hhMSBhbmQgcmV0dXJuIFBFRUxfUEVFTEVELiAgSWYgdGhlIG9iamVjdCBpcyBub3QgYSB0YWcKKyAqIG9yIGlzIG5vdCB2YWxpZCwgcmV0dXJuIFBFRUxfTk9OX1RBRyBvciBQRUVMX0lOVkFMSUQsIHJlc3BlY3RpdmVseSwKKyAqIGFuZCBsZWF2ZSBzaGExIHVuY2hhbmdlZC4KKyAqLworc3RhdGljIGVudW0gcGVlbF9zdGF0dXMgcGVlbF9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvID0gbG9va3VwX3Vua25vd25fb2JqZWN0KG5hbWUpOworCisJaWYgKG8tPnR5cGUgPT0gT0JKX05PTkUpIHsKKwkJaW50IHR5cGUgPSBzaGExX29iamVjdF9pbmZvKG5hbWUsIE5VTEwpOworCQlpZiAodHlwZSA8IDApCisJCQlyZXR1cm4gUEVFTF9JTlZBTElEOworCQlvLT50eXBlID0gdHlwZTsKKwl9CisKKwlpZiAoby0+dHlwZSAhPSBPQkpfVEFHKQorCQlyZXR1cm4gUEVFTF9OT05fVEFHOworCisJbyA9IGRlcmVmX3RhZ19ub3ZlcmlmeShvKTsKKwlpZiAoIW8pCisJCXJldHVybiBQRUVMX0lOVkFMSUQ7CisKKwloYXNoY3B5KHNoYTEsIG8tPnNoYTEpOworCXJldHVybiBQRUVMX1BFRUxFRDsKK30KKworLyoKKyAqIFBlZWwgdGhlIGVudHJ5IChpZiBwb3NzaWJsZSkgYW5kIHJldHVybiBpdHMgbmV3IHBlZWxfc3RhdHVzLiAgSWYKKyAqIHJlcGVlbCBpcyB0cnVlLCByZS1wZWVsIHRoZSBlbnRyeSBldmVuIGlmIHRoZXJlIGlzIGFuIG9sZCBwZWVsZWQKKyAqIHZhbHVlIHRoYXQgaXMgYWxyZWFkeSBzdG9yZWQgaW4gaXQuCisgKgorICogSXQgaXMgT0sgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggYSBwYWNrZWQgcmVmZXJlbmNlIGVudHJ5IHRoYXQKKyAqIG1pZ2h0IGJlIHN0YWxlIGFuZCBtaWdodCBldmVuIHJlZmVyIHRvIGFuIG9iamVjdCB0aGF0IGhhcyBzaW5jZQorICogYmVlbiBnYXJiYWdlLWNvbGxlY3RlZC4gIEluIHN1Y2ggYSBjYXNlLCBpZiB0aGUgZW50cnkgaGFzCisgKiBSRUZfS05PV1NfUEVFTEVEIHRoZW4gbGVhdmUgdGhlIHN0YXR1cyB1bmNoYW5nZWQgYW5kIHJldHVybgorICogUEVFTF9QRUVMRUQgb3IgUEVFTF9OT05fVEFHOyBvdGhlcndpc2UsIHJldHVybiBQRUVMX0lOVkFMSUQuCisgKi8KK3N0YXRpYyBlbnVtIHBlZWxfc3RhdHVzIHBlZWxfZW50cnkoc3RydWN0IHJlZl9lbnRyeSAqZW50cnksIGludCByZXBlZWwpCit7CisJZW51bSBwZWVsX3N0YXR1cyBzdGF0dXM7CisKKwlpZiAoZW50cnktPmZsYWcgJiBSRUZfS05PV1NfUEVFTEVEKSB7CisJCWlmIChyZXBlZWwpIHsKKwkJCWVudHJ5LT5mbGFnICY9IH5SRUZfS05PV1NfUEVFTEVEOworCQkJaGFzaGNscihlbnRyeS0+dS52YWx1ZS5wZWVsZWQpOworCQl9IGVsc2UgeworCQkJcmV0dXJuIGlzX251bGxfc2hhMShlbnRyeS0+dS52YWx1ZS5wZWVsZWQpID8KKwkJCQlQRUVMX05PTl9UQUcgOiBQRUVMX1BFRUxFRDsKKwkJfQorCX0KKwlpZiAoZW50cnktPmZsYWcgJiBSRUZfSVNCUk9LRU4pCisJCXJldHVybiBQRUVMX0JST0tFTjsKKwlpZiAoZW50cnktPmZsYWcgJiBSRUZfSVNTWU1SRUYpCisJCXJldHVybiBQRUVMX0lTX1NZTVJFRjsKKworCXN0YXR1cyA9IHBlZWxfb2JqZWN0KGVudHJ5LT51LnZhbHVlLnNoYTEsIGVudHJ5LT51LnZhbHVlLnBlZWxlZCk7CisJaWYgKHN0YXR1cyA9PSBQRUVMX1BFRUxFRCB8fCBzdGF0dXMgPT0gUEVFTF9OT05fVEFHKQorCQllbnRyeS0+ZmxhZyB8PSBSRUZfS05PV1NfUEVFTEVEOworCXJldHVybiBzdGF0dXM7Cit9CisKIGludCBwZWVsX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCB1bnNpZ25lZCBjaGFyICpzaGExKQogewogCWludCBmbGFnOwogCXVuc2lnbmVkIGNoYXIgYmFzZVsyMF07Ci0Jc3RydWN0IG9iamVjdCAqbzsKIAogCWlmIChjdXJyZW50X3JlZiAmJiAoY3VycmVudF9yZWYtPm5hbWUgPT0gcmVmbmFtZQotCQl8fCAhc3RyY21wKGN1cnJlbnRfcmVmLT5uYW1lLCByZWZuYW1lKSkpIHsKLQkJaWYgKGN1cnJlbnRfcmVmLT5mbGFnICYgUkVGX0tOT1dTX1BFRUxFRCkgewotCQkJaWYgKGlzX251bGxfc2hhMShjdXJyZW50X3JlZi0+dS52YWx1ZS5wZWVsZWQpKQotCQkJICAgIHJldHVybiAtMTsKLQkJCWhhc2hjcHkoc2hhMSwgY3VycmVudF9yZWYtPnUudmFsdWUucGVlbGVkKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWhhc2hjcHkoYmFzZSwgY3VycmVudF9yZWYtPnUudmFsdWUuc2hhMSk7Ci0JCWdvdG8gZmFsbGJhY2s7CisJCQkgICAgfHwgIXN0cmNtcChjdXJyZW50X3JlZi0+bmFtZSwgcmVmbmFtZSkpKSB7CisJCWlmIChwZWVsX2VudHJ5KGN1cnJlbnRfcmVmLCAwKSkKKwkJCXJldHVybiAtMTsKKwkJaGFzaGNweShzaGExLCBjdXJyZW50X3JlZi0+dS52YWx1ZS5wZWVsZWQpOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAocmVhZF9yZWZfZnVsbChyZWZuYW1lLCBiYXNlLCAxLCAmZmxhZykpCiAJCXJldHVybiAtMTsKIAotCWlmICgoZmxhZyAmIFJFRl9JU1BBQ0tFRCkpIHsKLQkJc3RydWN0IHJlZl9kaXIgKmRpciA9IGdldF9wYWNrZWRfcmVmcyhnZXRfcmVmX2NhY2hlKE5VTEwpKTsKLQkJc3RydWN0IHJlZl9lbnRyeSAqciA9IGZpbmRfcmVmKGRpciwgcmVmbmFtZSk7Ci0KLQkJaWYgKHIgIT0gTlVMTCAmJiByLT5mbGFnICYgUkVGX0tOT1dTX1BFRUxFRCkgeworCS8qCisJICogSWYgdGhlIHJlZmVyZW5jZSBpcyBwYWNrZWQsIHJlYWQgaXRzIHJlZl9lbnRyeSBmcm9tIHRoZQorCSAqIGNhY2hlIGluIHRoZSBob3BlIHRoYXQgd2UgYWxyZWFkeSBrbm93IGl0cyBwZWVsZWQgdmFsdWUuCisJICogV2Ugb25seSB0cnkgdGhpcyBvcHRpbWl6YXRpb24gb24gcGFja2VkIHJlZmVyZW5jZXMgYmVjYXVzZQorCSAqIChhKSBmb3JjaW5nIHRoZSBmaWxsaW5nIG9mIHRoZSBsb29zZSByZWZlcmVuY2UgY2FjaGUgY291bGQKKwkgKiBiZSBleHBlbnNpdmUgYW5kIChiKSBsb29zZSByZWZlcmVuY2VzIGFueXdheSB1c3VhbGx5IGRvIG5vdAorCSAqIGhhdmUgUkVGX0tOT1dTX1BFRUxFRC4KKwkgKi8KKwlpZiAoZmxhZyAmIFJFRl9JU1BBQ0tFRCkgeworCQlzdHJ1Y3QgcmVmX2VudHJ5ICpyID0gZ2V0X3BhY2tlZF9yZWYocmVmbmFtZSk7CisJCWlmIChyKSB7CisJCQlpZiAocGVlbF9lbnRyeShyLCAwKSkKKwkJCQlyZXR1cm4gLTE7CiAJCQloYXNoY3B5KHNoYTEsIHItPnUudmFsdWUucGVlbGVkKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQogCi1mYWxsYmFjazoKLQlvID0gbG9va3VwX3Vua25vd25fb2JqZWN0KGJhc2UpOwotCWlmIChvLT50eXBlID09IE9CSl9OT05FKSB7Ci0JCWludCB0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhiYXNlLCBOVUxMKTsKLQkJaWYgKHR5cGUgPCAwKQotCQkJcmV0dXJuIC0xOwotCQlvLT50eXBlID0gdHlwZTsKLQl9Ci0KLQlpZiAoby0+dHlwZSA9PSBPQkpfVEFHKSB7Ci0JCW8gPSBkZXJlZl90YWdfbm92ZXJpZnkobyk7Ci0JCWlmIChvKSB7Ci0JCQloYXNoY3B5KHNoYTEsIG8tPnNoYTEpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0JcmV0dXJuIC0xOworCXJldHVybiBwZWVsX29iamVjdChiYXNlLCBzaGExKTsKIH0KIAogc3RydWN0IHdhcm5faWZfZGFuZ2xpbmdfZGF0YSB7CkBAIC0xMzE2LDQwICsxNjQ2LDg0IEBACiAJZm9yX2VhY2hfcmF3cmVmKHdhcm5faWZfZGFuZ2xpbmdfc3ltcmVmLCAmZGF0YSk7CiB9CiAKLXN0YXRpYyBpbnQgZG9fZm9yX2VhY2hfcmVmKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwgY29uc3QgY2hhciAqYmFzZSwgZWFjaF9yZWZfZm4gZm4sCi0JCQkgICBpbnQgdHJpbSwgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQorLyoKKyAqIENhbGwgZm4gZm9yIGVhY2ggcmVmZXJlbmNlIGluIHRoZSBzcGVjaWZpZWQgcmVmX2NhY2hlLCBvbWl0dGluZworICogcmVmZXJlbmNlcyBub3QgaW4gdGhlIGNvbnRhaW5pbmdfZGlyIG9mIGJhc2UuICBmbiBpcyBjYWxsZWQgZm9yIGFsbAorICogcmVmZXJlbmNlcywgaW5jbHVkaW5nIGJyb2tlbiBvbmVzLiAgSWYgZm4gZXZlciByZXR1cm5zIGEgbm9uLXplcm8KKyAqIHZhbHVlLCBzdG9wIHRoZSBpdGVyYXRpb24gYW5kIHJldHVybiB0aGF0IHZhbHVlOyBvdGhlcndpc2UsIHJldHVybgorICogMC4KKyAqLworc3RhdGljIGludCBkb19mb3JfZWFjaF9lbnRyeShzdHJ1Y3QgcmVmX2NhY2hlICpyZWZzLCBjb25zdCBjaGFyICpiYXNlLAorCQkJICAgICBlYWNoX3JlZl9lbnRyeV9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKIHsKLQlzdHJ1Y3QgcmVmX2NhY2hlICpyZWZzID0gZ2V0X3JlZl9jYWNoZShzdWJtb2R1bGUpOwotCXN0cnVjdCByZWZfZGlyICpwYWNrZWRfZGlyID0gZ2V0X3BhY2tlZF9yZWZzKHJlZnMpOwotCXN0cnVjdCByZWZfZGlyICpsb29zZV9kaXIgPSBnZXRfbG9vc2VfcmVmcyhyZWZzKTsKKwlzdHJ1Y3QgcGFja2VkX3JlZl9jYWNoZSAqcGFja2VkX3JlZl9jYWNoZTsKKwlzdHJ1Y3QgcmVmX2RpciAqbG9vc2VfZGlyOworCXN0cnVjdCByZWZfZGlyICpwYWNrZWRfZGlyOwogCWludCByZXR2YWwgPSAwOwogCisJLyoKKwkgKiBXZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IGFsbCBsb29zZSByZWZzIGFyZSByZWFkIGJlZm9yZSBhY2Nlc3NpbmcgdGhlCisJICogcGFja2VkLXJlZnMgZmlsZTsgdGhpcyBhdm9pZHMgYSByYWNlIGNvbmRpdGlvbiBpbiB3aGljaCBsb29zZSByZWZzCisJICogYXJlIG1pZ3JhdGVkIHRvIHRoZSBwYWNrZWQtcmVmcyBmaWxlIGJ5IGEgc2ltdWx0YW5lb3VzIHByb2Nlc3MsIGJ1dAorCSAqIG91ciBpbi1tZW1vcnkgdmlldyBpcyBmcm9tIGJlZm9yZSB0aGUgbWlncmF0aW9uLiBnZXRfcGFja2VkX3JlZl9jYWNoZSgpCisJICogdGFrZXMgY2FyZSBvZiBtYWtpbmcgc3VyZSBvdXIgdmlldyBpcyB1cCB0byBkYXRlIHdpdGggd2hhdCBpcyBvbgorCSAqIGRpc2suCisJICovCisJbG9vc2VfZGlyID0gZ2V0X2xvb3NlX3JlZnMocmVmcyk7CisJaWYgKGJhc2UgJiYgKmJhc2UpIHsKKwkJbG9vc2VfZGlyID0gZmluZF9jb250YWluaW5nX2Rpcihsb29zZV9kaXIsIGJhc2UsIDApOworCX0KKwlpZiAobG9vc2VfZGlyKQorCQlwcmltZV9yZWZfZGlyKGxvb3NlX2Rpcik7CisKKwlwYWNrZWRfcmVmX2NhY2hlID0gZ2V0X3BhY2tlZF9yZWZfY2FjaGUocmVmcyk7CisJYWNxdWlyZV9wYWNrZWRfcmVmX2NhY2hlKHBhY2tlZF9yZWZfY2FjaGUpOworCXBhY2tlZF9kaXIgPSBnZXRfcGFja2VkX3JlZl9kaXIocGFja2VkX3JlZl9jYWNoZSk7CiAJaWYgKGJhc2UgJiYgKmJhc2UpIHsKIAkJcGFja2VkX2RpciA9IGZpbmRfY29udGFpbmluZ19kaXIocGFja2VkX2RpciwgYmFzZSwgMCk7Ci0JCWxvb3NlX2RpciA9IGZpbmRfY29udGFpbmluZ19kaXIobG9vc2VfZGlyLCBiYXNlLCAwKTsKIAl9CiAKIAlpZiAocGFja2VkX2RpciAmJiBsb29zZV9kaXIpIHsKIAkJc29ydF9yZWZfZGlyKHBhY2tlZF9kaXIpOwogCQlzb3J0X3JlZl9kaXIobG9vc2VfZGlyKTsKLQkJcmV0dmFsID0gZG9fZm9yX2VhY2hfcmVmX2luX2RpcnMoCi0JCQkJcGFja2VkX2RpciwgbG9vc2VfZGlyLAotCQkJCWJhc2UsIGZuLCB0cmltLCBmbGFncywgY2JfZGF0YSk7CisJCXJldHZhbCA9IGRvX2Zvcl9lYWNoX2VudHJ5X2luX2RpcnMoCisJCQkJcGFja2VkX2RpciwgbG9vc2VfZGlyLCBmbiwgY2JfZGF0YSk7CiAJfSBlbHNlIGlmIChwYWNrZWRfZGlyKSB7CiAJCXNvcnRfcmVmX2RpcihwYWNrZWRfZGlyKTsKLQkJcmV0dmFsID0gZG9fZm9yX2VhY2hfcmVmX2luX2RpcigKLQkJCQlwYWNrZWRfZGlyLCAwLAotCQkJCWJhc2UsIGZuLCB0cmltLCBmbGFncywgY2JfZGF0YSk7CisJCXJldHZhbCA9IGRvX2Zvcl9lYWNoX2VudHJ5X2luX2RpcigKKwkJCQlwYWNrZWRfZGlyLCAwLCBmbiwgY2JfZGF0YSk7CiAJfSBlbHNlIGlmIChsb29zZV9kaXIpIHsKIAkJc29ydF9yZWZfZGlyKGxvb3NlX2Rpcik7Ci0JCXJldHZhbCA9IGRvX2Zvcl9lYWNoX3JlZl9pbl9kaXIoCi0JCQkJbG9vc2VfZGlyLCAwLAotCQkJCWJhc2UsIGZuLCB0cmltLCBmbGFncywgY2JfZGF0YSk7CisJCXJldHZhbCA9IGRvX2Zvcl9lYWNoX2VudHJ5X2luX2RpcigKKwkJCQlsb29zZV9kaXIsIDAsIGZuLCBjYl9kYXRhKTsKIAl9CiAKKwlyZWxlYXNlX3BhY2tlZF9yZWZfY2FjaGUocGFja2VkX3JlZl9jYWNoZSk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAorLyoKKyAqIENhbGwgZm4gZm9yIGVhY2ggcmVmZXJlbmNlIGluIHRoZSBzcGVjaWZpZWQgcmVmX2NhY2hlIGZvciB3aGljaCB0aGUKKyAqIHJlZm5hbWUgYmVnaW5zIHdpdGggYmFzZS4gIElmIHRyaW0gaXMgbm9uLXplcm8sIHRoZW4gdHJpbSB0aGF0IG1hbnkKKyAqIGNoYXJhY3RlcnMgb2ZmIHRoZSBiZWdpbm5pbmcgb2YgZWFjaCByZWZuYW1lIGJlZm9yZSBwYXNzaW5nIHRoZQorICogcmVmbmFtZSB0byBmbi4gIGZsYWdzIGNhbiBiZSBET19GT1JfRUFDSF9JTkNMVURFX0JST0tFTiB0byBpbmNsdWRlCisgKiBicm9rZW4gcmVmZXJlbmNlcyBpbiB0aGUgaXRlcmF0aW9uLiAgSWYgZm4gZXZlciByZXR1cm5zIGEgbm9uLXplcm8KKyAqIHZhbHVlLCBzdG9wIHRoZSBpdGVyYXRpb24gYW5kIHJldHVybiB0aGF0IHZhbHVlOyBvdGhlcndpc2UsIHJldHVybgorICogMC4KKyAqLworc3RhdGljIGludCBkb19mb3JfZWFjaF9yZWYoc3RydWN0IHJlZl9jYWNoZSAqcmVmcywgY29uc3QgY2hhciAqYmFzZSwKKwkJCSAgIGVhY2hfcmVmX2ZuIGZuLCBpbnQgdHJpbSwgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCByZWZfZW50cnlfY2IgZGF0YTsKKwlkYXRhLmJhc2UgPSBiYXNlOworCWRhdGEudHJpbSA9IHRyaW07CisJZGF0YS5mbGFncyA9IGZsYWdzOworCWRhdGEuZm4gPSBmbjsKKwlkYXRhLmNiX2RhdGEgPSBjYl9kYXRhOworCisJcmV0dXJuIGRvX2Zvcl9lYWNoX2VudHJ5KHJlZnMsIGJhc2UsIGRvX29uZV9yZWYsICZkYXRhKTsKK30KKwogc3RhdGljIGludCBkb19oZWFkX3JlZihjb25zdCBjaGFyICpzdWJtb2R1bGUsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQogewogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CkBAIC0xMzgwLDIzICsxNzU0LDIzIEBACiAKIGludCBmb3JfZWFjaF9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCiB7Ci0JcmV0dXJuIGRvX2Zvcl9lYWNoX3JlZihOVUxMLCAiIiwgZm4sIDAsIDAsIGNiX2RhdGEpOworCXJldHVybiBkb19mb3JfZWFjaF9yZWYoJnJlZl9jYWNoZSwgIiIsIGZuLCAwLCAwLCBjYl9kYXRhKTsKIH0KIAogaW50IGZvcl9lYWNoX3JlZl9zdWJtb2R1bGUoY29uc3QgY2hhciAqc3VibW9kdWxlLCBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKIHsKLQlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmKHN1Ym1vZHVsZSwgIiIsIGZuLCAwLCAwLCBjYl9kYXRhKTsKKwlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmKGdldF9yZWZfY2FjaGUoc3VibW9kdWxlKSwgIiIsIGZuLCAwLCAwLCBjYl9kYXRhKTsKIH0KIAogaW50IGZvcl9lYWNoX3JlZl9pbihjb25zdCBjaGFyICpwcmVmaXgsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQogewotCXJldHVybiBkb19mb3JfZWFjaF9yZWYoTlVMTCwgcHJlZml4LCBmbiwgc3RybGVuKHByZWZpeCksIDAsIGNiX2RhdGEpOworCXJldHVybiBkb19mb3JfZWFjaF9yZWYoJnJlZl9jYWNoZSwgcHJlZml4LCBmbiwgc3RybGVuKHByZWZpeCksIDAsIGNiX2RhdGEpOwogfQogCiBpbnQgZm9yX2VhY2hfcmVmX2luX3N1Ym1vZHVsZShjb25zdCBjaGFyICpzdWJtb2R1bGUsIGNvbnN0IGNoYXIgKnByZWZpeCwKIAkJZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCiB7Ci0JcmV0dXJuIGRvX2Zvcl9lYWNoX3JlZihzdWJtb2R1bGUsIHByZWZpeCwgZm4sIHN0cmxlbihwcmVmaXgpLCAwLCBjYl9kYXRhKTsKKwlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmKGdldF9yZWZfY2FjaGUoc3VibW9kdWxlKSwgcHJlZml4LCBmbiwgc3RybGVuKHByZWZpeCksIDAsIGNiX2RhdGEpOwogfQogCiBpbnQgZm9yX2VhY2hfdGFnX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKQEAgLTE0MzEsNyArMTgwNSw3IEBACiAKIGludCBmb3JfZWFjaF9yZXBsYWNlX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKIHsKLQlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmKE5VTEwsICJyZWZzL3JlcGxhY2UvIiwgZm4sIDEzLCAwLCBjYl9kYXRhKTsKKwlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmKCZyZWZfY2FjaGUsICJyZWZzL3JlcGxhY2UvIiwgZm4sIDEzLCAwLCBjYl9kYXRhKTsKIH0KIAogaW50IGhlYWRfcmVmX25hbWVzcGFjZWQoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCkBAIC0xNDU0LDcgKzE4MjgsNyBAQAogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAJaW50IHJldDsKIAlzdHJidWZfYWRkZigmYnVmLCAiJXNyZWZzLyIsIGdldF9naXRfbmFtZXNwYWNlKCkpOwotCXJldCA9IGRvX2Zvcl9lYWNoX3JlZihOVUxMLCBidWYuYnVmLCBmbiwgMCwgMCwgY2JfZGF0YSk7CisJcmV0ID0gZG9fZm9yX2VhY2hfcmVmKCZyZWZfY2FjaGUsIGJ1Zi5idWYsIGZuLCAwLCAwLCBjYl9kYXRhKTsKIAlzdHJidWZfcmVsZWFzZSgmYnVmKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTQ5Niw3ICsxODcwLDcgQEAKIAogaW50IGZvcl9lYWNoX3Jhd3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKIHsKLQlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmKE5VTEwsICIiLCBmbiwgMCwKKwlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmKCZyZWZfY2FjaGUsICIiLCBmbiwgMCwKIAkJCSAgICAgICBET19GT1JfRUFDSF9JTkNMVURFX0JST0tFTiwgY2JfZGF0YSk7CiB9CiAKQEAgLTE3MDIsNyArMjA3Niw3IEBACiAJICogbmFtZSBpcyBhIHByb3BlciBwcmVmaXggb2Ygb3VyIHJlZm5hbWUuCiAJICovCiAJaWYgKG1pc3NpbmcgJiYKLQkgICAgICFpc19yZWZuYW1lX2F2YWlsYWJsZShyZWZuYW1lLCBOVUxMLCBnZXRfcGFja2VkX3JlZnMoZ2V0X3JlZl9jYWNoZShOVUxMKSkpKSB7CisJICAgICAhaXNfcmVmbmFtZV9hdmFpbGFibGUocmVmbmFtZSwgTlVMTCwgZ2V0X3BhY2tlZF9yZWZzKCZyZWZfY2FjaGUpKSkgewogCQlsYXN0X2Vycm5vID0gRU5PVERJUjsKIAkJZ290byBlcnJvcl9yZXR1cm47CiAJfQpAQCAtMTc1NCw0OCArMjEyOCwzMjUgQEAKIAlyZXR1cm4gbG9ja19yZWZfc2hhMV9iYXNpYyhyZWZuYW1lLCBvbGRfc2hhMSwgZmxhZ3MsIE5VTEwpOwogfQogCi1zdHJ1Y3QgcmVwYWNrX3dpdGhvdXRfcmVmX3NiIHsKLQljb25zdCBjaGFyICpyZWZuYW1lOwotCWludCBmZDsKLX07Ci0KLXN0YXRpYyBpbnQgcmVwYWNrX3dpdGhvdXRfcmVmX2ZuKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCi0JCQkJIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKKy8qCisgKiBXcml0ZSBhbiBlbnRyeSB0byB0aGUgcGFja2VkLXJlZnMgZmlsZSBmb3IgdGhlIHNwZWNpZmllZCByZWZuYW1lLgorICogSWYgcGVlbGVkIGlzIG5vbi1OVUxMLCB3cml0ZSBpdCBhcyB0aGUgZW50cnkncyBwZWVsZWQgdmFsdWUuCisgKi8KK3N0YXRpYyB2b2lkIHdyaXRlX3BhY2tlZF9lbnRyeShpbnQgZmQsIGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICAgICAgdW5zaWduZWQgY2hhciAqcGVlbGVkKQogewotCXN0cnVjdCByZXBhY2tfd2l0aG91dF9yZWZfc2IgKmRhdGEgPSBjYl9kYXRhOwogCWNoYXIgbGluZVtQQVRIX01BWCArIDEwMF07CiAJaW50IGxlbjsKIAotCWlmICghc3RyY21wKGRhdGEtPnJlZm5hbWUsIHJlZm5hbWUpKQotCQlyZXR1cm4gMDsKIAlsZW4gPSBzbnByaW50ZihsaW5lLCBzaXplb2YobGluZSksICIlcyAlc1xuIiwKIAkJICAgICAgIHNoYTFfdG9faGV4KHNoYTEpLCByZWZuYW1lKTsKIAkvKiB0aGlzIHNob3VsZCBub3QgaGFwcGVuIGJ1dCBqdXN0IGJlaW5nIGRlZmVuc2l2ZSAqLwogCWlmIChsZW4gPiBzaXplb2YobGluZSkpCiAJCWRpZSgidG9vIGxvbmcgYSByZWZuYW1lICclcyciLCByZWZuYW1lKTsKLQl3cml0ZV9vcl9kaWUoZGF0YS0+ZmQsIGxpbmUsIGxlbik7CisJd3JpdGVfb3JfZGllKGZkLCBsaW5lLCBsZW4pOworCisJaWYgKHBlZWxlZCkgeworCQlpZiAoc25wcmludGYobGluZSwgc2l6ZW9mKGxpbmUpLCAiXiVzXG4iLAorCQkJICAgICBzaGExX3RvX2hleChwZWVsZWQpKSAhPSBQRUVMRURfTElORV9MRU5HVEgpCisJCQlkaWUoImludGVybmFsIGVycm9yIik7CisJCXdyaXRlX29yX2RpZShmZCwgbGluZSwgUEVFTEVEX0xJTkVfTEVOR1RIKTsKKwl9Cit9CisKKy8qCisgKiBBbiBlYWNoX3JlZl9lbnRyeV9mbiB0aGF0IHdyaXRlcyB0aGUgZW50cnkgdG8gYSBwYWNrZWQtcmVmcyBmaWxlLgorICovCitzdGF0aWMgaW50IHdyaXRlX3BhY2tlZF9lbnRyeV9mbihzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlpbnQgKmZkID0gY2JfZGF0YTsKKwllbnVtIHBlZWxfc3RhdHVzIHBlZWxfc3RhdHVzID0gcGVlbF9lbnRyeShlbnRyeSwgMCk7CisKKwlpZiAocGVlbF9zdGF0dXMgIT0gUEVFTF9QRUVMRUQgJiYgcGVlbF9zdGF0dXMgIT0gUEVFTF9OT05fVEFHKQorCQllcnJvcigiaW50ZXJuYWwgZXJyb3I6ICVzIGlzIG5vdCBhIHZhbGlkIHBhY2tlZCByZWZlcmVuY2UhIiwKKwkJICAgICAgZW50cnktPm5hbWUpOworCXdyaXRlX3BhY2tlZF9lbnRyeSgqZmQsIGVudHJ5LT5uYW1lLCBlbnRyeS0+dS52YWx1ZS5zaGExLAorCQkJICAgcGVlbF9zdGF0dXMgPT0gUEVFTF9QRUVMRUQgPworCQkJICAgZW50cnktPnUudmFsdWUucGVlbGVkIDogTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIHBhY2tsb2NrOworaW50IGxvY2tfcGFja2VkX3JlZnMoaW50IGZsYWdzKQoreworCXN0cnVjdCBwYWNrZWRfcmVmX2NhY2hlICpwYWNrZWRfcmVmX2NhY2hlOworCisJaWYgKGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJnBhY2tsb2NrLCBnaXRfcGF0aCgicGFja2VkLXJlZnMiKSwgZmxhZ3MpIDwgMCkKKwkJcmV0dXJuIC0xOworCS8qCisJICogR2V0IHRoZSBjdXJyZW50IHBhY2tlZC1yZWZzIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2suICBJZiB0aGUKKwkgKiBwYWNrZWQtcmVmcyBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkIHNpbmNlIHdlIGxhc3QgcmVhZCBpdCwKKwkgKiB0aGlzIHdpbGwgYXV0b21hdGljYWxseSBpbnZhbGlkYXRlIHRoZSBjYWNoZSBhbmQgcmUtcmVhZAorCSAqIHRoZSBwYWNrZWQtcmVmcyBmaWxlLgorCSAqLworCXBhY2tlZF9yZWZfY2FjaGUgPSBnZXRfcGFja2VkX3JlZl9jYWNoZSgmcmVmX2NhY2hlKTsKKwlwYWNrZWRfcmVmX2NhY2hlLT5sb2NrID0gJnBhY2tsb2NrOworCS8qIEluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyBmcmVlZDogKi8KKwlhY3F1aXJlX3BhY2tlZF9yZWZfY2FjaGUocGFja2VkX3JlZl9jYWNoZSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjb21taXRfcGFja2VkX3JlZnModm9pZCkKK3sKKwlzdHJ1Y3QgcGFja2VkX3JlZl9jYWNoZSAqcGFja2VkX3JlZl9jYWNoZSA9CisJCWdldF9wYWNrZWRfcmVmX2NhY2hlKCZyZWZfY2FjaGUpOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoIXBhY2tlZF9yZWZfY2FjaGUtPmxvY2spCisJCWRpZSgiaW50ZXJuYWwgZXJyb3I6IHBhY2tlZC1yZWZzIG5vdCBsb2NrZWQiKTsKKwl3cml0ZV9vcl9kaWUocGFja2VkX3JlZl9jYWNoZS0+bG9jay0+ZmQsCisJCSAgICAgUEFDS0VEX1JFRlNfSEVBREVSLCBzdHJsZW4oUEFDS0VEX1JFRlNfSEVBREVSKSk7CisKKwlkb19mb3JfZWFjaF9lbnRyeV9pbl9kaXIoZ2V0X3BhY2tlZF9yZWZfZGlyKHBhY2tlZF9yZWZfY2FjaGUpLAorCQkJCSAwLCB3cml0ZV9wYWNrZWRfZW50cnlfZm4sCisJCQkJICZwYWNrZWRfcmVmX2NhY2hlLT5sb2NrLT5mZCk7CisJaWYgKGNvbW1pdF9sb2NrX2ZpbGUocGFja2VkX3JlZl9jYWNoZS0+bG9jaykpCisJCWVycm9yID0gLTE7CisJcGFja2VkX3JlZl9jYWNoZS0+bG9jayA9IE5VTEw7CisJcmVsZWFzZV9wYWNrZWRfcmVmX2NhY2hlKHBhY2tlZF9yZWZfY2FjaGUpOworCXJldHVybiBlcnJvcjsKK30KKwordm9pZCByb2xsYmFja19wYWNrZWRfcmVmcyh2b2lkKQoreworCXN0cnVjdCBwYWNrZWRfcmVmX2NhY2hlICpwYWNrZWRfcmVmX2NhY2hlID0KKwkJZ2V0X3BhY2tlZF9yZWZfY2FjaGUoJnJlZl9jYWNoZSk7CisKKwlpZiAoIXBhY2tlZF9yZWZfY2FjaGUtPmxvY2spCisJCWRpZSgiaW50ZXJuYWwgZXJyb3I6IHBhY2tlZC1yZWZzIG5vdCBsb2NrZWQiKTsKKwlyb2xsYmFja19sb2NrX2ZpbGUocGFja2VkX3JlZl9jYWNoZS0+bG9jayk7CisJcGFja2VkX3JlZl9jYWNoZS0+bG9jayA9IE5VTEw7CisJcmVsZWFzZV9wYWNrZWRfcmVmX2NhY2hlKHBhY2tlZF9yZWZfY2FjaGUpOworCWNsZWFyX3BhY2tlZF9yZWZfY2FjaGUoJnJlZl9jYWNoZSk7Cit9CisKK3N0cnVjdCByZWZfdG9fcHJ1bmUgeworCXN0cnVjdCByZWZfdG9fcHJ1bmUgKm5leHQ7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07Cit9OworCitzdHJ1Y3QgcGFja19yZWZzX2NiX2RhdGEgeworCXVuc2lnbmVkIGludCBmbGFnczsKKwlzdHJ1Y3QgcmVmX2RpciAqcGFja2VkX3JlZnM7CisJc3RydWN0IHJlZl90b19wcnVuZSAqcmVmX3RvX3BydW5lOworfTsKKworLyoKKyAqIEFuIGVhY2hfcmVmX2VudHJ5X2ZuIHRoYXQgaXMgcnVuIG92ZXIgbG9vc2UgcmVmZXJlbmNlcyBvbmx5LiAgSWYKKyAqIHRoZSBsb29zZSByZWZlcmVuY2UgY2FuIGJlIHBhY2tlZCwgYWRkIGFuIGVudHJ5IGluIHRoZSBwYWNrZWQgcmVmCisgKiBjYWNoZS4gIElmIHRoZSByZWZlcmVuY2Ugc2hvdWxkIGJlIHBydW5lZCwgYWxzbyBhZGQgaXQgdG8KKyAqIHJlZl90b19wcnVuZSBpbiB0aGUgcGFja19yZWZzX2NiX2RhdGEuCisgKi8KK3N0YXRpYyBpbnQgcGFja19pZl9wb3NzaWJsZV9mbihzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgcGFja19yZWZzX2NiX2RhdGEgKmNiID0gY2JfZGF0YTsKKwllbnVtIHBlZWxfc3RhdHVzIHBlZWxfc3RhdHVzOworCXN0cnVjdCByZWZfZW50cnkgKnBhY2tlZF9lbnRyeTsKKwlpbnQgaXNfdGFnX3JlZiA9ICFwcmVmaXhjbXAoZW50cnktPm5hbWUsICJyZWZzL3RhZ3MvIik7CisKKwkvKiBBTFdBWVMgcGFjayB0YWdzICovCisJaWYgKCEoY2ItPmZsYWdzICYgUEFDS19SRUZTX0FMTCkgJiYgIWlzX3RhZ19yZWYpCisJCXJldHVybiAwOworCisJLyogRG8gbm90IHBhY2sgc3ltYm9saWMgb3IgYnJva2VuIHJlZnM6ICovCisJaWYgKChlbnRyeS0+ZmxhZyAmIFJFRl9JU1NZTVJFRikgfHwgIXJlZl9yZXNvbHZlc190b19vYmplY3QoZW50cnkpKQorCQlyZXR1cm4gMDsKKworCS8qIEFkZCBhIHBhY2tlZCByZWYgY2FjaGUgZW50cnkgZXF1aXZhbGVudCB0byB0aGUgbG9vc2UgZW50cnkuICovCisJcGVlbF9zdGF0dXMgPSBwZWVsX2VudHJ5KGVudHJ5LCAxKTsKKwlpZiAocGVlbF9zdGF0dXMgIT0gUEVFTF9QRUVMRUQgJiYgcGVlbF9zdGF0dXMgIT0gUEVFTF9OT05fVEFHKQorCQlkaWUoImludGVybmFsIGVycm9yIHBlZWxpbmcgcmVmZXJlbmNlICVzICglcykiLAorCQkgICAgZW50cnktPm5hbWUsIHNoYTFfdG9faGV4KGVudHJ5LT51LnZhbHVlLnNoYTEpKTsKKwlwYWNrZWRfZW50cnkgPSBmaW5kX3JlZihjYi0+cGFja2VkX3JlZnMsIGVudHJ5LT5uYW1lKTsKKwlpZiAocGFja2VkX2VudHJ5KSB7CisJCS8qIE92ZXJ3cml0ZSBleGlzdGluZyBwYWNrZWQgZW50cnkgd2l0aCBpbmZvIGZyb20gbG9vc2UgZW50cnkgKi8KKwkJcGFja2VkX2VudHJ5LT5mbGFnID0gUkVGX0lTUEFDS0VEIHwgUkVGX0tOT1dTX1BFRUxFRDsKKwkJaGFzaGNweShwYWNrZWRfZW50cnktPnUudmFsdWUuc2hhMSwgZW50cnktPnUudmFsdWUuc2hhMSk7CisJfSBlbHNlIHsKKwkJcGFja2VkX2VudHJ5ID0gY3JlYXRlX3JlZl9lbnRyeShlbnRyeS0+bmFtZSwgZW50cnktPnUudmFsdWUuc2hhMSwKKwkJCQkJCVJFRl9JU1BBQ0tFRCB8IFJFRl9LTk9XU19QRUVMRUQsIDApOworCQlhZGRfcmVmKGNiLT5wYWNrZWRfcmVmcywgcGFja2VkX2VudHJ5KTsKKwl9CisJaGFzaGNweShwYWNrZWRfZW50cnktPnUudmFsdWUucGVlbGVkLCBlbnRyeS0+dS52YWx1ZS5wZWVsZWQpOworCisJLyogU2NoZWR1bGUgdGhlIGxvb3NlIHJlZmVyZW5jZSBmb3IgcHJ1bmluZyBpZiByZXF1ZXN0ZWQuICovCisJaWYgKChjYi0+ZmxhZ3MgJiBQQUNLX1JFRlNfUFJVTkUpKSB7CisJCWludCBuYW1lbGVuID0gc3RybGVuKGVudHJ5LT5uYW1lKSArIDE7CisJCXN0cnVjdCByZWZfdG9fcHJ1bmUgKm4gPSB4Y2FsbG9jKDEsIHNpemVvZigqbikgKyBuYW1lbGVuKTsKKwkJaGFzaGNweShuLT5zaGExLCBlbnRyeS0+dS52YWx1ZS5zaGExKTsKKwkJc3RyY3B5KG4tPm5hbWUsIGVudHJ5LT5uYW1lKTsKKwkJbi0+bmV4dCA9IGNiLT5yZWZfdG9fcHJ1bmU7CisJCWNiLT5yZWZfdG9fcHJ1bmUgPSBuOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlbW92ZSBlbXB0eSBwYXJlbnRzLCBidXQgc3BhcmUgcmVmcy8gYW5kIGltbWVkaWF0ZSBzdWJkaXJzLgorICogTm90ZTogbXVuZ2VzICpuYW1lLgorICovCitzdGF0aWMgdm9pZCB0cnlfcmVtb3ZlX2VtcHR5X3BhcmVudHMoY2hhciAqbmFtZSkKK3sKKwljaGFyICpwLCAqcTsKKwlpbnQgaTsKKwlwID0gbmFtZTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7IC8qIHJlZnMve2hlYWRzLHRhZ3MsLi4ufS8gKi8KKwkJd2hpbGUgKCpwICYmICpwICE9ICcvJykKKwkJCXArKzsKKwkJLyogdG9sZXJhdGUgZHVwbGljYXRlIHNsYXNoZXM7IHNlZSBjaGVja19yZWZuYW1lX2Zvcm1hdCgpICovCisJCXdoaWxlICgqcCA9PSAnLycpCisJCQlwKys7CisJfQorCWZvciAocSA9IHA7ICpxOyBxKyspCisJCTsKKwl3aGlsZSAoMSkgeworCQl3aGlsZSAocSA+IHAgJiYgKnEgIT0gJy8nKQorCQkJcS0tOworCQl3aGlsZSAocSA+IHAgJiYgKihxLTEpID09ICcvJykKKwkJCXEtLTsKKwkJaWYgKHEgPT0gcCkKKwkJCWJyZWFrOworCQkqcSA9ICdcMCc7CisJCWlmIChybWRpcihnaXRfcGF0aCgiJXMiLCBuYW1lKSkpCisJCQlicmVhazsKKwl9Cit9CisKKy8qIG1ha2Ugc3VyZSBub2JvZHkgdG91Y2hlZCB0aGUgcmVmLCBhbmQgdW5saW5rICovCitzdGF0aWMgdm9pZCBwcnVuZV9yZWYoc3RydWN0IHJlZl90b19wcnVuZSAqcikKK3sKKwlzdHJ1Y3QgcmVmX2xvY2sgKmxvY2sgPSBsb2NrX3JlZl9zaGExKHItPm5hbWUgKyA1LCByLT5zaGExKTsKKworCWlmIChsb2NrKSB7CisJCXVubGlua19vcl93YXJuKGdpdF9wYXRoKCIlcyIsIHItPm5hbWUpKTsKKwkJdW5sb2NrX3JlZihsb2NrKTsKKwkJdHJ5X3JlbW92ZV9lbXB0eV9wYXJlbnRzKHItPm5hbWUpOworCX0KK30KKworc3RhdGljIHZvaWQgcHJ1bmVfcmVmcyhzdHJ1Y3QgcmVmX3RvX3BydW5lICpyKQoreworCXdoaWxlIChyKSB7CisJCXBydW5lX3JlZihyKTsKKwkJciA9IHItPm5leHQ7CisJfQorfQorCitpbnQgcGFja19yZWZzKHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcGFja19yZWZzX2NiX2RhdGEgY2JkYXRhOworCisJbWVtc2V0KCZjYmRhdGEsIDAsIHNpemVvZihjYmRhdGEpKTsKKwljYmRhdGEuZmxhZ3MgPSBmbGFnczsKKworCWxvY2tfcGFja2VkX3JlZnMoTE9DS19ESUVfT05fRVJST1IpOworCWNiZGF0YS5wYWNrZWRfcmVmcyA9IGdldF9wYWNrZWRfcmVmcygmcmVmX2NhY2hlKTsKKworCWRvX2Zvcl9lYWNoX2VudHJ5X2luX2RpcihnZXRfbG9vc2VfcmVmcygmcmVmX2NhY2hlKSwgMCwKKwkJCQkgcGFja19pZl9wb3NzaWJsZV9mbiwgJmNiZGF0YSk7CisKKwlpZiAoY29tbWl0X3BhY2tlZF9yZWZzKCkpCisJCWRpZV9lcnJubygidW5hYmxlIHRvIG92ZXJ3cml0ZSBvbGQgcmVmLXBhY2sgZmlsZSIpOworCisJcHJ1bmVfcmVmcyhjYmRhdGEucmVmX3RvX3BydW5lKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElmIGVudHJ5IGlzIG5vIGxvbmdlciBuZWVkZWQgaW4gcGFja2VkLXJlZnMsIGFkZCBpdCB0byB0aGUgc3RyaW5nCisgKiBsaXN0IHBvaW50ZWQgdG8gYnkgY2JfZGF0YS4gIFJlYXNvbnMgZm9yIGRlbGV0aW5nIGVudHJpZXM6CisgKgorICogLSBFbnRyeSBpcyBicm9rZW4uCisgKiAtIEVudHJ5IGlzIG92ZXJyaWRkZW4gYnkgYSBsb29zZSByZWYuCisgKiAtIEVudHJ5IGRvZXMgbm90IHBvaW50IGF0IGEgdmFsaWQgb2JqZWN0LgorICoKKyAqIEluIHRoZSBmaXJzdCBhbmQgdGhpcmQgY2FzZXMsIGFsc28gZW1pdCBhbiBlcnJvciBtZXNzYWdlIGJlY2F1c2UgdGhlc2UKKyAqIGFyZSBpbmRpY2F0aW9ucyBvZiByZXBvc2l0b3J5IGNvcnJ1cHRpb24uCisgKi8KK3N0YXRpYyBpbnQgY3VyYXRlX3BhY2tlZF9yZWZfZm4oc3RydWN0IHJlZl9lbnRyeSAqZW50cnksIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICpyZWZzX3RvX2RlbGV0ZSA9IGNiX2RhdGE7CisKKwlpZiAoZW50cnktPmZsYWcgJiBSRUZfSVNCUk9LRU4pIHsKKwkJLyogVGhpcyBzaG91bGRuJ3QgaGFwcGVuIHRvIHBhY2tlZCByZWZzLiAqLworCQllcnJvcigiJXMgaXMgYnJva2VuISIsIGVudHJ5LT5uYW1lKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKHJlZnNfdG9fZGVsZXRlLCBlbnRyeS0+bmFtZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIWhhc19zaGExX2ZpbGUoZW50cnktPnUudmFsdWUuc2hhMSkpIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJaW50IGZsYWdzOworCisJCWlmIChyZWFkX3JlZl9mdWxsKGVudHJ5LT5uYW1lLCBzaGExLCAwLCAmZmxhZ3MpKQorCQkJLyogV2Ugc2hvdWxkIGF0IGxlYXN0IGhhdmUgZm91bmQgdGhlIHBhY2tlZCByZWYuICovCisJCQlkaWUoIkludGVybmFsIGVycm9yIik7CisJCWlmICgoZmxhZ3MgJiBSRUZfSVNTWU1SRUYpIHx8ICEoZmxhZ3MgJiBSRUZfSVNQQUNLRUQpKSB7CisJCQkvKgorCQkJICogVGhpcyBwYWNrZWQgcmVmZXJlbmNlIGlzIG92ZXJyaWRkZW4gYnkgYQorCQkJICogbG9vc2UgcmVmZXJlbmNlLCBzbyBpdCBpcyBPSyB0aGF0IGl0cyB2YWx1ZQorCQkJICogaXMgbm8gbG9uZ2VyIHZhbGlkOyBmb3IgZXhhbXBsZSwgaXQgbWlnaHQKKwkJCSAqIHJlZmVyIHRvIGFuIG9iamVjdCB0aGF0IGhhcyBiZWVuIGdhcmJhZ2UKKwkJCSAqIGNvbGxlY3RlZC4gIEZvciB0aGlzIHB1cnBvc2Ugd2UgZG9uJ3QgZXZlbgorCQkJICogY2FyZSB3aGV0aGVyIHRoZSBsb29zZSByZWZlcmVuY2UgaXRzZWxmIGlzCisJCQkgKiBpbnZhbGlkLCBicm9rZW4sIHN5bWJvbGljLCBldGMuICBTaWxlbnRseQorCQkJICogcmVtb3ZlIHRoZSBwYWNrZWQgcmVmZXJlbmNlLgorCQkJICovCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQocmVmc190b19kZWxldGUsIGVudHJ5LT5uYW1lKTsKKwkJCXJldHVybiAwOworCQl9CisJCS8qCisJCSAqIFRoZXJlIGlzIG5vIG92ZXJyaWRpbmcgbG9vc2UgcmVmZXJlbmNlLCBzbyB0aGUgZmFjdAorCQkgKiB0aGF0IHRoaXMgcmVmZXJlbmNlIGRvZXNuJ3QgcmVmZXIgdG8gYSB2YWxpZCBvYmplY3QKKwkJICogaW5kaWNhdGVzIHNvbWUga2luZCBvZiByZXBvc2l0b3J5IGNvcnJ1cHRpb24uCisJCSAqIFJlcG9ydCB0aGUgcHJvYmxlbSwgdGhlbiBvbWl0IHRoZSByZWZlcmVuY2UgZnJvbQorCQkgKiB0aGUgb3V0cHV0LgorCQkgKi8KKwkJZXJyb3IoIiVzIGRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgb2JqZWN0ISIsIGVudHJ5LT5uYW1lKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKHJlZnNfdG9fZGVsZXRlLCBlbnRyeS0+bmFtZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQogCiBzdGF0aWMgaW50IHJlcGFja193aXRob3V0X3JlZihjb25zdCBjaGFyICpyZWZuYW1lKQogewotCXN0cnVjdCByZXBhY2tfd2l0aG91dF9yZWZfc2IgZGF0YTsKLQlzdHJ1Y3QgcmVmX2NhY2hlICpyZWZzID0gZ2V0X3JlZl9jYWNoZShOVUxMKTsKLQlzdHJ1Y3QgcmVmX2RpciAqcGFja2VkID0gZ2V0X3BhY2tlZF9yZWZzKHJlZnMpOwotCWlmIChmaW5kX3JlZihwYWNrZWQsIHJlZm5hbWUpID09IE5VTEwpCi0JCXJldHVybiAwOwotCWRhdGEucmVmbmFtZSA9IHJlZm5hbWU7Ci0JZGF0YS5mZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJnBhY2tsb2NrLCBnaXRfcGF0aCgicGFja2VkLXJlZnMiKSwgMCk7Ci0JaWYgKGRhdGEuZmQgPCAwKSB7CisJc3RydWN0IHJlZl9kaXIgKnBhY2tlZDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmVmc190b19kZWxldGUgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqcmVmX3RvX2RlbGV0ZTsKKworCWlmICghZ2V0X3BhY2tlZF9yZWYocmVmbmFtZSkpCisJCXJldHVybiAwOyAvKiByZWZuYW1lIGRvZXMgbm90IGV4aXN0IGluIHBhY2tlZCByZWZzICovCisKKwlpZiAobG9ja19wYWNrZWRfcmVmcygwKSkgewogCQl1bmFibGVfdG9fbG9ja19lcnJvcihnaXRfcGF0aCgicGFja2VkLXJlZnMiKSwgZXJybm8pOwogCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBkZWxldGUgJyVzJyBmcm9tIHBhY2tlZCByZWZzIiwgcmVmbmFtZSk7CiAJfQotCWNsZWFyX3BhY2tlZF9yZWZfY2FjaGUocmVmcyk7Ci0JcGFja2VkID0gZ2V0X3BhY2tlZF9yZWZzKHJlZnMpOwotCWRvX2Zvcl9lYWNoX3JlZl9pbl9kaXIocGFja2VkLCAwLCAiIiwgcmVwYWNrX3dpdGhvdXRfcmVmX2ZuLCAwLCAwLCAmZGF0YSk7Ci0JcmV0dXJuIGNvbW1pdF9sb2NrX2ZpbGUoJnBhY2tsb2NrKTsKKwlwYWNrZWQgPSBnZXRfcGFja2VkX3JlZnMoJnJlZl9jYWNoZSk7CisKKwkvKiBSZW1vdmUgcmVmbmFtZSBmcm9tIHRoZSBjYWNoZTogKi8KKwlpZiAocmVtb3ZlX2VudHJ5KHBhY2tlZCwgcmVmbmFtZSkgPT0gLTEpIHsKKwkJLyoKKwkJICogVGhlIHBhY2tlZCBlbnRyeSBkaXNhcHBlYXJlZCB3aGlsZSB3ZSB3ZXJlCisJCSAqIGFjcXVpcmluZyB0aGUgbG9jay4KKwkJICovCisJCXJvbGxiYWNrX3BhY2tlZF9yZWZzKCk7CisJCXJldHVybiAwOworCX0KKworCS8qIFJlbW92ZSBhbnkgb3RoZXIgYWNjdW11bGF0ZWQgY3J1ZnQ6ICovCisJZG9fZm9yX2VhY2hfZW50cnlfaW5fZGlyKHBhY2tlZCwgMCwgY3VyYXRlX3BhY2tlZF9yZWZfZm4sICZyZWZzX3RvX2RlbGV0ZSk7CisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShyZWZfdG9fZGVsZXRlLCAmcmVmc190b19kZWxldGUpIHsKKwkJaWYgKHJlbW92ZV9lbnRyeShwYWNrZWQsIHJlZl90b19kZWxldGUtPnN0cmluZykgPT0gLTEpCisJCQlkaWUoImludGVybmFsIGVycm9yIik7CisJfQorCisJLyogV3JpdGUgd2hhdCByZW1haW5zOiAqLworCXJldHVybiBjb21taXRfcGFja2VkX3JlZnMoKTsKIH0KIAogaW50IGRlbGV0ZV9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGRlbG9wdCkKQEAgLTE4MjMsNyArMjQ3NCw3IEBACiAJcmV0IHw9IHJlcGFja193aXRob3V0X3JlZihsb2NrLT5yZWZfbmFtZSk7CiAKIAl1bmxpbmtfb3Jfd2FybihnaXRfcGF0aCgibG9ncy8lcyIsIGxvY2stPnJlZl9uYW1lKSk7Ci0JaW52YWxpZGF0ZV9yZWZfY2FjaGUoTlVMTCk7CisJY2xlYXJfbG9vc2VfcmVmX2NhY2hlKCZyZWZfY2FjaGUpOwogCXVubG9ja19yZWYobG9jayk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE4NDUsNyArMjQ5Niw2IEBACiAJc3RydWN0IHN0YXQgbG9naW5mbzsKIAlpbnQgbG9nID0gIWxzdGF0KGdpdF9wYXRoKCJsb2dzLyVzIiwgb2xkcmVmbmFtZSksICZsb2dpbmZvKTsKIAljb25zdCBjaGFyICpzeW1yZWYgPSBOVUxMOwotCXN0cnVjdCByZWZfY2FjaGUgKnJlZnMgPSBnZXRfcmVmX2NhY2hlKE5VTEwpOwogCiAJaWYgKGxvZyAmJiBTX0lTTE5LKGxvZ2luZm8uc3RfbW9kZSkpCiAJCXJldHVybiBlcnJvcigicmVmbG9nIGZvciAlcyBpcyBhIHN5bWxpbmsiLCBvbGRyZWZuYW1lKTsKQEAgLTE4NTcsMTAgKzI1MDcsMTAgQEAKIAlpZiAoIXN5bXJlZikKIAkJcmV0dXJuIGVycm9yKCJyZWZuYW1lICVzIG5vdCBmb3VuZCIsIG9sZHJlZm5hbWUpOwogCi0JaWYgKCFpc19yZWZuYW1lX2F2YWlsYWJsZShuZXdyZWZuYW1lLCBvbGRyZWZuYW1lLCBnZXRfcGFja2VkX3JlZnMocmVmcykpKQorCWlmICghaXNfcmVmbmFtZV9hdmFpbGFibGUobmV3cmVmbmFtZSwgb2xkcmVmbmFtZSwgZ2V0X3BhY2tlZF9yZWZzKCZyZWZfY2FjaGUpKSkKIAkJcmV0dXJuIDE7CiAKLQlpZiAoIWlzX3JlZm5hbWVfYXZhaWxhYmxlKG5ld3JlZm5hbWUsIG9sZHJlZm5hbWUsIGdldF9sb29zZV9yZWZzKHJlZnMpKSkKKwlpZiAoIWlzX3JlZm5hbWVfYXZhaWxhYmxlKG5ld3JlZm5hbWUsIG9sZHJlZm5hbWUsIGdldF9sb29zZV9yZWZzKCZyZWZfY2FjaGUpKSkKIAkJcmV0dXJuIDE7CiAKIAlpZiAobG9nICYmIHJlbmFtZShnaXRfcGF0aCgibG9ncy8lcyIsIG9sZHJlZm5hbWUpLCBnaXRfcGF0aChUTVBfUkVOQU1FRF9MT0cpKSkKQEAgLTIxMTYsNyArMjc2Niw3IEBACiAJCXVubG9ja19yZWYobG9jayk7CiAJCXJldHVybiAtMTsKIAl9Ci0JY2xlYXJfbG9vc2VfcmVmX2NhY2hlKGdldF9yZWZfY2FjaGUoTlVMTCkpOworCWNsZWFyX2xvb3NlX3JlZl9jYWNoZSgmcmVmX2NhY2hlKTsKIAlpZiAobG9nX3JlZl93cml0ZShsb2NrLT5yZWZfbmFtZSwgbG9jay0+b2xkX3NoYTEsIHNoYTEsIGxvZ21zZykgPCAwIHx8CiAJICAgIChzdHJjbXAobG9jay0+cmVmX25hbWUsIGxvY2stPm9yaWdfcmVmX25hbWUpICYmCiAJICAgICBsb2dfcmVmX3dyaXRlKGxvY2stPm9yaWdfcmVmX25hbWUsIGxvY2stPm9sZF9zaGExLCBzaGExLCBsb2dtc2cpIDwgMCkpIHsKZGlmZiAtLWdpdCBhL3JlZnMuaCBiL3JlZnMuaAppbmRleCBhMzVlYWZjLi45ZTVkYjNhIDEwMDY0NAotLS0gYS9yZWZzLmgKKysrIGIvcmVmcy5oCkBAIC0xMCwxOCArMTAsNDEgQEAKIAlpbnQgZm9yY2Vfd3JpdGU7CiB9OwogCisvKgorICogQml0IHZhbHVlcyBzZXQgaW4gdGhlIGZsYWdzIGFyZ3VtZW50IHBhc3NlZCB0byBlYWNoX3JlZl9mbigpOgorICovCisKKy8qIFJlZmVyZW5jZSBpcyBhIHN5bWJvbGljIHJlZmVyZW5jZS4gKi8KICNkZWZpbmUgUkVGX0lTU1lNUkVGIDB4MDEKKworLyogUmVmZXJlbmNlIGlzIGEgcGFja2VkIHJlZmVyZW5jZS4gKi8KICNkZWZpbmUgUkVGX0lTUEFDS0VEIDB4MDIKKworLyoKKyAqIFJlZmVyZW5jZSBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYW4gb2JqZWN0IG5hbWU6IGRhbmdsaW5nIHN5bWJvbGljCisgKiByZWZlcmVuY2UgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpLCBjb3JydXB0IHJlZmVyZW5jZSBmaWxlLCBvcgorICogc3ltYm9saWMgcmVmZXJlbmNlIHJlZmVycyB0byBpbGwtZm9ybWF0dGVkIHJlZmVyZW5jZSBuYW1lLgorICovCiAjZGVmaW5lIFJFRl9JU0JST0tFTiAweDA0CiAKIC8qCi0gKiBDYWxscyB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIGZvciBlYWNoIHJlZiBmaWxlIHVudGlsIGl0IHJldHVybnMKLSAqIG5vbnplcm8sIGFuZCByZXR1cm5zIHRoZSB2YWx1ZS4gIFBsZWFzZSBub3RlIHRoYXQgaXQgaXMgbm90IHNhZmUgdG8KLSAqIG1vZGlmeSByZWZlcmVuY2VzIHdoaWxlIGFuIGl0ZXJhdGlvbiBpcyBpbiBwcm9ncmVzcywgdW5sZXNzIHRoZQotICogc2FtZSBjYWxsYmFjayBmdW5jdGlvbiBpbnZvY2F0aW9uIHRoYXQgbW9kaWZpZXMgdGhlIHJlZmVyZW5jZSBhbHNvCi0gKiByZXR1cm5zIGEgbm9uemVybyB2YWx1ZSB0byBpbW1lZGlhdGVseSBzdG9wIHRoZSBpdGVyYXRpb24uCisgKiBUaGUgc2lnbmF0dXJlIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBmb3JfZWFjaF8qKCkKKyAqIGZ1bmN0aW9ucyBiZWxvdy4gIFRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSB0aGUgcmVmbmFtZSBhbmQgc2hhMQorICogYXJndW1lbnRzIGlzIG9ubHkgZ3VhcmFudGVlZCB0byBiZSB2YWxpZCBmb3IgdGhlIGR1cmF0aW9uIG9mIGEKKyAqIHNpbmdsZSBjYWxsYmFjayBpbnZvY2F0aW9uLgogICovCi10eXBlZGVmIGludCBlYWNoX3JlZl9mbihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpOwordHlwZWRlZiBpbnQgZWFjaF9yZWZfZm4oY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSk7CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBpbnZva2UgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IKKyAqIGVhY2ggcmVmZXJlbmNlIGluZGljYXRlZC4gIElmIHRoZSBmdW5jdGlvbiBldmVyIHJldHVybnMgYSBub256ZXJvCisgKiB2YWx1ZSwgc3RvcCB0aGUgaXRlcmF0aW9uIGFuZCByZXR1cm4gdGhhdCB2YWx1ZS4gIFBsZWFzZSBub3RlIHRoYXQKKyAqIGl0IGlzIG5vdCBzYWZlIHRvIG1vZGlmeSByZWZlcmVuY2VzIHdoaWxlIGFuIGl0ZXJhdGlvbiBpcyBpbgorICogcHJvZ3Jlc3MsIHVubGVzcyB0aGUgc2FtZSBjYWxsYmFjayBmdW5jdGlvbiBpbnZvY2F0aW9uIHRoYXQKKyAqIG1vZGlmaWVzIHRoZSByZWZlcmVuY2UgYWxzbyByZXR1cm5zIGEgbm9uemVybyB2YWx1ZSB0byBpbW1lZGlhdGVseQorICogc3RvcCB0aGUgaXRlcmF0aW9uLgorICovCiBleHRlcm4gaW50IGhlYWRfcmVmKGVhY2hfcmVmX2ZuLCB2b2lkICopOwogZXh0ZXJuIGludCBmb3JfZWFjaF9yZWYoZWFjaF9yZWZfZm4sIHZvaWQgKik7CiBleHRlcm4gaW50IGZvcl9lYWNoX3JlZl9pbihjb25zdCBjaGFyICosIGVhY2hfcmVmX2ZuLCB2b2lkICopOwpAQCAtNTQsMTMgKzc3LDU3IEBACiBleHRlcm4gdm9pZCB3YXJuX2RhbmdsaW5nX3N5bXJlZihGSUxFICpmcCwgY29uc3QgY2hhciAqbXNnX2ZtdCwgY29uc3QgY2hhciAqcmVmbmFtZSk7CiAKIC8qCi0gKiBBZGQgYSByZWZlcmVuY2UgdG8gdGhlIGluLW1lbW9yeSBwYWNrZWQgcmVmZXJlbmNlIGNhY2hlLiAgVG8gYWN0dWFsbHkKLSAqIHdyaXRlIHRoZSByZWZlcmVuY2UgdG8gdGhlIHBhY2tlZC1yZWZzIGZpbGUsIGNhbGwgcGFja19yZWZzKCkuCisgKiBMb2NrIHRoZSBwYWNrZWQtcmVmcyBmaWxlIGZvciB3cml0aW5nLiAgRmxhZ3MgaXMgcGFzc2VkIHRvCisgKiBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCkuICBSZXR1cm4gMCBvbiBzdWNjZXNzLgorICovCitleHRlcm4gaW50IGxvY2tfcGFja2VkX3JlZnMoaW50IGZsYWdzKTsKKworLyoKKyAqIEFkZCBhIHJlZmVyZW5jZSB0byB0aGUgaW4tbWVtb3J5IHBhY2tlZCByZWZlcmVuY2UgY2FjaGUuICBUaGlzIG1heQorICogb25seSBiZSBjYWxsZWQgd2hpbGUgdGhlIHBhY2tlZC1yZWZzIGZpbGUgaXMgbG9ja2VkIChzZWUKKyAqIGxvY2tfcGFja2VkX3JlZnMoKSkuICBUbyBhY3R1YWxseSB3cml0ZSB0aGUgcGFja2VkLXJlZnMgZmlsZSwgY2FsbAorICogY29tbWl0X3BhY2tlZF9yZWZzKCkuCiAgKi8KIGV4dGVybiB2b2lkIGFkZF9wYWNrZWRfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOwogCisvKgorICogV3JpdGUgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgcGFja2VkIHJlZnMgY2FjaGUgZnJvbSBtZW1vcnkgdG8KKyAqIGRpc2suICBUaGUgcGFja2VkLXJlZnMgZmlsZSBtdXN0IGFscmVhZHkgYmUgbG9ja2VkIGZvciB3cml0aW5nIChzZWUKKyAqIGxvY2tfcGFja2VkX3JlZnMoKSkuICBSZXR1cm4gemVybyBvbiBzdWNjZXNzLgorICovCitleHRlcm4gaW50IGNvbW1pdF9wYWNrZWRfcmVmcyh2b2lkKTsKKworLyoKKyAqIFJvbGxiYWNrIHRoZSBsb2NrZmlsZSBmb3IgdGhlIHBhY2tlZC1yZWZzIGZpbGUsIGFuZCBkaXNjYXJkIHRoZQorICogaW4tbWVtb3J5IHBhY2tlZCByZWZlcmVuY2UgY2FjaGUuICAoVGhlIHBhY2tlZC1yZWZzIGZpbGUgd2lsbCBiZQorICogcmVhZCBhbmV3IGlmIGl0IGlzIG5lZWRlZCBhZ2FpbiBhZnRlciB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4pCisgKi8KK2V4dGVybiB2b2lkIHJvbGxiYWNrX3BhY2tlZF9yZWZzKHZvaWQpOworCisvKgorICogRmxhZ3MgZm9yIGNvbnRyb2xsaW5nIGJlaGF2aW91ciBvZiBwYWNrX3JlZnMoKQorICogUEFDS19SRUZTX1BSVU5FOiBQcnVuZSBsb29zZSByZWZzIGFmdGVyIHBhY2tpbmcKKyAqIFBBQ0tfUkVGU19BTEw6ICAgUGFjayBfYWxsXyByZWZzLCBub3QganVzdCB0YWdzIGFuZCBhbHJlYWR5IHBhY2tlZCByZWZzCisgKi8KKyNkZWZpbmUgUEFDS19SRUZTX1BSVU5FIDB4MDAwMQorI2RlZmluZSBQQUNLX1JFRlNfQUxMICAgMHgwMDAyCisKKy8qCisgKiBXcml0ZSBhIHBhY2tlZC1yZWZzIGZpbGUgZm9yIHRoZSBjdXJyZW50IHJlcG9zaXRvcnkuCisgKiBmbGFnczogQ29tYmluYXRpb24gb2YgdGhlIGFib3ZlIFBBQ0tfUkVGU18qIGZsYWdzLgorICovCitpbnQgcGFja19yZWZzKHVuc2lnbmVkIGludCBmbGFncyk7CisKIGV4dGVybiBpbnQgcmVmX2V4aXN0cyhjb25zdCBjaGFyICopOwogCisvKgorICogSWYgcmVmbmFtZSBpcyBhIG5vbi1zeW1ib2xpYyByZWZlcmVuY2UgdGhhdCByZWZlcnMgdG8gYSB0YWcgb2JqZWN0LAorICogYW5kIHRoZSB0YWcgY2FuIGJlIChyZWN1cnNpdmVseSkgZGVyZWZlcmVuY2VkIHRvIGEgbm9uLXRhZyBvYmplY3QsCisgKiBzdG9yZSB0aGUgU0hBMSBvZiB0aGUgcmVmZXJyZWQtdG8gb2JqZWN0IHRvIHNoYTEgYW5kIHJldHVybiAwLiAgSWYKKyAqIGFueSBvZiB0aGVzZSBjb25kaXRpb25zIGFyZSBub3QgbWV0LCByZXR1cm4gYSBub24temVybyB2YWx1ZS4KKyAqIFN5bWJvbGljIHJlZmVyZW5jZXMgYXJlIGNvbnNpZGVyZWQgdW5wZWVsYWJsZSwgZXZlbiBpZiB0aGV5CisgKiB1bHRpbWF0ZWx5IHJlc29sdmUgdG8gYSBwZWVsYWJsZSB0YWcuCisgKi8KIGV4dGVybiBpbnQgcGVlbF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSk7CiAKIC8qKiBMb2NrcyBhICJyZWZzLyIgcmVmIHJldHVybmluZyB0aGUgbG9jayBvbiBzdWNjZXNzIGFuZCBOVUxMIG9uIGZhaWx1cmUuICoqLwpkaWZmIC0tZ2l0IGEvcmVtb3RlLWN1cmwuYyBiL3JlbW90ZS1jdXJsLmMKaW5kZXggNjBlZGE2My4uNWIzY2U5ZSAxMDA2NDQKLS0tIGEvcmVtb3RlLWN1cmwuYworKysgYi9yZW1vdGUtY3VybC5jCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCiAjaW5jbHVkZSAicGt0LWxpbmUuaCIKICNpbmNsdWRlICJzaWRlYmFuZC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKIAogc3RhdGljIHN0cnVjdCByZW1vdGUgKnJlbW90ZTsKIHN0YXRpYyBjb25zdCBjaGFyICp1cmw7IC8qIGFsd2F5cyBlbmRzIHdpdGggYSB0cmFpbGluZyBzbGFzaCAqLwpAQCAtNzg3LDM2ICs3ODgsMzUgQEAKIHN0YXRpYyBpbnQgcHVzaF9naXQoc3RydWN0IGRpc2NvdmVyeSAqaGVhZHMsIGludCBucl9zcGVjLCBjaGFyICoqc3BlY3MpCiB7CiAJc3RydWN0IHJwY19zdGF0ZSBycGM7Ci0JY29uc3QgY2hhciAqKmFyZ3Y7Ci0JaW50IGFyZ2MgPSAwLCBpLCBlcnI7CisJaW50IGksIGVycjsKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzOwogCi0JYXJndiA9IHhtYWxsb2MoKDEwICsgbnJfc3BlYykgKiBzaXplb2YoY2hhciopKTsKLQlhcmd2W2FyZ2MrK10gPSAic2VuZC1wYWNrIjsKLQlhcmd2W2FyZ2MrK10gPSAiLS1zdGF0ZWxlc3MtcnBjIjsKLQlhcmd2W2FyZ2MrK10gPSAiLS1oZWxwZXItc3RhdHVzIjsKKwlhcmd2X2FycmF5X2luaXQoJmFyZ3MpOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3MsICJzZW5kLXBhY2siLCAiLS1zdGF0ZWxlc3MtcnBjIiwgIi0taGVscGVyLXN0YXR1cyIsCisJCQkgTlVMTCk7CisKIAlpZiAob3B0aW9ucy50aGluKQotCQlhcmd2W2FyZ2MrK10gPSAiLS10aGluIjsKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS10aGluIik7CiAJaWYgKG9wdGlvbnMuZHJ5X3J1bikKLQkJYXJndlthcmdjKytdID0gIi0tZHJ5LXJ1biI7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tZHJ5LXJ1biIpOwogCWlmIChvcHRpb25zLnZlcmJvc2l0eSA9PSAwKQotCQlhcmd2W2FyZ2MrK10gPSAiLS1xdWlldCI7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tcXVpZXQiKTsKIAllbHNlIGlmIChvcHRpb25zLnZlcmJvc2l0eSA+IDEpCi0JCWFyZ3ZbYXJnYysrXSA9ICItLXZlcmJvc2UiOwotCWFyZ3ZbYXJnYysrXSA9IG9wdGlvbnMucHJvZ3Jlc3MgPyAiLS1wcm9ncmVzcyIgOiAiLS1uby1wcm9ncmVzcyI7Ci0JYXJndlthcmdjKytdID0gdXJsOworCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLXZlcmJvc2UiKTsKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdGlvbnMucHJvZ3Jlc3MgPyAiLS1wcm9ncmVzcyIgOiAiLS1uby1wcm9ncmVzcyIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgdXJsKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnJfc3BlYzsgaSsrKQotCQlhcmd2W2FyZ2MrK10gPSBzcGVjc1tpXTsKLQlhcmd2W2FyZ2MrK10gPSBOVUxMOworCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIHNwZWNzW2ldKTsKIAogCW1lbXNldCgmcnBjLCAwLCBzaXplb2YocnBjKSk7CiAJcnBjLnNlcnZpY2VfbmFtZSA9ICJnaXQtcmVjZWl2ZS1wYWNrIiwKLQlycGMuYXJndiA9IGFyZ3Y7CisJcnBjLmFyZ3YgPSBhcmdzLmFyZ3Y7CiAKIAllcnIgPSBycGNfc2VydmljZSgmcnBjLCBoZWFkcyk7CiAJaWYgKHJwYy5yZXN1bHQubGVuKQogCQl3cml0ZV9vcl9kaWUoMSwgcnBjLnJlc3VsdC5idWYsIHJwYy5yZXN1bHQubGVuKTsKIAlzdHJidWZfcmVsZWFzZSgmcnBjLnJlc3VsdCk7Ci0JZnJlZShhcmd2KTsKKwlhcmd2X2FycmF5X2NsZWFyKCZhcmdzKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9yZW1vdGUtdGVzdHN2bi5jIGIvcmVtb3RlLXRlc3Rzdm4uYwppbmRleCA1ZGRmMTFjLi5kN2NkNWQyIDEwMDY0NAotLS0gYS9yZW1vdGUtdGVzdHN2bi5jCisrKyBiL3JlbW90ZS10ZXN0c3ZuLmMKQEAgLTI4Niw3ICsyODYsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVCwgdXJsX3NiID0gU1RSQlVGX0lOSVQsCiAJCQlwcml2YXRlX3JlZl9zYiA9IFNUUkJVRl9JTklULCBtYXJrc2ZpbGVuYW1lX3NiID0gU1RSQlVGX0lOSVQsCmRpZmYgLS1naXQgYS9yZW1vdGUuYyBiL3JlbW90ZS5jCmluZGV4IDY4ZWI5OWIuLmVmY2JhOTMgMTAwNjQ0Ci0tLSBhL3JlbW90ZS5jCisrKyBiL3JlbW90ZS5jCkBAIC0yNzYsMTAgKzI3Niw5IEBACiAKIHN0YXRpYyB2b2lkIHJlYWRfYnJhbmNoZXNfZmlsZShzdHJ1Y3QgcmVtb3RlICpyZW1vdGUpCiB7Ci0JY29uc3QgY2hhciAqc2xhc2ggPSBzdHJjaHIocmVtb3RlLT5uYW1lLCAnLycpOwogCWNoYXIgKmZyYWc7CiAJc3RydWN0IHN0cmJ1ZiBicmFuY2ggPSBTVFJCVUZfSU5JVDsKLQlpbnQgbiA9IHNsYXNoID8gc2xhc2ggLSByZW1vdGUtPm5hbWUgOiAxMDAwOworCWludCBuID0gMTAwMDsKIAlGSUxFICpmID0gZm9wZW4oZ2l0X3BhdGgoImJyYW5jaGVzLyUuKnMiLCBuLCByZW1vdGUtPm5hbWUpLCAiciIpOwogCWNoYXIgKnMsICpwOwogCWludCBsZW47CkBAIC0yOTksMjEgKzI5OCwxMSBAQAogCXdoaWxlIChpc3NwYWNlKHBbLTFdKSkKIAkJKi0tcCA9IDA7CiAJbGVuID0gcCAtIHM7Ci0JaWYgKHNsYXNoKQotCQlsZW4gKz0gc3RybGVuKHNsYXNoKTsKIAlwID0geG1hbGxvYyhsZW4gKyAxKTsKIAlzdHJjcHkocCwgcyk7Ci0JaWYgKHNsYXNoKQotCQlzdHJjYXQocCwgc2xhc2gpOwogCiAJLyoKLQkgKiBXaXRoICJzbGFzaCIsIGUuZy4gImdpdCBmZXRjaCBqZ2FyemlrL25ldGRldi0yLjYiIHdoZW4KLQkgKiByZWFkaW5nIGZyb20gJEdJVF9ESVIvYnJhbmNoZXMvamdhcnppayBmZXRjaGVzICJIRUFEIiBmcm9tCi0JICogdGhlIHBhcnRpYWwgVVJMIG9idGFpbmVkIGZyb20gdGhlIGJyYW5jaGVzIGZpbGUgcGx1cwotCSAqICIvbmV0ZGV2LTIuNiIgYW5kIGRvZXMgbm90IHN0b3JlIGl0IGluIGFueSB0cmFja2luZyByZWYuCi0JICogI2JyYW5jaCBzcGVjaWZpZXIgaW4gdGhlIGZpbGUgaXMgaWdub3JlZC4KLQkgKgotCSAqIE90aGVyd2lzZSwgdGhlIGJyYW5jaGVzIGZpbGUgd291bGQgaGF2ZSBVUkwgYW5kIG9wdGlvbmFsbHkKKwkgKiBUaGUgYnJhbmNoZXMgZmlsZSB3b3VsZCBoYXZlIFVSTCBhbmQgb3B0aW9uYWxseQogCSAqICNicmFuY2ggc3BlY2lmaWVkLiAgVGhlICJtYXN0ZXIiIChvciBzcGVjaWZpZWQpIGJyYW5jaCBpcwogCSAqIGZldGNoZWQgYW5kIHN0b3JlZCBpbiB0aGUgbG9jYWwgYnJhbmNoIG9mIHRoZSBzYW1lIG5hbWUuCiAJICovCkBAIC0zMjMsMTIgKzMxMiw4IEBACiAJCXN0cmJ1Zl9hZGRmKCZicmFuY2gsICJyZWZzL2hlYWRzLyVzIiwgZnJhZyk7CiAJfSBlbHNlCiAJCXN0cmJ1Zl9hZGRzdHIoJmJyYW5jaCwgInJlZnMvaGVhZHMvbWFzdGVyIik7Ci0JaWYgKCFzbGFzaCkgewotCQlzdHJidWZfYWRkZigmYnJhbmNoLCAiOnJlZnMvaGVhZHMvJXMiLCByZW1vdGUtPm5hbWUpOwotCX0gZWxzZSB7Ci0JCXN0cmJ1Zl9yZXNldCgmYnJhbmNoKTsKLQkJc3RyYnVmX2FkZHN0cigmYnJhbmNoLCAiSEVBRDoiKTsKLQl9CisKKwlzdHJidWZfYWRkZigmYnJhbmNoLCAiOnJlZnMvaGVhZHMvJXMiLCByZW1vdGUtPm5hbWUpOwogCWFkZF91cmxfYWxpYXMocmVtb3RlLCBwKTsKIAlhZGRfZmV0Y2hfcmVmc3BlYyhyZW1vdGUsIHN0cmJ1Zl9kZXRhY2goJmJyYW5jaCwgTlVMTCkpOwogCS8qCkBAIC0xMzE3LDYgKzEzMDIsMTQgQEAKIAlmcmVlKHNlbnRfdGlwcy50aXApOwogfQogCitzdGF0aWMgdm9pZCBwcmVwYXJlX3JlZl9pbmRleChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZl9pbmRleCwgc3RydWN0IHJlZiAqcmVmKQoreworCWZvciAoIDsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJCXN0cmluZ19saXN0X2FwcGVuZF9ub2R1cChyZWZfaW5kZXgsIHJlZi0+bmFtZSktPnV0aWwgPSByZWY7CisKKwlzb3J0X3N0cmluZ19saXN0KHJlZl9pbmRleCk7Cit9CisKIC8qCiAgKiBHaXZlbiB0aGUgc2V0IG9mIHJlZnMgdGhlIGxvY2FsIHJlcG9zaXRvcnkgaGFzLCB0aGUgc2V0IG9mIHJlZnMgdGhlCiAgKiByZW1vdGUgcmVwb3NpdG9yeSBoYXMsIGFuZCB0aGUgcmVmc3BlYyB1c2VkIGZvciBwdXNoLCBkZXRlcm1pbmUKQEAgLTEzMzUsNiArMTMyOCw3IEBACiAJaW50IGVycnM7CiAJc3RhdGljIGNvbnN0IGNoYXIgKmRlZmF1bHRfcmVmc3BlY1tdID0geyAiOiIsIE5VTEwgfTsKIAlzdHJ1Y3QgcmVmICpyZWYsICoqZHN0X3RhaWwgPSB0YWlsX3JlZihkc3QpOworCXN0cnVjdCBzdHJpbmdfbGlzdCBkc3RfcmVmX2luZGV4ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKIAogCWlmICghbnJfcmVmc3BlYykgewogCQlucl9yZWZzcGVjID0gMTsKQEAgLTEzNDUsNiArMTMzOSw3IEBACiAKIAkvKiBwaWNrIHRoZSByZW1haW5kZXIgKi8KIAlmb3IgKHJlZiA9IHNyYzsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmRzdF9pdGVtOwogCQlzdHJ1Y3QgcmVmICpkc3RfcGVlcjsKIAkJY29uc3Qgc3RydWN0IHJlZnNwZWMgKnBhdCA9IE5VTEw7CiAJCWNoYXIgKmRzdF9uYW1lOwpAQCAtMTM1Myw3ICsxMzQ4LDExIEBACiAJCWlmICghZHN0X25hbWUpCiAJCQljb250aW51ZTsKIAotCQlkc3RfcGVlciA9IGZpbmRfcmVmX2J5X25hbWUoKmRzdCwgZHN0X25hbWUpOworCQlpZiAoIWRzdF9yZWZfaW5kZXgubnIpCisJCQlwcmVwYXJlX3JlZl9pbmRleCgmZHN0X3JlZl9pbmRleCwgKmRzdCk7CisKKwkJZHN0X2l0ZW0gPSBzdHJpbmdfbGlzdF9sb29rdXAoJmRzdF9yZWZfaW5kZXgsIGRzdF9uYW1lKTsKKwkJZHN0X3BlZXIgPSBkc3RfaXRlbSA/IGRzdF9pdGVtLT51dGlsIDogTlVMTDsKIAkJaWYgKGRzdF9wZWVyKSB7CiAJCQlpZiAoZHN0X3BlZXItPnBlZXJfcmVmKQogCQkJCS8qIFdlJ3JlIGFscmVhZHkgc2VuZGluZyBzb21ldGhpbmcgdG8gdGhpcyByZWYuICovCkBAIC0xMzcwLDYgKzEzNjksOCBAQAogCQkJLyogQ3JlYXRlIGEgbmV3IG9uZSBhbmQgbGluayBpdCAqLwogCQkJZHN0X3BlZXIgPSBtYWtlX2xpbmtlZF9yZWYoZHN0X25hbWUsICZkc3RfdGFpbCk7CiAJCQloYXNoY3B5KGRzdF9wZWVyLT5uZXdfc2hhMSwgcmVmLT5uZXdfc2hhMSk7CisJCQlzdHJpbmdfbGlzdF9pbnNlcnQoJmRzdF9yZWZfaW5kZXgsCisJCQkJZHN0X3BlZXItPm5hbWUpLT51dGlsID0gZHN0X3BlZXI7CiAJCX0KIAkJZHN0X3BlZXItPnBlZXJfcmVmID0gY29weV9yZWYocmVmKTsKIAkJZHN0X3BlZXItPmZvcmNlID0gcGF0LT5mb3JjZTsKQEAgLTEzNzcsMTAgKzEzNzgsMTMgQEAKIAkJZnJlZShkc3RfbmFtZSk7CiAJfQogCisJc3RyaW5nX2xpc3RfY2xlYXIoJmRzdF9yZWZfaW5kZXgsIDApOworCiAJaWYgKGZsYWdzICYgTUFUQ0hfUkVGU19GT0xMT1dfVEFHUykKIAkJYWRkX21pc3NpbmdfdGFncyhzcmMsIGRzdCwgJmRzdF90YWlsKTsKIAogCWlmIChzZW5kX3BydW5lKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCBzcmNfcmVmX2luZGV4ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKIAkJLyogY2hlY2sgZm9yIG1pc3NpbmcgcmVmcyBvbiB0aGUgcmVtb3RlICovCiAJCWZvciAocmVmID0gKmRzdDsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKIAkJCWNoYXIgKnNyY19uYW1lOwpAQCAtMTM5MSwxMSArMTM5NSwxNSBAQAogCiAJCQlzcmNfbmFtZSA9IGdldF9yZWZfbWF0Y2gocnMsIG5yX3JlZnNwZWMsIHJlZiwgc2VuZF9taXJyb3IsIEZST01fRFNULCBOVUxMKTsKIAkJCWlmIChzcmNfbmFtZSkgewotCQkJCWlmICghZmluZF9yZWZfYnlfbmFtZShzcmMsIHNyY19uYW1lKSkKKwkJCQlpZiAoIXNyY19yZWZfaW5kZXgubnIpCisJCQkJCXByZXBhcmVfcmVmX2luZGV4KCZzcmNfcmVmX2luZGV4LCBzcmMpOworCQkJCWlmICghc3RyaW5nX2xpc3RfaGFzX3N0cmluZygmc3JjX3JlZl9pbmRleCwKKwkJCQkJICAgIHNyY19uYW1lKSkKIAkJCQkJcmVmLT5wZWVyX3JlZiA9IGFsbG9jX2RlbGV0ZV9yZWYoKTsKIAkJCQlmcmVlKHNyY19uYW1lKTsKIAkJCX0KIAkJfQorCQlzdHJpbmdfbGlzdF9jbGVhcigmc3JjX3JlZl9pbmRleCwgMCk7CiAJfQogCWlmIChlcnJzKQogCQlyZXR1cm4gLTE7CkBAIC0xNDc0LDggKzE0ODIsNyBAQAogCQlyZXQtPnJlbW90ZSA9IHJlbW90ZV9nZXQocmV0LT5yZW1vdGVfbmFtZSk7CiAJCWlmIChyZXQtPm1lcmdlX25yKSB7CiAJCQlpbnQgaTsKLQkJCXJldC0+bWVyZ2UgPSB4Y2FsbG9jKHNpemVvZigqcmV0LT5tZXJnZSksCi0JCQkJCSAgICAgcmV0LT5tZXJnZV9ucik7CisJCQlyZXQtPm1lcmdlID0geGNhbGxvYyhyZXQtPm1lcmdlX25yLCBzaXplb2YoKnJldC0+bWVyZ2UpKTsKIAkJCWZvciAoaSA9IDA7IGkgPCByZXQtPm1lcmdlX25yOyBpKyspIHsKIAkJCQlyZXQtPm1lcmdlW2ldID0geGNhbGxvYygxLCBzaXplb2YoKipyZXQtPm1lcmdlKSk7CiAJCQkJcmV0LT5tZXJnZVtpXS0+c3JjID0geHN0cmR1cChyZXQtPm1lcmdlX25hbWVbaV0pOwpkaWZmIC0tZ2l0IGEvcmVyZXJlLmMgYi9yZXJlcmUuYwppbmRleCA5OGUzZTI5Li42ZmRlOGY5IDEwMDY0NAotLS0gYS9yZXJlcmUuYworKysgYi9yZXJlcmUuYwpAQCAtMjk5LDcgKzI5OSw3IEBACiB7CiAJbW1maWxlX3QgbW1maWxlWzNdID0ge3tOVUxMfX07CiAJbW1idWZmZXJfdCByZXN1bHQgPSB7TlVMTCwgMH07Ci0Jc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOwogCWludCBwb3MsIGxlbiwgaSwgaHVua19ubzsKIAlzdHJ1Y3QgcmVyZXJlX2lvX21lbSBpbzsKIAlpbnQgbWFya2VyX3NpemUgPSBsbF9tZXJnZV9tYXJrZXJfc2l6ZShwYXRoKTsKQEAgLTM1OSw3ICszNTksNyBAQAogCiBzdGF0aWMgaW50IGNoZWNrX29uZV9jb25mbGljdChpbnQgaSwgaW50ICp0eXBlKQogewotCXN0cnVjdCBjYWNoZV9lbnRyeSAqZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmUgPSBhY3RpdmVfY2FjaGVbaV07CiAKIAlpZiAoIWNlX3N0YWdlKGUpKSB7CiAJCSp0eXBlID0gUkVTT0xWRUQ7CkBAIC0zNzQsOCArMzc0LDggQEAKIAogCS8qIE9ubHkgaGFuZGxlIHJlZ3VsYXIgZmlsZXMgd2l0aCBib3RoIHN0YWdlcyAjMiBhbmQgIzMgKi8KIAlpZiAoaSArIDEgPCBhY3RpdmVfbnIpIHsKLQkJc3RydWN0IGNhY2hlX2VudHJ5ICplMiA9IGFjdGl2ZV9jYWNoZVtpXTsKLQkJc3RydWN0IGNhY2hlX2VudHJ5ICplMyA9IGFjdGl2ZV9jYWNoZVtpICsgMV07CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqZTIgPSBhY3RpdmVfY2FjaGVbaV07CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqZTMgPSBhY3RpdmVfY2FjaGVbaSArIDFdOwogCQlpZiAoY2Vfc3RhZ2UoZTIpID09IDIgJiYKIAkJICAgIGNlX3N0YWdlKGUzKSA9PSAzICYmCiAJCSAgICBjZV9zYW1lX25hbWUoZSwgZTMpICYmCkBAIC0zOTgsNyArMzk4LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7KSB7CiAJCWludCBjb25mbGljdF90eXBlOwotCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmUgPSBhY3RpdmVfY2FjaGVbaV07CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqZSA9IGFjdGl2ZV9jYWNoZVtpXTsKIAkJaSA9IGNoZWNrX29uZV9jb25mbGljdChpLCAmY29uZmxpY3RfdHlwZSk7CiAJCWlmIChjb25mbGljdF90eXBlID09IFRIUkVFX1NUQUdFRCkKIAkJCXN0cmluZ19saXN0X2luc2VydChjb25mbGljdCwgKGNvbnN0IGNoYXIgKillLT5uYW1lKTsKQEAgLTQxNCw3ICs0MTQsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjspIHsKIAkJaW50IGNvbmZsaWN0X3R5cGU7Ci0JCXN0cnVjdCBjYWNoZV9lbnRyeSAqZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICplID0gYWN0aXZlX2NhY2hlW2ldOwogCQlpID0gY2hlY2tfb25lX2NvbmZsaWN0KGksICZjb25mbGljdF90eXBlKTsKIAkJaWYgKGNvbmZsaWN0X3R5cGUgPT0gUFVOVEVEKQogCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KG1lcmdlX3JyLCAoY29uc3QgY2hhciAqKWUtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvcmVzb2x2ZS11bmRvLmMgYi9yZXNvbHZlLXVuZG8uYwppbmRleCA2MzllYjljLi43NzEwMWY1IDEwMDY0NAotLS0gYS9yZXNvbHZlLXVuZG8uYworKysgYi9yZXNvbHZlLXVuZG8uYwpAQCAtMTE1LDcgKzExNSw3IEBACiAKIGludCB1bm1lcmdlX2luZGV4X2VudHJ5X2F0KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBpbnQgcG9zKQogewotCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKIAlzdHJ1Y3QgcmVzb2x2ZV91bmRvX2luZm8gKnJ1OwogCWludCBpLCBlcnIgPSAwLCBtYXRjaGVkOwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKLQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGlzdGF0ZS0+Y2FjaGVbaV07CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW2ldOwogCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfTUFUQ0hFRCkKIAkJCWkgPSB1bm1lcmdlX2luZGV4X2VudHJ5X2F0KGlzdGF0ZSwgaSk7CiAJfQpAQCAtMTgxLDcgKzE4MSw3IEBACiAJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKLQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGlzdGF0ZS0+Y2FjaGVbaV07CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW2ldOwogCQlpZiAoIW1hdGNoX3BhdGhzcGVjKHBhdGhzcGVjLCBjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSksIDAsIE5VTEwpKQogCQkJY29udGludWU7CiAJCWkgPSB1bm1lcmdlX2luZGV4X2VudHJ5X2F0KGlzdGF0ZSwgaSk7CmRpZmYgLS1naXQgYS9yZXZpc2lvbi5jIGIvcmV2aXNpb24uYwppbmRleCBhNjdiNjE1Li44NGNjYzA1IDEwMDY0NAotLS0gYS9yZXZpc2lvbi5jCisrKyBiL3JldmlzaW9uLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlICJkZWNvcmF0ZS5oIgogI2luY2x1ZGUgImxvZy10cmVlLmgiCiAjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJsaW5lLWxvZy5oIgogI2luY2x1ZGUgIm1haWxtYXAuaCIKIAogdm9sYXRpbGUgc2hvd19lYXJseV9vdXRwdXRfZm5fdCBzaG93X2Vhcmx5X291dHB1dDsKQEAgLTcwLDcgKzcxLDggQEAKIAlyZXR1cm4gb3VycyB8fCBlbWl0dGVkOwogfQogCi12b2lkIHNob3dfb2JqZWN0X3dpdGhfbmFtZShGSUxFICpvdXQsIHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3Qgc3RydWN0IG5hbWVfcGF0aCAqcGF0aCwgY29uc3QgY2hhciAqY29tcG9uZW50KQordm9pZCBzaG93X29iamVjdF93aXRoX25hbWUoRklMRSAqb3V0LCBzdHJ1Y3Qgb2JqZWN0ICpvYmosCisJCQkgICBjb25zdCBzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLCBjb25zdCBjaGFyICpjb21wb25lbnQpCiB7CiAJc3RydWN0IG5hbWVfcGF0aCBsZWFmOwogCWxlYWYudXAgPSAoc3RydWN0IG5hbWVfcGF0aCAqKXBhdGg7CkBAIC04Nyw3ICs4OSw5IEBACiAJCXN0cnVjdCBuYW1lX3BhdGggKnBhdGgsCiAJCWNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0JYWRkX29iamVjdF9hcnJheShvYmosIHBhdGhfbmFtZShwYXRoLCBuYW1lKSwgcCk7CisJY2hhciAqcG4gPSBwYXRoX25hbWUocGF0aCwgbmFtZSk7CisJYWRkX29iamVjdF9hcnJheShvYmosIHBuLCBwKTsKKwlmcmVlKHBuKTsKIH0KIAogc3RhdGljIHZvaWQgbWFya19ibG9iX3VuaW50ZXJlc3Rpbmcoc3RydWN0IGJsb2IgKmJsb2IpCkBAIC0xODYsNyArMTkwLDkgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGFkZF9wZW5kaW5nX29iamVjdF93aXRoX21vZGUoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIG1vZGUpCitzdGF0aWMgdm9pZCBhZGRfcGVuZGluZ19vYmplY3Rfd2l0aF9tb2RlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkJIHN0cnVjdCBvYmplY3QgKm9iaiwKKwkJCQkJIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIG1vZGUpCiB7CiAJaWYgKCFvYmopCiAJCXJldHVybjsKQEAgLTIwOSw3ICsyMTUsOCBAQAogCWFkZF9vYmplY3RfYXJyYXlfd2l0aF9tb2RlKG9iaiwgbmFtZSwgJnJldnMtPnBlbmRpbmcsIG1vZGUpOwogfQogCi12b2lkIGFkZF9wZW5kaW5nX29iamVjdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSkKK3ZvaWQgYWRkX3BlbmRpbmdfb2JqZWN0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCXN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlhZGRfcGVuZGluZ19vYmplY3Rfd2l0aF9tb2RlKHJldnMsIG9iaiwgbmFtZSwgU19JRklOVkFMSUQpOwogfQpAQCAtMjI2LDcgKzIzMyw5IEBACiAJYWRkX3BlbmRpbmdfb2JqZWN0KHJldnMsIG9iaiwgIkhFQUQiKTsKIH0KIAotc3RhdGljIHN0cnVjdCBvYmplY3QgKmdldF9yZWZlcmVuY2Uoc3RydWN0IHJldl9pbmZvICpyZXZzLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCitzdGF0aWMgc3RydWN0IG9iamVjdCAqZ2V0X3JlZmVyZW5jZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJICAgIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7CiAKQEAgLTI0Nyw3ICsyNTYsOCBAQAogCWFkZF9wZW5kaW5nX29iamVjdChyZXZzLCBvYmplY3QsIG5hbWUpOwogfQogCi1zdGF0aWMgc3RydWN0IGNvbW1pdCAqaGFuZGxlX2NvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBvYmplY3QgKm9iamVjdCwgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpoYW5kbGVfY29tbWl0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkgICAgc3RydWN0IG9iamVjdCAqb2JqZWN0LCBjb25zdCBjaGFyICpuYW1lKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBvYmplY3QtPmZsYWdzOwogCkBAIC0zMzMsNiArMzQzLDgwIEBACiB9CiAKIC8qCisgKiBBIGRlZmluaXRpb24gb2YgInJlbGV2YW50IiBjb21taXQgdGhhdCB3ZSBjYW4gdXNlIHRvIHNpbXBsaWZ5IGxpbWl0ZWQgZ3JhcGhzCisgKiBieSBlbGltaW5hdGluZyBzaWRlIGJyYW5jaGVzLgorICoKKyAqIEEgInJlbGV2YW50IiBjb21taXQgaXMgb25lIHRoYXQgaXMgIVVOSU5URVJFU1RJTkcgKGllIHdlIGFyZSBpbmNsdWRpbmcgaXQKKyAqIGluIG91ciBsaXN0KSwgb3IgdGhhdCBpcyBhIHNwZWNpZmllZCBCT1RUT00gY29tbWl0LiBUaGVuIGFmdGVyIGNvbXB1dGluZworICogYSBsaW1pdGVkIGxpc3QsIGR1cmluZyBwcm9jZXNzaW5nIHdlIGNhbiBnZW5lcmFsbHkgaWdub3JlIGJvdW5kYXJ5IG1lcmdlcworICogY29taW5nIGZyb20gb3V0c2lkZSB0aGUgZ3JhcGgsIChpZSBmcm9tIGlycmVsZXZhbnQgcGFyZW50cyksIGFuZCB0cmVhdAorICogdGhvc2UgbWVyZ2VzIGFzIGlmIHRoZXkgd2VyZSBzaW5nbGUtcGFyZW50LiBUUkVFU0FNRSBpcyBkZWZpbmVkIHRvIGNvbnNpZGVyCisgKiBvbmx5IHJlbGV2YW50IHBhcmVudHMsIGlmIGFueS4gSWYgd2UgYXJlIFRSRUVTQU1FIHRvIG91ciBvbi1ncmFwaCBwYXJlbnRzLAorICogd2UgZG9uJ3QgY2FyZSBpZiB3ZSB3ZXJlICFUUkVFU0FNRSB0byBub24tZ3JhcGggcGFyZW50cy4KKyAqCisgKiBUcmVhdGluZyBib3R0b20gY29tbWl0cyBhcyByZWxldmFudCBlbnN1cmVzIHRoYXQgYSBsaW1pdGVkIGdyYXBoJ3MKKyAqIGNvbm5lY3Rpb24gdG8gdGhlIGFjdHVhbCBib3R0b20gY29tbWl0IGlzIG5vdCB2aWV3ZWQgYXMgYSBzaWRlIGJyYW5jaCwgYnV0CisgKiB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlIGdyYXBoLiBGb3IgZXhhbXBsZToKKyAqCisgKiAgIC4uLi5aLi4uQS0tLVgtLS1vLS0tby0tLUIKKyAqICAgICAgICAuICAgICAvCisgKiAgICAgICAgIFctLS1ZCisgKgorICogV2hlbiBjb21wdXRpbmcgIkEuLkIiLCB0aGUgQS1YIGNvbm5lY3Rpb24gaXMgYXQgbGVhc3QgYXMgaW1wb3J0YW50IGFzCisgKiBZLVgsIGRlc3BpdGUgQSBiZWluZyBmbGFnZ2VkIFVOSU5URVJFU1RJTkcuCisgKgorICogQW5kIHdoZW4gY29tcHV0aW5nIC0tYW5jZXN0cnktcGF0aCAiQS4uQiIsIHRoZSBBLVggY29ubmVjdGlvbiBpcyBtb3JlCisgKiBpbXBvcnRhbnQgdGhhbiBZLVgsIGRlc3BpdGUgYm90aCBBIGFuZCBZIGJlaW5nIGZsYWdnZWQgVU5JTlRFUkVTVElORy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcmVsZXZhbnRfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlyZXR1cm4gKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgKFVOSU5URVJFU1RJTkcgfCBCT1RUT00pKSAhPSBVTklOVEVSRVNUSU5HOworfQorCisvKgorICogUmV0dXJuIGEgc2luZ2xlIHJlbGV2YW50IGNvbW1pdCBmcm9tIGEgcGFyZW50IGxpc3QuIElmIHdlIGFyZSBhIFRSRUVTQU1FCisgKiBjb21taXQsIGFuZCB0aGlzIHNlbGVjdHMgb25lIG9mIG91ciBwYXJlbnRzLCB0aGVuIHdlIGNhbiBzYWZlbHkgc2ltcGxpZnkgdG8KKyAqIHRoYXQgcGFyZW50LgorICovCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqb25lX3JlbGV2YW50X3BhcmVudChjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJCSAgc3RydWN0IGNvbW1pdF9saXN0ICpvcmlnKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IG9yaWc7CisJc3RydWN0IGNvbW1pdCAqcmVsZXZhbnQgPSBOVUxMOworCisJaWYgKCFvcmlnKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogRm9yIDEtcGFyZW50IGNvbW1pdHMsIG9yIGlmIGZpcnN0LXBhcmVudC1vbmx5LCB0aGVuIHJldHVybiB0aGF0CisJICogZmlyc3QgcGFyZW50IChldmVuIGlmIG5vdCAicmVsZXZhbnQiIGJ5IHRoZSBhYm92ZSBkZWZpbml0aW9uKS4KKwkgKiBUUkVFU0FNRSB3aWxsIGhhdmUgYmVlbiBzZXQgcHVyZWx5IG9uIHRoYXQgcGFyZW50LgorCSAqLworCWlmIChyZXZzLT5maXJzdF9wYXJlbnRfb25seSB8fCAhb3JpZy0+bmV4dCkKKwkJcmV0dXJuIG9yaWctPml0ZW07CisKKwkvKgorCSAqIEZvciBtdWx0aS1wYXJlbnQgY29tbWl0cywgaWRlbnRpZnkgYSBzb2xlIHJlbGV2YW50IHBhcmVudCwgaWYgYW55LgorCSAqIElmIHdlIGhhdmUgb25seSBvbmUgcmVsZXZhbnQgcGFyZW50LCB0aGVuIFRSRUVTQU1FIHdpbGwgYmUgc2V0IHB1cmVseQorCSAqIHdpdGggcmVnYXJkIHRvIHRoYXQgcGFyZW50LCBhbmQgd2UgY2FuIHNpbXBsaWZ5IGFjY29yZGluZ2x5LgorCSAqCisJICogSWYgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIHJlbGV2YW50IHBhcmVudCwgb3Igbm8gcmVsZXZhbnQgcGFyZW50cworCSAqIChhbmQgbXVsdGlwbGUgaXJyZWxldmFudCBvbmVzKSwgdGhlbiB3ZSBjYW4ndCBzZWxlY3QgYSBwYXJlbnQgaGVyZQorCSAqIGFuZCByZXR1cm4gTlVMTC4KKwkgKi8KKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsaXN0LT5pdGVtOworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJaWYgKHJlbGV2YW50X2NvbW1pdChjb21taXQpKSB7CisJCQlpZiAocmVsZXZhbnQpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlyZWxldmFudCA9IGNvbW1pdDsKKwkJfQorCX0KKwlyZXR1cm4gcmVsZXZhbnQ7Cit9CisKKy8qCiAgKiBUaGUgZ29hbCBpcyB0byBnZXQgUkVWX1RSRUVfTkVXIGFzIHRoZSByZXN1bHQgb25seSBpZiB0aGUKICAqIGRpZmYgY29uc2lzdHMgb2YgYWxsICcrJyAoYW5kIG5vIG90aGVyIGNoYW5nZXMpLCBSRVZfVFJFRV9PTEQKICAqIGlmIHRoZSB3aG9sZSBkaWZmIGlzIHJlbW92YWwgb2Ygb2xkIGRhdGEsIGFuZCBvdGhlcndpc2UKQEAgLTM2OCw3ICs0NTIsOCBAQAogCURJRkZfT1BUX1NFVChvcHRpb25zLCBIQVNfQ0hBTkdFUyk7CiB9CiAKLXN0YXRpYyBpbnQgcmV2X2NvbXBhcmVfdHJlZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKnBhcmVudCwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQorc3RhdGljIGludCByZXZfY29tcGFyZV90cmVlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgICBzdHJ1Y3QgY29tbWl0ICpwYXJlbnQsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKIHsKIAlzdHJ1Y3QgdHJlZSAqdDEgPSBwYXJlbnQtPnRyZWU7CiAJc3RydWN0IHRyZWUgKnQyID0gY29tbWl0LT50cmVlOwpAQCAtNDI5LDEwICs1MTQsMTI1IEBACiAJcmV0dXJuIHJldHZhbCA+PSAwICYmICh0cmVlX2RpZmZlcmVuY2UgPT0gUkVWX1RSRUVfU0FNRSk7CiB9CiAKK3N0cnVjdCB0cmVlc2FtZV9zdGF0ZSB7CisJdW5zaWduZWQgaW50IG5wYXJlbnRzOworCXVuc2lnbmVkIGNoYXIgdHJlZXNhbWVbRkxFWF9BUlJBWV07Cit9OworCitzdGF0aWMgc3RydWN0IHRyZWVzYW1lX3N0YXRlICppbml0aWFsaXNlX3RyZWVzYW1lKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXVuc2lnbmVkIG4gPSBjb21taXRfbGlzdF9jb3VudChjb21taXQtPnBhcmVudHMpOworCXN0cnVjdCB0cmVlc2FtZV9zdGF0ZSAqc3QgPSB4Y2FsbG9jKDEsIHNpemVvZigqc3QpICsgbik7CisJc3QtPm5wYXJlbnRzID0gbjsKKwlhZGRfZGVjb3JhdGlvbigmcmV2cy0+dHJlZXNhbWUsICZjb21taXQtPm9iamVjdCwgc3QpOworCXJldHVybiBzdDsKK30KKworLyoKKyAqIE11c3QgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIHJlbW92aW5nIHRoZSBudGhfcGFyZW50IGZyb20gYSBjb21taXQncworICogcGFyZW50IGxpc3QsIGlmIHdlIGFyZSBtYWludGFpbmluZyB0aGUgcGVyLXBhcmVudCB0cmVlc2FtZVtdIGRlY29yYXRpb24uCisgKiBUaGlzIGRvZXMgbm90IHJlY2FsY3VsYXRlIHRoZSBtYXN0ZXIgVFJFRVNBTUUgZmxhZyAtIHVwZGF0ZV90cmVlc2FtZSgpCisgKiBzaG91bGQgYmUgY2FsbGVkIHRvIHVwZGF0ZSBpdCBhZnRlciBhIHNlcXVlbmNlIG9mIHRyZWVzYW1lW10gbW9kaWZpY2F0aW9ucworICogdGhhdCBtYXkgaGF2ZSBhZmZlY3RlZCBpdC4KKyAqLworc3RhdGljIGludCBjb21wYWN0X3RyZWVzYW1lKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0LCB1bnNpZ25lZCBudGhfcGFyZW50KQoreworCXN0cnVjdCB0cmVlc2FtZV9zdGF0ZSAqc3Q7CisJaW50IG9sZF9zYW1lOworCisJaWYgKCFjb21taXQtPnBhcmVudHMpIHsKKwkJLyoKKwkJICogSGF2ZSBqdXN0IHJlbW92ZWQgdGhlIG9ubHkgcGFyZW50IGZyb20gYSBub24tbWVyZ2UuCisJCSAqIERpZmZlcmVudCBoYW5kbGluZywgYXMgd2UgbGFjayBkZWNvcmF0aW9uLgorCQkgKi8KKwkJaWYgKG50aF9wYXJlbnQgIT0gMCkKKwkJCWRpZSgiY29tcGFjdF90cmVlc2FtZSAldSIsIG50aF9wYXJlbnQpOworCQlvbGRfc2FtZSA9ICEhKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVFJFRVNBTUUpOworCQlpZiAocmV2X3NhbWVfdHJlZV9hc19lbXB0eShyZXZzLCBjb21taXQpKQorCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVFJFRVNBTUU7CisJCWVsc2UKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzICY9IH5UUkVFU0FNRTsKKwkJcmV0dXJuIG9sZF9zYW1lOworCX0KKworCXN0ID0gbG9va3VwX2RlY29yYXRpb24oJnJldnMtPnRyZWVzYW1lLCAmY29tbWl0LT5vYmplY3QpOworCWlmICghc3QgfHwgbnRoX3BhcmVudCA+PSBzdC0+bnBhcmVudHMpCisJCWRpZSgiY29tcGFjdF90cmVlc2FtZSAldSIsIG50aF9wYXJlbnQpOworCisJb2xkX3NhbWUgPSBzdC0+dHJlZXNhbWVbbnRoX3BhcmVudF07CisJbWVtbW92ZShzdC0+dHJlZXNhbWUgKyBudGhfcGFyZW50LAorCQlzdC0+dHJlZXNhbWUgKyBudGhfcGFyZW50ICsgMSwKKwkJc3QtPm5wYXJlbnRzIC0gbnRoX3BhcmVudCAtIDEpOworCisJLyoKKwkgKiBJZiB3ZSd2ZSBqdXN0IGJlY29tZSBhIG5vbi1tZXJnZSBjb21taXQsIHVwZGF0ZSBUUkVFU0FNRQorCSAqIGltbWVkaWF0ZWx5LCBhbmQgcmVtb3ZlIHRoZSBuby1sb25nZXItbmVlZGVkIGRlY29yYXRpb24uCisJICogSWYgc3RpbGwgYSBtZXJnZSwgZGVmZXIgdXBkYXRlIHVudGlsIHVwZGF0ZV90cmVlc2FtZSgpLgorCSAqLworCWlmICgtLXN0LT5ucGFyZW50cyA9PSAxKSB7CisJCWlmIChjb21taXQtPnBhcmVudHMtPm5leHQpCisJCQlkaWUoImNvbXBhY3RfdHJlZXNhbWUgcGFyZW50cyBtaXNtYXRjaCIpOworCQlpZiAoc3QtPnRyZWVzYW1lWzBdICYmIHJldnMtPmRlbnNlKQorCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVFJFRVNBTUU7CisJCWVsc2UKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzICY9IH5UUkVFU0FNRTsKKwkJZnJlZShhZGRfZGVjb3JhdGlvbigmcmV2cy0+dHJlZXNhbWUsICZjb21taXQtPm9iamVjdCwgTlVMTCkpOworCX0KKworCXJldHVybiBvbGRfc2FtZTsKK30KKworc3RhdGljIHVuc2lnbmVkIHVwZGF0ZV90cmVlc2FtZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlpZiAoY29tbWl0LT5wYXJlbnRzICYmIGNvbW1pdC0+cGFyZW50cy0+bmV4dCkgeworCQl1bnNpZ25lZCBuOworCQlzdHJ1Y3QgdHJlZXNhbWVfc3RhdGUgKnN0OworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJCXVuc2lnbmVkIHJlbGV2YW50X3BhcmVudHM7CisJCXVuc2lnbmVkIHJlbGV2YW50X2NoYW5nZSwgaXJyZWxldmFudF9jaGFuZ2U7CisKKwkJc3QgPSBsb29rdXBfZGVjb3JhdGlvbigmcmV2cy0+dHJlZXNhbWUsICZjb21taXQtPm9iamVjdCk7CisJCWlmICghc3QpCisJCQlkaWUoInVwZGF0ZV90cmVlc2FtZSAlcyIsIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKwkJcmVsZXZhbnRfcGFyZW50cyA9IDA7CisJCXJlbGV2YW50X2NoYW5nZSA9IGlycmVsZXZhbnRfY2hhbmdlID0gMDsKKwkJZm9yIChwID0gY29tbWl0LT5wYXJlbnRzLCBuID0gMDsgcDsgbisrLCBwID0gcC0+bmV4dCkgeworCQkJaWYgKHJlbGV2YW50X2NvbW1pdChwLT5pdGVtKSkgeworCQkJCXJlbGV2YW50X2NoYW5nZSB8PSAhc3QtPnRyZWVzYW1lW25dOworCQkJCXJlbGV2YW50X3BhcmVudHMrKzsKKwkJCX0gZWxzZQorCQkJCWlycmVsZXZhbnRfY2hhbmdlIHw9ICFzdC0+dHJlZXNhbWVbbl07CisJCX0KKwkJaWYgKHJlbGV2YW50X3BhcmVudHMgPyByZWxldmFudF9jaGFuZ2UgOiBpcnJlbGV2YW50X2NoYW5nZSkKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzICY9IH5UUkVFU0FNRTsKKwkJZWxzZQorCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVFJFRVNBTUU7CisJfQorCisJcmV0dXJuIGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVFJFRVNBTUU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxpbWl0aW5nX2Nhbl9pbmNyZWFzZV90cmVlc2FtZShjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJLyoKKwkgKiBUUkVFU0FNRSBpcyBpcnJlbGV2YW50IHVubGVzcyBwcnVuZSAmJiBkZW5zZTsKKwkgKiBpZiBzaW1wbGlmeV9oaXN0b3J5IGlzIHNldCwgd2UgY2FuJ3QgaGF2ZSBhIG1peHR1cmUgb2YgVFJFRVNBTUUgYW5kCisJICogICAgIVRSRUVTQU1FIElOVEVSRVNUSU5HIHBhcmVudHMgKGFuZCB3ZSBkb24ndCBoYXZlIHRyZWVzYW1lW10KKwkgKiAgICBkZWNvcmF0aW9uIGFueXdheSk7CisJICogaWYgZmlyc3RfcGFyZW50X29ubHkgaXMgc2V0LCB0aGVuIHRoZSBUUkVFU0FNRSBmbGFnIGlzIGxvY2tlZAorCSAqICAgIGFnYWluc3QgdGhlIGZpcnN0IHBhcmVudCAoYW5kIGFnYWluIHdlIGxhY2sgdHJlZXNhbWVbXSBkZWNvcmF0aW9uKS4KKwkgKi8KKwlyZXR1cm4gcmV2cy0+cHJ1bmUgJiYgcmV2cy0+ZGVuc2UgJiYKKwkgICAgICAgIXJldnMtPnNpbXBsaWZ5X2hpc3RvcnkgJiYKKwkgICAgICAgIXJldnMtPmZpcnN0X3BhcmVudF9vbmx5OworfQorCiBzdGF0aWMgdm9pZCB0cnlfdG9fc2ltcGxpZnlfY29tbWl0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQogewogCXN0cnVjdCBjb21taXRfbGlzdCAqKnBwLCAqcGFyZW50OwotCWludCB0cmVlX2NoYW5nZWQgPSAwLCB0cmVlX3NhbWUgPSAwLCBudGhfcGFyZW50ID0gMDsKKwlzdHJ1Y3QgdHJlZXNhbWVfc3RhdGUgKnRzID0gTlVMTDsKKwlpbnQgcmVsZXZhbnRfY2hhbmdlID0gMCwgaXJyZWxldmFudF9jaGFuZ2UgPSAwOworCWludCByZWxldmFudF9wYXJlbnRzLCBudGhfcGFyZW50OwogCiAJLyoKIAkgKiBJZiB3ZSBkb24ndCBkbyBwcnVuaW5nLCBldmVyeXRoaW5nIGlzIGludGVyZXN0aW5nCkBAIC00NTYsMzMgKzY1Niw1NCBAQAogCWlmICghcmV2cy0+ZGVuc2UgJiYgIWNvbW1pdC0+cGFyZW50cy0+bmV4dCkKIAkJcmV0dXJuOwogCi0JcHAgPSAmY29tbWl0LT5wYXJlbnRzOwotCXdoaWxlICgocGFyZW50ID0gKnBwKSAhPSBOVUxMKSB7CisJZm9yIChwcCA9ICZjb21taXQtPnBhcmVudHMsIG50aF9wYXJlbnQgPSAwLCByZWxldmFudF9wYXJlbnRzID0gMDsKKwkgICAgIChwYXJlbnQgPSAqcHApICE9IE5VTEw7CisJICAgICBwcCA9ICZwYXJlbnQtPm5leHQsIG50aF9wYXJlbnQrKykgewogCQlzdHJ1Y3QgY29tbWl0ICpwID0gcGFyZW50LT5pdGVtOworCQlpZiAocmVsZXZhbnRfY29tbWl0KHApKQorCQkJcmVsZXZhbnRfcGFyZW50cysrOwogCi0JCS8qCi0JCSAqIERvIG5vdCBjb21wYXJlIHdpdGggbGF0ZXIgcGFyZW50cyB3aGVuIHdlIGNhcmUgb25seSBhYm91dAotCQkgKiB0aGUgZmlyc3QgcGFyZW50IGNoYWluLCBpbiBvcmRlciB0byBhdm9pZCBkZXJhaWxpbmcgdGhlCi0JCSAqIHRyYXZlcnNhbCB0byBmb2xsb3cgYSBzaWRlIGJyYW5jaCB0aGF0IGJyb3VnaHQgZXZlcnl0aGluZwotCQkgKiBpbiB0aGUgcGF0aCB3ZSBhcmUgbGltaXRlZCB0byBieSB0aGUgcGF0aHNwZWMuCi0JCSAqLwotCQlpZiAocmV2cy0+Zmlyc3RfcGFyZW50X29ubHkgJiYgbnRoX3BhcmVudCsrKQotCQkJYnJlYWs7CisJCWlmIChudGhfcGFyZW50ID09IDEpIHsKKwkJCS8qCisJCQkgKiBUaGlzIG91ciBzZWNvbmQgbG9vcCBpdGVyYXRpb24gLSBzbyB3ZSBub3cga25vdworCQkJICogd2UncmUgZGVhbGluZyB3aXRoIGEgbWVyZ2UuCisJCQkgKgorCQkJICogRG8gbm90IGNvbXBhcmUgd2l0aCBsYXRlciBwYXJlbnRzIHdoZW4gd2UgY2FyZSBvbmx5IGFib3V0CisJCQkgKiB0aGUgZmlyc3QgcGFyZW50IGNoYWluLCBpbiBvcmRlciB0byBhdm9pZCBkZXJhaWxpbmcgdGhlCisJCQkgKiB0cmF2ZXJzYWwgdG8gZm9sbG93IGEgc2lkZSBicmFuY2ggdGhhdCBicm91Z2h0IGV2ZXJ5dGhpbmcKKwkJCSAqIGluIHRoZSBwYXRoIHdlIGFyZSBsaW1pdGVkIHRvIGJ5IHRoZSBwYXRoc3BlYy4KKwkJCSAqLworCQkJaWYgKHJldnMtPmZpcnN0X3BhcmVudF9vbmx5KQorCQkJCWJyZWFrOworCQkJLyoKKwkJCSAqIElmIHRoaXMgd2lsbCByZW1haW4gYSBwb3RlbnRpYWxseS1zaW1wbGlmaWFibGUKKwkJCSAqIG1lcmdlLCByZW1lbWJlciBwZXItcGFyZW50IHRyZWVzYW1lIGlmIG5lZWRlZC4KKwkJCSAqIEluaXRpYWxpc2UgdGhlIGFycmF5IHdpdGggdGhlIGNvbXBhcmlzb24gZnJvbSBvdXIKKwkJCSAqIGZpcnN0IGl0ZXJhdGlvbi4KKwkJCSAqLworCQkJaWYgKHJldnMtPnRyZWVzYW1lLm5hbWUgJiYKKwkJCSAgICAhcmV2cy0+c2ltcGxpZnlfaGlzdG9yeSAmJgorCQkJICAgICEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkgeworCQkJCXRzID0gaW5pdGlhbGlzZV90cmVlc2FtZShyZXZzLCBjb21taXQpOworCQkJCWlmICghKGlycmVsZXZhbnRfY2hhbmdlIHx8IHJlbGV2YW50X2NoYW5nZSkpCisJCQkJCXRzLT50cmVlc2FtZVswXSA9IDE7CisJCQl9CisJCX0KIAkJaWYgKHBhcnNlX2NvbW1pdChwKSA8IDApCiAJCQlkaWUoImNhbm5vdCBzaW1wbGlmeSBjb21taXQgJXMgKGJlY2F1c2Ugb2YgJXMpIiwKIAkJCSAgICBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSwKIAkJCSAgICBzaGExX3RvX2hleChwLT5vYmplY3Quc2hhMSkpOwogCQlzd2l0Y2ggKHJldl9jb21wYXJlX3RyZWUocmV2cywgcCwgY29tbWl0KSkgewogCQljYXNlIFJFVl9UUkVFX1NBTUU6Ci0JCQl0cmVlX3NhbWUgPSAxOwotCQkJaWYgKCFyZXZzLT5zaW1wbGlmeV9oaXN0b3J5IHx8IChwLT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkgeworCQkJaWYgKCFyZXZzLT5zaW1wbGlmeV9oaXN0b3J5IHx8ICFyZWxldmFudF9jb21taXQocCkpIHsKIAkJCQkvKiBFdmVuIGlmIGEgbWVyZ2Ugd2l0aCBhbiB1bmludGVyZXN0aW5nCiAJCQkJICogc2lkZSBicmFuY2ggYnJvdWdodCB0aGUgZW50aXJlIGNoYW5nZQogCQkJCSAqIHdlIGFyZSBpbnRlcmVzdGVkIGluLCB3ZSBkbyBub3Qgd2FudAogCQkJCSAqIHRvIGxvc2UgdGhlIG90aGVyIGJyYW5jaGVzIG9mIHRoaXMKIAkJCQkgKiBtZXJnZSwgc28gd2UganVzdCBrZWVwIGdvaW5nLgogCQkJCSAqLwotCQkJCXBwID0gJnBhcmVudC0+bmV4dDsKKwkJCQlpZiAodHMpCisJCQkJCXRzLT50cmVlc2FtZVtudGhfcGFyZW50XSA9IDE7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlwYXJlbnQtPm5leHQgPSBOVUxMOwpAQCAtNTEwLDE1ICs3MzEsMjcgQEAKIAkJLyogZmFsbHRocm91Z2ggKi8KIAkJY2FzZSBSRVZfVFJFRV9PTEQ6CiAJCWNhc2UgUkVWX1RSRUVfRElGRkVSRU5UOgotCQkJdHJlZV9jaGFuZ2VkID0gMTsKLQkJCXBwID0gJnBhcmVudC0+bmV4dDsKKwkJCWlmIChyZWxldmFudF9jb21taXQocCkpCisJCQkJcmVsZXZhbnRfY2hhbmdlID0gMTsKKwkJCWVsc2UKKwkJCQlpcnJlbGV2YW50X2NoYW5nZSA9IDE7CiAJCQljb250aW51ZTsKIAkJfQogCQlkaWUoImJhZCB0cmVlIGNvbXBhcmUgZm9yIGNvbW1pdCAlcyIsIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKIAl9Ci0JaWYgKHRyZWVfY2hhbmdlZCAmJiAhdHJlZV9zYW1lKQotCQlyZXR1cm47Ci0JY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVFJFRVNBTUU7CisKKwkvKgorCSAqIFRSRUVTQU1FIGlzIHN0cmFpZ2h0Zm9yd2FyZCBmb3Igc2luZ2xlLXBhcmVudCBjb21taXRzLiBGb3IgbWVyZ2UKKwkgKiBjb21taXRzLCBpdCBpcyBtb3N0IHVzZWZ1bCB0byBkZWZpbmUgaXQgc28gdGhhdCAiaXJyZWxldmFudCIKKwkgKiBwYXJlbnRzIGNhbm5vdCBtYWtlIHVzICFUUkVFU0FNRSAtIGlmIHdlIGhhdmUgYW55IHJlbGV2YW50CisJICogcGFyZW50cywgdGhlbiB3ZSBvbmx5IGNvbnNpZGVyIFRSRUVTQU1FbmVzcyB3aXRoIHJlc3BlY3QgdG8gdGhlbSwKKwkgKiBhbGxvd2luZyBpcnJlbGV2YW50IG1lcmdlcyBmcm9tIHVuaW50ZXJlc3RpbmcgYnJhbmNoZXMgdG8gYmUKKwkgKiBzaW1wbGlmaWVkIGF3YXkuIE9ubHkgaWYgd2UgaGF2ZSBvbmx5IGlycmVsZXZhbnQgcGFyZW50cyBkbyB3ZQorCSAqIGJhc2UgVFJFRVNBTUUgb24gdGhlbS4gTm90ZSB0aGF0IHRoaXMgbG9naWMgaXMgcmVwbGljYXRlZCBpbgorCSAqIHVwZGF0ZV90cmVlc2FtZSwgd2hpY2ggc2hvdWxkIGJlIGtlcHQgaW4gc3luYy4KKwkgKi8KKwlpZiAocmVsZXZhbnRfcGFyZW50cyA/ICFyZWxldmFudF9jaGFuZ2UgOiAhaXJyZWxldmFudF9jaGFuZ2UpCisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFRSRUVTQU1FOwogfQogCiBzdGF0aWMgdm9pZCBjb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZV9jYWNoZWQoc3RydWN0IGNvbW1pdCAqcCwgc3RydWN0IGNvbW1pdF9saXN0ICoqaGVhZCwKQEAgLTgwMSwxNiArMTAzNCwxMiBAQAogICogdG8gZmlsdGVyIHRoZSByZXN1bHQgb2YgIkEuLkIiIGZ1cnRoZXIgdG8gdGhlIG9uZXMgdGhhdCBjYW4gYWN0dWFsbHkKICAqIHJlYWNoIEEuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbGxlY3RfYm90dG9tX2NvbW1pdHMoc3RydWN0IHJldl9pbmZvICpyZXZzKQorc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqY29sbGVjdF9ib3R0b21fY29tbWl0cyhzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpCiB7Ci0Jc3RydWN0IGNvbW1pdF9saXN0ICpib3R0b20gPSBOVUxMOwotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCByZXZzLT5jbWRsaW5lLm5yOyBpKyspIHsKLQkJc3RydWN0IHJldl9jbWRsaW5lX2VudHJ5ICplbGVtID0gJnJldnMtPmNtZGxpbmUucmV2W2ldOwotCQlpZiAoKGVsZW0tPmZsYWdzICYgVU5JTlRFUkVTVElORykgJiYKLQkJICAgIGVsZW0tPml0ZW0tPnR5cGUgPT0gT0JKX0NPTU1JVCkKLQkJCWNvbW1pdF9saXN0X2luc2VydCgoc3RydWN0IGNvbW1pdCAqKWVsZW0tPml0ZW0sICZib3R0b20pOwotCX0KKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmVsZW0sICpib3R0b20gPSBOVUxMOworCWZvciAoZWxlbSA9IGxpc3Q7IGVsZW07IGVsZW0gPSBlbGVtLT5uZXh0KQorCQlpZiAoZWxlbS0+aXRlbS0+b2JqZWN0LmZsYWdzICYgQk9UVE9NKQorCQkJY29tbWl0X2xpc3RfaW5zZXJ0KGVsZW0tPml0ZW0sICZib3R0b20pOwogCXJldHVybiBib3R0b207CiB9CiAKQEAgLTg0MSw3ICsxMDcwLDcgQEAKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKmJvdHRvbSA9IE5VTEw7CiAKIAlpZiAocmV2cy0+YW5jZXN0cnlfcGF0aCkgewotCQlib3R0b20gPSBjb2xsZWN0X2JvdHRvbV9jb21taXRzKHJldnMpOworCQlib3R0b20gPSBjb2xsZWN0X2JvdHRvbV9jb21taXRzKGxpc3QpOwogCQlpZiAoIWJvdHRvbSkKIAkJCWRpZSgiLS1hbmNlc3RyeS1wYXRoIGdpdmVuIGJ1dCB0aGVyZSBhcmUgbm8gYm90dG9tIGNvbW1pdHMiKTsKIAl9CkBAIC04OTQsMTAgKzExMjMsMjYgQEAKIAkJZnJlZV9jb21taXRfbGlzdChib3R0b20pOwogCX0KIAorCS8qCisJICogQ2hlY2sgaWYgYW55IGNvbW1pdHMgaGF2ZSBiZWNvbWUgVFJFRVNBTUUgYnkgc29tZSBvZiB0aGVpciBwYXJlbnRzCisJICogYmVjb21pbmcgVU5JTlRFUkVTVElORy4KKwkgKi8KKwlpZiAobGltaXRpbmdfY2FuX2luY3JlYXNlX3RyZWVzYW1lKHJldnMpKQorCQlmb3IgKGxpc3QgPSBuZXdsaXN0OyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdCAqYyA9IGxpc3QtPml0ZW07CisJCQlpZiAoYy0+b2JqZWN0LmZsYWdzICYgKFVOSU5URVJFU1RJTkcgfCBUUkVFU0FNRSkpCisJCQkJY29udGludWU7CisJCQl1cGRhdGVfdHJlZXNhbWUocmV2cywgYyk7CisJCX0KKwogCXJldnMtPmNvbW1pdHMgPSBuZXdsaXN0OwogCXJldHVybiAwOwogfQogCisvKgorICogQWRkIGFuIGVudHJ5IHRvIHJlZnMtPmNtZGxpbmUgd2l0aCB0aGUgc3BlY2lmaWVkIGluZm9ybWF0aW9uLgorICogKm5hbWUgaXMgY29waWVkLgorICovCiBzdGF0aWMgdm9pZCBhZGRfcmV2X2NtZGxpbmUoc3RydWN0IHJldl9pbmZvICpyZXZzLAogCQkJICAgIHN0cnVjdCBvYmplY3QgKml0ZW0sCiAJCQkgICAgY29uc3QgY2hhciAqbmFtZSwKQEAgLTkwOSwxMiArMTE1NCwyNSBAQAogCiAJQUxMT0NfR1JPVyhpbmZvLT5yZXYsIG5yICsgMSwgaW5mby0+YWxsb2MpOwogCWluZm8tPnJldltucl0uaXRlbSA9IGl0ZW07Ci0JaW5mby0+cmV2W25yXS5uYW1lID0gbmFtZTsKKwlpbmZvLT5yZXZbbnJdLm5hbWUgPSB4c3RyZHVwKG5hbWUpOwogCWluZm8tPnJldltucl0ud2hlbmNlID0gd2hlbmNlOwogCWluZm8tPnJldltucl0uZmxhZ3MgPSBmbGFnczsKIAlpbmZvLT5ucisrOwogfQogCitzdGF0aWMgdm9pZCBhZGRfcmV2X2NtZGxpbmVfbGlzdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJIHN0cnVjdCBjb21taXRfbGlzdCAqY29tbWl0X2xpc3QsCisJCQkJIGludCB3aGVuY2UsCisJCQkJIHVuc2lnbmVkIGZsYWdzKQoreworCXdoaWxlIChjb21taXRfbGlzdCkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSAmY29tbWl0X2xpc3QtPml0ZW0tPm9iamVjdDsKKwkJYWRkX3Jldl9jbWRsaW5lKHJldnMsIG9iamVjdCwgc2hhMV90b19oZXgob2JqZWN0LT5zaGExKSwKKwkJCQl3aGVuY2UsIGZsYWdzKTsKKwkJY29tbWl0X2xpc3QgPSBjb21taXRfbGlzdC0+bmV4dDsKKwl9Cit9CisKIHN0cnVjdCBhbGxfcmVmc19jYiB7CiAJaW50IGFsbF9mbGFnczsKIAlpbnQgd2FybmVkX2JhZF9yZWZsb2c7CkBAIC0xMDAwLDcgKzEyNTgsNyBAQAogCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ187CiAKIAlpZiAoKmFyZyA9PSAnXicpIHsKLQkJZmxhZ3MgXj0gVU5JTlRFUkVTVElORzsKKwkJZmxhZ3MgXj0gVU5JTlRFUkVTVElORyB8IEJPVFRPTTsKIAkJYXJnKys7CiAJfQogCWlmIChnZXRfc2hhMV9jb21taXR0aXNoKGFyZywgc2hhMSkpCkBAIC0xMDM4LDcgKzEyOTYsNyBAQAogCURJRkZfT1BUX1NFVCgmcmV2cy0+cHJ1bmluZywgUVVJQ0spOwogCXJldnMtPnBydW5pbmcuYWRkX3JlbW92ZSA9IGZpbGVfYWRkX3JlbW92ZTsKIAlyZXZzLT5wcnVuaW5nLmNoYW5nZSA9IGZpbGVfY2hhbmdlOwotCXJldnMtPmxpZm8gPSAxOworCXJldnMtPnNvcnRfb3JkZXIgPSBSRVZfU09SVF9JTl9HUkFQSF9PUkRFUjsKIAlyZXZzLT5kZW5zZSA9IDE7CiAJcmV2cy0+cHJlZml4ID0gcHJlZml4OwogCXJldnMtPm1heF9hZ2UgPSAtMTsKQEAgLTEwOTIsMTQgKzEzNTAsMTUgQEAKIAlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgJmhlYWQtPm9iamVjdCwgIkhFQUQiKTsKIAlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgJm90aGVyLT5vYmplY3QsICJNRVJHRV9IRUFEIik7CiAJYmFzZXMgPSBnZXRfbWVyZ2VfYmFzZXMoaGVhZCwgb3RoZXIsIDEpOwotCWFkZF9wZW5kaW5nX2NvbW1pdF9saXN0KHJldnMsIGJhc2VzLCBVTklOVEVSRVNUSU5HKTsKKwlhZGRfcmV2X2NtZGxpbmVfbGlzdChyZXZzLCBiYXNlcywgUkVWX0NNRF9NRVJHRV9CQVNFLCBVTklOVEVSRVNUSU5HIHwgQk9UVE9NKTsKKwlhZGRfcGVuZGluZ19jb21taXRfbGlzdChyZXZzLCBiYXNlcywgVU5JTlRFUkVTVElORyB8IEJPVFRPTSk7CiAJZnJlZV9jb21taXRfbGlzdChiYXNlcyk7CiAJaGVhZC0+b2JqZWN0LmZsYWdzIHw9IFNZTU1FVFJJQ19MRUZUOwogCiAJaWYgKCFhY3RpdmVfbnIpCiAJCXJlYWRfY2FjaGUoKTsKIAlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKLQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKIAkJaWYgKCFjZV9zdGFnZShjZSkpCiAJCQljb250aW51ZTsKIAkJaWYgKGNlX3BhdGhfbWF0Y2goY2UsICZyZXZzLT5wcnVuZV9kYXRhKSkgewpAQCAtMTEyOCwxMyArMTM4NywxNSBAQAogCWludCBjYW50X2JlX2ZpbGVuYW1lID0gcmV2YXJnX29wdCAmIFJFVkFSR19DQU5OT1RfQkVfRklMRU5BTUU7CiAJdW5zaWduZWQgZ2V0X3NoYTFfZmxhZ3MgPSAwOwogCisJZmxhZ3MgPSBmbGFncyAmIFVOSU5URVJFU1RJTkcgPyBmbGFncyB8IEJPVFRPTSA6IGZsYWdzICYgfkJPVFRPTTsKKwogCWRvdGRvdCA9IHN0cnN0cihhcmcsICIuLiIpOwogCWlmIChkb3Rkb3QpIHsKIAkJdW5zaWduZWQgY2hhciBmcm9tX3NoYTFbMjBdOwogCQljb25zdCBjaGFyICpuZXh0ID0gZG90ZG90ICsgMjsKIAkJY29uc3QgY2hhciAqdGhpcyA9IGFyZzsKIAkJaW50IHN5bW1ldHJpYyA9ICpuZXh0ID09ICcuJzsKLQkJdW5zaWduZWQgaW50IGZsYWdzX2V4Y2x1ZGUgPSBmbGFncyBeIFVOSU5URVJFU1RJTkc7CisJCXVuc2lnbmVkIGludCBmbGFnc19leGNsdWRlID0gZmxhZ3MgXiAoVU5JTlRFUkVTVElORyB8IEJPVFRPTSk7CiAJCXN0YXRpYyBjb25zdCBjaGFyIGhlYWRfYnlfZGVmYXVsdFtdID0gIkhFQUQiOwogCQl1bnNpZ25lZCBpbnQgYV9mbGFnczsKIApAQCAtMTE3OSw2ICsxNDQwLDkgQEAKIAogCQkJaWYgKHN5bW1ldHJpYykgewogCQkJCWV4Y2x1ZGUgPSBnZXRfbWVyZ2VfYmFzZXMoYSwgYiwgMSk7CisJCQkJYWRkX3Jldl9jbWRsaW5lX2xpc3QocmV2cywgZXhjbHVkZSwKKwkJCQkJCSAgICAgUkVWX0NNRF9NRVJHRV9CQVNFLAorCQkJCQkJICAgICBmbGFnc19leGNsdWRlKTsKIAkJCQlhZGRfcGVuZGluZ19jb21taXRfbGlzdChyZXZzLCBleGNsdWRlLAogCQkJCQkJCWZsYWdzX2V4Y2x1ZGUpOwogCQkJCWZyZWVfY29tbWl0X2xpc3QoZXhjbHVkZSk7CkBAIC0xMjA3LDEzICsxNDcxLDEzIEBACiAJZG90ZG90ID0gc3Ryc3RyKGFyZywgIl4hIik7CiAJaWYgKGRvdGRvdCAmJiAhZG90ZG90WzJdKSB7CiAJCSpkb3Rkb3QgPSAwOwotCQlpZiAoIWFkZF9wYXJlbnRzX29ubHkocmV2cywgYXJnLCBmbGFncyBeIFVOSU5URVJFU1RJTkcpKQorCQlpZiAoIWFkZF9wYXJlbnRzX29ubHkocmV2cywgYXJnLCBmbGFncyBeIChVTklOVEVSRVNUSU5HIHwgQk9UVE9NKSkpCiAJCQkqZG90ZG90ID0gJ14nOwogCX0KIAogCWxvY2FsX2ZsYWdzID0gMDsKIAlpZiAoKmFyZyA9PSAnXicpIHsKLQkJbG9jYWxfZmxhZ3MgPSBVTklOVEVSRVNUSU5HOworCQlsb2NhbF9mbGFncyA9IFVOSU5URVJFU1RJTkcgfCBCT1RUT007CiAJCWFyZysrOwogCX0KIApAQCAtMTI3Niw3ICsxNTQwLDcgQEAKIAkJCX0KIAkJCWRpZSgib3B0aW9ucyBub3Qgc3VwcG9ydGVkIGluIC0tc3RkaW4gbW9kZSIpOwogCQl9Ci0JCWlmIChoYW5kbGVfcmV2aXNpb25fYXJnKHhzdHJkdXAoc2IuYnVmKSwgcmV2cywgMCwKKwkJaWYgKGhhbmRsZV9yZXZpc2lvbl9hcmcoc2IuYnVmLCByZXZzLCAwLAogCQkJCQlSRVZBUkdfQ0FOTk9UX0JFX0ZJTEVOQU1FKSkKIAkJCWRpZSgiYmFkIHJldmlzaW9uICclcyciLCBzYi5idWYpOwogCX0KQEAgLTEzNzQsNyArMTYzOCw3IEBACiAJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbWVyZ2UiKSkgewogCQlyZXZzLT5zaG93X21lcmdlID0gMTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS10b3BvLW9yZGVyIikpIHsKLQkJcmV2cy0+bGlmbyA9IDE7CisJCXJldnMtPnNvcnRfb3JkZXIgPSBSRVZfU09SVF9JTl9HUkFQSF9PUkRFUjsKIAkJcmV2cy0+dG9wb19vcmRlciA9IDE7CiAJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc2ltcGxpZnktbWVyZ2VzIikpIHsKIAkJcmV2cy0+c2ltcGxpZnlfbWVyZ2VzID0gMTsKQEAgLTEzOTIsNyArMTY1NiwxMCBAQAogCQlyZXZzLT5wcnVuZSA9IDE7CiAJCWxvYWRfcmVmX2RlY29yYXRpb25zKERFQ09SQVRFX1NIT1JUX1JFRlMpOwogCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWRhdGUtb3JkZXIiKSkgewotCQlyZXZzLT5saWZvID0gMDsKKwkJcmV2cy0+c29ydF9vcmRlciA9IFJFVl9TT1JUX0JZX0NPTU1JVF9EQVRFOworCQlyZXZzLT50b3BvX29yZGVyID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1hdXRob3ItZGF0ZS1vcmRlciIpKSB7CisJCXJldnMtPnNvcnRfb3JkZXIgPSBSRVZfU09SVF9CWV9BVVRIT1JfREFURTsKIAkJcmV2cy0+dG9wb19vcmRlciA9IDE7CiAJfSBlbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi0tZWFybHktb3V0cHV0IikpIHsKIAkJaW50IGNvdW50ID0gMTAwOwpAQCAtMTY5MCw3ICsxOTU3LDcgQEAKIAkJaGFuZGxlX3JlZnMoc3VibW9kdWxlLCByZXZzLCAqZmxhZ3MsIGZvcl9lYWNoX2JyYW5jaF9yZWZfc3VibW9kdWxlKTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1iaXNlY3QiKSkgewogCQloYW5kbGVfcmVmcyhzdWJtb2R1bGUsIHJldnMsICpmbGFncywgZm9yX2VhY2hfYmFkX2Jpc2VjdF9yZWYpOwotCQloYW5kbGVfcmVmcyhzdWJtb2R1bGUsIHJldnMsICpmbGFncyBeIFVOSU5URVJFU1RJTkcsIGZvcl9lYWNoX2dvb2RfYmlzZWN0X3JlZik7CisJCWhhbmRsZV9yZWZzKHN1Ym1vZHVsZSwgcmV2cywgKmZsYWdzIF4gKFVOSU5URVJFU1RJTkcgfCBCT1RUT00pLCBmb3JfZWFjaF9nb29kX2Jpc2VjdF9yZWYpOwogCQlyZXZzLT5iaXNlY3QgPSAxOwogCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXRhZ3MiKSkgewogCQloYW5kbGVfcmVmcyhzdWJtb2R1bGUsIHJldnMsICpmbGFncywgZm9yX2VhY2hfdGFnX3JlZl9zdWJtb2R1bGUpOwpAQCAtMTcxNiw3ICsxOTgzLDcgQEAKIAl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1yZWZsb2ciKSkgewogCQloYW5kbGVfcmVmbG9nKHJldnMsICpmbGFncyk7CiAJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm90IikpIHsKLQkJKmZsYWdzIF49IFVOSU5URVJFU1RJTkc7CisJCSpmbGFncyBePSBVTklOVEVSRVNUSU5HIHwgQk9UVE9NOwogCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLXdhbGsiKSkgewogCQlyZXZzLT5ub193YWxrID0gUkVWSVNJT05fV0FMS19OT19XQUxLX1NPUlRFRDsKIAl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1uby13YWxrPSIpKSB7CkBAIC0xODk3LDYgKzIxNjQsMTIgQEAKIAlpZiAocmV2cy0+Y29tYmluZV9tZXJnZXMpCiAJCXJldnMtPmlnbm9yZV9tZXJnZXMgPSAwOwogCXJldnMtPmRpZmZvcHQuYWJicmV2ID0gcmV2cy0+YWJicmV2OworCisJaWYgKHJldnMtPmxpbmVfbGV2ZWxfdHJhdmVyc2UpIHsKKwkJcmV2cy0+bGltaXRlZCA9IDE7CisJCXJldnMtPnRvcG9fb3JkZXIgPSAxOworCX0KKwogCWRpZmZfc2V0dXBfZG9uZSgmcmV2cy0+ZGlmZm9wdCk7CiAKIAlncmVwX2NvbW1pdF9wYXR0ZXJuX3R5cGUoR1JFUF9QQVRURVJOX1RZUEVfVU5TUEVDSUZJRUQsCkBAIC0xOTMwLDI4ICsyMjAzLDMyIEBACiAJbC0+bmV4dCA9IGFkZF9kZWNvcmF0aW9uKCZyZXZzLT5jaGlsZHJlbiwgJnBhcmVudC0+b2JqZWN0LCBsKTsKIH0KIAotc3RhdGljIGludCByZW1vdmVfZHVwbGljYXRlX3BhcmVudHMoc3RydWN0IGNvbW1pdCAqY29tbWl0KQorc3RhdGljIGludCByZW1vdmVfZHVwbGljYXRlX3BhcmVudHMoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCiB7CisJc3RydWN0IHRyZWVzYW1lX3N0YXRlICp0cyA9IGxvb2t1cF9kZWNvcmF0aW9uKCZyZXZzLT50cmVlc2FtZSwgJmNvbW1pdC0+b2JqZWN0KTsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKipwcCwgKnA7CiAJaW50IHN1cnZpdmluZ19wYXJlbnRzOwogCiAJLyogRXhhbWluZSBleGlzdGluZyBwYXJlbnRzIHdoaWxlIG1hcmtpbmcgb25lcyB3ZSBoYXZlIHNlZW4uLi4gKi8KIAlwcCA9ICZjb21taXQtPnBhcmVudHM7CisJc3Vydml2aW5nX3BhcmVudHMgPSAwOwogCXdoaWxlICgocCA9ICpwcCkgIT0gTlVMTCkgewogCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBwLT5pdGVtOwogCQlpZiAocGFyZW50LT5vYmplY3QuZmxhZ3MgJiBUTVBfTUFSSykgewogCQkJKnBwID0gcC0+bmV4dDsKKwkJCWlmICh0cykKKwkJCQljb21wYWN0X3RyZWVzYW1lKHJldnMsIGNvbW1pdCwgc3Vydml2aW5nX3BhcmVudHMpOwogCQkJY29udGludWU7CiAJCX0KIAkJcGFyZW50LT5vYmplY3QuZmxhZ3MgfD0gVE1QX01BUks7CisJCXN1cnZpdmluZ19wYXJlbnRzKys7CiAJCXBwID0gJnAtPm5leHQ7CiAJfQotCS8qIGNvdW50IHRoZW0gd2hpbGUgY2xlYXJpbmcgdGhlIHRlbXBvcmFyeSBtYXJrICovCi0Jc3Vydml2aW5nX3BhcmVudHMgPSAwOworCS8qIGNsZWFyIHRoZSB0ZW1wb3JhcnkgbWFyayAqLwogCWZvciAocCA9IGNvbW1pdC0+cGFyZW50czsgcDsgcCA9IHAtPm5leHQpIHsKIAkJcC0+aXRlbS0+b2JqZWN0LmZsYWdzICY9IH5UTVBfTUFSSzsKLQkJc3Vydml2aW5nX3BhcmVudHMrKzsKIAl9CisJLyogbm8gdXBkYXRlX3RyZWVzYW1lKCkgLSByZW1vdmluZyBkdXBsaWNhdGVzIGNhbid0IGFmZmVjdCBUUkVFU0FNRSAqLwogCXJldHVybiBzdXJ2aXZpbmdfcGFyZW50czsKIH0KIApAQCAtMTk3MSw5ICsyMjQ4LDE1NyBAQAogCXJldHVybiBzdDsKIH0KIAorc3RhdGljIGludCBtYXJrX3JlZHVuZGFudF9wYXJlbnRzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqaCA9IHJlZHVjZV9oZWFkcyhjb21taXQtPnBhcmVudHMpOworCWludCBpID0gMCwgbWFya2VkID0gMDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBvLCAqcG47CisKKwkvKiBXYW50IHRoZXNlIGZvciBzYW5pdHktY2hlY2tpbmcgb25seSAqLworCWludCBvcmlnX2NudCA9IGNvbW1pdF9saXN0X2NvdW50KGNvbW1pdC0+cGFyZW50cyk7CisJaW50IGNudCA9IGNvbW1pdF9saXN0X2NvdW50KGgpOworCisJLyoKKwkgKiBOb3QgcmVhZHkgdG8gcmVtb3ZlIGl0ZW1zIHlldCwganVzdCBtYXJrIHRoZW0gZm9yIG5vdywgYmFzZWQKKwkgKiBvbiB0aGUgb3V0cHV0IG9mIHJlZHVjZV9oZWFkcygpLiByZWR1Y2VfaGVhZHMgb3V0cHV0cyB0aGUgcmVkdWNlZAorCSAqIHNldCBpbiBpdHMgb3JpZ2luYWwgb3JkZXIsIHNvIHRoaXMgaXNuJ3QgdG9vIGhhcmQuCisJICovCisJcG8gPSBjb21taXQtPnBhcmVudHM7CisJcG4gPSBoOworCXdoaWxlIChwbykgeworCQlpZiAocG4gJiYgcG8tPml0ZW0gPT0gcG4tPml0ZW0pIHsKKwkJCXBuID0gcG4tPm5leHQ7CisJCQlpKys7CisJCX0gZWxzZSB7CisJCQlwby0+aXRlbS0+b2JqZWN0LmZsYWdzIHw9IFRNUF9NQVJLOworCQkJbWFya2VkKys7CisJCX0KKwkJcG89cG8tPm5leHQ7CisJfQorCisJaWYgKGkgIT0gY250IHx8IGNudCttYXJrZWQgIT0gb3JpZ19jbnQpCisJCWRpZSgibWFya19yZWR1bmRhbnRfcGFyZW50cyAlZCAlZCAlZCAlZCIsIG9yaWdfY250LCBjbnQsIGksIG1hcmtlZCk7CisKKwlmcmVlX2NvbW1pdF9saXN0KGgpOworCisJcmV0dXJuIG1hcmtlZDsKK30KKworc3RhdGljIGludCBtYXJrX3RyZWVzYW1lX3Jvb3RfcGFyZW50cyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJaW50IG1hcmtlZCA9IDA7CisKKwlmb3IgKHAgPSBjb21taXQtPnBhcmVudHM7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IHAtPml0ZW07CisJCWlmICghcGFyZW50LT5wYXJlbnRzICYmIChwYXJlbnQtPm9iamVjdC5mbGFncyAmIFRSRUVTQU1FKSkgeworCQkJcGFyZW50LT5vYmplY3QuZmxhZ3MgfD0gVE1QX01BUks7CisJCQltYXJrZWQrKzsKKwkJfQorCX0KKworCXJldHVybiBtYXJrZWQ7Cit9CisKKy8qCisgKiBBd2t3YXJkIG5hbWluZyAtIHRoaXMgbWVhbnMgb25lIHBhcmVudCB3ZSBhcmUgVFJFRVNBTUUgdG8uCisgKiBjZiBtYXJrX3RyZWVzYW1lX3Jvb3RfcGFyZW50czogcm9vdCBwYXJlbnRzIHRoYXQgYXJlIFRSRUVTQU1FICh0byBhbgorICogZW1wdHkgdHJlZSkuIEJldHRlciBuYW1lIHN1Z2dlc3Rpb25zPworICovCitzdGF0aWMgaW50IGxlYXZlX29uZV90cmVlc2FtZV90b19wYXJlbnQoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IHRyZWVzYW1lX3N0YXRlICp0cyA9IGxvb2t1cF9kZWNvcmF0aW9uKCZyZXZzLT50cmVlc2FtZSwgJmNvbW1pdC0+b2JqZWN0KTsKKwlzdHJ1Y3QgY29tbWl0ICp1bm1hcmtlZCA9IE5VTEwsICptYXJrZWQgPSBOVUxMOworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwl1bnNpZ25lZCBuOworCisJZm9yIChwID0gY29tbWl0LT5wYXJlbnRzLCBuID0gMDsgcDsgcCA9IHAtPm5leHQsIG4rKykgeworCQlpZiAodHMtPnRyZWVzYW1lW25dKSB7CisJCQlpZiAocC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgVE1QX01BUkspIHsKKwkJCQlpZiAoIW1hcmtlZCkKKwkJCQkJbWFya2VkID0gcC0+aXRlbTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKCF1bm1hcmtlZCkgeworCQkJCQl1bm1hcmtlZCA9IHAtPml0ZW07CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogSWYgd2UgYXJlIFRSRUVTQU1FIHRvIGEgbWFya2VkLWZvci1kZWxldGlvbiBwYXJlbnQsIGJ1dCBub3QgdG8gYW55CisJICogdW5tYXJrZWQgcGFyZW50cywgdW5tYXJrIHRoZSBmaXJzdCBUUkVFU0FNRSBwYXJlbnQuIFRoaXMgaXMgdGhlCisJICogcGFyZW50IHRoYXQgdGhlIGRlZmF1bHQgc2ltcGxpZnlfaGlzdG9yeT09MSBzY2FuIHdvdWxkIGhhdmUgZm9sbG93ZWQsCisJICogYW5kIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBvbWl0IHRoYXQgcGF0aCB3aGVuIGFza2luZyBmb3IgYQorCSAqIHNpbXBsaWZpZWQgZnVsbCBoaXN0b3J5LiBSZXRhaW5pbmcgaXQgaW1wcm92ZXMgdGhlIGNoYW5jZXMgb2YKKwkgKiB1bmRlcnN0YW5kaW5nIG9kZCBtaXNzZWQgbWVyZ2VzIHRoYXQgdG9vayBhbiBvbGQgdmVyc2lvbiBvZiBhIGZpbGUuCisJICoKKwkgKiBFeGFtcGxlOgorCSAqCisJICogICBJLS0tLS0tLS0qWCAgICAgICBBIG1vZGlmaWVkIHRoZSBmaWxlLCBidXQgbWFpbmxpbmUgbWVyZ2UgWCB1c2VkCisJICogICAgXCAgICAgICAvICAgICAgICAiLXMgb3VycyIsIHNvIHRvb2sgdGhlIHZlcnNpb24gZnJvbSBJLiBYIGlzCisJICogICAgIGAtKkEtLScgICAgICAgICBUUkVFU0FNRSB0byBJIGFuZCAhVFJFRVNBTUUgdG8gQS4KKwkgKgorCSAqIERlZmF1bHQgbG9nIGZyb20gWCB3b3VsZCBwcm9kdWNlICJJIi4gV2l0aG91dCB0aGlzIGNoZWNrLAorCSAqIC0tZnVsbC1oaXN0b3J5IC0tc2ltcGxpZnktbWVyZ2VzIHdvdWxkIHByb2R1Y2UgIkktQS1YIiwgc2hvd2luZworCSAqIHRoZSBtZXJnZSBjb21taXQgWCBhbmQgdGhhdCBpdCBjaGFuZ2VkIEEsIGJ1dCBub3QgbWFraW5nIGNsZWFyIHRoYXQKKwkgKiBpdCBoYWQganVzdCB0YWtlbiB0aGUgSSB2ZXJzaW9uLiBXaXRoIHRoaXMgY2hlY2ssIHRoZSB0b3BvbG9neSBhYm92ZQorCSAqIGlzIHJldGFpbmVkLgorCSAqCisJICogTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIHNpbXBsaWZpY2F0aW9uIGNob29zZXMgYSBkaWZmZXJlbnQKKwkgKiBUUkVFU0FNRSBwYXJlbnQgZnJvbSB0aGUgZGVmYXVsdCwgaW4gd2hpY2ggY2FzZSB0aGlzIHRlc3QgZG9lc24ndAorCSAqIGFjdGl2YXRlLCBhbmQgd2UgX2RvXyBkcm9wIHRoZSBkZWZhdWx0IHBhcmVudC4gRXhhbXBsZToKKwkgKgorCSAqICAgSS0tLS0tLVggICAgICAgICBBIG1vZGlmaWVkIHRoZSBmaWxlLCBidXQgaXQgd2FzIHJldmVydGVkIGluIEIsCisJICogICAgXCAgICAvICAgICAgICAgIG1lYW5pbmcgbWFpbmxpbmUgbWVyZ2UgWCBpcyBUUkVFU0FNRSB0byBib3RoCisJICogICAgKkEtKkIgICAgICAgICAgIHBhcmVudHMuCisJICoKKwkgKiBEZWZhdWx0IGxvZyB3b3VsZCBwcm9kdWNlICJJIiBieSBmb2xsb3dpbmcgdGhlIGZpcnN0IHBhcmVudDsKKwkgKiAtLWZ1bGwtaGlzdG9yeSAtLXNpbXBsaWZ5LW1lcmdlcyB3aWxsIHByb2R1Y2UgIkktQS1CIi4gQnV0IHRoaXMgaXMgYQorCSAqIHJlYXNvbmFibGUgcmVzdWx0IC0gaXQgcHJlc2VudHMgYSBsb2dpY2FsIGZ1bGwgaGlzdG9yeSBsZWFkaW5nIGZyb20KKwkgKiBJIHRvIFgsIGFuZCBYIGlzIG5vdCBhbiBpbXBvcnRhbnQgbWVyZ2UuCisJICovCisJaWYgKCF1bm1hcmtlZCAmJiBtYXJrZWQpIHsKKwkJbWFya2VkLT5vYmplY3QuZmxhZ3MgJj0gflRNUF9NQVJLOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZW1vdmVfbWFya2VkX3BhcmVudHMoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqcHAsICpwOworCWludCBudGhfcGFyZW50LCByZW1vdmVkID0gMDsKKworCXBwID0gJmNvbW1pdC0+cGFyZW50czsKKwludGhfcGFyZW50ID0gMDsKKwl3aGlsZSAoKHAgPSAqcHApICE9IE5VTEwpIHsKKwkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcC0+aXRlbTsKKwkJaWYgKHBhcmVudC0+b2JqZWN0LmZsYWdzICYgVE1QX01BUkspIHsKKwkJCXBhcmVudC0+b2JqZWN0LmZsYWdzICY9IH5UTVBfTUFSSzsKKwkJCSpwcCA9IHAtPm5leHQ7CisJCQlmcmVlKHApOworCQkJcmVtb3ZlZCsrOworCQkJY29tcGFjdF90cmVlc2FtZShyZXZzLCBjb21taXQsIG50aF9wYXJlbnQpOworCQkJY29udGludWU7CisJCX0KKwkJcHAgPSAmcC0+bmV4dDsKKwkJbnRoX3BhcmVudCsrOworCX0KKworCS8qIFJlbW92aW5nIHBhcmVudHMgY2FuIG9ubHkgaW5jcmVhc2UgVFJFRVNBTUVuZXNzICovCisJaWYgKHJlbW92ZWQgJiYgIShjb21taXQtPm9iamVjdC5mbGFncyAmIFRSRUVTQU1FKSkKKwkJdXBkYXRlX3RyZWVzYW1lKHJldnMsIGNvbW1pdCk7CisKKwlyZXR1cm4gbnRoX3BhcmVudDsKK30KKwogc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqKnNpbXBsaWZ5X29uZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGNvbW1pdF9saXN0ICoqdGFpbCkKIHsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJc3RydWN0IGNvbW1pdCAqcGFyZW50OwogCXN0cnVjdCBtZXJnZV9zaW1wbGlmeV9zdGF0ZSAqc3QsICpwc3Q7CiAJaW50IGNudDsKIApAQCAtMjAxNSw3ICsyNDQwLDkgQEAKIAl9CiAKIAkvKgotCSAqIFJld3JpdGUgb3VyIGxpc3Qgb2YgcGFyZW50cy4KKwkgKiBSZXdyaXRlIG91ciBsaXN0IG9mIHBhcmVudHMuIE5vdGUgdGhhdCB0aGlzIGNhbm5vdAorCSAqIGFmZmVjdCBvdXIgVFJFRVNBTUUgZmxhZ3MgaW4gYW55IHdheSAtIGEgY29tbWl0IGlzCisJICogYWx3YXlzIFRSRUVTQU1FIHRvIGl0cyBzaW1wbGlmaWNhdGlvbi4KIAkgKi8KIAlmb3IgKHAgPSBjb21taXQtPnBhcmVudHM7IHA7IHAgPSBwLT5uZXh0KSB7CiAJCXBzdCA9IGxvY2F0ZV9zaW1wbGlmeV9zdGF0ZShyZXZzLCBwLT5pdGVtKTsKQEAgLTIwMjcsNDMgKzI0NTQsNTMgQEAKIAlpZiAocmV2cy0+Zmlyc3RfcGFyZW50X29ubHkpCiAJCWNudCA9IDE7CiAJZWxzZQotCQljbnQgPSByZW1vdmVfZHVwbGljYXRlX3BhcmVudHMoY29tbWl0KTsKKwkJY250ID0gcmVtb3ZlX2R1cGxpY2F0ZV9wYXJlbnRzKHJldnMsIGNvbW1pdCk7CiAKIAkvKgogCSAqIEl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgYXJlIGEgbWVyZ2UgYW5kIG9uZSBzaWRlIGJyYW5jaAogCSAqIGRvZXMgbm90IGhhdmUgYW55IGNvbW1pdCB0aGF0IHRvdWNoZXMgdGhlIGdpdmVuIHBhdGhzOwotCSAqIGluIHN1Y2ggYSBjYXNlLCB0aGUgaW1tZWRpYXRlIHBhcmVudHMgd2lsbCBiZSByZXdyaXR0ZW4KLQkgKiB0byBkaWZmZXJlbnQgY29tbWl0cy4KKwkgKiBpbiBzdWNoIGEgY2FzZSwgdGhlIGltbWVkaWF0ZSBwYXJlbnQgZnJvbSB0aGF0IGJyYW5jaAorCSAqIHdpbGwgYmUgcmV3cml0dGVuIHRvIGJlIHRoZSBtZXJnZSBiYXNlLgogCSAqCiAJICogICAgICBvLS0tLVgJCVg6IHRoZSBjb21taXQgd2UgYXJlIGxvb2tpbmcgYXQ7CiAJICogICAgIC8gICAgLwkJbzogYSBjb21taXQgdGhhdCB0b3VjaGVzIHRoZSBwYXRoczsKIAkgKiAtLS1vLS0tLScKIAkgKgotCSAqIEZ1cnRoZXIgcmVkdWNlIHRoZSBwYXJlbnRzIGJ5IHJlbW92aW5nIHJlZHVuZGFudCBwYXJlbnRzLgorCSAqIEZ1cnRoZXIsIGEgbWVyZ2Ugb2YgYW4gaW5kZXBlbmRlbnQgYnJhbmNoIHRoYXQgZG9lc24ndAorCSAqIHRvdWNoIHRoZSBwYXRoIHdpbGwgcmVkdWNlIHRvIGEgdHJlZXNhbWUgcm9vdCBwYXJlbnQ6CisJICoKKwkgKiAgLS0tLW8tLS0tWAkJWDogdGhlIGNvbW1pdCB3ZSBhcmUgbG9va2luZyBhdDsKKwkgKiAgICAgICAgICAvCQlvOiBhIGNvbW1pdCB0aGF0IHRvdWNoZXMgdGhlIHBhdGhzOworCSAqICAgICAgICAgcgkJcjogYSByb290IGNvbW1pdCBub3QgdG91Y2hpbmcgdGhlIHBhdGhzCisJICoKKwkgKiBEZXRlY3QgYW5kIHNpbXBsaWZ5IGJvdGggY2FzZXMuCiAJICovCiAJaWYgKDEgPCBjbnQpIHsKLQkJc3RydWN0IGNvbW1pdF9saXN0ICpoID0gcmVkdWNlX2hlYWRzKGNvbW1pdC0+cGFyZW50cyk7Ci0JCWNudCA9IGNvbW1pdF9saXN0X2NvdW50KGgpOwotCQlmcmVlX2NvbW1pdF9saXN0KGNvbW1pdC0+cGFyZW50cyk7Ci0JCWNvbW1pdC0+cGFyZW50cyA9IGg7CisJCWludCBtYXJrZWQgPSBtYXJrX3JlZHVuZGFudF9wYXJlbnRzKHJldnMsIGNvbW1pdCk7CisJCW1hcmtlZCArPSBtYXJrX3RyZWVzYW1lX3Jvb3RfcGFyZW50cyhyZXZzLCBjb21taXQpOworCQlpZiAobWFya2VkKQorCQkJbWFya2VkIC09IGxlYXZlX29uZV90cmVlc2FtZV90b19wYXJlbnQocmV2cywgY29tbWl0KTsKKwkJaWYgKG1hcmtlZCkKKwkJCWNudCA9IHJlbW92ZV9tYXJrZWRfcGFyZW50cyhyZXZzLCBjb21taXQpOwogCX0KIAogCS8qCiAJICogQSBjb21taXQgc2ltcGxpZmllcyB0byBpdHNlbGYgaWYgaXQgaXMgYSByb290LCBpZiBpdCBpcwogCSAqIFVOSU5URVJFU1RJTkcsIGlmIGl0IHRvdWNoZXMgdGhlIGdpdmVuIHBhdGhzLCBvciBpZiBpdCBpcyBhCi0JICogbWVyZ2UgYW5kIGl0cyBwYXJlbnRzIHNpbXBsaWZpZXMgdG8gbW9yZSB0aGFuIG9uZSBjb21taXRzCisJICogbWVyZ2UgYW5kIGl0cyBwYXJlbnRzIGRvbid0IHNpbXBsaWZ5IHRvIG9uZSByZWxldmFudCBjb21taXQKIAkgKiAodGhlIGZpcnN0IHR3byBjYXNlcyBhcmUgYWxyZWFkeSBoYW5kbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YKIAkgKiB0aGlzIGZ1bmN0aW9uKS4KIAkgKgotCSAqIE90aGVyd2lzZSwgaXQgc2ltcGxpZmllcyB0byB3aGF0IGl0cyBzb2xlIHBhcmVudCBzaW1wbGlmaWVzIHRvLgorCSAqIE90aGVyd2lzZSwgaXQgc2ltcGxpZmllcyB0byB3aGF0IGl0cyBzb2xlIHJlbGV2YW50IHBhcmVudAorCSAqIHNpbXBsaWZpZXMgdG8uCiAJICovCiAJaWYgKCFjbnQgfHwKIAkgICAgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykgfHwKIAkgICAgIShjb21taXQtPm9iamVjdC5mbGFncyAmIFRSRUVTQU1FKSB8fAotCSAgICAoMSA8IGNudCkpCisJICAgIChwYXJlbnQgPSBvbmVfcmVsZXZhbnRfcGFyZW50KHJldnMsIGNvbW1pdC0+cGFyZW50cykpID09IE5VTEwpCiAJCXN0LT5zaW1wbGlmaWVkID0gY29tbWl0OwogCWVsc2UgewotCQlwc3QgPSBsb2NhdGVfc2ltcGxpZnlfc3RhdGUocmV2cywgY29tbWl0LT5wYXJlbnRzLT5pdGVtKTsKKwkJcHN0ID0gbG9jYXRlX3NpbXBsaWZ5X3N0YXRlKHJldnMsIHBhcmVudCk7CiAJCXN0LT5zaW1wbGlmaWVkID0gcHN0LT5zaW1wbGlmaWVkOwogCX0KIAlyZXR1cm4gdGFpbDsKQEAgLTIxNTksNiArMjU5NiwxMSBAQAogCWlmICghcmV2cy0+bGVha19wZW5kaW5nKQogCQlmcmVlKGxpc3QpOwogCisJLyogU2lnbmFsIHdoZXRoZXIgd2UgbmVlZCBwZXItcGFyZW50IHRyZWVzYW1lIGRlY29yYXRpb24gKi8KKwlpZiAocmV2cy0+c2ltcGxpZnlfbWVyZ2VzIHx8CisJICAgIChyZXZzLT5saW1pdGVkICYmIGxpbWl0aW5nX2Nhbl9pbmNyZWFzZV90cmVlc2FtZShyZXZzKSkpCisJCXJldnMtPnRyZWVzYW1lLm5hbWUgPSAidHJlZXNhbWUiOworCiAJaWYgKHJldnMtPm5vX3dhbGsgIT0gUkVWSVNJT05fV0FMS19OT19XQUxLX1VOU09SVEVEKQogCQljb21taXRfbGlzdF9zb3J0X2J5X2RhdGUoJnJldnMtPmNvbW1pdHMpOwogCWlmIChyZXZzLT5ub193YWxrKQpAQCAtMjE2Nyw3ICsyNjA5LDkgQEAKIAkJaWYgKGxpbWl0X2xpc3QocmV2cykgPCAwKQogCQkJcmV0dXJuIC0xOwogCWlmIChyZXZzLT50b3BvX29yZGVyKQotCQlzb3J0X2luX3RvcG9sb2dpY2FsX29yZGVyKCZyZXZzLT5jb21taXRzLCByZXZzLT5saWZvKTsKKwkJc29ydF9pbl90b3BvbG9naWNhbF9vcmRlcigmcmV2cy0+Y29tbWl0cywgcmV2cy0+c29ydF9vcmRlcik7CisJaWYgKHJldnMtPmxpbmVfbGV2ZWxfdHJhdmVyc2UpCisJCWxpbmVfbG9nX2ZpbHRlcihyZXZzKTsKIAlpZiAocmV2cy0+c2ltcGxpZnlfbWVyZ2VzKQogCQlzaW1wbGlmeV9tZXJnZXMocmV2cyk7CiAJaWYgKHJldnMtPmNoaWxkcmVuLm5hbWUpCkBAIC0yMTc1LDEyICsyNjE5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotZW51bSByZXdyaXRlX3Jlc3VsdCB7Ci0JcmV3cml0ZV9vbmVfb2ssCi0JcmV3cml0ZV9vbmVfbm9wYXJlbnRzLAotCXJld3JpdGVfb25lX2Vycm9yCi19OwotCiBzdGF0aWMgZW51bSByZXdyaXRlX3Jlc3VsdCByZXdyaXRlX29uZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKipwcCkKIHsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKmNhY2hlID0gTlVMTDsKQEAgLTIxOTAsMjQgKzI2MjgsMjUgQEAKIAkJaWYgKCFyZXZzLT5saW1pdGVkKQogCQkJaWYgKGFkZF9wYXJlbnRzX3RvX2xpc3QocmV2cywgcCwgJnJldnMtPmNvbW1pdHMsICZjYWNoZSkgPCAwKQogCQkJCXJldHVybiByZXdyaXRlX29uZV9lcnJvcjsKLQkJaWYgKHAtPnBhcmVudHMgJiYgcC0+cGFyZW50cy0+bmV4dCkKLQkJCXJldHVybiByZXdyaXRlX29uZV9vazsKIAkJaWYgKHAtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCiAJCQlyZXR1cm4gcmV3cml0ZV9vbmVfb2s7CiAJCWlmICghKHAtPm9iamVjdC5mbGFncyAmIFRSRUVTQU1FKSkKIAkJCXJldHVybiByZXdyaXRlX29uZV9vazsKIAkJaWYgKCFwLT5wYXJlbnRzKQogCQkJcmV0dXJuIHJld3JpdGVfb25lX25vcGFyZW50czsKLQkJKnBwID0gcC0+cGFyZW50cy0+aXRlbTsKKwkJaWYgKChwID0gb25lX3JlbGV2YW50X3BhcmVudChyZXZzLCBwLT5wYXJlbnRzKSkgPT0gTlVMTCkKKwkJCXJldHVybiByZXdyaXRlX29uZV9vazsKKwkJKnBwID0gcDsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcmV3cml0ZV9wYXJlbnRzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoraW50IHJld3JpdGVfcGFyZW50cyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwlyZXdyaXRlX3BhcmVudF9mbl90IHJld3JpdGVfcGFyZW50KQogewogCXN0cnVjdCBjb21taXRfbGlzdCAqKnBwID0gJmNvbW1pdC0+cGFyZW50czsKIAl3aGlsZSAoKnBwKSB7CiAJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50ID0gKnBwOwotCQlzd2l0Y2ggKHJld3JpdGVfb25lKHJldnMsICZwYXJlbnQtPml0ZW0pKSB7CisJCXN3aXRjaCAocmV3cml0ZV9wYXJlbnQocmV2cywgJnBhcmVudC0+aXRlbSkpIHsKIAkJY2FzZSByZXdyaXRlX29uZV9vazoKIAkJCWJyZWFrOwogCQljYXNlIHJld3JpdGVfb25lX25vcGFyZW50czoKQEAgLTIyMTgsNyArMjY1Nyw3IEBACiAJCX0KIAkJcHAgPSAmcGFyZW50LT5uZXh0OwogCX0KLQlyZW1vdmVfZHVwbGljYXRlX3BhcmVudHMoY29tbWl0KTsKKwlyZW1vdmVfZHVwbGljYXRlX3BhcmVudHMocmV2cywgY29tbWl0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjM0MiwxMCArMjc4MSw3IEBACiAJaWYgKHJldnMtPm1pbl9hZ2UgIT0gLTEgJiYgKGNvbW1pdC0+ZGF0ZSA+IHJldnMtPm1pbl9hZ2UpKQogCQlyZXR1cm4gY29tbWl0X2lnbm9yZTsKIAlpZiAocmV2cy0+bWluX3BhcmVudHMgfHwgKHJldnMtPm1heF9wYXJlbnRzID49IDApKSB7Ci0JCWludCBuID0gMDsKLQkJc3RydWN0IGNvbW1pdF9saXN0ICpwOwotCQlmb3IgKHAgPSBjb21taXQtPnBhcmVudHM7IHA7IHAgPSBwLT5uZXh0KQotCQkJbisrOworCQlpbnQgbiA9IGNvbW1pdF9saXN0X2NvdW50KGNvbW1pdC0+cGFyZW50cyk7CiAJCWlmICgobiA8IHJldnMtPm1pbl9wYXJlbnRzKSB8fAogCQkgICAgKChyZXZzLT5tYXhfcGFyZW50cyA+PSAwKSAmJiAobiA+IHJldnMtPm1heF9wYXJlbnRzKSkpCiAJCQlyZXR1cm4gY29tbWl0X2lnbm9yZTsKQEAgLTIzNTUsMTIgKzI3OTEsMjMgQEAKIAlpZiAocmV2cy0+cHJ1bmUgJiYgcmV2cy0+ZGVuc2UpIHsKIAkJLyogQ29tbWl0IHdpdGhvdXQgY2hhbmdlcz8gKi8KIAkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVFJFRVNBTUUpIHsKKwkJCWludCBuOworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwOwogCQkJLyogZHJvcCBtZXJnZXMgdW5sZXNzIHdlIHdhbnQgcGFyZW50aG9vZCAqLwogCQkJaWYgKCF3YW50X2FuY2VzdHJ5KHJldnMpKQogCQkJCXJldHVybiBjb21taXRfaWdub3JlOwotCQkJLyogbm9uLW1lcmdlIC0gYWx3YXlzIGlnbm9yZSBpdCAqLwotCQkJaWYgKCFjb21taXQtPnBhcmVudHMgfHwgIWNvbW1pdC0+cGFyZW50cy0+bmV4dCkKLQkJCQlyZXR1cm4gY29tbWl0X2lnbm9yZTsKKwkJCS8qCisJCQkgKiBJZiB3ZSB3YW50IGFuY2VzdHJ5LCB0aGVuIG5lZWQgdG8ga2VlcCBhbnkgbWVyZ2VzCisJCQkgKiBiZXR3ZWVuIHJlbGV2YW50IGNvbW1pdHMgdG8gdGllIHRvZ2V0aGVyIHRvcG9sb2d5LgorCQkJICogRm9yIGNvbnNpc3RlbmN5IHdpdGggVFJFRVNBTUUgYW5kIHNpbXBsaWZpY2F0aW9uCisJCQkgKiB1c2UgInJlbGV2YW50IiBoZXJlIHJhdGhlciB0aGFuIGp1c3QgSU5URVJFU1RJTkcsCisJCQkgKiB0byB0cmVhdCBib3R0b20gY29tbWl0KHMpIGFzIHBhcnQgb2YgdGhlIHRvcG9sb2d5LgorCQkJICovCisJCQlmb3IgKG4gPSAwLCBwID0gY29tbWl0LT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkKKwkJCQlpZiAocmVsZXZhbnRfY29tbWl0KHAtPml0ZW0pKQorCQkJCQlpZiAoKytuID49IDIpCisJCQkJCQlyZXR1cm4gY29tbWl0X3Nob3c7CisJCQlyZXR1cm4gY29tbWl0X2lnbm9yZTsKIAkJfQogCX0KIAlyZXR1cm4gY29tbWl0X3Nob3c7CkBAIC0yMzczLDcgKzI4MjAsNyBAQAogCWlmIChhY3Rpb24gPT0gY29tbWl0X3Nob3cgJiYKIAkgICAgIXJldnMtPnNob3dfYWxsICYmCiAJICAgIHJldnMtPnBydW5lICYmIHJldnMtPmRlbnNlICYmIHdhbnRfYW5jZXN0cnkocmV2cykpIHsKLQkJaWYgKHJld3JpdGVfcGFyZW50cyhyZXZzLCBjb21taXQpIDwgMCkKKwkJaWYgKHJld3JpdGVfcGFyZW50cyhyZXZzLCBjb21taXQsIHJld3JpdGVfb25lKSA8IDApCiAJCQlyZXR1cm4gY29tbWl0X2Vycm9yOwogCX0KIAlyZXR1cm4gYWN0aW9uOwpAQCAtMjQyMywyNSArMjg3MCwyMyBAQAogCXJldHVybiBOVUxMOwogfQogCisvKgorICogUmV0dXJuIHRydWUgZm9yIGVudHJpZXMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBzaG93bi4gIChUaGlzIGlzIGFuCisgKiBvYmplY3RfYXJyYXlfZWFjaF9mdW5jX3QuKQorICovCitzdGF0aWMgaW50IGVudHJ5X3Vuc2hvd24oc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqZW50cnksIHZvaWQgKmNiX2RhdGFfdW51c2VkKQoreworCXJldHVybiAhKGVudHJ5LT5pdGVtLT5mbGFncyAmIFNIT1dOKTsKK30KKworLyoKKyAqIElmIGFycmF5IGlzIG9uIHRoZSB2ZXJnZSBvZiBhIHJlYWxsb2MsIGdhcmJhZ2UtY29sbGVjdCBhbnkgZW50cmllcworICogdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBzaG93biB0byB0cnkgdG8gZnJlZSB1cCBzb21lIHNwYWNlLgorICovCiBzdGF0aWMgdm9pZCBnY19ib3VuZGFyeShzdHJ1Y3Qgb2JqZWN0X2FycmF5ICphcnJheSkKIHsKLQl1bnNpZ25lZCBuciA9IGFycmF5LT5ucjsKLQl1bnNpZ25lZCBhbGxvYyA9IGFycmF5LT5hbGxvYzsKLQlzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICpvYmplY3RzID0gYXJyYXktPm9iamVjdHM7Ci0KLQlpZiAoYWxsb2MgPD0gbnIpIHsKLQkJdW5zaWduZWQgaSwgajsKLQkJZm9yIChpID0gaiA9IDA7IGkgPCBucjsgaSsrKSB7Ci0JCQlpZiAob2JqZWN0c1tpXS5pdGVtLT5mbGFncyAmIFNIT1dOKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKGkgIT0gaikKLQkJCQlvYmplY3RzW2pdID0gb2JqZWN0c1tpXTsKLQkJCWorKzsKLQkJfQotCQlmb3IgKGkgPSBqOyBpIDwgbnI7IGkrKykKLQkJCW9iamVjdHNbaV0uaXRlbSA9IE5VTEw7Ci0JCWFycmF5LT5uciA9IGo7Ci0JfQorCWlmIChhcnJheS0+bnIgPT0gYXJyYXktPmFsbG9jKQorCQlvYmplY3RfYXJyYXlfZmlsdGVyKGFycmF5LCBlbnRyeV91bnNob3duLCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgY3JlYXRlX2JvdW5kYXJ5X2NvbW1pdF9saXN0KHN0cnVjdCByZXZfaW5mbyAqcmV2cykKQEAgLTI0ODIsNyArMjkyNyw3IEBACiAJICogSWYgcmV2cy0+dG9wb19vcmRlciBpcyBzZXQsIHNvcnQgdGhlIGJvdW5kYXJ5IGNvbW1pdHMKIAkgKiBpbiB0b3BvbG9naWNhbCBvcmRlcgogCSAqLwotCXNvcnRfaW5fdG9wb2xvZ2ljYWxfb3JkZXIoJnJldnMtPmNvbW1pdHMsIHJldnMtPmxpZm8pOworCXNvcnRfaW5fdG9wb2xvZ2ljYWxfb3JkZXIoJnJldnMtPmNvbW1pdHMsIHJldnMtPnNvcnRfb3JkZXIpOwogfQogCiBzdGF0aWMgc3RydWN0IGNvbW1pdCAqZ2V0X3JldmlzaW9uX2ludGVybmFsKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKZGlmZiAtLWdpdCBhL3JldmlzaW9uLmggYi9yZXZpc2lvbi5oCmluZGV4IDAxYmQyYjcuLjk1ODU5YmEgMTAwNjQ0Ci0tLSBhL3JldmlzaW9uLmgKKysrIGIvcmV2aXNpb24uaApAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCiAjaW5jbHVkZSAiZ3JlcC5oIgogI2luY2x1ZGUgIm5vdGVzLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCiAKICNkZWZpbmUgU0VFTgkJKDF1PDwwKQogI2RlZmluZSBVTklOVEVSRVNUSU5HICAgKDF1PDwxKQpAQCAtMTUsNyArMTYsOCBAQAogI2RlZmluZSBBRERFRAkJKDF1PDw3KQkvKiBQYXJlbnRzIGFscmVhZHkgcGFyc2VkIGFuZCBhZGRlZD8gKi8KICNkZWZpbmUgU1lNTUVUUklDX0xFRlQJKDF1PDw4KQogI2RlZmluZSBQQVRDSFNBTUUJKDF1PDw5KQotI2RlZmluZSBBTExfUkVWX0ZMQUdTCSgoMXU8PDEwKS0xKQorI2RlZmluZSBCT1RUT00JCSgxdTw8MTApCisjZGVmaW5lIEFMTF9SRVZfRkxBR1MJKCgxdTw8MTEpLTEpCiAKICNkZWZpbmUgREVDT1JBVEVfU0hPUlRfUkVGUwkxCiAjZGVmaW5lIERFQ09SQVRFX0ZVTExfUkVGUwkyCkBAIC0zNSw2ICszNyw3IEBACiAJCQlSRVZfQ01EX1BBUkVOVFNfT05MWSwKIAkJCVJFVl9DTURfTEVGVCwKIAkJCVJFVl9DTURfUklHSFQsCisJCQlSRVZfQ01EX01FUkdFX0JBU0UsCiAJCQlSRVZfQ01EX1JFVgogCQl9IHdoZW5jZTsKIAkJdW5zaWduZWQgZmxhZ3M7CkBAIC02MCw2ICs2MywxMCBAQAogCWNvbnN0IGNoYXIgKnByZWZpeDsKIAljb25zdCBjaGFyICpkZWY7CiAJc3RydWN0IHBhdGhzcGVjIHBydW5lX2RhdGE7CisKKwkvKiB0b3BvLXNvcnQgKi8KKwllbnVtIHJldl9zb3J0X29yZGVyIHNvcnRfb3JkZXI7CisKIAl1bnNpZ25lZCBpbnQJZWFybHlfb3V0cHV0OjEsCiAJCQlpZ25vcmVfbWlzc2luZzoxOwogCkBAIC03MCw3ICs3Nyw2IEBACiAJCQlzaG93X2FsbDoxLAogCQkJcmVtb3ZlX2VtcHR5X3RyZWVzOjEsCiAJCQlzaW1wbGlmeV9oaXN0b3J5OjEsCi0JCQlsaWZvOjEsCiAJCQl0b3BvX29yZGVyOjEsCiAJCQlzaW1wbGlmeV9tZXJnZXM6MSwKIAkJCXNpbXBsaWZ5X2J5X2RlY29yYXRpb246MSwKQEAgLTk2LDcgKzEwMiw4IEBACiAJCQljaGVycnlfbWFyazoxLAogCQkJYmlzZWN0OjEsCiAJCQlhbmNlc3RyeV9wYXRoOjEsCi0JCQlmaXJzdF9wYXJlbnRfb25seToxOworCQkJZmlyc3RfcGFyZW50X29ubHk6MSwKKwkJCWxpbmVfbGV2ZWxfdHJhdmVyc2U6MTsKIAogCS8qIERpZmYgZmxhZ3MgKi8KIAl1bnNpZ25lZCBpbnQJZGlmZjoxLApAQCAtMTM3LDYgKzE0NCw3IEBACiAJaW50CQludW1iZXJlZF9maWxlczsKIAlpbnQJCXJlcm9sbF9jb3VudDsKIAljaGFyCQkqbWVzc2FnZV9pZDsKKwlzdHJ1Y3QgaWRlbnRfc3BsaXQgZnJvbV9pZGVudDsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZl9tZXNzYWdlX2lkczsKIAlpbnQJCWFkZF9zaWdub2ZmOwogCWNvbnN0IGNoYXIJKmV4dHJhX2hlYWRlcnM7CkBAIC0xNjcsNiArMTc1LDcgQEAKIAlzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqcmVmbG9nX2luZm87CiAJc3RydWN0IGRlY29yYXRpb24gY2hpbGRyZW47CiAJc3RydWN0IGRlY29yYXRpb24gbWVyZ2Vfc2ltcGxpZmljYXRpb247CisJc3RydWN0IGRlY29yYXRpb24gdHJlZXNhbWU7CiAKIAkvKiBub3Rlcy1zcGVjaWZpYyBvcHRpb25zOiB3aGljaCByZWZzIHRvIHNob3cgKi8KIAlzdHJ1Y3QgZGlzcGxheV9ub3Rlc19vcHQgbm90ZXNfb3B0OwpAQCAtMTc1LDYgKzE4NCw5IEBACiAJaW50IGNvdW50X2xlZnQ7CiAJaW50IGNvdW50X3JpZ2h0OwogCWludCBjb3VudF9zYW1lOworCisJLyogbGluZSBsZXZlbCByYW5nZSB0aGF0IHdlIGFyZSBjaGFzaW5nICovCisJc3RydWN0IGRlY29yYXRpb24gbGluZV9sb2dfZGF0YTsKIH07CiAKICNkZWZpbmUgUkVWX1RSRUVfU0FNRQkJMApAQCAtMTk1LDE5ICsyMDcsMjMgQEAKIH07CiAKIGV4dGVybiB2b2lkIGluaXRfcmV2aXNpb25zKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3QgY2hhciAqcHJlZml4KTsKLWV4dGVybiBpbnQgc2V0dXBfcmV2aXNpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0ICopOworZXh0ZXJuIGludCBzZXR1cF9yZXZpc2lvbnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgICBzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0ICopOwogZXh0ZXJuIHZvaWQgcGFyc2VfcmV2aXNpb25fb3B0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAotCQkJCSBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zLAotCQkJCSBjb25zdCBjaGFyICogY29uc3QgdXNhZ2VzdHJbXSk7CisJCQkgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucywKKwkJCSAgICAgICBjb25zdCBjaGFyICogY29uc3QgdXNhZ2VzdHJbXSk7CiAjZGVmaW5lIFJFVkFSR19DQU5OT1RfQkVfRklMRU5BTUUgMDEKICNkZWZpbmUgUkVWQVJHX0NPTU1JVFRJU0ggMDIKLWV4dGVybiBpbnQgaGFuZGxlX3JldmlzaW9uX2FyZyhjb25zdCBjaGFyICphcmcsIHN0cnVjdCByZXZfaW5mbyAqcmV2cywgaW50IGZsYWdzLCB1bnNpZ25lZCByZXZhcmdfb3B0KTsKK2V4dGVybiBpbnQgaGFuZGxlX3JldmlzaW9uX2FyZyhjb25zdCBjaGFyICphcmcsIHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgICAgICBpbnQgZmxhZ3MsIHVuc2lnbmVkIHJldmFyZ19vcHQpOwogCiBleHRlcm4gdm9pZCByZXNldF9yZXZpc2lvbl93YWxrKHZvaWQpOwogZXh0ZXJuIGludCBwcmVwYXJlX3JldmlzaW9uX3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXZzKTsKIGV4dGVybiBzdHJ1Y3QgY29tbWl0ICpnZXRfcmV2aXNpb24oc3RydWN0IHJldl9pbmZvICpyZXZzKTsKLWV4dGVybiBjaGFyICpnZXRfcmV2aXNpb25fbWFyayhjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCk7Ci1leHRlcm4gdm9pZCBwdXRfcmV2aXNpb25fbWFyayhjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCk7CitleHRlcm4gY2hhciAqZ2V0X3JldmlzaW9uX21hcmsoY29uc3Qgc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCk7CitleHRlcm4gdm9pZCBwdXRfcmV2aXNpb25fbWFyayhjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOwogCiBleHRlcm4gdm9pZCBtYXJrX3BhcmVudHNfdW5pbnRlcmVzdGluZyhzdHJ1Y3QgY29tbWl0ICpjb21taXQpOwogZXh0ZXJuIHZvaWQgbWFya190cmVlX3VuaW50ZXJlc3Rpbmcoc3RydWN0IHRyZWUgKnRyZWUpOwpAQCAtMjIwLDE1ICsyMzYsMTkgQEAKIAogY2hhciAqcGF0aF9uYW1lKGNvbnN0IHN0cnVjdCBuYW1lX3BhdGggKnBhdGgsIGNvbnN0IGNoYXIgKm5hbWUpOwogCi1leHRlcm4gdm9pZCBzaG93X29iamVjdF93aXRoX25hbWUoRklMRSAqLCBzdHJ1Y3Qgb2JqZWN0ICosIGNvbnN0IHN0cnVjdCBuYW1lX3BhdGggKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIHNob3dfb2JqZWN0X3dpdGhfbmFtZShGSUxFICosIHN0cnVjdCBvYmplY3QgKiwKKwkJCQkgIGNvbnN0IHN0cnVjdCBuYW1lX3BhdGggKiwgY29uc3QgY2hhciAqKTsKIAogZXh0ZXJuIHZvaWQgYWRkX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosCiAJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICpwLAogCQkgICAgICAgc3RydWN0IG5hbWVfcGF0aCAqcGF0aCwKIAkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpOwogCi1leHRlcm4gdm9pZCBhZGRfcGVuZGluZ19vYmplY3Qoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpOwotZXh0ZXJuIHZvaWQgYWRkX3BlbmRpbmdfc2hhMShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkIGludCBmbGFncyk7CitleHRlcm4gdm9pZCBhZGRfcGVuZGluZ19vYmplY3Qoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICAgICAgIHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gdm9pZCBhZGRfcGVuZGluZ19zaGExKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKIAogZXh0ZXJuIHZvaWQgYWRkX2hlYWRfdG9fcGVuZGluZyhzdHJ1Y3QgcmV2X2luZm8gKik7CiAKQEAgLTIzOCw3ICsyNTgsMTkgQEAKIAljb21taXRfZXJyb3IKIH07CiAKLWV4dGVybiBlbnVtIGNvbW1pdF9hY3Rpb24gZ2V0X2NvbW1pdF9hY3Rpb24oc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOwotZXh0ZXJuIGVudW0gY29tbWl0X2FjdGlvbiBzaW1wbGlmeV9jb21taXQoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworZXh0ZXJuIGVudW0gY29tbWl0X2FjdGlvbiBnZXRfY29tbWl0X2FjdGlvbihzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJCSAgICBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworZXh0ZXJuIGVudW0gY29tbWl0X2FjdGlvbiBzaW1wbGlmeV9jb21taXQoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCQkgIHN0cnVjdCBjb21taXQgKmNvbW1pdCk7CiAKK2VudW0gcmV3cml0ZV9yZXN1bHQgeworCXJld3JpdGVfb25lX29rLAorCXJld3JpdGVfb25lX25vcGFyZW50cywKKwlyZXdyaXRlX29uZV9lcnJvcgorfTsKKwordHlwZWRlZiBlbnVtIHJld3JpdGVfcmVzdWx0ICgqcmV3cml0ZV9wYXJlbnRfZm5fdCkoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICoqcHApOworCitleHRlcm4gaW50IHJld3JpdGVfcGFyZW50cyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwlyZXdyaXRlX3BhcmVudF9mbl90IHJld3JpdGVfcGFyZW50KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvcnVuLWNvbW1hbmQuYyBiL3J1bi1jb21tYW5kLmMKaW5kZXggMWIzMmExMi4uMWI3Zjg4ZSAxMDA2NDQKLS0tIGEvcnVuLWNvbW1hbmQuYworKysgYi9ydW4tY29tbWFuZC5jCkBAIC03MiwxMSArNzIsMTQgQEAKIAljbG9zZShmZFsxXSk7CiB9CiAKLSNpZm5kZWYgV0lOMzIKKyNpZm5kZWYgR0lUX1dJTkRPV1NfTkFUSVZFCiBzdGF0aWMgaW5saW5lIHZvaWQgZHVwX2Rldm51bGwoaW50IHRvKQogewogCWludCBmZCA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUik7Ci0JZHVwMihmZCwgdG8pOworCWlmIChmZCA8IDApCisJCWRpZV9lcnJubyhfKCJvcGVuIC9kZXYvbnVsbCBmYWlsZWQiKSk7CisJaWYgKGR1cDIoZmQsIHRvKSA8IDApCisJCWRpZV9lcnJubyhfKCJkdXAyKCVkLCVkKSBmYWlsZWQiKSwgZmQsIHRvKTsKIAljbG9zZShmZCk7CiB9CiAjZW5kaWYKQEAgLTE1OSw3ICsxNjIsNyBAQAogCQlkaWUoIkJVRzogc2hlbGwgY29tbWFuZCBpcyBlbXB0eSIpOwogCiAJaWYgKHN0cmNzcG4oYXJndlswXSwgInwmOzw+KCkkYFxcXCInIFx0XG4qP1sjfj0lIikgIT0gc3RybGVuKGFyZ3ZbMF0pKSB7Ci0jaWZuZGVmIFdJTjMyCisjaWZuZGVmIEdJVF9XSU5ET1dTX05BVElWRQogCQluYXJndltuYXJnYysrXSA9IFNIRUxMX1BBVEg7CiAjZWxzZQogCQluYXJndltuYXJnYysrXSA9ICJzaCI7CkBAIC0xODIsNyArMTg1LDcgQEAKIAlyZXR1cm4gbmFyZ3Y7CiB9CiAKLSNpZm5kZWYgV0lOMzIKKyNpZm5kZWYgR0lUX1dJTkRPV1NfTkFUSVZFCiBzdGF0aWMgaW50IGV4ZWN2X3NoZWxsX2NtZChjb25zdCBjaGFyICoqYXJndikKIHsKIAljb25zdCBjaGFyICoqbmFyZ3YgPSBwcmVwYXJlX3NoZWxsX2NtZChhcmd2KTsKQEAgLTE5Myw3ICsxOTYsNyBAQAogfQogI2VuZGlmCiAKLSNpZm5kZWYgV0lOMzIKKyNpZm5kZWYgR0lUX1dJTkRPV1NfTkFUSVZFCiBzdGF0aWMgaW50IGNoaWxkX2VyciA9IDI7CiBzdGF0aWMgaW50IGNoaWxkX25vdGlmaWVyID0gLTE7CiAKQEAgLTMzNCw3ICszMzcsNyBAQAogCXRyYWNlX2FyZ3ZfcHJpbnRmKGNtZC0+YXJndiwgInRyYWNlOiBydW5fY29tbWFuZDoiKTsKIAlmZmx1c2goTlVMTCk7CiAKLSNpZm5kZWYgV0lOMzIKKyNpZm5kZWYgR0lUX1dJTkRPV1NfTkFUSVZFCiB7CiAJaW50IG5vdGlmeV9waXBlWzJdOwogCWlmIChwaXBlKG5vdGlmeV9waXBlKSkKZGlmZiAtLWdpdCBhL3J1bi1jb21tYW5kLmggYi9ydW4tY29tbWFuZC5oCmluZGV4IDIyMWNlMzMuLjZiOTg1YWYgMTAwNjQ0Ci0tLSBhL3J1bi1jb21tYW5kLmgKKysrIGIvcnVuLWNvbW1hbmQuaApAQCAtNDYsNiArNDYsNyBAQAogaW50IHJ1bl9jb21tYW5kKHN0cnVjdCBjaGlsZF9wcm9jZXNzICopOwogCiBleHRlcm4gY2hhciAqZmluZF9ob29rKGNvbnN0IGNoYXIgKm5hbWUpOworTEFTVF9BUkdfTVVTVF9CRV9OVUxMCiBleHRlcm4gaW50IHJ1bl9ob29rKGNvbnN0IGNoYXIgKmluZGV4X2ZpbGUsIGNvbnN0IGNoYXIgKm5hbWUsIC4uLik7CiAKICNkZWZpbmUgUlVOX0NPTU1BTkRfTk9fU1RESU4gMQpkaWZmIC0tZ2l0IGEvc2VxdWVuY2VyLmMgYi9zZXF1ZW5jZXIuYwppbmRleCBhYjZmOGE3Li4zNTE1NDhmIDEwMDY0NAotLS0gYS9zZXF1ZW5jZXIuYworKysgYi9zZXF1ZW5jZXIuYwpAQCAtMjcwLDE1ICsyNzAsMjAgQEAKIH0KIAogc3RhdGljIGludCBmYXN0X2ZvcndhcmRfdG8oY29uc3QgdW5zaWduZWQgY2hhciAqdG8sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sCi0JCQkgICBpbnQgdW5ib3JuKQorCQkJaW50IHVuYm9ybiwgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQogewogCXN0cnVjdCByZWZfbG9jayAqcmVmX2xvY2s7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCByZXQ7CiAKIAlyZWFkX2NhY2hlKCk7CiAJaWYgKGNoZWNrb3V0X2Zhc3RfZm9yd2FyZChmcm9tLCB0bywgMSkpCiAJCWV4aXQoMSk7IC8qIHRoZSBjYWxsZWUgc2hvdWxkIGhhdmUgY29tcGxhaW5lZCBhbHJlYWR5ICovCiAJcmVmX2xvY2sgPSBsb2NrX2FueV9yZWZfZm9yX3VwZGF0ZSgiSEVBRCIsIHVuYm9ybiA/IG51bGxfc2hhMSA6IGZyb20sIDApOwotCXJldHVybiB3cml0ZV9yZWZfc2hhMShyZWZfbG9jaywgdG8sICJjaGVycnktcGljayIpOworCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzOiBmYXN0LWZvcndhcmQiLCBhY3Rpb25fbmFtZShvcHRzKSk7CisJcmV0ID0gd3JpdGVfcmVmX3NoYTEocmVmX2xvY2ssIHRvLCBzYi5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBkb19yZWN1cnNpdmVfbWVyZ2Uoc3RydWN0IGNvbW1pdCAqYmFzZSwgc3RydWN0IGNvbW1pdCAqbmV4dCwKQEAgLTMyNiw3ICszMzEsNyBAQAogCQlpbnQgaTsKIAkJc3RyYnVmX2FkZHN0cihtc2didWYsICJcbkNvbmZsaWN0czpcbiIpOwogCQlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOykgewotCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpKytdOworCQkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpKytdOwogCQkJaWYgKGNlX3N0YWdlKGNlKSkgewogCQkJCXN0cmJ1Zl9hZGRjaChtc2didWYsICdcdCcpOwogCQkJCXN0cmJ1Zl9hZGRzdHIobXNnYnVmLCBjZS0+bmFtZSk7CkBAIC0zNjYsOCArMzcxLDkgQEAKIAkJYWN0aXZlX2NhY2hlX3RyZWUgPSBjYWNoZV90cmVlKCk7CiAKIAlpZiAoIWNhY2hlX3RyZWVfZnVsbHlfdmFsaWQoYWN0aXZlX2NhY2hlX3RyZWUpKQotCQlpZiAoY2FjaGVfdHJlZV91cGRhdGUoYWN0aXZlX2NhY2hlX3RyZWUsIGFjdGl2ZV9jYWNoZSwKLQkJCQkgIGFjdGl2ZV9uciwgMCkpCisJCWlmIChjYWNoZV90cmVlX3VwZGF0ZShhY3RpdmVfY2FjaGVfdHJlZSwKKwkJCQkgICAgICAoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICogY29uc3QgKilhY3RpdmVfY2FjaGUsCisJCQkJICAgICAgYWN0aXZlX25yLCAwKSkKIAkJCXJldHVybiBlcnJvcihfKCJVbmFibGUgdG8gdXBkYXRlIGNhY2hlIHRyZWVcbiIpKTsKIAogCXJldHVybiAhaGFzaGNtcChhY3RpdmVfY2FjaGVfdHJlZS0+c2hhMSwgaGVhZF9jb21taXQtPnRyZWUtPm9iamVjdC5zaGExKTsKQEAgLTQ3NCw3ICs0ODAsNyBAQAogCXN0cnVjdCBjb21taXRfbWVzc2FnZSBtc2cgPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKIAljaGFyICpkZWZtc2cgPSBOVUxMOwogCXN0cnVjdCBzdHJidWYgbXNnYnVmID0gU1RSQlVGX0lOSVQ7Ci0JaW50IHJlcywgdW5ib3JuID0gMDsKKwlpbnQgcmVzLCB1bmJvcm4gPSAwLCBhbGxvdzsKIAogCWlmIChvcHRzLT5ub19jb21taXQpIHsKIAkJLyoKQEAgLTUyMyw3ICs1MjksNyBAQAogCWlmIChvcHRzLT5hbGxvd19mZiAmJgogCSAgICAoKHBhcmVudCAmJiAhaGFzaGNtcChwYXJlbnQtPm9iamVjdC5zaGExLCBoZWFkKSkgfHwKIAkgICAgICghcGFyZW50ICYmIHVuYm9ybikpKQotCSAgICAgcmV0dXJuIGZhc3RfZm9yd2FyZF90byhjb21taXQtPm9iamVjdC5zaGExLCBoZWFkLCB1bmJvcm4pOworCQlyZXR1cm4gZmFzdF9mb3J3YXJkX3RvKGNvbW1pdC0+b2JqZWN0LnNoYTEsIGhlYWQsIHVuYm9ybiwgb3B0cyk7CiAKIAlpZiAocGFyZW50ICYmIHBhcnNlX2NvbW1pdChwYXJlbnQpIDwgMCkKIAkJLyogVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyB3aWxsIGJlICJyZXZlcnQiIG9yCkBAIC02MjQsMTQgKzYzMCwxOCBAQAogCQkgICAgICBtc2cuc3ViamVjdCk7CiAJCXByaW50X2FkdmljZShyZXMgPT0gMSwgb3B0cyk7CiAJCXJlcmVyZShvcHRzLT5hbGxvd19yZXJlcmVfYXV0byk7Ci0JfSBlbHNlIHsKLQkJaW50IGFsbG93ID0gYWxsb3dfZW1wdHkob3B0cywgY29tbWl0KTsKLQkJaWYgKGFsbG93IDwgMCkKLQkJCXJldHVybiBhbGxvdzsKLQkJaWYgKCFvcHRzLT5ub19jb21taXQpCi0JCQlyZXMgPSBydW5fZ2l0X2NvbW1pdChkZWZtc2csIG9wdHMsIGFsbG93KTsKKwkJZ290byBsZWF2ZTsKIAl9CiAKKwlhbGxvdyA9IGFsbG93X2VtcHR5KG9wdHMsIGNvbW1pdCk7CisJaWYgKGFsbG93IDwgMCkgeworCQlyZXMgPSBhbGxvdzsKKwkJZ290byBsZWF2ZTsKKwl9CisJaWYgKCFvcHRzLT5ub19jb21taXQpCisJCXJlcyA9IHJ1bl9naXRfY29tbWl0KGRlZm1zZywgb3B0cywgYWxsb3cpOworCitsZWF2ZToKIAlmcmVlX21lc3NhZ2UoJm1zZyk7CiAJZnJlZShkZWZtc2cpOwogCmRpZmYgLS1naXQgYS9zZXR1cC5jIGIvc2V0dXAuYwppbmRleCA5NGMxZTYxLi41MjYyMzE5IDEwMDY0NAotLS0gYS9zZXR1cC5jCisrKyBiL3NldHVwLmMKQEAgLTM2MCw2ICszNjAsNyBAQAogCiB2b2lkIHNldHVwX3dvcmtfdHJlZSh2b2lkKQogeworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKIAljb25zdCBjaGFyICp3b3JrX3RyZWUsICpnaXRfZGlyOwogCXN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgPSAwOwogCkBAIC0zNzksOCArMzgwLDEwIEBACiAJaWYgKGdldGVudihHSVRfV09SS19UUkVFX0VOVklST05NRU5UKSkKIAkJc2V0ZW52KEdJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQsICIuIiwgMSk7CiAKLQlzZXRfZ2l0X2RpcihyZWxhdGl2ZV9wYXRoKGdpdF9kaXIsIHdvcmtfdHJlZSkpOworCXNldF9naXRfZGlyKHJlbGF0aXZlX3BhdGgoZ2l0X2Rpciwgd29ya190cmVlLCAmc2IpKTsKIAlpbml0aWFsaXplZCA9IDE7CisKKwlzdHJidWZfcmVsZWFzZSgmc2IpOwogfQogCiBzdGF0aWMgaW50IGNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0X2dlbnRseShjb25zdCBjaGFyICpnaXRkaXIsIGludCAqbm9uZ2l0X29rKQpAQCAtOTA4LDMgKzkxMSwxNSBAQAogCQlyZXR1cm4gc3VzcGVjdDsKIAlyZXR1cm4gcmVhZF9naXRmaWxlKHN1c3BlY3QpOwogfQorCisvKiBpZiBhbnkgc3RhbmRhcmQgZmlsZSBkZXNjcmlwdG9yIGlzIG1pc3Npbmcgb3BlbiBpdCB0byAvZGV2L251bGwgKi8KK3ZvaWQgc2FuaXRpemVfc3RkZmRzKHZvaWQpCit7CisJaW50IGZkID0gb3BlbigiL2Rldi9udWxsIiwgT19SRFdSLCAwKTsKKwl3aGlsZSAoZmQgIT0gLTEgJiYgZmQgPCAyKQorCQlmZCA9IGR1cChmZCk7CisJaWYgKGZkID09IC0xKQorCQlkaWVfZXJybm8oIm9wZW4gL2Rldi9udWxsIG9yIGR1cCBmYWlsZWQiKTsKKwlpZiAoZmQgPiAyKQorCQljbG9zZShmZCk7Cit9CmRpZmYgLS1naXQgYS9zaGExX2ZpbGUuYyBiL3NoYTFfZmlsZS5jCmluZGV4IDY3ZTgxNWIuLjhlMjdkYjEgMTAwNjQ0Ci0tLSBhL3NoYTFfZmlsZS5jCisrKyBiL3NoYTFfZmlsZS5jCkBAIC0zNiw2ICszNiw5IEBACiAKIGNvbnN0IHVuc2lnbmVkIGNoYXIgbnVsbF9zaGExWzIwXTsKIAorc3RhdGljIGNvbnN0IGNoYXIgKm5vX2xvZ19wYWNrX2FjY2VzcyA9ICJub19sb2dfcGFja19hY2Nlc3MiOworc3RhdGljIGNvbnN0IGNoYXIgKmxvZ19wYWNrX2FjY2VzczsKKwogLyoKICAqIFRoaXMgaXMgbWVhbnQgdG8gaG9sZCBhICpzbWFsbCogbnVtYmVyIG9mIG9iamVjdHMgdGhhdCB5b3Ugd291bGQKICAqIHdhbnQgcmVhZF9zaGExX2ZpbGUoKSB0byBiZSBhYmxlIHRvIHJldHVybiwgYnV0IHlldCB5b3UgZG8gbm90IHdhbnQKQEAgLTEzMDMsNiArMTMwNiwyNiBAQAogCX0KIH0KIAorc3RhdGljIGludCBzdGF0X3NoYTFfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJY2hhciAqbmFtZSA9IHNoYTFfZmlsZV9uYW1lKHNoYTEpOworCXN0cnVjdCBhbHRlcm5hdGVfb2JqZWN0X2RhdGFiYXNlICphbHQ7CisKKwlpZiAoIWxzdGF0KG5hbWUsIHN0KSkKKwkJcmV0dXJuIDA7CisKKwlwcmVwYXJlX2FsdF9vZGIoKTsKKwllcnJubyA9IEVOT0VOVDsKKwlmb3IgKGFsdCA9IGFsdF9vZGJfbGlzdDsgYWx0OyBhbHQgPSBhbHQtPm5leHQpIHsKKwkJbmFtZSA9IGFsdC0+bmFtZTsKKwkJZmlsbF9zaGExX3BhdGgobmFtZSwgc2hhMSk7CisJCWlmICghbHN0YXQoYWx0LT5iYXNlLCBzdCkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKIHN0YXRpYyBpbnQgb3Blbl9zaGExX2ZpbGUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKIAlpbnQgZmQ7CkBAIC0xNjkwLDQ2ICsxNzEzLDIxIEBACiAJcmV0dXJuIHR5cGU7CiB9CiAKLQogI2RlZmluZSBQT0lfU1RBQ0tfUFJFQUxMT0MgNjQKIAotc3RhdGljIGludCBwYWNrZWRfb2JqZWN0X2luZm8oc3RydWN0IHBhY2tlZF9naXQgKnAsIG9mZl90IG9ial9vZmZzZXQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nICpzaXplcCwgaW50ICpydHlwZSkKK3N0YXRpYyBlbnVtIG9iamVjdF90eXBlIHBhY2tlZF90b19vYmplY3RfdHlwZShzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJCQkJICAgICAgb2ZmX3Qgb2JqX29mZnNldCwKKwkJCQkJICAgICAgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJCQkgICAgICBzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnMsCisJCQkJCSAgICAgIG9mZl90IGN1cnBvcykKIHsKLQlzdHJ1Y3QgcGFja193aW5kb3cgKndfY3VycyA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCW9mZl90IGN1cnBvcyA9IG9ial9vZmZzZXQ7Ci0JZW51bSBvYmplY3RfdHlwZSB0eXBlOwogCW9mZl90IHNtYWxsX3BvaV9zdGFja1tQT0lfU1RBQ0tfUFJFQUxMT0NdOwogCW9mZl90ICpwb2lfc3RhY2sgPSBzbWFsbF9wb2lfc3RhY2s7CiAJaW50IHBvaV9zdGFja19uciA9IDAsIHBvaV9zdGFja19hbGxvYyA9IFBPSV9TVEFDS19QUkVBTExPQzsKIAotCXR5cGUgPSB1bnBhY2tfb2JqZWN0X2hlYWRlcihwLCAmd19jdXJzLCAmY3VycG9zLCAmc2l6ZSk7Ci0KLQlpZiAocnR5cGUpCi0JCSpydHlwZSA9IHR5cGU7IC8qIHJlcHJlc2VudGF0aW9uIHR5cGUgKi8KLQotCWlmIChzaXplcCkgewotCQlpZiAodHlwZSA9PSBPQkpfT0ZTX0RFTFRBIHx8IHR5cGUgPT0gT0JKX1JFRl9ERUxUQSkgewotCQkJb2ZmX3QgdG1wX3BvcyA9IGN1cnBvczsKLQkJCW9mZl90IGJhc2Vfb2Zmc2V0ID0gZ2V0X2RlbHRhX2Jhc2UocCwgJndfY3VycywgJnRtcF9wb3MsCi0JCQkJCQkJICAgdHlwZSwgb2JqX29mZnNldCk7Ci0JCQlpZiAoIWJhc2Vfb2Zmc2V0KSB7Ci0JCQkJdHlwZSA9IE9CSl9CQUQ7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQkqc2l6ZXAgPSBnZXRfc2l6ZV9mcm9tX2RlbHRhKHAsICZ3X2N1cnMsIHRtcF9wb3MpOwotCQkJaWYgKCpzaXplcCA9PSAwKSB7Ci0JCQkJdHlwZSA9IE9CSl9CQUQ7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkqc2l6ZXAgPSBzaXplOwotCQl9Ci0JfQotCiAJd2hpbGUgKHR5cGUgPT0gT0JKX09GU19ERUxUQSB8fCB0eXBlID09IE9CSl9SRUZfREVMVEEpIHsKIAkJb2ZmX3QgYmFzZV9vZmZzZXQ7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAkJLyogUHVzaCB0aGUgb2JqZWN0IHdlJ3JlIGdvaW5nIHRvIGxlYXZlIGJlaGluZCAqLwogCQlpZiAocG9pX3N0YWNrX25yID49IHBvaV9zdGFja19hbGxvYyAmJiBwb2lfc3RhY2sgPT0gc21hbGxfcG9pX3N0YWNrKSB7CiAJCQlwb2lfc3RhY2tfYWxsb2MgPSBhbGxvY19ucihwb2lfc3RhY2tfbnIpOwpAQCAtMTc0MCwxMSArMTczOCwxMSBAQAogCQl9CiAJCXBvaV9zdGFja1twb2lfc3RhY2tfbnIrK10gPSBvYmpfb2Zmc2V0OwogCQkvKiBJZiBwYXJzaW5nIHRoZSBiYXNlIG9mZnNldCBmYWlscywganVzdCB1bndpbmQgKi8KLQkJYmFzZV9vZmZzZXQgPSBnZXRfZGVsdGFfYmFzZShwLCAmd19jdXJzLCAmY3VycG9zLCB0eXBlLCBvYmpfb2Zmc2V0KTsKKwkJYmFzZV9vZmZzZXQgPSBnZXRfZGVsdGFfYmFzZShwLCB3X2N1cnMsICZjdXJwb3MsIHR5cGUsIG9ial9vZmZzZXQpOwogCQlpZiAoIWJhc2Vfb2Zmc2V0KQogCQkJZ290byB1bndpbmQ7CiAJCWN1cnBvcyA9IG9ial9vZmZzZXQgPSBiYXNlX29mZnNldDsKLQkJdHlwZSA9IHVucGFja19vYmplY3RfaGVhZGVyKHAsICZ3X2N1cnMsICZjdXJwb3MsICZzaXplKTsKKwkJdHlwZSA9IHVucGFja19vYmplY3RfaGVhZGVyKHAsIHdfY3VycywgJmN1cnBvcywgJnNpemUpOwogCQlpZiAodHlwZSA8PSBPQkpfTk9ORSkgewogCQkJLyogSWYgZ2V0dGluZyB0aGUgYmFzZSBpdHNlbGYgZmFpbHMsIHdlIGZpcnN0CiAJCQkgKiByZXRyeSB0aGUgYmFzZSwgb3RoZXJ3aXNlIHVud2luZCAqLwpAQCAtMTc3MSw3ICsxNzY5LDYgQEAKIG91dDoKIAlpZiAocG9pX3N0YWNrICE9IHNtYWxsX3BvaV9zdGFjaykKIAkJZnJlZShwb2lfc3RhY2spOwotCXVudXNlX3BhY2soJndfY3Vycyk7CiAJcmV0dXJuIHR5cGU7CiAKIHVud2luZDoKQEAgLTE3ODUsNiArMTc4Miw1NyBAQAogCWdvdG8gb3V0OwogfQogCitzdGF0aWMgaW50IHBhY2tlZF9vYmplY3RfaW5mbyhzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgb2ZmX3Qgb2JqX29mZnNldCwKKwkJCSAgICAgIHN0cnVjdCBvYmplY3RfaW5mbyAqb2kpCit7CisJc3RydWN0IHBhY2tfd2luZG93ICp3X2N1cnMgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlvZmZfdCBjdXJwb3MgPSBvYmpfb2Zmc2V0OworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKworCS8qCisJICogV2UgYWx3YXlzIGdldCB0aGUgcmVwcmVzZW50YXRpb24gdHlwZSwgYnV0IG9ubHkgY29udmVydCBpdCB0bworCSAqIGEgInJlYWwiIHR5cGUgbGF0ZXIgaWYgdGhlIGNhbGxlciBpcyBpbnRlcmVzdGVkLgorCSAqLworCXR5cGUgPSB1bnBhY2tfb2JqZWN0X2hlYWRlcihwLCAmd19jdXJzLCAmY3VycG9zLCAmc2l6ZSk7CisKKwlpZiAob2ktPnNpemVwKSB7CisJCWlmICh0eXBlID09IE9CSl9PRlNfREVMVEEgfHwgdHlwZSA9PSBPQkpfUkVGX0RFTFRBKSB7CisJCQlvZmZfdCB0bXBfcG9zID0gY3VycG9zOworCQkJb2ZmX3QgYmFzZV9vZmZzZXQgPSBnZXRfZGVsdGFfYmFzZShwLCAmd19jdXJzLCAmdG1wX3BvcywKKwkJCQkJCQkgICB0eXBlLCBvYmpfb2Zmc2V0KTsKKwkJCWlmICghYmFzZV9vZmZzZXQpIHsKKwkJCQl0eXBlID0gT0JKX0JBRDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCSpvaS0+c2l6ZXAgPSBnZXRfc2l6ZV9mcm9tX2RlbHRhKHAsICZ3X2N1cnMsIHRtcF9wb3MpOworCQkJaWYgKCpvaS0+c2l6ZXAgPT0gMCkgeworCQkJCXR5cGUgPSBPQkpfQkFEOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9IGVsc2UgeworCQkJKm9pLT5zaXplcCA9IHNpemU7CisJCX0KKwl9CisKKwlpZiAob2ktPmRpc2tfc2l6ZXApIHsKKwkJc3RydWN0IHJldmluZGV4X2VudHJ5ICpyZXZpZHggPSBmaW5kX3BhY2tfcmV2aW5kZXgocCwgb2JqX29mZnNldCk7CisJCSpvaS0+ZGlza19zaXplcCA9IHJldmlkeFsxXS5vZmZzZXQgLSBvYmpfb2Zmc2V0OworCX0KKworCWlmIChvaS0+dHlwZXApIHsKKwkJKm9pLT50eXBlcCA9IHBhY2tlZF90b19vYmplY3RfdHlwZShwLCBvYmpfb2Zmc2V0LCB0eXBlLCAmd19jdXJzLCBjdXJwb3MpOworCQlpZiAoKm9pLT50eXBlcCA8IDApIHsKKwkJCXR5cGUgPSBPQkpfQkFEOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKK291dDoKKwl1bnVzZV9wYWNrKCZ3X2N1cnMpOworCXJldHVybiB0eXBlOworfQorCiBzdGF0aWMgdm9pZCAqdW5wYWNrX2NvbXByZXNzZWRfZW50cnkoc3RydWN0IHBhY2tlZF9naXQgKnAsCiAJCQkJICAgIHN0cnVjdCBwYWNrX3dpbmRvdyAqKndfY3VycywKIAkJCQkgICAgb2ZmX3QgY3VycG9zLApAQCAtMTk1NiwxMiArMjAwNCwxOSBAQAogewogCXN0YXRpYyBGSUxFICpsb2dfZmlsZTsKIAorCWlmICghbG9nX3BhY2tfYWNjZXNzKQorCQlsb2dfcGFja19hY2Nlc3MgPSBnZXRlbnYoIkdJVF9UUkFDRV9QQUNLX0FDQ0VTUyIpOworCWlmICghbG9nX3BhY2tfYWNjZXNzKQorCQlsb2dfcGFja19hY2Nlc3MgPSBub19sb2dfcGFja19hY2Nlc3M7CisJaWYgKGxvZ19wYWNrX2FjY2VzcyA9PSBub19sb2dfcGFja19hY2Nlc3MpCisJCXJldHVybjsKKwogCWlmICghbG9nX2ZpbGUpIHsKIAkJbG9nX2ZpbGUgPSBmb3Blbihsb2dfcGFja19hY2Nlc3MsICJ3Iik7CiAJCWlmICghbG9nX2ZpbGUpIHsKIAkJCWVycm9yKCJjYW5ub3Qgb3BlbiBwYWNrIGFjY2VzcyBsb2cgJyVzJyBmb3Igd3JpdGluZzogJXMiLAogCQkJICAgICAgbG9nX3BhY2tfYWNjZXNzLCBzdHJlcnJvcihlcnJubykpOwotCQkJbG9nX3BhY2tfYWNjZXNzID0gTlVMTDsKKwkJCWxvZ19wYWNrX2FjY2VzcyA9IG5vX2xvZ19wYWNrX2FjY2VzczsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTE5OTIsNyArMjA0Nyw3IEBACiAJaW50IGRlbHRhX3N0YWNrX25yID0gMCwgZGVsdGFfc3RhY2tfYWxsb2MgPSBVTlBBQ0tfRU5UUllfU1RBQ0tfUFJFQUxMT0M7CiAJaW50IGJhc2VfZnJvbV9jYWNoZSA9IDA7CiAKLQlpZiAobG9nX3BhY2tfYWNjZXNzKQorCWlmIChsb2dfcGFja19hY2Nlc3MgIT0gbm9fbG9nX3BhY2tfYWNjZXNzKQogCQl3cml0ZV9wYWNrX2FjY2Vzc19sb2cocCwgb2JqX29mZnNldCk7CiAKIAkvKiBQSEFTRSAxOiBkcmlsbCBkb3duIHRvIHRoZSBpbm5lcm1vc3QgYmFzZSBvYmplY3QgKi8KQEAgLTIxMzUsMTAgKzIxOTAsMTkgQEAKIAkJZGF0YSA9IHBhdGNoX2RlbHRhKGJhc2UsIGJhc2Vfc2l6ZSwKIAkJCQkgICBkZWx0YV9kYXRhLCBkZWx0YV9zaXplLAogCQkJCSAgICZzaXplKTsKLQkJaWYgKCFkYXRhKQotCQkJZGllKCJmYWlsZWQgdG8gYXBwbHkgZGVsdGEiKTsKIAotCQlmcmVlIChkZWx0YV9kYXRhKTsKKwkJLyoKKwkJICogV2UgY291bGQgbm90IGFwcGx5IHRoZSBkZWx0YTsgd2FybiB0aGUgdXNlciwgYnV0IGtlZXAgZ29pbmcuCisJCSAqIE91ciBmYWlsdXJlIHdpbGwgYmUgbm90aWNlZCBlaXRoZXIgaW4gdGhlIG5leHQgaXRlcmF0aW9uIG9mCisJCSAqIHRoZSBsb29wLCBvciBpZiB0aGlzIGlzIHRoZSBmaW5hbCBkZWx0YSwgaW4gdGhlIGNhbGxlciB3aGVuCisJCSAqIHdlIHJldHVybiBOVUxMLiBUaG9zZSBjb2RlIHBhdGhzIHdpbGwgdGFrZSBjYXJlIG9mIG1ha2luZworCQkgKiBhIG1vcmUgZXhwbGljaXQgd2FybmluZyBhbmQgcmV0cnlpbmcgd2l0aCBhbm90aGVyIGNvcHkgb2YKKwkJICogdGhlIG9iamVjdC4KKwkJICovCisJCWlmICghZGF0YSkKKwkJCWVycm9yKCJmYWlsZWQgdG8gYXBwbHkgZGVsdGEiKTsKKworCQlmcmVlKGRlbHRhX2RhdGEpOwogCX0KIAogCSpmaW5hbF90eXBlID0gdHlwZTsKQEAgLTIzMzgsNyArMjQwMiw4IEBACiAKIH0KIAotc3RhdGljIGludCBzaGExX2xvb3NlX29iamVjdF9pbmZvKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkIGxvbmcgKnNpemVwKQorc3RhdGljIGludCBzaGExX2xvb3NlX29iamVjdF9pbmZvKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJICBzdHJ1Y3Qgb2JqZWN0X2luZm8gKm9pKQogewogCWludCBzdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBtYXBzaXplLCBzaXplOwpAQCAtMjM0NiwxOSArMjQxMSwzNyBAQAogCWdpdF96c3RyZWFtIHN0cmVhbTsKIAljaGFyIGhkclszMl07CiAKKwkvKgorCSAqIElmIHdlIGRvbid0IGNhcmUgYWJvdXQgdHlwZSBvciBzaXplLCB0aGVuIHdlIGRvbid0CisJICogbmVlZCB0byBsb29rIGluc2lkZSB0aGUgb2JqZWN0IGF0IGFsbC4KKwkgKi8KKwlpZiAoIW9pLT50eXBlcCAmJiAhb2ktPnNpemVwKSB7CisJCWlmIChvaS0+ZGlza19zaXplcCkgeworCQkJc3RydWN0IHN0YXQgc3Q7CisJCQlpZiAoc3RhdF9zaGExX2ZpbGUoc2hhMSwgJnN0KSA8IDApCisJCQkJcmV0dXJuIC0xOworCQkJKm9pLT5kaXNrX3NpemVwID0gc3Quc3Rfc2l6ZTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKIAltYXAgPSBtYXBfc2hhMV9maWxlKHNoYTEsICZtYXBzaXplKTsKIAlpZiAoIW1hcCkKLQkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gZmluZCAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJcmV0dXJuIC0xOworCWlmIChvaS0+ZGlza19zaXplcCkKKwkJKm9pLT5kaXNrX3NpemVwID0gbWFwc2l6ZTsKIAlpZiAodW5wYWNrX3NoYTFfaGVhZGVyKCZzdHJlYW0sIG1hcCwgbWFwc2l6ZSwgaGRyLCBzaXplb2YoaGRyKSkgPCAwKQogCQlzdGF0dXMgPSBlcnJvcigidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIiLAogCQkJICAgICAgIHNoYTFfdG9faGV4KHNoYTEpKTsKIAllbHNlIGlmICgoc3RhdHVzID0gcGFyc2Vfc2hhMV9oZWFkZXIoaGRyLCAmc2l6ZSkpIDwgMCkKIAkJc3RhdHVzID0gZXJyb3IoInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIiLCBzaGExX3RvX2hleChzaGExKSk7Ci0JZWxzZSBpZiAoc2l6ZXApCi0JCSpzaXplcCA9IHNpemU7CisJZWxzZSBpZiAob2ktPnNpemVwKQorCQkqb2ktPnNpemVwID0gc2l6ZTsKIAlnaXRfaW5mbGF0ZV9lbmQoJnN0cmVhbSk7CiAJbXVubWFwKG1hcCwgbWFwc2l6ZSk7Ci0JcmV0dXJuIHN0YXR1czsKKwlpZiAob2ktPnR5cGVwKQorCQkqb2ktPnR5cGVwID0gc3RhdHVzOworCXJldHVybiAwOwogfQogCiAvKiByZXR1cm5zIGVudW0gb2JqZWN0X3R5cGUgb3IgbmVnYXRpdmUgKi8KQEAgLTIzNjYsMzQgKzI0NDksMzcgQEAKIHsKIAlzdHJ1Y3QgY2FjaGVkX29iamVjdCAqY287CiAJc3RydWN0IHBhY2tfZW50cnkgZTsKLQlpbnQgc3RhdHVzLCBydHlwZTsKKwlpbnQgcnR5cGU7CiAKIAljbyA9IGZpbmRfY2FjaGVkX29iamVjdChzaGExKTsKIAlpZiAoY28pIHsKKwkJaWYgKG9pLT50eXBlcCkKKwkJCSoob2ktPnR5cGVwKSA9IGNvLT50eXBlOwogCQlpZiAob2ktPnNpemVwKQogCQkJKihvaS0+c2l6ZXApID0gY28tPnNpemU7CisJCWlmIChvaS0+ZGlza19zaXplcCkKKwkJCSoob2ktPmRpc2tfc2l6ZXApID0gMDsKIAkJb2ktPndoZW5jZSA9IE9JX0NBQ0hFRDsKLQkJcmV0dXJuIGNvLT50eXBlOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoIWZpbmRfcGFja19lbnRyeShzaGExLCAmZSkpIHsKIAkJLyogTW9zdCBsaWtlbHkgaXQncyBhIGxvb3NlIG9iamVjdC4gKi8KLQkJc3RhdHVzID0gc2hhMV9sb29zZV9vYmplY3RfaW5mbyhzaGExLCBvaS0+c2l6ZXApOwotCQlpZiAoc3RhdHVzID49IDApIHsKKwkJaWYgKCFzaGExX2xvb3NlX29iamVjdF9pbmZvKHNoYTEsIG9pKSkgewogCQkJb2ktPndoZW5jZSA9IE9JX0xPT1NFOwotCQkJcmV0dXJuIHN0YXR1czsKKwkJCXJldHVybiAwOwogCQl9CiAKIAkJLyogTm90IGEgbG9vc2Ugb2JqZWN0OyBzb21lb25lIGVsc2UgbWF5IGhhdmUganVzdCBwYWNrZWQgaXQuICovCiAJCXJlcHJlcGFyZV9wYWNrZWRfZ2l0KCk7CiAJCWlmICghZmluZF9wYWNrX2VudHJ5KHNoYTEsICZlKSkKLQkJCXJldHVybiBzdGF0dXM7CisJCQlyZXR1cm4gLTE7CiAJfQogCi0Jc3RhdHVzID0gcGFja2VkX29iamVjdF9pbmZvKGUucCwgZS5vZmZzZXQsIG9pLT5zaXplcCwgJnJ0eXBlKTsKLQlpZiAoc3RhdHVzIDwgMCkgeworCXJ0eXBlID0gcGFja2VkX29iamVjdF9pbmZvKGUucCwgZS5vZmZzZXQsIG9pKTsKKwlpZiAocnR5cGUgPCAwKSB7CiAJCW1hcmtfYmFkX3BhY2tlZF9vYmplY3QoZS5wLCBzaGExKTsKLQkJc3RhdHVzID0gc2hhMV9vYmplY3RfaW5mb19leHRlbmRlZChzaGExLCBvaSk7CisJCXJldHVybiBzaGExX29iamVjdF9pbmZvX2V4dGVuZGVkKHNoYTEsIG9pKTsKIAl9IGVsc2UgaWYgKGluX2RlbHRhX2Jhc2VfY2FjaGUoZS5wLCBlLm9mZnNldCkpIHsKIAkJb2ktPndoZW5jZSA9IE9JX0RCQ0FDSEVEOwogCX0gZWxzZSB7CkBAIC0yNDA0LDE1ICsyNDkwLDE5IEBACiAJCQkJCSBydHlwZSA9PSBPQkpfT0ZTX0RFTFRBKTsKIAl9CiAKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiAwOwogfQogCiBpbnQgc2hhMV9vYmplY3RfaW5mbyhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB1bnNpZ25lZCBsb25nICpzaXplcCkKIHsKLQlzdHJ1Y3Qgb2JqZWN0X2luZm8gb2k7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXN0cnVjdCBvYmplY3RfaW5mbyBvaSA9IHtOVUxMfTsKIAorCW9pLnR5cGVwID0gJnR5cGU7CiAJb2kuc2l6ZXAgPSBzaXplcDsKLQlyZXR1cm4gc2hhMV9vYmplY3RfaW5mb19leHRlbmRlZChzaGExLCAmb2kpOworCWlmIChzaGExX29iamVjdF9pbmZvX2V4dGVuZGVkKHNoYTEsICZvaSkgPCAwKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHR5cGU7CiB9CiAKIHN0YXRpYyB2b2lkICpyZWFkX3BhY2tlZF9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCmRpZmYgLS1naXQgYS9zaGExX25hbWUuYyBiL3NoYTFfbmFtZS5jCmluZGV4IDM4MjBmMjguLjFkMjEwZTMgMTAwNjQ0Ci0tLSBhL3NoYTFfbmFtZS5jCisrKyBiL3NoYTFfbmFtZS5jCkBAIC01Miw3ICs1Miw3IEBACiAJfQogCiAJaWYgKCFkcy0+Y2FuZGlkYXRlX29rKSB7Ci0JCS8qIGRpc2NhcmQgdGhlIGNhbmRpZGF0ZTsgd2Uga25vdyBpdCBkb2VzIG5vdCBzYXRpc2lmeSBmbiAqLworCQkvKiBkaXNjYXJkIHRoZSBjYW5kaWRhdGU7IHdlIGtub3cgaXQgZG9lcyBub3Qgc2F0aXNmeSBmbiAqLwogCQloYXNoY3B5KGRzLT5jYW5kaWRhdGUsIGN1cnJlbnQpOwogCQlkcy0+Y2FuZGlkYXRlX2NoZWNrZWQgPSAwOwogCQlyZXR1cm47CkBAIC0yNDEsNyArMjQxLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBXZSBuZWVkIHRvIGRvIHRoaXMgdGhlIGhhcmQgd2F5Li4uICovCi0Jb2JqID0gZGVyZWZfdGFnKGxvb2t1cF9vYmplY3Qoc2hhMSksIE5VTEwsIDApOworCW9iaiA9IGRlcmVmX3RhZyhwYXJzZV9vYmplY3Qoc2hhMSksIE5VTEwsIDApOwogCWlmIChvYmogJiYgb2JqLT50eXBlID09IE9CSl9DT01NSVQpCiAJCXJldHVybiAxOwogCXJldHVybiAwOwpAQCAtNDMxLDIyICs0MzEsNTEgQEAKIH0KIAogc3RhdGljIGludCBnZXRfc2hhMV8xKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkIGxvb2t1cF9mbGFncyk7CitzdGF0aWMgaW50IGludGVycHJldF9udGhfcHJpb3JfY2hlY2tvdXQoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0cmJ1ZiAqYnVmKTsKIAogc3RhdGljIGludCBnZXRfc2hhMV9iYXNpYyhjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgKndhcm5fbXNnID0gInJlZm5hbWUgJyUuKnMnIGlzIGFtYmlndW91cy4iOworCXN0YXRpYyBjb25zdCBjaGFyICpvYmplY3RfbmFtZV9tc2cgPSBOXygKKwkiR2l0IG5vcm1hbGx5IG5ldmVyIGNyZWF0ZXMgYSByZWYgdGhhdCBlbmRzIHdpdGggNDAgaGV4IGNoYXJhY3RlcnNcbiIKKwkiYmVjYXVzZSBpdCB3aWxsIGJlIGlnbm9yZWQgd2hlbiB5b3UganVzdCBzcGVjaWZ5IDQwLWhleC4gVGhlc2UgcmVmc1xuIgorCSJtYXkgYmUgY3JlYXRlZCBieSBtaXN0YWtlLiBGb3IgZXhhbXBsZSxcbiIKKwkiXG4iCisJIiAgZ2l0IGNoZWNrb3V0IC1iICRiciAkKGdpdCByZXYtcGFyc2UgLi4uKVxuIgorCSJcbiIKKwkid2hlcmUgXCIkYnJcIiBpcyBzb21laG93IGVtcHR5IGFuZCBhIDQwLWhleCByZWYgaXMgY3JlYXRlZC4gUGxlYXNlXG4iCisJImV4YW1pbmUgdGhlc2UgcmVmcyBhbmQgbWF5YmUgZGVsZXRlIHRoZW0uIFR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieVxuIgorCSJydW5uaW5nIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0X25hbWVfd2FybmluZyBmYWxzZVwiIik7CisJdW5zaWduZWQgY2hhciB0bXBfc2hhMVsyMF07CiAJY2hhciAqcmVhbF9yZWYgPSBOVUxMOwogCWludCByZWZzX2ZvdW5kID0gMDsKLQlpbnQgYXQsIHJlZmxvZ19sZW47CisJaW50IGF0LCByZWZsb2dfbGVuLCBudGhfcHJpb3IgPSAwOwogCi0JaWYgKGxlbiA9PSA0MCAmJiAhZ2V0X3NoYTFfaGV4KHN0ciwgc2hhMSkpCisJaWYgKGxlbiA9PSA0MCAmJiAhZ2V0X3NoYTFfaGV4KHN0ciwgc2hhMSkpIHsKKwkJaWYgKHdhcm5fb25fb2JqZWN0X3JlZm5hbWVfYW1iaWd1aXR5KSB7CisJCQlyZWZzX2ZvdW5kID0gZHdpbV9yZWYoc3RyLCBsZW4sIHRtcF9zaGExLCAmcmVhbF9yZWYpOworCQkJaWYgKHJlZnNfZm91bmQgPiAwICYmIHdhcm5fYW1iaWd1b3VzX3JlZnMpIHsKKwkJCQl3YXJuaW5nKHdhcm5fbXNnLCBsZW4sIHN0cik7CisJCQkJaWYgKGFkdmljZV9vYmplY3RfbmFtZV93YXJuaW5nKQorCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBfKG9iamVjdF9uYW1lX21zZykpOworCQkJfQorCQkJZnJlZShyZWFsX3JlZik7CisJCX0KIAkJcmV0dXJuIDA7CisJfQogCiAJLyogYmFzaWNAe3RpbWUgb3IgbnVtYmVyIG9yIC1udW1iZXJ9IGZvcm1hdCB0byBxdWVyeSByZWYtbG9nICovCiAJcmVmbG9nX2xlbiA9IGF0ID0gMDsKIAlpZiAobGVuICYmIHN0cltsZW4tMV0gPT0gJ30nKSB7Ci0JCWZvciAoYXQgPSBsZW4tMjsgYXQgPj0gMDsgYXQtLSkgeworCQlmb3IgKGF0ID0gbGVuLTQ7IGF0ID49IDA7IGF0LS0pIHsKIAkJCWlmIChzdHJbYXRdID09ICdAJyAmJiBzdHJbYXQrMV0gPT0gJ3snKSB7CisJCQkJaWYgKHN0clthdCsyXSA9PSAnLScpIHsKKwkJCQkJaWYgKGF0ICE9IDApCisJCQkJCQkvKiBAey1OfSBub3QgYXQgc3RhcnQgKi8KKwkJCQkJCXJldHVybiAtMTsKKwkJCQkJbnRoX3ByaW9yID0gMTsKKwkJCQkJY29udGludWU7CisJCQkJfQogCQkJCWlmICghdXBzdHJlYW1fbWFyayhzdHIgKyBhdCwgbGVuIC0gYXQpKSB7CiAJCQkJCXJlZmxvZ19sZW4gPSAobGVuLTEpIC0gKGF0KzIpOwogCQkJCQlsZW4gPSBhdDsKQEAgLTQ2MCwyMCArNDg5LDIyIEBACiAJaWYgKGxlbiAmJiBhbWJpZ3VvdXNfcGF0aChzdHIsIGxlbikpCiAJCXJldHVybiAtMTsKIAotCWlmICghbGVuICYmIHJlZmxvZ19sZW4pIHsKKwlpZiAobnRoX3ByaW9yKSB7CiAJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7Ci0JCWludCByZXQ7Ci0JCS8qIHRyeSB0aGUgQHstTn0gc3ludGF4IGZvciBuLXRoIGNoZWNrb3V0ICovCi0JCXJldCA9IGludGVycHJldF9icmFuY2hfbmFtZShzdHIrYXQsICZidWYpOwotCQlpZiAocmV0ID4gMCkgewotCQkJLyogc3Vic3RpdHV0ZSB0aGlzIGJyYW5jaCBuYW1lIGFuZCByZXN0YXJ0ICovCi0JCQlyZXR1cm4gZ2V0X3NoYTFfMShidWYuYnVmLCBidWYubGVuLCBzaGExLCAwKTsKLQkJfSBlbHNlIGlmIChyZXQgPT0gMCkgewotCQkJcmV0dXJuIC0xOworCQlpbnQgZGV0YWNoZWQ7CisKKwkJaWYgKGludGVycHJldF9udGhfcHJpb3JfY2hlY2tvdXQoc3RyLCAmYnVmKSA+IDApIHsKKwkJCWRldGFjaGVkID0gKGJ1Zi5sZW4gPT0gNDAgJiYgIWdldF9zaGExX2hleChidWYuYnVmLCBzaGExKSk7CisJCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJCWlmIChkZXRhY2hlZCkKKwkJCQlyZXR1cm4gMDsKIAkJfQorCX0KKworCWlmICghbGVuICYmIHJlZmxvZ19sZW4pCiAJCS8qIGFsbG93ICJAey4uLn0iIHRvIG1lYW4gdGhlIGN1cnJlbnQgYnJhbmNoIHJlZmxvZyAqLwogCQlyZWZzX2ZvdW5kID0gZHdpbV9yZWYoIkhFQUQiLCA0LCBzaGExLCAmcmVhbF9yZWYpOwotCX0gZWxzZSBpZiAocmVmbG9nX2xlbikKKwllbHNlIGlmIChyZWZsb2dfbGVuKQogCQlyZWZzX2ZvdW5kID0gZHdpbV9sb2coc3RyLCBsZW4sIHNoYTEsICZyZWFsX3JlZik7CiAJZWxzZQogCQlyZWZzX2ZvdW5kID0gZHdpbV9yZWYoc3RyLCBsZW4sIHNoYTEsICZyZWFsX3JlZik7CkBAIC00ODEsNyArNTEyLDkgQEAKIAlpZiAoIXJlZnNfZm91bmQpCiAJCXJldHVybiAtMTsKIAotCWlmICh3YXJuX2FtYmlndW91c19yZWZzICYmIHJlZnNfZm91bmQgPiAxKQorCWlmICh3YXJuX2FtYmlndW91c19yZWZzICYmCisJICAgIChyZWZzX2ZvdW5kID4gMSB8fAorCSAgICAgIWdldF9zaG9ydF9zaGExKHN0ciwgbGVuLCB0bXBfc2hhMSwgR0VUX1NIQTFfUVVJRVRMWSkpKQogCQl3YXJuaW5nKHdhcm5fbXNnLCBsZW4sIHN0cik7CiAKIAlpZiAocmVmbG9nX2xlbikgewpAQCAtNDkwLDEwICs1MjMsNiBAQAogCQl1bnNpZ25lZCBsb25nIGNvX3RpbWU7CiAJCWludCBjb190eiwgY29fY250OwogCi0JCS8qIGEgQHstTn0gcGxhY2VkIGFueXdoZXJlIGV4Y2VwdCB0aGUgc3RhcnQgaXMgYW4gZXJyb3IgKi8KLQkJaWYgKHN0clthdCsyXSA9PSAnLScpCi0JCQlyZXR1cm4gLTE7Ci0KIAkJLyogSXMgaXQgYXNraW5nIGZvciBOLXRoIGVudHJ5LCBvciBhcHByb3hpZGF0ZT8gKi8KIAkJZm9yIChpID0gbnRoID0gMDsgMCA8PSBudGggJiYgaSA8IHJlZmxvZ19sZW47IGkrKykgewogCQkJY2hhciBjaCA9IHN0clthdCsyK2ldOwpAQCAtNTE3LDEyICs1NDYsMjEgQEAKIAkJfQogCQlpZiAocmVhZF9yZWZfYXQocmVhbF9yZWYsIGF0X3RpbWUsIG50aCwgc2hhMSwgTlVMTCwKIAkJCQkmY29fdGltZSwgJmNvX3R6LCAmY29fY250KSkgeworCQkJaWYgKCFsZW4pIHsKKwkJCQlpZiAoIXByZWZpeGNtcChyZWFsX3JlZiwgInJlZnMvaGVhZHMvIikpIHsKKwkJCQkJc3RyID0gcmVhbF9yZWYgKyAxMTsKKwkJCQkJbGVuID0gc3RybGVuKHJlYWxfcmVmICsgMTEpOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIGRldGFjaGVkIEhFQUQgKi8KKwkJCQkJc3RyID0gIkhFQUQiOworCQkJCQlsZW4gPSA0OworCQkJCX0KKwkJCX0KIAkJCWlmIChhdF90aW1lKQogCQkJCXdhcm5pbmcoIkxvZyBmb3IgJyUuKnMnIG9ubHkgZ29lcyAiCiAJCQkJCSJiYWNrIHRvICVzLiIsIGxlbiwgc3RyLAogCQkJCQlzaG93X2RhdGUoY29fdGltZSwgY29fdHosIERBVEVfUkZDMjgyMikpOwogCQkJZWxzZSB7Ci0JCQkJZnJlZShyZWFsX3JlZik7CiAJCQkJZGllKCJMb2cgZm9yICclLipzJyBvbmx5IGhhcyAlZCBlbnRyaWVzLiIsCiAJCQkJICAgIGxlbiwgc3RyLCBjb19jbnQpOwogCQkJfQpAQCAtOTY2LDYgKzEwMDQsMzggQEAKIAlyZXR1cm4gc3Q7CiB9CiAKKy8qIHBhcnNlIEBzb21ldGhpbmcgc3ludGF4LCB3aGVuICdzb21ldGhpbmcnIGlzIG5vdCB7Lip9ICovCitzdGF0aWMgaW50IGludGVycHJldF9lbXB0eV9hdChjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgaW50IGxlbiwgc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWlmIChsZW4gfHwgbmFtZVsxXSA9PSAneycpCisJCXJldHVybiAtMTsKKworCXN0cmJ1Zl9yZXNldChidWYpOworCXN0cmJ1Zl9hZGQoYnVmLCAiSEVBRCIsIDQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHJlaW50ZXJwcmV0KGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBpbnQgbGVuLCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJLyogd2UgaGF2ZSBleHRyYSBkYXRhLCB3aGljaCBtaWdodCBuZWVkIGZ1cnRoZXIgcHJvY2Vzc2luZyAqLworCXN0cnVjdCBzdHJidWYgdG1wID0gU1RSQlVGX0lOSVQ7CisJaW50IHVzZWQgPSBidWYtPmxlbjsKKwlpbnQgcmV0OworCisJc3RyYnVmX2FkZChidWYsIG5hbWUgKyBsZW4sIG5hbWVsZW4gLSBsZW4pOworCXJldCA9IGludGVycHJldF9icmFuY2hfbmFtZShidWYtPmJ1ZiwgJnRtcCk7CisJLyogdGhhdCBkYXRhIHdhcyBub3QgaW50ZXJwcmV0ZWQsIHJlbW92ZSBvdXIgY3J1ZnQgKi8KKwlpZiAocmV0IDwgMCkgeworCQlzdHJidWZfc2V0bGVuKGJ1ZiwgdXNlZCk7CisJCXJldHVybiBsZW47CisJfQorCXN0cmJ1Zl9yZXNldChidWYpOworCXN0cmJ1Zl9hZGRidWYoYnVmLCAmdG1wKTsKKwlzdHJidWZfcmVsZWFzZSgmdG1wKTsKKwkvKiB0d2VhayBmb3Igc2l6ZSBvZiB7LU59IHZlcnN1cyBleHBhbmRlZCByZWYgbmFtZSAqLworCXJldHVybiByZXQgLSB1c2VkICsgbGVuOworfQorCiAvKgogICogVGhpcyByZWFkcyBzaG9ydC1oYW5kIHN5bnRheCB0aGF0IG5vdCBvbmx5IGV2YWx1YXRlcyB0byBhIGNvbW1pdAogICogb2JqZWN0IG5hbWUsIGJ1dCBhbHNvIGNhbiBhY3QgYXMgaWYgdGhlIGVuZCB1c2VyIHNwZWxsZWQgdGhlIG5hbWUKQEAgLTk5NSwzNiArMTA2NSwyNyBAQAogCWludCBsZW4gPSBpbnRlcnByZXRfbnRoX3ByaW9yX2NoZWNrb3V0KG5hbWUsIGJ1Zik7CiAJaW50IHRtcF9sZW47CiAKLQlpZiAoIWxlbikKKwlpZiAoIWxlbikgewogCQlyZXR1cm4gbGVuOyAvKiBzeW50YXggT2ssIG5vdCBlbm91Z2ggc3dpdGNoZXMgKi8KLQlpZiAoMCA8IGxlbiAmJiBsZW4gPT0gbmFtZWxlbikKLQkJcmV0dXJuIGxlbjsgLyogY29uc3VtZWQgYWxsICovCi0JZWxzZSBpZiAoMCA8IGxlbikgewotCQkvKiB3ZSBoYXZlIGV4dHJhIGRhdGEsIHdoaWNoIG1pZ2h0IG5lZWQgZnVydGhlciBwcm9jZXNzaW5nICovCi0JCXN0cnVjdCBzdHJidWYgdG1wID0gU1RSQlVGX0lOSVQ7Ci0JCWludCB1c2VkID0gYnVmLT5sZW47Ci0JCWludCByZXQ7Ci0KLQkJc3RyYnVmX2FkZChidWYsIG5hbWUgKyBsZW4sIG5hbWVsZW4gLSBsZW4pOwotCQlyZXQgPSBpbnRlcnByZXRfYnJhbmNoX25hbWUoYnVmLT5idWYsICZ0bXApOwotCQkvKiB0aGF0IGRhdGEgd2FzIG5vdCBpbnRlcnByZXRlZCwgcmVtb3ZlIG91ciBjcnVmdCAqLwotCQlpZiAocmV0IDwgMCkgewotCQkJc3RyYnVmX3NldGxlbihidWYsIHVzZWQpOwotCQkJcmV0dXJuIGxlbjsKLQkJfQotCQlzdHJidWZfcmVzZXQoYnVmKTsKLQkJc3RyYnVmX2FkZGJ1ZihidWYsICZ0bXApOwotCQlzdHJidWZfcmVsZWFzZSgmdG1wKTsKLQkJLyogdHdlYWsgZm9yIHNpemUgb2Ygey1OfSB2ZXJzdXMgZXhwYW5kZWQgcmVmIG5hbWUgKi8KLQkJcmV0dXJuIHJldCAtIHVzZWQgKyBsZW47CisJfSBlbHNlIGlmIChsZW4gPiAwKSB7CisJCWlmIChsZW4gPT0gbmFtZWxlbikKKwkJCXJldHVybiBsZW47IC8qIGNvbnN1bWVkIGFsbCAqLworCQllbHNlCisJCQlyZXR1cm4gcmVpbnRlcnByZXQobmFtZSwgbmFtZWxlbiwgbGVuLCBidWYpOwogCX0KIAogCWNwID0gc3RyY2hyKG5hbWUsICdAJyk7CiAJaWYgKCFjcCkKIAkJcmV0dXJuIC0xOworCisJbGVuID0gaW50ZXJwcmV0X2VtcHR5X2F0KG5hbWUsIG5hbWVsZW4sIGNwIC0gbmFtZSwgYnVmKTsKKwlpZiAobGVuID4gMCkKKwkJcmV0dXJuIHJlaW50ZXJwcmV0KG5hbWUsIG5hbWVsZW4sIGxlbiwgYnVmKTsKKwogCXRtcF9sZW4gPSB1cHN0cmVhbV9tYXJrKGNwLCBuYW1lbGVuIC0gKGNwIC0gbmFtZSkpOwogCWlmICghdG1wX2xlbikKIAkJcmV0dXJuIC0xOworCiAJbGVuID0gY3AgKyB0bXBfbGVuIC0gbmFtZTsKIAljcCA9IHhzdHJuZHVwKG5hbWUsIGNwIC0gbmFtZSk7CiAJdXBzdHJlYW0gPSBicmFuY2hfZ2V0KCpjcCA/IGNwIDogTlVMTCk7CkBAIC0xMDMzLDE0ICsxMDk0LDE1IEBACiAJICogcG9pbnRzIHRvIHNvbWV0aGluZyBkaWZmZXJlbnQgdGhhbiBhIGJyYW5jaC4KIAkgKi8KIAlpZiAoIXVwc3RyZWFtKQotCQlyZXR1cm4gZXJyb3IoXygiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIpKTsKKwkJZGllKF8oIkhFQUQgZG9lcyBub3QgcG9pbnQgdG8gYSBicmFuY2giKSk7CiAJaWYgKCF1cHN0cmVhbS0+bWVyZ2UgfHwgIXVwc3RyZWFtLT5tZXJnZVswXS0+ZHN0KSB7CiAJCWlmICghcmVmX2V4aXN0cyh1cHN0cmVhbS0+cmVmbmFtZSkpCi0JCQlyZXR1cm4gZXJyb3IoXygiTm8gc3VjaCBicmFuY2g6ICclcyciKSwgY3ApOwotCQlpZiAoIXVwc3RyZWFtLT5tZXJnZSkKLQkJCXJldHVybiBlcnJvcihfKCJObyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJyVzJyIpLAotCQkJCSAgICAgdXBzdHJlYW0tPm5hbWUpOwotCQlyZXR1cm4gZXJyb3IoCisJCQlkaWUoXygiTm8gc3VjaCBicmFuY2g6ICclcyciKSwgY3ApOworCQlpZiAoIXVwc3RyZWFtLT5tZXJnZSkgeworCQkJZGllKF8oIk5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAnJXMnIiksCisJCQkJdXBzdHJlYW0tPm5hbWUpOworCQl9CisJCWRpZSgKIAkJCV8oIlVwc3RyZWFtIGJyYW5jaCAnJXMnIG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIiksCiAJCQl1cHN0cmVhbS0+bWVyZ2VbMF0tPnNyYyk7CiAJfQpAQCAtMTA1NSw5ICsxMTE3LDEzIEBACiBpbnQgc3RyYnVmX2JyYW5jaG5hbWUoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJaW50IGxlbiA9IHN0cmxlbihuYW1lKTsKLQlpZiAoaW50ZXJwcmV0X2JyYW5jaF9uYW1lKG5hbWUsIHNiKSA9PSBsZW4pCisJaW50IHVzZWQgPSBpbnRlcnByZXRfYnJhbmNoX25hbWUobmFtZSwgc2IpOworCisJaWYgKHVzZWQgPT0gbGVuKQogCQlyZXR1cm4gMDsKLQlzdHJidWZfYWRkKHNiLCBuYW1lLCBsZW4pOworCWlmICh1c2VkIDwgMCkKKwkJdXNlZCA9IDA7CisJc3RyYnVmX2FkZChzYiwgbmFtZSArIHVzZWQsIGxlbiAtIHVzZWQpOwogCXJldHVybiBsZW47CiB9CiAKQEAgLTExNzAsNyArMTIzNiw3IEBACiAJCQkJCWNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogCXN0cnVjdCBzdGF0IHN0OwotCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKIAlpbnQgcG9zOwogCXVuc2lnbmVkIG5hbWVsZW4gPSBzdHJsZW4oZmlsZW5hbWUpOwogCXVuc2lnbmVkIGZ1bGxuYW1lbGVuOwpAQCAtMTI2NCw3ICsxMzMwLDcgQEAKIAkgKi8KIAlpZiAobmFtZVswXSA9PSAnOicpIHsKIAkJaW50IHN0YWdlID0gMDsKLQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKIAkJY2hhciAqbmV3X3BhdGggPSBOVUxMOwogCQlpbnQgcG9zOwogCQlpZiAoIW9ubHlfdG9fZGllICYmIG5hbWVsZW4gPiAyICYmIG5hbWVbMV0gPT0gJy8nKSB7CmRpZmYgLS1naXQgYS9zaGFsbG93LmMgYi9zaGFsbG93LmMKaW5kZXggNmJlOTE1Zi4uOGE5Yzk2ZCAxMDA2NDQKLS0tIGEvc2hhbGxvdy5jCisrKyBiL3NoYWxsb3cuYwpAQCAtMyw2ICszLDE2IEBACiAjaW5jbHVkZSAidGFnLmgiCiAKIHN0YXRpYyBpbnQgaXNfc2hhbGxvdyA9IC0xOworc3RhdGljIHN0cnVjdCBzdGF0IHNoYWxsb3dfc3RhdDsKK3N0YXRpYyBjaGFyICphbHRlcm5hdGVfc2hhbGxvd19maWxlOworCit2b2lkIHNldF9hbHRlcm5hdGVfc2hhbGxvd19maWxlKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaWYgKGlzX3NoYWxsb3cgIT0gLTEpCisJCWRpZSgiQlVHOiBpc19yZXBvc2l0b3J5X3NoYWxsb3cgbXVzdCBub3QgYmUgY2FsbGVkIGJlZm9yZSBzZXRfYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSIpOworCWZyZWUoYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSk7CisJYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSA9IHBhdGggPyB4c3RyZHVwKHBhdGgpIDogTlVMTDsKK30KIAogaW50IHJlZ2lzdGVyX3NoYWxsb3coY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKQEAgLTIxLDEyICszMSwyMSBAQAogewogCUZJTEUgKmZwOwogCWNoYXIgYnVmWzEwMjRdOworCWNvbnN0IGNoYXIgKnBhdGggPSBhbHRlcm5hdGVfc2hhbGxvd19maWxlOwogCiAJaWYgKGlzX3NoYWxsb3cgPj0gMCkKIAkJcmV0dXJuIGlzX3NoYWxsb3c7CiAKLQlmcCA9IGZvcGVuKGdpdF9wYXRoKCJzaGFsbG93IiksICJyIik7Ci0JaWYgKCFmcCkgeworCWlmICghcGF0aCkKKwkJcGF0aCA9IGdpdF9wYXRoKCJzaGFsbG93Iik7CisJLyoKKwkgKiBmZXRjaC1wYWNrIHNldHMgJy0tc2hhbGxvdy1maWxlICIiJyBhcyBhbiBpbmRpY2F0b3IgdGhhdCBubworCSAqIHNoYWxsb3cgZmlsZSBzaG91bGQgYmUgdXNlZC4gV2UgY291bGQganVzdCBvcGVuIGl0IGFuZCBpdAorCSAqIHdpbGwgbGlrZWx5IGZhaWwuIEJ1dCBsZXQncyBkbyBhbiBleHBsaWNpdCBjaGVjayBpbnN0ZWFkLgorCSAqLworCWlmICghKnBhdGggfHwKKwkgICAgc3RhdChwYXRoLCAmc2hhbGxvd19zdGF0KSB8fAorCSAgICAoZnAgPSBmb3BlbihwYXRoLCAiciIpKSA9PSBOVUxMKSB7CiAJCWlzX3NoYWxsb3cgPSAwOwogCQlyZXR1cm4gaXNfc2hhbGxvdzsKIAl9CkBAIC05MSwyMCArMTEwLDM0IEBACiAJCQkJCWNvbnRpbnVlOwogCQkJCSpwb2ludGVyID0gY3VyX2RlcHRoOwogCQkJfQotCQkJaWYgKGN1cl9kZXB0aCA8IGRlcHRoKSB7Ci0JCQkJaWYgKHAtPm5leHQpCi0JCQkJCWFkZF9vYmplY3RfYXJyYXkoJnAtPml0ZW0tPm9iamVjdCwKLQkJCQkJCQlOVUxMLCAmc3RhY2spOwotCQkJCWVsc2UgewotCQkJCQljb21taXQgPSBwLT5pdGVtOwotCQkJCQljdXJfZGVwdGggPSAqKGludCAqKWNvbW1pdC0+dXRpbDsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWNvbW1pdF9saXN0X2luc2VydChwLT5pdGVtLCAmcmVzdWx0KTsKLQkJCQlwLT5pdGVtLT5vYmplY3QuZmxhZ3MgfD0gc2hhbGxvd19mbGFnOworCQkJaWYgKHAtPm5leHQpCisJCQkJYWRkX29iamVjdF9hcnJheSgmcC0+aXRlbS0+b2JqZWN0LAorCQkJCQkJTlVMTCwgJnN0YWNrKTsKKwkJCWVsc2UgeworCQkJCWNvbW1pdCA9IHAtPml0ZW07CisJCQkJY3VyX2RlcHRoID0gKihpbnQgKiljb21taXQtPnV0aWw7CiAJCQl9CiAJCX0KIAl9CiAKIAlyZXR1cm4gcmVzdWx0OwogfQorCit2b2lkIGNoZWNrX3NoYWxsb3dfZmlsZV9mb3JfdXBkYXRlKHZvaWQpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoIWlzX3NoYWxsb3cpCisJCXJldHVybjsKKwllbHNlIGlmIChpc19zaGFsbG93ID09IC0xKQorCQlkaWUoIkJVRzogc2hhbGxvdyBtdXN0IGJlIGluaXRpYWxpemVkIGJ5IG5vdyIpOworCisJaWYgKHN0YXQoZ2l0X3BhdGgoInNoYWxsb3ciKSwgJnN0KSkKKwkJZGllKCJzaGFsbG93IGZpbGUgd2FzIHJlbW92ZWQgZHVyaW5nIGZldGNoIik7CisJZWxzZSBpZiAoc3Quc3RfbXRpbWUgIT0gc2hhbGxvd19zdGF0LnN0X210aW1lCisjaWZkZWYgVVNFX05TRUMKKwkJIHx8IFNUX01USU1FX05TRUMoc3QpICE9IFNUX01USU1FX05TRUMoc2hhbGxvd19zdGF0KQorI2VuZGlmCisJCSAgICkKKwkJZGllKCJzaGFsbG93IGZpbGUgd2FzIGNoYW5nZWQgZHVyaW5nIGZldGNoIik7Cit9CmRpZmYgLS1naXQgYS9zaGVsbC5jIGIvc2hlbGwuYwppbmRleCAxNDI5ODcwLi42NjM1MGIyIDEwMDY0NAotLS0gYS9zaGVsbC5jCisrKyBiL3NoZWxsLmMKQEAgLTE0Nyw3ICsxNDcsNiBAQAogCWNoYXIgKnByb2c7CiAJY29uc3QgY2hhciAqKnVzZXJfYXJndjsKIAlzdHJ1Y3QgY29tbWFuZHMgKmNtZDsKLQlpbnQgZGV2bnVsbF9mZDsKIAlpbnQgY291bnQ7CiAKIAlnaXRfc2V0dXBfZ2V0dGV4dCgpOwpAQCAtMTU2LDE1ICsxNTUsMTAgQEAKIAogCS8qCiAJICogQWx3YXlzIG9wZW4gZmlsZSBkZXNjcmlwdG9ycyAwLzEvMiB0byBhdm9pZCBjbG9iYmVyaW5nIGZpbGVzCi0JICogaW4gZGllKCkuICBJdCBhbHNvIGF2b2lkcyBub3QgbWVzc2luZyB1cCB3aGVuIHRoZSBwaXBlcyBhcmUKLQkgKiBkdXAnZWQgb250byBzdGRpbi9zdGRvdXQvc3RkZXJyIGluIHRoZSBjaGlsZCBwcm9jZXNzZXMgd2Ugc3Bhd24uCisJICogaW4gZGllKCkuICBJdCBhbHNvIGF2b2lkcyBtZXNzaW5nIHVwIHdoZW4gdGhlIHBpcGVzIGFyZSBkdXAnZWQKKwkgKiBvbnRvIHN0ZGluL3N0ZG91dC9zdGRlcnIgaW4gdGhlIGNoaWxkIHByb2Nlc3NlcyB3ZSBzcGF3bi4KIAkgKi8KLQlkZXZudWxsX2ZkID0gb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKTsKLQl3aGlsZSAoZGV2bnVsbF9mZCA+PSAwICYmIGRldm51bGxfZmQgPD0gMikKLQkJZGV2bnVsbF9mZCA9IGR1cChkZXZudWxsX2ZkKTsKLQlpZiAoZGV2bnVsbF9mZCA9PSAtMSkKLQkJZGllX2Vycm5vKCJvcGVuaW5nIC9kZXYvbnVsbCBmYWlsZWQiKTsKLQljbG9zZSAoZGV2bnVsbF9mZCk7CisJc2FuaXRpemVfc3RkZmRzKCk7CiAKIAkvKgogCSAqIFNwZWNpYWwgaGFjayB0byBwcmV0ZW5kIHRvIGJlIGEgQ1ZTIHNlcnZlcgpkaWZmIC0tZ2l0IGEvc3RyZWFtaW5nLmMgYi9zdHJlYW1pbmcuYwppbmRleCBjYWJjZDlkLi5kZWJlOTA0IDEwMDY0NAotLS0gYS9zdHJlYW1pbmcuYworKysgYi9zdHJlYW1pbmcuYwpAQCAtMTExLDExICsxMTEsMTEgQEAKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJaW50IHN0YXR1czsKIAorCW9pLT50eXBlcCA9IHR5cGU7CiAJb2ktPnNpemVwID0gJnNpemU7CiAJc3RhdHVzID0gc2hhMV9vYmplY3RfaW5mb19leHRlbmRlZChzaGExLCBvaSk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCXJldHVybiBzdHJlYW1fZXJyb3I7Ci0JKnR5cGUgPSBzdGF0dXM7CiAKIAlzd2l0Y2ggKG9pLT53aGVuY2UpIHsKIAljYXNlIE9JX0xPT1NFOgpAQCAtMTM1LDcgKzEzNSw3IEBACiAJCQkJIHN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXIpCiB7CiAJc3RydWN0IGdpdF9pc3RyZWFtICpzdDsKLQlzdHJ1Y3Qgb2JqZWN0X2luZm8gb2k7CisJc3RydWN0IG9iamVjdF9pbmZvIG9pID0ge05VTEx9OwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlYWwgPSBsb29rdXBfcmVwbGFjZV9vYmplY3Qoc2hhMSk7CiAJZW51bSBpbnB1dF9zb3VyY2Ugc3JjID0gaXN0cmVhbV9zb3VyY2UocmVhbCwgdHlwZSwgJm9pKTsKIApAQCAtMTQ5LDcgKzE0OSw3IEBACiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCX0KLQlpZiAoc3QgJiYgZmlsdGVyKSB7CisJaWYgKGZpbHRlcikgewogCQkvKiBBZGQgIiYmICFpc19udWxsX3N0cmVhbV9maWx0ZXIoZmlsdGVyKSIgZm9yIHBlcmZvcm1hbmNlICovCiAJCXN0cnVjdCBnaXRfaXN0cmVhbSAqbnN0ID0gYXR0YWNoX3N0cmVhbV9maWx0ZXIoc3QsIGZpbHRlcik7CiAJCWlmICghbnN0KQpkaWZmIC0tZ2l0IGEvc3VibW9kdWxlLmMgYi9zdWJtb2R1bGUuYwppbmRleCBlNzI4MDI1Li4zZjBhM2Y5IDEwMDY0NAotLS0gYS9zdWJtb2R1bGUuYworKysgYi9zdWJtb2R1bGUuYwpAQCAtMjI2LDYgKzIyNiw3IEBACiAJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24ocmV2KSkpIHsKIAkJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKIAkJY3R4LmRhdGVfbW9kZSA9IHJldi0+ZGF0ZV9tb2RlOworCQljdHgub3V0cHV0X2VuY29kaW5nID0gZ2V0X2xvZ19vdXRwdXRfZW5jb2RpbmcoKTsKIAkJc3RyYnVmX3NldGxlbigmc2IsIDApOwogCQlzdHJidWZfYWRkc3RyKCZzYiwgbGluZV9wcmVmaXgpOwogCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTWU1NRVRSSUNfTEVGVCkgewpAQCAtNjAzLDkgKzYwNCw4IEBACiAJaWYgKCF3b3JrX3RyZWUpCiAJCWdvdG8gb3V0OwogCi0JaWYgKCF0aGVfaW5kZXguaW5pdGlhbGl6ZWQpCi0JCWlmIChyZWFkX2NhY2hlKCkgPCAwKQotCQkJZGllKCJpbmRleCBmaWxlIGNvcnJ1cHQiKTsKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJZGllKCJpbmRleCBmaWxlIGNvcnJ1cHQiKTsKIAogCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgImZldGNoIik7CiAJZm9yIChpID0gMDsgaSA8IG9wdGlvbnMtPmFyZ2M7IGkrKykKQEAgLTYyNCw3ICs2MjQsNyBAQAogCQlzdHJ1Y3Qgc3RyYnVmIHN1Ym1vZHVsZV9wYXRoID0gU1RSQlVGX0lOSVQ7CiAJCXN0cnVjdCBzdHJidWYgc3VibW9kdWxlX2dpdF9kaXIgPSBTVFJCVUZfSU5JVDsKIAkJc3RydWN0IHN0cmJ1ZiBzdWJtb2R1bGVfcHJlZml4ID0gU1RSQlVGX0lOSVQ7Ci0JCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CiAJCWNvbnN0IGNoYXIgKmdpdF9kaXIsICpuYW1lLCAqZGVmYXVsdF9hcmd2OwogCiAJCWlmICghU19JU0dJVExJTksoY2UtPmNlX21vZGUpKQpAQCAtODQ2LDcgKzg0Niw3IEBACiAJCXN0cnVjdCBjb21taXQgKmEsIHN0cnVjdCBjb21taXQgKmIpCiB7CiAJaW50IGksIGo7Ci0Jc3RydWN0IG9iamVjdF9hcnJheSBtZXJnZXM7CisJc3RydWN0IG9iamVjdF9hcnJheSBtZXJnZXMgPSBPQkpFQ1RfQVJSQVlfSU5JVDsKIAlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CiAJaW50IGNvbnRhaW5zX2Fub3RoZXI7CiAKQEAgLTg1Niw3ICs4NTYsNiBAQAogCXN0cnVjdCByZXZfaW5mbyByZXZzOwogCXN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgcmV2X29wdHM7CiAKLQltZW1zZXQoJm1lcmdlcywgMCwgc2l6ZW9mKG1lcmdlcykpOwogCW1lbXNldChyZXN1bHQsIDAsIHNpemVvZihzdHJ1Y3Qgb2JqZWN0X2FycmF5KSk7CiAJbWVtc2V0KCZyZXZfb3B0cywgMCwgc2l6ZW9mKHJldl9vcHRzKSk7CiAKQEAgLTg5NCw4ICs4OTMsNyBAQAogCQl9CiAKIAkJaWYgKCFjb250YWluc19hbm90aGVyKQotCQkJYWRkX29iamVjdF9hcnJheShtZXJnZXMub2JqZWN0c1tpXS5pdGVtLAotCQkJCQkgbWVyZ2VzLm9iamVjdHNbaV0ubmFtZSwgcmVzdWx0KTsKKwkJCWFkZF9vYmplY3RfYXJyYXkobWVyZ2VzLm9iamVjdHNbaV0uaXRlbSwgTlVMTCwgcmVzdWx0KTsKIAl9CiAKIAlmcmVlKG1lcmdlcy5vYmplY3RzKTsKZGlmZiAtLWdpdCBhL3QvTWFrZWZpbGUgYi90L01ha2VmaWxlCmluZGV4IDQ0Y2E3ZDMuLjIzNzNhMDQgMTAwNjQ0Ci0tLSBhL3QvTWFrZWZpbGUKKysrIGIvdC9NYWtlZmlsZQpAQCAtMTUsOSArMTUsMTYgQEAKIERFRkFVTFRfVEVTVF9UQVJHRVQgPz0gdGVzdAogVEVTVF9MSU5UID89IHRlc3QtbGludC1kdXBsaWNhdGVzIHRlc3QtbGludC1leGVjdXRhYmxlCiAKK2lmZGVmIFRFU1RfT1VUUFVUX0RJUkVDVE9SWQorVEVTVF9SRVNVTFRTX0RJUkVDVE9SWSA9ICQoVEVTVF9PVVRQVVRfRElSRUNUT1JZKS90ZXN0LXJlc3VsdHMKK2Vsc2UKK1RFU1RfUkVTVUxUU19ESVJFQ1RPUlkgPSB0ZXN0LXJlc3VsdHMKK2VuZGlmCisKICMgU2hlbGwgcXVvdGU7CiBTSEVMTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIKSkKIFBFUkxfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoUEVSTF9QQVRIKSkKK1RFU1RfUkVTVUxUU19ESVJFQ1RPUllfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFRFU1RfUkVTVUxUU19ESVJFQ1RPUlkpKQogCiBUID0gJChzb3J0ICQod2lsZGNhcmQgdFswLTldWzAtOV1bMC05XVswLTldLSouc2gpKQogVFNWTiA9ICQoc29ydCAkKHdpbGRjYXJkIHQ5MVswLTldWzAtOV0tKi5zaCkpCkBAIC0zNiwxMCArNDMsMTAgQEAKIAlAZWNobyAiKioqICRAICoqKiI7IEdJVF9DT05GSUc9LmdpdC9jb25maWcgJyQoU0hFTExfUEFUSF9TUSknICRAICQoR0lUX1RFU1RfT1BUUykKIAogcHJlLWNsZWFuOgotCSQoUk0pIC1yIHRlc3QtcmVzdWx0cworCSQoUk0pIC1yICckKFRFU1RfUkVTVUxUU19ESVJFQ1RPUllfU1EpJwogCiBjbGVhbi1leGNlcHQtcHJvdmUtY2FjaGU6Ci0JJChSTSkgLXIgJ3RyYXNoIGRpcmVjdG9yeScuKiB0ZXN0LXJlc3VsdHMKKwkkKFJNKSAtciAndHJhc2ggZGlyZWN0b3J5Jy4qICckKFRFU1RfUkVTVUxUU19ESVJFQ1RPUllfU1EpJwogCSQoUk0pIC1yIHZhbGdyaW5kL2JpbgogCiBjbGVhbjogY2xlYW4tZXhjZXB0LXByb3ZlLWNhY2hlCkBAIC02NSw3ICs3Miw3IEBACiAJJChNQUtFKSBjbGVhbgogCiBhZ2dyZWdhdGUtcmVzdWx0czoKLQlmb3IgZiBpbiB0ZXN0LXJlc3VsdHMvdCotKi5jb3VudHM7IGRvIFwKKwlmb3IgZiBpbiAnJChURVNUX1JFU1VMVFNfRElSRUNUT1JZX1NRKScvdCotKi5jb3VudHM7IGRvIFwKIAkJZWNobyAiJCRmIjsgXAogCWRvbmUgfCAnJChTSEVMTF9QQVRIX1NRKScgLi9hZ2dyZWdhdGUtcmVzdWx0cy5zaAogCmRpZmYgLS1naXQgYS90L1JFQURNRSBiL3QvUkVBRE1FCmluZGV4IGU2NjliYjMuLjIxNjcxMjUgMTAwNjQ0Ci0tLSBhL3QvUkVBRE1FCisrKyBiL3QvUkVBRE1FCkBAIC03Niw2ICs3NiwxMSBAQAogCWNvbW1hbmQgYmVpbmcgcnVuIGFuZCB0aGVpciBvdXRwdXQgaWYgYW55IGFyZSBhbHNvCiAJb3V0cHV0LgogCistLXZlcmJvc2Utb25seT08cGF0dGVybj46OgorCUxpa2UgLS12ZXJib3NlLCBidXQgdGhlIGVmZmVjdCBpcyBsaW1pdGVkIHRvIHRlc3RzIHdpdGgKKwludW1iZXJzIG1hdGNoaW5nIDxwYXR0ZXJuPi4gIFRoZSBudW1iZXIgbWF0Y2hlZCBhZ2FpbnN0IGlzCisJc2ltcGx5IHRoZSBydW5uaW5nIGNvdW50IG9mIHRoZSB0ZXN0IHdpdGhpbiB0aGUgZmlsZS4KKwogLS1kZWJ1Zzo6CiAJVGhpcyBtYXkgaGVscCB0aGUgcGVyc29uIHdobyBpcyBkZXZlbG9waW5nIGEgbmV3IHRlc3QuCiAJSXQgY2F1c2VzIHRoZSBjb21tYW5kIGRlZmluZWQgd2l0aCB0ZXN0X2RlYnVnIHRvIHJ1bi4KQEAgLTEyMSw2ICsxMjYsMTEgQEAKIAl0aGUgJ3QvdmFsZ3JpbmQvJyBkaXJlY3RvcnkgYW5kIHVzZSB0aGUgY29tbWFuZHMgdW5kZXIKIAkndC92YWxncmluZC9iaW4vJy4KIAorLS12YWxncmluZC1vbmx5PTxwYXR0ZXJuPjo6CisJTGlrZSAtLXZhbGdyaW5kLCBidXQgdGhlIGVmZmVjdCBpcyBsaW1pdGVkIHRvIHRlc3RzIHdpdGgKKwludW1iZXJzIG1hdGNoaW5nIDxwYXR0ZXJuPi4gIFRoZSBudW1iZXIgbWF0Y2hlZCBhZ2FpbnN0IGlzCisJc2ltcGx5IHRoZSBydW5uaW5nIGNvdW50IG9mIHRoZSB0ZXN0IHdpdGhpbiB0aGUgZmlsZS4KKwogLS10ZWU6OgogCUluIGFkZGl0aW9uIHRvIHByaW50aW5nIHRoZSB0ZXN0IG91dHB1dCB0byB0aGUgdGVybWluYWwsCiAJd3JpdGUgaXQgdG8gZmlsZXMgbmFtZWQgJ3QvdGVzdC1yZXN1bHRzLyRURVNUX05BTUUub3V0Jy4KQEAgLTMyNCw2ICszMzQsOSBAQAogICAgdXNlICd0ZXN0X211c3RfZmFpbCBnaXQgY21kJy4gIFRoaXMgd2lsbCBzaWduYWwgYSBmYWlsdXJlIGlmIGdpdAogICAgZGllcyBpbiBhbiB1bmV4cGVjdGVkIHdheSAoZS5nLiBzZWdmYXVsdCkuCiAKKyAgIE9uIHRoZSBvdGhlciBoYW5kLCBkb24ndCB1c2UgdGVzdF9tdXN0X2ZhaWwgZm9yIHJ1bm5pbmcgcmVndWxhcgorICAgcGxhdGZvcm0gY29tbWFuZHM7IGp1c3QgdXNlICchIGNtZCcuCisKICAtIHVzZSBwZXJsIHdpdGhvdXQgc3BlbGxpbmcgaXQgYXMgIiRQRVJMX1BBVEgiLiBUaGlzIGlzIHRvIGhlbHAgb3VyCiAgICBmcmllbmRzIG9uIFdpbmRvd3Mgd2hlcmUgdGhlIHBsYXRmb3JtIFBlcmwgb2Z0ZW4gYWRkcyBDUiBiZWZvcmUKICAgIHRoZSBlbmQgb2YgbGluZSwgYW5kIHRoZXkgYnVuZGxlIEdpdCB3aXRoIGEgdmVyc2lvbiBvZiBQZXJsIHRoYXQKQEAgLTU5Miw2ICs2MDUsMjAgQEAKIAkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAJJwogCisgLSB0ZXN0X2xuX3NfYWRkIDxwYXRoMT4gPHBhdGgyPgorCisgICBUaGlzIGZ1bmN0aW9uIGhlbHBzIHN5c3RlbXMgd2hvc2UgZmlsZXN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IHN5bWJvbGljCisgICBsaW5rcy4gVXNlIGl0IHRvIGFkZCBhIHN5bWJvbGljIGxpbmsgZW50cnkgdG8gdGhlIGluZGV4IHdoZW4gaXQgaXMgbm90CisgICBpbXBvcnRhbnQgdGhhdCB0aGUgZmlsZSBzeXN0ZW0gZW50cnkgaXMgYSBzeW1ib2xpYyBsaW5rLCBpLmUuLCBpbnN0ZWFkCisgICBvZiB0aGUgc2VxdWVuY2UKKworCWxuIC1zIGZvbyBiYXIgJiYKKwlnaXQgYWRkIGJhcgorCisgICBTb21ldGltZXMgaXQgaXMgcG9zc2libGUgdG8gc3BsaXQgYSB0ZXN0IGluIGEgcGFydCB0aGF0IGRvZXMgbm90IG5lZWQKKyAgIHRoZSBzeW1ib2xpYyBsaW5rIGluIHRoZSBmaWxlIHN5c3RlbSBhbmQgYSBwYXJ0IHRoYXQgZG9lczsgdGhlbiBvbmx5CisgICB0aGUgbGF0dGVyIHBhcnQgbmVlZCBiZSBwcm90ZWN0ZWQgYnkgYSBTWU1MSU5LUyBwcmVyZXF1aXNpdGUgKHNlZSBiZWxvdykuCisKIFByZXJlcXVpc2l0ZXMKIC0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvdC9hbm5vdGF0ZS10ZXN0cy5zaCBiL3QvYW5ub3RhdGUtdGVzdHMuc2gKaW5kZXggYzU2YTc3ZC4uMGJmZWUwMCAxMDA2NDQKLS0tIGEvdC9hbm5vdGF0ZS10ZXN0cy5zaAorKysgYi90L2Fubm90YXRlLXRlc3RzLnNoCkBAIC0yLDExICsyLDIxIEBACiAjIHNvdXJjZWQgZnJvbSB0ODAwMS1hbm5vdGF0ZS5zaCBhbmQgdDgwMDItYmxhbWUuc2guCiAKIGNoZWNrX2NvdW50ICgpIHsKLQloZWFkPQotCWNhc2UgIiQxIiBpbiAtaCkgaGVhZD0iJDIiOyBzaGlmdDsgc2hpZnQgOzsgZXNhYwotCWVjaG8gIiRQUk9HIGZpbGUgJGhlYWQiID4mNAotCSRQUk9HIGZpbGUgJGhlYWQgPi5yZXN1bHQgfHwgcmV0dXJuIDEKLQljYXQgLnJlc3VsdCB8IHBlcmwgLWUgJworCWhlYWQ9ICYmCisJZmlsZT0nZmlsZScgJiYKKwlvcHRpb25zPSAmJgorCXdoaWxlIDoKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLWgpIGhlYWQ9IiQyIjsgc2hpZnQ7IHNoaWZ0IDs7CisJCS1mKSBmaWxlPSIkMiI7IHNoaWZ0OyBzaGlmdCA7OworCQktKikgb3B0aW9ucz0iJG9wdGlvbnMgJDEiOyBzaGlmdCA7OworCQkqKSBicmVhayA7OworCQllc2FjCisJZG9uZSAmJgorCWVjaG8gIiRQUk9HICRvcHRpb25zICRmaWxlICRoZWFkIiA+JjQgJiYKKwkkUFJPRyAkb3B0aW9ucyAkZmlsZSAkaGVhZCA+YWN0dWFsICYmCisJcGVybCAtZSAnCiAJCW15ICVleHBlY3QgPSAoQEFSR1YpOwogCQlteSAlY291bnQgPSBtYXAgeyAkXyA9PiAwIH0ga2V5cyAlZXhwZWN0OwogCQl3aGlsZSAoPFNURElOPikgewpAQCAtMzEsMTA3ICs0MSwyNDYgQEAKIAkJCXByaW50IFNUREVSUiAiQXV0aG9yICRhdXRob3IgKGV4cGVjdGVkICR2YWx1ZSwgYXR0cmlidXRlZCAkY291bnQpICRva1xuIjsKIAkJfQogCQlleGl0KCRiYWQpOwotCScgIiRAIgorCScgIiRAIiA8YWN0dWFsCiB9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICdwcmVwYXJlIHJlZmVyZW5jZSB0cmVlJyBcCi0gICAgJ2VjaG8gIjFBIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSIgPmZpbGUgJiYKLSAgICAgZWNobyAibGF6eSBkb2ciID4+ZmlsZSAmJgotICAgICBnaXQgYWRkIGZpbGUgJiYKLSAgICAgR0lUX0FVVEhPUl9OQU1FPSJBIiBHSVRfQVVUSE9SX0VNQUlMPSJBQHRlc3QuZ2l0IiBnaXQgY29tbWl0IC1hIC1tICJJbml0aWFsLiInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBBIGxpbmVzJyAnCisJZWNobyAiMUEgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIiA+ZmlsZSAmJgorCWVjaG8gImxhenkgZG9nIiA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlHSVRfQVVUSE9SX05BTUU9IkEiIEdJVF9BVVRIT1JfRU1BSUw9IkFAdGVzdC5naXQiIFwKKwlnaXQgY29tbWl0IC1hIC1tICJJbml0aWFsLiIKKycKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ2NoZWNrIGFsbCBsaW5lcyBibGFtZWQgb24gQScgXAotICAgICdjaGVja19jb3VudCBBIDInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAxIGF1dGhvcicgJworCWNoZWNrX2NvdW50IEEgMgorJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAnU2V0dXAgbmV3IGxpbmVzIGJsYW1lZCBvbiBCJyBcCi0gICAgJ2VjaG8gIjJBIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSIgPj5maWxlICYmCi0gICAgIGVjaG8gImxhenkgZG9nIiA+PiBmaWxlICYmCi0gICAgIEdJVF9BVVRIT1JfTkFNRT0iQiIgR0lUX0FVVEhPUl9FTUFJTD0iQkB0ZXN0LmdpdCIgZ2l0IGNvbW1pdCAtYSAtbSAiU2Vjb25kLiInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBCIGxpbmVzJyAnCisJZWNobyAiMkEgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIiA+PmZpbGUgJiYKKwllY2hvICJsYXp5IGRvZyIgPj5maWxlICYmCisJR0lUX0FVVEhPUl9OQU1FPSJCIiBHSVRfQVVUSE9SX0VNQUlMPSJCQHRlc3QuZ2l0IiBcCisJZ2l0IGNvbW1pdCAtYSAtbSAiU2Vjb25kLiIKKycKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ1R3byBsaW5lcyBibGFtZWQgb24gQSwgdHdvIG9uIEInIFwKLSAgICAnY2hlY2tfY291bnQgQSAyIEIgMicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIDIgYXV0aG9ycycgJworCWNoZWNrX2NvdW50IEEgMiBCIDIKKycKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ21lcmdlLXNldHVwIHBhcnQgMScgXAotICAgICdnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMSBtYXN0ZXIgJiYKLSAgICAgZWNobyAiM0Egc2xvdyBncmVlbiBmb3gganVtcHMgaW50byB0aGUiID4+IGZpbGUgJiYKLSAgICAgZWNobyAid2VsbC4iID4+IGZpbGUgJiYKLSAgICAgR0lUX0FVVEhPUl9OQU1FPSJCMSIgR0lUX0FVVEhPUl9FTUFJTD0iQjFAdGVzdC5naXQiIGdpdCBjb21taXQgLWEgLW0gIkJyYW5jaDEtMSInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBCMSBsaW5lcyAoYnJhbmNoMSknICcKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMSBtYXN0ZXIgJiYKKwllY2hvICIzQSBzbG93IGdyZWVuIGZveCBqdW1wcyBpbnRvIHRoZSIgPj5maWxlICYmCisJZWNobyAid2VsbC4iID4+ZmlsZSAmJgorCUdJVF9BVVRIT1JfTkFNRT0iQjEiIEdJVF9BVVRIT1JfRU1BSUw9IkIxQHRlc3QuZ2l0IiBcCisJZ2l0IGNvbW1pdCAtYSAtbSAiQnJhbmNoMS0xIgorJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAnVHdvIGxpbmVzIGJsYW1lZCBvbiBBLCB0d28gb24gQiwgdHdvIG9uIEIxJyBcCi0gICAgJ2NoZWNrX2NvdW50IEEgMiBCIDIgQjEgMicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIDIgYXV0aG9ycyArIDEgYnJhbmNoMSBhdXRob3InICcKKwljaGVja19jb3VudCBBIDIgQiAyIEIxIDIKKycKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ21lcmdlLXNldHVwIHBhcnQgMicgXAotICAgICdnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMiBtYXN0ZXIgJiYKLSAgICAgc2VkIC1lICJzLzJBIHF1aWNrIGJyb3duLzRBIHF1aWNrIGJyb3duIGxhenkgZG9nLyIgPCBmaWxlID4gZmlsZS5uZXcgJiYKLSAgICAgbXYgZmlsZS5uZXcgZmlsZSAmJgotICAgICBHSVRfQVVUSE9SX05BTUU9IkIyIiBHSVRfQVVUSE9SX0VNQUlMPSJCMkB0ZXN0LmdpdCIgZ2l0IGNvbW1pdCAtYSAtbSAiQnJhbmNoMi0xIicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIEIyIGxpbmVzIChicmFuY2gyKScgJworCWdpdCBjaGVja291dCAtYiBicmFuY2gyIG1hc3RlciAmJgorCXNlZCAtZSAicy8yQSBxdWljayBicm93bi80QSBxdWljayBicm93biBsYXp5IGRvZy8iIDxmaWxlID5maWxlLm5ldyAmJgorCW12IGZpbGUubmV3IGZpbGUgJiYKKwlHSVRfQVVUSE9SX05BTUU9IkIyIiBHSVRfQVVUSE9SX0VNQUlMPSJCMkB0ZXN0LmdpdCIgXAorCWdpdCBjb21taXQgLWEgLW0gIkJyYW5jaDItMSIKKycKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ1R3byBsaW5lcyBibGFtZWQgb24gQSwgb25lIG9uIEIsIG9uZSBvbiBCMicgXAotICAgICdjaGVja19jb3VudCBBIDIgQiAxIEIyIDEnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAyIGF1dGhvcnMgKyAxIGJyYW5jaDIgYXV0aG9yJyAnCisJY2hlY2tfY291bnQgQSAyIEIgMSBCMiAxCisnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICdtZXJnZS1zZXR1cCBwYXJ0IDMnIFwKLSAgICAnZ2l0IHB1bGwgLiBicmFuY2gxJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYnJhbmNoMSAmIGJyYW5jaDInICcKKwlnaXQgcHVsbCAuIGJyYW5jaDEKKycKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ1R3byBsaW5lcyBibGFtZWQgb24gQSwgb25lIG9uIEIsIHR3byBvbiBCMSwgb25lIG9uIEIyJyBcCi0gICAgJ2NoZWNrX2NvdW50IEEgMiBCIDEgQjEgMiBCMiAxJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgMiBhdXRob3JzICsgMiBtZXJnZWQtaW4gYXV0aG9ycycgJworCWNoZWNrX2NvdW50IEEgMiBCIDEgQjEgMiBCMiAxCisnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICdBbm5vdGF0aW5nIGFuIG9sZCByZXZpc2lvbiB3b3JrcycgXAotICAgICdjaGVja19jb3VudCAtaCBtYXN0ZXIgQSAyIEIgMicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIGFuY2VzdG9yJyAnCisJY2hlY2tfY291bnQgLWggbWFzdGVyIEEgMiBCIDIKKycKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ0Fubm90YXRpbmcgYW4gb2xkIHJldmlzaW9uIHdvcmtzJyBcCi0gICAgJ2NoZWNrX2NvdW50IC1oIG1hc3Rlcl4gQSAyJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgZ3JlYXQtYW5jZXN0b3InICcKKwljaGVja19jb3VudCAtaCBtYXN0ZXJeIEEgMgorJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAnbWVyZ2Utc2V0dXAgcGFydCA0JyBcCi0gICAgJ2VjaG8gImV2aWwgbWVyZ2UuIiA+PmZpbGUgJiYKLSAgICAgZ2l0IGNvbW1pdCAtYSAtLWFtZW5kJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXZpbCBtZXJnZScgJworCWVjaG8gImV2aWwgbWVyZ2UuIiA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC0tYW1lbmQKKycKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ1R3byBsaW5lcyBibGFtZWQgb24gQSwgb25lIG9uIEIsIHR3byBvbiBCMSwgb25lIG9uIEIyLCBvbmUgb24gQSBVIFRob3InIFwKLSAgICAnY2hlY2tfY291bnQgQSAyIEIgMSBCMSAyIEIyIDEgIkEgVSBUaG9yIiAxJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgZXZpbCBtZXJnZScgJworCWNoZWNrX2NvdW50IEEgMiBCIDEgQjEgMiBCMiAxICJBIFUgVGhvciIgMQorJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAnYW4gaW5jb21wbGV0ZSBsaW5lIGFkZGVkJyBcCi0gICAgJ2VjaG8gImluY29tcGxldGUiIHwgdHIgLWQgIlxcMDEyIiA+PmZpbGUgJiYKLSAgICBHSVRfQVVUSE9SX05BTUU9IkMiIEdJVF9BVVRIT1JfRU1BSUw9IkNAdGVzdC5naXQiIGdpdCBjb21taXQgLWEgLW0gIkluY29tcGxldGUiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgaW5jb21wbGV0ZSBsaW5lJyAnCisJZWNobyAiaW5jb21wbGV0ZSIgfCB0ciAtZCAiXFwwMTIiID4+ZmlsZSAmJgorCUdJVF9BVVRIT1JfTkFNRT0iQyIgR0lUX0FVVEhPUl9FTUFJTD0iQ0B0ZXN0LmdpdCIgXAorCWdpdCBjb21taXQgLWEgLW0gIkluY29tcGxldGUiCisnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICdXaXRoIGluY29tcGxldGUgbGluZXMuJyBcCi0gICAgJ2NoZWNrX2NvdW50IEEgMiBCIDEgQjEgMiBCMiAxICJBIFUgVGhvciIgMSBDIDEnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSBpbmNvbXBsZXRlIGxpbmUnICcKKwljaGVja19jb3VudCBBIDIgQiAxIEIxIDIgQjIgMSAiQSBVIFRob3IiIDEgQyAxCisnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICdzb21lIGVkaXQnIFwKLSAgICAnbXYgZmlsZSBmaWxlLm9yaWcgJiYKLSAgICB7Ci0JY2F0IGZpbGUub3JpZyAmJgotCWVjaG8KLSAgICB9IHwgc2VkIC1lICJzL14zQS85OS8iIC1lICIvXjFBL2QiIC1lICIvXmluY29tcGxldGUvZCIgPiBmaWxlICYmCi0gICAgZWNobyAiaW5jb21wbGV0ZSIgfCB0ciAtZCAiXFwwMTIiID4+ZmlsZSAmJgotICAgIEdJVF9BVVRIT1JfTkFNRT0iRCIgR0lUX0FVVEhPUl9FTUFJTD0iREB0ZXN0LmdpdCIgZ2l0IGNvbW1pdCAtYSAtbSAiZWRpdCInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBlZGl0cycgJworCW12IGZpbGUgZmlsZS5vcmlnICYmCisJeworCQljYXQgZmlsZS5vcmlnICYmCisJCWVjaG8KKwl9IHwgc2VkIC1lICJzL14zQS85OS8iIC1lICIvXjFBL2QiIC1lICIvXmluY29tcGxldGUvZCIgPmZpbGUgJiYKKwllY2hvICJpbmNvbXBsZXRlIiB8IHRyIC1kICJcXDAxMiIgPj5maWxlICYmCisJR0lUX0FVVEhPUl9OQU1FPSJEIiBHSVRfQVVUSE9SX0VNQUlMPSJEQHRlc3QuZ2l0IiBcCisJZ2l0IGNvbW1pdCAtYSAtbSAiZWRpdCIKKycKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ3NvbWUgZWRpdCcgXAotICAgICdjaGVja19jb3VudCBBIDEgQiAxIEIxIDEgQjIgMSAiQSBVIFRob3IiIDEgQyAxIEQgMScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIGVkaXRzJyAnCisJY2hlY2tfY291bnQgQSAxIEIgMSBCMSAxIEIyIDEgIkEgVSBUaG9yIiAxIEMgMSBEIDEKKycKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ2FuIG9iZnVzY2F0ZWQgZW1haWwgYWRkZWQnIFwKLSAgICAnZWNobyAiTm8gcm9ib3RzIGFsbG93ZWQiID4gZmlsZS5uZXcgJiYKLSAgICAgY2F0IGZpbGUgPj4gZmlsZS5uZXcgJiYKLSAgICAgbXYgZmlsZS5uZXcgZmlsZSAmJgotICAgICBHSVRfQVVUSE9SX05BTUU9IkUiIEdJVF9BVVRIT1JfRU1BSUw9IkUgYXQgdGVzdCBkb3QgZ2l0IiBnaXQgY29tbWl0IC1hIC1tICJub3JvYm90cyInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBvYmZ1c2NhdGVkIGVtYWlsJyAnCisJZWNobyAiTm8gcm9ib3RzIGFsbG93ZWQiID5maWxlLm5ldyAmJgorCWNhdCBmaWxlID4+ZmlsZS5uZXcgJiYKKwltdiBmaWxlLm5ldyBmaWxlICYmCisJR0lUX0FVVEhPUl9OQU1FPSJFIiBHSVRfQVVUSE9SX0VNQUlMPSJFIGF0IHRlc3QgZG90IGdpdCIgXAorCWdpdCBjb21taXQgLWEgLW0gIm5vcm9ib3RzIgorJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAnb2JmdXNjYXRlZCBlbWFpbCBwYXJzZWQnIFwKLSAgICAnY2hlY2tfY291bnQgQSAxIEIgMSBCMSAxIEIyIDEgIkEgVSBUaG9yIiAxIEMgMSBEIDEgRSAxJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgb2JmdXNjYXRlZCBlbWFpbCcgJworCWNoZWNrX2NvdW50IEEgMSBCIDEgQjEgMSBCMiAxICJBIFUgVGhvciIgMSBDIDEgRCAxIEUgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAxIChhbGwpJyAnCisJY2hlY2tfY291bnQgLUwxIEEgMSBCIDEgQjEgMSBCMiAxICJBIFUgVGhvciIgMSBDIDEgRCAxIEUgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAsIChhbGwpJyAnCisJY2hlY2tfY291bnQgLUwsIEEgMSBCIDEgQjEgMSBCMiAxICJBIFUgVGhvciIgMSBDIDEgRCAxIEUgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBYIChYIHRvIGVuZCknICcKKwljaGVja19jb3VudCAtTDUgQjEgMSBDIDEgRCAxICJBIFUgVGhvciIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBYLCAoWCB0byBlbmQpJyAnCisJY2hlY2tfY291bnQgLUw1LCBCMSAxIEMgMSBEIDEgIkEgVSBUaG9yIiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MICxZICh1cCB0byBZKScgJworCWNoZWNrX2NvdW50IC1MLDMgQSAxIEIyIDEgRSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFgsWCcgJworCWNoZWNrX2NvdW50IC1MMywzIEIyIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCxZJyAnCisJY2hlY2tfY291bnQgLUwzLDYgQiAxIEIxIDEgQjIgMSBEIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWSxYICh1bmRvY3VtZW50ZWQpJyAnCisJY2hlY2tfY291bnQgLUw2LDMgQiAxIEIxIDEgQjIgMSBEIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCwrMScgJworCWNoZWNrX2NvdW50IC1MMywrMSBCMiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFgsK04nICcKKwljaGVja19jb3VudCAtTDMsKzQgQiAxIEIxIDEgQjIgMSBEIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCwtMScgJworCWNoZWNrX2NvdW50IC1MMywtMSBCMiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFgsLU4nICcKKwljaGVja19jb3VudCAtTDYsLTQgQiAxIEIxIDEgQjIgMSBEIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgL1JFLyAoUkUgdG8gZW5kKScgJworCWNoZWNrX2NvdW50IC1ML2V2aWwvIEMgMSAiQSBVIFRob3IiIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgL1JFLywvUkUyLycgJworCWNoZWNrX2NvdW50IC1ML3JvYm90LywvZ3JlZW4vIEEgMSBCIDEgQjIgMSBEIDEgRSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFgsL1JFLycgJworCWNoZWNrX2NvdW50IC1MNSwvZXZpbC8gQjEgMSBEIDEgIkEgVSBUaG9yIiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIC9SRS8sWScgJworCWNoZWNrX2NvdW50IC1MLzk5Lyw3IEIxIDEgRCAxICJBIFUgVGhvciIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAvUkUvLCtOJyAnCisJY2hlY2tfY291bnQgLUwvOTkvLCszIEIxIDEgRCAxICJBIFUgVGhvciIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAvUkUvLC1OJyAnCisJY2hlY2tfY291bnQgLUwvOTkvLC0zIEIgMSBCMiAxIEQgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBYIChYID4gbmxpbmVzKScgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MMTIzNDUgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAsWSAoWSA+IG5saW5lcyknICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTCwxMjM0NSBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC1MIDpyZWdleCcgJworCXRyIFEgIlxcdCIgPmhlbGxvLmMgPDwtXEVPRiAmJgorCWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCisJeworCVFwdXRzKCJoZWxsbyIpOworCX0KKwlFT0YKKwlnaXQgYWRkIGhlbGxvLmMgJiYKKwlHSVRfQVVUSE9SX05BTUU9IkYiIEdJVF9BVVRIT1JfRU1BSUw9IkZAdGVzdC5naXQiIFwKKwlnaXQgY29tbWl0IC1tICJoZWxsbyIgJiYKKworCW12IGhlbGxvLmMgaGVsbG8ub3JpZyAmJgorCXNlZCAtZSAiL30vaVxcCisJUXB1dHMoXCJnb29kYnllXCIpOyIgPGhlbGxvLm9yaWcgfCB0ciBRICJcXHQiID5oZWxsby5jICYmCisJR0lUX0FVVEhPUl9OQU1FPSJHIiBHSVRfQVVUSE9SX0VNQUlMPSJHQHRlc3QuZ2l0IiBcCisJZ2l0IGNvbW1pdCAtYSAtbSAiZ29vZGJ5ZSIgJiYKKworCW12IGhlbGxvLmMgaGVsbG8ub3JpZyAmJgorCWVjaG8gIiNpbmNsdWRlIDxzdGRpby5oPiIgPmhlbGxvLmMgJiYKKwljYXQgaGVsbG8ub3JpZyA+PmhlbGxvLmMgJiYKKwl0ciBRICJcXHQiID4+aGVsbG8uYyA8PC1cRU9GCisJdm9pZCBtYWlsKCkKKwl7CisJUXB1dHMoIm1haWwiKTsKKwl9CisJRU9GCisJR0lUX0FVVEhPUl9OQU1FPSJIIiBHSVRfQVVUSE9SX0VNQUlMPSJIQHRlc3QuZ2l0IiBcCisJZ2l0IGNvbW1pdCAtYSAtbSAibWFpbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgOmxpdGVyYWwnICcKKwljaGVja19jb3VudCAtZiBoZWxsby5jIC1MOm1haW4gRiA0IEcgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCA6cmVnZXgnICcKKwljaGVja19jb3VudCAtZiBoZWxsby5jICItTDptW2Etel1bYS16XWwiIEggNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCA6bm9tYXRjaCcgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MOm5vbWF0Y2ggaGVsbG8uYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBib2d1cycgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MIGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDEsKyBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwxLC0gZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MWCBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwxLFggZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MMSwrTiBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwxLC1OIGZpbGUKKycKZGlmZiAtLWdpdCBhL3QvY2hlY2stbm9uLXBvcnRhYmxlLXNoZWxsLnBsIGIvdC9jaGVjay1ub24tcG9ydGFibGUtc2hlbGwucGwKaW5kZXggOGI1YTcxZC4uNDU5NzFmNCAxMDA3NTUKLS0tIGEvdC9jaGVjay1ub24tcG9ydGFibGUtc2hlbGwucGwKKysrIGIvdC9jaGVjay1ub24tcG9ydGFibGUtc2hlbGwucGwKQEAgLTIxLDYgKzIxLDcgQEAKIAkvXlxzKmRlY2xhcmVccysvIGFuZCBlcnIgJ2FycmF5cy9kZWNsYXJlIG5vdCBwb3J0YWJsZSc7CiAJL15ccypbXiNdXHMqd2hpY2hccy8gYW5kIGVyciAnd2hpY2ggaXMgbm90IHBvcnRhYmxlIChwbGVhc2UgdXNlIHR5cGUpJzsKIAkvdGVzdFxzK1tePV0qPT0vIGFuZCBlcnIgJyJ0ZXN0IGEgPT0gYiIgaXMgbm90IHBvcnRhYmxlIChwbGVhc2UgdXNlID0pJzsKKwkvXlxzKmV4cG9ydFxzK1tePV0qPS8gYW5kIGVyciAnImV4cG9ydCBGT089YmFyIiBpcyBub3QgcG9ydGFibGUgKHBsZWFzZSB1c2UgRk9PPWJhciAmJiBleHBvcnQgRk9PKSc7CiAJIyB0aGlzIHJlc2V0cyBvdXIgJC4gZm9yIGVhY2ggZmlsZQogCWNsb3NlIEFSR1YgaWYgZW9mOwogfQpkaWZmIC0tZ2l0IGEvdC9saWItaHR0cGQvYXBhY2hlLmNvbmYgYi90L2xpYi1odHRwZC9hcGFjaGUuY29uZgppbmRleCBiNWJjZTQ1Li5kZDE3ZTNhIDEwMDY0NAotLS0gYS90L2xpYi1odHRwZC9hcGFjaGUuY29uZgorKysgYi90L2xpYi1odHRwZC9hcGFjaGUuY29uZgpAQCAtMSw1ICsxLDQgQEAKIFNlcnZlck5hbWUgZHVtbXkKLUxvY2tGaWxlIGFjY2VwdC5sb2NrCiBQaWRGaWxlIGh0dHBkLnBpZAogRG9jdW1lbnRSb290IHd3dwogTG9nRm9ybWF0ICIlaCAlbCAldSAldCBcIiVyXCIgJT5zICViIiBjb21tb24KQEAgLTI0LDYgKzIzLDEwIEBACiAJTG9hZE1vZHVsZSB2ZXJzaW9uX21vZHVsZSBtb2R1bGVzL21vZF92ZXJzaW9uLnNvCiA8L0lmTW9kdWxlPgogCis8SWZWZXJzaW9uIDwgMi40PgorTG9ja0ZpbGUgYWNjZXB0LmxvY2sKKzwvSWZWZXJzaW9uPgorCiA8SWZWZXJzaW9uIDwgMi4xPgogPElmTW9kdWxlICFtb2RfYXV0aC5jPgogCUxvYWRNb2R1bGUgYXV0aF9tb2R1bGUgbW9kdWxlcy9tb2RfYXV0aC5zbwpAQCAtNDUsNiArNDgsMjEgQEAKIDwvSWZNb2R1bGU+CiA8L0lmVmVyc2lvbj4KIAorPElmVmVyc2lvbiA+PSAyLjQ+Cis8SWZNb2R1bGUgIW1vZF9hdXRobl9jb3JlLmM+CisJTG9hZE1vZHVsZSBhdXRobl9jb3JlX21vZHVsZSBtb2R1bGVzL21vZF9hdXRobl9jb3JlLnNvCis8L0lmTW9kdWxlPgorPElmTW9kdWxlICFtb2RfYXV0aHpfY29yZS5jPgorCUxvYWRNb2R1bGUgYXV0aHpfY29yZV9tb2R1bGUgbW9kdWxlcy9tb2RfYXV0aHpfY29yZS5zbworPC9JZk1vZHVsZT4KKzxJZk1vZHVsZSAhbW9kX2FjY2Vzc19jb21wYXQuYz4KKwlMb2FkTW9kdWxlIGFjY2Vzc19jb21wYXRfbW9kdWxlIG1vZHVsZXMvbW9kX2FjY2Vzc19jb21wYXQuc28KKzwvSWZNb2R1bGU+Cis8SWZNb2R1bGUgIW1vZF9tcG1fcHJlZm9yay5jPgorCUxvYWRNb2R1bGUgbXBtX3ByZWZvcmtfbW9kdWxlIG1vZHVsZXMvbW9kX21wbV9wcmVmb3JrLnNvCis8L0lmTW9kdWxlPgorPC9JZlZlcnNpb24+CisKIFBhc3NFbnYgR0lUX1ZBTEdSSU5ECiBQYXNzRW52IEdJVF9WQUxHUklORF9PUFRJT05TCiAKZGlmZiAtLWdpdCBhL3QvbGliLXJlYmFzZS5zaCBiL3QvbGliLXJlYmFzZS5zaAppbmRleCA2Y2NmNzk3Li44ZmY4N2ZiIDEwMDY0NAotLS0gYS90L2xpYi1yZWJhc2Uuc2gKKysrIGIvdC9saWItcmViYXNlLnNoCkBAIC0xNyw1MSArMTcsOTggQEAKICMgICAgICAgKCJzcXVhc2giLCAiZml4dXAiLCAiZWRpdCIsIG9yICJyZXdvcmQiKSBhbmQgdGhlIFNIQTEgdGFrZW4KICMgICAgICAgZnJvbSB0aGUgc3BlY2lmaWVkIGxpbmUuCiAjCisjICAgImV4ZWNfY21kX3dpdGhfYXJncyIgLS0gYWRkIGFuICJleGVjIGNtZCB3aXRoIGFyZ3MiIGxpbmUuCisjCiAjICAgIiMiIC0tIEFkZCBhIGNvbW1lbnQgbGluZS4KICMKICMgICAiPiIgLS0gQWRkIGEgYmxhbmsgbGluZS4KIAogc2V0X2Zha2VfZWRpdG9yICgpIHsKLQllY2hvICIjISRTSEVMTF9QQVRIIiA+ZmFrZS1lZGl0b3Iuc2gKLQljYXQgPj4gZmFrZS1lZGl0b3Iuc2ggPDxcRU9GCi1jYXNlICIkMSIgaW4KLSovQ09NTUlUX0VESVRNU0cpCi0JdGVzdCAteiAiJEVYUEVDVF9IRUFERVJfQ09VTlQiIHx8Ci0JCXRlc3QgIiRFWFBFQ1RfSEVBREVSX0NPVU5UIiA9ICIkKHNlZCAtbiAnMXMvXiMgVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIFwoLipcKSBjb21taXRzXC4vXDEvcCcgPCAiJDEiKSIgfHwKKwl3cml0ZV9zY3JpcHQgZmFrZS1lZGl0b3Iuc2ggPDwtXEVPRgorCWNhc2UgIiQxIiBpbgorCSovQ09NTUlUX0VESVRNU0cpCisJCXRlc3QgLXogIiRFWFBFQ1RfSEVBREVSX0NPVU5UIiB8fAorCQkJdGVzdCAiJEVYUEVDVF9IRUFERVJfQ09VTlQiID0gIiQoc2VkIC1uICcxcy9eIyBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgXCguKlwpIGNvbW1pdHNcLi9cMS9wJyA8ICIkMSIpIiB8fAorCQkJZXhpdAorCQl0ZXN0IC16ICIkRkFLRV9DT01NSVRfTUVTU0FHRSIgfHwgZWNobyAiJEZBS0VfQ09NTUlUX01FU1NBR0UiID4gIiQxIgorCQl0ZXN0IC16ICIkRkFLRV9DT01NSVRfQU1FTkQiIHx8IGVjaG8gIiRGQUtFX0NPTU1JVF9BTUVORCIgPj4gIiQxIgogCQlleGl0Ci0JdGVzdCAteiAiJEZBS0VfQ09NTUlUX01FU1NBR0UiIHx8IGVjaG8gIiRGQUtFX0NPTU1JVF9NRVNTQUdFIiA+ICIkMSIKLQl0ZXN0IC16ICIkRkFLRV9DT01NSVRfQU1FTkQiIHx8IGVjaG8gIiRGQUtFX0NPTU1JVF9BTUVORCIgPj4gIiQxIgotCWV4aXQKLQk7OwotZXNhYwotdGVzdCAteiAiJEVYUEVDVF9DT1VOVCIgfHwKLQl0ZXN0ICIkRVhQRUNUX0NPVU5UIiA9ICQoc2VkIC1lICcvXiMvZCcgLWUgJy9eJC9kJyA8ICIkMSIgfCB3YyAtbCkgfHwKLQlleGl0Ci10ZXN0IC16ICIkRkFLRV9MSU5FUyIgJiYgZXhpdAotZ3JlcCAtdiAnXiMnIDwgIiQxIiA+ICIkMSIudG1wCi1ybSAtZiAiJDEiCi1lY2hvICdyZWJhc2UgLWkgc2NyaXB0IGJlZm9yZSBlZGl0aW5nOicKLWNhdCAiJDEiLnRtcAotYWN0aW9uPXBpY2sKLWZvciBsaW5lIGluICRGQUtFX0xJTkVTOyBkbwotCWNhc2UgJGxpbmUgaW4KLQlzcXVhc2h8Zml4dXB8ZWRpdHxyZXdvcmQpCi0JCWFjdGlvbj0iJGxpbmUiOzsKLQlleGVjKikKLQkJZWNobyAiJGxpbmUiIHwgc2VkICdzL18vIC9nJyA+PiAiJDEiOzsKLQkiIyIpCi0JCWVjaG8gJyMgY29tbWVudCcgPj4gIiQxIjs7Ci0JIj4iKQotCQllY2hvID4+ICIkMSI7OwotCSopCi0JCXNlZCAtbiAiJHtsaW5lfXMvXnBpY2svJGFjdGlvbi9wIiA8ICIkMSIudG1wID4+ICIkMSIKLQkJYWN0aW9uPXBpY2s7OworCQk7OwogCWVzYWMKLWRvbmUKLWVjaG8gJ3JlYmFzZSAtaSBzY3JpcHQgYWZ0ZXIgZWRpdGluZzonCi1jYXQgIiQxIgotRU9GCisJdGVzdCAteiAiJEVYUEVDVF9DT1VOVCIgfHwKKwkJdGVzdCAiJEVYUEVDVF9DT1VOVCIgPSAkKHNlZCAtZSAnL14jL2QnIC1lICcvXiQvZCcgPCAiJDEiIHwgd2MgLWwpIHx8CisJCWV4aXQKKwl0ZXN0IC16ICIkRkFLRV9MSU5FUyIgJiYgZXhpdAorCWdyZXAgLXYgJ14jJyA8ICIkMSIgPiAiJDEiLnRtcAorCXJtIC1mICIkMSIKKwllY2hvICdyZWJhc2UgLWkgc2NyaXB0IGJlZm9yZSBlZGl0aW5nOicKKwljYXQgIiQxIi50bXAKKwlhY3Rpb249cGljaworCWZvciBsaW5lIGluICRGQUtFX0xJTkVTOyBkbworCQljYXNlICRsaW5lIGluCisJCXNxdWFzaHxmaXh1cHxlZGl0fHJld29yZCkKKwkJCWFjdGlvbj0iJGxpbmUiOzsKKwkJZXhlYyopCisJCQllY2hvICIkbGluZSIgfCBzZWQgJ3MvXy8gL2cnID4+ICIkMSI7OworCQkiIyIpCisJCQllY2hvICcjIGNvbW1lbnQnID4+ICIkMSI7OworCQkiPiIpCisJCQllY2hvID4+ICIkMSI7OworCQkqKQorCQkJc2VkIC1uICIke2xpbmV9cy9ecGljay8kYWN0aW9uL3AiIDwgIiQxIi50bXAgPj4gIiQxIgorCQkJYWN0aW9uPXBpY2s7OworCQllc2FjCisJZG9uZQorCWVjaG8gJ3JlYmFzZSAtaSBzY3JpcHQgYWZ0ZXIgZWRpdGluZzonCisJY2F0ICIkMSIKKwlFT0YKIAogCXRlc3Rfc2V0X2VkaXRvciAiJChwd2QpL2Zha2UtZWRpdG9yLnNoIgotCWNobW9kIGEreCBmYWtlLWVkaXRvci5zaAorfQorCisjIEFmdGVyIHNldF9jYXRfdG9kb19lZGl0b3IsIHJlYmFzZSAtaSB3aWxsIHdyaXRlIHRoZSB0b2RvIGxpc3QgKGlnbm9yaW5nCisjIGJsYW5rIGxpbmVzIGFuZCBjb21tZW50cykgdG8gc3Rkb3V0LCBhbmQgZXhpdCBmYWlsdXJlIChzbyB5b3Ugc2hvdWxkIHJ1bgorIyBpdCB3aXRoIHRlc3RfbXVzdF9mYWlsKS4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gdmVyaWZ5IHRoZSBleHBlY3RlZCB1c2VyCisjIGV4cGVyaWVuY2UsIGZvciB0b2RvIGxpc3QgY2hhbmdlcyB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIG91dGNvbWUgb2YKKyMgcmViYXNlOyBvciBhcyBhbiBleHRyYSBjaGVjayBpbiBhZGRpdGlvbiB0byBjaGVja2luZyB0aGUgb3V0Y29tZS4KKworc2V0X2NhdF90b2RvX2VkaXRvciAoKSB7CisJd3JpdGVfc2NyaXB0IGZha2UtZWRpdG9yLnNoIDw8LVxFT0YKKwlncmVwICJeW14jXSIgIiQxIgorCWV4aXQgMQorCUVPRgorCXRlc3Rfc2V0X2VkaXRvciAiJChwd2QpL2Zha2UtZWRpdG9yLnNoIgorfQorCisjIGNoZWNrcyB0aGF0IHRoZSByZXZpc2lvbnMgaW4gIiQyIiByZXByZXNlbnQgYSBsaW5lYXIgcmFuZ2Ugd2l0aCB0aGUKKyMgc3ViamVjdHMgaW4gIiQxIgordGVzdF9saW5lYXJfcmFuZ2UgKCkgeworCXJldmxpc3RfbWVyZ2VzPSQoZ2l0IHJldi1saXN0IC0tbWVyZ2VzICIkMiIpICYmCisJdGVzdCAteiAiJHJldmxpc3RfbWVyZ2VzIiAmJgorCWV4cGVjdGVkPSQxCisJc2V0IC0tICQoZ2l0IGxvZyAtLXJldmVyc2UgLS1mb3JtYXQ9JXMgIiQyIikKKwl0ZXN0ICIkZXhwZWN0ZWQiID0gIiQqIgorfQorCityZXNldF9yZWJhc2UgKCkgeworCXRlc3RfbWlnaHRfZmFpbCBnaXQgcmViYXNlIC0tYWJvcnQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNsZWFuIC1mCit9CisKK2NoZXJyeV9waWNrICgpIHsKKwlnaXQgY2hlcnJ5LXBpY2sgLW4gIiQyIiAmJgorCWdpdCBjb21taXQgLW0gIiQxIiAmJgorCWdpdCB0YWcgIiQxIgorfQorCityZXZlcnQgKCkgeworCWdpdCByZXZlcnQgLW4gIiQyIiAmJgorCWdpdCBjb21taXQgLW0gIiQxIiAmJgorCWdpdCB0YWcgIiQxIgorfQorCittYWtlX2VtcHR5ICgpIHsKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIiQxIiAmJgorCWdpdCB0YWcgIiQxIgogfQpkaWZmIC0tZ2l0IGEvdC9saWItdDYwMDAuc2ggYi90L2xpYi10NjAwMC5zaAppbmRleCBlYTI1ZGQ4Li40ZmZkOTAxIDEwMDY0NAotLS0gYS90L2xpYi10NjAwMC5zaAorKysgYi90L2xpYi10NjAwMC5zaApAQCAtMSw1NSArMSw1MCBAQAogOiBpbmNsdWRlZCBmcm9tIDYwMDIgYW5kIG90aGVycwogCi1bIC1kIC5naXQvcmVmcy90YWdzIF0gfHwgbWtkaXIgLXAgLmdpdC9yZWZzL3RhZ3MKK21rZGlyIC1wIC5naXQvcmVmcy90YWdzCiAKLTo+IHNlZC5zY3JpcHQKKz5zZWQuc2NyaXB0CiAKLSMgQW5zd2VyIHRoZSBzaGExIGhhcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhZy4gVGhlIHRhZyBtdXN0IGV4aXN0IGluIC5naXQgb3IgLmdpdC9yZWZzL3RhZ3MKLXRhZygpCi17CisjIEFuc3dlciB0aGUgc2hhMSBoYXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWcuIFRoZSB0YWcgbXVzdCBleGlzdCBpbiAuZ2l0L3JlZnMvdGFncwordGFnICgpIHsKIAlfdGFnPSQxCi0JWyAtZiAuZ2l0L3JlZnMvdGFncy8kX3RhZyBdIHx8IGVycm9yICJ0YWc6IFwiJF90YWdcIiBkb2VzIG5vdCBleGlzdCIKLQljYXQgLmdpdC9yZWZzL3RhZ3MvJF90YWcKKwl0ZXN0IC1mICIuZ2l0L3JlZnMvdGFncy8kX3RhZyIgfHwgZXJyb3IgInRhZzogXCIkX3RhZ1wiIGRvZXMgbm90IGV4aXN0IgorCWNhdCAiLmdpdC9yZWZzL3RhZ3MvJF90YWciCiB9CiAKICMgR2VuZXJhdGUgYSBjb21taXQgdXNpbmcgdGhlIHRleHQgc3BlY2lmaWVkIHRvIG1ha2UgaXQgdW5pcXVlIGFuZCB0aGUgdHJlZQogIyBuYW1lZCBieSB0aGUgdGFnIHNwZWNpZmllZC4KLXVuaXF1ZV9jb21taXQoKQotewordW5pcXVlX2NvbW1pdCAoKSB7CiAJX3RleHQ9JDEKLSAgICAgICAgX3RyZWU9JDIKKwlfdHJlZT0kMgogCXNoaWZ0IDIKLQllY2hvICRfdGV4dCB8IGdpdCBjb21taXQtdHJlZSAkKHRhZyAkX3RyZWUpICIkQCIKKwllY2hvICIkX3RleHQiIHwgZ2l0IGNvbW1pdC10cmVlICQodGFnICIkX3RyZWUiKSAiJEAiCiB9CiAKICMgU2F2ZSB0aGUgb3V0cHV0IG9mIGEgY29tbWFuZCBpbnRvIHRoZSB0YWcgc3BlY2lmaWVkLiBQcmVwZW5kCiAjIGEgc3Vic3RpdHV0aW9uIHNjcmlwdCBmb3IgdGhlIHRhZyBvbnRvIHRoZSBmcm9udCBvZiBzZWQuc2NyaXB0Ci1zYXZlX3RhZygpCi17CitzYXZlX3RhZyAoKSB7CiAJX3RhZz0kMQotCVsgLW4gIiRfdGFnIiBdIHx8IGVycm9yICJ1c2FnZTogc2F2ZV90YWcgdGFnIGNvbW1pdC1hcmdzIC4uLiIKKwl0ZXN0IC1uICIkX3RhZyIgfHwgZXJyb3IgInVzYWdlOiBzYXZlX3RhZyB0YWcgY29tbWl0LWFyZ3MgLi4uIgogCXNoaWZ0IDEKLQkiJEAiID4uZ2l0L3JlZnMvdGFncy8kX3RhZworCSIkQCIgPiIuZ2l0L3JlZnMvdGFncy8kX3RhZyIKIAotICAgICAgICBlY2hvICJzLyQodGFnICRfdGFnKS8kX3RhZy9nIiA+IHNlZC5zY3JpcHQudG1wCi0JY2F0IHNlZC5zY3JpcHQgPj4gc2VkLnNjcmlwdC50bXAKKwllY2hvICJzLyQodGFnICRfdGFnKS8kX3RhZy9nIiA+c2VkLnNjcmlwdC50bXAKKwljYXQgc2VkLnNjcmlwdCA+PnNlZC5zY3JpcHQudG1wCiAJcm0gc2VkLnNjcmlwdAogCW12IHNlZC5zY3JpcHQudG1wIHNlZC5zY3JpcHQKIH0KIAogIyBSZXBsYWNlIHVuaGVscGZ1bCBzaGExIGhhc2hzZXMgd2l0aCB0aGVpciBzeW1ib2xpYyBlcXVpdmFsZW50cwotZW50YWcoKQoteworZW50YWcgKCkgewogCXNlZCAtZiBzZWQuc2NyaXB0CiB9CiAKICMgRXhlY3V0ZSBhIGNvbW1hbmQgYWZ0ZXIgZmlyc3Qgc2F2aW5nLCB0aGVuIHNldHRpbmcgdGhlIEdJVF9BVVRIT1JfRU1BSUwKICMgdGFnIHRvIGEgc3BlY2lmaWVkIHZhbHVlLiBSZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSBvbiByZXR1cm4uCi1hc19hdXRob3IoKQoteworYXNfYXV0aG9yICgpIHsKIAlfYXV0aG9yPSQxCiAJc2hpZnQgMQotICAgICAgICBfc2F2ZT0kR0lUX0FVVEhPUl9FTUFJTAorCV9zYXZlPSRHSVRfQVVUSE9SX0VNQUlMCiAKIAlHSVRfQVVUSE9SX0VNQUlMPSIkX2F1dGhvciIKIAlleHBvcnQgR0lUX0FVVEhPUl9FTUFJTApAQCAtNjMsNDUgKzU4LDU4IEBACiAJZmkKIH0KIAotY29tbWl0X2RhdGUoKQotewotICAgICAgICBfY29tbWl0PSQxCi0JZ2l0IGNhdC1maWxlIGNvbW1pdCAkX2NvbW1pdCB8IHNlZCAtbiAicy9eY29tbWl0dGVyIC4qPiBcKFswLTldKlwpIC4qL1wxL3AiCitjb21taXRfZGF0ZSAoKSB7CisJX2NvbW1pdD0kMQorCWdpdCBjYXQtZmlsZSBjb21taXQgJF9jb21taXQgfAorCXNlZCAtbiAicy9eY29tbWl0dGVyIC4qPiBcKFswLTldKlwpIC4qL1wxL3AiCiB9CiAKLW9uX2NvbW1pdHRlcl9kYXRlKCkKLXsKLSAgICBfZGF0ZT0kMQotICAgIHNoaWZ0IDEKLSAgICBHSVRfQ09NTUlUVEVSX0RBVEU9IiRfZGF0ZSIKLSAgICBleHBvcnQgR0lUX0NPTU1JVFRFUl9EQVRFCi0gICAgIiRAIgotICAgIHVuc2V0IEdJVF9DT01NSVRURVJfREFURQorIyBBc3NpZ24gdGhlIHZhbHVlIG9mIGZha2UgZGF0ZSB0byBhIHZhcmlhYmxlLCBidXQKKyMgYWxsb3cgZmFpcmx5IGNvbW1vbiAiMTk3MS0wOC0xNiAwMDowMCIgdG8gYmUgb21pdHRkCithc3NpZ25fZmFrZV9kYXRlICgpIHsKKwljYXNlICIkMiIgaW4KKwk/Pzo/Pzo/PykJZXZhbCAiJDE9JzE5NzEtMDgtMTYgJDInIiA7OworCT8/Oj8/KQkJZXZhbCAiJDE9JzE5NzEtMDgtMTYgMDA6JDInIiA7OworCT8/KQkJZXZhbCAiJDE9JzE5NzEtMDgtMTYgMDA6MDA6JDInIiA7OworCSopCQlldmFsICIkMT0nJDInIiA7OworCWVzYWMKK30KKworb25fY29tbWl0dGVyX2RhdGUgKCkgeworCWFzc2lnbl9mYWtlX2RhdGUgR0lUX0NPTU1JVFRFUl9EQVRFICIkMSIKKwlleHBvcnQgR0lUX0NPTU1JVFRFUl9EQVRFCisJc2hpZnQgMQorCSIkQCIKK30KKworb25fZGF0ZXMgKCkgeworCWFzc2lnbl9mYWtlX2RhdGUgR0lUX0NPTU1JVFRFUl9EQVRFICIkMSIKKwlhc3NpZ25fZmFrZV9kYXRlIEdJVF9BVVRIT1JfREFURSAiJDIiCisJZXhwb3J0IEdJVF9DT01NSVRURVJfREFURSBHSVRfQVVUSE9SX0RBVEUKKwlzaGlmdCAyCisJIiRAIgogfQogCiAjIEV4ZWN1dGUgYSBjb21tYW5kIGFuZCBzdXBwcmVzcyBhbnkgZXJyb3Igb3V0cHV0LgotaGlkZV9lcnJvcigpCi17CitoaWRlX2Vycm9yICgpIHsKIAkiJEAiIDI+L2Rldi9udWxsCiB9CiAKLWNoZWNrX291dHB1dCgpCi17CitjaGVja19vdXRwdXQgKCkgewogCV9uYW1lPSQxCiAJc2hpZnQgMQotCWlmIGV2YWwgIiQqIiB8IGVudGFnID4gJF9uYW1lLmFjdHVhbAorCWlmIGV2YWwgIiQqIiB8IGVudGFnID4iJF9uYW1lLmFjdHVhbCIKIAl0aGVuCi0JCXRlc3RfY21wICRfbmFtZS5leHBlY3RlZCAkX25hbWUuYWN0dWFsCisJCXRlc3RfY21wICIkX25hbWUuZXhwZWN0ZWQiICIkX25hbWUuYWN0dWFsIgogCWVsc2UKLQkJcmV0dXJuIDE7CisJCXJldHVybiAxCiAJZmkKIH0KIAogIyBUdXJuIGEgcmVhc29uYWJsZSB0ZXN0IGRlc2NyaXB0aW9uIGludG8gYSByZWFzb25hYmxlIHRlc3QgbmFtZS4KICMgQWxsIGFscGhhbnVtcyB0cmFuc2xhdGVkIGludG8gLSdzIHdoaWNoIGFyZSB0aGVuIGNvbXByZXNzZWQgYW5kIHN0cmlwcGVkCiAjIGZyb20gZnJvbnQgYW5kIGJhY2suCi1uYW1lX2Zyb21fZGVzY3JpcHRpb24oKQoteworbmFtZV9mcm9tX2Rlc2NyaXB0aW9uICgpIHsKIAlwZXJsIC1wZSAnCiAJCXMvW15BLVphLXowLTkuXS8tL2c7CiAJCXMvLSsvLS9nOwpAQCAtMTE5LDkgKzEyNywxMSBAQAogdGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MoKQogewogCV9kZXNjcmlwdGlvbj0kMQotICAgICAgICBfdGVzdD0kMgotICAgICAgICBbICQjIC1lcSAyIF0gfHwgZXJyb3IgInVzYWdlOiB0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyBkZXNjcmlwdGlvbiB0ZXN0IDw8RU9GIC4uLiBFT0YiCi0gICAgICAgIF9uYW1lPSQoZWNobyAkX2Rlc2NyaXB0aW9uIHwgbmFtZV9mcm9tX2Rlc2NyaXB0aW9uKQotCWNhdCA+ICRfbmFtZS5leHBlY3RlZAorCV90ZXN0PSQyCisJdGVzdCAkIyAtZXEgMiB8fAorCWVycm9yICJ1c2FnZTogdGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgZGVzY3JpcHRpb24gdGVzdCA8PEVPRiAuLi4gRU9GIgorCisJX25hbWU9JChlY2hvICRfZGVzY3JpcHRpb24gfCBuYW1lX2Zyb21fZGVzY3JpcHRpb24pCisJY2F0ID4iJF9uYW1lLmV4cGVjdGVkIgogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRfZGVzY3JpcHRpb24iICJjaGVja19vdXRwdXQgJF9uYW1lIFwiJF90ZXN0XCIiCiB9CmRpZmYgLS1naXQgYS90L3BlcmYvUkVBRE1FIGIvdC9wZXJmL1JFQURNRQppbmRleCBjNTUyZjU2Li44ODQ4YzE0IDEwMDY0NAotLS0gYS90L3BlcmYvUkVBRE1FCisrKyBiL3QvcGVyZi9SRUFETUUKQEAgLTY2LDcgKzY2LDcgQEAKICAgICBHSVRfUEVSRl9MQVJHRV9SRVBPCiAJUmVwb3NpdG9yaWVzIHRvIGNvcHkgZm9yIHRoZSBwZXJmb3JtYW5jZSB0ZXN0cy4gIFRoZSBub3JtYWwKIAlyZXBvIHNob3VsZCBiZSBhdCBsZWFzdCBnaXQuZ2l0IHNpemUuICBUaGUgbGFyZ2UgcmVwbyBzaG91bGQKLQlwcm9iYWJseSBiZSBhYm91dCBsaW51eC0yLjYuZ2l0IHNpemUgZm9yIG9wdGltYWwgcmVzdWx0cy4KKwlwcm9iYWJseSBiZSBhYm91dCBsaW51eC5naXQgc2l6ZSBmb3Igb3B0aW1hbCByZXN1bHRzLgogCUJvdGggZGVmYXVsdCB0byB0aGUgZ2l0LmdpdCB5b3UgYXJlIHJ1bm5pbmcgZnJvbS4KIAogWW91IGNhbiBhbHNvIHBhc3MgdGhlIG9wdGlvbnMgdGFrZW4gYnkgb3JkaW5hcnkgZ2l0IHRlc3RzOyB0aGUgbW9zdApkaWZmIC0tZ2l0IGEvdC9wZXJmL3AwMDAyLXJlYWQtY2FjaGUuc2ggYi90L3BlcmYvcDAwMDItcmVhZC1jYWNoZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MTgwYWU5Ci0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3AwMDAyLXJlYWQtY2FjaGUuc2gKQEAgLTAsMCArMSwxNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249IlRlc3RzIHBlcmZvcm1hbmNlIG9mIHJlYWRpbmcgdGhlIGluZGV4IgorCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2RlZmF1bHRfcmVwbworCitjb3VudD0xMDAwCit0ZXN0X3BlcmYgInJlYWRfY2FjaGUvZGlzY2FyZF9jYWNoZSAkY291bnQgdGltZXMiICIKKwl0ZXN0LXJlYWQtY2FjaGUgJGNvdW50CisiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3A0MjExLWxpbmUtbG9nLnNoIGIvdC9wZXJmL3A0MjExLWxpbmUtbG9nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNkMDc0YjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDQyMTEtbGluZS1sb2cuc2gKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3RzIGxvZyAtTCBwZXJmb3JtYW5jZScKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfZGVmYXVsdF9yZXBvCisKKyMgUGljayBhIGZpbGUgdG8gbG9nIHBzZXVkby1yYW5kb21seS4gIFRoZSBzb3J0IGtleSBpcyB0aGUgYmxvYiBoYXNoLAorIyBzbyBpdCBpcyBzdGFibGUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZWxlY3QgYSBmaWxlJyAnCisJZ2l0IGxzLXRyZWUgSEVBRCB8IGdyZXAgXjEwMDY0NCB8CisJc29ydCAtayAzIHwgaGVhZCAtMSB8IGN1dCAtZiAyID5maWxlbGlzdAorJworCitmaWxlPSQoY2F0IGZpbGVsaXN0KQorZXhwb3J0IGZpbGUKKwordGVzdF9wZXJmICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIChiYXNlbGluZSknICcKKwlnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIEhFQUQgPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ2dpdCBsb2cgLS1mb2xsb3cgKGJhc2VsaW5lIGZvciAtTSknICcKKwlnaXQgbG9nIC0tb25lbGluZSAtLWZvbGxvdyAtLSAiJGZpbGUiID4vZGV2L251bGwKKycKKwordGVzdF9wZXJmICdnaXQgbG9nIC1MJyAnCisJZ2l0IGxvZyAtTCAxOiIkZmlsZSIgPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ2dpdCBsb2cgLU0gLUwnICcKKwlnaXQgbG9nIC1NIC1MIDE6IiRmaWxlIiA+L2Rldi9udWxsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3BlcmYtbGliLnNoIGIvdC9wZXJmL3BlcmYtbGliLnNoCmluZGV4IGE4MTZmYmMuLmM2MWQ1MzUgMTAwNjQ0Ci0tLSBhL3QvcGVyZi9wZXJmLWxpYi5zaAorKysgYi90L3BlcmYvcGVyZi1saWIuc2gKQEAgLTE1MCw2ICsxNTAsNyBAQAogCiAKIHRlc3RfcGVyZiAoKSB7CisJdGVzdF9zdGFydF8KIAl0ZXN0ICIkIyIgPSAzICYmIHsgdGVzdF9wcmVyZXE9JDE7IHNoaWZ0OyB9IHx8IHRlc3RfcHJlcmVxPQogCXRlc3QgIiQjIiA9IDIgfHwKIAllcnJvciAiYnVnIGluIHRoZSB0ZXN0IHNjcmlwdDogbm90IDIgb3IgMyBwYXJhbWV0ZXJzIHRvIHRlc3QtZXhwZWN0LXN1Y2Nlc3MiCkBAIC0xODcsNyArMTg4LDcgQEAKIAkJYmFzZT0iJHBlcmZfcmVzdWx0c19kaXIiLyIkcGVyZl9yZXN1bHRzX3ByZWZpeCQoYmFzZW5hbWUgIiQwIiAuc2gpIi4iJHRlc3RfY291bnQiCiAJCSIkVEVTVF9ESVJFQ1RPUlkiL3BlcmYvbWluX3RpbWUucGVybCB0ZXN0X3RpbWUuKiA+IiRiYXNlIi50aW1lcwogCWZpCi0JZWNobyA+JjMgIiIKKwl0ZXN0X2ZpbmlzaF8KIH0KIAogIyBXZSBleHRlbmQgdGVzdF9kb25lIHRvIHByaW50IHRpbWluZ3MgYXQgdGhlIGVuZCAoLi9ydW4gZGlzYWJsZXMgdGhpcwpkaWZmIC0tZ2l0IGEvdC90MDAwMC1iYXNpYy5zaCBiL3QvdDAwMDAtYmFzaWMuc2gKaW5kZXggY2VmZTMzZC4uMTBiZTUyYiAxMDA3NTUKLS0tIGEvdC90MDAwMC1iYXNpYy5zaAorKysgYi90L3QwMDAwLWJhc2ljLnNoCkBAIC00Nyw4ICs0NywxNCBAQAogCiBydW5fc3ViX3Rlc3RfbGliX3Rlc3QgKCkgewogCW5hbWU9IiQxIiBkZXNjcj0iJDIiICMgc3RkaW4gaXMgdGhlIGJvZHkgb2YgdGhlIHRlc3QgY29kZQorCXNoaWZ0IDIKIAlta2RpciAiJG5hbWUiICYmCiAJKAorCQkjIFByZXRlbmQgd2UncmUgYSB0ZXN0IGhhcm5lc3MuICBUaGlzIHByZXZlbnRzCisJCSMgdGVzdC1saWIgZnJvbSB3cml0aW5nIHRoZSBjb3VudHMgdG8gYSBmaWxlIHRoYXQgd2lsbAorCQkjIGxhdGVyIGJlIHN1bW1hcml6ZWQsIHNob3dpbmcgc3B1cmlvdXMgImZhaWxlZCIgdGVzdHMKKwkJSEFSTkVTU19BQ1RJVkU9dCAmJgorCQlleHBvcnQgSEFSTkVTU19BQ1RJVkUgJiYKIAkJY2QgIiRuYW1lIiAmJgogCQljYXQgPiIkbmFtZS5zaCIgPDwtRU9GICYmCiAJCSMhJFNIRUxMX1BBVEgKQEAgLTY1LDcgKzcxLDcgQEAKIAkJY2F0ID4+IiRuYW1lLnNoIiAmJgogCQljaG1vZCAreCAiJG5hbWUuc2giICYmCiAJCWV4cG9ydCBURVNUX0RJUkVDVE9SWSAmJgotCQkuLyIkbmFtZS5zaCIgPm91dCAyPmVycgorCQkuLyIkbmFtZS5zaCIgIiRAIiA+b3V0IDI+ZXJyCiAJKQogfQogCkBAIC0yMTUsNiArMjIxLDYwIEBACiAJRU9GCiAiCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS12ZXJib3NlJyAnCisJdGVzdF9tdXN0X2ZhaWwgcnVuX3N1Yl90ZXN0X2xpYl90ZXN0IFwKKwkJdGVzdC12ZXJib3NlICJ0ZXN0IHZlcmJvc2UiIC0tdmVyYm9zZSA8PC1cRU9GICYmCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicGFzc2luZyB0ZXN0IiB0cnVlCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAidGVzdCB3aXRoIG91dHB1dCIgImVjaG8gZm9vIgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZhaWxpbmcgdGVzdCIgZmFsc2UKKwl0ZXN0X2RvbmUKKwlFT0YKKwltdiB0ZXN0LXZlcmJvc2Uvb3V0IHRlc3QtdmVyYm9zZS9vdXQrCisJZ3JlcCAtdiAiXkluaXRpYWxpemVkIGVtcHR5IiB0ZXN0LXZlcmJvc2Uvb3V0KyA+dGVzdC12ZXJib3NlL291dCAmJgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IHRlc3QtdmVyYm9zZSA8PC1cRU9GCisJPiBleHBlY3Rpbmcgc3VjY2VzczogdHJ1ZQorCT4gWgorCT4gb2sgMSAtIHBhc3NpbmcgdGVzdAorCT4gWgorCT4gZXhwZWN0aW5nIHN1Y2Nlc3M6IGVjaG8gZm9vCisJPiBmb28KKwk+IFoKKwk+IG9rIDIgLSB0ZXN0IHdpdGggb3V0cHV0CisJPiBaCisJPiBleHBlY3Rpbmcgc3VjY2VzczogZmFsc2UKKwk+IFoKKwk+IG5vdCBvayAzIC0gZmFpbGluZyB0ZXN0CisJPiAjCWZhbHNlCisJPiBaCisJPiAjIGZhaWxlZCAxIGFtb25nIDMgdGVzdChzKQorCT4gMS4uMworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tdmVyYm9zZS1vbmx5JyAnCisJdGVzdF9tdXN0X2ZhaWwgcnVuX3N1Yl90ZXN0X2xpYl90ZXN0IFwKKwkJdGVzdC12ZXJib3NlLW9ubHktMiAidGVzdCB2ZXJib3NlLW9ubHk9MiIgXAorCQktLXZlcmJvc2Utb25seT0yIDw8LVxFT0YgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJwYXNzaW5nIHRlc3QiIHRydWUKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJ0ZXN0IHdpdGggb3V0cHV0IiAiZWNobyBmb28iCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZmFpbGluZyB0ZXN0IiBmYWxzZQorCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IHRlc3QtdmVyYm9zZS1vbmx5LTIgPDwtXEVPRgorCT4gb2sgMSAtIHBhc3NpbmcgdGVzdAorCT4gWgorCT4gZXhwZWN0aW5nIHN1Y2Nlc3M6IGVjaG8gZm9vCisJPiBmb28KKwk+IFoKKwk+IG9rIDIgLSB0ZXN0IHdpdGggb3V0cHV0CisJPiBaCisJPiBub3Qgb2sgMyAtIGZhaWxpbmcgdGVzdAorCT4gIwlmYWxzZQorCT4gIyBmYWlsZWQgMSBhbW9uZyAzIHRlc3QocykKKwk+IDEuLjMKKwlFT0YKKycKKwogdGVzdF9zZXRfcHJlcmVxIEhBVkVJVAogaGF2ZWl0PW5vCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIEhBVkVJVCAndGVzdCBydW5zIGlmIHByZXJlcXVpc2l0ZSBpcyBzYXRpc2ZpZWQnICcKQEAgLTM2NywyMiArNDI3LDYgQEAKIAogIyBWYXJpb3VzIHR5cGVzIG9mIG9iamVjdHMKIAotIyBTb21lIGZpbGVzeXN0ZW1zIGRvIG5vdCBzdXBwb3J0IHN5bWJsaWMgbGlua3M7IG9uIHN1Y2ggc3lzdGVtcwotIyBzb21lIGV4cGVjdGVkIHZhbHVlcyBhcmUgZGlmZmVyZW50Ci1pZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCi10aGVuCi0JZXhwZWN0ZmlsdGVyPWNhdAotCWV4cGVjdGVkdHJlZT0wODc3MDRhOTZiYWYxYzJkMWM4NjlhOGIwODQ0ODFlMTIxYzg4YjViCi0JZXhwZWN0ZWRwdHJlZTE9MjFhZTgyNjljYWNiZTU3YWUwOTEzOGRjYzNhMjg4N2Y5MDRkMDJiMwotCWV4cGVjdGVkcHRyZWUyPTNjNWU1Mzk5ZjNhMzMzZWRkZWNjZTdhOWI5NDY1YjYzZjY1ZjUxZTIKLWVsc2UKLQlleHBlY3RmaWx0ZXI9J2dyZXAgLXYgc3ltJwotCWV4cGVjdGVkdHJlZT04ZTE4ZWRmN2Q3ZWRjZjQzNzFhM2FjNmFlNWYwN2MyNjQxZGI3YzQ2Ci0JZXhwZWN0ZWRwdHJlZTE9Y2ZiODU5MWIyZjY1ZGU4YjhjYzEwMjBjZDdkOWU2N2U3NzkzYjMyNQotCWV4cGVjdGVkcHRyZWUyPWNlNTgwNDQ4ZjAxNDhiOTg1YTUxM2I2OTNmZGY3ZDgwMmNhY2I0NGYKLWZpCi0KLQogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkaW5nIHZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cyB3aXRoIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQnICcKIAlta2RpciBwYXRoMiBwYXRoMyBwYXRoMy9zdWJwMyAmJgogCXBhdGhzPSJwYXRoMCBwYXRoMi9maWxlMiBwYXRoMy9maWxlMyBwYXRoMy9zdWJwMy9maWxlMyIgJiYKQEAgLTM5MCwxMCArNDM0LDcgQEAKIAkJZm9yIHAgaW4gJHBhdGhzCiAJCWRvCiAJCQllY2hvICJoZWxsbyAkcCIgPiRwIHx8IGV4aXQgMQotCQkJaWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUwotCQkJdGhlbgotCQkJCWxuIC1zICJoZWxsbyAkcCIgJHtwfXN5bSB8fCBleGl0IDEKLQkJCWZpCisJCQl0ZXN0X2xuX3NfYWRkICJoZWxsbyAkcCIgJHtwfXN5bSB8fCBleGl0IDEKIAkJZG9uZQogCSkgJiYKIAlmaW5kIHBhdGgqICEgLXR5cGUgZCAtcHJpbnQgfCB4YXJncyBnaXQgdXBkYXRlLWluZGV4IC0tYWRkCkBAIC00MDUsNyArNDQ2LDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWRhdGUgZ2l0IGxzLWZpbGVzIG91dHB1dCBmb3IgYSBrbm93biB0cmVlJyAnCi0JJGV4cGVjdGZpbHRlciA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgogCTEwMDY0NCBmODcyOTBmOGViMmNiYmVhNzg1NzIxNDQ1OWEwNzM5OTI3ZWFiMTU0IDAJcGF0aDAKIAkxMjAwMDAgMTVhOTg0MzNhZTMzMTE0YjA4NWYzZWIzYmIwM2I4MzJiMzE4MGEwMSAwCXBhdGgwc3ltCiAJMTAwNjQ0IDNmZWZmOTQ5ZWQwMGE2MmQ5ZjdhZjk3YzE1Y2Q4YTMwNTk1ZTdhYzcgMAlwYXRoMi9maWxlMgpAQCAtNDIzLDE0ICs0NjQsMTQgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWRhdGUgb2JqZWN0IElEIGZvciBhIGtub3duIHRyZWUnICcKLQl0ZXN0ICIkdHJlZSIgPSAiJGV4cGVjdGVkdHJlZSIKKwl0ZXN0ICIkdHJlZSIgPSAwODc3MDRhOTZiYWYxYzJkMWM4NjlhOGIwODQ0ODFlMTIxYzg4YjViCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3dpbmcgdHJlZSB3aXRoIGdpdCBscy10cmVlJyAnCiAgICAgZ2l0IGxzLXRyZWUgJHRyZWUgPmN1cnJlbnQKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZ2l0IGxzLXRyZWUgb3V0cHV0IGZvciBhIGtub3duIHRyZWUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy10cmVlIG91dHB1dCBmb3IgYSBrbm93biB0cmVlJyAnCiAJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCiAJMTAwNjQ0IGJsb2IgZjg3MjkwZjhlYjJjYmJlYTc4NTcyMTQ0NTlhMDczOTkyN2VhYjE1NAlwYXRoMAogCTEyMDAwMCBibG9iIDE1YTk4NDMzYWUzMzExNGIwODVmM2ViM2JiMDNiODMyYjMxODBhMDEJcGF0aDBzeW0KQEAgLTQ0Nyw3ICs0ODgsNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtdHJlZSAtciBvdXRwdXQgZm9yIGEga25vd24gdHJlZScgJwotCSRleHBlY3RmaWx0ZXIgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKIAkxMDA2NDQgYmxvYiBmODcyOTBmOGViMmNiYmVhNzg1NzIxNDQ1OWEwNzM5OTI3ZWFiMTU0CXBhdGgwCiAJMTIwMDAwIGJsb2IgMTVhOTg0MzNhZTMzMTE0YjA4NWYzZWIzYmIwM2I4MzJiMzE4MGEwMQlwYXRoMHN5bQogCTEwMDY0NCBibG9iIDNmZWZmOTQ5ZWQwMGE2MmQ5ZjdhZjk3YzE1Y2Q4YTMwNTk1ZTdhYzcJcGF0aDIvZmlsZTIKQEAgLTQ2NSw3ICs1MDYsNyBAQAogCWdpdCBscy10cmVlIC1yIC10ICR0cmVlID5jdXJyZW50CiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2dpdCBscy10cmVlIC1yIG91dHB1dCBmb3IgYSBrbm93biB0cmVlJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtdHJlZSAtciBvdXRwdXQgZm9yIGEga25vd24gdHJlZScgJwogCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgogCTEwMDY0NCBibG9iIGY4NzI5MGY4ZWIyY2JiZWE3ODU3MjE0NDU5YTA3Mzk5MjdlYWIxNTQJcGF0aDAKIAkxMjAwMDAgYmxvYiAxNWE5ODQzM2FlMzMxMTRiMDg1ZjNlYjNiYjAzYjgzMmIzMTgwYTAxCXBhdGgwc3ltCkBAIC00ODcsNyArNTI4LDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWRhdGUgb2JqZWN0IElEIGZvciBhIGtub3duIHRyZWUnICcKLQl0ZXN0ICIkcHRyZWUiID0gIiRleHBlY3RlZHB0cmVlMSIKKwl0ZXN0ICIkcHRyZWUiID0gMjFhZTgyNjljYWNiZTU3YWUwOTEzOGRjYzNhMjg4N2Y5MDRkMDJiMwogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0aW5nIHBhcnRpYWwgdHJlZSBvdXQgd2l0aCBnaXQgd3JpdGUtdHJlZSAtLXByZWZpeCcgJwpAQCAtNDk1LDcgKzUzNiw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkYXRlIG9iamVjdCBJRCBmb3IgYSBrbm93biB0cmVlJyAnCi0JdGVzdCAiJHB0cmVlIiA9ICIkZXhwZWN0ZWRwdHJlZTIiCisJdGVzdCAiJHB0cmVlIiA9IDNjNWU1Mzk5ZjNhMzMzZWRkZWNjZTdhOWI5NDY1YjYzZjY1ZjUxZTIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHV0IGludmFsaWQgb2JqZWN0cyBpbnRvIHRoZSBpbmRleCcgJwpAQCAtNTI5LDcgKzU3MCw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkYXRlIGdpdCBkaWZmLWZpbGVzIG91dHB1dCBmb3IgYSBrbm93IGNhY2hlL3dvcmsgdHJlZSBzdGF0ZScgJwotCSRleHBlY3RmaWx0ZXIgPmV4cGVjdGVkIDw8XEVPRiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCiA6MTAwNjQ0IDEwMDY0NCBmODcyOTBmOGViMmNiYmVhNzg1NzIxNDQ1OWEwNzM5OTI3ZWFiMTU0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTQlwYXRoMAogOjEyMDAwMCAxMjAwMDAgMTVhOTg0MzNhZTMzMTE0YjA4NWYzZWIzYmIwM2I4MzJiMzE4MGEwMSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE0JcGF0aDBzeW0KIDoxMDA2NDQgMTAwNjQ0IDNmZWZmOTQ5ZWQwMGE2MmQ5ZjdhZjk3YzE1Y2Q4YTMwNTk1ZTdhYzcgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNCXBhdGgyL2ZpbGUyCkBAIC01NTMsNyArNTk0LDcgQEAKICcKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotUD0kZXhwZWN0ZWR0cmVlCitQPTA4NzcwNGE5NmJhZjFjMmQxYzg2OWE4YjA4NDQ4MWUxMjFjODhiNWIKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNvbW1pdC10cmVlIHJlY29yZHMgdGhlIGNvcnJlY3QgdHJlZSBpbiBhIGNvbW1pdCcgJwogCWNvbW1pdDA9JChlY2hvIE5PIHwgZ2l0IGNvbW1pdC10cmVlICRQKSAmJgpkaWZmIC0tZ2l0IGEvdC90MDAwNS1zaWduYWxzLnNoIGIvdC90MDAwNS1zaWduYWxzLnNoCmluZGV4IDkzZTU4YzAuLjk4MTQzN2IgMTAwNzU1Ci0tLSBhL3QvdDAwMDUtc2lnbmFscy5zaAorKysgYi90L3QwMDA1LXNpZ25hbHMuc2gKQEAgLTIwLDQgKzIwLDExIEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnc2lnbmFscyBhcmUgcHJvcGFnYXRlZCB1c2luZyBzaGVsbCBjb252ZW50aW9uJyAnCisJIyB3ZSB1c2UgZXhlYyBoZXJlIHRvIGF2b2lkIGFueSBzdWItc2hlbGwgaW50ZXJwcmV0YXRpb24KKwkjIG9mIHRoZSBleGl0IGNvZGUKKwlnaXQgY29uZmlnIGFsaWFzLnNpZ3Rlcm0gIiFleGVjIHRlc3Qtc2lnY2hhaW4iICYmCisJdGVzdF9leHBlY3RfY29kZSAxNDMgZ2l0IHNpZ3Rlcm0KKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDA4LWlnbm9yZXMuc2ggYi90L3QwMDA4LWlnbm9yZXMuc2gKaW5kZXggOWMxYmRlMS4uYzI5MzQyZCAxMDA3NTUKLS0tIGEvdC90MDAwOC1pZ25vcmVzLnNoCisrKyBiL3QvdDAwMDgtaWdub3Jlcy5zaApAQCAtNjYsMTYgKzY2LDIzIEBACiAKIAlpbml0X3ZhcnMgJiYKIAlybSAtZiAiJEhPTUUvc3Rkb3V0IiAiJEhPTUUvc3RkZXJyIiAiJEhPTUUvY21kIiAmJgotCWVjaG8gZ2l0ICRnbG9iYWxfYXJncyBjaGVjay1pZ25vcmUgJHF1aWV0X29wdCAkdmVyYm9zZV9vcHQgJGFyZ3MgXAorCWVjaG8gZ2l0ICRnbG9iYWxfYXJncyBjaGVjay1pZ25vcmUgJHF1aWV0X29wdCAkdmVyYm9zZV9vcHQgJG5vbl9tYXRjaGluZ19vcHQgJGFyZ3MgXAogCQk+IiRIT01FL2NtZCIgJiYKKwllY2hvICIkZXhwZWN0X2NvZGUiID4iJEhPTUUvZXhwZWN0ZWQtZXhpdC1jb2RlIiAmJgogCXRlc3RfZXhwZWN0X2NvZGUgIiRleHBlY3RfY29kZSIgXAotCQlnaXQgJGdsb2JhbF9hcmdzIGNoZWNrLWlnbm9yZSAkcXVpZXRfb3B0ICR2ZXJib3NlX29wdCAkYXJncyBcCisJCWdpdCAkZ2xvYmFsX2FyZ3MgY2hlY2staWdub3JlICRxdWlldF9vcHQgJHZlcmJvc2Vfb3B0ICRub25fbWF0Y2hpbmdfb3B0ICRhcmdzIFwKIAkJPiIkSE9NRS9zdGRvdXQiIDI+IiRIT01FL3N0ZGVyciIgJiYKIAl0ZXN0X2NtcCAiJEhPTUUvZXhwZWN0ZWQtc3Rkb3V0IiAiJEhPTUUvc3Rkb3V0IiAmJgogCXN0ZGVycl9lbXB0eV9vbl9zdWNjZXNzICIkZXhwZWN0X2NvZGUiCiB9CiAKLSMgUnVucyB0aGUgc2FtZSBjb2RlIHdpdGggMyBkaWZmZXJlbnQgbGV2ZWxzIG9mIG91dHB1dCB2ZXJib3NpdHksCisjIFJ1bnMgdGhlIHNhbWUgY29kZSB3aXRoIDQgZGlmZmVyZW50IGxldmVscyBvZiBvdXRwdXQgdmVyYm9zaXR5OgorIworIyAgIDEuIHdpdGggLXEgLyAtLXF1aWV0CisjICAgMi4gd2l0aCBkZWZhdWx0IHZlcmJvc2l0eQorIyAgIDMuIHdpdGggLXYgLyAtLXZlcmJvc2UKKyMgICA0LiB3aXRoIC12IC8gLS12ZXJib3NlLCAqYW5kKiAtbiAvIC0tbm9uLW1hdGNoaW5nCisjCiAjIGV4cGVjdGluZyBzdWNjZXNzIGVhY2ggdGltZS4gIFRha2VzIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0CiAjIGNoZWNrLWlnbm9yZSAtLXZlcmJvc2Ugb3V0cHV0IGlzIHRoZSBzYW1lIGFzIG5vcm1hbCBvdXRwdXQgZXhjZXB0CiAjIGZvciB0aGUgZXh0cmEgZmlyc3QgY29sdW1uLgpAQCAtODMsNyArOTAsOSBAQAogIyBBcmd1bWVudHM6CiAjICAgLSAob3B0aW9uYWwpIHByZXJlcXMgZm9yIHRoaXMgdGVzdCwgZS5nLiAnU1lNTElOS1MnCiAjICAgLSB0ZXN0IG5hbWUKLSMgICAtIG91dHB1dCB0byBleHBlY3QgZnJvbSAtdiAvIC0tdmVyYm9zZSBtb2RlCisjICAgLSBvdXRwdXQgdG8gZXhwZWN0IGZyb20gdGhlIGZvdXJ0aCB2ZXJib3NpdHkgbW9kZSAodGhlIG91dHB1dAorIyAgICAgZnJvbSB0aGUgb3RoZXIgdmVyYm9zaXR5IG1vZGVzIGlzIGF1dG9tYXRpY2FsbHkgaW5mZXJyZWQKKyMgICAgIGZyb20gdGhpcyB2YWx1ZSkKICMgICAtIGNvZGUgdG8gcnVuIChzaG91bGQgaW52b2tlIHRlc3RfY2hlY2tfaWdub3JlKQogdGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAoKSB7CiAJcHJlcmVxPQpAQCAtOTIsOCArMTAxLDkgQEAKIAkJcHJlcmVxPSQxCiAJCXNoaWZ0CiAJZmkKLQl0ZXN0bmFtZT0iJDEiIGV4cGVjdF92ZXJib3NlPSIkMiIgY29kZT0iJDMiCisJdGVzdG5hbWU9IiQxIiBleHBlY3RfYWxsPSIkMiIgY29kZT0iJDMiCiAKKwlleHBlY3RfdmVyYm9zZT0kKCBlY2hvICIkZXhwZWN0X2FsbCIgfCBncmVwIC12ICdeOjoJJyApCiAJZXhwZWN0PSQoIGVjaG8gIiRleHBlY3RfdmVyYm9zZSIgfCBzZWQgLWUgJ3MvLioJLy8nICkKIAogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJHByZXJlcSAiJHRlc3RuYW1lIiAnCkBAIC0xMDEsMjMgKzExMSw0MCBAQAogCQlldmFsICIkY29kZSIKIAknCiAKLQlmb3IgcXVpZXRfb3B0IGluICctcScgJy0tcXVpZXQnCi0JZG8KLQkJdGVzdF9leHBlY3Rfc3VjY2VzcyAkcHJlcmVxICIkdGVzdG5hbWUke3F1aWV0X29wdDorIHdpdGggJHF1aWV0X29wdH0iICIKKwkjIC0tcXVpZXQgaXMgb25seSB2YWxpZCB3aGVuIGEgc2luZ2xlIHBhdHRlcm4gaXMgcGFzc2VkCisJaWYgdGVzdCAkKCBlY2hvICIkZXhwZWN0X2FsbCIgfCB3YyAtbCApID0gMQorCXRoZW4KKwkJZm9yIHF1aWV0X29wdCBpbiAnLXEnICctLXF1aWV0JworCQlkbworCQkJdGVzdF9leHBlY3Rfc3VjY2VzcyAkcHJlcmVxICIkdGVzdG5hbWUke3F1aWV0X29wdDorIHdpdGggJHF1aWV0X29wdH0iICIKIAkJCWV4cGVjdCAnJyAmJgogCQkJJGNvZGUKIAkJIgotCWRvbmUKLQlxdWlldF9vcHQ9CisJCWRvbmUKKwkJcXVpZXRfb3B0PQorCWZpCiAKIAlmb3IgdmVyYm9zZV9vcHQgaW4gJy12JyAnLS12ZXJib3NlJwogCWRvCi0JCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJHByZXJlcSAiJHRlc3RuYW1lJHt2ZXJib3NlX29wdDorIHdpdGggJHZlcmJvc2Vfb3B0fSIgIgotCQkJZXhwZWN0ICckZXhwZWN0X3ZlcmJvc2UnICYmCi0JCQkkY29kZQotCQkiCisJCWZvciBub25fbWF0Y2hpbmdfb3B0IGluICcnICcgLW4nICcgLS1ub24tbWF0Y2hpbmcnCisJCWRvCisJCQlpZiB0ZXN0IC1uICIkbm9uX21hdGNoaW5nX29wdCIKKwkJCXRoZW4KKwkJCQlteV9leHBlY3Q9IiRleHBlY3RfYWxsIgorCQkJZWxzZQorCQkJCW15X2V4cGVjdD0iJGV4cGVjdF92ZXJib3NlIgorCQkJZmkKKworCQkJdGVzdF9jb2RlPSIKKwkJCQlleHBlY3QgJyRteV9leHBlY3QnICYmCisJCQkJJGNvZGUKKwkJCSIKKwkJCW9wdHM9IiR2ZXJib3NlX29wdCRub25fbWF0Y2hpbmdfb3B0IgorCQkJdGVzdF9leHBlY3Rfc3VjY2VzcyAkcHJlcmVxICIkdGVzdG5hbWUke29wdHM6KyB3aXRoICRvcHRzfSIgIiR0ZXN0X2NvZGUiCisJCWRvbmUKIAlkb25lCiAJdmVyYm9zZV9vcHQ9CisJbm9uX21hdGNoaW5nX29wdD0KIH0KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKQEAgLTE3OCw3ICsyMDUsNyBAQAogIwogIyB0ZXN0IGludmFsaWQgaW5wdXRzCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgJy4gY29ybmVyLWNhc2UnICcnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgJy4gY29ybmVyLWNhc2UnICc6OgkuJyAnCiAJdGVzdF9jaGVja19pZ25vcmUgLiAxCiAnCiAKQEAgLTE4OSwxMSArMjE2LDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnLS1zdGRpbiB3aXRoIGVtcHR5IFNURElOJyAnJyAnCiAJdGVzdF9jaGVja19pZ25vcmUgIi0tc3RkaW4iIDEgPC9kZXYvbnVsbCAmJgotCWlmIHRlc3QgLW4gIiRxdWlldF9vcHQiOyB0aGVuCi0JCXRlc3Rfc3RkZXJyICIiCi0JZWxzZQotCQl0ZXN0X3N0ZGVyciAibm8gcGF0aHNwZWMgZ2l2ZW4uIgotCWZpCisJdGVzdF9zdGRlcnIgIiIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLXEgd2l0aCBtdWx0aXBsZSBhcmdzJyAnCkBAIC0yNzYsMjcgKzI5OSwzOSBAQAogCQl3aGVyZT0iaW4gc3ViZGlyICRzdWJkaXIiCiAJZmkKIAotCXRlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgIm5vbi1leGlzdGVudCBmaWxlICR3aGVyZSBub3QgaWdub3JlZCIgJycgIgotCQl0ZXN0X2NoZWNrX2lnbm9yZSAnJHtzdWJkaXJ9bm9uLWV4aXN0ZW50JyAxCi0JIgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgIm5vbi1leGlzdGVudCBmaWxlICR3aGVyZSBub3QgaWdub3JlZCIgXAorCQkiOjoJJHtzdWJkaXJ9bm9uLWV4aXN0ZW50IiBcCisJCSJ0ZXN0X2NoZWNrX2lnbm9yZSAnJHtzdWJkaXJ9bm9uLWV4aXN0ZW50JyAxIgogCiAJdGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAibm9uLWV4aXN0ZW50IGZpbGUgJHdoZXJlIGlnbm9yZWQiIFwKLQkJIi5naXRpZ25vcmU6MTpvbmUJJHtzdWJkaXJ9b25lIiAiCi0JCXRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1vbmUnCi0JIgorCQkiLmdpdGlnbm9yZToxOm9uZQkke3N1YmRpcn1vbmUiIFwKKwkJInRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1vbmUnIgogCi0JdGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAiZXhpc3RpbmcgdW50cmFja2VkIGZpbGUgJHdoZXJlIG5vdCBpZ25vcmVkIiAnJyAiCi0JCXRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1ub3QtaWdub3JlZCcgMQotCSIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpICJleGlzdGluZyB1bnRyYWNrZWQgZmlsZSAkd2hlcmUgbm90IGlnbm9yZWQiIFwKKwkJIjo6CSR7c3ViZGlyfW5vdC1pZ25vcmVkIiBcCisJCSJ0ZXN0X2NoZWNrX2lnbm9yZSAnJHtzdWJkaXJ9bm90LWlnbm9yZWQnIDEiCiAKLQl0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpICJleGlzdGluZyB0cmFja2VkIGZpbGUgJHdoZXJlIG5vdCBpZ25vcmVkIiAnJyAiCi0JCXRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1pZ25vcmVkLWJ1dC1pbi1pbmRleCcgMQotCSIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpICJleGlzdGluZyB0cmFja2VkIGZpbGUgJHdoZXJlIG5vdCBpZ25vcmVkIiBcCisJCSI6Ogkke3N1YmRpcn1pZ25vcmVkLWJ1dC1pbi1pbmRleCIgXAorCQkidGVzdF9jaGVja19pZ25vcmUgJyR7c3ViZGlyfWlnbm9yZWQtYnV0LWluLWluZGV4JyAxIgogCiAJdGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAiZXhpc3RpbmcgdW50cmFja2VkIGZpbGUgJHdoZXJlIGlnbm9yZWQiIFwKLQkJIi5naXRpZ25vcmU6MjppZ25vcmVkLSoJJHtzdWJkaXJ9aWdub3JlZC1hbmQtdW50cmFja2VkIiAiCi0JCXRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1pZ25vcmVkLWFuZC11bnRyYWNrZWQnCi0JIgorCQkiLmdpdGlnbm9yZToyOmlnbm9yZWQtKgkke3N1YmRpcn1pZ25vcmVkLWFuZC11bnRyYWNrZWQiIFwKKwkJInRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1pZ25vcmVkLWFuZC11bnRyYWNrZWQnIgorCisJdGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAibWl4IG9mIGZpbGUgdHlwZXMgJHdoZXJlIiBcCisiOjoJJHtzdWJkaXJ9bm9uLWV4aXN0ZW50CisuZ2l0aWdub3JlOjE6b25lCSR7c3ViZGlyfW9uZQorOjoJJHtzdWJkaXJ9bm90LWlnbm9yZWQKKzo6CSR7c3ViZGlyfWlnbm9yZWQtYnV0LWluLWluZGV4CisuZ2l0aWdub3JlOjI6aWdub3JlZC0qCSR7c3ViZGlyfWlnbm9yZWQtYW5kLXVudHJhY2tlZCIgXAorCQkidGVzdF9jaGVja19pZ25vcmUgJworCQkJJHtzdWJkaXJ9bm9uLWV4aXN0ZW50CisJCQkke3N1YmRpcn1vbmUKKwkJCSR7c3ViZGlyfW5vdC1pZ25vcmVkCisJCQkke3N1YmRpcn1pZ25vcmVkLWJ1dC1pbi1pbmRleAorCQkJJHtzdWJkaXJ9aWdub3JlZC1hbmQtdW50cmFja2VkJworCQkiCiBkb25lCiAKICMgSGF2aW5nIGVzdGFibGlzaGVkIHRoZSBhYm92ZSwgZnJvbSBub3cgb24gd2UgbW9zdGx5IHRlc3QgYWdhaW5zdApAQCAtMzkxLDcgKzQyNiw3IEBACiAjCiAjIHRlc3QgaGFuZGxpbmcgb2Ygc3ltbGlua3MKIAotdGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSBTWU1MSU5LUyAnc3ltbGluaycgJycgJwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSBTWU1MSU5LUyAnc3ltbGluaycgJzo6CWEvc3ltbGluaycgJwogCXRlc3RfY2hlY2tfaWdub3JlICJhL3N5bWxpbmsiIDEKICcKIApAQCAtNTc0LDM3ICs2MDksMzQgQEAKIAlnbG9iYWx0d28KIAliL2dsb2JhbHR3bwogCS4uL2IvZ2xvYmFsdHdvCisJYy9ub3QtaWdub3JlZAogRU9GCi1jYXQgPDwtXEVPRiA+ZXhwZWN0ZWQtZGVmYXVsdAotCS4uL29uZQotCW9uZQotCWIvb24KLQliL29uZQotCWIvb25lIG9uZQotCWIvb25lIHR3bwotCSJiL29uZVwidGhyZWUiCi0JYi90d28KLQliL3R3b29vCi0JLi4vZ2xvYmFsdHdvCi0JZ2xvYmFsdHdvCi0JYi9nbG9iYWx0d28KLQkuLi9iL2dsb2JhbHR3bwotRU9GCi1jYXQgPDwtRU9GID5leHBlY3RlZC12ZXJib3NlCisjIE4uQi4gd2UgZGVsaWJlcmF0ZWx5IGVuZCBTVERJTiB3aXRoIGEgbm9uLW1hdGNoaW5nIHBhdHRlcm4gaW4gb3JkZXIKKyMgdG8gdGVzdCB0aGF0IHRoZSBleGl0IGNvZGUgaW5kaWNhdGVzIHRoYXQgb25lIG9yIG1vcmUgb2YgdGhlCisjIHByb3ZpZGVkIHBhdGhzIGlzIGlnbm9yZWQgLSBpbiBvdGhlciB3b3JkcywgdGhhdCBpdCByZXByZXNlbnRzIGFuCisjIGFnZ3JlZ2F0aW9uIG9mIGFsbCB0aGUgcmVzdWx0cywgbm90IGp1c3QgdGhlIGZpbmFsIHJlc3VsdC4KKworY2F0IDw8LUVPRiA+ZXhwZWN0ZWQtYWxsCiAJLmdpdGlnbm9yZToxOm9uZQkuLi9vbmUKKwk6OgkuLi9ub3QtaWdub3JlZAogCS5naXRpZ25vcmU6MTpvbmUJb25lCisJOjoJbm90LWlnbm9yZWQKIAlhL2IvLmdpdGlnbm9yZTo4OiFvbioJYi9vbgogCWEvYi8uZ2l0aWdub3JlOjg6IW9uKgliL29uZQogCWEvYi8uZ2l0aWdub3JlOjg6IW9uKgliL29uZSBvbmUKIAlhL2IvLmdpdGlnbm9yZTo4OiFvbioJYi9vbmUgdHdvCiAJYS9iLy5naXRpZ25vcmU6ODohb24qCSJiL29uZVwidGhyZWUiCiAJYS9iLy5naXRpZ25vcmU6OTohdHdvCWIvdHdvCisJOjoJYi9ub3QtaWdub3JlZAogCWEvLmdpdGlnbm9yZToxOnR3byoJYi90d29vbwogCSRnbG9iYWxfZXhjbHVkZXM6MjohZ2xvYmFsdHdvCS4uL2dsb2JhbHR3bwogCSRnbG9iYWxfZXhjbHVkZXM6MjohZ2xvYmFsdHdvCWdsb2JhbHR3bwogCSRnbG9iYWxfZXhjbHVkZXM6MjohZ2xvYmFsdHdvCWIvZ2xvYmFsdHdvCiAJJGdsb2JhbF9leGNsdWRlczoyOiFnbG9iYWx0d28JLi4vYi9nbG9iYWx0d28KKwk6OgljL25vdC1pZ25vcmVkCiBFT0YKK2dyZXAgLXYgJ146OgknIGV4cGVjdGVkLWFsbCA+ZXhwZWN0ZWQtdmVyYm9zZQorc2VkIC1lICdzLy4qCS8vJyBleHBlY3RlZC12ZXJib3NlID5leHBlY3RlZC1kZWZhdWx0CiAKIHNlZCAtZSAncy9eIi8vJyAtZSAncy9cXC8vJyAtZSAncy8iJC8vJyBzdGRpbiB8IFwKIAl0ciAiXG4iICJcMCIgPnN0ZGluMApAQCAtNjI5LDYgKzY2MSwxNCBAQAogCSkKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zdGRpbiBmcm9tIHN1YmRpcmVjdG9yeSB3aXRoIC12IC1uJyAnCisJZXhwZWN0X2Zyb21fc3RkaW4gPGV4cGVjdGVkLWFsbCAmJgorCSgKKwkJY2QgYSAmJgorCQl0ZXN0X2NoZWNrX2lnbm9yZSAiLS1zdGRpbiAtdiAtbiIgPC4uL3N0ZGluCisJKQorJworCiBmb3Igb3B0cyBpbiAnLS1zdGRpbiAteicgJy16IC0tc3RkaW4nCiBkbwogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRvcHRzIGZyb20gc3ViZGlyZWN0b3J5IiAnCkBAIC02NDgsNSArNjg4LDMxIEBACiAJJwogZG9uZQogCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ3N0cmVhbWluZyBzdXBwb3J0IGZvciAtLXN0ZGluJyAnCisJbWtmaWZvIGluIG91dCAmJgorCShnaXQgY2hlY2staWdub3JlIC1uIC12IC0tc3RkaW4gPGluID5vdXQgJikgJiYKKworCSMgV2UgY2Fubm90IGp1c3QgImVjaG8gPmluIiBiZWNhdXNlIGNoZWNrLWlnbm9yZSB3b3VsZCBnZXQgRU9GCisJIyBhZnRlciBlY2hvIGV4aXRlZDsgaW5zdGVhZCB3ZSBvcGVuIHRoZSBkZXNjcmlwdG9yIGluIG91cgorCSMgc2hlbGwsIGFuZCB0aGVuIGVjaG8gdG8gdGhlIGZkLiBXZSBtYWtlIHN1cmUgdG8gY2xvc2UgaXQgYXQKKwkjIHRoZSBlbmQsIHNvIHRoYXQgdGhlIHN1YnByb2Nlc3MgZG9lcyBnZXQgRU9GIGFuZCBkaWVzCisJIyBwcm9wZXJseS4KKwkjCisJIyBTaW1pbGFybHksIHdlIG11c3Qga2VlcCAib3V0IiBvcGVuIHNvIHRoYXQgY2hlY2staWdub3JlIGRvZXMKKwkjIG5vdCBldmVyIGdldCBTSUdQSVBFIHRyeWluZyB0byB3cml0ZSB0byB1cy4gTm90IG9ubHkgd291bGQgdGhhdAorCSMgcHJvZHVjZSBpbmNvcnJlY3QgcmVzdWx0cywgYnV0IHRoZW4gdGhlcmUgd291bGQgYmUgbm8gd3JpdGVyIG9uIHRoZQorCSMgb3RoZXIgZW5kIG9mIHRoZSBwaXBlLCBhbmQgd2Ugd291bGQgcG90ZW50aWFsbHkgYmxvY2sgZm9yZXZlciB0cnlpbmcKKwkjIHRvIG9wZW4gaXQuCisJZXhlYyA5PmluICYmCisJZXhlYyA4PG91dCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZXhlYyA5PiYtIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZXhlYyA4PCYtIiAmJgorCWVjaG8gPiY5IG9uZSAmJgorCXJlYWQgcmVzcG9uc2UgPCY4ICYmCisJZWNobyAiJHJlc3BvbnNlIiB8IGdyZXAgIl5cLmdpdGlnbm9yZToxOm9uZQlvbmUiICYmCisJZWNobyA+JjkgdHdvICYmCisJcmVhZCByZXNwb25zZSA8JjggJiYKKwllY2hvICIkcmVzcG9uc2UiIHwgZ3JlcCAiXjo6CXR3byIKKycKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDA5LXByaW8tcXVldWUuc2ggYi90L3QwMDA5LXByaW8tcXVldWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTQwNDVjMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMDktcHJpby1xdWV1ZS5zaApAQCAtMCwwICsxLDUwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgdGVzdHMgZm9yIHByaW9yaXR5IHF1ZXVlIGltcGxlbWVudGF0aW9uJworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKKzEKKzIKKzMKKzQKKzUKKzUKKzYKKzcKKzgKKzkKKzEwCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIG9yZGVyaW5nJyAnCisJdGVzdC1wcmlvLXF1ZXVlIDIgNiAzIDEwIDkgNSA3IDQgNSA4IDEgZHVtcCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCisyCiszCis0CisxCis1Cis2CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21peGVkIHB1dCBhbmQgZ2V0JyAnCisJdGVzdC1wcmlvLXF1ZXVlIDYgMiA0IGdldCA1IDMgZ2V0IGdldCAxIGR1bXAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworMQorMgorTlVMTAorMQorMgorTlVMTAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RpY2UgZW1wdHkgcXVldWUnICcKKwl0ZXN0LXByaW8tcXVldWUgMSAyIGdldCBnZXQgZ2V0IDEgMiBnZXQgZ2V0IGdldCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMjAtY3JsZi5zaCBiL3QvdDAwMjAtY3JsZi5zaAppbmRleCAxYThmNDRjLi5lNTI2MTg0IDEwMDc1NQotLS0gYS90L3QwMDIwLWNybGYuc2gKKysrIGIvdC90MDAyMC1jcmxmLnNoCkBAIC04MSw2ICs4MSwxNCBAQAogCXRlc3QgJChnaXQgYWRkIGRvdWJsZXdhcm4gMj4mMSB8IGdyZXAgIkNSTEYgd2lsbCBiZSByZXBsYWNlZCBieSBMRiIgfCB3YyAtbCkgPSAxCiAnCiAKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FmZWNybGY6IGdpdCBkaWZmIGRlbW90ZXMgc2FmZWNybGY9dHJ1ZSB0byB3YXJuJyAnCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGlucHV0ICYmCisJZ2l0IGNvbmZpZyBjb3JlLnNhZmVjcmxmIHRydWUgJiYKKwlnaXQgZGlmZiBIRUFECisnCisKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIG9mZiBhdXRvY3JsZiwgc2FmZWNybGYsIHJlc2V0IEhFQUQnICcKIAlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgZmFsc2UgJiYKIAlnaXQgY29uZmlnIGNvcmUuc2FmZWNybGYgZmFsc2UgJiYKZGlmZiAtLWdpdCBhL3QvdDAwNDAtcGFyc2Utb3B0aW9ucy5zaCBiL3QvdDAwNDAtcGFyc2Utb3B0aW9ucy5zaAppbmRleCAyNDRhNDNjLi42NTYwNmRmIDEwMDc1NQotLS0gYS90L3QwMDQwLXBhcnNlLW9wdGlvbnMuc2gKKysrIGIvdC90MDA0MC1wYXJzZS1vcHRpb25zLnNoCkBAIC01MCw3ICs1MCw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgaGVscCcgJwogCXRlc3RfbXVzdF9mYWlsIHRlc3QtcGFyc2Utb3B0aW9ucyAtaCA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCi0JdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0LmVyciAmJgogCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CiAnCiAKQEAgLTc1LDcgKzc1LDcgQEAKIAlzaGlmdCAmJgogCXNlZCAicy9eJHdoYXQgLiovJHdoYXQgJGV4cGVjdC8iIDxleHBlY3QudGVtcGxhdGUgPmV4cGVjdCAmJgogCXRlc3QtcGFyc2Utb3B0aW9ucyAkKiA+b3V0cHV0IDI+b3V0cHV0LmVyciAmJgotCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5lcnIgJiYKIAl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiB9CiAKQEAgLTg2LDcgKzg2LDcgQEAKIAlzaGlmdCAmJgogCXNlZCAicy9eJHdoYXQgLiovJHdoYXQgJGV4cGVjdC8iIDxleHBlY3QudGVtcGxhdGUgPmV4cGVjdCAmJgogCXRlc3QtcGFyc2Utb3B0aW9ucyAkKiA+b3V0cHV0IDI+b3V0cHV0LmVyciAmJgotCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5lcnIgJiYKIAl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAogfQogCkBAIC05OSw3ICs5OSw3IEBACiAJZXNhYyAmJgogCWNhdCBleHBlY3QuZXJyID4+ZXhwZWN0ICYmCiAJdGVzdF9tdXN0X2ZhaWwgdGVzdC1wYXJzZS1vcHRpb25zICQqID5vdXRwdXQgMj5vdXRwdXQuZXJyICYmCi0JdGVzdCAhIC1zIG91dHB1dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQgJiYKIAl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0LmVycgogfQogCkBAIC0xMTIsNyArMTEyLDcgQEAKIAllc2FjICYmCiAJY2F0IGV4cGVjdC5lcnIgPj5leHBlY3QgJiYKIAl0ZXN0X211c3RfZmFpbCB0ZXN0LXBhcnNlLW9wdGlvbnMgJCogPm91dHB1dCAyPm91dHB1dC5lcnIgJiYKLQl0ZXN0ICEgLXMgb3V0cHV0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dCAmJgogCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0LmVycgogfQogCkBAIC0xNDksNyArMTQ5LDcgQEAKIAl0ZXN0LXBhcnNlLW9wdGlvbnMgLXMxMjMgLWIgLWkgMTcyOSAtYiAtdnYgLW4gLUYgbXkuZmlsZSBcCiAJPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgogCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQgJiYKLQl0ZXN0ICEgLXMgb3V0cHV0LmVycgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyCiAnCiAKIGNhdCA+IGV4cGVjdCA8PCBFT0YKQEAgLTE2OCw3ICsxNjgsNyBAQAogCXRlc3QtcGFyc2Utb3B0aW9ucyAtLWJvb2xlYW4gLS1pbnRlZ2VyIDE3MjkgLS1ib29sZWFuIC0tc3RyaW5nMj0zMjEgXAogCQktLXZlcmJvc2UgLS12ZXJib3NlIC0tbm8tZHJ5LXJ1biAtLWFiYnJldj0xMCAtLWZpbGUgZmkubGVcCiAJCS0tb2Jzb2xldGUgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgotCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5lcnIgJiYKIAl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiAnCiAKQEAgLTE5OSw3ICsxOTksNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJtaW5nbGVkIGFyZ3VtZW50cycgJwogCXRlc3QtcGFyc2Utb3B0aW9ucyBhMSAtLXN0cmluZyAxMjMgYjEgLS1ib29sZWFuIC1qIDEzIC0tIC0tYm9vbGVhbiBcCiAJCT4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKLQl0ZXN0ICEgLXMgb3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogJwogCkBAIC0yMTcsMTMgKzIxNywxMyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bmFtYmlndW91c2x5IGFiYnJldmlhdGVkIG9wdGlvbicgJwogCXRlc3QtcGFyc2Utb3B0aW9ucyAtLWludCAyIC0tYm9vbGVhbiAtLW5vLWJvID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKLQl0ZXN0ICEgLXMgb3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bmFtYmlndW91c2x5IGFiYnJldmlhdGVkIG9wdGlvbiB3aXRoICI9IicgJwogCXRlc3QtcGFyc2Utb3B0aW9ucyAtLWludD0yID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKLQl0ZXN0ICEgLXMgb3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogJwogCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uIGFtYmlndW91cyBvcHRpb24gKGFmdGVyIHR3byBvcHRpb25zIGl0IGFiYnJldmlhdGVzKScgJwogCXRlc3QtcGFyc2Utb3B0aW9ucyAtLXN0IDEyMyA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCi0JdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0LmVyciAmJgogCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKICcKIApAQCAtMjU2LDcgKzI1Niw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBwb3NzaWJsZSB0eXBvcycgJwogCXRlc3RfbXVzdF9mYWlsIHRlc3QtcGFyc2Utb3B0aW9ucyAtYm9vbGVhbiA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCi0JdGVzdCAhIC1zIG91dHB1dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQgJiYKIAl0ZXN0X2NtcCB0eXBvLmVyciBvdXRwdXQuZXJyCiAnCiAKQEAgLTI2Niw3ICsyNjYsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgcG9zc2libGUgdHlwb3MnICcKIAl0ZXN0X211c3RfZmFpbCB0ZXN0LXBhcnNlLW9wdGlvbnMgLWFtYmlndW91cyA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCi0JdGVzdCAhIC1zIG91dHB1dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQgJiYKIAl0ZXN0X2NtcCB0eXBvLmVyciBvdXRwdXQuZXJyCiAnCiAKQEAgLTI4NSw3ICsyODUsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdrZWVwIHNvbWUgb3B0aW9ucyBhcyBhcmd1bWVudHMnICcKIAl0ZXN0LXBhcnNlLW9wdGlvbnMgLS1xdXV4ID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKLSAgICAgICAgdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0LmVyciAmJgogICAgICAgICB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiAnCiAKQEAgLTMwNSw3ICszMDUsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0RBVEUoKSBhbmQgT1BUX1NFVF9QVFIoKSB3b3JrJyAnCiAJdGVzdC1wYXJzZS1vcHRpb25zIC10ICIxOTcwLTAxLTAxIDAwOjAwOjAxICswMDAwIiAtLWRlZmF1bHQtc3RyaW5nIFwKIAkJZm9vIC1xID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKLQl0ZXN0ICEgLXMgb3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogJwogCkBAIC0zMjQsNyArMzI0LDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0NBTExCQUNLKCkgYW5kIE9QVF9CSVQoKSB3b3JrJyAnCiAJdGVzdC1wYXJzZS1vcHRpb25zIC0tbGVuZ3RoPWZvdXIgLWIgLTQgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgotCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5lcnIgJiYKIAl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiAnCiAKQEAgLTM1MiwxMyArMzUyLDEzIEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CSVQoKSBhbmQgT1BUX1NFVF9JTlQoKSB3b3JrJyAnCiAJdGVzdC1wYXJzZS1vcHRpb25zIC0tc2V0MjMgLWJiYmJiIC0tbm8tb3I0ID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKLQl0ZXN0ICEgLXMgb3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfTkVHQklUKCkgYW5kIE9QVF9TRVRfSU5UKCkgd29yaycgJwogCXRlc3QtcGFyc2Utb3B0aW9ucyAtLXNldDIzIC1iYmJiYiAtLW5lZy1vcjQgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgotCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5lcnIgJiYKIAl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiAnCiAKQEAgLTM3NiwxOSArMzc2LDE5IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CSVQoKSB3b3JrcycgJwogCXRlc3QtcGFyc2Utb3B0aW9ucyAtYmIgLS1vcjQgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgotCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5lcnIgJiYKIAl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9ORUdCSVQoKSB3b3JrcycgJwogCXRlc3QtcGFyc2Utb3B0aW9ucyAtYmIgLS1uby1uZWctb3I0ID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKLQl0ZXN0ICEgLXMgb3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQ09VTlRVUCgpIHdpdGggUEFSU0VfT1BUX05PREFTSCB3b3JrcycgJwogCXRlc3QtcGFyc2Utb3B0aW9ucyArICsgKyArICsgKyA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCi0JdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0LmVyciAmJgogCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKICcKIApAQCAtNDA2LDcgKzQwNiw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9OVU1CRVJfQ0FMTEJBQ0soKSB3b3JrcycgJwogCXRlc3QtcGFyc2Utb3B0aW9ucyAtMTIzNDUgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgotCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5lcnIgJiYKIAl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiAnCiAKQEAgLTQyNCw3ICs0MjQsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICduZWdhdGlvbiBvZiBPUFRfTk9ORUcgZmxhZ3MgaXMgbm90IGFtYmlndW91cycgJwogCXRlc3QtcGFyc2Utb3B0aW9ucyAtLW5vLWFtYmlnID5vdXRwdXQgMj5vdXRwdXQuZXJyICYmCi0JdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0LmVyciAmJgogCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKICcKIApkaWZmIC0tZ2l0IGEvdC90MDA2MC1wYXRoLXV0aWxzLnNoIGIvdC90MDA2MC1wYXRoLXV0aWxzLnNoCmluZGV4IDA5YTQyYTQuLjNhNDhkZTIgMTAwNzU1Ci0tLSBhL3QvdDAwNjAtcGF0aC11dGlscy5zaAorKysgYi90L3QwMDYwLXBhdGgtdXRpbHMuc2gKQEAgLTgsOCArOCwxNSBAQAogLiAuL3Rlc3QtbGliLnNoCiAKIG5vcm1fcGF0aCgpIHsKKwlleHBlY3RlZD0kKHRlc3QtcGF0aC11dGlscyBtaW5nd19wYXRoICIkMiIpCiAJdGVzdF9leHBlY3Rfc3VjY2VzcyAkMyAibm9ybWFsaXplIHBhdGg6ICQxID0+ICQyIiBcCi0JInRlc3QgXCJcJCh0ZXN0LXBhdGgtdXRpbHMgbm9ybWFsaXplX3BhdGhfY29weSAnJDEnKVwiID0gJyQyJyIKKwkidGVzdCBcIlwkKHRlc3QtcGF0aC11dGlscyBub3JtYWxpemVfcGF0aF9jb3B5ICckMScpXCIgPSAnJGV4cGVjdGVkJyIKK30KKworcmVsYXRpdmVfcGF0aCgpIHsKKwlleHBlY3RlZD0kKHRlc3QtcGF0aC11dGlscyBtaW5nd19wYXRoICIkMyIpCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAkNCAicmVsYXRpdmUgcGF0aDogJDEgJDIgPT4gJDMiIFwKKwkidGVzdCBcIlwkKHRlc3QtcGF0aC11dGlscyByZWxhdGl2ZV9wYXRoICckMScgJyQyJylcIiA9ICckZXhwZWN0ZWQnIgogfQogCiAjIE9uIFdpbmRvd3MsIHdlIGFyZSB1c2luZyBNU1lTJ3MgYmFzaCwgd2hpY2ggbWFuZ2xlcyB0aGUgcGF0aHMuCkBAIC0zNCw4ICs0MSw4IEBACiAJIHRlc3QgXCJcJGFjdHVhbFwiID0gJyRleHBlY3RlZCciCiB9CiAKLSMgQWJzb2x1dGUgcGF0aCB0ZXN0cyBtdXN0IGJlIHNraXBwZWQgb24gV2luZG93cyBiZWNhdXNlIGR1ZSB0byBwYXRoIG1hbmdsaW5nCi0jIHRoZSB0ZXN0IHByb2dyYW0gbmV2ZXIgc2VlcyBhIFBPU0lYLXN0eWxlIGFic29sdXRlIHBhdGgKKyMgU29tZSBhYnNvbHV0ZSBwYXRoIHRlc3RzIHNob3VsZCBiZSBza2lwcGVkIG9uIFdpbmRvd3MgZHVlIHRvIHBhdGggbWFuZ2xpbmcKKyMgb24gUE9TSVgtc3R5bGUgYWJzb2x1dGUgcGF0aHMKIGNhc2UgJCh1bmFtZSAtcykgaW4KICpNSU5HVyopCiAJOzsKQEAgLTY4LDMwICs3NSwzMCBAQAogbm9ybV9wYXRoIGQxLy4uLi9kMiBkMS8uLi4vZDIKIG5vcm1fcGF0aCBkMS8uLi4vLi8uLi9kMiBkMS9kMgogCi1ub3JtX3BhdGggLyAvIFBPU0lYCitub3JtX3BhdGggLyAvCiBub3JtX3BhdGggLy8gLyBQT1NJWAogbm9ybV9wYXRoIC8vLyAvIFBPU0lYCi1ub3JtX3BhdGggLy4gLyBQT1NJWAorbm9ybV9wYXRoIC8uIC8KIG5vcm1fcGF0aCAvLi8gLyBQT1NJWAogbm9ybV9wYXRoIC8uLy4uICsrZmFpbGVkKysgUE9TSVgKLW5vcm1fcGF0aCAvLi4vLiArK2ZhaWxlZCsrIFBPU0lYCitub3JtX3BhdGggLy4uLy4gKytmYWlsZWQrKwogbm9ybV9wYXRoIC8uLy4uLy4vLyArK2ZhaWxlZCsrIFBPU0lYCiBub3JtX3BhdGggL2Rpci8uLiAvIFBPU0lYCiBub3JtX3BhdGggL2Rpci9zdWIvLi4vLi4gLyBQT1NJWAogbm9ybV9wYXRoIC9kaXIvc3ViLy4uLy4uLy4uICsrZmFpbGVkKysgUE9TSVgKLW5vcm1fcGF0aCAvZGlyIC9kaXIgUE9TSVgKLW5vcm1fcGF0aCAvZGlyLy8gL2Rpci8gUE9TSVgKLW5vcm1fcGF0aCAvLi9kaXIgL2RpciBQT1NJWAotbm9ybV9wYXRoIC9kaXIvLiAvZGlyLyBQT1NJWAotbm9ybV9wYXRoIC9kaXIvLy8uLyAvZGlyLyBQT1NJWAotbm9ybV9wYXRoIC9kaXIvL3N1Yi8uLiAvZGlyLyBQT1NJWAotbm9ybV9wYXRoIC9kaXIvc3ViLy4uLyAvZGlyLyBQT1NJWAorbm9ybV9wYXRoIC9kaXIgL2Rpcgorbm9ybV9wYXRoIC9kaXIvLyAvZGlyLworbm9ybV9wYXRoIC8uL2RpciAvZGlyCitub3JtX3BhdGggL2Rpci8uIC9kaXIvCitub3JtX3BhdGggL2Rpci8vLy4vIC9kaXIvCitub3JtX3BhdGggL2Rpci8vc3ViLy4uIC9kaXIvCitub3JtX3BhdGggL2Rpci9zdWIvLi4vIC9kaXIvCiBub3JtX3BhdGggLy9kaXIvc3ViLy4uLy4gL2Rpci8gUE9TSVgKLW5vcm1fcGF0aCAvZGlyL3MxLy4uL3MyLyAvZGlyL3MyLyBQT1NJWAotbm9ybV9wYXRoIC9kMS9zMS8vL3MyLy4uLy8uLi9zMy8gL2QxL3MzLyBQT1NJWAotbm9ybV9wYXRoIC9kMS9zMS8vLi4vczIvLi4vLi4vZDIgL2QyIFBPU0lYCi1ub3JtX3BhdGggL2QxLy4uLi9kMiAvZDEvLi4uL2QyIFBPU0lYCi1ub3JtX3BhdGggL2QxLy4uLi8uLy4uL2QyIC9kMS9kMiBQT1NJWAorbm9ybV9wYXRoIC9kaXIvczEvLi4vczIvIC9kaXIvczIvCitub3JtX3BhdGggL2QxL3MxLy8vczIvLi4vLy4uL3MzLyAvZDEvczMvCitub3JtX3BhdGggL2QxL3MxLy8uLi9zMi8uLi8uLi9kMiAvZDIKK25vcm1fcGF0aCAvZDEvLi4uL2QyIC9kMS8uLi4vZDIKK25vcm1fcGF0aCAvZDEvLi4uLy4vLi4vZDIgL2QxL2QyCiAKIGFuY2VzdG9yIC8gLyAtMQogYW5jZXN0b3IgL2ZvbyAvIDAKQEAgLTE4Myw0ICsxOTAsMzMgQEAKIAl0ZXN0ICIkc3ltIiA9ICIkKHRlc3QtcGF0aC11dGlscyByZWFsX3BhdGggIiRkaXIyL3N5bWwiKSIKICcKIAorcmVsYXRpdmVfcGF0aCAvYS9iL2MvCS9hL2IvCQljLworcmVsYXRpdmVfcGF0aCAvYS9iL2MvCS9hL2IJCWMvCityZWxhdGl2ZV9wYXRoIC9hLy9iLy9jLwkvL2EvYi8vCQljLwlQT1NJWAorcmVsYXRpdmVfcGF0aCAvYS9iCS9hL2IJCS4vCityZWxhdGl2ZV9wYXRoIC9hL2IvCS9hL2IJCS4vCityZWxhdGl2ZV9wYXRoIC9hCS9hL2IJCS4uLworcmVsYXRpdmVfcGF0aCAvCQkvYS9iLwkJLi4vLi4vCityZWxhdGl2ZV9wYXRoIC9hL2MJL2EvYi8JCS4uL2MKK3JlbGF0aXZlX3BhdGggL2EvYwkvYS9iCQkuLi9jCityZWxhdGl2ZV9wYXRoIC94L3kJL2EvYi8JCS4uLy4uL3gveQorcmVsYXRpdmVfcGF0aCAvYS9iCSI8ZW1wdHk+IgkvYS9iCityZWxhdGl2ZV9wYXRoIC9hL2IgCSI8bnVsbD4iCS9hL2IKK3JlbGF0aXZlX3BhdGggYS9iL2MvCWEvYi8JCWMvCityZWxhdGl2ZV9wYXRoIGEvYi9jLwlhL2IJCWMvCityZWxhdGl2ZV9wYXRoIGEvYi8vYwlhLy9iCQljCityZWxhdGl2ZV9wYXRoIGEvYi8JYS9iLwkJLi8KK3JlbGF0aXZlX3BhdGggYS9iLwlhL2IJCS4vCityZWxhdGl2ZV9wYXRoIGEJCWEvYgkJLi4vCityZWxhdGl2ZV9wYXRoIHgveQlhL2IJCS4uLy4uL3gveQorcmVsYXRpdmVfcGF0aCBhL2MJYS9iCQkuLi9jCityZWxhdGl2ZV9wYXRoIGEvYgkiPGVtcHR5PiIJYS9iCityZWxhdGl2ZV9wYXRoIGEvYiAJIjxudWxsPiIJYS9iCityZWxhdGl2ZV9wYXRoICI8ZW1wdHk+IgkvYS9iCQkuLworcmVsYXRpdmVfcGF0aCAiPGVtcHR5PiIJIjxlbXB0eT4iCS4vCityZWxhdGl2ZV9wYXRoICI8ZW1wdHk+IgkiPG51bGw+IgkuLworcmVsYXRpdmVfcGF0aCAiPG51bGw+IgkiPGVtcHR5PiIJLi8KK3JlbGF0aXZlX3BhdGggIjxudWxsPiIJIjxudWxsPiIJLi8KK3JlbGF0aXZlX3BhdGggIjxudWxsPiIJL2EvYgkJLi8KKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDcwLWZ1bmRhbWVudGFsLnNoIGIvdC90MDA3MC1mdW5kYW1lbnRhbC5zaAppbmRleCBkYTJjNTA0Li45ODZiMmE4IDEwMDc1NQotLS0gYS90L3QwMDcwLWZ1bmRhbWVudGFsLnNoCisrKyBiL3QvdDAwNzAtZnVuZGFtZW50YWwuc2gKQEAgLTE3LDcgKzE3LDcgQEAKIAlncmVwICJkb2Vzbm90ZXhpc3QvdGVzdCIgZXJyCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICdta3RlbXAgdG8gdW53cml0YWJsZSBkaXJlY3RvcnkgcHJpbnRzIGZpbGVuYW1lJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ21rdGVtcCB0byB1bndyaXRhYmxlIGRpcmVjdG9yeSBwcmludHMgZmlsZW5hbWUnICcKIAlta2RpciBjYW5ub3R3cml0ZSAmJgogCWNobW9kIC13IGNhbm5vdHdyaXRlICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJjaG1vZCArdyBjYW5ub3R3cml0ZSIgJiYKZGlmZiAtLWdpdCBhL3QvdDAxMDAtcHJldmlvdXMuc2ggYi90L3QwMTAwLXByZXZpb3VzLnNoCmluZGV4IDMxNWI5YjMuLmUwYTY5NDAgMTAwNzU1Ci0tLSBhL3QvdDAxMDAtcHJldmlvdXMuc2gKKysrIGIvdC90MDEwMC1wcmV2aW91cy5zaApAQCAtMjcsNiArMjcsNyBAQAogCXRlc3RfY29tbWl0IEIgJiYKIAlnaXQgY2hlY2tvdXQgQSAmJgogCXRlc3RfY29tbWl0IEMgJiYKKwl0ZXN0X2NvbW1pdCBEICYmCiAJZ2l0IGJyYW5jaCAtZiBtYXN0ZXIgQiAmJgogCWdpdCBicmFuY2ggLWYgb3RoZXIgJiYKIAlnaXQgY2hlY2tvdXQgb3RoZXIgJiYKQEAgLTM1LDE0ICszNiwyNCBAQAogCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgIk1lcmdlIGJyYW5jaCAnXCcnb3RoZXInXCcnIgogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBAey0xfSB3aGVuIHRoZXJlIGlzIG5vdCBlbm91Z2ggc3dpdGNoZXMgeWV0JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBAey0xfX4xJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgQiAmJgorCWdpdCBjaGVja291dCBvdGhlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2UgQHstMX1+MSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YWN0dWFsICYmCisJZ3JlcCAiTWVyZ2UgYnJhbmNoICdcJydvdGhlcidcJyciIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBAey0xMDB9IGJlZm9yZSBjaGVja2luZyBvdXQgdGhhdCBtYW55IGJyYW5jaGVzIHlldCcgJwogCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPW5vdyAmJgogCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKIAlnaXQgcmVzZXQgLS1oYXJkIEIgJiYKIAlnaXQgYnJhbmNoIC1mIG90aGVyIEMgJiYKIAlnaXQgY2hlY2tvdXQgb3RoZXIgJiYKIAlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCi0JdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEB7LTEyfQorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBAey0xMDB9CiAnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAwNC1yZWFkLXRyZWUtbS11LXdmLnNoIGIvdC90MTAwNC1yZWFkLXRyZWUtbS11LXdmLnNoCmluZGV4IGIzYWU3ZDUuLjNlNzJhZmYgMTAwNzU1Ci0tLSBhL3QvdDEwMDQtcmVhZC10cmVlLW0tdS13Zi5zaAorKysgYi90L3QxMDA0LXJlYWQtdHJlZS1tLXUtd2Yuc2gKQEAgLTE1OCw3ICsxNTgsNyBAQAogCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2Z1bm55IHN5bWxpbmsgaW4gd29yayB0cmVlJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmdW5ueSBzeW1saW5rIGluIHdvcmsgdHJlZScgJwogCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWdpdCBjaGVja291dCAtYiBzeW0tYiBzaWRlLWIgJiYKQEAgLTE3MCwxNSArMTcwLDE0IEBACiAJcm0gLWZyIGEgJiYKIAlnaXQgY2hlY2tvdXQgLWIgc3ltLWEgc2lkZS1hICYmCiAJbWtkaXIgLXAgYSAmJgotCWxuIC1zIC4uL2IgYS9iICYmCi0JZ2l0IGFkZCBhL2IgJiYKKwl0ZXN0X2xuX3NfYWRkIC4uL2IgYS9iICYmCiAJZ2l0IGNvbW1pdCAtbSAid2UgYWRkIGEvYiIgJiYKIAogCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBzeW0tYSBzeW0tYSBzeW0tYgogCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MsU0FOSVRZICdmdW5ueSBzeW1saW5rIGluIHdvcmsgdHJlZSwgdW4tdW5saW5rLWFibGUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU0FOSVRZICdmdW5ueSBzeW1saW5rIGluIHdvcmsgdHJlZSwgdW4tdW5saW5rLWFibGUnICcKIAogCXJtIC1mciBhIGIgJiYKIAlnaXQgcmVzZXQgLS1oYXJkICYmCmRpZmYgLS1naXQgYS90L3QxMDA2LWNhdC1maWxlLnNoIGIvdC90MTAwNi1jYXQtZmlsZS5zaAppbmRleCA5Y2M1YzZiLi5kNDk5ZDAyIDEwMDc1NQotLS0gYS90L3QxMDA2LWNhdC1maWxlLnNoCisrKyBiL3QvdDEwMDYtY2F0LWZpbGUuc2gKQEAgLTM2LDY2ICszNiw1NCBAQAogICAgICcKIAogICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlR5cGUgb2YgJHR5cGUgaXMgY29ycmVjdCIgJwotICAgICAgICB0ZXN0ICR0eXBlID0gIiQoZ2l0IGNhdC1maWxlIC10ICRzaGExKSIKKwllY2hvICR0eXBlID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgLXQgJHNoYTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICAgICAnCiAKICAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICJTaXplIG9mICR0eXBlIGlzIGNvcnJlY3QiICcKLSAgICAgICAgdGVzdCAkc2l6ZSA9ICIkKGdpdCBjYXQtZmlsZSAtcyAkc2hhMSkiCisJZWNobyAkc2l6ZSA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIC1zICRzaGExID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAgICAgJwogCiAgICAgdGVzdCAteiAiJGNvbnRlbnQiIHx8CiAgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiQ29udGVudCBvZiAkdHlwZSBpcyBjb3JyZWN0IiAnCi0JZXhwZWN0PSIkKG1heWJlX3JlbW92ZV90aW1lc3RhbXAgIiRjb250ZW50IiAkbm9fdHMpIgotCWFjdHVhbD0iJChtYXliZV9yZW1vdmVfdGltZXN0YW1wICIkKGdpdCBjYXQtZmlsZSAkdHlwZSAkc2hhMSkiICRub190cykiCi0KLSAgICAgICAgaWYgdGVzdCAieiRleHBlY3QiID0gInokYWN0dWFsIgotCXRoZW4KLQkJOiBoYXBweQotCWVsc2UKLQkJZWNobyAiT29wczogZXhwZWN0ZWQgJGV4cGVjdCIKLQkJZWNobyAiYnV0IGdvdCAkYWN0dWFsIgotCQlmYWxzZQotICAgICAgICBmaQorCW1heWJlX3JlbW92ZV90aW1lc3RhbXAgIiRjb250ZW50IiAkbm9fdHMgPmV4cGVjdCAmJgorCW1heWJlX3JlbW92ZV90aW1lc3RhbXAgIiQoZ2l0IGNhdC1maWxlICR0eXBlICRzaGExKSIgJG5vX3RzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAgICAgJwogCiAgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiUHJldHR5IGNvbnRlbnQgb2YgJHR5cGUgaXMgY29ycmVjdCIgJwotCWV4cGVjdD0iJChtYXliZV9yZW1vdmVfdGltZXN0YW1wICIkcHJldHR5X2NvbnRlbnQiICRub190cykiCi0JYWN0dWFsPSIkKG1heWJlX3JlbW92ZV90aW1lc3RhbXAgIiQoZ2l0IGNhdC1maWxlIC1wICRzaGExKSIgJG5vX3RzKSIKLSAgICAgICAgaWYgdGVzdCAieiRleHBlY3QiID0gInokYWN0dWFsIgotCXRoZW4KLQkJOiBoYXBweQotCWVsc2UKLQkJZWNobyAiT29wczogZXhwZWN0ZWQgJGV4cGVjdCIKLQkJZWNobyAiYnV0IGdvdCAkYWN0dWFsIgotCQlmYWxzZQotICAgICAgICBmaQorCW1heWJlX3JlbW92ZV90aW1lc3RhbXAgIiRwcmV0dHlfY29udGVudCIgJG5vX3RzID5leHBlY3QgJiYKKwltYXliZV9yZW1vdmVfdGltZXN0YW1wICIkKGdpdCBjYXQtZmlsZSAtcCAkc2hhMSkiICRub190cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogICAgICcKIAogICAgIHRlc3QgLXogIiRjb250ZW50IiB8fAogICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tYmF0Y2ggb3V0cHV0IG9mICR0eXBlIGlzIGNvcnJlY3QiICcKLQlleHBlY3Q9IiQobWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJGJhdGNoX291dHB1dCIgJG5vX3RzKSIKLQlhY3R1YWw9IiQobWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJChlY2hvICRzaGExIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gpIiAkbm9fdHMpIgotICAgICAgICBpZiB0ZXN0ICJ6JGV4cGVjdCIgPSAieiRhY3R1YWwiCi0JdGhlbgotCQk6IGhhcHB5Ci0JZWxzZQotCQllY2hvICJPb3BzOiBleHBlY3RlZCAkZXhwZWN0IgotCQllY2hvICJidXQgZ290ICRhY3R1YWwiCi0JCWZhbHNlCi0gICAgICAgIGZpCisJbWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJGJhdGNoX291dHB1dCIgJG5vX3RzID5leHBlY3QgJiYKKwltYXliZV9yZW1vdmVfdGltZXN0YW1wICIkKGVjaG8gJHNoYTEgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaCkiICRub190cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogICAgICcKIAogICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tYmF0Y2gtY2hlY2sgb3V0cHV0IG9mICR0eXBlIGlzIGNvcnJlY3QiICcKLQlleHBlY3Q9IiRzaGExICR0eXBlICRzaXplIgotCWFjdHVhbD0iJChlY2hvX3dpdGhvdXRfbmV3bGluZSAkc2hhMSB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrKSIKLSAgICAgICAgaWYgdGVzdCAieiRleHBlY3QiID0gInokYWN0dWFsIgotCXRoZW4KLQkJOiBoYXBweQotCWVsc2UKLQkJZWNobyAiT29wczogZXhwZWN0ZWQgJGV4cGVjdCIKLQkJZWNobyAiYnV0IGdvdCAkYWN0dWFsIgotCQlmYWxzZQotICAgICAgICBmaQorCWVjaG8gIiRzaGExICR0eXBlICRzaXplIiA+ZXhwZWN0ICYmCisJZWNob193aXRob3V0X25ld2xpbmUgJHNoYTEgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorICAgICcKKworICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgImN1c3RvbSAtLWJhdGNoLWNoZWNrIGZvcm1hdCIgJworCWVjaG8gIiR0eXBlICRzaGExIiA+ZXhwZWN0ICYmCisJZWNobyAkc2hhMSB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrPSIlKG9iamVjdHR5cGUpICUob2JqZWN0bmFtZSkiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisgICAgJworCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1iYXRjaC1jaGVjayB3aXRoICUocmVzdCknICcKKwllY2hvICIkdHlwZSB0aGlzIGlzIHNvbWUgZXh0cmEgY29udGVudCIgPmV4cGVjdCAmJgorCWVjaG8gIiRzaGExICAgIHRoaXMgaXMgc29tZSBleHRyYSBjb250ZW50IiB8CisJCWdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrPSIlKG9iamVjdHR5cGUpICUocmVzdCkiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAgICAgJwogfQogCmRpZmYgLS1naXQgYS90L3QxMzA3LWNvbmZpZy1ibG9iLnNoIGIvdC90MTMwNy1jb25maWctYmxvYi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZGMyNTdlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTMwNy1jb25maWctYmxvYi5zaApAQCAtMCwwICsxLDcwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc3VwcG9ydCBmb3IgcmVhZGluZyBjb25maWcgZnJvbSBhIGJsb2InCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGNvbmZpZyBibG9iJyAnCisJY2F0ID5jb25maWcgPDwtXEVPRiAmJgorCVtzb21lXQorCQl2YWx1ZSA9IDEKKwlFT0YKKwlnaXQgYWRkIGNvbmZpZyAmJgorCWdpdCBjb21taXQgLW0gZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3QgY29uZmlnIGJsb2IgY29udGVudHMnICcKKwllY2hvIHNvbWUudmFsdWU9MSA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWJsb2I9SEVBRDpjb25maWcgLS1saXN0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHZhbHVlIGZyb20gYmxvYicgJworCWVjaG8gdHJ1ZSA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWJsb2I9SEVBRDpjb25maWcgLS1ib29sIHNvbWUudmFsdWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZGluZyBub24tZXhpc3RpbmcgdmFsdWUgZnJvbSBibG9iIGlzIGFuIGVycm9yJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWJsb2I9SEVBRDpjb25maWcgbm9uLmV4aXN0aW5nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWRpbmcgZnJvbSBibG9iIGFuZCBmaWxlIGlzIGFuIGVycm9yJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWJsb2I9SEVBRDpjb25maWcgLS1zeXN0ZW0gLS1saXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWRpbmcgZnJvbSBtaXNzaW5nIHJlZiBpcyBhbiBlcnJvcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1ibG9iPUhFQUQ6ZG9lc25vdGV4aXN0IC0tbGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkaW5nIGZyb20gbm9uLWJsb2IgaXMgYW4gZXJyb3InICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tYmxvYj1IRUFEIC0tbGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR0aW5nIGEgdmFsdWUgaW4gYSBibG9iIGlzIGFuIGVycm9yJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWJsb2I9SEVBRDpjb25maWcgc29tZS52YWx1ZSBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRpbmcgYSB2YWx1ZSBpbiBhIGJsb2IgaXMgYW4gZXJyb3InICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tYmxvYj1IRUFEOmNvbmZpZyAtLXVuc2V0IHNvbWUudmFsdWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWRpdGluZyBhIGJsb2IgaXMgYW4gZXJyb3InICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tYmxvYj1IRUFEOmNvbmZpZyAtLWVkaXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFyc2UgZXJyb3JzIGluIGJsb2JzIGFyZSBwcm9wZXJseSBhdHRyaWJ1dGVkJyAnCisJY2F0ID5jb25maWcgPDwtXEVPRiAmJgorCVtzb21lXQorCQl2YWx1ZSA9ICIKKwlFT0YKKwlnaXQgYWRkIGNvbmZpZyAmJgorCWdpdCBjb21taXQgLW0gYnJva2VuICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tYmxvYj1IRUFEOmNvbmZpZyBzb21lLnZhbHVlIDI+ZXJyICYmCisKKwkjIGp1c3QgZ3JlcCBmb3Igb3VyIHRva2VuIGFzIHRoZSBleGFjdCBlcnJvciBtZXNzYWdlIGlzIGxpa2VseSB0bworCSMgY2hhbmdlIG9yIGJlIGludGVybmF0aW9uYWxpemVkCisJZ3JlcCAiSEVBRDpjb25maWciIGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE0MDMtc2hvdy1yZWYuc2ggYi90L3QxNDAzLXNob3ctcmVmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNlNTAwZWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDAzLXNob3ctcmVmLnNoCkBAIC0wLDAgKzEsMTY3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc2hvdy1yZWYnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgQSAmJgorCWdpdCB0YWcgLWYgLWEgLW0gImFubm90YXRlZCBBIiBBICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKwl0ZXN0X2NvbW1pdCBCICYmCisJZ2l0IHRhZyAtZiAtYSAtbSAiYW5ub3RhdGVkIEIiIEIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgQyAmJgorCWdpdCBicmFuY2ggQiBBXjAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdy1yZWYnICcKKwllY2hvICQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvQSkgcmVmcy90YWdzL0EgPmV4cGVjdCAmJgorCisJZ2l0IHNob3ctcmVmIEEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBzaG93LXJlZiB0YWdzL0EgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBzaG93LXJlZiByZWZzL3RhZ3MvQSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJPmV4cGVjdCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIEQgPmFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdy1yZWYgLXEnICcKKwk+ZXhwZWN0ICYmCisKKwlnaXQgc2hvdy1yZWYgLXEgQSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHNob3ctcmVmIC1xIHRhZ3MvQSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHNob3ctcmVmIC1xIHJlZnMvdGFncy9BID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLXEgRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93LXJlZiAtLXZlcmlmeScgJworCWVjaG8gJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9BKSByZWZzL3RhZ3MvQSA+ZXhwZWN0ICYmCisKKwlnaXQgc2hvdy1yZWYgLS12ZXJpZnkgcmVmcy90YWdzL0EgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCT5leHBlY3QgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtLXZlcmlmeSBBID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgdGFncy9BID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgRCA+YWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93LXJlZiAtLXZlcmlmeSAtcScgJworCT5leHBlY3QgJiYKKworCWdpdCBzaG93LXJlZiAtLXZlcmlmeSAtcSByZWZzL3RhZ3MvQSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC1xIEEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtLXZlcmlmeSAtcSB0YWdzL0EgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtLXZlcmlmeSAtcSBEID5hY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3ctcmVmIC1kJyAnCisJeworCQllY2hvICQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvQSkgcmVmcy90YWdzL0EgJiYKKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL0FeMCkgInJlZnMvdGFncy9BXnt9IgorCQllY2hvICQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvQykgcmVmcy90YWdzL0MKKwl9ID5leHBlY3QgJiYKKwlnaXQgc2hvdy1yZWYgLWQgQSBDID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgc2hvdy1yZWYgLWQgdGFncy9BIHRhZ3MvQyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHNob3ctcmVmIC1kIHJlZnMvdGFncy9BIHJlZnMvdGFncy9DID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvICQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlcikgcmVmcy9oZWFkcy9tYXN0ZXIgPmV4cGVjdCAmJgorCWdpdCBzaG93LXJlZiAtZCBtYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBzaG93LXJlZiAtZCBoZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBzaG93LXJlZiAtZCByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisJZ2l0IHNob3ctcmVmIC1kIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKwk+ZXhwZWN0ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLWQgLS12ZXJpZnkgbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLWQgLS12ZXJpZnkgaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdy1yZWYgLS1oZWFkcywgLS10YWdzLCAtLWhlYWQsIHBhdHRlcm4nICcKKwlmb3IgYnJhbmNoIGluIEIgbWFzdGVyIHNpZGUKKwlkbworCQllY2hvICQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzLyRicmFuY2gpIHJlZnMvaGVhZHMvJGJyYW5jaAorCWRvbmUgPmV4cGVjdC5oZWFkcyAmJgorCWdpdCBzaG93LXJlZiAtLWhlYWRzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuaGVhZHMgYWN0dWFsICYmCisKKwlmb3IgdGFnIGluIEEgQiBDCisJZG8KKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzLyR0YWcpIHJlZnMvdGFncy8kdGFnCisJZG9uZSA+ZXhwZWN0LnRhZ3MgJiYKKwlnaXQgc2hvdy1yZWYgLS10YWdzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QudGFncyBhY3R1YWwgJiYKKworCWNhdCBleHBlY3QuaGVhZHMgZXhwZWN0LnRhZ3MgPmV4cGVjdCAmJgorCWdpdCBzaG93LXJlZiAtLWhlYWRzIC0tdGFncyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJeworCQllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEKSBIRUFEICYmCisJCWNhdCBleHBlY3QuaGVhZHMgZXhwZWN0LnRhZ3MKKwl9ID5leHBlY3QgJiYKKwlnaXQgc2hvdy1yZWYgLS1oZWFkcyAtLXRhZ3MgLS1oZWFkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl7CisJCWVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUQpIEhFQUQgJiYKKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9CKSByZWZzL2hlYWRzL0IKKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL0IpIHJlZnMvdGFncy9CCisJfSA+ZXhwZWN0ICYmCisJZ2l0IHNob3ctcmVmIC0taGVhZCBCID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl7CisJCWVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUQpIEhFQUQgJiYKKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9CKSByZWZzL2hlYWRzL0IKKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL0IpIHJlZnMvdGFncy9CCisJCWVjaG8gJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9CXjApICJyZWZzL3RhZ3MvQl57fSIKKwl9ID5leHBlY3QgJiYKKwlnaXQgc2hvdy1yZWYgLS1oZWFkIC1kIEIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTA3LXJldi1wYXJzZS11cHN0cmVhbS5zaCBiL3QvdDE1MDctcmV2LXBhcnNlLXVwc3RyZWFtLnNoCmluZGV4IGIyN2E3MjAuLjJhMTllNzkgMTAwNzU1Ci0tLSBhL3QvdDE1MDctcmV2LXBhcnNlLXVwc3RyZWFtLnNoCisrKyBiL3QvdDE1MDctcmV2LXBhcnNlLXVwc3RyZWFtLnNoCkBAIC0xMjksOCArMTI5LDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoQHt1fSBlcnJvciBtZXNzYWdlIHdoZW4gbm8gdXBzdHJlYW0nICcKIAljYXQgPmV4cGVjdCA8PC1FT0YgJiYKLQllcnJvcjogTm8gdXBzdHJlYW0gY29uZmlndXJlZCBmb3IgYnJhbmNoICR7c3F9bm9uLXRyYWNraW5nJHtzcX0KLQlmYXRhbDogTmVlZGVkIGEgc2luZ2xlIHJldmlzaW9uCisJZmF0YWw6IE5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAke3NxfW5vbi10cmFja2luZyR7c3F9CiAJRU9GCiAJZXJyb3JfbWVzc2FnZSBub24tdHJhY2tpbmdAe3V9IDI+YWN0dWFsICYmCiAJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKQEAgLTEzOCw4ICsxMzcsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdAe3V9IGVycm9yIG1lc3NhZ2Ugd2hlbiBubyB1cHN0cmVhbScgJwogCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgotCWVycm9yOiBObyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJHtzcX1tYXN0ZXIke3NxfQotCWZhdGFsOiBOZWVkZWQgYSBzaW5nbGUgcmV2aXNpb24KKwlmYXRhbDogTm8gdXBzdHJlYW0gY29uZmlndXJlZCBmb3IgYnJhbmNoICR7c3F9bWFzdGVyJHtzcX0KIAlFT0YKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEB7dX0gMj5hY3R1YWwgJiYKIAl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbApAQCAtMTQ3LDggKzE0NSw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaEB7dX0gZXJyb3IgbWVzc2FnZSB3aXRoIG1pc3NwZWx0IGJyYW5jaCcgJwogCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgotCWVycm9yOiBObyBzdWNoIGJyYW5jaDogJHtzcX1uby1zdWNoLWJyYW5jaCR7c3F9Ci0JZmF0YWw6IE5lZWRlZCBhIHNpbmdsZSByZXZpc2lvbgorCWZhdGFsOiBObyBzdWNoIGJyYW5jaDogJHtzcX1uby1zdWNoLWJyYW5jaCR7c3F9CiAJRU9GCiAJZXJyb3JfbWVzc2FnZSBuby1zdWNoLWJyYW5jaEB7dX0gMj5hY3R1YWwgJiYKIAl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbApAQCAtMTU2LDggKzE1Myw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7dX0gZXJyb3IgbWVzc2FnZSB3aGVuIG5vdCBvbiBhIGJyYW5jaCcgJwogCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgotCWVycm9yOiBIRUFEIGRvZXMgbm90IHBvaW50IHRvIGEgYnJhbmNoCi0JZmF0YWw6IE5lZWRlZCBhIHNpbmdsZSByZXZpc2lvbgorCWZhdGFsOiBIRUFEIGRvZXMgbm90IHBvaW50IHRvIGEgYnJhbmNoCiAJRU9GCiAJZ2l0IGNoZWNrb3V0IEhFQUReMCAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQHt1fSAyPmFjdHVhbCAmJgpAQCAtMTY2LDggKzE2Miw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaEB7dX0gZXJyb3IgbWVzc2FnZSBpZiB1cHN0cmVhbSBicmFuY2ggbm90IGZldGNoZWQnICcKIAljYXQgPmV4cGVjdCA8PC1FT0YgJiYKLQllcnJvcjogVXBzdHJlYW0gYnJhbmNoICR7c3F9cmVmcy9oZWFkcy9zaWRlJHtzcX0gbm90IHN0b3JlZCBhcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2gKLQlmYXRhbDogTmVlZGVkIGEgc2luZ2xlIHJldmlzaW9uCisJZmF0YWw6IFVwc3RyZWFtIGJyYW5jaCAke3NxfXJlZnMvaGVhZHMvc2lkZSR7c3F9IG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoCiAJRU9GCiAJZXJyb3JfbWVzc2FnZSBiYWQtdXBzdHJlYW1Ae3V9IDI+YWN0dWFsICYmCiAJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKZGlmZiAtLWdpdCBhL3QvdDE1MDgtYXQtY29tYmluYXRpb25zLnNoIGIvdC90MTUwOC1hdC1jb21iaW5hdGlvbnMuc2gKaW5kZXggZDVkNjI0NC4uNGRiMTYxMyAxMDA3NTUKLS0tIGEvdC90MTUwOC1hdC1jb21iaW5hdGlvbnMuc2gKKysrIGIvdC90MTUwOC1hdC1jb21iaW5hdGlvbnMuc2gKQEAgLTQsMTcgKzQsMjQgQEAKIC4gLi90ZXN0LWxpYi5zaAogCiBjaGVjaygpIHsKLXRlc3RfZXhwZWN0XyR7Mzotc3VjY2Vzc30gIiQxID0gJDIiICIKLQllY2hvICckMicgPmV4cGVjdCAmJgotCWdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgJyQxJyA+YWN0dWFsICYmCi0JdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAotIgorCXRlc3RfZXhwZWN0XyR7NDotc3VjY2Vzc30gIiQxID0gJDMiICIKKwkJZWNobyAnJDMnID5leHBlY3QgJiYKKwkJaWYgdGVzdCAnJDInID0gJ2NvbW1pdCcKKwkJdGhlbgorCQkJZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyAnJDEnID5hY3R1YWwKKwkJZWxzZQorCQkJZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSAnJDEnID5hY3R1YWwKKwkJZmkgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSIKIH0KKwogbm9uc2Vuc2UoKSB7Ci10ZXN0X2V4cGVjdF8kezI6LXN1Y2Nlc3N9ICIkMSBpcyBub25zZW5zaWNhbCIgIgotCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLTEgJyQxJwotIgorCXRlc3RfZXhwZWN0XyR7Mjotc3VjY2Vzc30gIiQxIGlzIG5vbnNlbnNpY2FsIiAiCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJyQxJworCSIKIH0KKwogZmFpbCgpIHsKIAkiJEAiIGZhaWx1cmUKIH0KQEAgLTMxLDIxICszOCw0MiBAQAogCWdpdCBjaGVja291dCAtYiBuZXctYnJhbmNoICYmCiAJdGVzdF9jb21taXQgbmV3LW9uZSAmJgogCXRlc3RfY29tbWl0IG5ldy10d28gJiYKLQlnaXQgY29uZmlnIGJyYW5jaC5vbGQtYnJhbmNoLnJlbW90ZSAuICYmCi0JZ2l0IGNvbmZpZyBicmFuY2gub2xkLWJyYW5jaC5tZXJnZSByZWZzL2hlYWRzL21hc3RlciAmJgotCWdpdCBjb25maWcgYnJhbmNoLm5ldy1icmFuY2gucmVtb3RlIC4gJiYKLQlnaXQgY29uZmlnIGJyYW5jaC5uZXctYnJhbmNoLm1lcmdlIHJlZnMvaGVhZHMvdXBzdHJlYW0tYnJhbmNoCisJZ2l0IGJyYW5jaCAtdSBtYXN0ZXIgb2xkLWJyYW5jaCAmJgorCWdpdCBicmFuY2ggLXUgdXBzdHJlYW0tYnJhbmNoIG5ldy1icmFuY2gKICcKIAotY2hlY2sgSEVBRCBuZXctdHdvCi1jaGVjayAiQHsxfSIgbmV3LW9uZQotY2hlY2sgIkB7LTF9IiBvbGQtdHdvCi1jaGVjayAiQHstMX1AezF9IiBvbGQtb25lCi1jaGVjayAiQHt1fSIgdXBzdHJlYW0tdHdvCi1jaGVjayAiQHt1fUB7MX0iIHVwc3RyZWFtLW9uZQotY2hlY2sgIkB7LTF9QHt1fSIgbWFzdGVyLXR3bwotY2hlY2sgIkB7LTF9QHt1fUB7MX0iIG1hc3Rlci1vbmUKK2NoZWNrIEhFQUQgcmVmIHJlZnMvaGVhZHMvbmV3LWJyYW5jaAorY2hlY2sgIkB7MX0iIGNvbW1pdCBuZXctb25lCitjaGVjayAiSEVBREB7MX0iIGNvbW1pdCBuZXctb25lCitjaGVjayAiQHtub3d9IiBjb21taXQgbmV3LXR3bworY2hlY2sgIkhFQURAe25vd30iIGNvbW1pdCBuZXctdHdvCitjaGVjayAiQHstMX0iIHJlZiByZWZzL2hlYWRzL29sZC1icmFuY2gKK2NoZWNrICJAey0xfUB7MH0iIGNvbW1pdCBvbGQtdHdvCitjaGVjayAiQHstMX1AezF9IiBjb21taXQgb2xkLW9uZQorY2hlY2sgIkB7dX0iIHJlZiByZWZzL2hlYWRzL3Vwc3RyZWFtLWJyYW5jaAorY2hlY2sgIkhFQURAe3V9IiByZWYgcmVmcy9oZWFkcy91cHN0cmVhbS1icmFuY2gKK2NoZWNrICJAe3V9QHsxfSIgY29tbWl0IHVwc3RyZWFtLW9uZQorY2hlY2sgIkB7LTF9QHt1fSIgcmVmIHJlZnMvaGVhZHMvbWFzdGVyCitjaGVjayAiQHstMX1Ae3V9QHsxfSIgY29tbWl0IG1hc3Rlci1vbmUKK2NoZWNrICJAIiBjb21taXQgbmV3LXR3bworY2hlY2sgIkBAe3V9IiByZWYgcmVmcy9oZWFkcy91cHN0cmVhbS1icmFuY2gKIG5vbnNlbnNlICJAe3V9QHstMX0iCitub25zZW5zZSAiQHswfUB7MH0iCiBub25zZW5zZSAiQHsxfUB7dX0iCitub25zZW5zZSAiSEVBREB7LTF9Igorbm9uc2Vuc2UgIkB7LTF9QHstMX0iCisKKyMgQHtOfSB2ZXJzdXMgSEVBREB7Tn0KKworY2hlY2sgIkhFQURAezN9IiBjb21taXQgb2xkLXR3bworbm9uc2Vuc2UgIkB7M30iCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCB0byBvbGQtYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IG9sZC1icmFuY2gKKycKKworY2hlY2sgSEVBRCByZWYgcmVmcy9oZWFkcy9vbGQtYnJhbmNoCitjaGVjayAiSEVBREB7MX0iIGNvbW1pdCBuZXctdHdvCitjaGVjayAiQHsxfSIgY29tbWl0IG9sZC1vbmUKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTEyLXJldi1wYXJzZS1kaXNhbWJpZ3VhdGlvbi5zaCBiL3QvdDE1MTItcmV2LXBhcnNlLWRpc2FtYmlndWF0aW9uLnNoCmluZGV4IDZiM2Q3OTcuLjRhMTU1YzggMTAwNzU1Ci0tLSBhL3QvdDE1MTItcmV2LXBhcnNlLWRpc2FtYmlndWF0aW9uLnNoCisrKyBiL3QvdDE1MTItcmV2LXBhcnNlLWRpc2FtYmlndWF0aW9uLnNoCkBAIC03Nyw2ICs3Nyw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0ZSB0cmVlJyAnCiAJY29tbWl0PSQoZWNobyAiZDd4bSIgfCBnaXQgY29tbWl0LXRyZWUgMDAwMDAwMDAwKSAmJgorCSMgdGhpcyBjb21taXQgaXMgZmZmZmYyZSBhbmQgbm90IGFtYmlndW91cyB3aXRoIHRoZSAwMDAwMCogb2JqZWN0cwogCXRlc3QgJChnaXQgcmV2LXBhcnNlICRjb21taXRee3RyZWV9KSA9ICQoZ2l0IHJldi1wYXJzZSAwMDAwMDAwMDAwY2RjKQogJwogCkBAIC05OSwxMCArMTAwLDE0IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0ZSBjb21taXQnICcKIAljb21taXQ9JChlY2hvICJob2F4aiIgfCBnaXQgY29tbWl0LXRyZWUgMDAwMDAwMDAwMGNkYyAtcCAwMDAwMDAwMDApICYmCisJIyB0aGlzIGNvbW1pdCBpcyBmZmZmZmZkOCBhbmQgbm90IGFtYmlndW91cyB3aXRoIHRoZSAwMDAwMCogb2JqZWN0cwogCXRlc3QgJChnaXQgcmV2LXBhcnNlICRjb21taXReKSA9ICQoZ2l0IHJldi1wYXJzZSAwMDAwMDAwMDAwZTRmKQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgbmFtZTEuLm5hbWUyIHRha2VzIG9ubHkgY29tbWl0LWlzaGVzIG9uIGJvdGggZW5kcycgJworCSMgVGhlc2UgYXJlIHVuZGVyc3BlY2lmaWVkIGZyb20gdGhlIHByZWZpeC1sZW5ndGggcG9pbnQgb2YgdmlldworCSMgdG8gZGlzYW1iaWd1YXRlIHRoZSBjb21taXQgd2l0aCBvdGhlciBvYmplY3RzLCBidXQgdGhlcmUgaXMgb25seQorCSMgb25lIGNvbW1pdCB0aGF0IGhhcyAwMDAwMCogcHJlZml4IGF0IHRoaXMgcG9pbnQuCiAJZ2l0IGxvZyAwMDAwMDAwMDAuLjAwMDAwMDAwMCAmJgogCWdpdCBsb2cgLi4wMDAwMDAwMDAgJiYKIAlnaXQgbG9nIDAwMDAwMDAwMC4uICYmCkBAIC0xMTIsMTYgKzExNywxOSBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgbmFtZTEuLm5hbWUyIHRha2VzIG9ubHkgY29tbWl0LWlzaGVzIG9uIGJvdGggZW5kcycgJworCSMgTGlrZXdpc2UuCiAJZ2l0IHJldi1wYXJzZSAwMDAwMDAwMDAuLjAwMDAwMDAwMCAmJgogCWdpdCByZXYtcGFyc2UgLi4wMDAwMDAwMDAgJiYKIAlnaXQgcmV2LXBhcnNlIDAwMDAwMDAwMC4uCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgdGFrZXMgb25seSBjb21taXQtaXNoJyAnCisJIyBMaWtld2lzZS4KIAlnaXQgbG9nIDAwMDAwMDAwMAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmVzZXQgdGFrZXMgb25seSBjb21taXQtaXNoJyAnCisJIyBMaWtld2lzZS4KIAlnaXQgcmVzZXQgMDAwMDAwMDAwCiAnCiAKQEAgLTEzMSwyNiArMTM5LDMwIEBACiAnCiAKIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ3R3byBzZW1pLWFtYmlndW91cyBjb21taXQtaXNoJyAnCisJIyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGEgdGFnIDAwMDAwMDAwMDBmOGYgdGhhdCBwb2ludHMKKwkjIGF0IGEgY29tbWl0IDAwMDAwMDAwMDBlNGYsIGFuZCBhIHRyZWUgYW5kIGEgYmxvYiB0aGF0CisJIyBzaGFyZSAwMDAwMDAwMDAwIHByZWZpeCB3aXRoIHRoZXNlIHRhZyBhbmQgY29tbWl0LgorCSMKIAkjIE9uY2UgdGhlIHBhcnNlciBiZWNvbWVzIHVsdHJhLXNtYXJ0LCBpdCBjb3VsZCBub3RpY2UgdGhhdAotCSMgMTEwMjgyIGJlZm9yZSBee2NvbW1pdH0gbmFtZSBtYW55IGRpZmZlcmVudCBvYmplY3RzLCBidXQKKwkjIDAwMDAwMDAwMDAgYmVmb3JlIF57Y29tbWl0fSBuYW1lIG1hbnkgZGlmZmVyZW50IG9iamVjdHMsIGJ1dAogCSMgdGhhdCBvbmx5IHR3byAoSEVBRCBhbmQgdjEuMC4wIHRhZykgY2FuIGJlIHBlZWxlZCB0byBjb21taXQsCiAJIyBhbmQgdGhhdCBwZWVsaW5nIHRoZW0gZG93biB0byBjb21taXQgeWllbGQgdGhlIHNhbWUgY29tbWl0CiAJIyB3aXRob3V0IGFtYmlndWl0eS4KLQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDExMDI4Ml57Y29tbWl0fSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgMDAwMDAwMDAwMF57Y29tbWl0fSAmJgogCiAJIyBsaWtld2lzZQotCWdpdCBsb2cgMDAwMDAwMDAwLi4wMDAwMDAwMDAgJiYKLQlnaXQgbG9nIC4uMDAwMDAwMDAwICYmCi0JZ2l0IGxvZyAwMDAwMDAwMDAuLiAmJgotCWdpdCBsb2cgMDAwMDAwMDAwLi4uMDAwMDAwMDAwICYmCi0JZ2l0IGxvZyAuLi4wMDAwMDAwMDAgJiYKLQlnaXQgbG9nIDAwMDAwMDAwMC4uLgorCWdpdCBsb2cgMDAwMDAwMDAwMC4uMDAwMDAwMDAwMCAmJgorCWdpdCBsb2cgLi4wMDAwMDAwMDAwICYmCisJZ2l0IGxvZyAwMDAwMDAwMDAwLi4gJiYKKwlnaXQgbG9nIDAwMDAwMDAwMDAuLi4wMDAwMDAwMDAwICYmCisJZ2l0IGxvZyAuLi4wMDAwMDAwMDAwICYmCisJZ2l0IGxvZyAwMDAwMDAwMDAwLi4uCiAnCiAKIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ3RocmVlIHNlbWktYW1iaWd1b3VzIHRyZWUtaXNoJyAnCiAJIyBMaWtld2lzZSBmb3IgdHJlZS1pc2guICBIRUFELCB2MS4wLjAgYW5kIEhFQURee3RyZWV9IHNoYXJlCiAJIyB0aGUgcHJlZml4IGJ1dCBwZWVsaW5nIHRoZW0gdG8gdHJlZSB5aWVsZHMgdGhlIHNhbWUgdGhpbmcKLQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDAwMDAwMDAwMF57dHJlZX0KKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDAwMDAwMDAwMDBee3RyZWV9CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnNlIGRlc2NyaWJlIG5hbWUnICcKQEAgLTI0MSw3ICsyNTMsNyBAQAogCSMgTm93IHRoZXJlIGFyZSBtYW55IGNvbW1pdHMgdGhhdCBiZWdpbiB3aXRoIHRoZQogCSMgY29tbW9uIHByZWZpeCwgbm9uZSBvZiB0aGVzZSBzaG91bGQgcGljayBvbmUgYXQKIAkjIHJhbmRvbS4gIFRoZXkgYWxsIHNob3VsZCByZXN1bHQgaW4gYW1iaWd1aXR5IGVycm9ycy4KLQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDExMDI4Ml57Y29tbWl0fSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgMDAwMDAwMDBee2NvbW1pdH0gJiYKIAogCSMgbGlrZXdpc2UKIAl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIDAwMDAwMDAwMC4uMDAwMDAwMDAwICYmCkBAIC0yNjEsNCArMjczLDIyIEBACiAJdGVzdCAiJChzZWQgLWUgInMvXlwoLi4uLi4uLi4uXCkuKi9cMS8iIGFjdHVhbCB8IHNvcnQgLXUpIiA9IDAwMDAwMDAwMAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWJpZ3VvdXMgNDAtaGV4IHJlZicgJworCVRSRUU9JChnaXQgbWt0cmVlIDwvZGV2L251bGwpICYmCisJUkVGPWBnaXQgcmV2LXBhcnNlIEhFQURgICYmCisJVkFMPSQoZ2l0IGNvbW1pdC10cmVlICRUUkVFIDwvZGV2L251bGwpICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy8kUkVGICRWQUwgJiYKKwl0ZXN0IGBnaXQgcmV2LXBhcnNlICRSRUYgMj5lcnJgID0gJFJFRiAmJgorCWdyZXAgInJlZm5hbWUuKiR7UkVGfS4qYW1iaWd1b3VzIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1iaWd1b3VzIHNob3J0IHNoYTEgcmVmJyAnCisJVFJFRT0kKGdpdCBta3RyZWUgPC9kZXYvbnVsbCkgJiYKKwlSRUY9YGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEYCAmJgorCVZBTD0kKGdpdCBjb21taXQtdHJlZSAkVFJFRSA8L2Rldi9udWxsKSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvJFJFRiAkVkFMICYmCisJdGVzdCBgZ2l0IHJldi1wYXJzZSAkUkVGIDI+ZXJyYCA9ICRWQUwgJiYKKwlncmVwICJyZWZuYW1lLioke1JFRn0uKmFtYmlndW91cyIgZXJyCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTUxMy1yZXYtcGFyc2UtcHJlZml4LnNoIGIvdC90MTUxMy1yZXYtcGFyc2UtcHJlZml4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3ZWMzYWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTEzLXJldi1wYXJzZS1wcmVmaXguc2gKQEAgLTAsMCArMSw5NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3RzIGZvciByZXYtcGFyc2UgLS1wcmVmaXgnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIC1wIHN1YjEvc3ViMiAmJgorCWVjaG8gdG9wID50b3AgJiYKKwllY2hvIGZpbGUxID5zdWIxL2ZpbGUxICYmCisJZWNobyBmaWxlMiA+c3ViMS9zdWIyL2ZpbGUyICYmCisJZ2l0IGFkZCB0b3Agc3ViMS9maWxlMSBzdWIxL3N1YjIvZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIGNvbW1pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBwcmVmaXggLS0gZmlsZScgJworCWdpdCByZXYtcGFyc2UgLS1wcmVmaXggIiIgLS0gdG9wIHN1YjEvZmlsZTEgPmFjdHVhbCAmJgorCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCS0tCisJdG9wCisJc3ViMS9maWxlMQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZCBwcmVmaXggLS0gZmlsZScgJworCWdpdCByZXYtcGFyc2UgLS1wcmVmaXggc3ViMS8gLS0gZmlsZTEgc3ViMi9maWxlMiA+YWN0dWFsICYmCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJLS0KKwlzdWIxL2ZpbGUxCisJc3ViMS9zdWIyL2ZpbGUyCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkIHByZWZpeCAtLSAuLi9maWxlJyAnCisJZ2l0IHJldi1wYXJzZSAtLXByZWZpeCBzdWIxLyAtLSAuLi90b3Agc3ViMi9maWxlMiA+YWN0dWFsICYmCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJLS0KKwlzdWIxLy4uL3RvcAorCXN1YjEvc3ViMi9maWxlMgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBwcmVmaXggSEVBRDouL3BhdGgnICcKKwlnaXQgcmV2LXBhcnNlIC0tcHJlZml4ICIiIEhFQUQ6Li90b3AgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRDp0b3AgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkIHByZWZpeCBIRUFEOi4vcGF0aCcgJworCWdpdCByZXYtcGFyc2UgLS1wcmVmaXggc3ViMS8gSEVBRDouL2ZpbGUxID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQ6c3ViMS9maWxlMSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWQgcHJlZml4IEhFQUQ6Li4vcGF0aCcgJworCWdpdCByZXYtcGFyc2UgLS1wcmVmaXggc3ViMS8gSEVBRDouLi90b3AgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRDp0b3AgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZWZpeCBpZ25vcmVkIHdpdGggSEVBRDp0b3AnICcKKwlnaXQgcmV2LXBhcnNlIC0tcHJlZml4IHN1YjEvIEhFQUQ6dG9wID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQ6dG9wID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhbWJpZ3VhdGUgcGF0aCB3aXRoIHZhbGlkIHByZWZpeCcgJworCWdpdCByZXYtcGFyc2UgLS1wcmVmaXggc3ViMS8gZmlsZTEgPmFjdHVhbCAmJgorCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCXN1YjEvZmlsZTEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBhbmQgcmVmcyB3aXRoIHByZWZpeCcgJworCWdpdCByZXYtcGFyc2UgLS1wcmVmaXggc3ViMS8gbWFzdGVyIGZpbGUxID5hY3R1YWwgJiYKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgorCSQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpCisJc3ViMS9maWxlMQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0d28tbGV2ZWxzIGRlZXAnICcKKwlnaXQgcmV2LXBhcnNlIC0tcHJlZml4IHN1YjEvc3ViMi8gLS0gZmlsZTIgPmFjdHVhbCAmJgorCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCS0tCisJc3ViMS9zdWIyL2ZpbGUyCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAwMS1jaGVja291dC1jYWNoZS1jbGFzaC5zaCBiL3QvdDIwMDEtY2hlY2tvdXQtY2FjaGUtY2xhc2guc2gKaW5kZXggOThhYTczZS4uMWZjOGU2MyAxMDA3NTUKLS0tIGEvdC90MjAwMS1jaGVja291dC1jYWNoZS1jbGFzaC5zaAorKysgYi90L3QyMDAxLWNoZWNrb3V0LWNhY2hlLWNsYXNoLnNoCkBAIC01OSwxMCArNTksOSBAQAogICAgICdnaXQgcmVhZC10cmVlIC1tICR0cmVlMSAmJiBnaXQgY2hlY2tvdXQtaW5kZXggLWYgLWEnCiB0ZXN0X2RlYnVnICdzaG93X2ZpbGVzICR0cmVlMScKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCi0gICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgYSBzeW1saW5rLicgXAotICAgICdsbiAtcyBwYXRoMCBwYXRoMSAmJgotICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgxJwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2FkZCBhIHN5bWxpbmsnIFwKKyAgICAndGVzdF9sbl9zX2FkZCBwYXRoMCBwYXRoMScKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICd3cml0aW5nIHRyZWUgb3V0IHdpdGggZ2l0IHdyaXRlLXRyZWUnIFwKICAgICAndHJlZTM9JChnaXQgd3JpdGUtdHJlZSknCmRpZmYgLS1naXQgYS90L3QyMDA0LWNoZWNrb3V0LWNhY2hlLXRlbXAuc2ggYi90L3QyMDA0LWNoZWNrb3V0LWNhY2hlLXRlbXAuc2gKaW5kZXggMGY0YjI4OS4uZjE3MWE1NSAxMDA3NTUKLS0tIGEvdC90MjAwNC1jaGVja291dC1jYWNoZS10ZW1wLnNoCisrKyBiL3QvdDIwMDQtY2hlY2tvdXQtY2FjaGUtdGVtcC5zaApAQCAtMTk0LDExICsxOTQsMTAgQEAKICB0ZXN0ICQoY2F0IC4uLyRzMSkgPSB0cmVlMWFzdWJkaXIvcGF0aDUpCiApJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIFwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogJ2NoZWNrb3V0IC0tdGVtcCBzeW1saW5rJyAnCiBybSAtZiBwYXRoKiAubWVyZ2VfKiBvdXQgLmdpdC9pbmRleCAmJgotbG4gLXMgYiBhICYmCi1naXQgdXBkYXRlLWluZGV4IC0tYWRkIGEgJiYKK3Rlc3RfbG5fc19hZGQgYiBhICYmCiB0ND0kKGdpdCB3cml0ZS10cmVlKSAmJgogcm0gLWYgLmdpdC9pbmRleCAmJgogZ2l0IHJlYWQtdHJlZSAkdDQgJiYKZGlmZiAtLWdpdCBhL3QvdDIwMDctY2hlY2tvdXQtc3ltbGluay5zaCBiL3QvdDIwMDctY2hlY2tvdXQtc3ltbGluay5zaAppbmRleCBlNmY1OWYxLi5mYzlhYWQ1IDEwMDc1NQotLS0gYS90L3QyMDA3LWNoZWNrb3V0LXN5bWxpbmsuc2gKKysrIGIvdC90MjAwNy1jaGVja291dC1zeW1saW5rLnNoCkBAIC02LDcgKzYsNyBAQAogCiAuIC4vdGVzdC1saWIuc2gKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBzZXR1cCAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKIAogCW1rZGlyIGZyb3R6ICYmCiAJZWNobyBoZWxsbyA+ZnJvdHovZmlsZnJlICYmCkBAIC0yNSwyNSArMjUsMjUgQEAKIAogCWdpdCBybSAtLWNhY2hlZCBmcm90ei9maWxmcmUgJiYKIAltdiBmcm90eiB4eXp6eSAmJgotCWxuIC1zIHh5enp5IGZyb3R6ICYmCi0JZ2l0IGFkZCB4eXp6eS9maWxmcmUgZnJvdHogJiYKKwl0ZXN0X2xuX3NfYWRkIHh5enp5IGZyb3R6ICYmCisJZ2l0IGFkZCB4eXp6eS9maWxmcmUgJiYKIAl0ZXN0X3RpY2sgJiYKIAlnaXQgY29tbWl0IC1tICJzaWRlIG1vdmVzIGZyb3R6LyB0byB4eXp6eS8gYW5kIGFkZHMgZnJvdHotPnh5enp5LyIKIAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzd2l0Y2ggZnJvbSBzeW1saW5rIHRvIGRpcicgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIGZyb20gc3ltbGluayB0byBkaXInICcKIAogCWdpdCBjaGVja291dCBtYXN0ZXIKIAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdSZW1vdmUgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzICYgc3dpdGNoIHRvIG1hc3RlcicgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVtb3ZlIHRlbXBvcmFyeSBkaXJlY3RvcmllcyAmIHN3aXRjaCB0byBtYXN0ZXInICcKIAlybSAtZnIgZnJvdHogeHl6enkgbml0Zm9sICYmCiAJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlcgogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzd2l0Y2ggZnJvbSBkaXIgdG8gc3ltbGluaycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIGZyb20gZGlyIHRvIHN5bWxpbmsnICcKIAogCWdpdCBjaGVja291dCBzaWRlCiAKZGlmZiAtLWdpdCBhL3QvdDIwMTItY2hlY2tvdXQtbGFzdC5zaCBiL3QvdDIwMTItY2hlY2tvdXQtbGFzdC5zaAppbmRleCBiNDRkZTlkLi5lN2JhOGM1IDEwMDc1NQotLS0gYS90L3QyMDEyLWNoZWNrb3V0LWxhc3Quc2gKKysrIGIvdC90MjAxMi1jaGVja291dC1sYXN0LnNoCkBAIC0xMTYsNCArMTE2LDM4IEBACiAJdGVzdCAieiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgPSAieiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXJeKSIKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnImNoZWNrb3V0IC0iIHdvcmtzIGFmdGVyIGEgcmViYXNlIEEnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG90aGVyICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLSAmJgorCXRlc3QgInokKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0gInpyZWZzL2hlYWRzL21hc3RlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImNoZWNrb3V0IC0iIHdvcmtzIGFmdGVyIGEgcmViYXNlIEEgQicgJworCWdpdCBicmFuY2ggbW9vZGxlIG1hc3Rlcn4xICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCBvdGhlciAmJgorCWdpdCByZWJhc2UgbWFzdGVyIG1vb2RsZSAmJgorCWdpdCBjaGVja291dCAtICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSAienJlZnMvaGVhZHMvbWFzdGVyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciY2hlY2tvdXQgLSIgd29ya3MgYWZ0ZXIgYSByZWJhc2UgLWkgQScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgb3RoZXIgJiYKKwlnaXQgcmViYXNlIC1pIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSAienJlZnMvaGVhZHMvbWFzdGVyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciY2hlY2tvdXQgLSIgd29ya3MgYWZ0ZXIgYSByZWJhc2UgLWkgQSBCJyAnCisJZ2l0IGJyYW5jaCBmb29kbGUgbWFzdGVyfjEgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG90aGVyICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIgZm9vZGxlICYmCisJZ2l0IGNoZWNrb3V0IC0gJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9ICJ6cmVmcy9oZWFkcy9tYXN0ZXIiCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAyMS1jaGVja291dC1vdmVyd3JpdGUuc2ggYi90L3QyMDIxLWNoZWNrb3V0LW92ZXJ3cml0ZS5zaAppbmRleCA1ZGE2M2U5Li5jMmFkYTdkIDEwMDc1NQotLS0gYS90L3QyMDIxLWNoZWNrb3V0LW92ZXJ3cml0ZS5zaAorKysgYi90L3QyMDIxLWNoZWNrb3V0LW92ZXJ3cml0ZS5zaApAQCAtMjksMjEgKzI5LDI1IEBACiAJdGVzdCAtZiBhL2IKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnY3JlYXRlIGEgY29tbWl0IHdoZXJlIGRpciBhL2IgY2hhbmdlZCB0byBzeW1saW5rJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYSBjb21taXQgd2hlcmUgZGlyIGEvYiBjaGFuZ2VkIHRvIHN5bWxpbmsnICcKIAogCXJtIC1yZiBhL2IgJiYJIyBjbGVhbnVwIGlmIHByZXZpb3VzIHRlc3QgZmFpbGVkCiAJZ2l0IGNoZWNrb3V0IC1mIC1iIHN5bWxpbmsgc3RhcnQgJiYKIAlybSAtcmYgYS9iICYmCi0JbG4gLXMgZm9vIGEvYiAmJgogCWdpdCBhZGQgLUEgJiYKKwl0ZXN0X2xuX3NfYWRkIGZvbyBhL2IgJiYKIAlnaXQgY29tbWl0IC1tICJkaXIgdG8gc3ltbGluayIKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnY2hlY2tvdXQgY29tbWl0IHdpdGggZGlyIG11c3Qgbm90IHJlbW92ZSB1bnRyYWNrZWQgYS9iJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBjb21taXQgd2l0aCBkaXIgbXVzdCBub3QgcmVtb3ZlIHVudHJhY2tlZCBhL2InICcKIAogCWdpdCBybSAtLWNhY2hlZCBhL2IgJiYKIAlnaXQgY29tbWl0IC1tICJ1bi10cmFjayB0aGUgc3ltbGluayIgJiYKLQl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgc3RhcnQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgc3RhcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAndGhlIHN5bWxpbmsgcmVtYWluZWQnICcKKwogCXRlc3QgLWggYS9iCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDIwMjQtY2hlY2tvdXQtZHdpbS5zaCBiL3QvdDIwMjQtY2hlY2tvdXQtZHdpbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZWU1NWU0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjAyNC1jaGVja291dC1kd2ltLnNoCkBAIC0wLDAgKzEsMTY3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2tvdXQgPGJyYW5jaD4KKworRW5zdXJlcyB0aGF0IGNoZWNrb3V0IG9uIGFuIHVuYm9ybiBicmFuY2ggZG9lcyB3aGF0IHRoZSB1c2VyIGV4cGVjdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIElzIHRoZSBjdXJyZW50IGJyYW5jaCAicmVmcy9oZWFkcy8kMSI/Cit0ZXN0X2JyYW5jaCAoKSB7CisJcHJpbnRmICIlc1xuIiAicmVmcy9oZWFkcy8kMSIgPmV4cGVjdC5IRUFEICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwuSEVBRCAmJgorCXRlc3RfY21wIGV4cGVjdC5IRUFEIGFjdHVhbC5IRUFECit9CisKKyMgSXMgYnJhbmNoICJyZWZzL2hlYWRzLyQxIiBzZXQgdG8gcHVsbCBmcm9tICIkMi8kMyI/Cit0ZXN0X2JyYW5jaF91cHN0cmVhbSAoKSB7CisJcHJpbnRmICIlc1xuIiAiJDIiICJyZWZzL2hlYWRzLyQzIiA+ZXhwZWN0LnVwc3RyZWFtICYmCisJeworCQlnaXQgY29uZmlnICJicmFuY2guJDEucmVtb3RlIiAmJgorCQlnaXQgY29uZmlnICJicmFuY2guJDEubWVyZ2UiCisJfSA+YWN0dWFsLnVwc3RyZWFtICYmCisJdGVzdF9jbXAgZXhwZWN0LnVwc3RyZWFtIGFjdHVhbC51cHN0cmVhbQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IG15X21hc3RlciAmJgorCWdpdCBpbml0IHJlcG9fYSAmJgorCSgKKwkJY2QgcmVwb19hICYmCisJCXRlc3RfY29tbWl0IGFfbWFzdGVyICYmCisJCWdpdCBjaGVja291dCAtYiBmb28gJiYKKwkJdGVzdF9jb21taXQgYV9mb28gJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGJhciAmJgorCQl0ZXN0X2NvbW1pdCBhX2JhcgorCSkgJiYKKwlnaXQgaW5pdCByZXBvX2IgJiYKKwkoCisJCWNkIHJlcG9fYiAmJgorCQl0ZXN0X2NvbW1pdCBiX21hc3RlciAmJgorCQlnaXQgY2hlY2tvdXQgLWIgZm9vICYmCisJCXRlc3RfY29tbWl0IGJfZm9vICYmCisJCWdpdCBjaGVja291dCAtYiBiYXogJiYKKwkJdGVzdF9jb21taXQgYl9iYXoKKwkpICYmCisJZ2l0IHJlbW90ZSBhZGQgcmVwb19hIHJlcG9fYSAmJgorCWdpdCByZW1vdGUgYWRkIHJlcG9fYiByZXBvX2IgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5yZXBvX2IuZmV0Y2ggXAorCQkiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3RoZXJfYi8qIiAmJgorCWdpdCBmZXRjaCAtLWFsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBvZiBub24tZXhpc3RpbmcgYnJhbmNoIGZhaWxzJyAnCisJZ2l0IGNoZWNrb3V0IC1CIG1hc3RlciAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIHh5enp5ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgeHl6enkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMveHl6enkgJiYKKwl0ZXN0X2JyYW5jaCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgb2YgYnJhbmNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyBmYWlscyAjMScgJworCWdpdCBjaGVja291dCAtQiBtYXN0ZXIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBmb28gJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBmb28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvZm9vICYmCisJdGVzdF9icmFuY2ggbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IG9mIGJyYW5jaCBmcm9tIGEgc2luZ2xlIHJlbW90ZSBzdWNjZWVkcyAjMScgJworCWdpdCBjaGVja291dCAtQiBtYXN0ZXIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBiYXIgJiYKKworCWdpdCBjaGVja291dCBiYXIgJiYKKwl0ZXN0X2JyYW5jaCBiYXIgJiYKKwl0ZXN0X2NtcF9yZXYgcmVtb3Rlcy9yZXBvX2EvYmFyIEhFQUQgJiYKKwl0ZXN0X2JyYW5jaF91cHN0cmVhbSBiYXIgcmVwb19hIGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBvZiBicmFuY2ggZnJvbSBhIHNpbmdsZSByZW1vdGUgc3VjY2VlZHMgIzInICcKKwlnaXQgY2hlY2tvdXQgLUIgbWFzdGVyICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgYmF6ICYmCisKKwlnaXQgY2hlY2tvdXQgYmF6ICYmCisJdGVzdF9icmFuY2ggYmF6ICYmCisJdGVzdF9jbXBfcmV2IHJlbW90ZXMvb3RoZXJfYi9iYXogSEVBRCAmJgorCXRlc3RfYnJhbmNoX3Vwc3RyZWFtIGJheiByZXBvX2IgYmF6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tZ3Vlc3Mgc3VwcHJlc3NlcyBicmFuY2ggYXV0by12aXZpZmljYXRpb24nICcKKwlnaXQgY2hlY2tvdXQgLUIgbWFzdGVyICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgYmFyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLS1uby1ndWVzcyBiYXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvYmFyICYmCisJdGVzdF9icmFuY2ggbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG1vcmUgcmVtb3RlcyB3aXRoIHVuY29udmVudGlvbmFsIHJlZnNwZWNzJyAnCisJZ2l0IGNoZWNrb3V0IC1CIG1hc3RlciAmJgorCWdpdCBpbml0IHJlcG9fYyAmJgorCSgKKwkJY2QgcmVwb19jICYmCisJCXRlc3RfY29tbWl0IGNfbWFzdGVyICYmCisJCWdpdCBjaGVja291dCAtYiBiYXIgJiYKKwkJdGVzdF9jb21taXQgY19iYXIKKwkJZ2l0IGNoZWNrb3V0IC1iIHNwYW0gJiYKKwkJdGVzdF9jb21taXQgY19zcGFtCisJKSAmJgorCWdpdCBpbml0IHJlcG9fZCAmJgorCSgKKwkJY2QgcmVwb19kICYmCisJCXRlc3RfY29tbWl0IGRfbWFzdGVyICYmCisJCWdpdCBjaGVja291dCAtYiBiYXogJiYKKwkJdGVzdF9jb21taXQgZl9iYXoKKwkJZ2l0IGNoZWNrb3V0IC1iIGVnZ3MgJiYKKwkJdGVzdF9jb21taXQgY19lZ2dzCisJKSAmJgorCWdpdCByZW1vdGUgYWRkIHJlcG9fYyByZXBvX2MgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5yZXBvX2MuZmV0Y2ggXAorCQkiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvZXh0cmFfZGlyL3JlcG9fYy9leHRyYV9kaXIvKiIgJiYKKwlnaXQgcmVtb3RlIGFkZCByZXBvX2QgcmVwb19kICYmCisJZ2l0IGNvbmZpZyByZW1vdGUucmVwb19kLmZldGNoIFwKKwkJIityZWZzL2hlYWRzLyo6cmVmcy9yZXBvX2QvKiIgJiYKKwlnaXQgZmV0Y2ggLS1hbGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgb2YgYnJhbmNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyBmYWlscyAjMicgJworCWdpdCBjaGVja291dCAtQiBtYXN0ZXIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBiYXIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBiYXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvYmFyICYmCisJdGVzdF9icmFuY2ggbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IG9mIGJyYW5jaCBmcm9tIG11bHRpcGxlIHJlbW90ZXMgZmFpbHMgIzMnICcKKwlnaXQgY2hlY2tvdXQgLUIgbWFzdGVyICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgYmF6ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgYmF6ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL2JheiAmJgorCXRlc3RfYnJhbmNoIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBvZiBicmFuY2ggZnJvbSBhIHNpbmdsZSByZW1vdGUgc3VjY2VlZHMgIzMnICcKKwlnaXQgY2hlY2tvdXQgLUIgbWFzdGVyICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgc3BhbSAmJgorCisJZ2l0IGNoZWNrb3V0IHNwYW0gJiYKKwl0ZXN0X2JyYW5jaCBzcGFtICYmCisJdGVzdF9jbXBfcmV2IHJlZnMvcmVtb3Rlcy9leHRyYV9kaXIvcmVwb19jL2V4dHJhX2Rpci9zcGFtIEhFQUQgJiYKKwl0ZXN0X2JyYW5jaF91cHN0cmVhbSBzcGFtIHJlcG9fYyBzcGFtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IG9mIGJyYW5jaCBmcm9tIGEgc2luZ2xlIHJlbW90ZSBzdWNjZWVkcyAjNCcgJworCWdpdCBjaGVja291dCAtQiBtYXN0ZXIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBlZ2dzICYmCisKKwlnaXQgY2hlY2tvdXQgZWdncyAmJgorCXRlc3RfYnJhbmNoIGVnZ3MgJiYKKwl0ZXN0X2NtcF9yZXYgcmVmcy9yZXBvX2QvZWdncyBIRUFEICYmCisJdGVzdF9icmFuY2hfdXBzdHJlYW0gZWdncyByZXBvX2QgZWdncworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIyMDAtYWRkLXVwZGF0ZS5zaCBiL3QvdDIyMDAtYWRkLXVwZGF0ZS5zaAppbmRleCBiMmJkNDE5Li45YmYyYmRmIDEwMDc1NQotLS0gYS90L3QyMjAwLWFkZC11cGRhdGUuc2gKKysrIGIvdC90MjIwMC1hZGQtdXBkYXRlLnNoCkBAIC05NiwxMSArOTYsMTAgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3JlcGxhY2UgYSBmaWxlIHdpdGggYSBzeW1saW5rJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBsYWNlIGEgZmlsZSB3aXRoIGEgc3ltbGluaycgJwogCiAJcm0gZm9vICYmCi0JbG4gLXMgdG9wIGZvbyAmJgotCWdpdCBhZGQgLXUgLS0gZm9vCisJdGVzdF9sbl9zX2FkZCB0b3AgZm9vCiAKICcKIApkaWZmIC0tZ2l0IGEvdC90MjIwMi1hZGQtYWRkcmVtb3ZlLnNoIGIvdC90MjIwMi1hZGQtYWRkcmVtb3ZlLnNoCmluZGV4IDZhODE1MTAuLmZjOGI1OWUgMTAwNzU1Ci0tLSBhL3QvdDIyMDItYWRkLWFkZHJlbW92ZS5zaAorKysgYi90L3QyMjAyLWFkZC1hZGRyZW1vdmUuc2gKQEAgLTQxLDQgKzQxLDE0IEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdKdXN0ICJnaXQgYWRkIiBpcyBhIG5vLW9wJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gPndpbGwtcmVtb3ZlICYmCisJPndpbGwtbm90LWJlLWFkZGVkICYmCisJZ2l0IGFkZCAmJgorCWdpdCBkaWZmLWluZGV4IC0tbmFtZS1zdGF0dXMgLS1jYWNoZWQgSEVBRCA+YWN0dWFsICYmCisJPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDAxLWxzLWZpbGVzLW90aGVycy1leGNsdWRlLnNoIGIvdC90MzAwMS1scy1maWxlcy1vdGhlcnMtZXhjbHVkZS5zaAppbmRleCA0ZTM3MzVmLi5mMDQyMWMwIDEwMDc1NQotLS0gYS90L3QzMDAxLWxzLWZpbGVzLW90aGVycy1leGNsdWRlLnNoCisrKyBiL3QvdDMwMDEtbHMtZmlsZXMtb3RoZXJzLWV4Y2x1ZGUuc2gKQEAgLTE3NSw2ICsxNzUsMjQgQEAKIAlncmVwICJeYS4xIiBvdXRwdXQKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhjbHVkZWQgZGlyZWN0b3J5IG92ZXJyaWRlcyBjb250ZW50IHBhdHRlcm5zJyAnCisKKwlnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS1leGNsdWRlPSJvbmUiIC0tZXhjbHVkZT0iIW9uZS9hLjEiID5vdXRwdXQgJiYKKwlpZiBncmVwICJeb25lL2EuMSIgb3V0cHV0CisJdGhlbgorCQlmYWxzZQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25lZ2F0ZWQgZGlyZWN0b3J5IGRvZXNuJ1wnJ3QgYWZmZWN0IGNvbnRlbnQgcGF0dGVybnMnICcKKworCWdpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGU9IiFvbmUiIC0tZXhjbHVkZT0ib25lL2EuMSIgPm91dHB1dCAmJgorCWlmIGdyZXAgIl5vbmUvYS4xIiBvdXRwdXQKKwl0aGVuCisJCWZhbHNlCisJZmkKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyZWN0b3J5IGlnbm9yZSAoc2V0dXApJyAnCiAJbWtkaXIgLXAgdG9wL2wxL2wyICYmCiAJKApkaWZmIC0tZ2l0IGEvdC90MzAxMC1scy1maWxlcy1raWxsZWQtbW9kaWZpZWQuc2ggYi90L3QzMDEwLWxzLWZpbGVzLWtpbGxlZC1tb2RpZmllZC5zaAppbmRleCA5NTY3MWMyLi5mNjExZDc5IDEwMDc1NQotLS0gYS90L3QzMDEwLWxzLWZpbGVzLWtpbGxlZC1tb2RpZmllZC5zaAorKysgYi90L3QzMDEwLWxzLWZpbGVzLWtpbGxlZC1tb2RpZmllZC5zaApAQCAtMTEsNiArMTEsOCBAQAogICAgIHBhdGgxICAgICAgIC0gYSBzeW1saW5rCiAgICAgcGF0aDIvZmlsZTIgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKICAgICBwYXRoMy9maWxlMyAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHN1Ym1vZDEvCS0gYSBzdWJtb2R1bGUKKyAgICBzdWJtb2QyLwktIGFub3RoZXIgc3VibW9kdWxlCiAKIGFuZCB0aGUgZm9sbG93aW5nIG9uIHRoZSBmaWxlc3lzdGVtOgogCkBAIC0yMSw5ICsyMywxMSBAQAogICAgIHBhdGg0CS0gYSBmaWxlCiAgICAgcGF0aDUJLSBhIHN5bWxpbmsKICAgICBwYXRoNi9maWxlNiAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHN1Ym1vZDEvCS0gYSBzdWJtb2R1bGUgKG1vZGlmaWVkIGZyb20gdGhlIGNhY2hlKQorICAgIHN1Ym1vZDIvCS0gYSBzdWJtb2R1bGUgKG1hdGNoZXMgdGhlIGNhY2hlKQogCi1naXQgbHMtZmlsZXMgLWsgc2hvdWxkIHJlcG9ydCB0aGF0IGV4aXN0aW5nIGZpbGVzeXN0ZW0KLW9iamVjdHMgZXhjZXB0IHBhdGg0LCBwYXRoNSBhbmQgcGF0aDYvZmlsZTYgdG8gYmUga2lsbGVkLgorZ2l0IGxzLWZpbGVzIC1rIHNob3VsZCByZXBvcnQgdGhhdCBleGlzdGluZyBmaWxlc3lzdGVtIG9iamVjdHMKK3BhdGgwLyosIHBhdGgxLyosIHBhdGgyIGFuZCBwYXRoMyB0byBiZSBraWxsZWQuCiAKIEFsc28gZm9yIG1vZGlmaWNhdGlvbiB0ZXN0LCB0aGUgY2FjaGUgYW5kIHdvcmtpbmcgdHJlZSBoYXZlOgogCkBAIC0zMyw3NSArMzcsODIgQEAKICAgICBwYXRoMTAJLSBhIG5vbi1lbXB0eSBmaWxlLCBjYWNoZSBkaXJ0aWVkLgogCiBXZSBzaG91bGQgcmVwb3J0IHBhdGgwLCBwYXRoMSwgcGF0aDIvZmlsZTIsIHBhdGgzL2ZpbGUzLCBwYXRoNyBhbmQgcGF0aDgKLW1vZGlmaWVkIHdpdGhvdXQgcmVwb3J0aW5nIHBhdGg5IGFuZCBwYXRoMTAuCittb2RpZmllZCB3aXRob3V0IHJlcG9ydGluZyBwYXRoOSBhbmQgcGF0aDEwLiAgc3VibW9kMSBpcyBhbHNvIG1vZGlmaWVkLgogJwogLiAuL3Rlc3QtbGliLnNoCiAKLWRhdGUgPnBhdGgwCi1pZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCi10aGVuCi0JbG4gLXMgeHl6enkgcGF0aDEKLWVsc2UKLQlkYXRlID4gcGF0aDEKLWZpCi1ta2RpciBwYXRoMiBwYXRoMwotZGF0ZSA+cGF0aDIvZmlsZTIKLWRhdGUgPnBhdGgzL2ZpbGUzCi06ID5wYXRoNwotZGF0ZSA+cGF0aDgKLTogPnBhdGg5Ci1kYXRlID5wYXRoMTAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHRvIGFkZCB2YXJpb3VzIHBhdGhzLicgXAotICAgICJnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tIHBhdGgwIHBhdGgxIHBhdGg/L2ZpbGU/IHBhdGg3IHBhdGg4IHBhdGg5IHBhdGgxMCIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgdG8gYWRkIHZhcmlvdXMgcGF0aHMuJyAnCisJZGF0ZSA+cGF0aDAgJiYKKwl0ZXN0X2xuX3NfYWRkIHh5enp5IHBhdGgxICYmCisJbWtkaXIgcGF0aDIgcGF0aDMgJiYKKwlkYXRlID5wYXRoMi9maWxlMiAmJgorCWRhdGUgPnBhdGgzL2ZpbGUzICYmCisJOiA+cGF0aDcgJiYKKwlkYXRlID5wYXRoOCAmJgorCTogPnBhdGg5ICYmCisJZGF0ZSA+cGF0aDEwICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLSBwYXRoMCBwYXRoPy9maWxlPyBwYXRoNyBwYXRoOCBwYXRoOSBwYXRoMTAgJiYKKwlmb3IgaSBpbiAxIDIKKwlkbworCQlnaXQgaW5pdCBzdWJtb2QkaSAmJgorCQkoCisJCQljZCBzdWJtb2QkaSAmJiBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImVtcHR5ICRpIgorCQkpIHx8IGJyZWFrCisJZG9uZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgc3VibW9kWzEyXQorCSgKKwkJY2Qgc3VibW9kMSAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImVtcHR5IDEgKHVwZGF0ZWQpIgorCSkgJiYKKwlybSAtZnIgcGF0aD8JIyBsZWF2ZSBwYXRoMTAgYWxvbmUKKycKIAotcm0gLWZyIHBhdGg/IDsjIGxlYXZlIHBhdGgxMCBhbG9uZQotZGF0ZSA+cGF0aDIKLWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKLXRoZW4KLQlsbiAtcyBmcm90eiBwYXRoMwotCWxuIC1zIG5pdGZvbCBwYXRoNQotZWxzZQotCWRhdGUgPiBwYXRoMwotCWRhdGUgPiBwYXRoNQotZmkKLW1rZGlyIHBhdGgwIHBhdGgxIHBhdGg2Ci1kYXRlID5wYXRoMC9maWxlMAotZGF0ZSA+cGF0aDEvZmlsZTEKLWRhdGUgPnBhdGg2L2ZpbGU2Ci1kYXRlID5wYXRoNwotOiA+cGF0aDgKLTogPnBhdGg5Ci10b3VjaCBwYXRoMTAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAtayB0byBzaG93IGtpbGxlZCBmaWxlcy4nICcKKwlkYXRlID5wYXRoMiAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKKwl0aGVuCisJCWxuIC1zIGZyb3R6IHBhdGgzICYmCisJCWxuIC1zIG5pdGZvbCBwYXRoNQorCWVsc2UKKwkJZGF0ZSA+cGF0aDMgJiYKKwkJZGF0ZSA+cGF0aDUKKwlmaSAmJgorCW1rZGlyIHBhdGgwIHBhdGgxIHBhdGg2ICYmCisJZGF0ZSA+cGF0aDAvZmlsZTAgJiYKKwlkYXRlID5wYXRoMS9maWxlMSAmJgorCWRhdGUgPnBhdGg2L2ZpbGU2ICYmCisJZGF0ZSA+cGF0aDcgJiYKKwk6ID5wYXRoOCAmJgorCTogPnBhdGg5ICYmCisJdG91Y2ggcGF0aDEwICYmCisJZ2l0IGxzLWZpbGVzIC1rID4ub3V0cHV0CisnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICdnaXQgbHMtZmlsZXMgLWsgdG8gc2hvdyBraWxsZWQgZmlsZXMuJyBcCi0gICAgJ2dpdCBscy1maWxlcyAtayA+Lm91dHB1dCcKLWNhdCA+LmV4cGVjdGVkIDw8RU9GCi1wYXRoMC9maWxlMAotcGF0aDEvZmlsZTEKLXBhdGgyCi1wYXRoMwotRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGF0ZSBnaXQgbHMtZmlsZXMgLWsgb3V0cHV0LicgJworCWNhdCA+LmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlwYXRoMC9maWxlMAorCXBhdGgxL2ZpbGUxCisJcGF0aDIKKwlwYXRoMworCUVPRgorCXRlc3RfY21wIC5leHBlY3RlZCAub3V0cHV0CisnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICd2YWxpZGF0ZSBnaXQgbHMtZmlsZXMgLWsgb3V0cHV0LicgXAotICAgICd0ZXN0X2NtcCAuZXhwZWN0ZWQgLm91dHB1dCcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAtbSB0byBzaG93IG1vZGlmaWVkIGZpbGVzLicgJworCWdpdCBscy1maWxlcyAtbSA+Lm91dHB1dAorJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAnZ2l0IGxzLWZpbGVzIC1tIHRvIHNob3cgbW9kaWZpZWQgZmlsZXMuJyBcCi0gICAgJ2dpdCBscy1maWxlcyAtbSA+Lm91dHB1dCcKLWNhdCA+LmV4cGVjdGVkIDw8RU9GCi1wYXRoMAotcGF0aDEKLXBhdGgyL2ZpbGUyCi1wYXRoMy9maWxlMwotcGF0aDcKLXBhdGg4Ci1FT0YKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ3ZhbGlkYXRlIGdpdCBscy1maWxlcyAtbSBvdXRwdXQuJyBcCi0gICAgJ3Rlc3RfY21wIC5leHBlY3RlZCAub3V0cHV0JwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWRhdGUgZ2l0IGxzLWZpbGVzIC1tIG91dHB1dC4nICcKKwljYXQgPi5leHBlY3RlZCA8PC1cRU9GICYmCisJcGF0aDAKKwlwYXRoMQorCXBhdGgyL2ZpbGUyCisJcGF0aDMvZmlsZTMKKwlwYXRoNworCXBhdGg4CisJc3VibW9kMQorCUVPRgorCXRlc3RfY21wIC5leHBlY3RlZCAub3V0cHV0CisnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAzMC1tZXJnZS1yZWN1cnNpdmUuc2ggYi90L3QzMDMwLW1lcmdlLXJlY3Vyc2l2ZS5zaAppbmRleCBhNWUzZGE3Li4yZjk2MTAwIDEwMDc1NQotLS0gYS90L3QzMDMwLW1lcmdlLXJlY3Vyc2l2ZS5zaAorKysgYi90L3QzMDMwLW1lcmdlLXJlY3Vyc2l2ZS5zaApAQCAtMjUsMTAgKzI1LDcgQEAKIAlnaXQgYnJhbmNoIHN1Ym1vZCAmJgogCWdpdCBicmFuY2ggY29weSAmJgogCWdpdCBicmFuY2ggcmVuYW1lICYmCi0JaWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUwotCXRoZW4KLQkJZ2l0IGJyYW5jaCByZW5hbWUtbG4KLQlmaSAmJgorCWdpdCBicmFuY2ggcmVuYW1lLWxuICYmCiAKIAllY2hvIGhlbGxvID4+YSAmJgogCWNwIGEgZC9lICYmCkBAIC0yNjAsMTYgKzI1NywxMiBAQAogCWdpdCBhZGQgZSAmJgogCXRlc3RfdGljayAmJgogCWdpdCBjb21taXQgLW0gInJlbmFtZSBhLT5lIiAmJgotCWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKLQl0aGVuCi0JCWdpdCBjaGVja291dCByZW5hbWUtbG4gJiYKLQkJZ2l0IG12IGEgZSAmJgotCQlsbiAtcyBlIGEgJiYKLQkJZ2l0IGFkZCBhIGUgJiYKLQkJdGVzdF90aWNrICYmCi0JCWdpdCBjb21taXQgLW0gInJlbmFtZSBhLT5lLCBzeW1saW5rIGEtPmUiICYmCi0JCW9sbj1gcHJpbnRmIGUgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbmAKLQlmaQorCWdpdCBjaGVja291dCByZW5hbWUtbG4gJiYKKwlnaXQgbXYgYSBlICYmCisJdGVzdF9sbl9zX2FkZCBlIGEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJyZW5hbWUgYS0+ZSwgc3ltbGluayBhLT5lIiAmJgorCW9sbj1gcHJpbnRmIGUgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbmAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgOScgJwpAQCAtNTY5LDI4ICs1NjIsMjUgQEAKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAotaWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUwotdGhlbgotCXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ21lcmdlLXJlY3Vyc2l2ZSByZW5hbWUgdnMuIHJlbmFtZS9zeW1saW5rJyAnCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdtZXJnZS1yZWN1cnNpdmUgcmVuYW1lIHZzLiByZW5hbWUvc3ltbGluaycgJwogCi0JCWdpdCBjaGVja291dCAtZiByZW5hbWUgJiYKLQkJZ2l0IG1lcmdlIHJlbmFtZS1sbiAmJgotCQkoIGdpdCBscy10cmVlIC1yIEhFQUQgOyBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCi0JCSgKLQkJCWVjaG8gIjEyMDAwMCBibG9iICRvbG4JYSIKLQkJCWVjaG8gIjEwMDY0NCBibG9iICRvMAliIgotCQkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiCi0JCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIgotCQkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWUiCi0JCQllY2hvICIxMjAwMDAgJG9sbiAwCWEiCi0JCQllY2hvICIxMDA2NDQgJG8wIDAJYiIKLQkJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgotCQkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKLQkJCWVjaG8gIjEwMDY0NCAkbzAgMAllIgotCQkpID5leHBlY3RlZCAmJgotCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKLQknCi1maQorCWdpdCBjaGVja291dCAtZiByZW5hbWUgJiYKKwlnaXQgbWVyZ2UgcmVuYW1lLWxuICYmCisJKCBnaXQgbHMtdHJlZSAtciBIRUFEIDsgZ2l0IGxzLWZpbGVzIC1zICkgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTIwMDAwIGJsb2IgJG9sbglhIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYiIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlkL2UiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAllIgorCQllY2hvICIxMjAwMDAgJG9sbiAwCWEiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWUiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKIAogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMzItbWVyZ2UtcmVjdXJzaXZlLW9wdGlvbnMuc2ggYi90L3QzMDMyLW1lcmdlLXJlY3Vyc2l2ZS1vcHRpb25zLnNoCmluZGV4IDJiMTczMTEuLjVmZDdiYmIgMTAwNzU1Ci0tLSBhL3QvdDMwMzItbWVyZ2UtcmVjdXJzaXZlLW9wdGlvbnMuc2gKKysrIGIvdC90MzAzMi1tZXJnZS1yZWN1cnNpdmUtb3B0aW9ucy5zaApAQCAtMTQsNyArMTQsNyBAQAogLiAuL3Rlc3QtbGliLnNoCiAKIHRlc3RfaGF2ZV9wcmVyZXEgU0VEX1NUUklQU19DUiAmJiBTRURfT1BUSU9OUz0tYgotdGVzdF9oYXZlX3ByZXJlcSBNSU5HVyAmJiBleHBvcnQgR1JFUF9PUFRJT05TPS1VCit0ZXN0X2hhdmVfcHJlcmVxIEdSRVBfU1RSSVBTX0NSICYmIGV4cG9ydCBHUkVQX09QVElPTlM9LVUKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKIAljb25mbGljdF9odW5rcyAoKSB7CmRpZmYgLS1naXQgYS90L3QzMDcwLXdpbGRtYXRjaC5zaCBiL3QvdDMwNzAtd2lsZG1hdGNoLnNoCmluZGV4IDRjMzcwNTcuLjM4NDQ2YTAgMTAwNzU1Ci0tLSBhL3QvdDMwNzAtd2lsZG1hdGNoLnNoCisrKyBiL3QvdDMwNzAtd2lsZG1hdGNoLnNoCkBAIC02LDIwICs2LDIwIEBACiAKIG1hdGNoKCkgewogICAgIGlmIFsgJDEgPSAxIF07IHRoZW4KLQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJ3aWxkbWF0Y2g6ICAgIG1hdGNoICckMycgJyQ0JyIgIgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIndpbGRtYXRjaDogICAgIG1hdGNoICckMycgJyQ0JyIgIgogCSAgICB0ZXN0LXdpbGRtYXRjaCB3aWxkbWF0Y2ggJyQzJyAnJDQnCiAJIgogICAgIGVsc2UKLQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJ3aWxkbWF0Y2g6IG5vIG1hdGNoICckMycgJyQ0JyIgIgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIndpbGRtYXRjaDogIG5vIG1hdGNoICckMycgJyQ0JyIgIgogCSAgICAhIHRlc3Qtd2lsZG1hdGNoIHdpbGRtYXRjaCAnJDMnICckNCcKIAkiCiAgICAgZmkKICAgICBpZiBbICQyID0gMSBdOyB0aGVuCi0JdGVzdF9leHBlY3Rfc3VjY2VzcyAiZm5tYXRjaDogICAgICBtYXRjaCAnJDMnICckNCciICIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmbm1hdGNoOiAgICAgICBtYXRjaCAnJDMnICckNCciICIKIAkgICAgdGVzdC13aWxkbWF0Y2ggZm5tYXRjaCAnJDMnICckNCcKIAkiCiAgICAgZWxpZiBbICQyID0gMCBdOyB0aGVuCi0JdGVzdF9leHBlY3Rfc3VjY2VzcyAiZm5tYXRjaDogICBubyBtYXRjaCAnJDMnICckNCciICIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmbm1hdGNoOiAgICBubyBtYXRjaCAnJDMnICckNCciICIKIAkgICAgISB0ZXN0LXdpbGRtYXRjaCBmbm1hdGNoICckMycgJyQ0JwogCSIKICMgICAgZWxzZQpAQCAtMjksMTMgKzI5LDI1IEBACiAgICAgZmkKIH0KIAoraW1hdGNoKCkgeworICAgIGlmIFsgJDEgPSAxIF07IHRoZW4KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJpd2lsZG1hdGNoOiAgICBtYXRjaCAnJDInICckMyciICIKKwkgICAgdGVzdC13aWxkbWF0Y2ggaXdpbGRtYXRjaCAnJDInICckMycKKwkiCisgICAgZWxzZQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIml3aWxkbWF0Y2g6IG5vIG1hdGNoICckMicgJyQzJyIgIgorCSAgICAhIHRlc3Qtd2lsZG1hdGNoIGl3aWxkbWF0Y2ggJyQyJyAnJDMnCisJIgorICAgIGZpCit9CisKIHBhdGhtYXRjaCgpIHsKICAgICBpZiBbICQxID0gMSBdOyB0aGVuCi0JdGVzdF9leHBlY3Rfc3VjY2VzcyAicGF0aG1hdGNoOiAgICBtYXRjaCAnJDInICckMyciICIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJwYXRobWF0Y2g6ICAgICBtYXRjaCAnJDInICckMyciICIKIAkgICAgdGVzdC13aWxkbWF0Y2ggcGF0aG1hdGNoICckMicgJyQzJwogCSIKICAgICBlbHNlCi0JdGVzdF9leHBlY3Rfc3VjY2VzcyAicGF0aG1hdGNoOiBubyBtYXRjaCAnJDInICckMyciICIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJwYXRobWF0Y2g6ICBubyBtYXRjaCAnJDInICckMyciICIKIAkgICAgISB0ZXN0LXdpbGRtYXRjaCBwYXRobWF0Y2ggJyQyJyAnJDMnCiAJIgogICAgIGZpCkBAIC0yMzUsNCArMjQ3LDM1IEBACiBwYXRobWF0Y2ggMSBhYi9jWGQvZWZYZy9oaSAnKi8qWCovKi8qaScKIHBhdGhtYXRjaCAxIGFiL2NYZC9lZlhnL2hpICcqWGcqaScKIAorIyBDYXNlLXNlbnNpdGl2eSBmZWF0dXJlcworbWF0Y2ggMCB4ICdhJyAnW0EtWl0nCittYXRjaCAxIHggJ0EnICdbQS1aXScKK21hdGNoIDAgeCAnQScgJ1thLXpdJworbWF0Y2ggMSB4ICdhJyAnW2Etel0nCittYXRjaCAwIHggJ2EnICdbWzp1cHBlcjpdXScKK21hdGNoIDEgeCAnQScgJ1tbOnVwcGVyOl1dJworbWF0Y2ggMCB4ICdBJyAnW1s6bG93ZXI6XV0nCittYXRjaCAxIHggJ2EnICdbWzpsb3dlcjpdXScKK21hdGNoIDAgeCAnQScgJ1tCLVphXScKK21hdGNoIDEgeCAnYScgJ1tCLVphXScKK21hdGNoIDAgeCAnQScgJ1tCLWFdJworbWF0Y2ggMSB4ICdhJyAnW0ItYV0nCittYXRjaCAwIHggJ3onICdbWi15XScKK21hdGNoIDEgeCAnWicgJ1taLXldJworCitpbWF0Y2ggMSAnYScgJ1tBLVpdJworaW1hdGNoIDEgJ0EnICdbQS1aXScKK2ltYXRjaCAxICdBJyAnW2Etel0nCitpbWF0Y2ggMSAnYScgJ1thLXpdJworaW1hdGNoIDEgJ2EnICdbWzp1cHBlcjpdXScKK2ltYXRjaCAxICdBJyAnW1s6dXBwZXI6XV0nCitpbWF0Y2ggMSAnQScgJ1tbOmxvd2VyOl1dJworaW1hdGNoIDEgJ2EnICdbWzpsb3dlcjpdXScKK2ltYXRjaCAxICdBJyAnW0ItWmFdJworaW1hdGNoIDEgJ2EnICdbQi1aYV0nCitpbWF0Y2ggMSAnQScgJ1tCLWFdJworaW1hdGNoIDEgJ2EnICdbQi1hXScKK2ltYXRjaCAxICd6JyAnW1oteV0nCitpbWF0Y2ggMSAnWicgJ1taLXldJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaCBiL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaAppbmRleCA4MWQ5MGI2Li5lYjczYzA2IDEwMDc1NQotLS0gYS90L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2gKKysrIGIvdC90MzEwMC1scy10cmVlLXJlc3RyaWN0LnNoCkBAIC0yMiwyMCArMjIsOCBAQAogICAgICdzZXR1cCcgXAogICAgICdta2RpciBwYXRoMiBwYXRoMi9iYXogJiYKICAgICAgZWNobyBIaSA+cGF0aDAgJiYKLSAgICAgaWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUwotICAgICB0aGVuCi0JbG4gLXMgcGF0aDAgcGF0aDEgJiYKLQlsbiAtcyAuLi9wYXRoMSBwYXRoMi9iYXpibwotCW1ha2VfZXhwZWN0ZWQgKCkgewotCQljYXQgPmV4cGVjdGVkCi0JfQotICAgICBlbHNlCi0JcHJpbnRmIHBhdGgwID4gcGF0aDEgJiYKLQlwcmludGYgLi4vcGF0aDEgPiBwYXRoMi9iYXpibwotCW1ha2VfZXhwZWN0ZWQgKCkgewotCQlzZWQgLWUgInMvMTIwMDAwIC8xMDA2NDQgLyIgPmV4cGVjdGVkCi0JfQotICAgICBmaSAmJgorICAgICB0ZXN0X2xuX3NfYWRkIHBhdGgwIHBhdGgxICYmCisgICAgIHRlc3RfbG5fc19hZGQgLi4vcGF0aDEgcGF0aDIvYmF6Ym8gJiYKICAgICAgZWNobyBMbyA+cGF0aDIvZm9vICYmCiAgICAgIGVjaG8gTWkgPnBhdGgyL2Jhei9iICYmCiAgICAgIGZpbmQgcGF0aD8gXCggLXR5cGUgZiAtbyAtdHlwZSBsIFwpIC1wcmludCB8CkBAIC01MSw3ICszOSw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnbHMtdHJlZSBwbGFpbicgXAogICAgICdnaXQgbHMtdHJlZSAkdHJlZSA+Y3VycmVudCAmJgotICAgICBtYWtlX2V4cGVjdGVkIDw8XEVPRiAmJgorICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgogMTAwNjQ0IGJsb2IgWAlwYXRoMAogMTIwMDAwIGJsb2IgWAlwYXRoMQogMDQwMDAwIHRyZWUgWAlwYXRoMgpAQCAtNjEsNyArNDksNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2xzLXRyZWUgcmVjdXJzaXZlJyBcCiAgICAgJ2dpdCBscy10cmVlIC1yICR0cmVlID5jdXJyZW50ICYmCi0gICAgIG1ha2VfZXhwZWN0ZWQgPDxcRU9GICYmCisgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCiAxMDA2NDQgYmxvYiBYCXBhdGgwCiAxMjAwMDAgYmxvYiBYCXBhdGgxCiAxMDA2NDQgYmxvYiBYCXBhdGgyL2Jhei9iCkBAIC03Myw3ICs2MSw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnbHMtdHJlZSByZWN1cnNpdmUgd2l0aCAtdCcgXAogICAgICdnaXQgbHMtdHJlZSAtciAtdCAkdHJlZSA+Y3VycmVudCAmJgotICAgICBtYWtlX2V4cGVjdGVkIDw8XEVPRiAmJgorICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgogMTAwNjQ0IGJsb2IgWAlwYXRoMAogMTIwMDAwIGJsb2IgWAlwYXRoMQogMDQwMDAwIHRyZWUgWAlwYXRoMgpAQCAtODcsNyArNzUsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2xzLXRyZWUgcmVjdXJzaXZlIHdpdGggLWQnIFwKICAgICAnZ2l0IGxzLXRyZWUgLXIgLWQgJHRyZWUgPmN1cnJlbnQgJiYKLSAgICAgbWFrZV9leHBlY3RlZCA8PFxFT0YgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKIDA0MDAwMCB0cmVlIFgJcGF0aDIKIDA0MDAwMCB0cmVlIFgJcGF0aDIvYmF6CiBFT0YKQEAgLTk2LDcgKzg0LDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdscy10cmVlIGZpbHRlcmVkIHdpdGggcGF0aCcgXAogICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoID5jdXJyZW50ICYmCi0gICAgIG1ha2VfZXhwZWN0ZWQgPDxcRU9GICYmCisgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCiBFT0YKICAgICAgdGVzdF9vdXRwdXQnCiAKQEAgLTEwNiw3ICs5NCw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnbHMtdHJlZSBmaWx0ZXJlZCB3aXRoIHBhdGgxIHBhdGgwJyBcCiAgICAgJ2dpdCBscy10cmVlICR0cmVlIHBhdGgxIHBhdGgwID5jdXJyZW50ICYmCi0gICAgIG1ha2VfZXhwZWN0ZWQgPDxcRU9GICYmCisgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCiAxMDA2NDQgYmxvYiBYCXBhdGgwCiAxMjAwMDAgYmxvYiBYCXBhdGgxCiBFT0YKQEAgLTExNSw3ICsxMDMsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2xzLXRyZWUgZmlsdGVyZWQgd2l0aCBwYXRoMC8nIFwKICAgICAnZ2l0IGxzLXRyZWUgJHRyZWUgcGF0aDAvID5jdXJyZW50ICYmCi0gICAgIG1ha2VfZXhwZWN0ZWQgPDxcRU9GICYmCisgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCiBFT0YKICAgICAgdGVzdF9vdXRwdXQnCiAKQEAgLTEyNCw3ICsxMTIsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2xzLXRyZWUgZmlsdGVyZWQgd2l0aCBwYXRoMicgXAogICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoMiA+Y3VycmVudCAmJgotICAgICBtYWtlX2V4cGVjdGVkIDw8XEVPRiAmJgorICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgogMDQwMDAwIHRyZWUgWAlwYXRoMgogRU9GCiAgICAgIHRlc3Rfb3V0cHV0JwpAQCAtMTMzLDcgKzEyMSw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnbHMtdHJlZSBmaWx0ZXJlZCB3aXRoIHBhdGgyLycgXAogICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoMi8gPmN1cnJlbnQgJiYKLSAgICAgbWFrZV9leHBlY3RlZCA8PFxFT0YgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKIDA0MDAwMCB0cmVlIFgJcGF0aDIvYmF6CiAxMjAwMDAgYmxvYiBYCXBhdGgyL2JhemJvCiAxMDA2NDQgYmxvYiBYCXBhdGgyL2ZvbwpAQCAtMTQ1LDcgKzEzMyw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnbHMtdHJlZSBmaWx0ZXJlZCB3aXRoIHBhdGgyL2JheicgXAogICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoMi9iYXogPmN1cnJlbnQgJiYKLSAgICAgbWFrZV9leHBlY3RlZCA8PFxFT0YgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKIDA0MDAwMCB0cmVlIFgJcGF0aDIvYmF6CiBFT0YKICAgICAgdGVzdF9vdXRwdXQnCkBAIC0xNTMsMTQgKzE0MSwxNCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2xzLXRyZWUgZmlsdGVyZWQgd2l0aCBwYXRoMi9iYWsnIFwKICAgICAnZ2l0IGxzLXRyZWUgJHRyZWUgcGF0aDIvYmFrID5jdXJyZW50ICYmCi0gICAgIG1ha2VfZXhwZWN0ZWQgPDxcRU9GICYmCisgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCiBFT0YKICAgICAgdGVzdF9vdXRwdXQnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdscy10cmVlIC10IGZpbHRlcmVkIHdpdGggcGF0aDIvYmFrJyBcCiAgICAgJ2dpdCBscy10cmVlIC10ICR0cmVlIHBhdGgyL2JhayA+Y3VycmVudCAmJgotICAgICBtYWtlX2V4cGVjdGVkIDw8XEVPRiAmJgorICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgogMDQwMDAwIHRyZWUgWAlwYXRoMgogRU9GCiAgICAgIHRlc3Rfb3V0cHV0JwpAQCAtMTY4LDcgKzE1Niw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnbHMtdHJlZSB3aXRoIG9uZSBwYXRoIGEgcHJlZml4IG9mIHRoZSBvdGhlcicgXAogICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoMi9iYXogcGF0aDIvYmF6Ym8gPmN1cnJlbnQgJiYKLSAgICAgbWFrZV9leHBlY3RlZCA8PFxFT0YgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKIDA0MDAwMCB0cmVlIFgJcGF0aDIvYmF6CiAxMjAwMDAgYmxvYiBYCXBhdGgyL2JhemJvCiBFT0YKZGlmZiAtLWdpdCBhL3QvdDMyMDAtYnJhbmNoLnNoIGIvdC90MzIwMC1icmFuY2guc2gKaW5kZXggZDk2OWYwZS4uNDRlYzZhNCAxMDA3NTUKLS0tIGEvdC90MzIwMC1icmFuY2guc2gKKysrIGIvdC90MzIwMC1icmFuY2guc2gKQEAgLTMxNywxMyArMzE3LDEzIEBACiAJdGVzdCAkKGdpdCBjb25maWcgYnJhbmNoLm15NC5tZXJnZSkgPSByZWZzL2hlYWRzL21hc3RlcgogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHRyYWNraW5nIHNldHVwIChub24td2lsZGNhcmQsIG5vdCBtYXRjaGluZyknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWNraW5nIHNldHVwIGZhaWxzIG9uIG5vbi1tYXRjaGluZyByZWZzcGVjJyAnCiAJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKIAlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzL3M6cmVmcy9yZW1vdGVzL2xvY2FsL3MgJiYKIAkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgotCWdpdCBicmFuY2ggLS10cmFjayBteTUgbG9jYWwvbWFzdGVyICYmCi0JISB0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15NS5yZW1vdGUpIiA9IGxvY2FsICYmCi0JISB0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15NS5tZXJnZSkiID0gcmVmcy9oZWFkcy9tYXN0ZXIKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tdHJhY2sgbXk1IGxvY2FsL21hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgYnJhbmNoLm15NS5yZW1vdGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIGJyYW5jaC5teTUubWVyZ2UKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCB0cmFja2luZyBzZXR1cCB2aWEgY29uZmlnJyAnCmRpZmYgLS1naXQgYS90L3QzMjEwLXBhY2stcmVmcy5zaCBiL3QvdDMyMTAtcGFjay1yZWZzLnNoCmluZGV4IGNkMDQzNjEuLjFhMjA4MGUgMTAwNzU1Ci0tLSBhL3QvdDMyMTAtcGFjay1yZWZzLnNoCisrKyBiL3QvdDMyMTAtcGFjay1yZWZzLnNoCkBAIC0xMTgsNCArMTE4LDM3IEBACiAJdGVzdF9jbXAgYWxsLW9mLXRoZW0gYWdhaW4KICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwbGljaXQgcGFjay1yZWZzIHdpdGggZGFuZ2xpbmcgcGFja2VkIHJlZmVyZW5jZScgJworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAic29vbiB0byBiZSBnYXJiYWdlLWNvbGxlY3RlZCIgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPWFsbCAtLWFsbCAmJgorCWdpdCBwcnVuZSAtLWV4cGlyZT1hbGwgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsIDI+cmVzdWx0ICYmCisJdGVzdF9jbXAgL2Rldi9udWxsIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGUgcmVmIHdpdGggZGFuZ2xpbmcgcGFja2VkIHZlcnNpb24nICcKKwlnaXQgY2hlY2tvdXQgLWIgbGFtYiAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiZnV0dXJlIGdhcmJhZ2UiICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9YWxsIC0tYWxsICYmCisJZ2l0IHBydW5lIC0tZXhwaXJlPWFsbCAmJgorCWdpdCBicmFuY2ggLWQgbGFtYiAyPnJlc3VsdCAmJgorCXRlc3RfY21wIC9kZXYvbnVsbCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRlIHJlZiB3aGlsZSBhbm90aGVyIGRhbmdsaW5nIHBhY2tlZCByZWYnICcKKwlnaXQgYnJhbmNoIGxhbWIgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImZ1dHVyZSBnYXJiYWdlIiAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9YWxsIC0tYWxsICYmCisJZ2l0IHBydW5lIC0tZXhwaXJlPWFsbCAmJgorCWdpdCBicmFuY2ggLWQgbGFtYiAyPnJlc3VsdCAmJgorCXRlc3RfY21wIC9kZXYvbnVsbCByZXN1bHQKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMjExLXBlZWwtcmVmLnNoIGIvdC90MzIxMS1wZWVsLXJlZi5zaAppbmRleCBkNGQ3NzkyLi4zYjdjYWNhIDEwMDc1NQotLS0gYS90L3QzMjExLXBlZWwtcmVmLnNoCisrKyBiL3QvdDMyMTEtcGVlbC1yZWYuc2gKQEAgLTYxLDQgKzYxLDEzIEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwZWVsZWQgcmVmcyBzdXJ2aXZlIGRlbGV0aW9uIG9mIHBhY2tlZCByZWYnICcKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJY3AgLmdpdC9wYWNrZWQtcmVmcyBmdWxseS1wZWVsZWQgJiYKKwlnaXQgYnJhbmNoIHlhZGRhICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCWdpdCBicmFuY2ggLWQgeWFkZGEgJiYKKwl0ZXN0X2NtcCBmdWxseS1wZWVsZWQgLmdpdC9wYWNrZWQtcmVmcworJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDAtcmViYXNlLnNoIGIvdC90MzQwMC1yZWJhc2Uuc2gKaW5kZXggYjU4ZmExYS4uZWJmOTNiMCAxMDA3NTUKLS0tIGEvdC90MzQwMC1yZWJhc2Uuc2gKKysrIGIvdC90MzQwMC1yZWJhc2Uuc2gKQEAgLTQwLDEzICs0MCw2IEBACiAJZWNobyBTaWRlID4+QyAmJgogCWdpdCBhZGQgQyAmJgogCWdpdCBjb21taXQgLW0gIkFkZCBDIiAmJgotCWdpdCBjaGVja291dCAtYiBub25saW5lYXIgbXktdG9waWMtYnJhbmNoICYmCi0JZWNobyBFZGl0ID4+QiAmJgotCWdpdCBhZGQgQiAmJgotCWdpdCBjb21taXQgLW0gIk1vZGlmeSBCIiAmJgotCWdpdCBtZXJnZSBzaWRlICYmCi0JZ2l0IGNoZWNrb3V0IC1iIHVwc3RyZWFtLW1lcmdlZC1ub25saW5lYXIgJiYKLQlnaXQgbWVyZ2UgbWFzdGVyICYmCiAJZ2l0IGNoZWNrb3V0IC1mIG15LXRvcGljLWJyYW5jaCAmJgogCWdpdCB0YWcgdG9waWMKICcKQEAgLTY2LDI2ICs1OSwxNSBAQAogCWdpdCByZWJhc2UgbWFzdGVyCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBhZ2FpbnN0IG1hc3RlciB0d2ljZScgJwotCWdpdCByZWJhc2UgbWFzdGVyID5vdXQgJiYKLQl0ZXN0X2kxOG5ncmVwICJDdXJyZW50IGJyYW5jaCBteS10b3BpYy1icmFuY2ggaXMgdXAgdG8gZGF0ZSIgb3V0Ci0nCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBhZ2FpbnN0IG1hc3RlciB0d2ljZSB3aXRoIC0tZm9yY2UnICcKLQlnaXQgcmViYXNlIC0tZm9yY2UtcmViYXNlIG1hc3RlciA+b3V0ICYmCi0JdGVzdF9pMThuZ3JlcCAiQ3VycmVudCBicmFuY2ggbXktdG9waWMtYnJhbmNoIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQiIG91dAotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgYWdhaW5zdCBtYXN0ZXIgdHdpY2UgZnJvbSBhbm90aGVyIGJyYW5jaCcgJwotCWdpdCBjaGVja291dCBteS10b3BpYy1icmFuY2heICYmCi0JZ2l0IHJlYmFzZSBtYXN0ZXIgbXktdG9waWMtYnJhbmNoID5vdXQgJiYKLQl0ZXN0X2kxOG5ncmVwICJDdXJyZW50IGJyYW5jaCBteS10b3BpYy1icmFuY2ggaXMgdXAgdG8gZGF0ZSIgb3V0Ci0nCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBmYXN0LWZvcndhcmQgdG8gbWFzdGVyJyAnCi0JZ2l0IGNoZWNrb3V0IG15LXRvcGljLWJyYW5jaF4gJiYKLQlnaXQgcmViYXNlIG15LXRvcGljLWJyYW5jaCA+b3V0ICYmCi0JdGVzdF9pMThuZ3JlcCAiRmFzdC1mb3J3YXJkZWQgSEVBRCB0byBteS10b3BpYy1icmFuY2giIG91dAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlLCB3aXRoIDxvbnRvPiBhbmQgPHVwc3RyZWFtPiBzcGVjaWZpZWQgYXMgOi9xdXV4ZXJ5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgYnJhbmNoIC1EIHRvcmViYXNlIiAmJgorCWdpdCBjaGVja291dCAtYiB0b3JlYmFzZSBteS10b3BpYy1icmFuY2heICYmCisJdXBzdHJlYW09JChnaXQgcmV2LXBhcnNlICI6L0FkZCBCIikgJiYKKwlvbnRvPSQoZ2l0IHJldi1wYXJzZSAiOi9BZGQgQSIpICYmCisJZ2l0IHJlYmFzZSAtLW9udG8gJG9udG8gJHVwc3RyZWFtICYmCisJZ2l0IHJlc2V0IC0taGFyZCBteS10b3BpYy1icmFuY2heICYmCisJZ2l0IHJlYmFzZSAtLW9udG8gIjovQWRkIEEiICI6L0FkZCBCIiAmJgorCWdpdCBjaGVja291dCBteS10b3BpYy1icmFuY2gKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndGhlIHJlYmFzZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBoYXZlIGRlc3Ryb3llZCBhdXRob3IgaW5mb3JtYXRpb24nICcKQEAgLTEwNiwzMSArODgsOSBAQAogCWdpdCByZWJhc2UgbWFzdGVyCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBhZnRlciBtZXJnZSBtYXN0ZXInICcKLQlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggcmVmcy90YWdzL3RvcGljICYmCi0JZ2l0IGJyYW5jaCAtRCB0b3BpYyAmJgotCWdpdCByZXNldCAtLWhhcmQgdG9waWMgJiYKLQlnaXQgbWVyZ2UgbWFzdGVyICYmCi0JZ2l0IHJlYmFzZSBtYXN0ZXIgJiYKLQkhIChnaXQgc2hvdyB8IGdyZXAgIl5NZXJnZToiKQotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugb2YgaGlzdG9yeSB3aXRoIG1lcmdlcyBpcyBsaW5lYXJpemVkJyAnCi0JZ2l0IGNoZWNrb3V0IG5vbmxpbmVhciAmJgotCXRlc3QgNCA9ICQoZ2l0IHJldi1saXN0IG1hc3Rlci4uIHwgd2MgLWwpICYmCi0JZ2l0IHJlYmFzZSBtYXN0ZXIgJiYKLQl0ZXN0IDMgPSAkKGdpdCByZXYtbGlzdCBtYXN0ZXIuLiB8IHdjIC1sKQotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugb2YgaGlzdG9yeSB3aXRoIG1lcmdlcyBhZnRlciB1cHN0cmVhbSBtZXJnZSBpcyBsaW5lYXJpemVkJyAnCi0JZ2l0IGNoZWNrb3V0IHVwc3RyZWFtLW1lcmdlZC1ub25saW5lYXIgJiYKLQl0ZXN0IDUgPSAkKGdpdCByZXYtbGlzdCBtYXN0ZXIuLiB8IHdjIC1sKSAmJgotCWdpdCByZWJhc2UgbWFzdGVyICYmCi0JdGVzdCAzID0gJChnaXQgcmV2LWxpc3QgbWFzdGVyLi4gfCB3YyAtbCkKLScKLQogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGEgc2luZ2xlIG1vZGUgY2hhbmdlJyAnCiAJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggLUQgdG9waWMgJiYKIAllY2hvIDEgPlggJiYKIAlnaXQgYWRkIFggJiYKIAl0ZXN0X3RpY2sgJiYKQEAgLTE4NSw3ICsxNDUsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1xIGlzIHF1aWV0JyAnCiAJZ2l0IGNoZWNrb3V0IC1iIHF1aWV0IHRvcGljICYmCiAJZ2l0IHJlYmFzZSAtcSBtYXN0ZXIgPm91dHB1dC5vdXQgMj4mMSAmJgotCXRlc3QgISAtcyBvdXRwdXQub3V0CisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5vdXQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnUmViYXNlIGEgY29tbWl0IHRoYXQgc3ByaW5rbGVzIENScyBpbicgJwpkaWZmIC0tZ2l0IGEvdC90MzQwMS1yZWJhc2UtcGFydGlhbC5zaCBiL3QvdDM0MDEtcmViYXNlLXBhcnRpYWwuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDU4ZjQ4MjMuLjAwMDAwMDAKLS0tIGEvdC90MzQwMS1yZWJhc2UtcGFydGlhbC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLSMhL2Jpbi9zaAotIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgWWFubiBEaXJzb24sIGJhc2VkIG9uIHQzNDAwIGJ5IEFtb3MgV2F0ZXJsYW5kCi0jCi0KLXRlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2Ugc2hvdWxkIGRldGVjdCBwYXRjaGVzIGludGVncmF0ZWQgdXBzdHJlYW0KLQotVGhpcyB0ZXN0IGNoZXJyeS1waWNrcyBvbmUgbG9jYWwgY2hhbmdlIG9mIHR3byBpbnRvIG1hc3RlciBicmFuY2gsIGFuZAotY2hlY2tzIHRoYXQgZ2l0IHJlYmFzZSBzdWNjZWVkcyB3aXRoIG9ubHkgdGhlIHNlY29uZCBwYXRjaCBpbiB0aGUKLWxvY2FsIGJyYW5jaC4KLScKLS4gLi90ZXN0LWxpYi5zaAotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIHJlcG9zaXRvcnkgd2l0aCB0b3BpYyBicmFuY2gnICcKLQl0ZXN0X2NvbW1pdCBBICYmCi0JZ2l0IGNoZWNrb3V0IC1iIG15LXRvcGljLWJyYW5jaCAmJgotCXRlc3RfY29tbWl0IEIgJiYKLQl0ZXN0X2NvbW1pdCBDICYmCi0JZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgotCXRlc3RfY29tbWl0IEEyIEEudAotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdwaWNrIHRvcCBwYXRjaCBmcm9tIHRvcGljIGJyYW5jaCBpbnRvIG1hc3RlcicgJwotCWdpdCBjaGVycnktcGljayBDICYmCi0JZ2l0IGNoZWNrb3V0IC1mIG15LXRvcGljLWJyYW5jaAotJwotCi10ZXN0X2RlYnVnICcKLQlnaXQgY2hlcnJ5IG1hc3RlciAmJgotCWdpdCBmb3JtYXQtcGF0Y2ggLWsgLS1zdGRvdXQgLS1mdWxsLWluZGV4IG1hc3RlciA+L2Rldi9udWxsICYmCi0JZ2l0ayAtLWFsbCAmIHNsZWVwIDEKLScKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIHRvcGljIGJyYW5jaCBhZ2FpbnN0IG5ldyBtYXN0ZXIgYW5kIGNoZWNrIGdpdCBhbSBkaWQgbm90IGdldCBoYWx0ZWQnICcKLQlnaXQgcmViYXNlIG1hc3RlciAmJgotCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5Ci0nCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlIHRvcGljIGJyYW5jaCB0aGF0IHdhcyBwYXJ0aWFsbHkgbWVyZ2VkIHVwc3RyZWFtJyAnCi0JZ2l0IHJlc2V0IC0taGFyZCBDICYmCi0JZ2l0IHJlYmFzZSAtLW1lcmdlIG1hc3RlciAmJgotCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLW1lcmdlCi0nCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBpZ25vcmVzIGVtcHR5IGNvbW1pdCcgJwotCWdpdCByZXNldCAtLWhhcmQgQSAmJgotCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBlbXB0eSAmJgotCXRlc3RfY29tbWl0IEQgJiYKLQlnaXQgcmViYXNlIEMgJiYKLQl0ZXN0ICIkKGdpdCBsb2cgLS1mb3JtYXQ9JXMgQy4uKSIgPSAiRCIKLScKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0ta2VlcC1lbXB0eScgJwotCWdpdCByZXNldCAtLWhhcmQgRCAmJgotCWdpdCByZWJhc2UgLS1rZWVwLWVtcHR5IEMgJiYKLQl0ZXN0ICIkKGdpdCBsb2cgLS1mb3JtYXQ9JXMgQy4uKSIgPSAiRAotZW1wdHkiCi0nCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWtlZXAtZW1wdHkga2VlcHMgZW1wdHkgZXZlbiBpZiBhbHJlYWR5IGluIHVwc3RyZWFtJyAnCi0JZ2l0IHJlc2V0IC0taGFyZCBBICYmCi0JZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGFsc28tZW1wdHkgJiYKLQlnaXQgcmViYXNlIC0ta2VlcC1lbXB0eSBEICYmCi0JdGVzdCAiJChnaXQgbG9nIC0tZm9ybWF0PSVzIEEuLikiID0gImFsc28tZW1wdHkKLUQKLWVtcHR5IgotJwotCi10ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDMtcmViYXNlLXNraXAuc2ggYi90L3QzNDAzLXJlYmFzZS1za2lwLnNoCmluZGV4IDgyNjUwMGIuLjM5NjgwMjAgMTAwNzU1Ci0tLSBhL3QvdDM0MDMtcmViYXNlLXNraXAuc2gKKysrIGIvdC90MzQwMy1yZWJhc2Utc2tpcC5zaApAQCAtNjQsMTAgKzY0LDExIEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXNraXAgd2l0aCAtLW1lcmdlJyAnCiAJZ2l0IHJlYmFzZSAtLXNraXAKLQknCisnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGFuZCByZWZlcmVuY2UgdHJlZXMgZXF1YWwnIFwKLQkndGVzdCAteiAiYGdpdCBkaWZmLXRyZWUgc2tpcC1tZXJnZSBza2lwLXJlZmVyZW5jZWAiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYW5kIHJlZmVyZW5jZSB0cmVlcyBlcXVhbCcgJworCXRlc3QgLXogImBnaXQgZGlmZi10cmVlIHNraXAtbWVyZ2Ugc2tpcC1yZWZlcmVuY2VgIgorJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb3ZlZCBiYWNrIHRvIGJyYW5jaCBjb3JyZWN0bHknICcKIAl0ZXN0IHJlZnMvaGVhZHMvc2tpcC1tZXJnZSA9ICQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKQpkaWZmIC0tZ2l0IGEvdC90MzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2ggYi90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaAppbmRleCBhNTg0MDZkLi40OWNjYjM4IDEwMDc1NQotLS0gYS90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaAorKysgYi90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaApAQCAtNDc3LDE5ICs0NzcsMTEgQEAKIAl0ZXN0ICRvbmUgPSAkKGdpdCByZXYtcGFyc2UgSEVBRH4yKQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdpZ25vcmUgcGF0Y2ggaWYgaW4gdXBzdHJlYW0nICcKLQlIRUFEPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgotCWdpdCBjaGVja291dCAtYiBoYXMtY2hlcnJ5LXBpY2tlZCBIRUFEXiAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSB0cmllcyB0byBjb21taXQsIGV2ZW4gZm9yICJlZGl0IicgJwogCWVjaG8gdW5yZWxhdGVkID4gZmlsZTcgJiYKIAlnaXQgYWRkIGZpbGU3ICYmCiAJdGVzdF90aWNrICYmCiAJZ2l0IGNvbW1pdCAtbSAidW5yZWxhdGVkIGNoYW5nZSIgJiYKLQlnaXQgY2hlcnJ5LXBpY2sgJEhFQUQgJiYKLQlFWFBFQ1RfQ09VTlQ9MSBnaXQgcmViYXNlIC1pICRIRUFEICYmCi0JdGVzdCAkSEVBRCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikKLScKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSB0cmllcyB0byBjb21taXQsIGV2ZW4gZm9yICJlZGl0IicgJwogCXBhcmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCiAJdGVzdF90aWNrICYmCiAJRkFLRV9MSU5FUz0iZWRpdCAxIiBnaXQgcmViYXNlIC1pIEhFQUReICYmCkBAIC02OTIsNyArNjg0LDcgQEAKIAl0ZXN0X2NvbW1pdCBuMiAmJgogCXRlc3RfY29tbWl0IG4zICYmCiAJZ2l0IG5vdGVzIGFkZCAtbSJhIG5vdGUiIG4zICYmCi0JZ2l0IHJlYmFzZSAtLW9udG8gbjEgbjIgJiYKKwlnaXQgcmViYXNlIC1pIC0tb250byBuMSBuMiAmJgogCXRlc3QgImEgbm90ZSIgPSAiJChnaXQgbm90ZXMgc2hvdyBIRUFEKSIKICcKIApAQCAtOTM0LDYgKzkyNiwyMSBAQAogCXRlc3QgTCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSBwcm9kdWNlcyByZWFkYWJsZSByZWZsb2cnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGJyYW5jaCAtZiBicmFuY2gtcmVmbG9nLXRlc3QgSCAmJgorCWdpdCByZWJhc2UgLWkgLS1vbnRvIEkgRiBicmFuY2gtcmVmbG9nLXRlc3QgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcmViYXNlIC1pIChzdGFydCk6IGNoZWNrb3V0IEkKKwlyZWJhc2UgLWkgKHBpY2spOiBHCisJcmViYXNlIC1pIChwaWNrKTogSAorCXJlYmFzZSAtaSAoZmluaXNoKTogcmV0dXJuaW5nIHRvIHJlZnMvaGVhZHMvYnJhbmNoLXJlZmxvZy10ZXN0CisJRU9GCisJdGFpbCAtbiA0IC5naXQvbG9ncy9IRUFEIHwKKwlzZWQgLWUgInMvLioJLy8iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSByZXNwZWN0cyBjb3JlLmNvbW1lbnRjaGFyJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWdpdCBjaGVja291dCBFXjAgJiYKQEAgLTk0Nyw0ICs5NTQsMjYgQEAKIAl0ZXN0IEIgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBzZWQgLW5lIFwkcCkKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pLCB3aXRoIDxvbnRvPiBhbmQgPHVwc3RyZWFtPiBzcGVjaWZpZWQgYXMgOi9xdXV4ZXJ5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgYnJhbmNoIC1EIHRvcmViYXNlIiAmJgorCWdpdCBjaGVja291dCAtYiB0b3JlYmFzZSBicmFuY2gxICYmCisJdXBzdHJlYW09JChnaXQgcmV2LXBhcnNlICI6L0oiKSAmJgorCW9udG89JChnaXQgcmV2LXBhcnNlICI6L0EiKSAmJgorCWdpdCByZWJhc2UgLS1vbnRvICRvbnRvICR1cHN0cmVhbSAmJgorCWdpdCByZXNldCAtLWhhcmQgYnJhbmNoMSAmJgorCWdpdCByZWJhc2UgLS1vbnRvICI6L0EiICI6L0oiICYmCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIHdpdGggLS1zdHJhdGVneSBhbmQgLVgnICcKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3QtbWVyZ2UtdXNlLXRoZWlycyBjb25mbGljdC1icmFuY2ggJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZWNobyBmaXZlID5jb25mbGljdCAmJgorCWVjaG8gWiA+ZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJvbmUgZmlsZSBjb25mbGljdCIgJiYKKwlFRElUT1I9dHJ1ZSBnaXQgcmViYXNlIC1pIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIC1Yb3VycyBjb25mbGljdC1icmFuY2ggJiYKKwl0ZXN0ICQoZ2l0IHNob3cgY29uZmxpY3QtYnJhbmNoOmNvbmZsaWN0KSA9ICQoY2F0IGNvbmZsaWN0KSAmJgorCXRlc3QgJChjYXQgZmlsZTEpID0gWgorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDYtcmViYXNlLW1lc3NhZ2Uuc2ggYi90L3QzNDA2LXJlYmFzZS1tZXNzYWdlLnNoCmluZGV4IGU2YTlhMGQuLjAzOTJlMzYgMTAwNzU1Ci0tLSBhL3QvdDM0MDYtcmViYXNlLW1lc3NhZ2Uuc2gKKysrIGIvdC90MzQwNi1yZWJhc2UtbWVzc2FnZS5zaApAQCAtNCwyNyArNCwxNyBAQAogCiAuIC4vdGVzdC1saWIuc2gKIAotcXVpY2tfb25lICgpIHsKLQllY2hvICIkMSIgPiJmaWxlJDEiICYmCi0JZ2l0IGFkZCAiZmlsZSQxIiAmJgotCXRlc3RfdGljayAmJgotCWdpdCBjb21taXQgLW0gIiQxIgotfQordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBPIGZpbGVPICYmCisJdGVzdF9jb21taXQgWCBmaWxlWCAmJgorCXRlc3RfY29tbWl0IEEgZmlsZUEgJiYKKwl0ZXN0X2NvbW1pdCBCIGZpbGVCICYmCisJdGVzdF9jb21taXQgWSBmaWxlWSAmJgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKLQlxdWlja19vbmUgTyAmJgotCWdpdCBicmFuY2ggdG9waWMgJiYKLQlxdWlja19vbmUgWCAmJgotCXF1aWNrX29uZSBBICYmCi0JcXVpY2tfb25lIEIgJiYKLQlxdWlja19vbmUgWSAmJgotCi0JZ2l0IGNoZWNrb3V0IHRvcGljICYmCi0JcXVpY2tfb25lIEEgJiYKLQlxdWlja19vbmUgQiAmJgotCXF1aWNrX29uZSBaICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRvcGljIE8gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgQSBCICYmCisJdGVzdF9jb21taXQgWiBmaWxlWiAmJgogCWdpdCB0YWcgc3RhcnQKLQogJwogCiBjYXQgPmV4cGVjdCA8PFxFT0YKQEAgLTM0LDEyICsyNCwzMiBAQAogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtbScgJwotCiAJZ2l0IHJlYmFzZSAtbSBtYXN0ZXIgPnJlcG9ydCAmJgogCXNlZCAtbiAtZSAiL15BbHJlYWR5IGFwcGxpZWQ6IC9wIiBcCiAJCS1lICIvXkNvbW1pdHRlZDogL3AiIHJlcG9ydCA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgYWdhaW5zdCBtYXN0ZXIgdHdpY2UnICcKKwlnaXQgcmViYXNlIG1hc3RlciA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiQ3VycmVudCBicmFuY2ggdG9waWMgaXMgdXAgdG8gZGF0ZSIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBhZ2FpbnN0IG1hc3RlciB0d2ljZSB3aXRoIC0tZm9yY2UnICcKKwlnaXQgcmViYXNlIC0tZm9yY2UtcmViYXNlIG1hc3RlciA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiQ3VycmVudCBicmFuY2ggdG9waWMgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZCIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBhZ2FpbnN0IG1hc3RlciB0d2ljZSBmcm9tIGFub3RoZXIgYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IHRvcGljXiAmJgorCWdpdCByZWJhc2UgbWFzdGVyIHRvcGljID5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJDdXJyZW50IGJyYW5jaCB0b3BpYyBpcyB1cCB0byBkYXRlIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGZhc3QtZm9yd2FyZCB0byBtYXN0ZXInICcKKwlnaXQgY2hlY2tvdXQgdG9waWNeICYmCisJZ2l0IHJlYmFzZSB0b3BpYyA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiRmFzdC1mb3J3YXJkZWQgSEVBRCB0byB0b3BpYyIgb3V0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXN0YXQnICcKZGlmZiAtLWdpdCBhL3QvdDM0MDktcmViYXNlLXByZXNlcnZlLW1lcmdlcy5zaCBiL3QvdDM0MDktcmViYXNlLXByZXNlcnZlLW1lcmdlcy5zaAppbmRleCA2ZGU0ZTIyLi4yZTBjMzY0IDEwMDc1NQotLS0gYS90L3QzNDA5LXJlYmFzZS1wcmVzZXJ2ZS1tZXJnZXMuc2gKKysrIGIvdC90MzQwOS1yZWJhc2UtcHJlc2VydmUtbWVyZ2VzLnNoCkBAIC0xMSwxNCArMTEsNiBAQAogR0lUX0FVVEhPUl9FTUFJTD1ib2d1c19lbWFpbF9hZGRyZXNzCiBleHBvcnQgR0lUX0FVVEhPUl9FTUFJTAogCi0jIENsb25lIDEgKHRyaXZpYWwgbWVyZ2UpOgotIwotIyBBMS0tQTIgIDwtLSBvcmlnaW4vbWFzdGVyCi0jICBcICAgXAotIyAgIEIxLS1NICA8LS0gdG9waWMKLSMgICAgXAotIyAgICAgQjIgIDwtLSBvcmlnaW4vdG9waWMKLSMKICMgQ2xvbmUgMiAoY29uZmxpY3RpbmcgbWVyZ2UpOgogIwogIyBBMS0tQTItLUIzICAgPC0tIG9yaWdpbi9tYXN0ZXIKQEAgLTM2LDE2ICsyOCw2IEBACiAjICAgICBcLS1BMyAgICA8LS0gdG9waWMyCiAjICAgICAgXAogIyAgICAgICBCMiAgICAgPC0tIG9yaWdpbi90b3BpYwotIwotIyBDbG9uZSA0IChtZXJnZSB1c2luZyBzZWNvbmQgcGFyZW50IGFzIGJhc2UpOgotIwotIyBBMS0tQTItLUIzICAgPC0tIG9yaWdpbi9tYXN0ZXIKLSMgIFwKLSMgICBCMS0tQTMtLU0gIDwtLSB0b3BpYwotIyAgICBcICAgICAvCi0jICAgICBcLS1BNCAgICA8LS0gdG9waWMyCi0jICAgICAgXAotIyAgICAgICBCMiAgICAgPC0tIG9yaWdpbi90b3BpYwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgbWVyZ2UtcHJlc2VydmluZyByZWJhc2UnIFwKIAknZWNobyBGaXJzdCA+IEEgJiYKQEAgLTU4LDIwICs0MCw2IEBACiAJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgogCWVjaG8gVGhpcmQgPj4gQSAmJgogCWdpdCBjb21taXQgLWEgLW0gIk1vZGlmeSBBMiIgJiYKLQotCWdpdCBjbG9uZSAuLy4gY2xvbmUxICYmCi0JKGNkIGNsb25lMSAmJgotCWdpdCBjaGVja291dCAtYiB0b3BpYyBvcmlnaW4vdG9waWMgJiYKLQlnaXQgbWVyZ2Ugb3JpZ2luL21hc3RlcgotCSkgJiYKLQotCWdpdCBjbG9uZSAuLy4gY2xvbmU0ICYmCi0JKAotCQljZCBjbG9uZTQgJiYKLQkJZ2l0IGNoZWNrb3V0IC1iIHRvcGljIG9yaWdpbi90b3BpYyAmJgotCQlnaXQgbWVyZ2Ugb3JpZ2luL21hc3RlcgotCSkgJiYKLQogCWVjaG8gRmlmdGggPiBCICYmCiAJZ2l0IGFkZCBCICYmCiAJZ2l0IGNvbW1pdCAtbSAiQWRkIGRpZmZlcmVudCBCIiAmJgpAQCAtMTAxLDE2ICs2OSw2IEBACiAJZ2l0IGNvbW1pdCAtYSAtbSAiTW9kaWZ5IEIyIgogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLXAgZmFrZXMgaW50ZXJhY3RpdmUgcmViYXNlJyAnCi0JKAotCWNkIGNsb25lMSAmJgotCWdpdCBmZXRjaCAmJgotCWdpdCByZWJhc2UgLXAgb3JpZ2luL3RvcGljICYmCi0JdGVzdCAxID0gJChnaXQgcmV2LWxpc3QgLS1hbGwgLS1wcmV0dHk9b25lbGluZSB8IGdyZXAgIk1vZGlmeSBBIiB8IHdjIC1sKSAmJgotCXRlc3QgMSA9ICQoZ2l0IHJldi1saXN0IC0tYWxsIC0tcHJldHR5PW9uZWxpbmUgfCBncmVwICJNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICIgfCB3YyAtbCkKLQkpCi0nCi0KIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29udGludWUgd29ya3MgYWZ0ZXIgYSBjb25mbGljdCcgJwogCSgKIAljZCBjbG9uZTIgJiYKQEAgLTEzOCwxNSArOTYsNCBAQAogCSkKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1wIHdvcmtzIHdoZW4gYmFzZSBpbnNpZGUgc2Vjb25kIHBhcmVudCcgJwotCSgKLQljZCBjbG9uZTQgJiYKLQlnaXQgZmV0Y2ggJiYKLQlnaXQgcmViYXNlIC1wIEhFQUReMiAmJgotCXRlc3QgMSA9ICQoZ2l0IHJldi1saXN0IC0tYWxsIC0tcHJldHR5PW9uZWxpbmUgfCBncmVwICJNb2RpZnkgQSIgfCB3YyAtbCkgJiYKLQl0ZXN0IDEgPSAkKGdpdCByZXYtbGlzdCAtLWFsbCAtLXByZXR0eT1vbmVsaW5lIHwgZ3JlcCAiTW9kaWZ5IEIiIHwgd2MgLWwpICYmCi0JdGVzdCAxID0gJChnaXQgcmV2LWxpc3QgLS1hbGwgLS1wcmV0dHk9b25lbGluZSB8IGdyZXAgIk1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggIiB8IHdjIC1sKQotCSkKLScKLQogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDE1LXJlYmFzZS1hdXRvc3F1YXNoLnNoIGIvdC90MzQxNS1yZWJhc2UtYXV0b3NxdWFzaC5zaAppbmRleCBhMWU4NmM0Li40MTM3MGFiIDEwMDc1NQotLS0gYS90L3QzNDE1LXJlYmFzZS1hdXRvc3F1YXNoLnNoCisrKyBiL3QvdDM0MTUtcmViYXNlLWF1dG9zcXVhc2guc2gKQEAgLTQsNiArNCw4IEBACiAKIC4gLi90ZXN0LWxpYi5zaAogCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWJhc2Uuc2gKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCiAJZWNobyAwID5maWxlMCAmJgogCWdpdCBhZGQgLiAmJgpAQCAtMTkzLDQgKzE5NSw1OSBAQAogCXRlc3RfYXV0b19jb21taXRfZmxhZ3Mgc3F1YXNoIDIKICcKIAordGVzdF9hdXRvX2ZpeHVwX2ZpeHVwICgpIHsKKwlnaXQgcmVzZXQgLS1oYXJkIGJhc2UgJiYKKwllY2hvIDEgPmZpbGUxICYmCisJZ2l0IGFkZCAtdSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIiQxISBmaXJzdCIgJiYKKwllY2hvIDIgPmZpbGUxICYmCisJZ2l0IGFkZCAtdSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIiQxISAkMiEgZmlyc3QiICYmCisJZ2l0IHRhZyAiZmluYWwtJDEtJDIiICYmCisJdGVzdF90aWNrICYmCisJKAorCQlzZXRfY2F0X3RvZG9fZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1hdXRvc3F1YXNoIC1pIEhFQUReXl5eID5hY3R1YWwgJiYKKwkJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwkJcGljayAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXl5eKSBmaXJzdCBjb21taXQKKwkJJDEgJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF4pICQxISBmaXJzdAorCQkkMSAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAkMSEgJDIhIGZpcnN0CisJCXBpY2sgJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF5eKSBzZWNvbmQgY29tbWl0CisJCUVPRgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwkpICYmCisJZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2ggLWkgSEVBRF5eXl4gJiYKKwlnaXQgbG9nIC0tb25lbGluZSA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAiZmluYWwtJDEtJDIiICYmCisJdGVzdCAyID0gIiQoZ2l0IGNhdC1maWxlIGJsb2IgSEVBRF46ZmlsZTEpIiAmJgorCWlmIHRlc3QgIiQxIiA9ICJmaXh1cCIKKwl0aGVuCisJCXRlc3QgMSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IGdyZXAgZmlyc3QgfCB3YyAtbCkKKwllbGlmIHRlc3QgIiQxIiA9ICJzcXVhc2giCisJdGhlbgorCQl0ZXN0IDMgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBncmVwIGZpcnN0IHwgd2MgLWwpCisJZWxzZQorCQlmYWxzZQorCWZpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpeHVwISBmaXh1cCEnICcKKwl0ZXN0X2F1dG9fZml4dXBfZml4dXAgZml4dXAgZml4dXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZml4dXAhIHNxdWFzaCEnICcKKwl0ZXN0X2F1dG9fZml4dXBfZml4dXAgZml4dXAgc3F1YXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NxdWFzaCEgc3F1YXNoIScgJworCXRlc3RfYXV0b19maXh1cF9maXh1cCBzcXVhc2ggc3F1YXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NxdWFzaCEgZml4dXAhJyAnCisJdGVzdF9hdXRvX2ZpeHVwX2ZpeHVwIHNxdWFzaCBmaXh1cAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MjAtcmViYXNlLWF1dG9zdGFzaC5zaCBiL3QvdDM0MjAtcmViYXNlLWF1dG9zdGFzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MGViMjY0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzQyMC1yZWJhc2UtYXV0b3N0YXNoLnNoCkBAIC0wLDAgKzEsMTcwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEzIFJhbWt1bWFyIFJhbWFjaGFuZHJhCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLS1hdXRvc3Rhc2ggdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBoZWxsby13b3JsZCA+ZmlsZTAgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJpbml0aWFsIGNvbW1pdCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZmVhdHVyZS1icmFuY2ggJiYKKwllY2hvIGFub3RoZXItaGVsbG8gPmZpbGUxICYmCisJZWNobyBnb29kYnllID5maWxlMiAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInNlY29uZCBjb21taXQiICYmCisJZWNobyBmaW5hbC1nb29kYnllID5maWxlMyAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInRoaXJkIGNvbW1pdCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdW5yZWxhdGVkLW9udG8tYnJhbmNoIG1hc3RlciAmJgorCWVjaG8gdW5yZWxhdGVkID5maWxlNCAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInVucmVsYXRlZCBjb21taXQiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlbGF0ZWQtb250by1icmFuY2ggbWFzdGVyICYmCisJZWNobyBjb25mbGljdGluZy1jaGFuZ2UgPmZpbGUyICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAicmVsYXRlZCBjb21taXQiCisnCisKK3Rlc3RyZWJhc2UoKSB7CisJdHlwZT0kMQorCWRvdGVzdD0kMgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlJHR5cGU6IGRpcnR5IHdvcmt0cmVlLCBub24tY29uZmxpY3RpbmcgcmViYXNlIiAnCisJCXRlc3RfY29uZmlnIHJlYmFzZS5hdXRvc3Rhc2ggdHJ1ZSAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjaGVja291dCAtYiByZWJhc2VkLWZlYXR1cmUtYnJhbmNoIGZlYXR1cmUtYnJhbmNoICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgYnJhbmNoIC1EIHJlYmFzZWQtZmVhdHVyZS1icmFuY2ggJiYKKwkJZWNobyBkaXJ0eSA+PmZpbGUzICYmCisJCWdpdCByZWJhc2UkdHlwZSB1bnJlbGF0ZWQtb250by1icmFuY2ggJiYKKwkJZ3JlcCB1bnJlbGF0ZWQgZmlsZTQgJiYKKwkJZ3JlcCBkaXJ0eSBmaWxlMyAmJgorCQlnaXQgY2hlY2tvdXQgZmVhdHVyZS1icmFuY2gKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UkdHlwZTogZGlydHkgaW5kZXgsIG5vbi1jb25mbGljdGluZyByZWJhc2UiICcKKwkJdGVzdF9jb25maWcgcmViYXNlLmF1dG9zdGFzaCB0cnVlICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHJlYmFzZWQtZmVhdHVyZS1icmFuY2ggZmVhdHVyZS1icmFuY2ggJiYKKwkJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBicmFuY2ggLUQgcmViYXNlZC1mZWF0dXJlLWJyYW5jaCAmJgorCQllY2hvIGRpcnR5ID4+ZmlsZTMgJiYKKwkJZ2l0IGFkZCBmaWxlMyAmJgorCQlnaXQgcmViYXNlJHR5cGUgdW5yZWxhdGVkLW9udG8tYnJhbmNoICYmCisJCWdyZXAgdW5yZWxhdGVkIGZpbGU0ICYmCisJCWdyZXAgZGlydHkgZmlsZTMgJiYKKwkJZ2l0IGNoZWNrb3V0IGZlYXR1cmUtYnJhbmNoCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlJHR5cGU6IGNvbmZsaWN0aW5nIHJlYmFzZSIgJworCQl0ZXN0X2NvbmZpZyByZWJhc2UuYXV0b3N0YXNoIHRydWUgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgcmViYXNlZC1mZWF0dXJlLWJyYW5jaCBmZWF0dXJlLWJyYW5jaCAmJgorCQl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJyYW5jaCAtRCByZWJhc2VkLWZlYXR1cmUtYnJhbmNoICYmCisJCWVjaG8gZGlydHkgPj5maWxlMyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlJHR5cGUgcmVsYXRlZC1vbnRvLWJyYW5jaCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAkZG90ZXN0L2F1dG9zdGFzaCAmJgorCQkhIGdyZXAgZGlydHkgZmlsZTMgJiYKKwkJcm0gLXJmICRkb3Rlc3QgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY2hlY2tvdXQgZmVhdHVyZS1icmFuY2gKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UkdHlwZTogLS1jb250aW51ZSIgJworCQl0ZXN0X2NvbmZpZyByZWJhc2UuYXV0b3N0YXNoIHRydWUgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgcmViYXNlZC1mZWF0dXJlLWJyYW5jaCBmZWF0dXJlLWJyYW5jaCAmJgorCQl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJyYW5jaCAtRCByZWJhc2VkLWZlYXR1cmUtYnJhbmNoICYmCisJCWVjaG8gZGlydHkgPj5maWxlMyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlJHR5cGUgcmVsYXRlZC1vbnRvLWJyYW5jaCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAkZG90ZXN0L2F1dG9zdGFzaCAmJgorCQkhIGdyZXAgZGlydHkgZmlsZTMgJiYKKwkJZWNobyAiY29uZmxpY3RpbmctcGx1cy1nb29kYnllIiA+ZmlsZTIgJiYKKwkJZ2l0IGFkZCBmaWxlMiAmJgorCQlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgJGRvdGVzdC9hdXRvc3Rhc2ggJiYKKwkJZ3JlcCBkaXJ0eSBmaWxlMyAmJgorCQlnaXQgY2hlY2tvdXQgZmVhdHVyZS1icmFuY2gKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UkdHlwZTogLS1za2lwIiAnCisJCXRlc3RfY29uZmlnIHJlYmFzZS5hdXRvc3Rhc2ggdHJ1ZSAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjaGVja291dCAtYiByZWJhc2VkLWZlYXR1cmUtYnJhbmNoIGZlYXR1cmUtYnJhbmNoICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgYnJhbmNoIC1EIHJlYmFzZWQtZmVhdHVyZS1icmFuY2ggJiYKKwkJZWNobyBkaXJ0eSA+PmZpbGUzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UkdHlwZSByZWxhdGVkLW9udG8tYnJhbmNoICYmCisJCXRlc3RfcGF0aF9pc19maWxlICRkb3Rlc3QvYXV0b3N0YXNoICYmCisJCSEgZ3JlcCBkaXJ0eSBmaWxlMyAmJgorCQlnaXQgcmViYXNlIC0tc2tpcCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAkZG90ZXN0L2F1dG9zdGFzaCAmJgorCQlncmVwIGRpcnR5IGZpbGUzICYmCisJCWdpdCBjaGVja291dCBmZWF0dXJlLWJyYW5jaAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSR0eXBlOiAtLWFib3J0IiAnCisJCXRlc3RfY29uZmlnIHJlYmFzZS5hdXRvc3Rhc2ggdHJ1ZSAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjaGVja291dCAtYiByZWJhc2VkLWZlYXR1cmUtYnJhbmNoIGZlYXR1cmUtYnJhbmNoICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgYnJhbmNoIC1EIHJlYmFzZWQtZmVhdHVyZS1icmFuY2ggJiYKKwkJZWNobyBkaXJ0eSA+PmZpbGUzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UkdHlwZSByZWxhdGVkLW9udG8tYnJhbmNoICYmCisJCXRlc3RfcGF0aF9pc19maWxlICRkb3Rlc3QvYXV0b3N0YXNoICYmCisJCSEgZ3JlcCBkaXJ0eSBmaWxlMyAmJgorCQlnaXQgcmViYXNlIC0tYWJvcnQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgJGRvdGVzdC9hdXRvc3Rhc2ggJiYKKwkJZ3JlcCBkaXJ0eSBmaWxlMyAmJgorCQlnaXQgY2hlY2tvdXQgZmVhdHVyZS1icmFuY2gKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UkdHlwZTogbm9uLWNvbmZsaWN0aW5nIHJlYmFzZSwgY29uZmxpY3Rpbmcgc3Rhc2giICcKKwkJdGVzdF9jb25maWcgcmViYXNlLmF1dG9zdGFzaCB0cnVlICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHJlYmFzZWQtZmVhdHVyZS1icmFuY2ggZmVhdHVyZS1icmFuY2ggJiYKKwkJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBicmFuY2ggLUQgcmViYXNlZC1mZWF0dXJlLWJyYW5jaCAmJgorCQllY2hvIGRpcnR5ID5maWxlNCAmJgorCQlnaXQgYWRkIGZpbGU0ICYmCisJCWdpdCByZWJhc2UkdHlwZSB1bnJlbGF0ZWQtb250by1icmFuY2ggJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgJGRvdGVzdCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdyZXAgdW5yZWxhdGVkIGZpbGU0ICYmCisJCSEgZ3JlcCBkaXJ0eSBmaWxlNCAmJgorCQlnaXQgY2hlY2tvdXQgZmVhdHVyZS1icmFuY2ggJiYKKwkJZ2l0IHN0YXNoIHBvcCAmJgorCQlncmVwIGRpcnR5IGZpbGU0CisJJworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2U6IGZhc3QtZm9yd2FyZCByZWJhc2UiICcKKwl0ZXN0X2NvbmZpZyByZWJhc2UuYXV0b3N0YXNoIHRydWUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJlaGluZC1mZWF0dXJlLWJyYW5jaCBmZWF0dXJlLWJyYW5jaH4xICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBicmFuY2ggLUQgYmVoaW5kLWZlYXR1cmUtYnJhbmNoICYmCisJZWNobyBkaXJ0eSA+PmZpbGUxICYmCisJZ2l0IHJlYmFzZSBmZWF0dXJlLWJyYW5jaCAmJgorCWdyZXAgZGlydHkgZmlsZTEgJiYKKwlnaXQgY2hlY2tvdXQgZmVhdHVyZS1icmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlOiBub29wIHJlYmFzZSIgJworCXRlc3RfY29uZmlnIHJlYmFzZS5hdXRvc3Rhc2ggdHJ1ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2FtZS1mZWF0dXJlLWJyYW5jaCBmZWF0dXJlLWJyYW5jaCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgYnJhbmNoIC1EIHNhbWUtZmVhdHVyZS1icmFuY2ggJiYKKwllY2hvIGRpcnR5ID4+ZmlsZTEgJiYKKwlnaXQgcmViYXNlIGZlYXR1cmUtYnJhbmNoICYmCisJZ3JlcCBkaXJ0eSBmaWxlMSAmJgorCWdpdCBjaGVja291dCBmZWF0dXJlLWJyYW5jaAorJworCit0ZXN0cmViYXNlICIiIC5naXQvcmViYXNlLWFwcGx5Cit0ZXN0cmViYXNlICIgLS1tZXJnZSIgLmdpdC9yZWJhc2UtbWVyZ2UKK3Rlc3RyZWJhc2UgIiAtLWludGVyYWN0aXZlIiAuZ2l0L3JlYmFzZS1tZXJnZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MjEtcmViYXNlLXRvcG9sb2d5LWxpbmVhci5zaCBiL3QvdDM0MjEtcmViYXNlLXRvcG9sb2d5LWxpbmVhci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YzU1Y2JhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQyMS1yZWJhc2UtdG9wb2xvZ3ktbGluZWFyLnNoCkBAIC0wLDAgKzEsMzUwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgcmViYXNlIHRvcG9sb2d5IHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWJhc2Uuc2gKKworIyBhLS0tYi0tLWMKKyMgICAgICBcCisjICAgICAgIGQtLS1lCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGEgJiYKKwl0ZXN0X2NvbW1pdCBiICYmCisJdGVzdF9jb21taXQgYyAmJgorCWdpdCBjaGVja291dCBiICYmCisJdGVzdF9jb21taXQgZCAmJgorCXRlc3RfY29tbWl0IGUKKycKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInNpbXBsZSByZWJhc2UgJCoiICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogYyBlICYmCisJCXRlc3RfY21wX3JldiBjIEhFQUR+MiAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAnZCBlJyBjLi4KKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnJwordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIGlzIG5vLW9wIGlmIHVwc3RyZWFtIGlzIGFuIGFuY2VzdG9yIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIGIgZSAmJgorCQl0ZXN0X2NtcF9yZXYgZSBIRUFECisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJycKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtaQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLXAKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiAtZiByZXdyaXRlcyBldmVuIGlmIHVwc3RyZWFtIGlzIGFuIGFuY2VzdG9yIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIC1mIGIgZSAmJgorCQkhIHRlc3RfY21wX3JldiBlIEhFQUQgJiYKKwkJdGVzdF9jbXBfcmV2IGIgSEVBRH4yICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICdkIGUnIGIuLgorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICcnCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfcnVuX3JlYmFzZSBmYWlsdXJlIC1wCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogZmFzdC1mb3J3YXJkcyBmcm9tIGFuY2VzdG9yIG9mIHVwc3RyZWFtIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIGUgYiAmJgorCQl0ZXN0X2NtcF9yZXYgZSBIRUFECisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJycKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtaQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLXAKKworIyAgICAgICBmCisjICAgICAgLworIyBhLS0tYi0tLWMtLS1nLS0taAorIyAgICAgIFwKKyMgICAgICAgZC0tLWdwLS1pCisjCisjIGdwID0gY2hlcnJ5LXBpY2tlZCBnCisjIGggPSByZXZlcnRlZCBnCisjCisjIFJldmVydGVkIHBhdGNoZXMgYXJlIHRoZXJlIGZvciB0ZXN0cyB0byBiZSBhYmxlIHRvIGNoZWNrIGlmIGEgY29tbWl0CisjIHRoYXQgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2UgYXMgYW5vdGhlciBjb21taXQgaXMKKyMgZHJvcHBlZC4gV2l0aG91dCByZXZlcnRlZCBjb21taXRzLCB3ZSBjb3VsZCBnZXQgZmFsc2UgcG9zaXRpdmVzCisjIGJlY2F1c2UgYXBwbHlpbmcgdGhlIHBhdGNoIHN1Y2NlZWRzLCBidXQgc2ltcGx5IHJlc3VsdHMgaW4gbm8KKyMgY2hhbmdlcy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG9mIGxpbmVhciBoaXN0b3J5IGZvciByYW5nZSBzZWxlY3Rpb24gdGVzdHMnICcKKwlnaXQgY2hlY2tvdXQgYyAmJgorCXRlc3RfY29tbWl0IGcgJiYKKwlyZXZlcnQgaCBnICYmCisJZ2l0IGNoZWNrb3V0IGQgJiYKKwljaGVycnlfcGljayBncCBnICYmCisJdGVzdF9jb21taXQgaSAmJgorCWdpdCBjaGVja291dCBiICYmCisJdGVzdF9jb21taXQgZgorJworCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIGRyb3BzIHBhdGNoZXMgaW4gdXBzdHJlYW0iICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogaCBpICYmCisJCXRlc3RfY21wX3JldiBoIEhFQUR+MiAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAnZCBpJyBoLi4KKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnJwordGVzdF9ydW5fcmViYXNlIGZhaWx1cmUgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIGNhbiBkcm9wIGxhc3QgcGF0Y2ggaWYgaW4gdXBzdHJlYW0iICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogaCBncCAmJgorCQl0ZXN0X2NtcF9yZXYgaCBIRUFEXiAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAnZCcgaC4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJycKK3Rlc3RfcnVuX3JlYmFzZSBmYWlsdXJlIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtaQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLXAKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiAtLW9udG8gZHJvcHMgcGF0Y2hlcyBpbiB1cHN0cmVhbSIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiAtLW9udG8gZiBoIGkgJiYKKwkJdGVzdF9jbXBfcmV2IGYgSEVBRH4yICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICdkIGknIGYuLgorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICcnCit0ZXN0X3J1bl9yZWJhc2UgZmFpbHVyZSAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1wCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogLS1vbnRvIGRvZXMgbm90IGRyb3AgcGF0Y2hlcyBpbiBvbnRvIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIC0tb250byBoIGYgaSAmJgorCQl0ZXN0X2NtcF9yZXYgaCBIRUFEfjMgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ2QgZ3AgaScgaC4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJycKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtaQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLXAKKworIyBhLS0tYi0tLWMtLS1qIQorIyAgICAgIFwKKyMgICAgICAgZC0tLWshLS1sCisjCisjICEgPSBlbXB0eQordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgb2YgbGluZWFyIGhpc3RvcnkgZm9yIGVtcHR5IGNvbW1pdCB0ZXN0cycgJworCWdpdCBjaGVja291dCBjICYmCisJbWFrZV9lbXB0eSBqICYmCisJZ2l0IGNoZWNrb3V0IGQgJiYKKwltYWtlX2VtcHR5IGsgJiYKKwl0ZXN0X2NvbW1pdCBsCisnCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogZHJvcHMgZW1wdHkgY29tbWl0IiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIGMgbCAmJgorCQl0ZXN0X2NtcF9yZXYgYyBIRUFEfjIgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ2QgbCcgYy4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJycKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtaQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLXAKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiAtLWtlZXAtZW1wdHkiICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogLS1rZWVwLWVtcHR5IGMgbCAmJgorCQl0ZXN0X2NtcF9yZXYgYyBIRUFEfjMgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ2QgayBsJyBjLi4KKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnJwordGVzdF9ydW5fcmViYXNlIGZhaWx1cmUgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X3J1bl9yZWJhc2UgZmFpbHVyZSAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIC0ta2VlcC1lbXB0eSBrZWVwcyBlbXB0eSBldmVuIGlmIGFscmVhZHkgaW4gdXBzdHJlYW0iICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogLS1rZWVwLWVtcHR5IGogbCAmJgorCQl0ZXN0X2NtcF9yZXYgaiBIRUFEfjMgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ2QgayBsJyBqLi4KKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnJwordGVzdF9ydW5fcmViYXNlIGZhaWx1cmUgLW0KK3Rlc3RfcnVuX3JlYmFzZSBmYWlsdXJlIC1pCit0ZXN0X3J1bl9yZWJhc2UgZmFpbHVyZSAtcAorCisjICAgICAgIG0KKyMgICAgICAvCisjIGEtLS1iLS0tYy0tLWcKKyMKKyMgeC0tLXktLS1icAorIworIyBicCA9IGNoZXJyeS1waWNrZWQgYgorIyBtID0gcmV2ZXJ0ZWQgYgorIworIyBSZXZlcnRlZCBwYXRjaGVzIGFyZSB0aGVyZSBmb3IgdGVzdHMgdG8gYmUgYWJsZSB0byBjaGVjayBpZiBhIGNvbW1pdAorIyB0aGF0IGludHJvZHVjZWQgdGhlIHNhbWUgY2hhbmdlIGFzIGFub3RoZXIgY29tbWl0IGlzCisjIGRyb3BwZWQuIFdpdGhvdXQgcmV2ZXJ0ZWQgY29tbWl0cywgd2UgY291bGQgZ2V0IGZhbHNlIHBvc2l0aXZlcworIyBiZWNhdXNlIGFwcGx5aW5nIHRoZSBwYXRjaCBzdWNjZWVkcywgYnV0IHNpbXBseSByZXN1bHRzIGluIG5vCisjIGNoYW5nZXMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBvZiBsaW5lYXIgaGlzdG9yeSBmb3IgdGVzdCBpbnZvbHZpbmcgcm9vdCcgJworCWdpdCBjaGVja291dCBiICYmCisJcmV2ZXJ0IG0gYiAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBkaXNqb2ludCAmJgorCWdpdCBybSAtcmYgLiAmJgorCXRlc3RfY29tbWl0IHggJiYKKwl0ZXN0X2NvbW1pdCB5ICYmCisJY2hlcnJ5X3BpY2sgYnAgYgorJworCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIC0tb250byAtLXJvb3QiICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogLS1vbnRvIGMgLS1yb290IHkgJiYKKwkJdGVzdF9jbXBfcmV2IGMgSEVBRH4yICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICd4IHknIGMuLgorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICcnCit0ZXN0X3J1bl9yZWJhc2UgZmFpbHVyZSAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1wCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogd2l0aG91dCAtLW9udG8gLS1yb290IHdpdGggZGlzam9pbnQgaGlzdG9yeSIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiBjIHkgJiYKKwkJdGVzdF9jbXBfcmV2IGMgSEVBRH4yICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICd4IHknIGMuLgorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICcnCit0ZXN0X3J1bl9yZWJhc2UgZmFpbHVyZSAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfcnVuX3JlYmFzZSBmYWlsdXJlIC1wCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogLS1vbnRvIC0tcm9vdCBkcm9wcyBwYXRjaCBpbiBvbnRvIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIC0tb250byBtIC0tcm9vdCBicCAmJgorCQl0ZXN0X2NtcF9yZXYgbSBIRUFEfjIgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ3ggeScgbS4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJycKK3Rlc3RfcnVuX3JlYmFzZSBmYWlsdXJlIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtaQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLXAKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiAtLW9udG8gLS1yb290IHdpdGggbWVyZ2UtYmFzZSBkb2VzIG5vdCBnbyB0byByb290IiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIC0tb250byBtIC0tcm9vdCBnICYmCisJCXRlc3RfY21wX3JldiBtIEhFQUR+MiAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAnYyBnJyBtLi4KKwkiCit9CisKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICcnCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfcnVuX3JlYmFzZSBmYWlsdXJlIC1wCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogd2l0aG91dCAtLW9udG8gLS1yb290IHdpdGggZGlzam9pbnQgaGlzdG9yeSBkcm9wcyBwYXRjaCBpbiBvbnRvIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIG0gYnAgJiYKKwkJdGVzdF9jbXBfcmV2IG0gSEVBRH4yICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICd4IHknIG0uLgorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICcnCit0ZXN0X3J1bl9yZWJhc2UgZmFpbHVyZSAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfcnVuX3JlYmFzZSBmYWlsdXJlIC1wCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogLS1yb290IG9uIGxpbmVhciBoaXN0b3J5IGlzIGEgbm8tb3AiICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogLS1yb290IGMgJiYKKwkJdGVzdF9jbXBfcmV2IGMgSEVBRAorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBmYWlsdXJlICcnCit0ZXN0X3J1bl9yZWJhc2UgZmFpbHVyZSAtbQordGVzdF9ydW5fcmViYXNlIGZhaWx1cmUgLWkKK3Rlc3RfcnVuX3JlYmFzZSBmYWlsdXJlIC1wCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogLWYgLS1yb290IG9uIGxpbmVhciBoaXN0b3J5IGNhdXNlcyByZS13cml0ZSIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiAtZiAtLXJvb3QgYyAmJgorCQkhIHRlc3RfY21wX3JldiBhIEhFQUR+MiAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAnYSBiIGMnIEhFQUQKKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnJwordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtcAorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MjUtcmViYXNlLXRvcG9sb2d5LW1lcmdlcy5zaCBiL3QvdDM0MjUtcmViYXNlLXRvcG9sb2d5LW1lcmdlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZDE5NWZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQyNS1yZWJhc2UtdG9wb2xvZ3ktbWVyZ2VzLnNoCkBAIC0wLDAgKzEsMjU4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmViYXNlIHRvcG9sb2d5IHRlc3RzIHdpdGggbWVyZ2VzJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWJhc2Uuc2gKKwordGVzdF9yZXZpc2lvbl9zdWJqZWN0cyAoKSB7CisJZXhwZWN0ZWQ9IiQxIgorCXNoaWZ0CisJc2V0IC0tICQoZ2l0IGxvZyAtLWZvcm1hdD0lcyAtLW5vLXdhbGs9dW5zb3J0ZWQgIiRAIikKKwl0ZXN0ICIkZXhwZWN0ZWQiID0gIiQqIgorfQorCisjIGEtLS1iLS0tLS0tLS0tLS1jCisjICAgICAgXCAgICAgICAgICAgXAorIyAgICAgICBkLS0tLS0tLWUgICBcCisjICAgICAgICBcICAgICAgIFwgICBcCisjICAgICAgICAgbi0tLW8tLS13LS0tdgorIyAgICAgICAgICAgICAgXAorIyAgICAgICAgICAgICAgIHoKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG9mIG5vbi1saW5lYXItaGlzdG9yeScgJworCXRlc3RfY29tbWl0IGEgJiYKKwl0ZXN0X2NvbW1pdCBiICYmCisJdGVzdF9jb21taXQgYyAmJgorCWdpdCBjaGVja291dCBiICYmCisJdGVzdF9jb21taXQgZCAmJgorCXRlc3RfY29tbWl0IGUKKworCWdpdCBjaGVja291dCBjICYmCisJdGVzdF9jb21taXQgZyAmJgorCXJldmVydCBoIGcgJiYKKwlnaXQgY2hlY2tvdXQgZCAmJgorCWNoZXJyeV9waWNrIGdwIGcgJiYKKwl0ZXN0X2NvbW1pdCBpICYmCisJZ2l0IGNoZWNrb3V0IGIgJiYKKwl0ZXN0X2NvbW1pdCBmCisKKwlnaXQgY2hlY2tvdXQgZCAmJgorCXRlc3RfY29tbWl0IG4gJiYKKwl0ZXN0X2NvbW1pdCBvICYmCisJdGVzdF9tZXJnZSB3IGUgJiYKKwl0ZXN0X21lcmdlIHYgYyAmJgorCWdpdCBjaGVja291dCBvICYmCisJdGVzdF9jb21taXQgegorJworCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIGFmdGVyIG1lcmdlIGZyb20gdXBzdHJlYW0iICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogZSB3ICYmCisJCXRlc3RfY21wX3JldiBlIEhFQUR+MiAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAnbiBvJyBlLi4KKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnJwordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwlleHBlY3RlZD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIG9mIG5vbi1saW5lYXIgaGlzdG9yeSBpcyBsaW5lYXJpemVkIGluIHBsYWNlIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIGQgdyAmJgorCQl0ZXN0X2NtcF9yZXYgZCBIRUFEfjMgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgIlwnIiRleHBlY3RlZCJcJyIgZC4uCisJIgorfQorI1RPRE86IG1ha2Ugb3JkZXIgY29uc2lzdGVudCBhY3Jvc3MgYWxsIGZsYXZvcnMgb2YgcmViYXNlCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnZSBuIG8nICcnCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnZSBuIG8nIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnbiBvIGUnIC1pCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwlleHBlY3RlZD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIG9mIG5vbi1saW5lYXIgaGlzdG9yeSBpcyBsaW5lYXJpemVkIHVwc3RyZWFtIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIGMgdyAmJgorCQl0ZXN0X2NtcF9yZXYgYyBIRUFEfjQgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgIlwnIiRleHBlY3RlZCJcJyIgYy4uCisJIgorfQorI1RPRE86IG1ha2Ugb3JkZXIgY29uc2lzdGVudCBhY3Jvc3MgYWxsIGZsYXZvcnMgb2YgcmViYXNlCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnZCBlIG4gbycgJycKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICdkIGUgbiBvJyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJ2QgbiBvIGUnIC1pCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwlleHBlY3RlZD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIG9mIG5vbi1saW5lYXIgaGlzdG9yeSB3aXRoIG1lcmdlcyBhZnRlciB1cHN0cmVhbSBtZXJnZSBpcyBsaW5lYXJpemVkIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIGMgdiAmJgorCQl0ZXN0X2NtcF9yZXYgYyBIRUFEfjQgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgIlwnIiRleHBlY3RlZCJcJyIgYy4uCisJIgorfQorI1RPRE86IG1ha2Ugb3JkZXIgY29uc2lzdGVudCBhY3Jvc3MgYWxsIGZsYXZvcnMgb2YgcmViYXNlCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnZCBlIG4gbycgJycKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICdkIGUgbiBvJyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJ2QgbiBvIGUnIC1pCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAtcCBpcyBuby1vcCBpbiBub24tbGluZWFyIGhpc3RvcnkiICIKKwlyZXNldF9yZWJhc2UgJiYKKwlnaXQgcmViYXNlIC1wIGQgdyAmJgorCXRlc3RfY21wX3JldiB3IEhFQUQKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlIC1wIGlzIG5vLW9wIHdoZW4gYmFzZSBpbnNpZGUgc2Vjb25kIHBhcmVudCIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgZSB3ICYmCisJdGVzdF9jbXBfcmV2IHcgSEVBRAorIgorCit0ZXN0X2V4cGVjdF9mYWlsdXJlICJyZWJhc2UgLXAgLS1yb290IG9uIG5vbi1saW5lYXIgaGlzdG9yeSBpcyBhIG5vLW9wIiAiCisJcmVzZXRfcmViYXNlICYmCisJZ2l0IHJlYmFzZSAtcCAtLXJvb3QgdyAmJgorCXRlc3RfY21wX3JldiB3IEhFQUQKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlIC1wIHJlLWNyZWF0ZXMgbWVyZ2UgZnJvbSBzaWRlIGJyYW5jaCIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgeiB3ICYmCisJdGVzdF9jbXBfcmV2IHogSEVBRF4gJiYKKwl0ZXN0X2NtcF9yZXYgd14yIEhFQUReMgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UgLXAgcmUtY3JlYXRlcyBpbnRlcm5hbCBtZXJnZSIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgYyB3ICYmCisJdGVzdF9jbXBfcmV2IGMgSEVBRH40ICYmCisJdGVzdF9jbXBfcmV2IEhFQUReMl4gSEVBRH4zICYmCisJdGVzdF9yZXZpc2lvbl9zdWJqZWN0cyAnZCBuIGUgbyB3JyBIRUFEfjMgSEVBRH4yIEhFQUReMiBIRUFEXiBIRUFECisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAtcCBjYW4gcmUtY3JlYXRlIHR3byBicmFuY2hlcyBvbiBvbnRvIiAiCisJcmVzZXRfcmViYXNlICYmCisJZ2l0IHJlYmFzZSAtcCAtLW9udG8gYyBkIHcgJiYKKwl0ZXN0X2NtcF9yZXYgYyBIRUFEfjMgJiYKKwl0ZXN0X2NtcF9yZXYgYyBIRUFEXjJeICYmCisJdGVzdF9yZXZpc2lvbl9zdWJqZWN0cyAnbiBlIG8gdycgSEVBRH4yIEhFQUReMiBIRUFEXiBIRUFECisiCisKKyMgICAgICAgZgorIyAgICAgIC8KKyMgYS0tLWItLS1jLS0tZy0tLWgKKyMgICAgICBcCisjICAgICAgIGQtLS1ncC0taQorIyAgICAgICAgXCAgICAgICBcCisjICAgICAgICAgZS0tLS0tLS11CisjCisjIGdwID0gY2hlcnJ5LXBpY2tlZCBnCisjIGggPSByZXZlcnRlZCBnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBvZiBub24tbGluZWFyLWhpc3RvcnkgZm9yIHBhdGNoLWVxdWl2YWxlbmNlIHRlc3RzJyAnCisJZ2l0IGNoZWNrb3V0IGUgJiYKKwl0ZXN0X21lcmdlIHUgaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UgLXAgcmUtY3JlYXRlcyBoaXN0b3J5IGFyb3VuZCBkcm9wcGVkIGNvbW1pdCBtYXRjaGluZyB1cHN0cmVhbSIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgaCB1ICYmCisJdGVzdF9jbXBfcmV2IGggSEVBRH4zICYmCisJdGVzdF9jbXBfcmV2IEhFQUReMl4gSEVBRH4yICYmCisJdGVzdF9yZXZpc2lvbl9zdWJqZWN0cyAnZCBpIGUgdScgSEVBRH4yIEhFQUReMiBIRUFEXiBIRUFECisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAtcCAtLW9udG8gaW4gbWVyZ2VkIGhpc3RvcnkgZHJvcHMgcGF0Y2hlcyBpbiB1cHN0cmVhbSIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgLS1vbnRvIGYgaCB1ICYmCisJdGVzdF9jbXBfcmV2IGYgSEVBRH4zICYmCisJdGVzdF9jbXBfcmV2IEhFQUReMl4gSEVBRH4yICYmCisJdGVzdF9yZXZpc2lvbl9zdWJqZWN0cyAnZCBpIGUgdScgSEVBRH4yIEhFQUReMiBIRUFEXiBIRUFECisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAtcCAtLW9udG8gaW4gbWVyZ2VkIGhpc3RvcnkgZG9lcyBub3QgZHJvcCBwYXRjaGVzIGluIG9udG8iICIKKwlyZXNldF9yZWJhc2UgJiYKKwlnaXQgcmViYXNlIC1wIC0tb250byBoIGYgdSAmJgorCXRlc3RfY21wX3JldiBoIEhFQUR+MyAmJgorCXRlc3RfY21wX3JldiBIRUFEXjJ+MiBIRUFEfjIgJiYKKwl0ZXN0X3JldmlzaW9uX3N1YmplY3RzICdkIGdwIGkgZSB1JyBIRUFEfjIgSEVBRF4yXiBIRUFEXjIgSEVBRF4gSEVBRAorIgorCisjIGEtLS1iLS0tYy0tLWctLS1oCisjICAgICAgXAorIyAgICAgICBkLS0tZ3AtLXMKKyMgICAgICAgIFwgICBcIC8KKyMgICAgICAgICBcICAgWAorIyAgICAgICAgICBcIC8gXAorIyAgICAgICAgICAgZS0tLXQKKyMKKyMgZ3AgPSBjaGVycnktcGlja2VkIGcKKyMgaCA9IHJldmVydGVkIGcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG9mIG5vbi1saW5lYXItaGlzdG9yeSBmb3IgZHJvcHBpbmcgd2hvbGUgc2lkZScgJworCWdpdCBjaGVja291dCBncCAmJgorCXRlc3RfbWVyZ2UgcyBlICYmCisJZ2l0IGNoZWNrb3V0IGUgJiYKKwl0ZXN0X21lcmdlIHQgZ3AKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAicmViYXNlIC1wIGRyb3BzIG1lcmdlIGNvbW1pdCB3aGVuIGVudGlyZSBmaXJzdC1wYXJlbnQgc2lkZSBpcyBkcm9wcGVkIiAiCisJcmVzZXRfcmViYXNlICYmCisJZ2l0IHJlYmFzZSAtcCBoIHMgJiYKKwl0ZXN0X2NtcF9yZXYgaCBIRUFEfjIgJiYKKwl0ZXN0X2xpbmVhcl9yYW5nZSAnZCBlJyBoLi4KKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlIC1wIGRyb3BzIG1lcmdlIGNvbW1pdCB3aGVuIGVudGlyZSBzZWNvbmQtcGFyZW50IHNpZGUgaXMgZHJvcHBlZCIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgaCB0ICYmCisJdGVzdF9jbXBfcmV2IGggSEVBRH4yICYmCisJdGVzdF9saW5lYXJfcmFuZ2UgJ2QgZScgaC4uCisiCisKKyMgYS0tLWItLS1jCisjICAgICAgXAorIyAgICAgICBkLS0tZQorIyAgICAgICAgXCAgIFwKKyMgICAgICAgICBuLS0tcgorIyAgICAgICAgICBcCisjICAgICAgICAgICBvCisjCisjIHIgPSB0cmVlLXNhbWUgd2l0aCBuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBvZiBub24tbGluZWFyLWhpc3RvcnkgZm9yIGVtcHR5IGNvbW1pdHMnICcKKwlnaXQgY2hlY2tvdXQgbiAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCBlICYmCisJZ2l0IHJlc2V0IG4gLiAmJgorCWdpdCBjb21taXQgLW0gciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2xlYW4gLWYgJiYKKwlnaXQgdGFnIHIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlIC1wIHJlLWNyZWF0ZXMgZW1wdHkgaW50ZXJuYWwgbWVyZ2UgY29tbWl0IiAiCisJcmVzZXRfcmViYXNlICYmCisJZ2l0IHJlYmFzZSAtcCBjIHIgJiYKKwl0ZXN0X2NtcF9yZXYgYyBIRUFEfjMgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF4yXiBIRUFEfjIgJiYKKwl0ZXN0X3JldmlzaW9uX3N1YmplY3RzICdkIGUgbiByJyBIRUFEfjIgSEVBRF4yIEhFQUReIEhFQUQKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlIC1wIHJlLWNyZWF0ZXMgZW1wdHkgbWVyZ2UgY29tbWl0IiAiCisJcmVzZXRfcmViYXNlICYmCisJZ2l0IHJlYmFzZSAtcCBvIHIgJiYKKwl0ZXN0X2NtcF9yZXYgZSBIRUFEXjIgJiYKKwl0ZXN0X2NtcF9yZXYgbyBIRUFEXiAmJgorCXRlc3RfcmV2aXNpb25fc3ViamVjdHMgJ3InIEhFQUQKKyIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTA1LWNoZXJyeS1waWNrLWVtcHR5LnNoIGIvdC90MzUwNS1jaGVycnktcGljay1lbXB0eS5zaAppbmRleCBhMGM2ZTMwLi5mYmRjNDdjIDEwMDc1NQotLS0gYS90L3QzNTA1LWNoZXJyeS1waWNrLWVtcHR5LnNoCisrKyBiL3QvdDM1MDUtY2hlcnJ5LXBpY2stZW1wdHkuc2gKQEAgLTI4LDI5ICsyOCwyMSBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBhbiBlbXB0eSBjb21taXQnICcKLQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmIHsKLQkJZ2l0IGNoZXJyeS1waWNrIGVtcHR5LWJyYW5jaF4KLQkJdGVzdCAiJD8iID0gMQotCX0KKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjaGVycnktcGljayBlbXB0eS1icmFuY2heCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4IGxvY2tmaWxlIHdhcyByZW1vdmVkJyAnCi0KIAl0ZXN0ICEgLWYgLmdpdC9pbmRleC5sb2NrCi0KICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgYSBjb21taXQgd2l0aCBhbiBlbXB0eSBtZXNzYWdlJyAnCi0JZ2l0IGNoZWNrb3V0IG1hc3RlciAmJiB7Ci0JCWdpdCBjaGVycnktcGljayBlbXB0eS1icmFuY2gKLQkJdGVzdCAiJD8iID0gMQotCX0KKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjaGVycnktcGljayBlbXB0eS1icmFuY2gKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXggbG9ja2ZpbGUgd2FzIHJlbW92ZWQnICcKLQogCXRlc3QgISAtZiAuZ2l0L2luZGV4LmxvY2sKLQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBhIGNvbW1pdCB3aXRoIGFuIGVtcHR5IG1lc3NhZ2Ugd2l0aCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UnICcKQEAgLTEwMSw3ICs5Myw3IEBACiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWdpdCBjaGVja291dCBmb3JrXjAgJiYKIAlnaXQgY2hlcnJ5LXBpY2sgLS1rZWVwLXJlZHVuZGFudC1jb21taXRzIG1hc3RlciAmJgotCWdpdCBzaG93IC1zIC0tZm9ybWF0PSclcycgPmFjdHVhbCAmJgorCWdpdCBzaG93IC1zIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKIAllY2hvICJhZGQgZmlsZTIgb24gbWFzdGVyIiA+ZXhwZWN0ICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwpkaWZmIC0tZ2l0IGEvdC90MzUwOS1jaGVycnktcGljay1tZXJnZS1kZi5zaCBiL3QvdDM1MDktY2hlcnJ5LXBpY2stbWVyZ2UtZGYuc2gKaW5kZXggZGY5MjFkMS4uYTViNmE1ZiAxMDA3NTUKLS0tIGEvdC90MzUwOS1jaGVycnktcGljay1tZXJnZS1kZi5zaAorKysgYi90L3QzNTA5LWNoZXJyeS1waWNrLW1lcmdlLWRmLnNoCkBAIC0xMCwxNyArMTAsMTUgQEAKIAlnaXQgY29tbWl0IC1tIGEKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnU2V0dXAgcmVuYW1lIGFjcm9zcyBwYXRocyBlYWNoIGJlbG93IEQvRiBjb25mbGljdHMnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NldHVwIHJlbmFtZSBhY3Jvc3MgcGF0aHMgZWFjaCBiZWxvdyBEL0YgY29uZmxpY3RzJyAnCiAJbWtkaXIgYiAmJgotCWxuIC1zIC4uL2EgYi9hICYmCi0JZ2l0IGFkZCBiICYmCisJdGVzdF9sbl9zX2FkZCAuLi9hIGIvYSAmJgogCWdpdCBjb21taXQgLW0gYiAmJgogCiAJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCAmJgogCXJtIGIvYSAmJgotCW12IGEgYi9hICYmCi0JbG4gLXMgYi9hIGEgJiYKLQlnaXQgYWRkIC4gJiYKKwlnaXQgbXYgYSBiL2EgJiYKKwl0ZXN0X2xuX3NfYWRkIGIvYSBhICYmCiAJZ2l0IGNvbW1pdCAtbSBzd2FwICYmCiAKIAk+ZjEgJiYKQEAgLTI4LDcgKzI2LDcgQEAKIAlnaXQgY29tbWl0IC1tIGYxCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ0NoZXJyeS1waWNrIHN1Y2NlZWRzIHdpdGggcmVuYW1lIGFjcm9zcyBEL0YgY29uZmxpY3RzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVycnktcGljayBzdWNjZWVkcyB3aXRoIHJlbmFtZSBhY3Jvc3MgRC9GIGNvbmZsaWN0cycgJwogCWdpdCByZXNldCAtLWhhcmQgJiYKIAlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKIAlnaXQgY2hlcnJ5LXBpY2sgYnJhbmNoCmRpZmYgLS1naXQgYS90L3QzNjAwLXJtLnNoIGIvdC90MzYwMC1ybS5zaAppbmRleCAwYzQ0ZTlmLi41Yzg3YjU1IDEwMDc1NQotLS0gYS90L3QzNjAwLXJtLnNoCisrKyBiL3QvdDM2MDAtcm0uc2gKQEAgLTY4Nyw0ICs2ODcsMTAwIEBACiAJdGVzdF9wYXRoX2lzX2ZpbGUgZS9mCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciB0ZXN0aW5nIHJtIG1lc3NhZ2VzJyAnCisJPmJhci50eHQgJiYKKwk+Zm9vLnR4dCAmJgorCWdpdCBhZGQgYmFyLnR4dCBmb28udHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIGZpbGVzIHdpdGggZGlmZmVyZW50IHN0YWdlZCBjb250ZW50JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWVycm9yOiB0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGUKKwlmaWxlIGFuZCB0aGUgSEVBRDoKKwkgICAgYmFyLnR4dAorCSAgICBmb28udHh0CisJKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKQorCUVPRgorCWVjaG8gY29udGVudDEgPmZvby50eHQgJiYKKwllY2hvIGNvbnRlbnQxID5iYXIudHh0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIGZvby50eHQgYmFyLnR4dCAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIGZpbGVzIHdpdGggZGlmZmVyZW50IHN0YWdlZCBjb250ZW50IHdpdGhvdXQgaGludHMnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZXJyb3I6IHRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZQorCWZpbGUgYW5kIHRoZSBIRUFEOgorCSAgICBiYXIudHh0CisJICAgIGZvby50eHQKKwlFT0YKKwllY2hvIGNvbnRlbnQyID5mb28udHh0ICYmCisJZWNobyBjb250ZW50MiA+YmFyLnR4dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBhZHZpY2Uucm1oaW50cz1mYWxzZSBybSBmb28udHh0IGJhci50eHQgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSBmaWxlIHdpdGggbG9jYWwgbW9kaWZpY2F0aW9uJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWVycm9yOiB0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGxvY2FsIG1vZGlmaWNhdGlvbnM6CisJICAgIGZvby50eHQKKwkodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpCisJRU9GCisJZ2l0IGNvbW1pdCAtbSAidGVzdGluZyBybSAzIiAmJgorCWVjaG8gY29udGVudDMgPmZvby50eHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gZm9vLnR4dCAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIGZpbGUgd2l0aCBsb2NhbCBtb2RpZmljYXRpb24gd2l0aG91dCBoaW50cycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwllcnJvcjogdGhlIGZvbGxvd2luZyBmaWxlIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zOgorCSAgICBiYXIudHh0CisJRU9GCisJZWNobyBjb250ZW50NCA+YmFyLnR4dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBhZHZpY2Uucm1oaW50cz1mYWxzZSBybSBiYXIudHh0IDI+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gZmlsZSB3aXRoIGNoYW5nZXMgaW4gdGhlIGluZGV4JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWVycm9yOiB0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoKKwkgICAgZm9vLnR4dAorCSh1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkKKwlFT0YKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBjb250ZW50NSA+Zm9vLnR4dCAmJgorCWdpdCBhZGQgZm9vLnR4dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBmb28udHh0IDI+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gZmlsZSB3aXRoIGNoYW5nZXMgaW4gdGhlIGluZGV4IHdpdGhvdXQgaGludHMnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZXJyb3I6IHRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OgorCSAgICBmb28udHh0CisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGFkdmljZS5ybWhpbnRzPWZhbHNlIHJtIGZvby50eHQgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSBmaWxlcyB3aXRoIHR3byBkaWZmZXJlbnQgZXJyb3JzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWVycm9yOiB0aGUgZm9sbG93aW5nIGZpbGUgaGFzIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlCisJZmlsZSBhbmQgdGhlIEhFQUQ6CisJICAgIGZvbzEudHh0CisJKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKQorCWVycm9yOiB0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoKKwkgICAgYmFyMS50eHQKKwkodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpCisJRU9GCisJZWNobyBjb250ZW50ID5mb28xLnR4dCAmJgorCWdpdCBhZGQgZm9vMS50eHQgJiYKKwllY2hvIGNvbnRlbnQ2ID5mb28xLnR4dCAmJgorCWVjaG8gY29udGVudDYgPmJhcjEudHh0ICYmCisJZ2l0IGFkZCBiYXIxLnR4dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBiYXIxLnR4dCBmb28xLnR4dCAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzcwMC1hZGQuc2ggYi90L3QzNzAwLWFkZC5zaAppbmRleCA4NzRiM2E2Li5hYWI4NmU4IDEwMDc1NQotLS0gYS90L3QzNzAwLWFkZC5zaAorKysgYi90L3QzNzAwLWFkZC5zaApAQCAtMzAsMTAgKzMwLDkgQEAKIAkgKikgZWNobyBmYWlsOyBnaXQgbHMtZmlsZXMgLS1zdGFnZSB4Zm9vMTsgKGV4aXQgMSk7OwogCSBlc2FjJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdnaXQgYWRkOiBmaWxlbW9kZT0wIHNob3VsZCBub3QgZ2V0IGNvbmZ1c2VkIGJ5IHN5bWxpbmsnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQ6IGZpbGVtb2RlPTAgc2hvdWxkIG5vdCBnZXQgY29uZnVzZWQgYnkgc3ltbGluaycgJwogCXJtIC1mIHhmb28xICYmCi0JbG4gLXMgZm9vIHhmb28xICYmCi0JZ2l0IGFkZCB4Zm9vMSAmJgorCXRlc3RfbG5fc19hZGQgZm9vIHhmb28xICYmCiAJY2FzZSAiYGdpdCBscy1maWxlcyAtLXN0YWdlIHhmb28xYCIgaW4KIAkxMjAwMDAiICIqeGZvbzEpIGVjaG8gcGFzczs7CiAJKikgZWNobyBmYWlsOyBnaXQgbHMtZmlsZXMgLS1zdGFnZSB4Zm9vMTsgKGV4aXQgMSk7OwpAQCAtNTEsMjEgKzUwLDE5IEBACiAJICopIGVjaG8gZmFpbDsgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgeGZvbzI7IChleGl0IDEpOzsKIAkgZXNhYycKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZ2l0IGFkZDogZmlsZW1vZGU9MCBzaG91bGQgbm90IGdldCBjb25mdXNlZCBieSBzeW1saW5rJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkOiBmaWxlbW9kZT0wIHNob3VsZCBub3QgZ2V0IGNvbmZ1c2VkIGJ5IHN5bWxpbmsnICcKIAlybSAtZiB4Zm9vMiAmJgotCWxuIC1zIGZvbyB4Zm9vMiAmJgotCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgeGZvbzIgJiYKKwl0ZXN0X2xuX3NfYWRkIGZvbyB4Zm9vMiAmJgogCWNhc2UgImBnaXQgbHMtZmlsZXMgLS1zdGFnZSB4Zm9vMmAiIGluCiAJMTIwMDAwIiAiKnhmb28yKSBlY2hvIHBhc3M7OwogCSopIGVjaG8gZmFpbDsgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgeGZvbzI7IChleGl0IDEpOzsKIAllc2FjCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQ6IFRlc3QgdGhhdCBleGVjdXRhYmxlIGJpdCBpcyBub3QgdXNlZC4uLicgXAogCSdnaXQgY29uZmlnIGNvcmUuZmlsZW1vZGUgMCAmJgotCSBsbiAtcyB4Zm9vMiB4Zm9vMyAmJgotCSBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHhmb28zICYmCisJIHRlc3RfbG5fc19hZGQgeGZvbzIgeGZvbzMgJiYJIyBydW5zIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQKIAkgY2FzZSAiYGdpdCBscy1maWxlcyAtLXN0YWdlIHhmb28zYCIgaW4KIAkgMTIwMDAwIiAiKnhmb28zKSBlY2hvIHBhc3M7OwogCSAqKSBlY2hvIGZhaWw7IGdpdCBscy1maWxlcyAtLXN0YWdlIHhmb28zOyAoZXhpdCAxKTs7CmRpZmYgLS1naXQgYS90L3QzOTAwLWkxOG4tY29tbWl0LnNoIGIvdC90MzkwMC1pMThuLWNvbW1pdC5zaAppbmRleCAzN2RkYWJiLi4zOGIwMGMzIDEwMDc1NQotLS0gYS90L3QzOTAwLWkxOG4tY29tbWl0LnNoCisrKyBiL3QvdDM5MDAtaTE4bi1jb21taXQuc2gKQEAgLTM5LDYgKzM5LDQyIEBACiAJZ2l0IGNvbW1pdCAtYSAtRiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC9VVEYtMTYudHh0CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1VURi04IGludmFsaWQgY2hhcmFjdGVycyByZWZ1c2VkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAkSE9NRS9zdGRlcnIgJEhPTUUvaW52YWxpZCIgJiYKKwllY2hvICJVVEYtOCBjaGFyYWN0ZXJzIiA+RiAmJgorCXByaW50ZiAiQ29tbWl0IG1lc3NhZ2VcblxuSW52YWxpZCBzdXJyb2dhdGU6XDM1NVwyNDBcMjAwXG4iIFwKKwkJPiIkSE9NRS9pbnZhbGlkIiAmJgorCWdpdCBjb21taXQgLWEgLUYgIiRIT01FL2ludmFsaWQiIDI+IiRIT01FIi9zdGRlcnIgJiYKKwlncmVwICJkaWQgbm90IGNvbmZvcm0iICIkSE9NRSIvc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1VURi04IG92ZXJsb25nIHNlcXVlbmNlcyByZWplY3RlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgJEhPTUUvc3RkZXJyICRIT01FL2ludmFsaWQiICYmCisJcm0gLWYgIiRIT01FL3N0ZGVyciIgIiRIT01FL2ludmFsaWQiICYmCisJZWNobyAiVVRGLTggb3ZlcmxvbmciID5GICYmCisJcHJpbnRmICJcMzQwXDIwMlwyNTFvbW1pdCBtZXNzYWdlXG5cblRoaXMgaXMgbm90IGEgc3BhY2U6XDMwMFwyNDBcbiIgXAorCQk+IiRIT01FL2ludmFsaWQiICYmCisJZ2l0IGNvbW1pdCAtYSAtRiAiJEhPTUUvaW52YWxpZCIgMj4iJEhPTUUiL3N0ZGVyciAmJgorCWdyZXAgImRpZCBub3QgY29uZm9ybSIgIiRIT01FIi9zdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVVRGLTggbm9uLWNoYXJhY3RlcnMgcmVmdXNlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgJEhPTUUvc3RkZXJyICRIT01FL2ludmFsaWQiICYmCisJZWNobyAiVVRGLTggbm9uLWNoYXJhY3RlciAxIiA+RiAmJgorCXByaW50ZiAiQ29tbWl0IG1lc3NhZ2VcblxuTm9uLWNoYXJhY3RlcjpcMzY0XDIxN1wyNzdcMjc2XG4iIFwKKwkJPiIkSE9NRS9pbnZhbGlkIiAmJgorCWdpdCBjb21taXQgLWEgLUYgIiRIT01FL2ludmFsaWQiIDI+IiRIT01FIi9zdGRlcnIgJiYKKwlncmVwICJkaWQgbm90IGNvbmZvcm0iICIkSE9NRSIvc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1VURi04IG5vbi1jaGFyYWN0ZXJzIHJlZnVzZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mICRIT01FL3N0ZGVyciAkSE9NRS9pbnZhbGlkIiAmJgorCWVjaG8gIlVURi04IG5vbi1jaGFyYWN0ZXIgMi4iID5GICYmCisJcHJpbnRmICJDb21taXQgbWVzc2FnZVxuXG5Ob24tY2hhcmFjdGVyOlwzNTdcMjY3XDIyMFxuIiBcCisJCT4iJEhPTUUvaW52YWxpZCIgJiYKKwlnaXQgY29tbWl0IC1hIC1GICIkSE9NRS9pbnZhbGlkIiAyPiIkSE9NRSIvc3RkZXJyICYmCisJZ3JlcCAiZGlkIG5vdCBjb25mb3JtIiAiJEhPTUUiL3N0ZGVycgorJwogCiBmb3IgSCBpbiBJU084ODU5LTEgZXVjSlAgSVNPLTIwMjItSlAKIGRvCmRpZmYgLS1naXQgYS90L3QzOTAzLXN0YXNoLnNoIGIvdC90MzkwMy1zdGFzaC5zaAppbmRleCA1ZGZiZGE3Li41ZDIyZjE3IDEwMDc1NQotLS0gYS90L3QzOTAzLXN0YXNoLnNoCisrKyBiL3QvdDM5MDMtc3Rhc2guc2gKQEAgLTIwMCwxNyArMjAwLDE3IEBACiAJZWNobyBmb28gPiBmaWxlICYmCiAJZ2l0IHN0YXNoICYmCiAJZ2l0IHN0YXNoIGFwcGx5IC1xID4gb3V0cHV0Lm91dCAyPiYxICYmCi0JdGVzdCAhIC1zIG91dHB1dC5vdXQKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0Lm91dAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYXZlIC1xIGlzIHF1aWV0JyAnCiAJZ2l0IHN0YXNoIHNhdmUgLS1xdWlldCA+IG91dHB1dC5vdXQgMj4mMSAmJgotCXRlc3QgISAtcyBvdXRwdXQub3V0CisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5vdXQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncG9wIC1xIGlzIHF1aWV0JyAnCiAJZ2l0IHN0YXNoIHBvcCAtcSA+IG91dHB1dC5vdXQgMj4mMSAmJgotCXRlc3QgISAtcyBvdXRwdXQub3V0CisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5vdXQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncG9wIC1xIC0taW5kZXggd29ya3MgYW5kIGlzIHF1aWV0JyAnCkBAIC0yMTksMTMgKzIxOSwxMyBAQAogCWdpdCBzdGFzaCBzYXZlIC0tcXVpZXQgJiYKIAlnaXQgc3Rhc2ggcG9wIC1xIC0taW5kZXggPiBvdXRwdXQub3V0IDI+JjEgJiYKIAl0ZXN0IGZvbyA9ICIkKGdpdCBzaG93IDpmaWxlKSIgJiYKLQl0ZXN0ICEgLXMgb3V0cHV0Lm91dAorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQub3V0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Ryb3AgLXEgaXMgcXVpZXQnICcKIAlnaXQgc3Rhc2ggJiYKIAlnaXQgc3Rhc2ggZHJvcCAtcSA+IG91dHB1dC5vdXQgMj4mMSAmJgotCXRlc3QgISAtcyBvdXRwdXQub3V0CisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5vdXQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggLWsnICcKQEAgLTMzNiw0MSArMzM2LDU4IEBACiAKICMgVGhpcyB0ZXN0IGNyZWF0ZXMgYSBjb21taXQgd2l0aCBhIHN5bWxpbmsgdXNlZCBmb3IgdGhlIGZvbGxvd2luZyB0ZXN0cwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzdGFzaCBzeW1saW5rIHRvIGZpbGUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHN5bWxpbmsgdG8gZmlsZScgJwogCWdpdCByZXNldCAtLWhhcmQgJiYKLQlsbiAtcyBmaWxlIGZpbGVsaW5rICYmCi0JZ2l0IGFkZCBmaWxlbGluayAmJgorCXRlc3RfbG5fc19hZGQgZmlsZSBmaWxlbGluayAmJgogCWdpdCBjb21taXQgLW0gIkFkZCBzeW1saW5rIiAmJgogCXJtIGZpbGVsaW5rICYmCiAJY3AgZmlsZSBmaWxlbGluayAmJgotCWdpdCBzdGFzaCBzYXZlICJzeW1saW5rIHRvIGZpbGUiICYmCisJZ2l0IHN0YXNoIHNhdmUgInN5bWxpbmsgdG8gZmlsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAndGhpcyBtdXN0IGhhdmUgcmUtY3JlYXRlZCB0aGUgc3ltbGluaycgJwogCXRlc3QgLWggZmlsZWxpbmsgJiYKLQljYXNlICIkKGxzIC1sIGZpbGVsaW5rKSIgaW4gKiIgZmlsZWxpbmsgLT4gZmlsZSIpIDo7OyAqKSBmYWxzZTs7IGVzYWMgJiYKKwljYXNlICIkKGxzIC1sIGZpbGVsaW5rKSIgaW4gKiIgZmlsZWxpbmsgLT4gZmlsZSIpIDo7OyAqKSBmYWxzZTs7IGVzYWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zdGFzaCBtdXN0IHJlLWNyZWF0ZSB0aGUgZmlsZScgJwogCWdpdCBzdGFzaCBhcHBseSAmJgogCSEgdGVzdCAtaCBmaWxlbGluayAmJgogCXRlc3QgYmFyID0gIiQoY2F0IGZpbGUpIgogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzdGFzaCBzeW1saW5rIHRvIGZpbGUgKHN0YWdlIHJtKScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc3ltbGluayB0byBmaWxlIChzdGFnZSBybSknICcKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJZ2l0IHJtIGZpbGVsaW5rICYmCiAJY3AgZmlsZSBmaWxlbGluayAmJgotCWdpdCBzdGFzaCBzYXZlICJzeW1saW5rIHRvIGZpbGUgKHN0YWdlIHJtKSIgJiYKKwlnaXQgc3Rhc2ggc2F2ZSAic3ltbGluayB0byBmaWxlIChzdGFnZSBybSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3RoaXMgbXVzdCBoYXZlIHJlLWNyZWF0ZWQgdGhlIHN5bWxpbmsnICcKIAl0ZXN0IC1oIGZpbGVsaW5rICYmCi0JY2FzZSAiJChscyAtbCBmaWxlbGluaykiIGluICoiIGZpbGVsaW5rIC0+IGZpbGUiKSA6OzsgKikgZmFsc2U7OyBlc2FjICYmCisJY2FzZSAiJChscyAtbCBmaWxlbGluaykiIGluICoiIGZpbGVsaW5rIC0+IGZpbGUiKSA6OzsgKikgZmFsc2U7OyBlc2FjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc3Rhc2ggbXVzdCByZS1jcmVhdGUgdGhlIGZpbGUnICcKIAlnaXQgc3Rhc2ggYXBwbHkgJiYKIAkhIHRlc3QgLWggZmlsZWxpbmsgJiYKIAl0ZXN0IGJhciA9ICIkKGNhdCBmaWxlKSIKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3Rhc2ggc3ltbGluayB0byBmaWxlIChmdWxsIHN0YWdlKScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc3ltbGluayB0byBmaWxlIChmdWxsIHN0YWdlKScgJwogCWdpdCByZXNldCAtLWhhcmQgJiYKIAlybSBmaWxlbGluayAmJgogCWNwIGZpbGUgZmlsZWxpbmsgJiYKIAlnaXQgYWRkIGZpbGVsaW5rICYmCi0JZ2l0IHN0YXNoIHNhdmUgInN5bWxpbmsgdG8gZmlsZSAoZnVsbCBzdGFnZSkiICYmCisJZ2l0IHN0YXNoIHNhdmUgInN5bWxpbmsgdG8gZmlsZSAoZnVsbCBzdGFnZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3RoaXMgbXVzdCBoYXZlIHJlLWNyZWF0ZWQgdGhlIHN5bWxpbmsnICcKIAl0ZXN0IC1oIGZpbGVsaW5rICYmCi0JY2FzZSAiJChscyAtbCBmaWxlbGluaykiIGluICoiIGZpbGVsaW5rIC0+IGZpbGUiKSA6OzsgKikgZmFsc2U7OyBlc2FjICYmCisJY2FzZSAiJChscyAtbCBmaWxlbGluaykiIGluICoiIGZpbGVsaW5rIC0+IGZpbGUiKSA6OzsgKikgZmFsc2U7OyBlc2FjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc3Rhc2ggbXVzdCByZS1jcmVhdGUgdGhlIGZpbGUnICcKIAlnaXQgc3Rhc2ggYXBwbHkgJiYKIAkhIHRlc3QgLWggZmlsZWxpbmsgJiYKIAl0ZXN0IGJhciA9ICIkKGNhdCBmaWxlKSIKQEAgLTYzNyw0ICs2NTQsNDEgQEAKIAl0ZXN0X2NtcCBvdXRwdXQgZXhwZWN0CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0b3JlIGNhbGxlZCB3aXRoIGludmFsaWQgY29tbWl0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIHN0b3JlIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdG9yZSB1cGRhdGVzIHN0YXNoIHJlZiBhbmQgcmVmbG9nJyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gcXV1eCA+YmF6enkgJiYKKwlnaXQgYWRkIGJhenp5ICYmCisJU1RBU0hfSUQ9JChnaXQgc3Rhc2ggY3JlYXRlKSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwkhIGdyZXAgcXV1eCBiYXp6eSAmJgorCWdpdCBzdGFzaCBzdG9yZSAtbSBxdXV4ZXJ5ICRTVEFTSF9JRCAmJgorCXRlc3QgJChjYXQgLmdpdC9yZWZzL3N0YXNoKSA9ICRTVEFTSF9JRCAmJgorCWdyZXAgJFNUQVNIX0lEIC5naXQvbG9ncy9yZWZzL3N0YXNoICYmCisJZ2l0IHN0YXNoIHBvcCAmJgorCWdyZXAgcXV1eCBiYXp6eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBhIGNoYW5nZSB0byB0dXJuIGEgbm9uLWRpcmVjdG9yeSB0byBhIGRpcmVjdG9yeScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwk+dGVzdGZpbGUgJiYKKwlnaXQgYWRkIHRlc3RmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIHRlc3RmaWxlIGFzIGEgcmVndWxhciBmaWxlIiAmJgorCXJtIHRlc3RmaWxlICYmCisJbWtkaXIgdGVzdGZpbGUgJiYKKwk+dGVzdGZpbGUvZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBzYXZlICJyZWNvdmVyIHJlZ3VsYXIgZmlsZSIgJiYKKwl0ZXN0IC1mIHRlc3RmaWxlL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggYSBjaGFuZ2UgdG8gdHVybiBhIG5vbi1kaXJlY3RvcnkgdG8gYSBkaXJlY3RvcnkgKGZvcmNlZCknICcKKwlnaXQgc3Rhc2ggc2F2ZSAtLWZvcmNlICJyZWNvdmVyIHJlZ3VsYXIgZmlsZSAoZm9yY2VkKSIgJiYKKwkhIHRlc3QgLWYgdGVzdGZpbGUvZmlsZSAmJgorCXRlc3QgLWYgdGVzdGZpbGUKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDAwLWRpZmYtZm9ybWF0LnNoIGIvdC90NDAwMC1kaWZmLWZvcm1hdC5zaAppbmRleCA2ZGRkNDY5Li44ZGUzNmI3IDEwMDc1NQotLS0gYS90L3Q0MDAwLWRpZmYtZm9ybWF0LnNoCisrKyBiL3QvdDQwMDAtZGlmZi1mb3JtYXQuc2gKQEAgLTE1LDE3ICsxNSwxNyBAQAogY2F0IHBhdGgwID5wYXRoMQogY2htb2QgK3ggcGF0aDEKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ3VwZGF0ZS1pbmRleCAtLWFkZCB0d28gZmlsZXMgd2l0aCBhbmQgd2l0aG91dCAreC4nIFwKLSAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMCBwYXRoMScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCAtLWFkZCB0d28gZmlsZXMgd2l0aCBhbmQgd2l0aG91dCAreC4nICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgwIHBhdGgxCisnCiAKIG12IHBhdGgwIHBhdGgwLQogc2VkIC1lICdzL2xpbmUvTGluZS8nIDxwYXRoMC0gPnBhdGgwCiBjaG1vZCAreCBwYXRoMAogcm0gLWYgcGF0aDEKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICdnaXQgZGlmZi1maWxlcyAtcCBhZnRlciBlZGl0aW5nIHdvcmsgdHJlZS4nIFwKLSAgICAnZ2l0IGRpZmYtZmlsZXMgLXAgPmN1cnJlbnQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1maWxlcyAtcCBhZnRlciBlZGl0aW5nIHdvcmsgdHJlZS4nICcKKwlnaXQgZGlmZi1maWxlcyAtcCA+YWN0dWFsCisnCiAKICMgdGhhdCdzIGFzIGZhciBhcyBpdCBjb21lcwogaWYgWyAiJChnaXQgY29uZmlnIC0tZ2V0IGNvcmUuZmlsZW1vZGUpIiA9IGZhbHNlIF0KQEAgLTU1LDggKzU1LDM4IEBACiAtbGluZSAzCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ3ZhbGlkYXRlIGdpdCBkaWZmLWZpbGVzIC1wIG91dHB1dC4nIFwKLSAgICAnY29tcGFyZV9kaWZmX3BhdGNoIGN1cnJlbnQgZXhwZWN0ZWQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGF0ZSBnaXQgZGlmZi1maWxlcyAtcCBvdXRwdXQuJyAnCisJY29tcGFyZV9kaWZmX3BhdGNoIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1maWxlcyAtcyBhZnRlciBlZGl0aW5nIHdvcmsgdHJlZScgJworCWdpdCBkaWZmLWZpbGVzIC1zID5hY3R1YWwgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1maWxlcyAtLW5vLXBhdGNoIGFzIHN5bm9ueW0gZm9yIC1zJyAnCisJZ2l0IGRpZmYtZmlsZXMgLS1uby1wYXRjaCA+YWN0dWFsIDI+ZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtZmlsZXMgLS1uby1wYXRjaCAtLXBhdGNoIHNob3dzIHRoZSBwYXRjaCcgJworCWdpdCBkaWZmLWZpbGVzIC0tbm8tcGF0Y2ggLS1wYXRjaCA+YWN0dWFsICYmCisJY29tcGFyZV9kaWZmX3BhdGNoIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1maWxlcyAtLW5vLXBhdGNoIC0tcGF0Y2gtd2l0aC1yYXcgc2hvd3MgdGhlIHBhdGNoIGFuZCByYXcgZGF0YScgJworCWdpdCBkaWZmLWZpbGVzIC0tbm8tcGF0Y2ggLS1wYXRjaC13aXRoLXJhdyA+YWN0dWFsICYmCisJZ3JlcCAtcSAiXjoxMDA2NDQgMTAwNzU1IC4qIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTQlwYXRoMFwkIiBhY3R1YWwgJiYKKwl0YWlsIC1uICs0IGFjdHVhbCA+YWN0dWFsLXBhdGNoICYmCisJY29tcGFyZV9kaWZmX3BhdGNoIGV4cGVjdGVkIGFjdHVhbC1wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1maWxlcyAtLXBhdGNoIC0tbm8tcGF0Y2ggZG9lcyBub3Qgc2hvdyB0aGUgcGF0Y2gnICcKKwlnaXQgZGlmZi1maWxlcyAtLXBhdGNoIC0tbm8tcGF0Y2ggPmFjdHVhbCAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyCisnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAwOC1kaWZmLWJyZWFrLXJld3JpdGUuc2ggYi90L3Q0MDA4LWRpZmYtYnJlYWstcmV3cml0ZS5zaAppbmRleCA3M2I0YTI0Li4yN2U5OGE4IDEwMDc1NQotLS0gYS90L3Q0MDA4LWRpZmYtYnJlYWstcmV3cml0ZS5zaAorKysgYi90L3Q0MDA4LWRpZmYtYnJlYWstcmV3cml0ZS5zaApAQCAtOTksMTEgKzk5LDExIEBACiAgICAgJ3ZhbGlkYXRlIHJlc3VsdCBvZiAtQiAtTSAoIzQpJyBcCiAgICAgJ2NvbXBhcmVfZGlmZl9yYXcgZXhwZWN0ZWQgY3VycmVudCcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnbWFrZSBmaWxlMCBpbnRvIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCcgXAogICAgICdybSAtZiBmaWxlMCAmJgotICAgICBsbiAtcyBmcm90eiBmaWxlMCAmJgotICAgICBnaXQgdXBkYXRlLWluZGV4IGZpbGUwIGZpbGUxJworICAgICB0ZXN0X2xuX3NfYWRkIGZyb3R6IGZpbGUwICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggZmlsZTEnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdydW4gZGlmZiB3aXRoIC1CJyBcCkBAIC0xMTQsNyArMTE0LDcgQEAKIDoxMDA2NDQgMTAwNjQ0IDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgZjVkZWFjN2JlNTllN2VlYWI4NjU3ZmQ5YWU3MDZmZDZhNTdkYWVkMiBNMTAwCWZpbGUxCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAndmFsaWRhdGUgcmVzdWx0IG9mIC1CICgjNSknIFwKICAgICAnY29tcGFyZV9kaWZmX3JhdyBleHBlY3RlZCBjdXJyZW50JwogCkBAIC0xMjksNyArMTI5LDcgQEAKIDoxMDA2NDQgMTAwNjQ0IDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgZjVkZWFjN2JlNTllN2VlYWI4NjU3ZmQ5YWU3MDZmZDZhNTdkYWVkMiBSCWZpbGUwCWZpbGUxCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAndmFsaWRhdGUgcmVzdWx0IG9mIC1CIC1NICgjNiknIFwKICAgICAnY29tcGFyZV9kaWZmX3JhdyBleHBlY3RlZCBjdXJyZW50JwogCkBAIC0xNDQsNyArMTQ0LDcgQEAKIDoxMDA2NDQgMTAwNjQ0IDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgZjVkZWFjN2JlNTllN2VlYWI4NjU3ZmQ5YWU3MDZmZDZhNTdkYWVkMiBNCWZpbGUxCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAndmFsaWRhdGUgcmVzdWx0IG9mIC1NICgjNyknIFwKICAgICAnY29tcGFyZV9kaWZmX3JhdyBleHBlY3RlZCBjdXJyZW50JwogCmRpZmYgLS1naXQgYS90L3Q0MDExLWRpZmYtc3ltbGluay5zaCBiL3QvdDQwMTEtZGlmZi1zeW1saW5rLnNoCmluZGV4IGYwZDUwNDEuLjEzZTdmNjIgMTAwNzU1Ci0tLSBhL3QvdDQwMTEtZGlmZi1zeW1saW5rLnNoCisrKyBiL3QvdDQwMTEtZGlmZi1zeW1saW5rLnNoCkBAIC05LDcgKzksNyBAQAogLiAuL3Rlc3QtbGliLnNoCiAuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2RpZmYgbmV3IHN5bWxpbmsgYW5kIGZpbGUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgbmV3IHN5bWxpbmsgYW5kIGZpbGUnICcKIAljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKIAlkaWZmIC0tZ2l0IGEvZnJvdHogYi9mcm90egogCW5ldyBmaWxlIG1vZGUgMTIwMDAwCkBAIC0yNywyMiArMjcsMjUgQEAKIAlAQCAtMCwwICsxIEBACiAJK3h5enp5CiAJRU9GCi0JbG4gLXMgeHl6enkgZnJvdHogJiYKLQllY2hvIHh5enp5ID5uaXRmb2wgJiYKKworCSMgdGhlIGVtcHR5IHRyZWUKIAlnaXQgdXBkYXRlLWluZGV4ICYmCiAJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgotCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZnJvdHogbml0Zm9sICYmCisKKwl0ZXN0X2xuX3NfYWRkIHh5enp5IGZyb3R6ICYmCisJZWNobyB4eXp6eSA+bml0Zm9sICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBuaXRmb2wgJiYKIAlHSVRfRElGRl9PUFRTPS0tdW5pZmllZD0wIGdpdCBkaWZmLWluZGV4IC1NIC1wICR0cmVlID5jdXJyZW50ICYmCiAJY29tcGFyZV9kaWZmX3BhdGNoIGV4cGVjdGVkIGN1cnJlbnQKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZGlmZiB1bmNoYW5nZWQgc3ltbGluayBhbmQgZmlsZScgICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgdW5jaGFuZ2VkIHN5bWxpbmsgYW5kIGZpbGUnICAnCiAJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgogCWdpdCB1cGRhdGUtaW5kZXggZnJvdHogbml0Zm9sICYmCiAJdGVzdCAteiAiJChnaXQgZGlmZi1pbmRleCAtLW5hbWUtb25seSAkdHJlZSkiCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2RpZmYgcmVtb3ZlZCBzeW1saW5rIGFuZCBmaWxlJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIHJlbW92ZWQgc3ltbGluayBhbmQgZmlsZScgJwogCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgogCWRpZmYgLS1naXQgYS9mcm90eiBiL2Zyb3R6CiAJZGVsZXRlZCBmaWxlIG1vZGUgMTIwMDAwCkBAIC02NiwxMiArNjksMTggQEAKIAljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgY3VycmVudAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdkaWZmIGlkZW50aWNhbCwgYnV0IG5ld2x5IGNyZWF0ZWQgc3ltbGluayBhbmQgZmlsZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBpZGVudGljYWwsIGJ1dCBuZXdseSBjcmVhdGVkIHN5bWxpbmsgYW5kIGZpbGUnICcKIAk+ZXhwZWN0ZWQgJiYKIAlybSAtZiBmcm90eiBuaXRmb2wgJiYKIAllY2hvIHh5enp5ID5uaXRmb2wgJiYKIAl0ZXN0LWNobXRpbWUgKzEwIG5pdGZvbCAmJgotCWxuIC1zIHh5enp5IGZyb3R6ICYmCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUworCXRoZW4KKwkJbG4gLXMgeHl6enkgZnJvdHoKKwllbHNlCisJCXByaW50ZiB4eXp6eSA+ZnJvdHoKKwkJIyB0aGUgc3ltbGluayBwcm9wZXJ0eSBwcm9wYWdhdGVzIGZyb20gdGhlIGluZGV4CisJZmkgJiYKIAlnaXQgZGlmZi1pbmRleCAtTSAtcCAkdHJlZSA+Y3VycmVudCAmJgogCWNvbXBhcmVfZGlmZl9wYXRjaCBleHBlY3RlZCBjdXJyZW50ICYmCiAKQEAgLTgwLDcgKzg5LDcgQEAKIAljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgY3VycmVudAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdkaWZmIGRpZmZlcmVudCBzeW1saW5rIGFuZCBmaWxlJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGRpZmZlcmVudCBzeW1saW5rIGFuZCBmaWxlJyAnCiAJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCiAJZGlmZiAtLWdpdCBhL2Zyb3R6IGIvZnJvdHoKIAlpbmRleCA3YzQ2NWFmLi5kZjFkYjU0IDEyMDAwMApAQCAtMTAwLDcgKzEwOSwxMyBAQAogCSt5eHl5egogCUVPRgogCXJtIC1mIGZyb3R6ICYmCi0JbG4gLXMgeXh5eXogZnJvdHogJiYKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCisJdGhlbgorCQlsbiAtcyB5eHl5eiBmcm90egorCWVsc2UKKwkJcHJpbnRmIHl4eXl6ID5mcm90egorCQkjIHRoZSBzeW1saW5rIHByb3BlcnR5IHByb3BhZ2F0ZXMgZnJvbSB0aGUgaW5kZXgKKwlmaSAmJgogCWVjaG8geXh5eXogPm5pdGZvbCAmJgogCWdpdCBkaWZmLWluZGV4IC1NIC1wICR0cmVlID5jdXJyZW50ICYmCiAJY29tcGFyZV9kaWZmX3BhdGNoIGV4cGVjdGVkIGN1cnJlbnQKZGlmZiAtLWdpdCBhL3QvdDQwMTQtZm9ybWF0LXBhdGNoLnNoIGIvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2gKaW5kZXggNThkNDE4MC4uNjY4OTMzYiAxMDA3NTUKLS0tIGEvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2gKKysrIGIvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2gKQEAgLTk3Miw2ICs5NzIsNDkgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZnJvbT1pZGVudCBub3RpY2VzIGJvZ3VzIGlkZW50JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLWZyb209Zm9vID5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWZyb209aWRlbnQgcmVwbGFjZXMgYXV0aG9yJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLWZyb209Ik1lIDxtZUBleGFtcGxlLmNvbT4iID5wYXRjaCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlGcm9tOiBNZSA8bWVAZXhhbXBsZS5jb20+CisKKwlGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCisJRU9GCisJc2VkIC1uZSAiL15Gcm9tOi9wOyAvXiQvcDsgL14tLS0kL3EiIDxwYXRjaCA+cGF0Y2guaGVhZCAmJgorCXRlc3RfY21wIGV4cGVjdCBwYXRjaC5oZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZnJvbSB1c2VzIGNvbW1pdHRlciBpZGVudCcgJworCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1mcm9tID5wYXRjaCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlGcm9tOiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisKKwlGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCisJRU9GCisJc2VkIC1uZSAiL15Gcm9tOi9wOyAvXiQvcDsgL14tLS0kL3EiIDxwYXRjaCA+cGF0Y2guaGVhZCAmJgorCXRlc3RfY21wIGV4cGVjdCBwYXRjaC5oZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luLWJvZHkgaGVhZGVycyB0cmlnZ2VyIGNvbnRlbnQgZW5jb2RpbmcnICcKKwlHSVRfQVVUSE9SX05BTUU9IsOpeMO2dMOsYyIgdGVzdF9jb21taXQgZXhvdGljICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUReIiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1mcm9tID5wYXRjaCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlGcm9tOiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisJQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CisKKwlGcm9tOiDDqXjDtnTDrGMgPGF1dGhvckBleGFtcGxlLmNvbT4KKworCUVPRgorCXNlZCAtbmUgIi9eRnJvbTovcDsgL14kL3A7IC9eQ29udGVudC1UeXBlL3A7IC9eLS0tJC9xIiA8cGF0Y2ggPnBhdGNoLmhlYWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgcGF0Y2guaGVhZAorJworCiBhcHBlbmRfc2lnbm9mZigpCiB7CiAJQz0kKGdpdCBjb21taXQtdHJlZSBIRUFEXl57dHJlZX0gLXAgSEVBRCkgJiYKZGlmZiAtLWdpdCBhL3QvdDQwMTUtZGlmZi13aGl0ZXNwYWNlLnNoIGIvdC90NDAxNS1kaWZmLXdoaXRlc3BhY2Uuc2gKaW5kZXggY2MzZGIxMy4uM2ZiNGI5NyAxMDA3NTUKLS0tIGEvdC90NDAxNS1kaWZmLXdoaXRlc3BhY2Uuc2gKKysrIGIvdC90NDAxNS1kaWZmLXdoaXRlc3BhY2Uuc2gKQEAgLTE0Miw2ICsxNDIsMzUxIEBACiBnaXQgZGlmZiAtLWlnbm9yZS1zcGFjZS1hdC1lb2wgPiBvdXQKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fub3RoZXIgdGVzdCwgd2l0aCAtLWlnbm9yZS1zcGFjZS1hdC1lb2wnICd0ZXN0X2NtcCBleHBlY3Qgb3V0JwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpZ25vcmUtYmxhbmstbGluZXM6IG9ubHkgbmV3IGxpbmVzJyAnCisJdGVzdF9zZXEgNSA+eCAmJgorCWdpdCB1cGRhdGUtaW5kZXggeCAmJgorCXRlc3Rfc2VxIDUgfCBzZWQgIi8zL2kgXFwKKyIgPnggJiYKKwlnaXQgZGlmZiAtLWlnbm9yZS1ibGFuay1saW5lcyA+b3V0ICYmCisJPmV4cGVjdCAmJgorCXRlc3RfY21wIG91dCBleHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaWdub3JlLWJsYW5rLWxpbmVzOiBvbmx5IG5ldyBsaW5lcyB3aXRoIHNwYWNlJyAnCisJdGVzdF9zZXEgNSA+eCAmJgorCWdpdCB1cGRhdGUtaW5kZXggeCAmJgorCXRlc3Rfc2VxIDUgfCBzZWQgIi8zL2kgXCAiID54ICYmCisJZ2l0IGRpZmYgLXcgLS1pZ25vcmUtYmxhbmstbGluZXMgPm91dCAmJgorCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBvdXQgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lnbm9yZS1ibGFuay1saW5lczogYWZ0ZXIgY2hhbmdlJyAnCisJY2F0IDw8LVxFT0YgPnggJiYKKwkxCisJMgorCisJMworCTQKKwk1CisKKwk2CisJNworCUVPRgorCWdpdCB1cGRhdGUtaW5kZXggeCAmJgorCWNhdCA8PC1cRU9GID54ICYmCisJY2hhbmdlCisKKwkxCisJMgorCTMKKwk0CisJNQorCTYKKworCTcKKwlFT0YKKwlnaXQgZGlmZiAtLWludGVyLWh1bmstY29udGV4dD0xMDAgLS1pZ25vcmUtYmxhbmstbGluZXMgPm91dC50bXAgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlkaWZmIC0tZ2l0IGEveCBiL3gKKwktLS0gYS94CisJKysrIGIveAorCUBAIC0xLDYgKzEsNyBAQAorCStjaGFuZ2UKKwkrCisJIDEKKwkgMgorCS0KKwkgMworCSA0CisJIDUKKwlFT0YKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgb3V0LnRtcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpZ25vcmUtYmxhbmstbGluZXM6IGJlZm9yZSBjaGFuZ2UnICcKKwljYXQgPDwtXEVPRiA+eCAmJgorCTEKKwkyCisKKwkzCisJNAorCTUKKwk2CisJNworCUVPRgorCWdpdCB1cGRhdGUtaW5kZXggeCAmJgorCWNhdCA8PC1cRU9GID54ICYmCisKKwkxCisJMgorCTMKKwk0CisJNQorCisJNgorCTcKKwljaGFuZ2UKKwlFT0YKKwlnaXQgZGlmZiAtLWludGVyLWh1bmstY29udGV4dD0xMDAgLS1pZ25vcmUtYmxhbmstbGluZXMgPm91dC50bXAgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlkaWZmIC0tZ2l0IGEveCBiL3gKKwktLS0gYS94CisJKysrIGIveAorCUBAIC00LDUgKzQsNyBAQAorCSAzCisJIDQKKwkgNQorCSsKKwkgNgorCSA3CisJK2NoYW5nZQorCUVPRgorCWNvbXBhcmVfZGlmZl9wYXRjaCBleHBlY3RlZCBvdXQudG1wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lnbm9yZS1ibGFuay1saW5lczogYmV0d2VlbiBjaGFuZ2VzJyAnCisJY2F0IDw8LVxFT0YgPnggJiYKKwkxCisJMgorCTMKKwk0CisJNQorCisKKwk2CisJNworCTgKKwk5CisJMTAKKwlFT0YKKwlnaXQgdXBkYXRlLWluZGV4IHggJiYKKwljYXQgPDwtXEVPRiA+eCAmJgorCWNoYW5nZQorCTEKKwkyCisKKwkzCisJNAorCTUKKwk2CisJNworCTgKKworCTkKKwkxMAorCWNoYW5nZQorCUVPRgorCWdpdCBkaWZmIC0taWdub3JlLWJsYW5rLWxpbmVzID5vdXQudG1wICYmCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJZGlmZiAtLWdpdCBhL3ggYi94CisJLS0tIGEveAorCSsrKyBiL3gKKwlAQCAtMSw1ICsxLDcgQEAKKwkrY2hhbmdlCisJIDEKKwkgMgorCSsKKwkgMworCSA0CisJIDUKKwlAQCAtOCw1ICs4LDcgQEAKKwkgNgorCSA3CisJIDgKKwkrCisJIDkKKwkgMTAKKwkrY2hhbmdlCisJRU9GCisJY29tcGFyZV9kaWZmX3BhdGNoIGV4cGVjdGVkIG91dC50bXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaWdub3JlLWJsYW5rLWxpbmVzOiBiZXR3ZWVuIGNoYW5nZXMgKHdpdGggaW50ZXJodW5rY3R4KScgJworCXRlc3Rfc2VxIDEwID54ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCB4ICYmCisJY2F0IDw8LVxFT0YgPnggJiYKKwljaGFuZ2UKKwkxCisJMgorCisJMworCTQKKwk1CisKKwk2CisJNworCTgKKwk5CisKKwkxMAorCWNoYW5nZQorCUVPRgorCWdpdCBkaWZmIC0taW50ZXItaHVuay1jb250ZXh0PTIgLS1pZ25vcmUtYmxhbmstbGluZXMgPm91dC50bXAgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlkaWZmIC0tZ2l0IGEveCBiL3gKKwktLS0gYS94CisJKysrIGIveAorCUBAIC0xLDEwICsxLDE1IEBACisJK2NoYW5nZQorCSAxCisJIDIKKwkrCisJIDMKKwkgNAorCSA1CisJKworCSA2CisJIDcKKwkgOAorCSA5CisJKworCSAxMAorCStjaGFuZ2UKKwlFT0YKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgb3V0LnRtcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpZ25vcmUtYmxhbmstbGluZXM6IHNjYXR0ZXJlZCBzcGFjZXMnICcKKwl0ZXN0X3NlcSAxMCA+eCAmJgorCWdpdCB1cGRhdGUtaW5kZXggeCAmJgorCWNhdCA8PC1cRU9GID54ICYmCisJY2hhbmdlCisJMQorCTIKKwkzCisKKwk0CisKKwk1CisKKwk2CisKKworCTcKKworCTgKKwk5CisJMTAKKwljaGFuZ2UKKwlFT0YKKwlnaXQgZGlmZiAtLWludGVyLWh1bmstY29udGV4dD00IC0taWdub3JlLWJsYW5rLWxpbmVzID5vdXQudG1wICYmCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJZGlmZiAtLWdpdCBhL3ggYi94CisJLS0tIGEveAorCSsrKyBiL3gKKwlAQCAtMSwzICsxLDQgQEAKKwkrY2hhbmdlCisJIDEKKwkgMgorCSAzCisJQEAgLTgsMyArMTUsNCBAQAorCSA4CisJIDkKKwkgMTAKKwkrY2hhbmdlCisJRU9GCisJY29tcGFyZV9kaWZmX3BhdGNoIGV4cGVjdGVkIG91dC50bXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaWdub3JlLWJsYW5rLWxpbmVzOiBzcGFjZXMgY29hbGVzY2UnICcKKwl0ZXN0X3NlcSA2ID54ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCB4ICYmCisJY2F0IDw8LVxFT0YgPnggJiYKKwljaGFuZ2UKKwkxCisJMgorCTMKKworCTQKKworCTUKKworCTYKKwljaGFuZ2UKKwlFT0YKKwlnaXQgZGlmZiAtLWludGVyLWh1bmstY29udGV4dD00IC0taWdub3JlLWJsYW5rLWxpbmVzID5vdXQudG1wICYmCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJZGlmZiAtLWdpdCBhL3ggYi94CisJLS0tIGEveAorCSsrKyBiL3gKKwlAQCAtMSw2ICsxLDExIEBACisJK2NoYW5nZQorCSAxCisJIDIKKwkgMworCSsKKwkgNAorCSsKKwkgNQorCSsKKwkgNgorCStjaGFuZ2UKKwlFT0YKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgb3V0LnRtcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpZ25vcmUtYmxhbmstbGluZXM6IG1peCBjaGFuZ2VzIGFuZCBibGFuayBsaW5lcycgJworCXRlc3Rfc2VxIDE2ID54ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCB4ICYmCisJY2F0IDw8LVxFT0YgPnggJiYKKwljaGFuZ2UKKwkxCisJMgorCisJMworCTQKKwk1CisJY2hhbmdlCisJNgorCTcKKwk4CisKKwk5CisJMTAKKwkxMQorCWNoYW5nZQorCTEyCisJMTMKKwkxNAorCisJMTUKKwkxNgorCWNoYW5nZQorCUVPRgorCWdpdCBkaWZmIC0taWdub3JlLWJsYW5rLWxpbmVzID5vdXQudG1wICYmCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJZGlmZiAtLWdpdCBhL3ggYi94CisJLS0tIGEveAorCSsrKyBiL3gKKwlAQCAtMSw4ICsxLDExIEBACisJK2NoYW5nZQorCSAxCisJIDIKKwkrCisJIDMKKwkgNAorCSA1CisJK2NoYW5nZQorCSA2CisJIDcKKwkgOAorCUBAIC05LDggKzEzLDExIEBACisJIDkKKwkgMTAKKwkgMTEKKwkrY2hhbmdlCisJIDEyCisJIDEzCisJIDE0CisJKworCSAxNQorCSAxNgorCStjaGFuZ2UKKwlFT0YKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgb3V0LnRtcAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBtaXhlZCBzcGFjZXMgYW5kIHRhYnMgaW4gaW5kZW50JyAnCiAKIAkjIFRoaXMgaXMgaW5kZW50ZWQgd2l0aCBTUCBIVCBTUC4KZGlmZiAtLWdpdCBhL3QvdDQwMjMtZGlmZi1yZW5hbWUtdHlwZWNoYW5nZS5zaCBiL3QvdDQwMjMtZGlmZi1yZW5hbWUtdHlwZWNoYW5nZS5zaAppbmRleCA1ZDIwYWNmLi41NWQ1NDlmIDEwMDc1NQotLS0gYS90L3Q0MDIzLWRpZmYtcmVuYW1lLXR5cGVjaGFuZ2Uuc2gKKysrIGIvdC90NDAyMy1kaWZmLXJlbmFtZS10eXBlY2hhbmdlLnNoCkBAIC00LDQ0ICs0LDQ0IEBACiAKIC4gLi90ZXN0LWxpYi5zaAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIHNldHVwICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJwogCiAJcm0gLWYgZm9vIGJhciAmJgogCWNhdCAiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HID5mb28gJiYKLQlsbiAtcyBsaW5rbGluayBiYXIgJiYKLQlnaXQgYWRkIGZvbyBiYXIgJiYKKwl0ZXN0X2xuX3NfYWRkIGxpbmtsaW5rIGJhciAmJgorCWdpdCBhZGQgZm9vICYmCiAJZ2l0IGNvbW1pdCAtYSAtbSBJbml0aWFsICYmCiAJZ2l0IHRhZyBvbmUgJiYKIAotCXJtIC1mIGZvbyBiYXIgJiYKKwlnaXQgcm0gLWYgZm9vIGJhciAmJgogCWNhdCAiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HID5iYXIgJiYKLQlsbiAtcyBsaW5rbGluayBmb28gJiYKLQlnaXQgYWRkIGZvbyBiYXIgJiYKKwl0ZXN0X2xuX3NfYWRkIGxpbmtsaW5rIGZvbyAmJgorCWdpdCBhZGQgYmFyICYmCiAJZ2l0IGNvbW1pdCAtYSAtbSBTZWNvbmQgJiYKIAlnaXQgdGFnIHR3byAmJgogCi0Jcm0gLWYgZm9vIGJhciAmJgorCWdpdCBybSAtZiBmb28gYmFyICYmCiAJY2F0ICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgPmZvbyAmJgogCWdpdCBhZGQgZm9vICYmCiAJZ2l0IGNvbW1pdCAtYSAtbSBUaGlyZCAmJgogCWdpdCB0YWcgdGhyZWUgJiYKIAogCW12IGZvbyBiYXIgJiYKLQlsbiAtcyBsaW5rbGluayBmb28gJiYKLQlnaXQgYWRkIGZvbyBiYXIgJiYKKwl0ZXN0X2xuX3NfYWRkIGxpbmtsaW5rIGZvbyAmJgorCWdpdCBhZGQgYmFyICYmCiAJZ2l0IGNvbW1pdCAtYSAtbSBGb3VydGggJiYKIAlnaXQgdGFnIGZvdXIgJiYKIAogCSMgVGhpcyBpcyBwdXJlbHkgZm9yIHNhbml0eSBjaGVjawogCi0Jcm0gLWYgZm9vIGJhciAmJgorCWdpdCBybSAtZiBmb28gYmFyICYmCiAJY2F0ICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgPmZvbyAmJgogCWNhdCAiJFRFU1RfRElSRUNUT1JZIi8uLi9NYWtlZmlsZSA+YmFyICYmCiAJZ2l0IGFkZCBmb28gYmFyICYmCiAJZ2l0IGNvbW1pdCAtYSAtbSBGaWZ0aCAmJgogCWdpdCB0YWcgZml2ZSAmJgogCi0Jcm0gLWYgZm9vIGJhciAmJgorCWdpdCBybSAtZiBmb28gYmFyICYmCiAJY2F0ICIkVEVTVF9ESVJFQ1RPUlkiLy4uL01ha2VmaWxlID5mb28gJiYKIAljYXQgIiRURVNUX0RJUkVDVE9SWSIvLi4vQ09QWUlORyA+YmFyICYmCiAJZ2l0IGFkZCBmb28gYmFyICYmCkBAIC01MCw3ICs1MCw3IEBACiAKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnY3Jvc3MgcmVuYW1lcyB0byBiZSBkZXRlY3RlZCBmb3IgcmVndWxhciBmaWxlcycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3Jvc3MgcmVuYW1lcyB0byBiZSBkZXRlY3RlZCBmb3IgcmVndWxhciBmaWxlcycgJwogCiAJZ2l0IGRpZmYtdHJlZSBmaXZlIHNpeCAtciAtLW5hbWUtc3RhdHVzIC1CIC1NIHwgc29ydCA+YWN0dWFsICYmCiAJewpAQCAtNjEsNyArNjEsNyBAQAogCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2Nyb3NzIHJlbmFtZXMgdG8gYmUgZGV0ZWN0ZWQgZm9yIHR5cGVjaGFuZ2UnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nyb3NzIHJlbmFtZXMgdG8gYmUgZGV0ZWN0ZWQgZm9yIHR5cGVjaGFuZ2UnICcKIAogCWdpdCBkaWZmLXRyZWUgb25lIHR3byAtciAtLW5hbWUtc3RhdHVzIC1CIC1NIHwgc29ydCA+YWN0dWFsICYmCiAJewpAQCAtNzIsNyArNzIsNyBAQAogCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ21vdmVzIGFuZCByZW5hbWVzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb3ZlcyBhbmQgcmVuYW1lcycgJwogCiAJZ2l0IGRpZmYtdHJlZSB0aHJlZSBmb3VyIC1yIC0tbmFtZS1zdGF0dXMgLUIgLU0gfCBzb3J0ID5hY3R1YWwgJiYKIAl7CmRpZmYgLS1naXQgYS90L3Q0MDMwLWRpZmYtdGV4dGNvbnYuc2ggYi90L3Q0MDMwLWRpZmYtdGV4dGNvbnYuc2gKaW5kZXggNTNlYzMzMC4uZjc1ZjQ2ZiAxMDA3NTUKLS0tIGEvdC90NDAzMC1kaWZmLXRleHRjb252LnNoCisrKyBiL3QvdDQwMzAtZGlmZi10ZXh0Y29udi5zaApAQCAtMTM5LDEyICsxMzksMTAgQEAKICtmcm90egogXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCiBFT0YKLSMgbWFrZSBhIHN5bWxpbmsgdGhlIGhhcmQgd2F5IHRoYXQgd29ya3Mgb24gc3ltbGluay1jaGFsbGVuZ2VkIGZpbGUgc3lzdGVtcworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXh0Y29udiBkb2VzIG5vdCBhY3Qgb24gc3ltbGlua3MnICcKLQlwcmludGYgZnJvdHogPiBmaWxlICYmCi0JZ2l0IGFkZCBmaWxlICYmCi0JZ2l0IGxzLWZpbGVzIC1zIHwgc2VkIC1lIHMvMTAwNjQ0LzEyMDAwMC8gfAotCQlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCXJtIC1mIGZpbGUgJiYKKwl0ZXN0X2xuX3NfYWRkIGZyb3R6IGZpbGUgJiYKIAlnaXQgY29tbWl0IC1tIHR5cGVjaGFuZ2UgJiYKIAlnaXQgc2hvdyA+ZGlmZiAmJgogCWZpbmRfZGlmZiA8ZGlmZiA+YWN0dWFsICYmCmRpZmYgLS1naXQgYS90L3Q0MDM4LWRpZmYtY29tYmluZWQuc2ggYi90L3Q0MDM4LWRpZmYtY29tYmluZWQuc2gKaW5kZXggMTI2MWRiYi4uMTAxOWQ3YiAxMDA3NTUKLS0tIGEvdC90NDAzOC1kaWZmLWNvbWJpbmVkLnNoCisrKyBiL3QvdDQwMzgtZGlmZi1jb21iaW5lZC5zaApAQCAtMzUzLDQgKzM1Myw1MiBAQAogCWNvbXBhcmVfZGlmZl9wYXRjaCBleHBlY3RlZCBhY3R1YWwKICcKIAorIyBUZXN0IGZvciBhIGJ1ZyByZXBvcnRlZCBhdAorIyBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQvMjI0NDEwCisjIHdoZXJlIGEgZGVsZXRlIGxpbmVzIHdlcmUgbWlzc2luZyBmcm9tIGNvbWJpbmVkIGRpZmYgb3V0cHV0IHdoZW4gdGhleQorIyBvY2N1cnJlZCBleGFjdGx5IGJlZm9yZSB0aGUgY29udGV4dCBsaW5lcyBvZiBhIGxhdGVyIGNoYW5nZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbWJpbmUgZGlmZiBtaXNzaW5nIGRlbGV0ZSBidWcnICcKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgLS1hbGxvdy1lbXB0eSAmJgorCWNhdCA8PC1cRU9GID50ZXN0ICYmCisJMQorCTIKKwkzCisJNAorCUVPRgorCWdpdCBhZGQgdGVzdCAmJgorCWdpdCBjb21taXQgLWEgLW0gc2lkZTEgJiYKKwlnaXQgY2hlY2tvdXQgLUIgc2lkZTEgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwljYXQgPDwtXEVPRiA+dGVzdCAmJgorCTAKKwkxCisJMgorCTMKKwk0bW9kaWZpZWQKKwlFT0YKKwlnaXQgYWRkIHRlc3QgJiYKKwlnaXQgY29tbWl0IC1tIHNpZGUyICYmCisJZ2l0IGJyYW5jaCAtZiBzaWRlMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLW5vLWNvbW1pdCBzaWRlMSAmJgorCWNhdCA8PC1cRU9GID50ZXN0ICYmCisJMQorCTIKKwkzCisJNG1vZGlmaWVkCisJRU9GCisJZ2l0IGFkZCB0ZXN0ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBtZXJnZSAmJgorCWdpdCBkaWZmLXRyZWUgLWMgLXAgSEVBRCA+YWN0dWFsLnRtcCAmJgorCXNlZCAtZSAiMSwvXkBAQC9kIiA8IGFjdHVhbC50bXAgPmFjdHVhbCAmJgorCXRyIC1kIFEgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwktIDAKKwkgIDEKKwkgIDIKKwkgIDMKKwkgLTQKKwkgKzRtb2RpZmllZAorCUVPRgorCWNvbXBhcmVfZGlmZl9wYXRjaCBleHBlY3RlZCBhY3R1YWwKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDQxLWRpZmYtc3VibW9kdWxlLW9wdGlvbi5zaCBiL3QvdDQwNDEtZGlmZi1zdWJtb2R1bGUtb3B0aW9uLnNoCmluZGV4IDMyZDRhNjAuLjE3NTFjODMgMTAwNzU1Ci0tLSBhL3QvdDQwNDEtZGlmZi1zdWJtb2R1bGUtb3B0aW9uLnNoCisrKyBiL3QvdDQwNDEtZGlmZi1zdWJtb2R1bGUtb3B0aW9uLnNoCkBAIC0xLDYgKzEsNyBAQAogIyEvYmluL3NoCiAjCiAjIENvcHlyaWdodCAoYykgMjAwOSBKZW5zIExlaG1hbm4sIGJhc2VkIG9uIHQ3NDAxIGJ5IFBpbmcgWWluCisjIENvcHlyaWdodCAoYykgMjAxMSBBbGV4ZXkgU2h1bWtpbiAoKyBub24tVVRGLTggY29tbWl0IGVuY29kaW5nIHRlc3RzKQogIwogCiB0ZXN0X2Rlc2NyaXB0aW9uPSdTdXBwb3J0IGZvciB2ZXJib3NlIHN1Ym1vZHVsZSBkaWZmZXJlbmNlcyBpbiBnaXQgZGlmZgpAQCAtMTAsNiArMTEsOSBAQAogCiAuIC4vdGVzdC1saWIuc2gKIAorIyBTdHJpbmcgImFkZGVkIiBpbiBHZXJtYW4gKHRyYW5zbGF0ZWQgd2l0aCBHb29nbGUgVHJhbnNsYXRlKSwgZW5jb2RlZCBpbiBVVEYtOCwKKyMgdXNlZCBpbiBzYW1wbGUgY29tbWl0IGxvZyBtZXNzYWdlcyBpbiBhZGRfZmlsZSgpIGZ1bmN0aW9uIGJlbG93LgorYWRkZWQ9JChwcmludGYgImhpbnp1Z2VmXDMwM1wyNzRndCIpCiBhZGRfZmlsZSAoKSB7CiAJKAogCQljZCAiJDEiICYmCkBAIC0xOSw3ICsyMyw4IEBACiAJCQllY2hvICIkbmFtZSIgPiIkbmFtZSIgJiYKIAkJCWdpdCBhZGQgIiRuYW1lIiAmJgogCQkJdGVzdF90aWNrICYmCi0JCQlnaXQgY29tbWl0IC1tICJBZGQgJG5hbWUiIHx8IGV4aXQKKwkJCW1zZ19hZGRlZF9pc284ODU5MT0kKGVjaG8gIkFkZCAkbmFtZSAoJGFkZGVkICRuYW1lKSIgfCBpY29udiAtZiB1dGYtOCAtdCBpc284ODU5LTEpICYmCisJCQlnaXQgLWMgJ2kxOG4uY29tbWl0RW5jb2Rpbmc9aXNvODg1OS0xJyBjb21taXQgLW0gIiRtc2dfYWRkZWRfaXNvODg1OTEiCiAJCWRvbmUgPi9kZXYvbnVsbCAmJgogCQlnaXQgcmV2LXBhcnNlIC0tc2hvcnQgLS12ZXJpZnkgSEVBRAogCSkKQEAgLTkzLDcgKzk4LDcgQEAKIAlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCiAJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKIAlTdWJtb2R1bGUgc20xICRoZWFkMS4uJGhlYWQyOgotCSAgPiBBZGQgZm9vMworCSAgPiBBZGQgZm9vMyAoJGFkZGVkIGZvbzMpCiAJRU9GCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCkBAIC0xMDIsNyArMTA3LDcgQEAKIAlnaXQgZGlmZiAtLXN1Ym1vZHVsZT1sb2cgPmFjdHVhbCAmJgogCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCiAJU3VibW9kdWxlIHNtMSAkaGVhZDEuLiRoZWFkMjoKLQkgID4gQWRkIGZvbzMKKwkgID4gQWRkIGZvbzMgKCRhZGRlZCBmb28zKQogCUVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwpAQCAtMTExLDcgKzExNiw3IEBACiAJZ2l0IGRpZmYgLS1zdWJtb2R1bGUgPmFjdHVhbCAmJgogCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCiAJU3VibW9kdWxlIHNtMSAkaGVhZDEuLiRoZWFkMjoKLQkgID4gQWRkIGZvbzMKKwkgID4gQWRkIGZvbzMgKCRhZGRlZCBmb28zKQogCUVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwpAQCAtMTQyLDggKzE0Nyw4IEBACiAJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgogCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCiAJU3VibW9kdWxlIHNtMSAkaGVhZDIuLiRoZWFkMyAocmV3aW5kKToKLQkgIDwgQWRkIGZvbzMKLQkgIDwgQWRkIGZvbzIKKwkgIDwgQWRkIGZvbzMgKCRhZGRlZCBmb28zKQorCSAgPCBBZGQgZm9vMiAoJGFkZGVkIGZvbzIpCiAJRU9GCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCkBAIC0xNTMsMTAgKzE1OCwxMCBAQAogCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKIAljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgogCVN1Ym1vZHVsZSBzbTEgJGhlYWQyLi4uJGhlYWQ0OgotCSAgPiBBZGQgZm9vNQotCSAgPiBBZGQgZm9vNAotCSAgPCBBZGQgZm9vMwotCSAgPCBBZGQgZm9vMgorCSAgPiBBZGQgZm9vNSAoJGFkZGVkIGZvbzUpCisJICA+IEFkZCBmb280ICgkYWRkZWQgZm9vNCkKKwkgIDwgQWRkIGZvbzMgKCRhZGRlZCBmb28zKQorCSAgPCBBZGQgZm9vMiAoJGFkZGVkIGZvbzIpCiAJRU9GCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCmRpZmYgLS1naXQgYS90L3Q0MTExLWFwcGx5LXN1YmRpci5zaCBiL3QvdDQxMTEtYXBwbHktc3ViZGlyLnNoCmluZGV4IDdjMzk4NDMuLjE2MThhNmQgMTAwNzU1Ci0tLSBhL3QvdDQxMTEtYXBwbHktc3ViZGlyLnNoCisrKyBiL3QvdDQxMTEtYXBwbHktc3ViZGlyLnNoCkBAIC04Niw2ICs4NiwyMCBAQAogCXRlc3RfY21wIGV4cGVjdGVkIHN1Yi9kaXIvZmlsZQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBoYWxmLWJyb2tlbiBwYXRjaCBmcm9tIHN1YmRpciBvZiB0b3BsZXZlbCcgJworCSgKKwkJY2Qgc3ViL2RpciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgPDwtRU9GCisJCS0tLSBzdWIvZGlyL2ZpbGUKKwkJKysrIHN1Yi9kaXIvZmlsZQorCQlAQCAtMSwwICsxLDAgQEAKKwkJLS0tIGZpbGVfaW5fcm9vdAorCQkrKysgZmlsZV9pbl9yb290CisJCUBAIC0xLDAgKzEsMCBAQAorCQlFT0YKKwkpCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGZyb20gLmdpdCBkaXInICcKIAljcCBwb3N0aW1hZ2UgZXhwZWN0ZWQgJiYKIAljcCBwcmVpbWFnZSAuZ2l0L2ZpbGUgJiYKZGlmZiAtLWdpdCBhL3QvdDQxMTQtYXBwbHktdHlwZWNoYW5nZS5zaCBiL3QvdDQxMTQtYXBwbHktdHlwZWNoYW5nZS5zaAppbmRleCBmMTI4MjZmLi5lYmFkYmMzIDEwMDc1NQotLS0gYS90L3Q0MTE0LWFwcGx5LXR5cGVjaGFuZ2Uuc2gKKysrIGIvdC90NDExNC1hcHBseS10eXBlY2hhbmdlLnNoCkBAIC05LDIwICs5LDE5IEBACiAKIC4gLi90ZXN0LWxpYi5zaAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzZXR1cCByZXBvc2l0b3J5IGFuZCBjb21taXRzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvc2l0b3J5IGFuZCBjb21taXRzJyAnCiAJZWNobyAiaGVsbG8gd29ybGQiID4gZm9vICYmCiAJZWNobyAiaGkgcGxhbmV0IiA+IGJhciAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZm9vIGJhciAmJgogCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgogCWdpdCBicmFuY2ggaW5pdGlhbCAmJgogCXJtIC1mIGZvbyAmJgotCWxuIC1zIGJhciBmb28gJiYKLQlnaXQgdXBkYXRlLWluZGV4IGZvbyAmJgorCXRlc3RfbG5fc19hZGQgYmFyIGZvbyAmJgogCWdpdCBjb21taXQgLW0gImZvbyBzeW1saW5rZWQgdG8gYmFyIiAmJgogCWdpdCBicmFuY2ggZm9vLXN5bWxpbmtlZC10by1iYXIgJiYKLQlybSAtZiBmb28gJiYKKwlnaXQgcm0gLWYgZm9vICYmCiAJZWNobyAiaG93IGZhciBpcyB0aGUgc3VuPyIgPiBmb28gJiYKLQlnaXQgdXBkYXRlLWluZGV4IGZvbyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZm9vICYmCiAJZ2l0IGNvbW1pdCAtbSAiZm9vIGJhY2sgdG8gZmlsZSIgJiYKIAlnaXQgYnJhbmNoIGZvby1iYWNrLXRvLWZpbGUgJiYKIAlwcmludGYgIlwwIiA+IGZvbyAmJgpAQCAtNDIsNyArNDEsNyBAQAogCWdpdCBicmFuY2ggZm9vLWJhei1yZW5hbWVkLWZyb20tZm9vCiAJJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdmaWxlIHJlbmFtZWQgZnJvbSBmb28gdG8gZm9vL2JheicgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSByZW5hbWVkIGZyb20gZm9vIHRvIGZvby9iYXonICcKIAlnaXQgY2hlY2tvdXQgLWYgaW5pdGlhbCAmJgogCWdpdCBkaWZmLXRyZWUgLU0gLXAgSEVBRCBmb28tYmF6LXJlbmFtZWQtZnJvbS1mb28gPiBwYXRjaCAmJgogCWdpdCBhcHBseSAtLWluZGV4IDwgcGF0Y2gKQEAgLTUwLDcgKzQ5LDcgQEAKIHRlc3RfZGVidWcgJ2NhdCBwYXRjaCcKIAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdmaWxlIHJlbmFtZWQgZnJvbSBmb28vYmF6IHRvIGZvbycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSByZW5hbWVkIGZyb20gZm9vL2JheiB0byBmb28nICcKIAlnaXQgY2hlY2tvdXQgLWYgZm9vLWJhei1yZW5hbWVkLWZyb20tZm9vICYmCiAJZ2l0IGRpZmYtdHJlZSAtTSAtcCBIRUFEIGluaXRpYWwgPiBwYXRjaCAmJgogCWdpdCBhcHBseSAtLWluZGV4IDwgcGF0Y2gKQEAgLTU4LDcgKzU3LDcgQEAKIHRlc3RfZGVidWcgJ2NhdCBwYXRjaCcKIAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdkaXJlY3RvcnkgYmVjb21lcyBmaWxlJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXJlY3RvcnkgYmVjb21lcyBmaWxlJyAnCiAJZ2l0IGNoZWNrb3V0IC1mIGZvby1iZWNvbWVzLWEtZGlyZWN0b3J5ICYmCiAJZ2l0IGRpZmYtdHJlZSAtcCBIRUFEIGluaXRpYWwgPiBwYXRjaCAmJgogCWdpdCBhcHBseSAtLWluZGV4IDwgcGF0Y2gKQEAgLTY2LDcgKzY1LDcgQEAKIHRlc3RfZGVidWcgJ2NhdCBwYXRjaCcKIAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdmaWxlIGJlY29tZXMgZGlyZWN0b3J5JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGJlY29tZXMgZGlyZWN0b3J5JyAnCiAJZ2l0IGNoZWNrb3V0IC1mIGluaXRpYWwgJiYKIAlnaXQgZGlmZi10cmVlIC1wIEhFQUQgZm9vLWJlY29tZXMtYS1kaXJlY3RvcnkgPiBwYXRjaCAmJgogCWdpdCBhcHBseSAtLWluZGV4IDwgcGF0Y2gKQEAgLTc0LDcgKzczLDcgQEAKIHRlc3RfZGVidWcgJ2NhdCBwYXRjaCcKIAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdmaWxlIGJlY29tZXMgc3ltbGluaycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBiZWNvbWVzIHN5bWxpbmsnICcKIAlnaXQgY2hlY2tvdXQgLWYgaW5pdGlhbCAmJgogCWdpdCBkaWZmLXRyZWUgLXAgSEVBRCBmb28tc3ltbGlua2VkLXRvLWJhciA+IHBhdGNoICYmCiAJZ2l0IGFwcGx5IC0taW5kZXggPCBwYXRjaApAQCAtODIsMjEgKzgxLDIxIEBACiB0ZXN0X2RlYnVnICdjYXQgcGF0Y2gnCiAKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3ltbGluayBiZWNvbWVzIGZpbGUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWxpbmsgYmVjb21lcyBmaWxlJyAnCiAJZ2l0IGNoZWNrb3V0IC1mIGZvby1zeW1saW5rZWQtdG8tYmFyICYmCiAJZ2l0IGRpZmYtdHJlZSAtcCBIRUFEIGZvby1iYWNrLXRvLWZpbGUgPiBwYXRjaCAmJgogCWdpdCBhcHBseSAtLWluZGV4IDwgcGF0Y2gKIAknCiB0ZXN0X2RlYnVnICdjYXQgcGF0Y2gnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2JpbmFyeSBmaWxlIGJlY29tZXMgc3ltbGluaycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmluYXJ5IGZpbGUgYmVjb21lcyBzeW1saW5rJyAnCiAJZ2l0IGNoZWNrb3V0IC1mIGZvby1iZWNvbWVzLWJpbmFyeSAmJgogCWdpdCBkaWZmLXRyZWUgLXAgLS1iaW5hcnkgSEVBRCBmb28tc3ltbGlua2VkLXRvLWJhciA+IHBhdGNoICYmCiAJZ2l0IGFwcGx5IC0taW5kZXggPCBwYXRjaAogCScKIHRlc3RfZGVidWcgJ2NhdCBwYXRjaCcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3ltbGluayBiZWNvbWVzIGJpbmFyeSBmaWxlJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW1saW5rIGJlY29tZXMgYmluYXJ5IGZpbGUnICcKIAlnaXQgY2hlY2tvdXQgLWYgZm9vLXN5bWxpbmtlZC10by1iYXIgJiYKIAlnaXQgZGlmZi10cmVlIC1wIC0tYmluYXJ5IEhFQUQgZm9vLWJlY29tZXMtYmluYXJ5ID4gcGF0Y2ggJiYKIAlnaXQgYXBwbHkgLS1pbmRleCA8IHBhdGNoCkBAIC0xMDQsNyArMTAzLDcgQEAKIHRlc3RfZGVidWcgJ2NhdCBwYXRjaCcKIAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzeW1saW5rIGJlY29tZXMgZGlyZWN0b3J5JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW1saW5rIGJlY29tZXMgZGlyZWN0b3J5JyAnCiAJZ2l0IGNoZWNrb3V0IC1mIGZvby1zeW1saW5rZWQtdG8tYmFyICYmCiAJZ2l0IGRpZmYtdHJlZSAtcCBIRUFEIGZvby1iZWNvbWVzLWEtZGlyZWN0b3J5ID4gcGF0Y2ggJiYKIAlnaXQgYXBwbHkgLS1pbmRleCA8IHBhdGNoCkBAIC0xMTIsNyArMTExLDcgQEAKIHRlc3RfZGVidWcgJ2NhdCBwYXRjaCcKIAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdkaXJlY3RvcnkgYmVjb21lcyBzeW1saW5rJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXJlY3RvcnkgYmVjb21lcyBzeW1saW5rJyAnCiAJZ2l0IGNoZWNrb3V0IC1mIGZvby1iZWNvbWVzLWEtZGlyZWN0b3J5ICYmCiAJZ2l0IGRpZmYtdHJlZSAtcCBIRUFEIGZvby1zeW1saW5rZWQtdG8tYmFyID4gcGF0Y2ggJiYKIAlnaXQgYXBwbHkgLS1pbmRleCA8IHBhdGNoCmRpZmYgLS1naXQgYS90L3Q0MTE1LWFwcGx5LXN5bWxpbmsuc2ggYi90L3Q0MTE1LWFwcGx5LXN5bWxpbmsuc2gKaW5kZXggNzY3NGRkMi4uODcyZmNkYSAxMDA3NTUKLS0tIGEvdC90NDExNS1hcHBseS1zeW1saW5rLnNoCisrKyBiL3QvdDQxMTUtYXBwbHktc3ltbGluay5zaApAQCAtOSwxOCArOSwxNiBAQAogCiAuIC4vdGVzdC1saWIuc2gKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBzZXR1cCAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKIAotCWxuIC1zIHBhdGgxL3BhdGgyL3BhdGgzL3BhdGg0L3BhdGg1IGxpbmsxICYmCi0JZ2l0IGFkZCBsaW5rPyAmJgorCXRlc3RfbG5fc19hZGQgcGF0aDEvcGF0aDIvcGF0aDMvcGF0aDQvcGF0aDUgbGluazEgJiYKIAlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKIAogCWdpdCBicmFuY2ggc2lkZSAmJgogCiAJcm0gLWYgbGluaz8gJiYKIAotCWxuIC1zIGh0YXA2IGxpbmsxICYmCi0JZ2l0IHVwZGF0ZS1pbmRleCBsaW5rPyAmJgorCXRlc3RfbG5fc19hZGQgaHRhcDYgbGluazEgJiYKIAlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgogCiAJZ2l0IGRpZmYtdHJlZSAtcCBIRUFEXiBIRUFEID5wYXRjaCAgJiYKQEAgLTM3LDcgKzM1LDcgQEAKIAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdhcHBseSAtLWluZGV4IHN5bWxpbmsgcGF0Y2gnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0taW5kZXggc3ltbGluayBwYXRjaCcgJwogCiAJZ2l0IGNoZWNrb3V0IC1mIHNpZGUgJiYKIAlnaXQgYXBwbHkgLS1pbmRleCBwYXRjaCAmJgpkaWZmIC0tZ2l0IGEvdC90NDEyMi1hcHBseS1zeW1saW5rLWluc2lkZS5zaCBiL3QvdDQxMjItYXBwbHktc3ltbGluay1pbnNpZGUuc2gKaW5kZXggMzk0MDczNy4uNzBiM2EwNiAxMDA3NTUKLS0tIGEvdC90NDEyMi1hcHBseS1zeW1saW5rLWluc2lkZS5zaAorKysgYi90L3Q0MTIyLWFwcGx5LXN5bWxpbmstaW5zaWRlLnNoCkBAIC0xMCwxMSArMTAsMTEgQEAKIAlkb25lCiB9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1Mgc2V0dXAgJwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCiAKIAlta2RpciAtcCBhcmNoL2kzODYvYm9vdCBhcmNoL3g4Nl82NCAmJgogCWxlY2hvIDEgMiAzIDQgNSA+YXJjaC9pMzg2L2Jvb3QvTWFrZWZpbGUgJiYKLQlsbiAtcyAuLi9pMzg2L2Jvb3QgYXJjaC94ODZfNjQvYm9vdCAmJgorCXRlc3RfbG5fc19hZGQgLi4vaTM4Ni9ib290IGFyY2gveDg2XzY0L2Jvb3QgJiYKIAlnaXQgYWRkIC4gJiYKIAl0ZXN0X3RpY2sgJiYKIAlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKQEAgLTMxLDcgKzMxLDcgQEAKIAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIGFwcGx5ICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgYXBwbHkgJwogCiAJZ2l0IGNoZWNrb3V0IHRlc3QgJiYKIAlnaXQgZGlmZiAtLWV4aXQtY29kZSB0ZXN0ICYmCkBAIC00MCw3ICs0MCw3IEBACiAKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnY2hlY2sgcmVzdWx0JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayByZXN1bHQnICcKIAogCWdpdCBkaWZmIC0tZXhpdC1jb2RlIG1hc3RlciAmJgogCWdpdCBkaWZmIC0tZXhpdC1jb2RlIC0tY2FjaGVkIG1hc3RlciAmJgpkaWZmIC0tZ2l0IGEvdC90NDE1MC1hbS5zaCBiL3QvdDQxNTAtYW0uc2gKaW5kZXggMTJmNmIwMi4uNWVkYjc5YSAxMDA3NTUKLS0tIGEvdC90NDE1MC1hbS5zaAorKysgYi90L3Q0MTUwLWFtLnNoCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKIAl0ZXN0X3RpY2sgJiYKIAlnaXQgYW0gPHBhdGNoMSAmJgotCSEgdGVzdCAtZCAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCiAJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc2Vjb25kICYmCiAJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHNlY29uZCkiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKIAl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kXikiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXikiCkBAIC0xNTgsNyArMTU4LDcgQEAKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCiAJZ2l0IGFtIHBhdGNoMS5lbWwgJiYKLQkhIHRlc3QgLWQgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgogCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZCAmJgogCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmQpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCiAJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHNlY29uZF4pIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4pIgpAQCAtMTY5LDcgKzE2OSw3IEBACiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWdpdCBjaGVja291dCBmaXJzdCAmJgogCWdpdCBhbSBwYXRjaDEtY3JsZi5lbWwgJiYKLQkhIHRlc3QgLWQgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgogCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZCAmJgogCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmQpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCiAJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHNlY29uZF4pIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4pIgpAQCAtMTgwLDcgKzE4MCw3IEBACiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWdpdCBjaGVja291dCBmaXJzdCAmJgogCWdpdCBhbSBwYXRjaDEtd3MuZW1sICYmCi0JISB0ZXN0IC1kIC5naXQvcmViYXNlLWFwcGx5ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKIAlnaXQgZGlmZiAtLWV4aXQtY29kZSBzZWNvbmQgJiYKIAl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgogCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmReKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReKSIKQEAgLTIwNiw3ICsyMDYsNyBAQAogCWdpdCByZXNldCAtLWhhcmQgJiYKIAlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKIAlnaXQgYW0gcGF0Y2gyICYmCi0JISB0ZXN0IC1kIC5naXQvcmViYXNlLWFwcGx5ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKIAl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgbWFzdGVyXl4pIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF5eKSIgJiYKIAlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXIuLkhFQUQgJiYKIAlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXJeLi5IRUFEXiAmJgpAQCAtMjU4LDcgKzI1OCw3IEBACiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWdpdCBjaGVja291dCBIRUFEXiAmJgogCWdpdCBhbSAtLWtlZXAgcGF0Y2g0ICYmCi0JISB0ZXN0IC1kIC5naXQvcmViYXNlLWFwcGx5ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKIAlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmFjdHVhbCAmJgogCWdyZXAgIlJlOiBSZTogUmU6IFxbUEFUQ0ggMS81IHYyXF0gXFtmb29cXSB0aGlyZCIgYWN0dWFsCiAnCkBAIC0yNjgsNyArMjY4LDcgQEAKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJZ2l0IGNoZWNrb3V0IEhFQUReICYmCiAJZ2l0IGFtIC0ta2VlcC1ub24tcGF0Y2ggcGF0Y2g0ICYmCi0JISB0ZXN0IC1kIC5naXQvcmViYXNlLWFwcGx5ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKIAlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmFjdHVhbCAmJgogCWdyZXAgIl5cW2Zvb1xdIHRoaXJkIiBhY3R1YWwKICcKQEAgLTI4Myw3ICsyODMsNyBAQAogCXRlc3RfdGljayAmJgogCWdpdCBjb21taXQgLW0gImNvcGllZCBzdHVmZiIgJiYKIAlnaXQgYW0gLTMgbG9yZW0tbW92ZS5wYXRjaCAmJgotCSEgdGVzdCAtZCAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCiAJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbG9yZW0KICcKIApAQCAtMjk3LDcgKzI5Nyw3IEBACiAJdGVzdF90aWNrICYmCiAJZ2l0IGNvbW1pdCAtbSAiY29waWVkIHN0dWZmIiAmJgogCWdpdCBhbSAtMyAtcDAgbG9yZW0temVyby5wYXRjaCAmJgotCSEgdGVzdCAtZCAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCiAJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbG9yZW0KICcKIApAQCAtMzA3LDcgKzMwNyw3IEBACiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWdpdCBjaGVja291dCBsb3JlbV4wICYmCiAJZ2l0IGFtIHJlbmFtZS5wYXRjaCAmJgotCSEgdGVzdCAtZCAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKIAlnaXQgZGlmZiAtLWV4aXQtY29kZSByZW5hbWUKICcKQEAgLTMxOCw3ICszMTgsNyBAQAogCWdpdCByZXNldCAtLWhhcmQgJiYKIAlnaXQgY2hlY2tvdXQgbG9yZW1eMCAmJgogCWdpdCBhbSAtMyByZW5hbWUucGF0Y2ggJiYKLQkhIHRlc3QgLWQgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCiAJZ2l0IGRpZmYgLS1leGl0LWNvZGUgcmVuYW1lCiAnCkBAIC0zMjksNyArMzI5LDcgQEAKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJZ2l0IGNoZWNrb3V0IGxvcmVtXjAgJiYKIAlnaXQgYW0gLTMgcmVuYW1lLWFkZC5wYXRjaCAmJgotCSEgdGVzdCAtZCAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKIAlnaXQgZGlmZiAtLWV4aXQtY29kZSByZW5hbWUKICcKQEAgLTM1OCwxMSArMzU4LDE3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXNraXAgd29ya3MnICcKIAllY2hvIGdvb2RieWUgPmV4cGVjdGVkICYmCiAJZ2l0IGFtIC0tc2tpcCAmJgotCSEgdGVzdCAtZCAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCiAJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbG9yZW0yXl4gLS0gZmlsZSAmJgogCXRlc3RfY21wIGV4cGVjdGVkIGFub3RoZXIKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1hYm9ydCByZW1vdmVzIGEgc3RyYXkgZGlyZWN0b3J5JyAnCisJbWtkaXIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgYW0gLS1hYm9ydCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5CisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tcmVzb2x2ZWQgd29ya3MnICcKIAllY2hvIGdvb2RieWUgPmV4cGVjdGVkICYmCiAJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCkBAIC0zNzMsNyArMzc5LDcgQEAKIAllY2hvIHJlc29sdmVkID4+ZmlsZSAmJgogCWdpdCBhZGQgZmlsZSAmJgogCWdpdCBhbSAtLXJlc29sdmVkICYmCi0JISB0ZXN0IC1kIC5naXQvcmViYXNlLWFwcGx5ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCBhbm90aGVyCiAnCiAKQEAgLTM4Miw3ICszODgsNyBAQAogCWdpdCByZXNldCAtLWhhcmQgJiYKIAlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKIAljYXQgcGluZSBwYXRjaDEgfCBnaXQgYW0gJiYKLQkhIHRlc3QgLWQgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgogCWdpdCBkaWZmIC0tZXhpdC1jb2RlIG1hc3Rlcl4uLkhFQUQKICcKIApAQCAtMzkxLDcgKzM5Nyw3IEBACiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSA8ZmFpbG1haWwgJiYKIAlnaXQgYW0gLS1hYm9ydCAmJgotCSEgdGVzdCAtZCAuZ2l0L3JlYmFzZS1hcHBseQorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGZhaWxzIG9uIGVtcHR5IHBhdGNoJyAnCkBAIC00MDAsNyArNDA2LDcgQEAKIAllY2hvICItLS0iID4+ZmFpbG1haWwgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgYW0gPGZhaWxtYWlsICYmCiAJZ2l0IGFtIC0tc2tpcCAmJgotCSEgdGVzdCAtZCAuZ2l0L3JlYmFzZS1hcHBseQorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdvcmtzIGZyb20gc3RkaW4gaW4gc3ViZGlyZWN0b3J5JyAnCmRpZmYgLS1naXQgYS90L3Q0MjAyLWxvZy5zaCBiL3QvdDQyMDItbG9nLnNoCmluZGV4IDkyNDNhOTcuLmNiMDNkMjggMTAwNzU1Ci0tLSBhL3QvdDQyMDItbG9nLnNoCisrKyBiL3QvdDQyMDItbG9nLnNoCkBAIC01MzAsNiArNTMwLDIwIEBACiAJKQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC1jIC0tZm9sbG93JyAnCisJdGVzdF9jcmVhdGVfcmVwbyBmb2xsb3ctYyAmJgorCSgKKwkJY2QgZm9sbG93LWMgJiYKKwkJdGVzdF9jb21taXQgaW5pdGlhbCBmaWxlIG9yaWdpbmFsICYmCisJCWdpdCBybSBmaWxlICYmCisJCXRlc3RfY29tbWl0IHJlbmFtZSBmaWxlMiBvcmlnaW5hbCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwkJdGVzdF9jb21taXQgbW9kaWZ5IGZpbGUgZm9vICYmCisJCWdpdCBtZXJnZSAtbSBtZXJnZSByZW5hbWUgJiYKKwkJZ2l0IGxvZyAtYyAtLWZvbGxvdyBmaWxlMgorCSkKKycKKwogY2F0ID5leHBlY3QgPDxcRU9GCiAqICAgY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRQogfFwgIE1lcmdlOiBNRVJHRV9QQVJFTlRTCmRpZmYgLS1naXQgYS90L3Q0MjAzLW1haWxtYXAuc2ggYi90L3Q0MjAzLW1haWxtYXAuc2gKaW5kZXggODQyYjc1NC4uYmFhNDY4NSAxMDA3NTUKLS0tIGEvdC90NDIwMy1tYWlsbWFwLnNoCisrKyBiL3QvdDQyMDMtbWFpbG1hcC5zaApAQCAtMTMsNiArMTMsMTEgQEAKIH0KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJY2F0ID5jb250YWN0cyA8PC1cRU9GICYmCisJQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwluaWNrMSA8YnVnc0Bjb21wYW55Lnh4PgorCUVPRgorCiAJZWNobyBvbmUgPm9uZSAmJgogCWdpdCBhZGQgb25lICYmCiAJdGVzdF90aWNrICYmCkBAIC0yMyw2ICsyOCw0NCBAQAogCWdpdCBjb21taXQgLS1hdXRob3IgIm5pY2sxIDxidWdzQGNvbXBhbnkueHg+IiAtbSBzZWNvbmQKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2stbWFpbG1hcCBubyBhcmd1bWVudHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stbWFpbG1hcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjay1tYWlsbWFwIGFyZ3VtZW50cycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCW5pY2sxIDxidWdzQGNvbXBhbnkueHg+CisJRU9GCisJZ2l0IGNoZWNrLW1haWxtYXAgXAorCQkiQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4iIFwKKwkJIm5pY2sxIDxidWdzQGNvbXBhbnkueHg+IiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjay1tYWlsbWFwIC0tc3RkaW4nICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwluaWNrMSA8YnVnc0Bjb21wYW55Lnh4PgorCUVPRgorCWdpdCBjaGVjay1tYWlsbWFwIC0tc3RkaW4gPGNvbnRhY3RzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrLW1haWxtYXAgLS1zdGRpbiBhcmd1bWVudHMnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJSW50ZXJuYWwgR3V5IDxidWdzQGNvbXBhbnkueHk+CisJRU9GCisJY2F0IDxjb250YWN0cyA+PmV4cGVjdCAmJgorCWdpdCBjaGVjay1tYWlsbWFwIC0tc3RkaW4gIkludGVybmFsIEd1eSA8YnVnc0Bjb21wYW55Lnh5PiIgXAorCQk8Y29udGFjdHMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2stbWFpbG1hcCBib2d1cyBjb250YWN0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrLW1haWxtYXAgYm9ndXMKKycKKwogY2F0ID5leHBlY3QgPDxcRU9GCiBBIFUgVGhvciAoMSk6CiAgICAgICBpbml0aWFsCkBAIC0yNDcsNiArMjkwLDI0IEBACiAJcm0gLWYgLm1haWxtYXAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2luZ2xlLWNoYXJhY3RlciBuYW1lJyAnCisJZWNobyAiICAgICAxCUEgPGF1dGhvckBleGFtcGxlLmNvbT4iID5leHBlY3QgJiYKKwllY2hvICIgICAgIDEJbmljazEgPGJ1Z3NAY29tcGFueS54eD4iID4+ZXhwZWN0ICYmCisJZWNobyAiQSA8YXV0aG9yQGV4YW1wbGUuY29tPiIgPi5tYWlsbWFwICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAubWFpbG1hcCIgJiYKKwlnaXQgc2hvcnRsb2cgLWVzIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlc2VydmUgY2Fub25pY2FsIGVtYWlsIGNhc2UnICcKKwllY2hvICIgICAgIDEJQSBVIFRob3IgPEFVVEhPUkBleGFtcGxlLmNvbT4iID5leHBlY3QgJiYKKwllY2hvICIgICAgIDEJbmljazEgPGJ1Z3NAY29tcGFueS54eD4iID4+ZXhwZWN0ICYmCisJZWNobyAiPEFVVEhPUkBleGFtcGxlLmNvbT4gPGF1dGhvckBleGFtcGxlLmNvbT4iID4ubWFpbG1hcCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLm1haWxtYXAiICYmCisJZ2l0IHNob3J0bG9nIC1lcyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKICMgRXh0ZW5kZWQgbWFpbG1hcCBjb25maWd1cmF0aW9ucyBzaG91bGQgZ2l2ZSB1cyB0aGUgZm9sbG93aW5nIG91dHB1dCBmb3Igc2hvcnRsb2cKIGNhdCA+ZXhwZWN0IDw8XEVPRgogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4gKDEpOgpkaWZmIC0tZ2l0IGEvdC90NDIwNS1sb2ctcHJldHR5LWZvcm1hdHMuc2ggYi90L3Q0MjA1LWxvZy1wcmV0dHktZm9ybWF0cy5zaAppbmRleCAyNmZiZmRlLi5mYjAwMDQxIDEwMDc1NQotLS0gYS90L3Q0MjA1LWxvZy1wcmV0dHktZm9ybWF0cy5zaAorKysgYi90L3Q0MjA1LWxvZy1wcmV0dHktZm9ybWF0cy5zaApAQCAtMSwyMCArMSwzOCBAQAogIyEvYmluL3NoCiAjCiAjIENvcHlyaWdodCAoYykgMjAxMCwgV2lsbCBQYWxtZXIKKyMgQ29weXJpZ2h0IChjKSAyMDExLCBBbGV4ZXkgU2h1bWtpbiAoKyBub24tVVRGLTggY29tbWl0IGVuY29kaW5nIHRlc3RzKQogIwogCiB0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHByZXR0eSBmb3JtYXRzJwogLiAuL3Rlc3QtbGliLnNoCiAKK3NhbXBsZV91dGY4X3BhcnQ9JChwcmludGYgImZcMzAzXDI0NG5nIikKKworY29tbWl0X21zZyAoKSB7CisJIyBTdHJpbmcgImluaXRpYWwuIGluaXRpYWwiIHBhcnRseSBpbiBHZXJtYW4KKwkjICh0cmFuc2xhdGVkIHdpdGggR29vZ2xlIFRyYW5zbGF0ZSksCisJIyBlbmNvZGVkIGluIFVURi04LCB1c2VkIGFzIGEgY29tbWl0IGxvZyBtZXNzYWdlIGJlbG93LgorCW1zZz0iaW5pdGlhbC4gYW4ke3NhbXBsZV91dGY4X3BhcnR9bGljaFxuIgorCWlmIHRlc3QgLW4gIiQxIgorCXRoZW4KKwkJcHJpbnRmICIkbXNnIiB8IGljb252IC1mIHV0Zi04IC10ICIkMSIKKwllbHNlCisJCXByaW50ZiAiJG1zZyIKKwlmaQorfQorCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgYmFzaWMgcmVwb3MnICcKIAk+Zm9vICYmCiAJPmJhciAmJgogCWdpdCBhZGQgZm9vICYmCiAJdGVzdF90aWNrICYmCi0JZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdEVuY29kaW5nIGlzbzg4NTktMSAmJgorCWdpdCBjb21taXQgLW0gIiQoY29tbWl0X21zZyBpc284ODU5LTEpIiAmJgogCWdpdCBhZGQgYmFyICYmCiAJdGVzdF90aWNrICYmCi0JZ2l0IGNvbW1pdCAtbSAiYWRkIGJhciIKKwlnaXQgY29tbWl0IC1tICJhZGQgYmFyIiAmJgorCWdpdCBjb25maWcgLS11bnNldCBpMThuLmNvbW1pdEVuY29kaW5nCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWFzIGJ1aWx0aW4gZm9ybWF0JyAnCkBAIC0zOCw2ICs1NiwyMCBAQAogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGlhcyB1c2VyLWRlZmluZWQgdGZvcm1hdCB3aXRoICVzIChpc284ODU5LTEgZW5jb2RpbmcpJyAnCisJZ2l0IGNvbmZpZyBpMThuLmxvZ091dHB1dEVuY29kaW5nIGlzbzg4NTktMSAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5leHBlY3RlZC1zICYmCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolaCAlcyIgPmFjdHVhbC1zICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1zIGFjdHVhbC1zCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWFzIHVzZXItZGVmaW5lZCB0Zm9ybWF0IHdpdGggJXMgKHV0Zi04IGVuY29kaW5nKScgJworCWdpdCBsb2cgLS1vbmVsaW5lID5leHBlY3RlZC1zICYmCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolaCAlcyIgPmFjdHVhbC1zICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtcyBhY3R1YWwtcworJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGlhcyB1c2VyLWRlZmluZWQgdGZvcm1hdCcgJwogCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWgiID5leHBlY3RlZCAmJgogCWdpdCBjb25maWcgcHJldHR5LnRlc3QtYWxpYXMgInRmb3JtYXQ6JWgiICYmCkBAIC03MiwxMyArMTA0LDEzIEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05VTCBzZXBhcmF0aW9uJyAnCi0JcHJpbnRmICJhZGQgYmFyXDBpbml0aWFsIiA+ZXhwZWN0ZWQgJiYKKwlwcmludGYgImFkZCBiYXJcMCQoY29tbWl0X21zZykiID5leHBlY3RlZCAmJgogCWdpdCBsb2cgLXogLS1wcmV0dHk9ImZvcm1hdDolcyIgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdOVUwgdGVybWluYXRpb24nICcKLQlwcmludGYgImFkZCBiYXJcMGluaXRpYWxcMCIgPmV4cGVjdGVkICYmCisJcHJpbnRmICJhZGQgYmFyXDAkKGNvbW1pdF9tc2cpXDAiID5leHBlY3RlZCAmJgogCWdpdCBsb2cgLXogLS1wcmV0dHk9InRmb3JtYXQ6JXMiID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKQEAgLTg2LDcgKzExOCw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdOVUwgc2VwYXJhdGlvbiB3aXRoIC0tc3RhdCcgJwogCXN0YXQwX3BhcnQ9JChnaXQgZGlmZiAtLXN0YXQgSEVBRF4gSEVBRCkgJiYKIAlzdGF0MV9wYXJ0PSQoZ2l0IGRpZmYtdHJlZSAtLW5vLWNvbW1pdC1pZCAtLXN0YXQgLS1yb290IEhFQUReKSAmJgotCXByaW50ZiAiYWRkIGJhclxuJHN0YXQwX3BhcnRcblwwaW5pdGlhbFxuJHN0YXQxX3BhcnRcbiIgPmV4cGVjdGVkICYmCisJcHJpbnRmICJhZGQgYmFyXG4kc3RhdDBfcGFydFxuXDAkKGNvbW1pdF9tc2cpXG4kc3RhdDFfcGFydFxuIiA+ZXhwZWN0ZWQgJiYKIAlnaXQgbG9nIC16IC0tc3RhdCAtLXByZXR0eT0iZm9ybWF0OiVzIiA+YWN0dWFsICYmCiAJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAogJwpAQCAtOTQsMjUgKzEyNiwyOSBAQAogdGVzdF9leHBlY3RfZmFpbHVyZSAnTlVMIHRlcm1pbmF0aW9uIHdpdGggLS1zdGF0JyAnCiAJc3RhdDBfcGFydD0kKGdpdCBkaWZmIC0tc3RhdCBIRUFEXiBIRUFEKSAmJgogCXN0YXQxX3BhcnQ9JChnaXQgZGlmZi10cmVlIC0tbm8tY29tbWl0LWlkIC0tc3RhdCAtLXJvb3QgSEVBRF4pICYmCi0JcHJpbnRmICJhZGQgYmFyXG4kc3RhdDBfcGFydFxuXDBpbml0aWFsXG4kc3RhdDFfcGFydFxuXDAiID5leHBlY3RlZCAmJgorCXByaW50ZiAiYWRkIGJhclxuJHN0YXQwX3BhcnRcblwwJChjb21taXRfbXNnKVxuJHN0YXQxX3BhcnRcbjAiID5leHBlY3RlZCAmJgogCWdpdCBsb2cgLXogLS1zdGF0IC0tcHJldHR5PSJ0Zm9ybWF0OiVzIiA+YWN0dWFsICYmCiAJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBtb3JlIGNvbW1pdHMnICcKIAl0ZXN0X2NvbW1pdCAibWVzc2FnZSBvbmUiIG9uZSBvbmUgbWVzc2FnZS1vbmUgJiYKLQl0ZXN0X2NvbW1pdCAibWVzc2FnZSB0d28iIHR3byB0d28gbWVzc2FnZS10d28KKwl0ZXN0X2NvbW1pdCAibWVzc2FnZSB0d28iIHR3byB0d28gbWVzc2FnZS10d28gJiYKKwloZWFkMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1zaG9ydCBIRUFEfjApICYmCisJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tc2hvcnQgSEVBRH4xKSAmJgorCWhlYWQzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXNob3J0IEhFQUR+MikgJiYKKwloZWFkND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1zaG9ydCBIRUFEfjMpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xlZnQgYWxpZ25tZW50IGZvcm1hdHRpbmcnICcKIAlnaXQgbG9nIC0tcHJldHR5PSJmb3JtYXQ6JTwoNDApJXMiID5hY3R1YWwgJiYKIAkjIGNvbXBsZXRlIHRoZSBpbmNvbXBsZXRlIGxpbmUgYXQgdGhlIGVuZAogCWVjaG8gPj5hY3R1YWwgJiYKLQlxel90b190YWJfc3BhY2UgPDxcRU9GID5leHBlY3RlZCAmJgorCXF6X3RvX3RhYl9zcGFjZSA8PEVPRiA+ZXhwZWN0ZWQgJiYKIG1lc3NhZ2UgdHdvICAgICAgICAgICAgICAgICAgICAgICAgICAgIFoKIG1lc3NhZ2Ugb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFoKIGFkZCBiYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFoKLWluaXRpYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFoKKyQoY29tbWl0X21zZykgICAgICAgICAgICAgICAgICAgIFoKIEVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwpAQCAtMTIxLDExICsxNTcsMTEgQEAKIAlnaXQgbG9nIC0tcHJldHR5PSJmb3JtYXQ6JWggJTx8KDQwKSVzIiA+YWN0dWFsICYmCiAJIyBjb21wbGV0ZSB0aGUgaW5jb21wbGV0ZSBsaW5lIGF0IHRoZSBlbmQKIAllY2hvID4+YWN0dWFsICYmCi0JcXpfdG9fdGFiX3NwYWNlIDw8XEVPRiA+ZXhwZWN0ZWQgJiYKLWZhMzNhYjEgbWVzc2FnZSB0d28gICAgICAgICAgICAgICAgICAgIFoKLTdjZDZjNjMgbWVzc2FnZSBvbmUgICAgICAgICAgICAgICAgICAgIFoKLTE3MTFiZjkgYWRkIGJhciAgICAgICAgICAgICAgICAgICAgICAgIFoKLWFmMjBjMDYgaW5pdGlhbCAgICAgICAgICAgICAgICAgICAgICAgIFoKKwlxel90b190YWJfc3BhY2UgPDxFT0YgPmV4cGVjdGVkICYmCiskaGVhZDEgbWVzc2FnZSB0d28gICAgICAgICAgICAgICAgICAgIFoKKyRoZWFkMiBtZXNzYWdlIG9uZSAgICAgICAgICAgICAgICAgICAgWgorJGhlYWQzIGFkZCBiYXIgICAgICAgICAgICAgICAgICAgICAgICBaCiskaGVhZDQgJChjb21taXRfbXNnKSAgICAgICAgICAgIFoKIEVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwpAQCAtMTM0LDExICsxNzAsMTEgQEAKIAlnaXQgbG9nIC0tcHJldHR5PSJmb3JtYXQ6JTwoMSklcyIgPmFjdHVhbCAmJgogCSMgY29tcGxldGUgdGhlIGluY29tcGxldGUgbGluZSBhdCB0aGUgZW5kCiAJZWNobyA+PmFjdHVhbCAmJgotCWNhdCA8PFxFT0YgPmV4cGVjdGVkICYmCisJY2F0IDw8RU9GID5leHBlY3RlZCAmJgogbWVzc2FnZSB0d28KIG1lc3NhZ2Ugb25lCiBhZGQgYmFyCi1pbml0aWFsCiskKGNvbW1pdF9tc2cpCiBFT0YKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKQEAgLTE0NywxMSArMTgzLDExIEBACiAJZ2l0IGxvZyAtLXByZXR0eT0iZm9ybWF0OiU8KDEwLHRydW5jKSVzIiA+YWN0dWFsICYmCiAJIyBjb21wbGV0ZSB0aGUgaW5jb21wbGV0ZSBsaW5lIGF0IHRoZSBlbmQKIAllY2hvID4+YWN0dWFsICYmCi0JcXpfdG9fdGFiX3NwYWNlIDw8XEVPRiA+ZXhwZWN0ZWQgJiYKKwlxel90b190YWJfc3BhY2UgPDxFT0YgPmV4cGVjdGVkICYmCiBtZXNzYWdlIC4uCiBtZXNzYWdlIC4uCiBhZGQgYmFyICBaCi1pbml0aWFsICBaCitpbml0aWFsLi4uCiBFT0YKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKQEAgLTE2MCwxMSArMTk2LDExIEBACiAJZ2l0IGxvZyAtLXByZXR0eT0iZm9ybWF0OiU8KDEwLGx0cnVuYyklcyIgPmFjdHVhbCAmJgogCSMgY29tcGxldGUgdGhlIGluY29tcGxldGUgbGluZSBhdCB0aGUgZW5kCiAJZWNobyA+PmFjdHVhbCAmJgotCXF6X3RvX3RhYl9zcGFjZSA8PFxFT0YgPmV4cGVjdGVkICYmCisJcXpfdG9fdGFiX3NwYWNlIDw8RU9GID5leHBlY3RlZCAmJgogLi5zYWdlIHR3bwogLi5zYWdlIG9uZQogYWRkIGJhciAgWgotaW5pdGlhbCAgWgorLi4ke3NhbXBsZV91dGY4X3BhcnR9bGljaAogRU9GCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCkBAIC0xNzMsMTEgKzIwOSwxMSBAQAogCWdpdCBsb2cgLS1wcmV0dHk9ImZvcm1hdDolPCgxMCxtdHJ1bmMpJXMiID5hY3R1YWwgJiYKIAkjIGNvbXBsZXRlIHRoZSBpbmNvbXBsZXRlIGxpbmUgYXQgdGhlIGVuZAogCWVjaG8gPj5hY3R1YWwgJiYKLQlxel90b190YWJfc3BhY2UgPDxcRU9GID5leHBlY3RlZCAmJgorCXF6X3RvX3RhYl9zcGFjZSA8PEVPRiA+ZXhwZWN0ZWQgJiYKIG1lc3MuLiB0d28KIG1lc3MuLiBvbmUKIGFkZCBiYXIgIFoKLWluaXRpYWwgIFoKK2luaXQuLmxpY2gKIEVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwpAQCAtMTg2LDExICsyMjIsMTEgQEAKIAlnaXQgbG9nIC0tcHJldHR5PSJmb3JtYXQ6JT4oNDApJXMiID5hY3R1YWwgJiYKIAkjIGNvbXBsZXRlIHRoZSBpbmNvbXBsZXRlIGxpbmUgYXQgdGhlIGVuZAogCWVjaG8gPj5hY3R1YWwgJiYKLQlxel90b190YWJfc3BhY2UgPDxcRU9GID5leHBlY3RlZCAmJgorCXF6X3RvX3RhYl9zcGFjZSA8PEVPRiA+ZXhwZWN0ZWQgJiYKIFogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSB0d28KIFogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSBvbmUKIFogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCBiYXIKLVogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwKK1ogICAgICAgICAgICAgICAgICAgICQoY29tbWl0X21zZykKIEVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwpAQCAtMTk5LDExICsyMzUsMTEgQEAKIAlnaXQgbG9nIC0tcHJldHR5PSJmb3JtYXQ6JWggJT58KDQwKSVzIiA+YWN0dWFsICYmCiAJIyBjb21wbGV0ZSB0aGUgaW5jb21wbGV0ZSBsaW5lIGF0IHRoZSBlbmQKIAllY2hvID4+YWN0dWFsICYmCi0JcXpfdG9fdGFiX3NwYWNlIDw8XEVPRiA+ZXhwZWN0ZWQgJiYKLWZhMzNhYjEgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSB0d28KLTdjZDZjNjMgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSBvbmUKLTE3MTFiZjkgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCBiYXIKLWFmMjBjMDYgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwKKwlxel90b190YWJfc3BhY2UgPDxFT0YgPmV4cGVjdGVkICYmCiskaGVhZDEgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSB0d28KKyRoZWFkMiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIG9uZQorJGhlYWQzICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgYmFyCiskaGVhZDQgICAgICAgICAgICAgICQoY29tbWl0X21zZykKIEVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwpAQCAtMjEyLDExICsyNDgsMTEgQEAKIAlnaXQgbG9nIC0tcHJldHR5PSJmb3JtYXQ6JT4oMSklcyIgPmFjdHVhbCAmJgogCSMgY29tcGxldGUgdGhlIGluY29tcGxldGUgbGluZSBhdCB0aGUgZW5kCiAJZWNobyA+PmFjdHVhbCAmJgotCWNhdCA8PFxFT0YgPmV4cGVjdGVkICYmCisJY2F0IDw8RU9GID5leHBlY3RlZCAmJgogbWVzc2FnZSB0d28KIG1lc3NhZ2Ugb25lCiBhZGQgYmFyCi1pbml0aWFsCiskKGNvbW1pdF9tc2cpCiBFT0YKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKQEAgLTIyNSwxMSArMjYxLDExIEBACiAJZ2l0IGxvZyAtLXByZXR0eT0iZm9ybWF0OiU+PCg0MCklcyIgPmFjdHVhbCAmJgogCSMgY29tcGxldGUgdGhlIGluY29tcGxldGUgbGluZSBhdCB0aGUgZW5kCiAJZWNobyA+PmFjdHVhbCAmJgotCXF6X3RvX3RhYl9zcGFjZSA8PFxFT0YgPmV4cGVjdGVkICYmCisJcXpfdG9fdGFiX3NwYWNlIDw8RU9GID5leHBlY3RlZCAmJgogWiAgICAgICAgICAgICBtZXNzYWdlIHR3byAgICAgICAgICAgICAgWgogWiAgICAgICAgICAgICBtZXNzYWdlIG9uZSAgICAgICAgICAgICAgWgogWiAgICAgICAgICAgICAgIGFkZCBiYXIgICAgICAgICAgICAgICAgWgotWiAgICAgICAgICAgICAgIGluaXRpYWwgICAgICAgICAgICAgICAgWgorWiAgICAgICAgICQoY29tbWl0X21zZykgICAgICAgICAgWgogRU9GCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCkBAIC0yMzgsMTEgKzI3NCwxMSBAQAogCWdpdCBsb2cgLS1wcmV0dHk9ImZvcm1hdDolaCAlPjx8KDQwKSVzIiA+YWN0dWFsICYmCiAJIyBjb21wbGV0ZSB0aGUgaW5jb21wbGV0ZSBsaW5lIGF0IHRoZSBlbmQKIAllY2hvID4+YWN0dWFsICYmCi0JcXpfdG9fdGFiX3NwYWNlIDw8XEVPRiA+ZXhwZWN0ZWQgJiYKLWZhMzNhYjEgICAgICAgICAgIG1lc3NhZ2UgdHdvICAgICAgICAgIFoKLTdjZDZjNjMgICAgICAgICAgIG1lc3NhZ2Ugb25lICAgICAgICAgIFoKLTE3MTFiZjkgICAgICAgICAgICAgYWRkIGJhciAgICAgICAgICAgIFoKLWFmMjBjMDYgICAgICAgICAgICAgaW5pdGlhbCAgICAgICAgICAgIFoKKwlxel90b190YWJfc3BhY2UgPDxFT0YgPmV4cGVjdGVkICYmCiskaGVhZDEgICAgICAgICAgIG1lc3NhZ2UgdHdvICAgICAgICAgIFoKKyRoZWFkMiAgICAgICAgICAgbWVzc2FnZSBvbmUgICAgICAgICAgWgorJGhlYWQzICAgICAgICAgICAgIGFkZCBiYXIgICAgICAgICAgICBaCiskaGVhZDQgICAgICAgJChjb21taXRfbXNnKSAgICAgIFoKIEVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwpAQCAtMjUxLDExICsyODcsMTEgQEAKIAlnaXQgbG9nIC0tcHJldHR5PSJmb3JtYXQ6JT48KDEpJXMiID5hY3R1YWwgJiYKIAkjIGNvbXBsZXRlIHRoZSBpbmNvbXBsZXRlIGxpbmUgYXQgdGhlIGVuZAogCWVjaG8gPj5hY3R1YWwgJiYKLQljYXQgPDxcRU9GID5leHBlY3RlZCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ZWQgJiYKIG1lc3NhZ2UgdHdvCiBtZXNzYWdlIG9uZQogYWRkIGJhcgotaW5pdGlhbAorJChjb21taXRfbXNnKQogRU9GCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCkBAIC0yNjUsMTEgKzMwMSwxMSBAQAogCWdpdCBsb2cgLS1wcmV0dHk9ImZvcm1hdDolPCgxMCx0cnVuYyklcyU+PigxMCxsdHJ1bmMpJSBhbiIgPmFjdHVhbCAmJgogCSMgY29tcGxldGUgdGhlIGluY29tcGxldGUgbGluZSBhdCB0aGUgZW5kCiAJZWNobyA+PmFjdHVhbCAmJgotCWNhdCA8PFxFT0YgPmV4cGVjdGVkICYmCisJY2F0IDw8RU9GID5leHBlY3RlZCAmJgogc2hvcnQgbG9uZyAgbG9uZyBsb25nCiBtZXNzYWdlIC4uICAgQSBVIFRob3IKIGFkZCBiYXIgICAgICBBIFUgVGhvcgotaW5pdGlhbCAgICAgIEEgVSBUaG9yCitpbml0aWFsLi4uICAgQSBVIFRob3IKIEVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwpkaWZmIC0tZ2l0IGEvdC90NDIxMS1saW5lLWxvZy5zaCBiL3QvdDQyMTEtbGluZS1sb2cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzY2NWQ2NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEtbGluZS1sb2cuc2gKQEAgLTAsMCArMSw4MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgbG9nIC1MJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIChpbXBvcnQgaGlzdG9yeSknICcKKwlnaXQgZmFzdC1pbXBvcnQgPCAiJFRFU1RfRElSRUNUT1JZIi90NDIxMS9oaXN0b3J5LmV4cG9ydCAmJgorCWdpdCByZXNldCAtLWhhcmQKKycKKworY2FubmVkX3Rlc3RfMSAoKSB7CisJdGVzdF9leHBlY3RfJDEgIiQyIiAiCisJCWdpdCBsb2cgJDIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBcIlwkVEVTVF9ESVJFQ1RPUllcIi90NDIxMS9leHBlY3QuJDMgYWN0dWFsCisJIgorfQorCitjYW5uZWRfdGVzdCAoKSB7CisJY2FubmVkX3Rlc3RfMSBzdWNjZXNzICIkQCIKK30KK2Nhbm5lZF90ZXN0X2ZhaWx1cmUgKCkgeworCWNhbm5lZF90ZXN0XzEgZmFpbHVyZSAiJEAiCit9CisKK3Rlc3RfYmFkX29wdHMgKCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImludmFsaWQgYXJnczogJDEiICIKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAkMSAyPmVycm9ycyAmJgorCQlncmVwICckMicgZXJyb3JzCisJIgorfQorCitjYW5uZWRfdGVzdCAiLUwgNCwxMjphLmMgc2ltcGxlIiBzaW1wbGUtZgorY2FubmVkX3Rlc3QgIi1MIDQsKzk6YS5jIHNpbXBsZSIgc2ltcGxlLWYKK2Nhbm5lZF90ZXN0ICItTCAnL2xvbmcgZi8sL159LzphLmMnIHNpbXBsZSIgc2ltcGxlLWYKK2Nhbm5lZF90ZXN0ICItTCA6ZjphLmMgc2ltcGxlIiBzaW1wbGUtZi10by1tYWluCisKK2Nhbm5lZF90ZXN0ICItTCAnL21haW4vLC9efS86YS5jJyBzaW1wbGUiIHNpbXBsZS1tYWluCitjYW5uZWRfdGVzdCAiLUwgOm1haW46YS5jIHNpbXBsZSIgc2ltcGxlLW1haW4tdG8tZW5kCisKK2Nhbm5lZF90ZXN0ICItTCAxLCs0OmEuYyBzaW1wbGUiIGJlZ2lubmluZy1vZi1maWxlCisKK2Nhbm5lZF90ZXN0ICItTCAyMDphLmMgc2ltcGxlIiBlbmQtb2YtZmlsZQorCitjYW5uZWRfdGVzdCAiLUwgJy9sb25nIGYvJywvXn0vOmEuYyAtTCAvbWFpbi8sL159LzphLmMgc2ltcGxlIiB0d28tcmFuZ2VzCitjYW5uZWRfdGVzdCAiLUwgMjQsKzE6YS5jIHNpbXBsZSIgdmFuaXNoZXMtZWFybHkKKworY2FubmVkX3Rlc3QgIi1NIC1MICcvbG9uZyBmLywvXn0vOmIuYycgbW92ZS1zdXBwb3J0IiBtb3ZlLXN1cHBvcnQtZgorY2FubmVkX3Rlc3QgIi1NIC1MICc6ZjpiLmMnIHBhcmFsbGVsLWNoYW5nZSIgcGFyYWxsZWwtY2hhbmdlLWYtdG8tbWFpbgorCitjYW5uZWRfdGVzdCAiLUwgNCwxMjphLmMgLUwgOm1haW46YS5jIHNpbXBsZSIgbXVsdGlwbGUKK2Nhbm5lZF90ZXN0ICItTCA0LDE4OmEuYyAtTCA6bWFpbjphLmMgc2ltcGxlIiBtdWx0aXBsZS1vdmVybGFwcGluZworY2FubmVkX3Rlc3QgIi1MIDptYWluOmEuYyAtTCA0LDE4OmEuYyBzaW1wbGUiIG11bHRpcGxlLW92ZXJsYXBwaW5nCitjYW5uZWRfdGVzdCAiLUwgNDphLmMgLUwgOCwxMjphLmMgc2ltcGxlIiBtdWx0aXBsZS1zdXBlcnNldAorY2FubmVkX3Rlc3QgIi1MIDgsMTI6YS5jIC1MIDQ6YS5jIHNpbXBsZSIgbXVsdGlwbGUtc3VwZXJzZXQKKwordGVzdF9iYWRfb3B0cyAiLUwiICJzd2l0Y2guKnJlcXVpcmVzIGEgdmFsdWUiCit0ZXN0X2JhZF9vcHRzICItTCBiLmMiICJhcmd1bWVudC4qbm90IG9mIHRoZSBmb3JtIgordGVzdF9iYWRfb3B0cyAiLUwgMToiICJhcmd1bWVudC4qbm90IG9mIHRoZSBmb3JtIgordGVzdF9iYWRfb3B0cyAiLUwgMTpub25leGlzdGVudCIgIlRoZXJlIGlzIG5vIHBhdGgiCit0ZXN0X2JhZF9vcHRzICItTCAxOnNpbXBsZSIgIlRoZXJlIGlzIG5vIHBhdGgiCit0ZXN0X2JhZF9vcHRzICItTCAnL2ZvbzpiLmMnIiAiYXJndW1lbnQuKm5vdCBvZiB0aGUgZm9ybSIKK3Rlc3RfYmFkX29wdHMgIi1MIDEwMDA6Yi5jIiAiaGFzIG9ubHkuKmxpbmVzIgordGVzdF9iYWRfb3B0cyAiLUwgMSwxMDAwOmIuYyIgImhhcyBvbmx5LipsaW5lcyIKK3Rlc3RfYmFkX29wdHMgIi1MIDpiLmMiICJhcmd1bWVudC4qbm90IG9mIHRoZSBmb3JtIgordGVzdF9iYWRfb3B0cyAiLUwgOmZvbzpiLmMiICJubyBtYXRjaCIKKworIyBUaGVyZSBpcyBhIHNlcGFyYXRlIGJ1ZyB3aGVuIGFuIGVtcHR5IC1MIHJhbmdlIGlzIHRoZSBmaXJzdCAtTCBlbmNvdW50ZXJlZCwKKyMgdGh1cyB0byBkZW1vbnN0cmF0ZSB0aGlzIHBhcnRpY3VsYXIgYnVnLCB0aGUgZW1wdHkgLUwgcmFuZ2UgbXVzdCBmb2xsb3cgYQorIyBub24tZW1wdHkgLUwgcmFuZ2UuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctTCB7ZW1wdHktcmFuZ2V9IChhbnkgLUwpJyAnCisJbj0kKGV4cHIgJCh3YyAtbCA8Yi5jKSArIDEpICYmCisJZ2l0IGxvZyAtTDEsMTpiLmMgLUwkbjpiLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLUwge2VtcHR5LXJhbmdlfSAoZmlyc3QgLUwpJyAnCisJbj0kKGV4cHIgJCh3YyAtbCA8Yi5jKSArIDEpICYmCisJZ2l0IGxvZyAtTCRuOmIuYworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMTEvZXhwZWN0LmJlZ2lubmluZy1vZi1maWxlIGIvdC90NDIxMS9leHBlY3QuYmVnaW5uaW5nLW9mLWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiNDA1NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvZXhwZWN0LmJlZ2lubmluZy1vZi1maWxlCkBAIC0wLDAgKzEsNDMgQEAKK2NvbW1pdCA0YTIzYWU1Yzk4ZDU5YTU4YzZkYTAzNjE1Njk1OWYyZGM5ZjQ3MmFkCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDc6NDAgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGF0IHZlcnkgYmVnaW5uaW5nCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMSwzICsxLDQgQEAKKysjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgCisgbG9uZyBmKGxvbmcgeCkKKworY29tbWl0IGE2ZWI4MjY0N2Q1ZDY3Zjg5M2RhNDQyZjhmOTM3NWZkODlhM2IxZTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTEsMyArMSwzIEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgCistaW50IGYoaW50IHgpCisrbG9uZyBmKGxvbmcgeCkKKworY29tbWl0IGRlNGM0OGFlODE0NzkyYzAyYTQ5YzRjM2MwYzc1N2FlNjljNTVmNmEKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMSwzIEBACisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisraW50IGYoaW50IHgpCmRpZmYgLS1naXQgYS90L3Q0MjExL2V4cGVjdC5lbmQtb2YtZmlsZSBiL3QvdDQyMTEvZXhwZWN0LmVuZC1vZi1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMjViYjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL2V4cGVjdC5lbmQtb2YtZmlsZQpAQCAtMCwwICsxLDYyIEBACitjb21taXQgNDY1OTUzODg0NGRhYTI4NDliMWE5ZTdkNmZhZGI5NmZjZDI2ZmM4MworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjQzIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBiYWNrIHRvIGNvbXBsZXRlIGxpbmUKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0yMCwzICsyMCw1IEBACisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorK30KKysKKysvKiBpbmNvbXBsZXRlIGxpbmVzIGFyZSBiYWQhICovCisKK2NvbW1pdCAxMDBiNjFhNmYyZjcyMGY4MTI2MjBhOWQxMGFmYjNhOTYwY2NiNzNjCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6MTAgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIHRvIGFuIGluY29tcGxldGUgbGluZSBhdCBlbmQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0yMCwzICsyMCwzIEBACisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKworY29tbWl0IGE2ZWI4MjY0N2Q1ZDY3Zjg5M2RhNDQyZjhmOTM3NWZkODlhM2IxZTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE5LDMgKzE5LDMgQEAKKy0JcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCBkZTRjNDhhZTgxNDc5MmMwMmE0OWM0YzNjMGM3NTdhZTY5YzU1ZjZhCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzE4LDMgQEAKKysJcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlyZXR1cm4gMDsKKyt9CmRpZmYgLS1naXQgYS90L3Q0MjExL2V4cGVjdC5tb3ZlLXN1cHBvcnQtZiBiL3QvdDQyMTEvZXhwZWN0Lm1vdmUtc3VwcG9ydC1mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MDVlMDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL2V4cGVjdC5tb3ZlLXN1cHBvcnQtZgpAQCAtMCwwICsxLDgwIEBACitjb21taXQgNmNlM2M0ZmY2OTAxMzYwOTliYjE3ZTFhODc2NmI3NTc2NDcyNmVhNworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ5OjUwIDIwMTMgKzAxMDAKKworICAgIGFub3RoZXIgc2ltcGxlIGNoYW5nZQorCitkaWZmIC0tZ2l0IGEvYi5jIGIvYi5jCistLS0gYS9iLmMKKysrKyBiL2IuYworQEAgLTQsOSArNCw5IEBACisgbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKy0JCXggPj49IDE7CisrCQl4IC89IDI7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorCitjb21taXQgYTZlYjgyNjQ3ZDVkNjdmODkzZGE0NDJmOGY5Mzc1ZmQ4OWEzYjFlMgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMyw5ICszLDkgQEAKKy1pbnQgZihpbnQgeCkKKytsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisKK2NvbW1pdCBmMDRmYjIwZjJjNzc4NTA5OTZjYmE3Mzk3MDlhY2M2ZmFlY2M1OGY3CitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NTUgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGYoKQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsOCArMyw5IEBACisgaW50IGYoaW50IHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisrCXJldHVybiBzOworIH0KKworY29tbWl0IGRlNGM0OGFlODE0NzkyYzAyYTQ5YzRjM2MwYzc1N2FlNjljNTVmNmEKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMyw4IEBACisraW50IGYoaW50IHgpCisreworKwlpbnQgcyA9IDA7CisrCXdoaWxlICh4KSB7CisrCQl4ID4+PSAxOworKwkJcysrOworKwl9CisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9leHBlY3QubXVsdGlwbGUgYi90L3Q0MjExL2V4cGVjdC5tdWx0aXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmFkNWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS9leHBlY3QubXVsdGlwbGUKQEAgLTAsMCArMSwxMDQgQEAKK2NvbW1pdCA0NjU5NTM4ODQ0ZGFhMjg0OWIxYTllN2Q2ZmFkYjk2ZmNkMjZmYzgzCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6NDMgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGJhY2sgdG8gY29tcGxldGUgbGluZQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE4LDUgKzE4LDcgQEAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrfQorKworKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworY29tbWl0IDEwMGI2MWE2ZjJmNzIwZjgxMjYyMGE5ZDEwYWZiM2E5NjBjY2I3M2MKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODoxMCAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgdG8gYW4gaW5jb21wbGV0ZSBsaW5lIGF0IGVuZAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE4LDUgKzE4LDUgQEAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCitjb21taXQgYTZlYjgyNjQ3ZDVkNjdmODkzZGE0NDJmOGY5Mzc1ZmQ4OWEzYjFlMgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMyw5ICszLDkgQEAKKy1pbnQgZihpbnQgeCkKKytsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CitAQCAtMTcsNSArMTcsNSBAQAorIGludCBtYWluICgpCisgeworLQlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisrCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworIH0KKworY29tbWl0IGYwNGZiMjBmMmM3Nzg1MDk5NmNiYTczOTcwOWFjYzZmYWVjYzU4ZjcKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo1NSAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgZigpCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMyw4ICszLDkgQEAKKyBpbnQgZihpbnQgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKysJcmV0dXJuIHM7CisgfQorCitjb21taXQgZGU0YzQ4YWU4MTQ3OTJjMDJhNDljNGMzYzBjNzU3YWU2OWM1NWY2YQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICszLDggQEAKKytpbnQgZihpbnQgeCkKKyt7CisrCWludCBzID0gMDsKKysJd2hpbGUgKHgpIHsKKysJCXggPj49IDE7CisrCQlzKys7CisrCX0KKyt9CmRpZmYgLS1naXQgYS90L3Q0MjExL2V4cGVjdC5tdWx0aXBsZS1vdmVybGFwcGluZyBiL3QvdDQyMTEvZXhwZWN0Lm11bHRpcGxlLW92ZXJsYXBwaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MzBiNmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL2V4cGVjdC5tdWx0aXBsZS1vdmVybGFwcGluZwpAQCAtMCwwICsxLDE4NyBAQAorY29tbWl0IDQ2NTk1Mzg4NDRkYWEyODQ5YjFhOWU3ZDZmYWRiOTZmY2QyNmZjODMKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODo0MyAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgYmFjayB0byBjb21wbGV0ZSBsaW5lCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtNCwxOSArNCwyMSBAQAorIGxvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICAqLworIAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyt9CisrCisrLyogaW5jb21wbGV0ZSBsaW5lcyBhcmUgYmFkISAqLworCitjb21taXQgMTAwYjYxYTZmMmY3MjBmODEyNjIwYTlkMTBhZmIzYTk2MGNjYjczYworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjEwIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSB0byBhbiBpbmNvbXBsZXRlIGxpbmUgYXQgZW5kCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtNCwxOSArNCwxOSBAQAorIGxvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICAqLworIAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKK2NvbW1pdCAzOWI2ZWIyZDViNzA2ZDMzMjIxODRhMTY5ZjY2NmYyNWVkM2ZiZDAwCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6NDEgMjAxMyArMDEwMAorCisgICAgdG91Y2ggY29tbWVudAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTkgKzMsMTkgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKy0gKiBBIGNvbW1lbnQuCisrICogVGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUhCisgICovCisgCisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworIH0KKworY29tbWl0IGE2ZWI4MjY0N2Q1ZDY3Zjg5M2RhNDQyZjhmOTM3NWZkODlhM2IxZTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTkgKzMsMTkgQEAKKy1pbnQgZihpbnQgeCkKKytsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBBIGNvbW1lbnQuCisgICovCisgCisgaW50IG1haW4gKCkKKyB7CistCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgZjA0ZmIyMGYyYzc3ODUwOTk2Y2JhNzM5NzA5YWNjNmZhZWNjNThmNworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjU1IDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBmKCkKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE4ICszLDE5IEBACisgaW50IGYoaW50IHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisrCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIEEgY29tbWVudC4KKyAgKi8KKyAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCBkZTRjNDhhZTgxNDc5MmMwMmE0OWM0YzNjMGM3NTdhZTY5YzU1ZjZhCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzMsMTggQEAKKytpbnQgZihpbnQgeCkKKyt7CisrCWludCBzID0gMDsKKysJd2hpbGUgKHgpIHsKKysJCXggPj49IDE7CisrCQlzKys7CisrCX0KKyt9CisrCisrLyoKKysgKiBBIGNvbW1lbnQuCisrICovCisrCisraW50IG1haW4gKCkKKyt7CisrCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcmV0dXJuIDA7CisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9leHBlY3QubXVsdGlwbGUtc3VwZXJzZXQgYi90L3Q0MjExL2V4cGVjdC5tdWx0aXBsZS1zdXBlcnNldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTMwYjZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS9leHBlY3QubXVsdGlwbGUtc3VwZXJzZXQKQEAgLTAsMCArMSwxODcgQEAKK2NvbW1pdCA0NjU5NTM4ODQ0ZGFhMjg0OWIxYTllN2Q2ZmFkYjk2ZmNkMjZmYzgzCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6NDMgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGJhY2sgdG8gY29tcGxldGUgbGluZQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTQsMTkgKzQsMjEgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAgKi8KKyAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrfQorKworKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworY29tbWl0IDEwMGI2MWE2ZjJmNzIwZjgxMjYyMGE5ZDEwYWZiM2E5NjBjY2I3M2MKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODoxMCAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgdG8gYW4gaW5jb21wbGV0ZSBsaW5lIGF0IGVuZAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTQsMTkgKzQsMTkgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAgKi8KKyAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCitjb21taXQgMzliNmViMmQ1YjcwNmQzMzIyMTg0YTE2OWY2NjZmMjVlZDNmYmQwMAorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjQxIDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGNvbW1lbnQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE5ICszLDE5IEBACisgbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCistICogQSBjb21tZW50LgorKyAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICAqLworIAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCBhNmViODI2NDdkNWQ2N2Y4OTNkYTQ0MmY4ZjkzNzVmZDg5YTNiMWUyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE5ICszLDE5IEBACistaW50IGYoaW50IHgpCisrbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogQSBjb21tZW50LgorICAqLworIAorIGludCBtYWluICgpCisgeworLQlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisrCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworIH0KKworY29tbWl0IGYwNGZiMjBmMmM3Nzg1MDk5NmNiYTczOTcwOWFjYzZmYWVjYzU4ZjcKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo1NSAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgZigpCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMywxOCArMywxOSBAQAorIGludCBmKGludCB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorKwlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBBIGNvbW1lbnQuCisgICovCisgCisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgZGU0YzQ4YWU4MTQ3OTJjMDJhNDljNGMzYzBjNzU3YWU2OWM1NWY2YQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICszLDE4IEBACisraW50IGYoaW50IHgpCisreworKwlpbnQgcyA9IDA7CisrCXdoaWxlICh4KSB7CisrCQl4ID4+PSAxOworKwkJcysrOworKwl9CisrfQorKworKy8qCisrICogQSBjb21tZW50LgorKyAqLworKworK2ludCBtYWluICgpCisreworKwlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisrCXJldHVybiAwOworK30KZGlmZiAtLWdpdCBhL3QvdDQyMTEvZXhwZWN0LnBhcmFsbGVsLWNoYW5nZS1mLXRvLW1haW4gYi90L3Q0MjExL2V4cGVjdC5wYXJhbGxlbC1jaGFuZ2UtZi10by1tYWluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MmRlZjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL2V4cGVjdC5wYXJhbGxlbC1jaGFuZ2UtZi10by1tYWluCkBAIC0wLDAgKzEsMTYwIEBACitjb21taXQgMDQ2OWM2MGJjNDgzN2Q1MmQ5N2IxZjA4MWRlYzVmOThkZWEyMGZlZAorTWVyZ2U6IGJhMjI3YzYgNmNlM2M0ZgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+CitEYXRlOiAgIEZyaSBBcHIgMTIgMTY6MTY6MjQgMjAxMyArMDIwMAorCisgICAgTWVyZ2UgYWNyb3NzIHRoZSByZW5hbWUKKworCitjb21taXQgNmNlM2M0ZmY2OTAxMzYwOTliYjE3ZTFhODc2NmI3NTc2NDcyNmVhNworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ5OjUwIDIwMTMgKzAxMDAKKworICAgIGFub3RoZXIgc2ltcGxlIGNoYW5nZQorCitkaWZmIC0tZ2l0IGEvYi5jIGIvYi5jCistLS0gYS9iLmMKKysrKyBiL2IuYworQEAgLTQsMTQgKzQsMTQgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworLQkJeCA+Pj0gMTsKKysJCXggLz0gMjsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAgKi8KKyAKKworY29tbWl0IGJhMjI3YzY2MzIzNDk3MDBmYmI5NTdkZWMyYjUwZjVlMjM1OGJlM2YKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPgorRGF0ZTogICBGcmkgQXByIDEyIDE2OjE1OjU3IDIwMTMgKzAyMDAKKworICAgIGNoYW5nZSBvbiBhbm90aGVyIGxpbmUgb2YgaGlzdG9yeSB3aGlsZSByZW5hbWUgaGFwcGVucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTQsMTQgKzQsMTQgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKy0gKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKysgKiBUaGlzIGlzIG9ubHkgYSBzaG9ydCBleGFtcGxlIQorICAqLworIAorCitjb21taXQgMzliNmViMmQ1YjcwNmQzMzIyMTg0YTE2OWY2NjZmMjVlZDNmYmQwMAorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjQxIDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGNvbW1lbnQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE0ICszLDE0IEBACisgbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCistICogQSBjb21tZW50LgorKyAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICAqLworIAorCitjb21taXQgYTZlYjgyNjQ3ZDVkNjdmODkzZGE0NDJmOGY5Mzc1ZmQ4OWEzYjFlMgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMywxNCArMywxNCBAQAorLWludCBmKGludCB4KQorK2xvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIEEgY29tbWVudC4KKyAgKi8KKyAKKworY29tbWl0IGYwNGZiMjBmMmM3Nzg1MDk5NmNiYTczOTcwOWFjYzZmYWVjYzU4ZjcKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo1NSAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgZigpCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMywxMyArMywxNCBAQAorIGludCBmKGludCB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorKwlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBBIGNvbW1lbnQuCisgICovCisgCisKK2NvbW1pdCBkZTRjNDhhZTgxNDc5MmMwMmE0OWM0YzNjMGM3NTdhZTY5YzU1ZjZhCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzMsMTMgQEAKKytpbnQgZihpbnQgeCkKKyt7CisrCWludCBzID0gMDsKKysJd2hpbGUgKHgpIHsKKysJCXggPj49IDE7CisrCQlzKys7CisrCX0KKyt9CisrCisrLyoKKysgKiBBIGNvbW1lbnQuCisrICovCisrCmRpZmYgLS1naXQgYS90L3Q0MjExL2V4cGVjdC5zaW1wbGUtZiBiL3QvdDQyMTEvZXhwZWN0LnNpbXBsZS1mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZjViYzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL2V4cGVjdC5zaW1wbGUtZgpAQCAtMCwwICsxLDU5IEBACitjb21taXQgYTZlYjgyNjQ3ZDVkNjdmODkzZGE0NDJmOGY5Mzc1ZmQ4OWEzYjFlMgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMyw5ICszLDkgQEAKKy1pbnQgZihpbnQgeCkKKytsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisKK2NvbW1pdCBmMDRmYjIwZjJjNzc4NTA5OTZjYmE3Mzk3MDlhY2M2ZmFlY2M1OGY3CitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NTUgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGYoKQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsOCArMyw5IEBACisgaW50IGYoaW50IHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisrCXJldHVybiBzOworIH0KKworY29tbWl0IGRlNGM0OGFlODE0NzkyYzAyYTQ5YzRjM2MwYzc1N2FlNjljNTVmNmEKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMyw4IEBACisraW50IGYoaW50IHgpCisreworKwlpbnQgcyA9IDA7CisrCXdoaWxlICh4KSB7CisrCQl4ID4+PSAxOworKwkJcysrOworKwl9CisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9leHBlY3Quc2ltcGxlLWYtdG8tbWFpbiBiL3QvdDQyMTEvZXhwZWN0LnNpbXBsZS1mLXRvLW1haW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ3NTc2OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvZXhwZWN0LnNpbXBsZS1mLXRvLW1haW4KQEAgLTAsMCArMSwxMDAgQEAKK2NvbW1pdCAzOWI2ZWIyZDViNzA2ZDMzMjIxODRhMTY5ZjY2NmYyNWVkM2ZiZDAwCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6NDEgMjAxMyArMDEwMAorCisgICAgdG91Y2ggY29tbWVudAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTQgKzMsMTQgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKy0gKiBBIGNvbW1lbnQuCisrICogVGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUhCisgICovCisgCisKK2NvbW1pdCBhNmViODI2NDdkNWQ2N2Y4OTNkYTQ0MmY4ZjkzNzVmZDg5YTNiMWUyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE0ICszLDE0IEBACistaW50IGYoaW50IHgpCisrbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogQSBjb21tZW50LgorICAqLworIAorCitjb21taXQgZjA0ZmIyMGYyYzc3ODUwOTk2Y2JhNzM5NzA5YWNjNmZhZWNjNThmNworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjU1IDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBmKCkKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDEzICszLDE0IEBACisgaW50IGYoaW50IHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisrCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIEEgY29tbWVudC4KKyAgKi8KKyAKKworY29tbWl0IGRlNGM0OGFlODE0NzkyYzAyYTQ5YzRjM2MwYzc1N2FlNjljNTVmNmEKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMywxMyBAQAorK2ludCBmKGludCB4KQorK3sKKysJaW50IHMgPSAwOworKwl3aGlsZSAoeCkgeworKwkJeCA+Pj0gMTsKKysJCXMrKzsKKysJfQorK30KKysKKysvKgorKyAqIEEgY29tbWVudC4KKysgKi8KKysKZGlmZiAtLWdpdCBhL3QvdDQyMTEvZXhwZWN0LnNpbXBsZS1tYWluIGIvdC90NDIxMS9leHBlY3Quc2ltcGxlLW1haW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzljZTM5YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvZXhwZWN0LnNpbXBsZS1tYWluCkBAIC0wLDAgKzEsNjggQEAKK2NvbW1pdCA0NjU5NTM4ODQ0ZGFhMjg0OWIxYTllN2Q2ZmFkYjk2ZmNkMjZmYzgzCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6NDMgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGJhY2sgdG8gY29tcGxldGUgbGluZQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE4LDUgKzE4LDUgQEAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrfQorCitjb21taXQgMTAwYjYxYTZmMmY3MjBmODEyNjIwYTlkMTBhZmIzYTk2MGNjYjczYworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjEwIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSB0byBhbiBpbmNvbXBsZXRlIGxpbmUgYXQgZW5kCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTgsNSArMTgsNSBAQAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKK2NvbW1pdCBhNmViODI2NDdkNWQ2N2Y4OTNkYTQ0MmY4ZjkzNzVmZDg5YTNiMWUyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xNyw1ICsxNyw1IEBACisgaW50IG1haW4gKCkKKyB7CistCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgZGU0YzQ4YWU4MTQ3OTJjMDJhNDljNGMzYzBjNzU3YWU2OWM1NWY2YQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICsxNiw1IEBACisraW50IG1haW4gKCkKKyt7CisrCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcmV0dXJuIDA7CisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9leHBlY3Quc2ltcGxlLW1haW4tdG8tZW5kIGIvdC90NDIxMS9leHBlY3Quc2ltcGxlLW1haW4tdG8tZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ODBiZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL2V4cGVjdC5zaW1wbGUtbWFpbi10by1lbmQKQEAgLTAsMCArMSw3MCBAQAorY29tbWl0IDQ2NTk1Mzg4NDRkYWEyODQ5YjFhOWU3ZDZmYWRiOTZmY2QyNmZjODMKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODo0MyAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgYmFjayB0byBjb21wbGV0ZSBsaW5lCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTgsNSArMTgsNyBAQAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyt9CisrCisrLyogaW5jb21wbGV0ZSBsaW5lcyBhcmUgYmFkISAqLworCitjb21taXQgMTAwYjYxYTZmMmY3MjBmODEyNjIwYTlkMTBhZmIzYTk2MGNjYjczYworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjEwIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSB0byBhbiBpbmNvbXBsZXRlIGxpbmUgYXQgZW5kCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTgsNSArMTgsNSBAQAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKK2NvbW1pdCBhNmViODI2NDdkNWQ2N2Y4OTNkYTQ0MmY4ZjkzNzVmZDg5YTNiMWUyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xNyw1ICsxNyw1IEBACisgaW50IG1haW4gKCkKKyB7CistCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgZGU0YzQ4YWU4MTQ3OTJjMDJhNDljNGMzYzBjNzU3YWU2OWM1NWY2YQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICsxNiw1IEBACisraW50IG1haW4gKCkKKyt7CisrCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcmV0dXJuIDA7CisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9leHBlY3QudHdvLXJhbmdlcyBiL3QvdDQyMTEvZXhwZWN0LnR3by1yYW5nZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEwOWFhMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvZXhwZWN0LnR3by1yYW5nZXMKQEAgLTAsMCArMSwxMDIgQEAKK2NvbW1pdCA0NjU5NTM4ODQ0ZGFhMjg0OWIxYTllN2Q2ZmFkYjk2ZmNkMjZmYzgzCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6NDMgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGJhY2sgdG8gY29tcGxldGUgbGluZQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE4LDUgKzE4LDUgQEAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrfQorCitjb21taXQgMTAwYjYxYTZmMmY3MjBmODEyNjIwYTlkMTBhZmIzYTk2MGNjYjczYworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjEwIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSB0byBhbiBpbmNvbXBsZXRlIGxpbmUgYXQgZW5kCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTgsNSArMTgsNSBAQAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKK2NvbW1pdCBhNmViODI2NDdkNWQ2N2Y4OTNkYTQ0MmY4ZjkzNzVmZDg5YTNiMWUyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDkgKzMsOSBAQAorLWludCBmKGludCB4KQorK2xvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KK0BAIC0xNyw1ICsxNyw1IEBACisgaW50IG1haW4gKCkKKyB7CistCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgZjA0ZmIyMGYyYzc3ODUwOTk2Y2JhNzM5NzA5YWNjNmZhZWNjNThmNworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjU1IDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBmKCkKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDggKzMsOSBAQAorIGludCBmKGludCB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorKwlyZXR1cm4gczsKKyB9CisKK2NvbW1pdCBkZTRjNDhhZTgxNDc5MmMwMmE0OWM0YzNjMGM3NTdhZTY5YzU1ZjZhCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzMsOCBAQAorK2ludCBmKGludCB4KQorK3sKKysJaW50IHMgPSAwOworKwl3aGlsZSAoeCkgeworKwkJeCA+Pj0gMTsKKysJCXMrKzsKKysJfQorK30KZGlmZiAtLWdpdCBhL3QvdDQyMTEvZXhwZWN0LnZhbmlzaGVzLWVhcmx5IGIvdC90NDIxMS9leHBlY3QudmFuaXNoZXMtZWFybHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY3Y2QwNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvZXhwZWN0LnZhbmlzaGVzLWVhcmx5CkBAIC0wLDAgKzEsMzkgQEAKK2NvbW1pdCA0NjU5NTM4ODQ0ZGFhMjg0OWIxYTllN2Q2ZmFkYjk2ZmNkMjZmYzgzCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6NDMgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGJhY2sgdG8gY29tcGxldGUgbGluZQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTIyLDEgKzI0LDEgQEAKKy19CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKysvKiBpbmNvbXBsZXRlIGxpbmVzIGFyZSBiYWQhICovCisKK2NvbW1pdCAxMDBiNjFhNmYyZjcyMGY4MTI2MjBhOWQxMGFmYjNhOTYwY2NiNzNjCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6MTAgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIHRvIGFuIGluY29tcGxldGUgbGluZSBhdCBlbmQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0yMiwxICsyMiwxIEBACistfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCitjb21taXQgZGU0YzQ4YWU4MTQ3OTJjMDJhNDljNGMzYzBjNzU3YWU2OWM1NWY2YQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICsyMCwxIEBACisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9oaXN0b3J5LmV4cG9ydCBiL3QvdDQyMTEvaGlzdG9yeS5leHBvcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlmNDFlMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvaGlzdG9yeS5leHBvcnQKQEAgLTAsMCArMSw0MDYgQEAKK2Jsb2IKK21hcmsgOjEKK2RhdGEgMTU3CisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50IGYoaW50IHgpCit7CisJaW50IHMgPSAwOworCXdoaWxlICh4KSB7CisJCXggPj49IDE7CisJCXMrKzsKKwl9Cit9CisKKy8qCisgKiBBIGNvbW1lbnQuCisgKi8KKworaW50IG1haW4gKCkKK3sKKwlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9CisKK3Jlc2V0IHJlZnMvdGFncy9zaW1wbGUKK2NvbW1pdCByZWZzL3RhZ3Mvc2ltcGxlCittYXJrIDoyCithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDY4OCArMDEwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ2ODggKzAxMDAKK2RhdGEgOAoraW5pdGlhbAorTSAxMDA2NDQgOjEgYS5jCisKK2Jsb2IKK21hcmsgOjMKK2RhdGEgMTY4CisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50IGYoaW50IHgpCit7CisJaW50IHMgPSAwOworCXdoaWxlICh4KSB7CisJCXggPj49IDE7CisJCXMrKzsKKwl9CisJcmV0dXJuIHM7Cit9CisKKy8qCisgKiBBIGNvbW1lbnQuCisgKi8KKworaW50IG1haW4gKCkKK3sKKwlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9CisKK2NvbW1pdCByZWZzL3RhZ3Mvc2ltcGxlCittYXJrIDo0CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDY5NSArMDEwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ2OTUgKzAxMDAKK2RhdGEgMTEKK2NoYW5nZSBmKCkKK2Zyb20gOjIKK00gMTAwNjQ0IDozIGEuYworCitibG9iCittYXJrIDo1CitkYXRhIDE3MQorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2xvbmcgZihsb25nIHgpCit7CisJaW50IHMgPSAwOworCXdoaWxlICh4KSB7CisJCXggPj49IDE7CisJCXMrKzsKKwl9CisJcmV0dXJuIHM7Cit9CisKKy8qCisgKiBBIGNvbW1lbnQuCisgKi8KKworaW50IG1haW4gKCkKK3sKKwlwcmludGYoIiVsZFxuIiwgZigxNSkpOworCXJldHVybiAwOworfQorCitjb21taXQgcmVmcy90YWdzL3NpbXBsZQorbWFyayA6NgorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ3MTYgKzAxMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPiAxMzYyMDQ0NzE2ICswMTAwCitkYXRhIDIxCit0b3VjaCBib3RoIGZ1bmN0aW9ucworZnJvbSA6NAorTSAxMDA2NDQgOjUgYS5jCisKK2Jsb2IKK21hcmsgOjcKK2RhdGEgMTg1CisjaW5jbHVkZSA8c3RkaW8uaD4KKworbG9uZyBmKGxvbmcgeCkKK3sKKwlpbnQgcyA9IDA7CisJd2hpbGUgKHgpIHsKKwkJeCA+Pj0gMTsKKwkJcysrOworCX0KKwlyZXR1cm4gczsKK30KKworLyoKKyAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICovCisKK2ludCBtYWluICgpCit7CisJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKwlyZXR1cm4gMDsKK30KKworY29tbWl0IHJlZnMvdGFncy9zaW1wbGUKK21hcmsgOjgKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPiAxMzYyMDQ0NzQxICswMTAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDc0MSArMDEwMAorZGF0YSAxNAordG91Y2ggY29tbWVudAorZnJvbSA6NgorTSAxMDA2NDQgOjcgYS5jCisKK2Jsb2IKK21hcmsgOjkKK2RhdGEgMjA1CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworbG9uZyBmKGxvbmcgeCkKK3sKKwlpbnQgcyA9IDA7CisJd2hpbGUgKHgpIHsKKwkJeCA+Pj0gMTsKKwkJcysrOworCX0KKwlyZXR1cm4gczsKK30KKworLyoKKyAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICovCisKK2ludCBtYWluICgpCit7CisJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKwlyZXR1cm4gMDsKK30KKworY29tbWl0IHJlZnMvdGFncy9zaW1wbGUKK21hcmsgOjEwCithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDg2MCArMDEwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ4NjAgKzAxMDAKK2RhdGEgMjUKK2NoYW5nZSBhdCB2ZXJ5IGJlZ2lubmluZworZnJvbSA6OAorTSAxMDA2NDQgOjkgYS5jCisKK2Jsb2IKK21hcmsgOjExCitkYXRhIDIwNAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2xvbmcgZihsb25nIHgpCit7CisJaW50IHMgPSAwOworCXdoaWxlICh4KSB7CisJCXggPj49IDE7CisJCXMrKzsKKwl9CisJcmV0dXJuIHM7Cit9CisKKy8qCisgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAqLworCitpbnQgbWFpbiAoKQoreworCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9Citjb21taXQgcmVmcy90YWdzL3NpbXBsZQorbWFyayA6MTIKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPiAxMzYyMDQ0ODkwICswMTAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDg5MCArMDEwMAorZGF0YSAzNgorY2hhbmdlIHRvIGFuIGluY29tcGxldGUgbGluZSBhdCBlbmQKK2Zyb20gOjEwCitNIDEwMDY0NCA6MTEgYS5jCisKK2Jsb2IKK21hcmsgOjEzCitkYXRhIDIzOAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2xvbmcgZihsb25nIHgpCit7CisJaW50IHMgPSAwOworCXdoaWxlICh4KSB7CisJCXggPj49IDE7CisJCXMrKzsKKwl9CisJcmV0dXJuIHM7Cit9CisKKy8qCisgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAqLworCitpbnQgbWFpbiAoKQoreworCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworY29tbWl0IHJlZnMvdGFncy9zaW1wbGUKK21hcmsgOjE0CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDkyMyArMDEwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ5MjMgKzAxMDAKK2RhdGEgMjkKK2NoYW5nZSBiYWNrIHRvIGNvbXBsZXRlIGxpbmUKK2Zyb20gOjEyCitNIDEwMDY0NCA6MTMgYS5jCisKK2NvbW1pdCByZWZzL3RhZ3MvbW92ZS1zdXBwb3J0CittYXJrIDoxNQorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ5NjggKzAxMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPiAxMzYyMDQ0OTY4ICswMTAwCitkYXRhIDEwCittb3ZlIGZpbGUKK2Zyb20gOjE0CitEIGEuYworTSAxMDA2NDQgOjEzIGIuYworCitibG9iCittYXJrIDoxNgorZGF0YSAyMzcKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitsb25nIGYobG9uZyB4KQoreworCWludCBzID0gMDsKKwl3aGlsZSAoeCkgeworCQl4IC89IDI7CisJCXMrKzsKKwl9CisJcmV0dXJuIHM7Cit9CisKKy8qCisgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAqLworCitpbnQgbWFpbiAoKQoreworCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworY29tbWl0IHJlZnMvdGFncy9tb3ZlLXN1cHBvcnQKK21hcmsgOjE3CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDk5MCArMDEwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ5OTAgKzAxMDAKK2RhdGEgMjIKK2Fub3RoZXIgc2ltcGxlIGNoYW5nZQorZnJvbSA6MTUKK00gMTAwNjQ0IDoxNiBiLmMKKworYmxvYgorbWFyayA6MTgKK2RhdGEgMjU0CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworbG9uZyBmKGxvbmcgeCk7CisKKy8qCisgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAqLworCitpbnQgbWFpbiAoKQoreworCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworbG9uZyBmKGxvbmcgeCkKK3sKKwlpbnQgcyA9IDA7CisJd2hpbGUgKHgpIHsKKwkJeCAvPSAyOworCQlzKys7CisJfQorCXJldHVybiBzOworfQorCitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK21hcmsgOjE5CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NTAyNCArMDEwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDUwMjQgKzAxMDAKK2RhdGEgMjEKK21vdmUgd2l0aGluIHRoZSBmaWxlCitmcm9tIDoxNworTSAxMDA2NDQgOjE4IGIuYworCitibG9iCittYXJrIDoyMAorZGF0YSAyNDMKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitsb25nIGYobG9uZyB4KQoreworCWludCBzID0gMDsKKwl3aGlsZSAoeCkgeworCQl4ID4+PSAxOworCQlzKys7CisJfQorCXJldHVybiBzOworfQorCisvKgorICogVGhpcyBpcyBvbmx5IGEgc2hvcnQgZXhhbXBsZSEKKyAqLworCitpbnQgbWFpbiAoKQoreworCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworY29tbWl0IHJlZnMvaGVhZHMvcGFyYWxsZWwtY2hhbmdlCittYXJrIDoyMQorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM2NTc3NjE1NyArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM2NTc3NjE1NyArMDIwMAorZGF0YSA1NQorY2hhbmdlIG9uIGFub3RoZXIgbGluZSBvZiBoaXN0b3J5IHdoaWxlIHJlbmFtZSBoYXBwZW5zCitmcm9tIDoxNAorTSAxMDA2NDQgOjIwIGEuYworCitibG9iCittYXJrIDoyMgorZGF0YSAyNDIKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitsb25nIGYobG9uZyB4KQoreworCWludCBzID0gMDsKKwl3aGlsZSAoeCkgeworCQl4IC89IDI7CisJCXMrKzsKKwl9CisJcmV0dXJuIHM7Cit9CisKKy8qCisgKiBUaGlzIGlzIG9ubHkgYSBzaG9ydCBleGFtcGxlIQorICovCisKK2ludCBtYWluICgpCit7CisJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKwlyZXR1cm4gMDsKK30KKworLyogaW5jb21wbGV0ZSBsaW5lcyBhcmUgYmFkISAqLworCitjb21taXQgcmVmcy9oZWFkcy9wYXJhbGxlbC1jaGFuZ2UKK21hcmsgOjIzCithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzY1Nzc2MTg0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzY1Nzc2MTkxICswMjAwCitkYXRhIDI0CitNZXJnZSBhY3Jvc3MgdGhlIHJlbmFtZQorZnJvbSA6MjEKK21lcmdlIDoxNworRCBhLmMKK00gMTAwNjQ0IDoyMiBiLmMKKworcmVzZXQgcmVmcy9oZWFkcy9wYXJhbGxlbC1jaGFuZ2UKK2Zyb20gOjIzCisKZGlmZiAtLWdpdCBhL3QvdDUwMDAtdGFyLXRyZWUuc2ggYi90L3Q1MDAwLXRhci10cmVlLnNoCmluZGV4IDNmYmQzNjYuLmMyMDIzYjEgMTAwNzU1Ci0tLSBhL3QvdDUwMDAtdGFyLXRyZWUuc2gKKysrIGIvdC90NTAwMC10YXItdHJlZS5zaApAQCAtMzAsMTAgKzMwLDc2IEBACiAKIFNVQlNURk9STUFUPSVIJW4KIAordGVzdF9sYXp5X3ByZXJlcSBUQVJfTkVFRFNfUEFYX0ZBTExCQUNLICcKKwkoCisJCW1rZGlyIHBheCAmJgorCQljZCBwYXggJiYKKwkJIiRUQVIiIHhmICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MDAwL3BheC50YXIgJiYKKwkJdGVzdCAtZiBQYXhIZWFkZXJzLjE3OTEvZmlsZQorCSkKKycKKworZ2V0X3BheF9oZWFkZXIoKSB7CisJZmlsZT0kMQorCWhlYWRlcj0kMj0KKworCXdoaWxlIHJlYWQgbGVuIHJlc3QKKwlkbworCQlpZiB0ZXN0ICIkbGVuIiA9ICQoZWNobyAiJGxlbiAkcmVzdCIgfCB3YyAtYykKKwkJdGhlbgorCQkJY2FzZSAiJHJlc3QiIGluCisJCQkkaGVhZGVyKikKKwkJCQllY2hvICIke3Jlc3QjJGhlYWRlcn0iCisJCQkJOzsKKwkJCWVzYWMKKwkJZmkKKwlkb25lIDwiJGZpbGUiCit9CisKK2NoZWNrX3RhcigpIHsKKwl0YXJmaWxlPSQxLnRhcgorCWxpc3RmaWxlPSQxLmxzdAorCWRpcj0kMQorCWRpcl93aXRoX3ByZWZpeD0kZGlyLyQyCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICcgZXh0cmFjdCB0YXIgYXJjaGl2ZScgJworCQkobWtkaXIgJGRpciAmJiBjZCAkZGlyICYmICIkVEFSIiB4ZiAtKSA8JHRhcmZpbGUKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFRBUl9ORUVEU19QQVhfRkFMTEJBQ0sgJyBpbnRlcnByZXQgcGF4IGhlYWRlcnMnICcKKwkJKAorCQkJY2QgJGRpciAmJgorCQkJZm9yIGhlYWRlciBpbiAqLnBheGhlYWRlcgorCQkJZG8KKwkJCQlkYXRhPSR7aGVhZGVyJS5wYXhoZWFkZXJ9LmRhdGEgJiYKKwkJCQlpZiB0ZXN0IC1oICRkYXRhIC1vIC1lICRkYXRhCisJCQkJdGhlbgorCQkJCQlwYXRoPSQoZ2V0X3BheF9oZWFkZXIgJGhlYWRlciBwYXRoKSAmJgorCQkJCQlpZiB0ZXN0IC1uICIkcGF0aCIKKwkJCQkJdGhlbgorCQkJCQkJbXYgIiRkYXRhIiAiJHBhdGgiCisJCQkJCWZpCisJCQkJZmkKKwkJCWRvbmUKKwkJKQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyB2YWxpZGF0ZSBmaWxlbmFtZXMnICcKKwkJKGNkICR7ZGlyX3dpdGhfcHJlZml4fWEgJiYgZmluZCAuKSB8IHNvcnQgPiRsaXN0ZmlsZSAmJgorCQl0ZXN0X2NtcCBhLmxzdCAkbGlzdGZpbGUKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICcgdmFsaWRhdGUgZmlsZSBjb250ZW50cycgJworCQlkaWZmIC1yIGEgJHtkaXJfd2l0aF9wcmVmaXh9YQorCScKK30KKwogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3BvcHVsYXRlIHdvcmtkaXInIFwKLSAgICAnbWtkaXIgYSBiIGMgJiYKKyAgICAnbWtkaXIgYSAmJgogICAgICBlY2hvIHNpbXBsZSB0ZXh0ZmlsZSA+YS9hICYmCisgICAgIHRlbj0wMTIzNDU2Nzg5ICYmIGh1bmRyZWQ9JHRlbiR0ZW4kdGVuJHRlbiR0ZW4kdGVuJHRlbiR0ZW4kdGVuJHRlbiAmJgorICAgICBlY2hvIGxvbmcgZmlsZW5hbWUgPmEvZm91ciRodW5kcmVkICYmCiAgICAgIG1rZGlyIGEvYmluICYmCiAgICAgIGNwIC9iaW4vc2ggYS9iaW4gJiYKICAgICAgcHJpbnRmICJBXCRGb3JtYXQ6JXNcJE8iICIkU1VCU1RGT1JNQVQiID5hL3N1YnN0ZmlsZTEgJiYKQEAgLTYyLDYgKzEyOCwxMiBAQAogICAgICBnaXQgdXBkYXRlLXJlZiBIRUFEICQoVFo9R01UIEdJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNyAyMjowMDowMCIgXAogICAgICBnaXQgY29tbWl0LXRyZWUgJHRyZWVpZCA8L2Rldi9udWxsKScKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwb3J0LXN1YnN0JyAnCisJZWNobyAic3Vic3RmaWxlPyIgZXhwb3J0LXN1YnN0ID4+LmdpdC9pbmZvL2F0dHJpYnV0ZXMgJiYKKwlnaXQgbG9nIC0tbWF4LWNvdW50PTEgIi0tcHJldHR5PWZvcm1hdDpBJHtTVUJTVEZPUk1BVH1PIiBIRUFEIFwKKwkJPmEvc3Vic3RmaWxlMQorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnY3JlYXRlIGJhcmUgY2xvbmUnIFwKICAgICAnZ2l0IGNsb25lIC0tYmFyZSAuIGJhcmUuZ2l0ICYmCkBAIC03NSwxMyArMTQ3LDE5IEBACiAgICAgJ2dpdCBhcmNoaXZlJyBcCiAgICAgJ2dpdCBhcmNoaXZlIEhFQUQgPmIudGFyJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAnZ2l0IHRhci10cmVlJyBcCi0gICAgJ2dpdCB0YXItdHJlZSBIRUFEID5iMi50YXInCitjaGVja190YXIgYgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAnZ2l0IGFyY2hpdmUgdnMuIGdpdCB0YXItdHJlZScgXAotICAgICd0ZXN0X2NtcCBiLnRhciBiMi50YXInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSAtLXByZWZpeD1wcmVmaXgvJyAnCisJZ2l0IGFyY2hpdmUgLS1wcmVmaXg9cHJlZml4LyBIRUFEID53aXRoX3ByZWZpeC50YXIKKycKKworY2hlY2tfdGFyIHdpdGhfcHJlZml4IHByZWZpeC8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWFyY2hpdmUgLS1wcmVmaXg9b2xkZS0nICcKKwlnaXQgYXJjaGl2ZSAtLXByZWZpeD1vbGRlLSBIRUFEID53aXRoX29sZGUtcHJlZml4LnRhcgorJworCitjaGVja190YXIgd2l0aF9vbGRlLXByZWZpeCBvbGRlLQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSBvbiBsYXJnZSBmaWxlcycgJwogICAgIHRlc3RfY29uZmlnIGNvcmUuYmlnZmlsZXRocmVzaG9sZCAxICYmCkBAIC0xMTgsNjYgKzE5NiwxNCBAQAogICAgICdnaXQgZ2V0LXRhci1jb21taXQtaWQgPGIudGFyID5iLmNvbW1pdGlkICYmCiAgICAgIHRlc3RfY21wIC5naXQvJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIGIuY29tbWl0aWQnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICdleHRyYWN0IHRhciBhcmNoaXZlJyBcCi0gICAgJyhjZCBiICYmICIkVEFSIiB4ZiAtKSA8Yi50YXInCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICd2YWxpZGF0ZSBmaWxlbmFtZXMnIFwKLSAgICAnKGNkIGIvYSAmJiBmaW5kIC4pIHwgc29ydCA+Yi5sc3QgJiYKLSAgICAgdGVzdF9jbXAgYS5sc3QgYi5sc3QnCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICd2YWxpZGF0ZSBmaWxlIGNvbnRlbnRzJyBcCi0gICAgJ2RpZmYgLXIgYSBiL2EnCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICdnaXQgdGFyLXRyZWUgd2l0aCBwcmVmaXgnIFwKLSAgICAnZ2l0IHRhci10cmVlIEhFQUQgcHJlZml4ID5jLnRhcicKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ2V4dHJhY3QgdGFyIGFyY2hpdmUgd2l0aCBwcmVmaXgnIFwKLSAgICAnKGNkIGMgJiYgIiRUQVIiIHhmIC0pIDxjLnRhcicKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ3ZhbGlkYXRlIGZpbGVuYW1lcyB3aXRoIHByZWZpeCcgXAotICAgICcoY2QgYy9wcmVmaXgvYSAmJiBmaW5kIC4pIHwgc29ydCA+Yy5sc3QgJiYKLSAgICAgdGVzdF9jbXAgYS5sc3QgYy5sc3QnCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICd2YWxpZGF0ZSBmaWxlIGNvbnRlbnRzIHdpdGggcHJlZml4JyBcCi0gICAgJ2RpZmYgLXIgYSBjL3ByZWZpeC9hJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAnY3JlYXRlIGFyY2hpdmVzIHdpdGggc3Vic3RmaWxlcycgXAotICAgICdjcCAuZ2l0L2luZm8vYXR0cmlidXRlcyAuZ2l0L2luZm8vYXR0cmlidXRlcy5iZWZvcmUgJiYKLSAgICAgZWNobyAic3Vic3RmaWxlPyIgZXhwb3J0LXN1YnN0ID4+LmdpdC9pbmZvL2F0dHJpYnV0ZXMgJiYKLSAgICAgZ2l0IGFyY2hpdmUgSEVBRCA+Zi50YXIgJiYKLSAgICAgZ2l0IGFyY2hpdmUgLS1wcmVmaXg9cHJlZml4LyBIRUFEID5nLnRhciAmJgotICAgICBtdiAuZ2l0L2luZm8vYXR0cmlidXRlcy5iZWZvcmUgLmdpdC9pbmZvL2F0dHJpYnV0ZXMnCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICdleHRyYWN0IHN1YnN0ZmlsZXMnIFwKLSAgICAnKG1rZGlyIGYgJiYgY2QgZiAmJiAiJFRBUiIgeGYgLSkgPGYudGFyJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAgJ3ZhbGlkYXRlIHN1YnN0ZmlsZSBjb250ZW50cycgXAotICAgICAnZ2l0IGxvZyAtLW1heC1jb3VudD0xICItLXByZXR0eT1mb3JtYXQ6QSR7U1VCU1RGT1JNQVR9TyIgSEVBRCBcCi0gICAgICA+Zi9hL3N1YnN0ZmlsZTEuZXhwZWN0ZWQgJiYKLSAgICAgIHRlc3RfY21wIGYvYS9zdWJzdGZpbGUxLmV4cGVjdGVkIGYvYS9zdWJzdGZpbGUxICYmCi0gICAgICB0ZXN0X2NtcCBhL3N1YnN0ZmlsZTIgZi9hL3N1YnN0ZmlsZTIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCB0YXItdHJlZScgJworCWdpdCB0YXItdHJlZSBIRUFEID50YXItdHJlZS50YXIgJiYKKwl0ZXN0X2NtcCBiLnRhciB0YXItdHJlZS50YXIKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ2V4dHJhY3Qgc3Vic3RmaWxlcyBmcm9tIGFyY2hpdmUgd2l0aCBwcmVmaXgnIFwKLSAgICAnKG1rZGlyIGcgJiYgY2QgZyAmJiAiJFRBUiIgeGYgLSkgPGcudGFyJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAgJ3ZhbGlkYXRlIHN1YnN0ZmlsZSBjb250ZW50cyBmcm9tIGFyY2hpdmUgd2l0aCBwcmVmaXgnIFwKLSAgICAgJ2dpdCBsb2cgLS1tYXgtY291bnQ9MSAiLS1wcmV0dHk9Zm9ybWF0OkEke1NVQlNURk9STUFUfU8iIEhFQUQgXAotICAgICAgPmcvcHJlZml4L2Evc3Vic3RmaWxlMS5leHBlY3RlZCAmJgotICAgICAgdGVzdF9jbXAgZy9wcmVmaXgvYS9zdWJzdGZpbGUxLmV4cGVjdGVkIGcvcHJlZml4L2Evc3Vic3RmaWxlMSAmJgotICAgICAgdGVzdF9jbXAgYS9zdWJzdGZpbGUyIGcvcHJlZml4L2Evc3Vic3RmaWxlMgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHRhci10cmVlIHdpdGggcHJlZml4JyAnCisJZ2l0IHRhci10cmVlIEhFQUQgcHJlZml4ID50YXItdHJlZV93aXRoX3ByZWZpeC50YXIgJiYKKwl0ZXN0X2NtcCB3aXRoX3ByZWZpeC50YXIgdGFyLXRyZWVfd2l0aF9wcmVmaXgudGFyCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIHdpdGggLS1vdXRwdXQsIG92ZXJyaWRlIGluZmVycmVkIGZvcm1hdCcgJwpAQCAtMTk3LDE4ICsyMjMsNiBAQAogCXRlc3RfbXVzdF9mYWlsIGdpdCBhcmNoaXZlIC0tcmVtb3RlPS4gJHNoYTEgPnJlbW90ZS50YXIKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWFyY2hpdmUgLS1wcmVmaXg9b2xkZS0nICcKLQlnaXQgYXJjaGl2ZSAtLXByZWZpeD1vbGRlLSA+aC50YXIgSEVBRCAmJgotCSgKLQkJbWtkaXIgaCAmJgotCQljZCBoICYmCi0JCSIkVEFSIiB4ZiAtIDwuLi9oLnRhcgotCSkgJiYKLQl0ZXN0IC1kIGgvb2xkZS1hICYmCi0JdGVzdCAtZCBoL29sZGUtYS9iaW4gJiYKLQl0ZXN0IC1mIGgvb2xkZS1hL2Jpbi9zaAotJwotCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0YXIgZmlsdGVycycgJwogCWdpdCBjb25maWcgdGFyLnRhci5mb28uY29tbWFuZCAidHIgYWIgYmEiICYmCiAJZ2l0IGNvbmZpZyB0YXIuYmFyLmNvbW1hbmQgInRyIGFiIGJhIiAmJgpkaWZmIC0tZ2l0IGEvdC90NTAwMC9wYXgudGFyIGIvdC90NTAwMC9wYXgudGFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MTE3MzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MDAwL3BheC50YXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90NTAwMy1hcmNoaXZlLXppcC5zaCBiL3QvdDUwMDMtYXJjaGl2ZS16aXAuc2gKaW5kZXggNGU3YjA1ZC4uYzcyZjcxZSAxMDA3NTUKLS0tIGEvdC90NTAwMy1hcmNoaXZlLXppcC5zaAorKysgYi90L3Q1MDAzLWFyY2hpdmUtemlwLnNoCkBAIC0zNyw3ICszNyw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdwb3B1bGF0ZSB3b3JrZGlyJyBcCi0gICAgJ21rZGlyIGEgYiBjICYmCisgICAgJ21rZGlyIGEgJiYKICAgICAgZWNobyBzaW1wbGUgdGV4dGZpbGUgPmEvYSAmJgogICAgICBta2RpciBhL2JpbiAmJgogICAgICBjcCAvYmluL3NoIGEvYmluICYmCmRpZmYgLS1naXQgYS90L3Q1MDA0LWFyY2hpdmUtY29ybmVyLWNhc2VzLnNoIGIvdC90NTAwNC1hcmNoaXZlLWNvcm5lci1jYXNlcy5zaAppbmRleCA4ZDFiYmQzLi42N2YzYjU0IDEwMDc1NQotLS0gYS90L3Q1MDA0LWFyY2hpdmUtY29ybmVyLWNhc2VzLnNoCisrKyBiL3QvdDUwMDQtYXJjaGl2ZS1jb3JuZXItY2FzZXMuc2gKQEAgLTI3LDYgKzI3LDIxIEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogfQogCisKKyMgYnNkdGFyL2xpYmFyY2hpdmUgdmVyc2lvbnMgYmVmb3JlIDMuMS4zIGNvbnNpZGVyIGEgdGFyIGZpbGUgd2l0aCBhCisjIGdsb2JhbCBwYXggaGVhZGVyIHRoYXQgaXMgbm90IGZvbGxvd2VkIGJ5IGEgZmlsZSByZWNvcmQgYXMgY29ycnVwdC4KK2lmICIkVEFSIiB0ZiAiJFRFU1RfRElSRUNUT1JZIi90NTAwNC9lbXB0eS13aXRoLXBheC1oZWFkZXIudGFyID4vZGV2L251bGwgMj4mMQordGhlbgorCXRlc3Rfc2V0X3ByZXJlcSBIRUFERVJfT05MWV9UQVJfT0sKK2ZpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgSEVBREVSX09OTFlfVEFSX09LICd0YXIgYXJjaGl2ZSBvZiBjb21taXQgd2l0aCBlbXB0eSB0cmVlJyAnCisJZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyIEhFQUQgPmVtcHR5LXdpdGgtcGF4LWhlYWRlci50YXIgJiYKKwltYWtlX2RpciBleHRyYWN0ICYmCisJIiRUQVIiIHhmIGVtcHR5LXdpdGgtcGF4LWhlYWRlci50YXIgLUMgZXh0cmFjdCAmJgorCWNoZWNrX2RpciBleHRyYWN0CisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhciBhcmNoaXZlIG9mIGVtcHR5IHRyZWUgaXMgZW1wdHknICcKIAlnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgSEVBRDogPmVtcHR5LnRhciAmJgogCXBlcmwgLWUgInByaW50IFwiXFwwXCIgeCAxMDI0MCIgPjEwa251bHMudGFyICYmCmRpZmYgLS1naXQgYS90L3Q1MDA0L2VtcHR5LXdpdGgtcGF4LWhlYWRlci50YXIgYi90L3Q1MDA0L2VtcHR5LXdpdGgtcGF4LWhlYWRlci50YXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE5ZTM5ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUwMDQvZW1wdHktd2l0aC1wYXgtaGVhZGVyLnRhcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3Q1MTUwLXJlcXVlc3QtcHVsbC5zaCBiL3QvdDUxNTAtcmVxdWVzdC1wdWxsLnNoCmluZGV4IDQzMmY5OGMuLjFhZmEwZDUgMTAwNzU1Ci0tLSBhL3QvdDUxNTAtcmVxdWVzdC1wdWxsLnNoCisrKyBiL3QvdDUxNTAtcmVxdWVzdC1wdWxsLnNoCkBAIC04MCwxMiArODAsMTIgQEAKIAogCWNhdCA8PC1FT1QgPmZ1enouc2VkCiAJIyEvYmluL3NlZCAtbmYKKwlzLyRkb3duc3RyZWFtX3VybF9mb3Jfc2VkL1VSTC9nCiAJcy8kX3g0MC9PQkpFQ1RfTkFNRS9nCiAJcy9BIFUgVGhvci9BVVRIT1IvZwogCXMvWy0wLTldXHsxMFx9IFs6MC05XVx7OFx9IFstK11bMC05XVx7NFx9L0RBVEUvZwogCXMvICAgICAgICBbXiBdLiovICAgICAgICBTVUJKRUNUL2cKIAlzLyAgW14gXS4qIChEQVRFKS8gIFNVQkpFQ1QgKERBVEUpL2cKLQlzLyRkb3duc3RyZWFtX3VybF9mb3Jfc2VkL1VSTC9nCiAJcy9mb3ItdXBzdHJlYW0vQlJBTkNIL2cKIAlzL21uZW1vbmljLnR4dC9GSUxFTkFNRS9nCiAJcy9edmVyc2lvbiBbMC05XS9WRVJTSU9OLwpkaWZmIC0tZ2l0IGEvdC90NTMwMy1wYWNrLWNvcnJ1cHRpb24tcmVzaWxpZW5jZS5zaCBiL3QvdDUzMDMtcGFjay1jb3JydXB0aW9uLXJlc2lsaWVuY2Uuc2gKaW5kZXggNWIxMjUwZi4uMzU5MjZkZSAxMDA3NTUKLS0tIGEvdC90NTMwMy1wYWNrLWNvcnJ1cHRpb24tcmVzaWxpZW5jZS5zaAorKysgYi90L3Q1MzAzLXBhY2stY29ycnVwdGlvbi1yZXNpbGllbmNlLnNoCkBAIC01MSw3ICs1MSw3IEBACiAgICAgb2ZzPWBnaXQgc2hvdy1pbmRleCA8ICR7cGFja30uaWR4IHwgZ3JlcCAkMSB8IGN1dCAtZjEgLWQiICJgICYmCiAgICAgb2ZzPSQoKCRvZnMgKyAkMikpICYmCiAgICAgY2htb2QgK3cgJHtwYWNrfS5wYWNrICYmCi0gICAgZGQgb2Y9JHtwYWNrfS5wYWNrIGNvdW50PTEgYnM9MSBjb252PW5vdHJ1bmMgc2Vlaz0kb2ZzICYmCisgICAgZGQgb2Y9JHtwYWNrfS5wYWNrIGJzPTEgY29udj1ub3RydW5jIHNlZWs9JG9mcyAmJgogICAgIHRlc3RfbXVzdF9mYWlsIGdpdCB2ZXJpZnktcGFjayAke3BhY2t9LnBhY2sKIH0KIApAQCAtMjc2LDYgKzI3NiwzMyBAQAogICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29ycnVwdGlvbiBvZiBkZWx0YSBiYXNlIHJlZmVyZW5jZSBwb2ludGluZyB0byB3cm9uZyBvYmplY3QnIFwKKyAgICAnY3JlYXRlX25ld19wYWNrIC0tZGVsdGEtYmFzZS1vZmZzZXQgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBwcmludGYgIlwyMjBcMDMzIiB8IGRvX2NvcnJ1cHRfb2JqZWN0ICRibG9iXzMgMiAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4vZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+L2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPi9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBidXQgaGF2aW5nIGEgbG9vc2UgY29weSBhbGxvd3MgZm9yIGZ1bGwgcmVjb3ZlcnknIFwKKyAgICAnbXYgJHtwYWNrfS5pZHggdG1wICYmCisgICAgIGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IGZpbGVfMyAmJgorICAgICBtdiB0bXAgJHtwYWNrfS5pZHggJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYW5kIHRoZW4gYSByZXBhY2sgImNsZWFycyIgdGhlIGNvcnJ1cHRpb24nIFwKKyAgICAnZG9fcmVwYWNrIC0tZGVsdGEtYmFzZS1vZmZzZXQgLS1uby1yZXVzZS1kZWx0YSAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIGdpdCB2ZXJpZnktcGFjayAke3BhY2t9LnBhY2sgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdjb3JydXB0aW5nIGhlYWRlciB0byBoYXZlIHRvbyBzbWFsbCBvdXRwdXQgYnVmZmVyIGZhaWxzIHVucGFjaycgXAogICAgICdjcmVhdGVfbmV3X3BhY2sgJiYKICAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgpkaWZmIC0tZ2l0IGEvdC90NTQwNy1wb3N0LXJld3JpdGUtaG9vay5zaCBiL3QvdDU0MDctcG9zdC1yZXdyaXRlLWhvb2suc2gKaW5kZXggYmFhNjcwYy4uZWEyZTBkNCAxMDA3NTUKLS0tIGEvdC90NTQwNy1wb3N0LXJld3JpdGUtaG9vay5zaAorKysgYi90L3Q1NDA3LXBvc3QtcmV3cml0ZS1ob29rLnNoCkBAIC0zMSw4ICszMSw4IEBACiB9CiAKIHZlcmlmeV9ob29rX2lucHV0ICgpIHsKLQl0ZXN0X2NtcCAiJFRSQVNIX0RJUkVDVE9SWSIvcG9zdC1yZXdyaXRlLmFyZ3MgZXhwZWN0ZWQuYXJncyAmJgotCXRlc3RfY21wICIkVFJBU0hfRElSRUNUT1JZIi9wb3N0LXJld3JpdGUuZGF0YSBleHBlY3RlZC5kYXRhCisJdGVzdF9jbXAgZXhwZWN0ZWQuYXJncyAiJFRSQVNIX0RJUkVDVE9SWSIvcG9zdC1yZXdyaXRlLmFyZ3MgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5kYXRhICIkVFJBU0hfRElSRUNUT1JZIi9wb3N0LXJld3JpdGUuZGF0YQogfQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29tbWl0IC0tYW1lbmQnICcKZGlmZiAtLWdpdCBhL3QvdDU1MDAtZmV0Y2gtcGFjay5zaCBiL3QvdDU1MDAtZmV0Y2gtcGFjay5zaAppbmRleCBkNTc0MDg1Li5mZDI1OThlIDEwMDc1NQotLS0gYS90L3Q1NTAwLWZldGNoLXBhY2suc2gKKysrIGIvdC90NTUwMC1mZXRjaC1wYWNrLnNoCkBAIC0xMzUsNiArMTM1LDEzIEBACiAJdGVzdCAiYGdpdCAtLWdpdC1kaXI9c2hhbGxvdzAvLmdpdCByZXYtbGlzdCAtLWNvdW50IEhFQURgIiA9IDEKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyBkZXB0aCAxIHdpdGggZnNjaycgJworCWdpdCBjb25maWcgLS1nbG9iYWwgZmV0Y2guZnNja29iamVjdHMgdHJ1ZSAmJgorCWdpdCBjbG9uZSAtLW5vLXNpbmdsZS1icmFuY2ggLS1kZXB0aCAxICJmaWxlOi8vJChwd2QpLy4iIHNoYWxsb3cwZnNjayAmJgorCXRlc3QgImBnaXQgLS1naXQtZGlyPXNoYWxsb3cwZnNjay8uZ2l0IHJldi1saXN0IC0tY291bnQgSEVBRGAiID0gMSAmJgorCWdpdCBjb25maWcgLS1nbG9iYWwgLS11bnNldCBmZXRjaC5mc2Nrb2JqZWN0cworJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93JyAnCiAJZ2l0IGNsb25lIC0tbm8tc2luZ2xlLWJyYW5jaCAtLWRlcHRoIDIgImZpbGU6Ly8kKHB3ZCkvLiIgc2hhbGxvdwogJwpAQCAtMzczLDYgKzM4MCwyMCBAQAogCXRlc3RfY21wIGNvdW50OC5leHBlY3RlZCBjb3VudDguYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGluIHNoYWxsb3cgcmVwbyB1bnJlYWNoYWJsZSBzaGFsbG93IG9iamVjdHMnICcKKwkoCisJCWdpdCBjbG9uZSAtLWJhcmUgLS1icmFuY2ggQiAtLXNpbmdsZS1icmFuY2ggImZpbGU6Ly8kKHB3ZCkvLiIgbm8tcmVmbG9nICYmCisJCWdpdCBjbG9uZSAtLWRlcHRoIDEgImZpbGU6Ly8kKHB3ZCkvbm8tcmVmbG9nIiBzaGFsbG93OSAmJgorCQljZCBuby1yZWZsb2cgJiYKKwkJZ2l0IHRhZyAtZCBUQUdCMSBUQUdCMiAmJgorCQlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL0IgQn5+ICYmCisJCWdpdCBnYyAtLXBydW5lPW5vdyAmJgorCQljZCAuLi9zaGFsbG93OSAmJgorCQlnaXQgZmV0Y2ggb3JpZ2luICYmCisJCWdpdCBmc2NrIC0tbm8tZGFuZ2xpbmcKKwkpCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3RzIGZvciB0aGUgLS1zdGRpbiBwYXJhbWV0ZXInICcKIAlmb3IgaGVhZCBpbiBDIEQgRSBGCiAJZG8KZGlmZiAtLWdpdCBhL3QvdDU1MDUtcmVtb3RlLnNoIGIvdC90NTUwNS1yZW1vdGUuc2gKaW5kZXggZGQxMGZmMC4uOGY2ZTM5MiAxMDA3NTUKLS0tIGEvdC90NTUwNS1yZW1vdGUuc2gKKysrIGIvdC90NTUwNS1yZW1vdGUuc2gKQEAgLTQyLDEwNyArNDIsMTA0IEBACiB9CiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJwotCiAJc2V0dXBfcmVwb3NpdG9yeSBvbmUgJiYKIAlzZXR1cF9yZXBvc2l0b3J5IHR3byAmJgogCSgKLQkJY2QgdHdvICYmIGdpdCBicmFuY2ggYW5vdGhlcgorCQljZCB0d28gJiYKKwkJZ2l0IGJyYW5jaCBhbm90aGVyCiAJKSAmJgogCWdpdCBjbG9uZSBvbmUgdGVzdAotCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdyZW1vdGUgaW5mb3JtYXRpb24gZm9yIHRoZSBvcmlnaW4nICcKLSgKLQljZCB0ZXN0ICYmCi0JdG9rZW5zX21hdGNoIG9yaWdpbiAiJChnaXQgcmVtb3RlKSIgJiYKLQljaGVja19yZW1vdGVfdHJhY2sgb3JpZ2luIG1hc3RlciBzaWRlICYmCi0JY2hlY2tfdHJhY2tpbmdfYnJhbmNoIG9yaWdpbiBIRUFEIG1hc3RlciBzaWRlCi0pCisJKAorCQljZCB0ZXN0ICYmCisJCXRva2Vuc19tYXRjaCBvcmlnaW4gIiQoZ2l0IHJlbW90ZSkiICYmCisJCWNoZWNrX3JlbW90ZV90cmFjayBvcmlnaW4gbWFzdGVyIHNpZGUgJiYKKwkJY2hlY2tfdHJhY2tpbmdfYnJhbmNoIG9yaWdpbiBIRUFEIG1hc3RlciBzaWRlCisJKQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYW5vdGhlciByZW1vdGUnICcKLSgKLQljZCB0ZXN0ICYmCi0JZ2l0IHJlbW90ZSBhZGQgLWYgc2Vjb25kIC4uL3R3byAmJgotCXRva2Vuc19tYXRjaCAib3JpZ2luIHNlY29uZCIgIiQoZ2l0IHJlbW90ZSkiICYmCi0JY2hlY2tfdHJhY2tpbmdfYnJhbmNoIHNlY29uZCBtYXN0ZXIgc2lkZSBhbm90aGVyICYmCi0JZ2l0IGZvci1lYWNoLXJlZiAiLS1mb3JtYXQ9JShyZWZuYW1lKSIgcmVmcy9yZW1vdGVzIHwKLQlzZWQgLWUgIi9ecmVmc1wvcmVtb3Rlc1wvb3JpZ2luXC8vZCIgXAotCSAgICAtZSAiL15yZWZzXC9yZW1vdGVzXC9zZWNvbmRcLy9kIiA+YWN0dWFsICYmCi0JPmV4cGVjdCAmJgotCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKLSkKKwkoCisJCWNkIHRlc3QgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgLWYgc2Vjb25kIC4uL3R3byAmJgorCQl0b2tlbnNfbWF0Y2ggIm9yaWdpbiBzZWNvbmQiICIkKGdpdCByZW1vdGUpIiAmJgorCQljaGVja190cmFja2luZ19icmFuY2ggc2Vjb25kIG1hc3RlciBzaWRlIGFub3RoZXIgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiAiLS1mb3JtYXQ9JShyZWZuYW1lKSIgcmVmcy9yZW1vdGVzIHwKKwkJc2VkIC1lICIvXnJlZnNcL3JlbW90ZXNcL29yaWdpblwvL2QiIFwKKwkJICAgIC1lICIvXnJlZnNcL3JlbW90ZXNcL3NlY29uZFwvL2QiID5hY3R1YWwgJiYKKwkJPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnY2hlY2sgcmVtb3RlIHRyYWNraW5nJyAnCi0oCi0JY2QgdGVzdCAmJgotCWNoZWNrX3JlbW90ZV90cmFjayBvcmlnaW4gbWFzdGVyIHNpZGUgJiYKLQljaGVja19yZW1vdGVfdHJhY2sgc2Vjb25kIG1hc3RlciBzaWRlIGFub3RoZXIKLSkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdjaGVjayByZW1vdGUtdHJhY2tpbmcnICcKKwkoCisJCWNkIHRlc3QgJiYKKwkJY2hlY2tfcmVtb3RlX3RyYWNrIG9yaWdpbiBtYXN0ZXIgc2lkZSAmJgorCQljaGVja19yZW1vdGVfdHJhY2sgc2Vjb25kIG1hc3RlciBzaWRlIGFub3RoZXIKKwkpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBmb3JjZXMgdHJhY2tpbmcgYnJhbmNoZXMnICcKLSgKLQljZCB0ZXN0ICYmCi0JY2FzZSBgZ2l0IGNvbmZpZyByZW1vdGUuc2Vjb25kLmZldGNoYCBpbgotCSsqKSB0cnVlIDs7Ci0JICopIGZhbHNlIDs7Ci0JZXNhYwotKQorCSgKKwkJY2QgdGVzdCAmJgorCQljYXNlIGBnaXQgY29uZmlnIHJlbW90ZS5zZWNvbmQuZmV0Y2hgIGluCisJCSsqKSB0cnVlIDs7CisJCSAqKSBmYWxzZSA7OworCQllc2FjCisJKQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgcmVtb3RlJyAnCi0oCi0JY2QgdGVzdCAmJgotCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL3NlY29uZC9IRUFEIHJlZnMvcmVtb3Rlcy9zZWNvbmQvbWFzdGVyICYmCi0JZ2l0IHJlbW90ZSBybSBzZWNvbmQKLSkKKwkoCisJCWNkIHRlc3QgJiYKKwkJZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvc2Vjb25kL0hFQUQgcmVmcy9yZW1vdGVzL3NlY29uZC9tYXN0ZXIgJiYKKwkJZ2l0IHJlbW90ZSBybSBzZWNvbmQKKwkpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdyZW1vdmUgcmVtb3RlJyAnCi0oCi0JY2QgdGVzdCAmJgotCXRva2Vuc19tYXRjaCBvcmlnaW4gIiQoZ2l0IHJlbW90ZSkiICYmCi0JY2hlY2tfcmVtb3RlX3RyYWNrIG9yaWdpbiBtYXN0ZXIgc2lkZSAmJgotCWdpdCBmb3ItZWFjaC1yZWYgIi0tZm9ybWF0PSUocmVmbmFtZSkiIHJlZnMvcmVtb3RlcyB8Ci0Jc2VkIC1lICIvXnJlZnNcL3JlbW90ZXNcL29yaWdpblwvL2QiID5hY3R1YWwgJiYKLQk+ZXhwZWN0ICYmCi0JdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAotKQorCSgKKwkJY2QgdGVzdCAmJgorCQl0b2tlbnNfbWF0Y2ggb3JpZ2luICIkKGdpdCByZW1vdGUpIiAmJgorCQljaGVja19yZW1vdGVfdHJhY2sgb3JpZ2luIG1hc3RlciBzaWRlICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgIi0tZm9ybWF0PSUocmVmbmFtZSkiIHJlZnMvcmVtb3RlcyB8CisJCXNlZCAtZSAiL15yZWZzXC9yZW1vdGVzXC9vcmlnaW5cLy9kIiA+YWN0dWFsICYmCisJCT5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIHJlbW90ZSBwcm90ZWN0cyBsb2NhbCBicmFuY2hlcycgJwotKAotCWNkIHRlc3QgJiYKLQl7IGNhdCA+ZXhwZWN0MSA8PEVPRgotTm90ZTogQSBicmFuY2ggb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2FzIG5vdCByZW1vdmVkOwotdG8gZGVsZXRlIGl0LCB1c2U6Ci0gIGdpdCBicmFuY2ggLWQgbWFzdGVyCi1FT0YKLQl9ICYmCi0JeyBjYXQgPmV4cGVjdDIgPDxFT0YKLU5vdGU6IFNvbWUgYnJhbmNoZXMgb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2VyZSBub3QgcmVtb3ZlZDsKLXRvIGRlbGV0ZSB0aGVtLCB1c2U6Ci0gIGdpdCBicmFuY2ggLWQgZm9vYnJhbmNoCi0gIGdpdCBicmFuY2ggLWQgbWFzdGVyCi1FT0YKLQl9ICYmCi0JZ2l0IHRhZyBmb290YWcgJiYKLQlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5vb3BzLmZldGNoICIrcmVmcy8qOnJlZnMvKiIgJiYKLQlnaXQgcmVtb3RlIHJlbW92ZSBvb3BzIDI+YWN0dWFsMSAmJgotCWdpdCBicmFuY2ggZm9vYnJhbmNoICYmCi0JZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub29wcy5mZXRjaCAiK3JlZnMvKjpyZWZzLyoiICYmCi0JZ2l0IHJlbW90ZSBybSBvb3BzIDI+YWN0dWFsMiAmJgotCWdpdCBicmFuY2ggLWQgZm9vYnJhbmNoICYmCi0JZ2l0IHRhZyAtZCBmb290YWcgJiYKLQl0ZXN0X2kxOG5jbXAgZXhwZWN0MSBhY3R1YWwxICYmCi0JdGVzdF9pMThuY21wIGV4cGVjdDIgYWN0dWFsMgotKQorCSgKKwkJY2QgdGVzdCAmJgorCQljYXQgPmV4cGVjdDEgPDwtXEVPRiAmJgorCQlOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7CisJCXRvIGRlbGV0ZSBpdCwgdXNlOgorCQkgIGdpdCBicmFuY2ggLWQgbWFzdGVyCisJCUVPRgorCQljYXQgPmV4cGVjdDIgPDwtXEVPRiAmJgorCQlOb3RlOiBTb21lIGJyYW5jaGVzIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdlcmUgbm90IHJlbW92ZWQ7CisJCXRvIGRlbGV0ZSB0aGVtLCB1c2U6CisJCSAgZ2l0IGJyYW5jaCAtZCBmb29icmFuY2gKKwkJICBnaXQgYnJhbmNoIC1kIG1hc3RlcgorCQlFT0YKKwkJZ2l0IHRhZyBmb290YWcgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub29wcy5mZXRjaCAiK3JlZnMvKjpyZWZzLyoiICYmCisJCWdpdCByZW1vdGUgcmVtb3ZlIG9vcHMgMj5hY3R1YWwxICYmCisJCWdpdCBicmFuY2ggZm9vYnJhbmNoICYmCisJCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLm9vcHMuZmV0Y2ggIityZWZzLyo6cmVmcy8qIiAmJgorCQlnaXQgcmVtb3RlIHJtIG9vcHMgMj5hY3R1YWwyICYmCisJCWdpdCBicmFuY2ggLWQgZm9vYnJhbmNoICYmCisJCWdpdCB0YWcgLWQgZm9vdGFnICYmCisJCXRlc3RfaTE4bmNtcCBleHBlY3QxIGFjdHVhbDEgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdDIgYWN0dWFsMgorCSkKICcKIAotY2F0ID4gdGVzdC9leHBlY3QgPDwgRU9GCitjYXQgPnRlc3QvZXhwZWN0IDw8RU9GCiAqIHJlbW90ZSBvcmlnaW4KICAgRmV0Y2ggVVJMOiAkKHB3ZCkvb25lCiAgIFB1c2ggIFVSTDogJChwd2QpL29uZQpAQCAtMTcyLDM2ICsxNjksNDAgQEAKIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93JyAnCi0JKGNkIHRlc3QgJiYKLQkgZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub3JpZ2luLmZldGNoIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvdXBzdHJlYW0gJiYKLQkgZ2l0IGZldGNoICYmCi0JIGdpdCBjaGVja291dCAtYiBhaGVhZCBvcmlnaW4vbWFzdGVyICYmCi0JIGVjaG8gMSA+PiBmaWxlICYmCi0JIHRlc3RfdGljayAmJgotCSBnaXQgY29tbWl0IC1tIHVwZGF0ZSBmaWxlICYmCi0JIGdpdCBjaGVja291dCBtYXN0ZXIgJiYKLQkgZ2l0IGJyYW5jaCAtLXRyYWNrIG9jdG9wdXMgb3JpZ2luL21hc3RlciAmJgotCSBnaXQgYnJhbmNoIC0tdHJhY2sgcmViYXNlIG9yaWdpbi9tYXN0ZXIgJiYKLQkgZ2l0IGJyYW5jaCAtZCAtciBvcmlnaW4vbWFzdGVyICYmCi0JIGdpdCBjb25maWcgLS1hZGQgcmVtb3RlLnR3by51cmwgLi4vdHdvICYmCi0JIGdpdCBjb25maWcgLS1hZGQgcmVtb3RlLnR3by5wdXNodXJsIC4uL3RocmVlICYmCi0JIGdpdCBjb25maWcgYnJhbmNoLnJlYmFzZS5yZWJhc2UgdHJ1ZSAmJgotCSBnaXQgY29uZmlnIGJyYW5jaC5vY3RvcHVzLm1lcmdlICJ0b3BpYy1hIHRvcGljLWIgdG9waWMtYyIgJiYKLQkgKGNkIC4uL29uZSAmJgotCSAgZWNobyAxID4gZmlsZSAmJgotCSAgdGVzdF90aWNrICYmCi0JICBnaXQgY29tbWl0IC1tIHVwZGF0ZSBmaWxlKSAmJgotCSBnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5vcmlnaW4ucHVzaCA6ICYmCi0JIGdpdCBjb25maWcgLS1hZGQgcmVtb3RlLm9yaWdpbi5wdXNoIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvdXBzdHJlYW0gJiYKLQkgZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub3JpZ2luLnB1c2ggK3JlZnMvdGFncy9sYXN0YmFja3VwICYmCi0JIGdpdCBjb25maWcgLS1hZGQgcmVtb3RlLnR3by5wdXNoICtyZWZzL2hlYWRzL2FoZWFkOnJlZnMvaGVhZHMvbWFzdGVyICYmCi0JIGdpdCBjb25maWcgLS1hZGQgcmVtb3RlLnR3by5wdXNoIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvYW5vdGhlciAmJgotCSBnaXQgcmVtb3RlIHNob3cgb3JpZ2luIHR3byA+IG91dHB1dCAmJgotCSBnaXQgYnJhbmNoIC1kIHJlYmFzZSBvY3RvcHVzICYmCi0JIHRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0KQorCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5vcmlnaW4uZmV0Y2ggcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy91cHN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGFoZWFkIG9yaWdpbi9tYXN0ZXIgJiYKKwkJZWNobyAxID4+ZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSB1cGRhdGUgZmlsZSAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBicmFuY2ggLS10cmFjayBvY3RvcHVzIG9yaWdpbi9tYXN0ZXIgJiYKKwkJZ2l0IGJyYW5jaCAtLXRyYWNrIHJlYmFzZSBvcmlnaW4vbWFzdGVyICYmCisJCWdpdCBicmFuY2ggLWQgLXIgb3JpZ2luL21hc3RlciAmJgorCQlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS50d28udXJsIC4uL3R3byAmJgorCQlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS50d28ucHVzaHVybCAuLi90aHJlZSAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC5yZWJhc2UucmViYXNlIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBicmFuY2gub2N0b3B1cy5tZXJnZSAidG9waWMtYSB0b3BpYy1iIHRvcGljLWMiICYmCisJCSgKKwkJCWNkIC4uL29uZSAmJgorCQkJZWNobyAxID5maWxlICYmCisJCQl0ZXN0X3RpY2sgJiYKKwkJCWdpdCBjb21taXQgLW0gdXBkYXRlIGZpbGUKKwkJKSAmJgorCQlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5vcmlnaW4ucHVzaCA6ICYmCisJCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLm9yaWdpbi5wdXNoIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvdXBzdHJlYW0gJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub3JpZ2luLnB1c2ggK3JlZnMvdGFncy9sYXN0YmFja3VwICYmCisJCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLnR3by5wdXNoICtyZWZzL2hlYWRzL2FoZWFkOnJlZnMvaGVhZHMvbWFzdGVyICYmCisJCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLnR3by5wdXNoIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvYW5vdGhlciAmJgorCQlnaXQgcmVtb3RlIHNob3cgb3JpZ2luIHR3byA+b3V0cHV0ICYmCisJCWdpdCBicmFuY2ggLWQgcmViYXNlIG9jdG9wdXMgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKwkpCiAnCiAKLWNhdCA+IHRlc3QvZXhwZWN0IDw8IEVPRgorY2F0ID50ZXN0L2V4cGVjdCA8PEVPRgogKiByZW1vdGUgb3JpZ2luCiAgIEZldGNoIFVSTDogJChwd2QpL29uZQogICBQdXNoICBVUkw6ICQocHdkKS9vbmUKQEAgLTIxOSwxNTIgKzIyMCwxODcgQEAKIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IC1uJyAnCi0JKG12IG9uZSBvbmUudW5yZWFjaGFibGUgJiYKLQkgY2QgdGVzdCAmJgotCSBnaXQgcmVtb3RlIHNob3cgLW4gb3JpZ2luID4gb3V0cHV0ICYmCi0JIG12IC4uL29uZS51bnJlYWNoYWJsZSAuLi9vbmUgJiYKLQkgdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQpCi0nCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lJyAnCi0JKGNkIG9uZSAmJgotCSBnaXQgYnJhbmNoIC1tIHNpZGUgc2lkZTIpICYmCi0JKGNkIHRlc3QgJiYKLQkgZ2l0IGZldGNoIG9yaWdpbiAmJgotCSBnaXQgcmVtb3RlIHBydW5lIG9yaWdpbiAmJgotCSBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZTIgJiYKLQkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUpCi0nCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldC1oZWFkIC0tZGVsZXRlJyAnCi0JKGNkIHRlc3QgJiYKLQkgZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgJiYKLQkgZ2l0IHJlbW90ZSBzZXQtaGVhZCAtLWRlbGV0ZSBvcmlnaW4gJiYKLQkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQpCi0nCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldC1oZWFkIC0tYXV0bycgJwotCShjZCB0ZXN0ICYmCi0JIGdpdCByZW1vdGUgc2V0LWhlYWQgLS1hdXRvIG9yaWdpbiAmJgotCSBlY2hvIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyID5leHBlY3QgJiYKLQkgZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgPm91dHB1dCAmJgotCSB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisJbXYgb25lIG9uZS51bnJlYWNoYWJsZSAmJgorCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgcmVtb3RlIHNob3cgLW4gb3JpZ2luID5vdXRwdXQgJiYKKwkJbXYgLi4vb25lLnVucmVhY2hhYmxlIC4uL29uZSAmJgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAogCSkKICcKIAotY2F0ID50ZXN0L2V4cGVjdCA8PEVPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUnICcKKwkoCisJCWNkIG9uZSAmJgorCQlnaXQgYnJhbmNoIC1tIHNpZGUgc2lkZTIKKwkpICYmCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBmZXRjaCBvcmlnaW4gJiYKKwkJZ2l0IHJlbW90ZSBwcnVuZSBvcmlnaW4gJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQtaGVhZCAtLWRlbGV0ZScgJworCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgc3ltYm9saWMtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRCAmJgorCQlnaXQgcmVtb3RlIHNldC1oZWFkIC0tZGVsZXRlIG9yaWdpbiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0LWhlYWQgLS1hdXRvJyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCByZW1vdGUgc2V0LWhlYWQgLS1hdXRvIG9yaWdpbiAmJgorCQllY2hvIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyID5leHBlY3QgJiYKKwkJZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgPm91dHB1dCAmJgorCQl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisJKQorJworCitjYXQgPnRlc3QvZXhwZWN0IDw8XEVPRgogZXJyb3I6IE11bHRpcGxlIHJlbW90ZSBIRUFEIGJyYW5jaGVzLiBQbGVhc2UgY2hvb3NlIG9uZSBleHBsaWNpdGx5IHdpdGg6CiAgIGdpdCByZW1vdGUgc2V0LWhlYWQgdHdvIGFub3RoZXIKICAgZ2l0IHJlbW90ZSBzZXQtaGVhZCB0d28gbWFzdGVyCiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0LWhlYWQgLS1hdXRvIGZhaWxzIHcvbXVsdGlwbGUgSEVBRHMnICcKLQkoY2QgdGVzdCAmJgotCSB0ZXN0X211c3RfZmFpbCBnaXQgcmVtb3RlIHNldC1oZWFkIC0tYXV0byB0d28gPm91dHB1dCAyPiYxICYmCi0JdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQpCisJKAorCQljZCB0ZXN0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZW1vdGUgc2V0LWhlYWQgLS1hdXRvIHR3byA+b3V0cHV0IDI+JjEgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKwkpCiAnCiAKLWNhdCA+dGVzdC9leHBlY3QgPDxFT0YKK2NhdCA+dGVzdC9leHBlY3QgPDxcRU9GCiByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUyCiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0LWhlYWQgZXhwbGljaXQnICcKLQkoY2QgdGVzdCAmJgotCSBnaXQgcmVtb3RlIHNldC1oZWFkIG9yaWdpbiBzaWRlMiAmJgotCSBnaXQgc3ltYm9saWMtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRCA+b3V0cHV0ICYmCi0JIGdpdCByZW1vdGUgc2V0LWhlYWQgb3JpZ2luIG1hc3RlciAmJgotCSB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0KQorCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgcmVtb3RlIHNldC1oZWFkIG9yaWdpbiBzaWRlMiAmJgorCQlnaXQgc3ltYm9saWMtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRCA+b3V0cHV0ICYmCisJCWdpdCByZW1vdGUgc2V0LWhlYWQgb3JpZ2luIG1hc3RlciAmJgorCQl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisJKQogJwogCi1jYXQgPiB0ZXN0L2V4cGVjdCA8PCBFT0YKK2NhdCA+dGVzdC9leHBlY3QgPDxFT0YKIFBydW5pbmcgb3JpZ2luCiBVUkw6ICQocHdkKS9vbmUKICAqIFt3b3VsZCBwcnVuZV0gb3JpZ2luL3NpZGUyCiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgLS1kcnktcnVuJyAnCi0JKGNkIG9uZSAmJgotCSBnaXQgYnJhbmNoIC1tIHNpZGUyIHNpZGUpICYmCi0JKGNkIHRlc3QgJiYKLQkgZ2l0IHJlbW90ZSBwcnVuZSAtLWRyeS1ydW4gb3JpZ2luID4gb3V0cHV0ICYmCi0JIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlMiAmJgotCSB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZSAmJgotCShjZCAuLi9vbmUgJiYKLQkgZ2l0IGJyYW5jaCAtbSBzaWRlIHNpZGUyKSAmJgotCSB0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCkKKwkoCisJCWNkIG9uZSAmJgorCQlnaXQgYnJhbmNoIC1tIHNpZGUyIHNpZGUpICYmCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCByZW1vdGUgcHJ1bmUgLS1kcnktcnVuIG9yaWdpbiA+b3V0cHV0ICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlMiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZSAmJgorCSgKKwkJY2QgLi4vb25lICYmCisJCWdpdCBicmFuY2ggLW0gc2lkZSBzaWRlMikgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKwkpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCAtLW1pcnJvciAmJiBwcnVuZScgJwotCShta2RpciBtaXJyb3IgJiYKLQkgY2QgbWlycm9yICYmCi0JIGdpdCBpbml0IC0tYmFyZSAmJgotCSBnaXQgcmVtb3RlIGFkZCAtLW1pcnJvciAtZiBvcmlnaW4gLi4vb25lKSAmJgotCShjZCBvbmUgJiYKLQkgZ2l0IGJyYW5jaCAtbSBzaWRlMiBzaWRlKSAmJgotCShjZCBtaXJyb3IgJiYKLQkgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3NpZGUyICYmCi0JIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9zaWRlICYmCi0JIGdpdCBmZXRjaCBvcmlnaW4gJiYKLQkgZ2l0IHJlbW90ZSBwcnVuZSBvcmlnaW4gJiYKLQkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3NpZGUyICYmCi0JIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9zaWRlKQorCW1rZGlyIG1pcnJvciAmJgorCSgKKwkJY2QgbWlycm9yICYmCisJCWdpdCBpbml0IC0tYmFyZSAmJgorCQlnaXQgcmVtb3RlIGFkZCAtLW1pcnJvciAtZiBvcmlnaW4gLi4vb25lCisJKSAmJgorCSgKKwkJY2Qgb25lICYmCisJCWdpdCBicmFuY2ggLW0gc2lkZTIgc2lkZQorCSkgJiYKKwkoCisJCWNkIG1pcnJvciAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvc2lkZTIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3NpZGUgJiYKKwkJZ2l0IGZldGNoIG9yaWdpbiAmJgorCQlnaXQgcmVtb3RlIHBydW5lIG9yaWdpbiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvc2lkZTIgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3NpZGUKKwkpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCAtLW1pcnJvcj1mZXRjaCcgJwogCW1rZGlyIG1pcnJvci1mZXRjaCAmJgogCWdpdCBpbml0IG1pcnJvci1mZXRjaC9wYXJlbnQgJiYKLQkoY2QgbWlycm9yLWZldGNoL3BhcmVudCAmJgotCSB0ZXN0X2NvbW1pdCBvbmUpICYmCisJKAorCQljZCBtaXJyb3ItZmV0Y2gvcGFyZW50ICYmCisJCXRlc3RfY29tbWl0IG9uZQorCSkgJiYKIAlnaXQgaW5pdCAtLWJhcmUgbWlycm9yLWZldGNoL2NoaWxkICYmCi0JKGNkIG1pcnJvci1mZXRjaC9jaGlsZCAmJgotCSBnaXQgcmVtb3RlIGFkZCAtLW1pcnJvcj1mZXRjaCAtZiBwYXJlbnQgLi4vcGFyZW50KQorCSgKKwkJY2QgbWlycm9yLWZldGNoL2NoaWxkICYmCisJCWdpdCByZW1vdGUgYWRkIC0tbWlycm9yPWZldGNoIC1mIHBhcmVudCAuLi9wYXJlbnQKKwkpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIG1pcnJvcnMgYWN0IGFzIG1pcnJvcnMgZHVyaW5nIGZldGNoJyAnCi0JKGNkIG1pcnJvci1mZXRjaC9wYXJlbnQgJiYKLQkgZ2l0IGJyYW5jaCBuZXcgJiYKLQkgZ2l0IGJyYW5jaCAtbSBtYXN0ZXIgcmVuYW1lZAorCSgKKwkJY2QgbWlycm9yLWZldGNoL3BhcmVudCAmJgorCQlnaXQgYnJhbmNoIG5ldyAmJgorCQlnaXQgYnJhbmNoIC1tIG1hc3RlciByZW5hbWVkCiAJKSAmJgotCShjZCBtaXJyb3ItZmV0Y2gvY2hpbGQgJiYKLQkgZ2l0IGZldGNoIHBhcmVudCAmJgotCSBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbmV3ICYmCi0JIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9yZW5hbWVkCisJKAorCQljZCBtaXJyb3ItZmV0Y2gvY2hpbGQgJiYKKwkJZ2l0IGZldGNoIHBhcmVudCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbmV3ICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9yZW5hbWVkCiAJKQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBtaXJyb3JzIGNhbiBwcnVuZScgJwotCShjZCBtaXJyb3ItZmV0Y2gvY2hpbGQgJiYKLQkgZ2l0IHJlbW90ZSBwcnVuZSBwYXJlbnQgJiYKLQkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcgorCSgKKwkJY2QgbWlycm9yLWZldGNoL2NoaWxkICYmCisJCWdpdCByZW1vdGUgcHJ1bmUgcGFyZW50ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIKIAkpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIG1pcnJvcnMgZG8gbm90IGFjdCBhcyBtaXJyb3JzIGR1cmluZyBwdXNoJyAnCi0JKGNkIG1pcnJvci1mZXRjaC9wYXJlbnQgJiYKLQkgZ2l0IGNoZWNrb3V0IEhFQUReMAorCSgKKwkJY2QgbWlycm9yLWZldGNoL3BhcmVudCAmJgorCQlnaXQgY2hlY2tvdXQgSEVBRF4wCiAJKSAmJgotCShjZCBtaXJyb3ItZmV0Y2gvY2hpbGQgJiYKLQkgZ2l0IGJyYW5jaCAtbSByZW5hbWVkIHJlbmFtZWQyICYmCi0JIGdpdCBwdXNoIHBhcmVudCA6CisJKAorCQljZCBtaXJyb3ItZmV0Y2gvY2hpbGQgJiYKKwkJZ2l0IGJyYW5jaCAtbSByZW5hbWVkIHJlbmFtZWQyICYmCisJCWdpdCBwdXNoIHBhcmVudCA6CiAJKSAmJgotCShjZCBtaXJyb3ItZmV0Y2gvcGFyZW50ICYmCi0JIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVuYW1lZCAmJgotCSB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcmVuYW1lZDIKKwkoCisJCWNkIG1pcnJvci1mZXRjaC9wYXJlbnQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZW5hbWVkICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9yZW5hbWVkMgogCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGZldGNoIG1pcnJvciB3aXRoIHNwZWNpZmljIGJyYW5jaGVzJyAnCiAJZ2l0IGluaXQgLS1iYXJlIG1pcnJvci1mZXRjaC90cmFjayAmJgotCShjZCBtaXJyb3ItZmV0Y2gvdHJhY2sgJiYKLQkgZ2l0IHJlbW90ZSBhZGQgLS1taXJyb3I9ZmV0Y2ggLXQgaGVhZHMvbmV3IHBhcmVudCAuLi9wYXJlbnQKKwkoCisJCWNkIG1pcnJvci1mZXRjaC90cmFjayAmJgorCQlnaXQgcmVtb3RlIGFkZCAtLW1pcnJvcj1mZXRjaCAtdCBoZWFkcy9uZXcgcGFyZW50IC4uL3BhcmVudAogCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbWlycm9yIHJlc3BlY3RzIHNwZWNpZmljIGJyYW5jaGVzJyAnCi0JKGNkIG1pcnJvci1mZXRjaC90cmFjayAmJgotCSBnaXQgZmV0Y2ggcGFyZW50ICYmCi0JIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9uZXcgJiYKLQkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3JlbmFtZWQKKwkoCisJCWNkIG1pcnJvci1mZXRjaC90cmFjayAmJgorCQlnaXQgZmV0Y2ggcGFyZW50ICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9uZXcgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3JlbmFtZWQKIAkpCiAnCiAKQEAgLTM3Miw2MCArNDA4LDcyIEBACiAJbWtkaXIgbWlycm9yLXB1c2ggJiYKIAlnaXQgaW5pdCAtLWJhcmUgbWlycm9yLXB1c2gvcHVibGljICYmCiAJZ2l0IGluaXQgbWlycm9yLXB1c2gvcHJpdmF0ZSAmJgotCShjZCBtaXJyb3ItcHVzaC9wcml2YXRlICYmCi0JIHRlc3RfY29tbWl0IG9uZSAmJgotCSBnaXQgcmVtb3RlIGFkZCAtLW1pcnJvcj1wdXNoIHB1YmxpYyAuLi9wdWJsaWMKKwkoCisJCWNkIG1pcnJvci1wdXNoL3ByaXZhdGUgJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCWdpdCByZW1vdGUgYWRkIC0tbWlycm9yPXB1c2ggcHVibGljIC4uL3B1YmxpYwogCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBtaXJyb3JzIGFjdCBhcyBtaXJyb3JzIGR1cmluZyBwdXNoJyAnCi0JKGNkIG1pcnJvci1wdXNoL3ByaXZhdGUgJiYKLQkgZ2l0IGJyYW5jaCBuZXcgJiYKLQkgZ2l0IGJyYW5jaCAtbSBtYXN0ZXIgcmVuYW1lZCAmJgotCSBnaXQgcHVzaCBwdWJsaWMKKwkoCisJCWNkIG1pcnJvci1wdXNoL3ByaXZhdGUgJiYKKwkJZ2l0IGJyYW5jaCBuZXcgJiYKKwkJZ2l0IGJyYW5jaCAtbSBtYXN0ZXIgcmVuYW1lZCAmJgorCQlnaXQgcHVzaCBwdWJsaWMKIAkpICYmCi0JKGNkIG1pcnJvci1wdXNoL3ByaXZhdGUgJiYKLQkgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL25ldyAmJgotCSBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcmVuYW1lZCAmJgotCSB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyCisJKAorCQljZCBtaXJyb3ItcHVzaC9wcml2YXRlICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9uZXcgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3JlbmFtZWQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcgogCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBtaXJyb3JzIGRvIG5vdCBhY3QgYXMgbWlycm9ycyBkdXJpbmcgZmV0Y2gnICcKLQkoY2QgbWlycm9yLXB1c2gvcHVibGljICYmCi0JIGdpdCBicmFuY2ggLW0gcmVuYW1lZCByZW5hbWVkMiAmJgotCSBnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9yZW5hbWVkMgorCSgKKwkJY2QgbWlycm9yLXB1c2gvcHVibGljICYmCisJCWdpdCBicmFuY2ggLW0gcmVuYW1lZCByZW5hbWVkMiAmJgorCQlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9yZW5hbWVkMgogCSkgJiYKLQkoY2QgbWlycm9yLXB1c2gvcHJpdmF0ZSAmJgotCSBnaXQgZmV0Y2ggcHVibGljICYmCi0JIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9yZW5hbWVkICYmCi0JIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9yZW5hbWVkMgorCSgKKwkJY2QgbWlycm9yLXB1c2gvcHJpdmF0ZSAmJgorCQlnaXQgZmV0Y2ggcHVibGljICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9yZW5hbWVkICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9yZW5hbWVkMgogCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBtaXJyb3JzIGRvIG5vdCBhbGxvdyB5b3UgdG8gc3BlY2lmeSByZWZzJyAnCiAJZ2l0IGluaXQgbWlycm9yLXB1c2gvdHJhY2sgJiYKLQkoY2QgbWlycm9yLXB1c2gvdHJhY2sgJiYKLQkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlbW90ZSBhZGQgLS1taXJyb3I9cHVzaCAtdCBuZXcgcHVibGljIC4uL3B1YmxpYworCSgKKwkJY2QgbWlycm9yLXB1c2gvdHJhY2sgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlbW90ZSBhZGQgLS1taXJyb3I9cHVzaCAtdCBuZXcgcHVibGljIC4uL3B1YmxpYwogCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGFsdCAmJiBwcnVuZScgJwotCShta2RpciBhbHR0c3QgJiYKLQkgY2QgYWx0dHN0ICYmCi0JIGdpdCBpbml0ICYmCi0JIGdpdCByZW1vdGUgYWRkIC1mIG9yaWdpbiAuLi9vbmUgJiYKLQkgZ2l0IGNvbmZpZyByZW1vdGUuYWx0LnVybCAuLi9vbmUgJiYKLQkgZ2l0IGNvbmZpZyByZW1vdGUuYWx0LmZldGNoICIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIpICYmCi0JKGNkIG9uZSAmJgotCSBnaXQgYnJhbmNoIC1tIHNpZGUgc2lkZTIpICYmCi0JKGNkIGFsdHRzdCAmJgotCSBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZSAmJgotCSB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZTIgJiYKLQkgZ2l0IGZldGNoIGFsdCAmJgotCSBnaXQgcmVtb3RlIHBydW5lIGFsdCAmJgotCSB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZSAmJgotCSBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZTIpCisJbWtkaXIgYWx0dHN0ICYmCisJKAorCQljZCBhbHR0c3QgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgLWYgb3JpZ2luIC4uL29uZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5hbHQudXJsIC4uL29uZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5hbHQuZmV0Y2ggIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIgorCSkgJiYKKwkoCisJCWNkIG9uZSAmJgorCQlnaXQgYnJhbmNoIC1tIHNpZGUgc2lkZTIKKwkpICYmCisJKAorCQljZCBhbHR0c3QgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUyICYmCisJCWdpdCBmZXRjaCBhbHQgJiYKKwkJZ2l0IHJlbW90ZSBwcnVuZSBhbHQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUyCisJKQogJwogCiBjYXQgPnRlc3QvZXhwZWN0IDw8XEVPRgpAQCAtNDMzLDIwICs0ODEsMjQgQEAKIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgd2l0aCByZWFjaGFibGUgdGFncyAoZGVmYXVsdCknICcKLQkoY2Qgb25lICYmCi0JID5mb29iYXIgJiYKLQkgZ2l0IGFkZCBmb29iYXIgJiYKLQkgZ2l0IGNvbW1pdCAtbSAiRm9vYmFyIiAmJgotCSBnaXQgdGFnIC1hIC1tICJGb29iYXIgdGFnIiBmb29iYXItdGFnICYmCi0JIGdpdCByZXNldCAtLWhhcmQgSEVBRH4xICYmCi0JIGdpdCB0YWcgLWEgLW0gIlNvbWUgdGFnIiBzb21lLXRhZykgJiYKLQkobWtkaXIgYWRkLXRhZ3MgJiYKLQkgY2QgYWRkLXRhZ3MgJiYKLQkgZ2l0IGluaXQgJiYKLQkgZ2l0IHJlbW90ZSBhZGQgLWYgb3JpZ2luIC4uL29uZSAmJgotCSBnaXQgdGFnIC1sIHNvbWUtdGFnID4uLi90ZXN0L291dHB1dCAmJgotCSBnaXQgdGFnIC1sIGZvb2Jhci10YWcgPj4uLi90ZXN0L291dHB1dCAmJgotCSB0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udGFnb3B0KSAmJgorCSgKKwkJY2Qgb25lICYmCisJCT5mb29iYXIgJiYKKwkJZ2l0IGFkZCBmb29iYXIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiRm9vYmFyIiAmJgorCQlnaXQgdGFnIC1hIC1tICJGb29iYXIgdGFnIiBmb29iYXItdGFnICYmCisJCWdpdCByZXNldCAtLWhhcmQgSEVBRH4xICYmCisJCWdpdCB0YWcgLWEgLW0gIlNvbWUgdGFnIiBzb21lLXRhZworCSkgJiYKKwlta2RpciBhZGQtdGFncyAmJgorCSgKKwkJY2QgYWRkLXRhZ3MgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgLWYgb3JpZ2luIC4uL29uZSAmJgorCQlnaXQgdGFnIC1sIHNvbWUtdGFnID4uLi90ZXN0L291dHB1dCAmJgorCQlnaXQgdGFnIC1sIGZvb2Jhci10YWcgPj4uLi90ZXN0L291dHB1dCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udGFnb3B0CisJKSAmJgogCXRlc3RfY21wIHRlc3QvZXhwZWN0IHRlc3Qvb3V0cHV0CiAnCiAKQEAgLTQ1NywxNCArNTA5LDE2IEBACiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIC0tdGFncycgJwotCShybSAtcmYgYWRkLXRhZ3MgJiYKLQkgbWtkaXIgYWRkLXRhZ3MgJiYKLQkgY2QgYWRkLXRhZ3MgJiYKLQkgZ2l0IGluaXQgJiYKLQkgZ2l0IHJlbW90ZSBhZGQgLWYgLS10YWdzIG9yaWdpbiAuLi9vbmUgJiYKLQkgZ2l0IHRhZyAtbCBzb21lLXRhZyA+Li4vdGVzdC9vdXRwdXQgJiYKLQkgZ2l0IHRhZyAtbCBmb29iYXItdGFnID4+Li4vdGVzdC9vdXRwdXQgJiYKLQkgZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnRhZ29wdCA+Pi4uL3Rlc3Qvb3V0cHV0KSAmJgorCXJtIC1yZiBhZGQtdGFncyAmJgorCSgKKwkJbWtkaXIgYWRkLXRhZ3MgJiYKKwkJY2QgYWRkLXRhZ3MgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgLWYgLS10YWdzIG9yaWdpbiAuLi9vbmUgJiYKKwkJZ2l0IHRhZyAtbCBzb21lLXRhZyA+Li4vdGVzdC9vdXRwdXQgJiYKKwkJZ2l0IHRhZyAtbCBmb29iYXItdGFnID4+Li4vdGVzdC9vdXRwdXQgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnRhZ29wdCA+Pi4uL3Rlc3Qvb3V0cHV0CisJKSAmJgogCXRlc3RfY21wIHRlc3QvZXhwZWN0IHRlc3Qvb3V0cHV0CiAnCiAKQEAgLTQ3MywyNSArNTI3LDMxIEBACiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIC0tbm8tdGFncycgJwotCShybSAtcmYgYWRkLXRhZ3MgJiYKLQkgbWtkaXIgYWRkLW5vLXRhZ3MgJiYKLQkgY2QgYWRkLW5vLXRhZ3MgJiYKLQkgZ2l0IGluaXQgJiYKLQkgZ2l0IHJlbW90ZSBhZGQgLWYgLS1uby10YWdzIG9yaWdpbiAuLi9vbmUgJiYKLQkgZ2l0IHRhZyAtbCBzb21lLXRhZyA+Li4vdGVzdC9vdXRwdXQgJiYKLQkgZ2l0IHRhZyAtbCBmb29iYXItdGFnID4uLi90ZXN0L291dHB1dCAmJgotCSBnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udGFnb3B0ID4+Li4vdGVzdC9vdXRwdXQpICYmCi0JKGNkIG9uZSAmJgotCSBnaXQgdGFnIC1kIHNvbWUtdGFnIGZvb2Jhci10YWcpICYmCisJcm0gLXJmIGFkZC10YWdzICYmCisJKAorCQlta2RpciBhZGQtbm8tdGFncyAmJgorCQljZCBhZGQtbm8tdGFncyAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgcmVtb3RlIGFkZCAtZiAtLW5vLXRhZ3Mgb3JpZ2luIC4uL29uZSAmJgorCQlnaXQgdGFnIC1sIHNvbWUtdGFnID4uLi90ZXN0L291dHB1dCAmJgorCQlnaXQgdGFnIC1sIGZvb2Jhci10YWcgPi4uL3Rlc3Qvb3V0cHV0ICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi50YWdvcHQgPj4uLi90ZXN0L291dHB1dAorCSkgJiYKKwkoCisJCWNkIG9uZSAmJgorCQlnaXQgdGFnIC1kIHNvbWUtdGFnIGZvb2Jhci10YWcKKwkpICYmCiAJdGVzdF9jbXAgdGVzdC9leHBlY3QgdGVzdC9vdXRwdXQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVqZWN0IC0tbm8tbm8tdGFncycgJwotCShjZCBhZGQtbm8tdGFncyAmJgotCSB0ZXN0X211c3RfZmFpbCBnaXQgcmVtb3RlIGFkZCAtZiAtLW5vLW5vLXRhZ3MgbmV3b3JpZ2luIC4uL29uZSkKKwkoCisJCWNkIGFkZC1uby10YWdzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZW1vdGUgYWRkIC1mIC0tbm8tbm8tdGFncyBuZXdvcmlnaW4gLi4vb25lCisJKQogJwogCi1jYXQgPiBvbmUvZXhwZWN0IDw8IEVPRgorY2F0ID5vbmUvZXhwZWN0IDw8XEVPRgogICBhcGlzL21hc3RlcgogICBhcGlzL3NpZGUKICAgZHJvc29waGlsYS9hbm90aGVyCkBAIC01MDAsMTcgKzU2MCwxNyBAQAogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZScgJwotCi0JKGNkIG9uZSAmJgotCSBnaXQgcmVtb3RlIGFkZCBkcm9zb3BoaWxhIC4uL3R3byAmJgotCSBnaXQgcmVtb3RlIGFkZCBhcGlzIC4uL21pcnJvciAmJgotCSBnaXQgcmVtb3RlIHVwZGF0ZSAmJgotCSBnaXQgYnJhbmNoIC1yID4gb3V0cHV0ICYmCi0JIHRlc3RfY21wIGV4cGVjdCBvdXRwdXQpCi0KKwkoCisJCWNkIG9uZSAmJgorCQlnaXQgcmVtb3RlIGFkZCBkcm9zb3BoaWxhIC4uL3R3byAmJgorCQlnaXQgcmVtb3RlIGFkZCBhcGlzIC4uL21pcnJvciAmJgorCQlnaXQgcmVtb3RlIHVwZGF0ZSAmJgorCQlnaXQgYnJhbmNoIC1yID5vdXRwdXQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCSkKICcKIAotY2F0ID4gb25lL2V4cGVjdCA8PCBFT0YKK2NhdCA+b25lL2V4cGVjdCA8PFxFT0YKICAgZHJvc29waGlsYS9hbm90aGVyCiAgIGRyb3NvcGhpbGEvbWFzdGVyCiAgIGRyb3NvcGhpbGEvc2lkZQpAQCAtNTIxLDM0ICs1ODEsNDAgQEAKIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgd2l0aCBhcmd1bWVudHMnICcKLQotCShjZCBvbmUgJiYKLQkgZm9yIGIgaW4gJChnaXQgYnJhbmNoIC1yKQotCSBkbworCSgKKwkJY2Qgb25lICYmCisJCWZvciBiIGluICQoZ2l0IGJyYW5jaCAtcikKKwkJZG8KIAkJZ2l0IGJyYW5jaCAtciAtZCAkYiB8fCBicmVhawotCSBkb25lICYmCi0JIGdpdCByZW1vdGUgYWRkIG1hbmR1Y2EgLi4vbWlycm9yICYmCi0JIGdpdCByZW1vdGUgYWRkIG1lZ2Fsb3ByZXB1cyAuLi9taXJyb3IgJiYKLQkgZ2l0IGNvbmZpZyByZW1vdGVzLnBob2JhZXRpY3VzICJkcm9zb3BoaWxhIG1lZ2Fsb3ByZXB1cyIgJiYKLQkgZ2l0IGNvbmZpZyByZW1vdGVzLnRpdGFudXMgbWFuZHVjYSAmJgotCSBnaXQgcmVtb3RlIHVwZGF0ZSBwaG9iYWV0aWN1cyB0aXRhbnVzICYmCi0JIGdpdCBicmFuY2ggLXIgPiBvdXRwdXQgJiYKLQkgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCkKLQorCQlkb25lICYmCisJCWdpdCByZW1vdGUgYWRkIG1hbmR1Y2EgLi4vbWlycm9yICYmCisJCWdpdCByZW1vdGUgYWRkIG1lZ2Fsb3ByZXB1cyAuLi9taXJyb3IgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGVzLnBob2JhZXRpY3VzICJkcm9zb3BoaWxhIG1lZ2Fsb3ByZXB1cyIgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGVzLnRpdGFudXMgbWFuZHVjYSAmJgorCQlnaXQgcmVtb3RlIHVwZGF0ZSBwaG9iYWV0aWN1cyB0aXRhbnVzICYmCisJCWdpdCBicmFuY2ggLXIgPm91dHB1dCAmJgorCQl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisJKQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgLS1wcnVuZScgJwotCi0JKGNkIG9uZSAmJgotCSBnaXQgYnJhbmNoIC1tIHNpZGUyIHNpZGUzKSAmJgotCShjZCB0ZXN0ICYmCi0JIGdpdCByZW1vdGUgdXBkYXRlIC0tcHJ1bmUgJiYKLQkgKGNkIC4uL29uZSAmJiBnaXQgYnJhbmNoIC1tIHNpZGUzIHNpZGUyKSAmJgotCSBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZTMgJiYKLQkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUyKQorCSgKKwkJY2Qgb25lICYmCisJCWdpdCBicmFuY2ggLW0gc2lkZTIgc2lkZTMKKwkpICYmCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCByZW1vdGUgdXBkYXRlIC0tcHJ1bmUgJiYKKwkJKAorCQkJY2QgLi4vb25lICYmCisJCQlnaXQgYnJhbmNoIC1tIHNpZGUzIHNpZGUyCisJCSkgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlMgorCSkKICcKIAotY2F0ID4gb25lL2V4cGVjdCA8PCBFT0YKK2NhdCA+b25lL2V4cGVjdCA8PC1cRU9GCiAgIGFwaXMvbWFzdGVyCiAgIGFwaXMvc2lkZQogICBtYW5kdWNhL21hc3RlcgpAQCAtNTU4LDE3NiArNjI0LDIwNCBAQAogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBkZWZhdWx0JyAnCi0KLQkoY2Qgb25lICYmCi0JIGZvciBiIGluICQoZ2l0IGJyYW5jaCAtcikKLQkgZG8KKwkoCisJCWNkIG9uZSAmJgorCQlmb3IgYiBpbiAkKGdpdCBicmFuY2ggLXIpCisJCWRvCiAJCWdpdCBicmFuY2ggLXIgLWQgJGIgfHwgYnJlYWsKLQkgZG9uZSAmJgotCSBnaXQgY29uZmlnIHJlbW90ZS5kcm9zb3BoaWxhLnNraXBEZWZhdWx0VXBkYXRlIHRydWUgJiYKLQkgZ2l0IHJlbW90ZSB1cGRhdGUgZGVmYXVsdCAmJgotCSBnaXQgYnJhbmNoIC1yID4gb3V0cHV0ICYmCi0JIHRlc3RfY21wIGV4cGVjdCBvdXRwdXQpCi0KKwkJZG9uZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5kcm9zb3BoaWxhLnNraXBEZWZhdWx0VXBkYXRlIHRydWUgJiYKKwkJZ2l0IHJlbW90ZSB1cGRhdGUgZGVmYXVsdCAmJgorCQlnaXQgYnJhbmNoIC1yID5vdXRwdXQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCSkKICcKIAotY2F0ID4gb25lL2V4cGVjdCA8PCBFT0YKK2NhdCA+b25lL2V4cGVjdCA8PFxFT0YKICAgZHJvc29waGlsYS9hbm90aGVyCiAgIGRyb3NvcGhpbGEvbWFzdGVyCiAgIGRyb3NvcGhpbGEvc2lkZQogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBkZWZhdWx0IChvdmVycmlkZGVuLCB3aXRoIGZ1bm55IHdoaXRlc3BhY2UpJyAnCi0KLQkoY2Qgb25lICYmCi0JIGZvciBiIGluICQoZ2l0IGJyYW5jaCAtcikKLQkgZG8KKwkoCisJCWNkIG9uZSAmJgorCQlmb3IgYiBpbiAkKGdpdCBicmFuY2ggLXIpCisJCWRvCiAJCWdpdCBicmFuY2ggLXIgLWQgJGIgfHwgYnJlYWsKLQkgZG9uZSAmJgotCSBnaXQgY29uZmlnIHJlbW90ZXMuZGVmYXVsdCAiJChwcmludGYgIlx0IGRyb3NvcGhpbGEgIFxuIikiICYmCi0JIGdpdCByZW1vdGUgdXBkYXRlIGRlZmF1bHQgJiYKLQkgZ2l0IGJyYW5jaCAtciA+IG91dHB1dCAmJgotCSB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0KQotCisJCWRvbmUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGVzLmRlZmF1bHQgIiQocHJpbnRmICJcdCBkcm9zb3BoaWxhICBcbiIpIiAmJgorCQlnaXQgcmVtb3RlIHVwZGF0ZSBkZWZhdWx0ICYmCisJCWdpdCBicmFuY2ggLXIgPm91dHB1dCAmJgorCQl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisJKQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgKHdpdGggcmVtb3Rlcy5kZWZhdWx0IGRlZmluZWQpJyAnCi0KLQkoY2Qgb25lICYmCi0JIGZvciBiIGluICQoZ2l0IGJyYW5jaCAtcikKLQkgZG8KKwkoCisJCWNkIG9uZSAmJgorCQlmb3IgYiBpbiAkKGdpdCBicmFuY2ggLXIpCisJCWRvCiAJCWdpdCBicmFuY2ggLXIgLWQgJGIgfHwgYnJlYWsKLQkgZG9uZSAmJgotCSBnaXQgY29uZmlnIHJlbW90ZXMuZGVmYXVsdCAiZHJvc29waGlsYSIgJiYKLQkgZ2l0IHJlbW90ZSB1cGRhdGUgJiYKLQkgZ2l0IGJyYW5jaCAtciA+IG91dHB1dCAmJgotCSB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0KQotCisJCWRvbmUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGVzLmRlZmF1bHQgImRyb3NvcGhpbGEiICYmCisJCWdpdCByZW1vdGUgdXBkYXRlICYmCisJCWdpdCBicmFuY2ggLXIgPm91dHB1dCAmJgorCQl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisJKQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICcicmVtb3RlIHNob3ciIGRvZXMgbm90IHNob3cgc3ltYm9saWMgcmVmcycgJwotCiAJZ2l0IGNsb25lIG9uZSB0aHJlZSAmJgotCShjZCB0aHJlZSAmJgotCSBnaXQgcmVtb3RlIHNob3cgb3JpZ2luID4gb3V0cHV0ICYmCi0JICEgZ3JlcCAiXiAqSEVBRCQiIDwgb3V0cHV0ICYmCi0JICEgZ3JlcCAtaSBzdGFsZSA8IG91dHB1dCkKLQorCSgKKwkJY2QgdGhyZWUgJiYKKwkJZ2l0IHJlbW90ZSBzaG93IG9yaWdpbiA+b3V0cHV0ICYmCisJCSEgZ3JlcCAiXiAqSEVBRCQiIDwgb3V0cHV0ICYmCisJCSEgZ3JlcCAtaSBzdGFsZSA8IG91dHB1dAorCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVqZWN0IGFkZGluZyByZW1vdGUgd2l0aCBhbiBpbnZhbGlkIG5hbWUnICcKLQogCXRlc3RfbXVzdF9mYWlsIGdpdCByZW1vdGUgYWRkIHNvbWU6dXJsIGRlc2lyZWQtbmFtZQotCiAnCiAKICMgVGhlIGZpcnN0IHRocmVlIHRlc3QgaWYgdGhlIHRyYWNraW5nIGJyYW5jaGVzIGFyZSBwcm9wZXJseSByZW5hbWVkLAogIyB0aGUgbGFzdCB0d28gb25lcyBjaGVjayBpZiB0aGUgY29uZmlnIGlzIHVwZGF0ZWQuCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBhIHJlbW90ZScgJwotCiAJZ2l0IGNsb25lIG9uZSBmb3VyICYmCi0JKGNkIGZvdXIgJiYKLQkgZ2l0IHJlbW90ZSByZW5hbWUgb3JpZ2luIHVwc3RyZWFtICYmCi0JIHJtZGlyIC5naXQvcmVmcy9yZW1vdGVzL29yaWdpbiAmJgotCSB0ZXN0ICIkKGdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL3Vwc3RyZWFtL0hFQUQpIiA9ICJyZWZzL3JlbW90ZXMvdXBzdHJlYW0vbWFzdGVyIiAmJgotCSB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgdXBzdHJlYW0vbWFzdGVyKSIgPSAiJChnaXQgcmV2LXBhcnNlIG1hc3RlcikiICYmCi0JIHRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUudXBzdHJlYW0uZmV0Y2gpIiA9ICIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy91cHN0cmVhbS8qIiAmJgotCSB0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUpIiA9ICJ1cHN0cmVhbSIpCi0KKwkoCisJCWNkIGZvdXIgJiYKKwkJZ2l0IHJlbW90ZSByZW5hbWUgb3JpZ2luIHVwc3RyZWFtICYmCisJCXJtZGlyIC5naXQvcmVmcy9yZW1vdGVzL29yaWdpbiAmJgorCQl0ZXN0ICIkKGdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL3Vwc3RyZWFtL0hFQUQpIiA9ICJyZWZzL3JlbW90ZXMvdXBzdHJlYW0vbWFzdGVyIiAmJgorCQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgdXBzdHJlYW0vbWFzdGVyKSIgPSAiJChnaXQgcmV2LXBhcnNlIG1hc3RlcikiICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUudXBzdHJlYW0uZmV0Y2gpIiA9ICIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy91cHN0cmVhbS8qIiAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUpIiA9ICJ1cHN0cmVhbSIKKwkpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBkb2VzIG5vdCB1cGRhdGUgYSBub24tZGVmYXVsdCBmZXRjaCByZWZzcGVjJyAnCi0KIAlnaXQgY2xvbmUgb25lIGZvdXIub25lICYmCi0JKGNkIGZvdXIub25lICYmCi0JIGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi5mZXRjaCArcmVmcy9oZWFkcy8qOnJlZnMvaGVhZHMvb3JpZ2luLyogJiYKLQkgZ2l0IHJlbW90ZSByZW5hbWUgb3JpZ2luIHVwc3RyZWFtICYmCi0JIHRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUudXBzdHJlYW0uZmV0Y2gpIiA9ICIrcmVmcy9oZWFkcy8qOnJlZnMvaGVhZHMvb3JpZ2luLyoiICYmCi0JIGdpdCByZXYtcGFyc2UgLXEgb3JpZ2luL21hc3RlcikKLQorCSgKKwkJY2QgZm91ci5vbmUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLmZldGNoICtyZWZzL2hlYWRzLyo6cmVmcy9oZWFkcy9vcmlnaW4vKiAmJgorCQlnaXQgcmVtb3RlIHJlbmFtZSBvcmlnaW4gdXBzdHJlYW0gJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS51cHN0cmVhbS5mZXRjaCkiID0gIityZWZzL2hlYWRzLyo6cmVmcy9oZWFkcy9vcmlnaW4vKiIgJiYKKwkJZ2l0IHJldi1wYXJzZSAtcSBvcmlnaW4vbWFzdGVyCisJKQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgYSByZW1vdGUgd2l0aCBuYW1lIHBhcnQgb2YgZmV0Y2ggc3BlYycgJwotCiAJZ2l0IGNsb25lIG9uZSBmb3VyLnR3byAmJgotCShjZCBmb3VyLnR3byAmJgotCSBnaXQgcmVtb3RlIHJlbmFtZSBvcmlnaW4gcmVtb3RlICYmCi0JIGdpdCByZW1vdGUgcmVuYW1lIHJlbW90ZSB1cHN0cmVhbSAmJgotCSB0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLnVwc3RyZWFtLmZldGNoKSIgPSAiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvdXBzdHJlYW0vKiIpCi0KKwkoCisJCWNkIGZvdXIudHdvICYmCisJCWdpdCByZW1vdGUgcmVuYW1lIG9yaWdpbiByZW1vdGUgJiYKKwkJZ2l0IHJlbW90ZSByZW5hbWUgcmVtb3RlIHVwc3RyZWFtICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUudXBzdHJlYW0uZmV0Y2gpIiA9ICIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy91cHN0cmVhbS8qIgorCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIGEgcmVtb3RlIHdpdGggbmFtZSBwcmVmaXggb2Ygb3RoZXIgcmVtb3RlJyAnCi0KIAlnaXQgY2xvbmUgb25lIGZvdXIudGhyZWUgJiYKLQkoY2QgZm91ci50aHJlZSAmJgotCSBnaXQgcmVtb3RlIGFkZCBvIGdpdDovL2V4YW1wbGUuY29tL3JlcG8uZ2l0ICYmCi0JIGdpdCByZW1vdGUgcmVuYW1lIG8gdXBzdHJlYW0gJiYKLQkgdGVzdCAiJChnaXQgcmV2LXBhcnNlIG9yaWdpbi9tYXN0ZXIpIiA9ICIkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSIpCi0KKwkoCisJCWNkIGZvdXIudGhyZWUgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgbyBnaXQ6Ly9leGFtcGxlLmNvbS9yZXBvLmdpdCAmJgorCQlnaXQgcmVtb3RlIHJlbmFtZSBvIHVwc3RyZWFtICYmCisJCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBvcmlnaW4vbWFzdGVyKSIgPSAiJChnaXQgcmV2LXBhcnNlIG1hc3RlcikiCisJKQogJwogCi1jYXQgPiByZW1vdGVzX29yaWdpbiA8PCBFT0YKK2NhdCA+cmVtb3Rlc19vcmlnaW4gPDxFT0YKIFVSTDogJChwd2QpL29uZQogUHVzaDogcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy91cHN0cmVhbQorUHVzaDogcmVmcy9oZWFkcy9uZXh0OnJlZnMvaGVhZHMvdXBzdHJlYW0yCiBQdWxsOiByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL29yaWdpbgorUHVsbDogcmVmcy9oZWFkcy9uZXh0OnJlZnMvaGVhZHMvb3JpZ2luMgogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pZ3JhdGUgYSByZW1vdGUgZnJvbSBuYW1lZCBmaWxlIGluICRHSVRfRElSL3JlbW90ZXMnICcKIAlnaXQgY2xvbmUgb25lIGZpdmUgJiYKIAlvcmlnaW5fdXJsPSQocHdkKS9vbmUgJiYKLQkoY2QgZml2ZSAmJgotCSBnaXQgcmVtb3RlIHJlbW92ZSBvcmlnaW4gJiYKLQkgbWtkaXIgLXAgLmdpdC9yZW1vdGVzICYmCi0JIGNhdCAuLi9yZW1vdGVzX29yaWdpbiA+IC5naXQvcmVtb3Rlcy9vcmlnaW4gJiYKLQkgZ2l0IHJlbW90ZSByZW5hbWUgb3JpZ2luIG9yaWdpbiAmJgotCSAhIHRlc3QgLWYgLmdpdC9yZW1vdGVzL29yaWdpbiAmJgotCSB0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIkb3JpZ2luX3VybCIgJiYKLQkgdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4ucHVzaCkiID0gInJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvdXBzdHJlYW0iICYmCi0JIHRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLmZldGNoKSIgPSAicmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9vcmlnaW4iKQorCSgKKwkJY2QgZml2ZSAmJgorCQlnaXQgcmVtb3RlIHJlbW92ZSBvcmlnaW4gJiYKKwkJbWtkaXIgLXAgLmdpdC9yZW1vdGVzICYmCisJCWNhdCAuLi9yZW1vdGVzX29yaWdpbiA+LmdpdC9yZW1vdGVzL29yaWdpbiAmJgorCQlnaXQgcmVtb3RlIHJlbmFtZSBvcmlnaW4gb3JpZ2luICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVtb3Rlcy9vcmlnaW4gJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAiJG9yaWdpbl91cmwiICYmCisJCWNhdCA+cHVzaF9leHBlY3RlZCA8PC1cRU9GICYmCisJCXJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvdXBzdHJlYW0KKwkJcmVmcy9oZWFkcy9uZXh0OnJlZnMvaGVhZHMvdXBzdHJlYW0yCisJCUVPRgorCQljYXQgPmZldGNoX2V4cGVjdGVkIDw8LVxFT0YgJiYKKwkJcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9vcmlnaW4KKwkJcmVmcy9oZWFkcy9uZXh0OnJlZnMvaGVhZHMvb3JpZ2luMgorCQlFT0YKKwkJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLm9yaWdpbi5wdXNoID5wdXNoX2FjdHVhbCAmJgorCQlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUub3JpZ2luLmZldGNoID5mZXRjaF9hY3R1YWwgJiYKKwkJdGVzdF9jbXAgcHVzaF9leHBlY3RlZCBwdXNoX2FjdHVhbCAmJgorCQl0ZXN0X2NtcCBmZXRjaF9leHBlY3RlZCBmZXRjaF9hY3R1YWwKKwkpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pZ3JhdGUgYSByZW1vdGUgZnJvbSBuYW1lZCBmaWxlIGluICRHSVRfRElSL2JyYW5jaGVzJyAnCiAJZ2l0IGNsb25lIG9uZSBzaXggJiYKIAlvcmlnaW5fdXJsPSQocHdkKS9vbmUgJiYKLQkoY2Qgc2l4ICYmCi0JIGdpdCByZW1vdGUgcm0gb3JpZ2luICYmCi0JIGVjaG8gIiRvcmlnaW5fdXJsIiA+IC5naXQvYnJhbmNoZXMvb3JpZ2luICYmCi0JIGdpdCByZW1vdGUgcmVuYW1lIG9yaWdpbiBvcmlnaW4gJiYKLQkgISB0ZXN0IC1mIC5naXQvYnJhbmNoZXMvb3JpZ2luICYmCi0JIHRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkiID0gIiRvcmlnaW5fdXJsIiAmJgotCSB0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi5mZXRjaCkiID0gInJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvb3JpZ2luIikKKwkoCisJCWNkIHNpeCAmJgorCQlnaXQgcmVtb3RlIHJtIG9yaWdpbiAmJgorCQllY2hvICIkb3JpZ2luX3VybCIgPi5naXQvYnJhbmNoZXMvb3JpZ2luICYmCisJCWdpdCByZW1vdGUgcmVuYW1lIG9yaWdpbiBvcmlnaW4gJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9icmFuY2hlcy9vcmlnaW4gJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAiJG9yaWdpbl91cmwiICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLmZldGNoKSIgPSAicmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9vcmlnaW4iICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnB1c2gpIiA9ICJIRUFEOnJlZnMvaGVhZHMvbWFzdGVyIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlncmF0ZSBhIHJlbW90ZSBmcm9tIG5hbWVkIGZpbGUgaW4gJEdJVF9ESVIvYnJhbmNoZXMgKDIpJyAnCisJZ2l0IGNsb25lIG9uZSBzZXZlbiAmJgorCSgKKwkJY2Qgc2V2ZW4gJiYKKwkJZ2l0IHJlbW90ZSBybSBvcmlnaW4gJiYKKwkJZWNobyAicXV1eCNmb29tIiA+IC5naXQvYnJhbmNoZXMvb3JpZ2luICYmCisJCWdpdCByZW1vdGUgcmVuYW1lIG9yaWdpbiBvcmlnaW4gJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9icmFuY2hlcy9vcmlnaW4gJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAicXV1eCIgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4uZmV0Y2gpIiA9ICJyZWZzL2hlYWRzL2Zvb206cmVmcy9oZWFkcy9vcmlnaW4iCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnB1c2gpIiA9ICJIRUFEOnJlZnMvaGVhZHMvZm9vbSIKKwkpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBwcnVuZSB0byBjYXVzZSBhIGRhbmdsaW5nIHN5bXJlZicgJwotCWdpdCBjbG9uZSBvbmUgc2V2ZW4gJiYKKwlnaXQgY2xvbmUgb25lIGVpZ2h0ICYmCiAJKAogCQljZCBvbmUgJiYKIAkJZ2l0IGNoZWNrb3V0IHNpZGUyICYmCiAJCWdpdCBicmFuY2ggLUQgbWFzdGVyCiAJKSAmJgogCSgKLQkJY2Qgc2V2ZW4gJiYKKwkJY2QgZWlnaHQgJiYKIAkJZ2l0IHJlbW90ZSBwcnVuZSBvcmlnaW4KIAkpID5lcnIgMj4mMSAmJgogCXRlc3RfaTE4bmdyZXAgImhhcyBiZWNvbWUgZGFuZ2xpbmciIGVyciAmJgogCiAJOiBBbmQgdGhlIGRhbmdsaW5nIHN5bXJlZiB3aWxsIG5vdCBjYXVzZSBvdGhlciBhbm5veWluZyBlcnJvcnMgJiYKIAkoCi0JCWNkIHNldmVuICYmCisJCWNkIGVpZ2h0ICYmCiAJCWdpdCBicmFuY2ggLWEKIAkpIDI+ZXJyICYmCiAJISBncmVwICJwb2ludHMgbm93aGVyZSIgZXJyICYmCiAJKAotCQljZCBzZXZlbiAmJgorCQljZCBlaWdodCAmJgogCQl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIG5vbW9yZSBvcmlnaW4KIAkpIDI+ZXJyICYmCiAJZ3JlcCAiZGFuZ2xpbmcgc3ltcmVmIiBlcnIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBlbXB0eSByZW1vdGUnICcKLQogCXRlc3RfY3JlYXRlX3JlcG8gZW1wdHkgJiYKIAlnaXQgY2xvbmUgZW1wdHkgZW1wdHktY2xvbmUgJiYKIAkoCmRpZmYgLS1naXQgYS90L3Q1NTEwLWZldGNoLnNoIGIvdC90NTUxMC1mZXRjaC5zaAppbmRleCBkN2ExOWExLi5mZGU2ODkxIDEwMDc1NQotLS0gYS90L3Q1NTEwLWZldGNoLnNoCisrKyBiL3QvdDU1MTAtZmV0Y2guc2gKQEAgLTM3MCwzMCArMzcwLDM5IEBACiAKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwbGljaXQgZmV0Y2ggc2hvdWxkIG5vdCB1cGRhdGUgdHJhY2tpbmcnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hcmsgaW5pdGlhbCBzdGF0ZSBvZiBvcmlnaW4vbWFzdGVyJyAnCisJKAorCQljZCB0aHJlZSAmJgorCQlnaXQgdGFnIGJhc2Utb3JpZ2luLW1hc3RlciByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwbGljaXQgZmV0Y2ggc2hvdWxkIHVwZGF0ZSB0cmFja2luZycgJwogCiAJY2QgIiREIiAmJgogCWdpdCBicmFuY2ggLWYgc2lkZSAmJgogCSgKIAkJY2QgdGhyZWUgJiYKKwkJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgYmFzZS1vcmlnaW4tbWFzdGVyICYmCiAJCW89JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKSAmJgogCQlnaXQgZmV0Y2ggb3JpZ2luIG1hc3RlciAmJgogCQluPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcikgJiYKLQkJdGVzdCAiJG8iID0gIiRuIiAmJgorCQl0ZXN0ICIkbyIgIT0gIiRuIiAmJgogCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZQogCSkKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwbGljaXQgcHVsbCBzaG91bGQgbm90IHVwZGF0ZSB0cmFja2luZycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwbGljaXQgcHVsbCBzaG91bGQgdXBkYXRlIHRyYWNraW5nJyAnCiAKIAljZCAiJEQiICYmCiAJZ2l0IGJyYW5jaCAtZiBzaWRlICYmCiAJKAogCQljZCB0aHJlZSAmJgorCQlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciBiYXNlLW9yaWdpbi1tYXN0ZXIgJiYKIAkJbz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCiAJCWdpdCBwdWxsIG9yaWdpbiBtYXN0ZXIgJiYKIAkJbj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCi0JCXRlc3QgIiRvIiA9ICIkbiIgJiYKKwkJdGVzdCAiJG8iICE9ICIkbiIgJiYKIAkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUKIAkpCiAnCkBAIC00MDQsNiArNDEzLDcgQEAKIAlnaXQgYnJhbmNoIC1mIHNpZGUgJiYKIAkoCiAJCWNkIHRocmVlICYmCisJCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIGJhc2Utb3JpZ2luLW1hc3RlciAmJgogCQlvPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcikgJiYKIAkJZ2l0IGZldGNoIG9yaWdpbiAmJgogCQluPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcikgJiYKQEAgLTQxMiw2ICs0MjIsMjIgQEAKIAkpCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1tYXRjaGluZyByZWZzcGVjcyBkbyBub3QgY29uZnVzZSB0cmFja2luZyB1cGRhdGUnICcKKwljZCAiJEQiICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9vZGQvbG9jYXRpb24gSEVBRCAmJgorCSgKKwkJY2QgdGhyZWUgJiYKKwkJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgYmFzZS1vcmlnaW4tbWFzdGVyICYmCisJCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLm9yaWdpbi5mZXRjaCBcCisJCQlyZWZzL29kZC9sb2NhdGlvbjpyZWZzL3JlbW90ZXMvb3JpZ2luL29kZCAmJgorCQlvPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcikgJiYKKwkJZ2l0IGZldGNoIG9yaWdpbiBtYXN0ZXIgJiYKKwkJbj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCisJCXRlc3QgIiRvIiAhPSAiJG4iICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9vZGQKKwkpCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2hpbmcgbm9uZXhpc3RlbnQgYnJhbmNoIGJ5IG1pc3Rha2Ugc2hvdWxkIG5vdCBzZWd2JyAnCiAKIAljZCAiJEQiICYmCmRpZmYgLS1naXQgYS90L3Q1NTIwLXB1bGwuc2ggYi90L3Q1NTIwLXB1bGwuc2gKaW5kZXggNmFmNmM2My4uZWQ0ZDljOCAxMDA3NTUKLS0tIGEvdC90NTUyMC1wdWxsLnNoCisrKyBiL3QvdDU1MjAtcHVsbC5zaApAQCAtNTcsNiArNTcsMzUgQEAKIAkpCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGxpbmcgaW50byB2b2lkIGRvZXMgbm90IG92ZXJ3cml0ZSBzdGFnZWQgZmlsZXMnICcKKwlnaXQgaW5pdCBjbG9uZWQtc3RhZ2VkLWNvbGxpZGluZyAmJgorCSgKKwkJY2QgY2xvbmVkLXN0YWdlZC1jb2xsaWRpbmcgJiYKKwkJZWNobyAiYWx0ZXJuYXRlIGNvbnRlbnQiID5maWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAuLiBtYXN0ZXIgJiYKKwkJZWNobyAiYWx0ZXJuYXRlIGNvbnRlbnQiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwkJZ2l0IGNhdC1maWxlIGJsb2IgOmZpbGUgPmZpbGUuaW5kZXggJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGZpbGUuaW5kZXgKKwkpCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZyBpbnRvIHZvaWQgZG9lcyBub3QgcmVtb3ZlIG5ldyBzdGFnZWQgZmlsZXMnICcKKwlnaXQgaW5pdCBjbG9uZWQtc3RhZ2VkLW5ldyAmJgorCSgKKwkJY2QgY2xvbmVkLXN0YWdlZC1uZXcgJiYKKwkJZWNobyAibmV3IHRyYWNrZWQgZmlsZSIgPm5ld2ZpbGUgJiYKKwkJZ2l0IGFkZCBuZXdmaWxlICYmCisJCWdpdCBwdWxsIC4uIG1hc3RlciAmJgorCQllY2hvICJuZXcgdHJhY2tlZCBmaWxlIiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBuZXdmaWxlICYmCisJCWdpdCBjYXQtZmlsZSBibG9iIDpuZXdmaWxlID5uZXdmaWxlLmluZGV4ICYmCisJCXRlc3RfY21wIGV4cGVjdCBuZXdmaWxlLmluZGV4CisJKQorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC4gYXMgYSByZW1vdGUnICcKIAogCWdpdCBicmFuY2ggY29weSBtYXN0ZXIgJiYKZGlmZiAtLWdpdCBhL3QvdDU1MjEtcHVsbC1vcHRpb25zLnNoIGIvdC90NTUyMS1wdWxsLW9wdGlvbnMuc2gKaW5kZXggYWEzMWFiZS4uNDUzYWJhNSAxMDA3NTUKLS0tIGEvdC90NTUyMS1wdWxsLW9wdGlvbnMuc2gKKysrIGIvdC90NTUyMS1wdWxsLW9wdGlvbnMuc2gKQEAgLTE1LDE5ICsxNSwxOSBAQAogCW1rZGlyIGNsb25lZHEgJiYKIAkoY2QgY2xvbmVkcSAmJiBnaXQgaW5pdCAmJgogCWdpdCBwdWxsIC1xICIuLi9wYXJlbnQiID5vdXQgMj5lcnIgJiYKLQl0ZXN0ICEgLXMgZXJyICYmCi0JdGVzdCAhIC1zIG91dCkKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLXEgLS1yZWJhc2UnICcKIAlta2RpciBjbG9uZWRxcmIgJiYKIAkoY2QgY2xvbmVkcXJiICYmIGdpdCBpbml0ICYmCiAJZ2l0IHB1bGwgLXEgLS1yZWJhc2UgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgotCXRlc3QgISAtcyBlcnIgJiYKLQl0ZXN0ICEgLXMgb3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQgJiYKIAlnaXQgcHVsbCAtcSAtLXJlYmFzZSAiLi4vcGFyZW50IiA+b3V0IDI+ZXJyICYmCi0JdGVzdCAhIC1zIGVyciAmJgotCXRlc3QgISAtcyBvdXQpCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsJyAnCkBAIC0zNSw3ICszNSw3IEBACiAJKGNkIGNsb25lZCAmJiBnaXQgaW5pdCAmJgogCWdpdCBwdWxsICIuLi9wYXJlbnQiID5vdXQgMj5lcnIgJiYKIAl0ZXN0IC1zIGVyciAmJgotCXRlc3QgISAtcyBvdXQpCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLS1yZWJhc2UnICcKQEAgLTQzLDcgKzQzLDcgQEAKIAkoY2QgY2xvbmVkcmIgJiYgZ2l0IGluaXQgJiYKIAlnaXQgcHVsbCAtLXJlYmFzZSAiLi4vcGFyZW50IiA+b3V0IDI+ZXJyICYmCiAJdGVzdCAtcyBlcnIgJiYKLQl0ZXN0ICEgLXMgb3V0KQorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIC12JyAnCkBAIC01MSw3ICs1MSw3IEBACiAJKGNkIGNsb25lZHYgJiYgZ2l0IGluaXQgJiYKIAlnaXQgcHVsbCAtdiAiLi4vcGFyZW50IiA+b3V0IDI+ZXJyICYmCiAJdGVzdCAtcyBlcnIgJiYKLQl0ZXN0ICEgLXMgb3V0KQorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIC12IC0tcmViYXNlJyAnCkBAIC01OSwyMiArNTksMjIgQEAKIAkoY2QgY2xvbmVkdnJiICYmIGdpdCBpbml0ICYmCiAJZ2l0IHB1bGwgLXYgLS1yZWJhc2UgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgogCXRlc3QgLXMgZXJyICYmCi0JdGVzdCAhIC1zIG91dCkKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0KQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtdiAtcScgJwogCW1rZGlyIGNsb25lZHZxICYmCiAJKGNkIGNsb25lZHZxICYmIGdpdCBpbml0ICYmCiAJZ2l0IHB1bGwgLXYgLXEgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgotCXRlc3QgISAtcyBvdXQgJiYKLQl0ZXN0ICEgLXMgZXJyKQorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyKQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtcSAtdicgJwogCW1rZGlyIGNsb25lZHF2ICYmCiAJKGNkIGNsb25lZHF2ICYmIGdpdCBpbml0ICYmCiAJZ2l0IHB1bGwgLXEgLXYgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgotCXRlc3QgISAtcyBvdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0ICYmCiAJdGVzdCAtcyBlcnIpCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDU1MjgtcHVzaC1kZWZhdWx0LnNoIGIvdC90NTUyOC1wdXNoLWRlZmF1bHQuc2gKaW5kZXggNDczNmRhOC4uNmE1YWMzYSAxMDA3NTUKLS0tIGEvdC90NTUyOC1wdXNoLWRlZmF1bHQuc2gKKysrIGIvdC90NTUyOC1wdXNoLWRlZmF1bHQuc2gKQEAgLTE1LDE3ICsxNSwxOSBAQAogCiAjICQxID0gbG9jYWwgcmV2aXNpb24KICMgJDIgPSByZW1vdGUgcmV2aXNpb24gKHRlc3RlZCB0byBiZSBlcXVhbCB0byB0aGUgbG9jYWwgb25lKQorIyAkMyA9IFtvcHRpb25hbF0gcmVwbyB0byBjaGVjayBmb3IgYWN0dWFsIG91dHB1dCAocmVwbzEgYnkgZGVmYXVsdCkKIGNoZWNrX3B1c2hlZF9jb21taXQgKCkgewogCWdpdCBsb2cgLTEgLS1mb3JtYXQ9JyVoICVzJyAiJDEiID5leHBlY3QgJiYKLQlnaXQgLS1naXQtZGlyPXJlcG8xIGxvZyAtMSAtLWZvcm1hdD0nJWggJXMnICIkMiIgPmFjdHVhbCAmJgorCWdpdCAtLWdpdC1kaXI9IiR7MzotcmVwbzF9IiBsb2cgLTEgLS1mb3JtYXQ9JyVoICVzJyAiJDIiID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiB9CiAKICMgJDEgPSBwdXNoLmRlZmF1bHQgdmFsdWUKICMgJDIgPSBleHBlY3RlZCB0YXJnZXQgYnJhbmNoIGZvciB0aGUgcHVzaAorIyAkMyA9IFtvcHRpb25hbF0gcmVwbyB0byBjaGVjayBmb3IgYWN0dWFsIG91dHB1dCAocmVwbzEgYnkgZGVmYXVsdCkKIHRlc3RfcHVzaF9zdWNjZXNzICgpIHsKIAlnaXQgLWMgcHVzaC5kZWZhdWx0PSIkMSIgcHVzaCAmJgotCWNoZWNrX3B1c2hlZF9jb21taXQgSEVBRCAiJDIiCisJY2hlY2tfcHVzaGVkX2NvbW1pdCBIRUFEICIkMiIgIiQzIgogfQogCiAjICQxID0gcHVzaC5kZWZhdWx0IHZhbHVlCkBAIC0zNyw2ICszOSwyNiBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKIH0KIAorIyAkMSA9IHN1Y2Nlc3Mgb3IgZmFpbHVyZQorIyAkMiA9IHB1c2guZGVmYXVsdCB2YWx1ZQorIyAkMyA9IGJyYW5jaCB0byBjaGVjayBmb3IgYWN0dWFsIG91dHB1dCAobWFzdGVyIG9yIGZvbykKKyMgJDQgPSBbb3B0aW9uYWxdIHN3aXRjaCB0byB0cmlhbmd1bGFyIHdvcmtmbG93Cit0ZXN0X3B1c2hkZWZhdWx0X3dvcmtmbG93ICgpIHsKKwl3b3JrZmxvdz1jZW50cmFsCisJcHVzaGRlZmF1bHQ9cGFyZW50MQorCWlmIHRlc3QgLW4gIiR7NC19IjsgdGhlbgorCQl3b3JrZmxvdz10cmlhbmd1bGFyCisJCXB1c2hkZWZhdWx0PXBhcmVudDIKKwlmaQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInB1c2guZGVmYXVsdCA9ICQyICQxIGluICR3b3JrZmxvdyB3b3JrZmxvd3MiICIKKwkJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgcGFyZW50MSAmJgorCQl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvZm9vICYmCisJCXRlc3RfY29uZmlnIHJlbW90ZS5wdXNoZGVmYXVsdCAkcHVzaGRlZmF1bHQgJiYKKwkJdGVzdF9jb21taXQgY29tbWl0LWZvci0kMiR7NCstdHJpYW5ndWxhcn0gJiYKKwkJdGVzdF9wdXNoXyQxICQyICQzICR7NCtyZXBvMn0KKwkiCit9CisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJ1cHN0cmVhbSIgcHVzaGVzIHRvIGNvbmZpZ3VyZWQgdXBzdHJlYW0nICcKIAlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCiAJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgcGFyZW50MSAmJgpAQCAtNDgsNyArNzAsNiBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnInVwc3RyZWFtIiBkb2VzIG5vdCBwdXNoIG9uIHVuY29uZmlndXJlZCByZW1vdGUnICcKIAlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCiAJdGVzdF91bmNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSAmJgotCXRlc3RfY29uZmlnIHB1c2guZGVmYXVsdCB1cHN0cmVhbSAmJgogCXRlc3RfY29tbWl0IHRocmVlICYmCiAJdGVzdF9wdXNoX2ZhaWx1cmUgdXBzdHJlYW0KICcKQEAgLTU3LDcgKzc4LDYgQEAKIAlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCiAJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgcGFyZW50MSAmJgogCXRlc3RfdW5jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSAmJgotCXRlc3RfY29uZmlnIHB1c2guZGVmYXVsdCB1cHN0cmVhbQogCXRlc3RfY29tbWl0IGZvdXIgJiYKIAl0ZXN0X3B1c2hfZmFpbHVyZSB1cHN0cmVhbQogJwpAQCAtMTE1LDQgKzEzNSw0MSBAQAogCXRlc3RfY21wIGV4cGVjdC1vdGhlci1uYW1lIGFjdHVhbC1vdGhlci1uYW1lCiAnCiAKKyMgV2UgYXJlIG9uICdtYXN0ZXInLCB3aGljaCBpbnRlZ3JhdGVzIHdpdGggJ2ZvbycgZnJvbSBwYXJlbnQxCisjIHJlbW90ZSAoc2V0IGluIHRlc3RfcHVzaGRlZmF1bHRfd29ya2Zsb3cgaGVscGVyKS4gIFB1c2ggdG8KKyMgcGFyZW50MSBpbiBjZW50cmFsaXplZCwgYW5kIHB1c2ggdG8gcGFyZW50MiBpbiB0cmlhbmd1bGFyIHdvcmtmbG93LgorIyBUaGUgcGFyZW50MSByZXBvc2l0b3J5IGhhcyAnbWFzdGVyJyBhbmQgJ2ZvbycgYnJhbmNoZXMsIHdoaWxlCisjIHRoZSBwYXJlbnQyIHJlcG9zaXRvcnkgaGFzIG9ubHkgJ21hc3RlcicgYnJhbmNoLgorIworIyB0ZXN0X3B1c2hkZWZhdWx0X3dvcmtmbG93KCkgYXJndW1lbnRzOgorIyAkMSA9IHN1Y2Nlc3Mgb3IgZmFpbHVyZQorIyAkMiA9IHB1c2guZGVmYXVsdCB2YWx1ZQorIyAkMyA9IGJyYW5jaCB0byBjaGVjayBmb3IgYWN0dWFsIG91dHB1dCAobWFzdGVyIG9yIGZvbykKKyMgJDQgPSBbb3B0aW9uYWxdIHN3aXRjaCB0byB0cmlhbmd1bGFyIHdvcmtmbG93CisKKyMgdXBkYXRlIHBhcmVudDEncyBtYXN0ZXIgKHdoaWNoIGlzIG5vdCBvdXIgdXBzdHJlYW0pCit0ZXN0X3B1c2hkZWZhdWx0X3dvcmtmbG93IHN1Y2Nlc3MgY3VycmVudCBtYXN0ZXIKKworIyB1cGRhdGUgcGFyZW50MSdzIGZvbyAod2hpY2ggaXMgb3VyIHVwc3RyZWFtKQordGVzdF9wdXNoZGVmYXVsdF93b3JrZmxvdyBzdWNjZXNzIHVwc3RyZWFtIGZvbworCisjIHVwc3JlYW0gaXMgZm9vIHdoaWNoIGlzIG5vdCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBicmFuY2gKK3Rlc3RfcHVzaGRlZmF1bHRfd29ya2Zsb3cgZmFpbHVyZSBzaW1wbGUgbWFzdGVyCisKKyMgbWFzdGVyIGFuZCBmb28gYXJlIHVwZGF0ZWQKK3Rlc3RfcHVzaGRlZmF1bHRfd29ya2Zsb3cgc3VjY2VzcyBtYXRjaGluZyBtYXN0ZXIKKworIyBtYXN0ZXIgaXMgdXBkYXRlZAordGVzdF9wdXNoZGVmYXVsdF93b3JrZmxvdyBzdWNjZXNzIGN1cnJlbnQgbWFzdGVyIHRyaWFuZ3VsYXIKKworIyB1cHN0cmVhbSBtb2RlIGNhbm5vdCBiZSB1c2VkIGluIHRyaWFuZ3VsYXIKK3Rlc3RfcHVzaGRlZmF1bHRfd29ya2Zsb3cgZmFpbHVyZSB1cHN0cmVhbSBmb28gdHJpYW5ndWxhcgorCisjIGluIHRyaWFuZ3VsYXIsICdzaW1wbGUnIHdvcmtzIGFzICdjdXJyZW50JyBhbmQgdXBkYXRlIHRoZSBicmFuY2gKKyMgd2l0aCB0aGUgc2FtZSBuYW1lLgordGVzdF9wdXNoZGVmYXVsdF93b3JrZmxvdyBzdWNjZXNzIHNpbXBsZSBtYXN0ZXIgdHJpYW5ndWxhcgorCisjIG1hc3RlciBpcyB1cGRhdGVkIChwYXJlbnQyIGRvZXMgbm90IGhhdmUgZm9vKQordGVzdF9wdXNoZGVmYXVsdF93b3JrZmxvdyBzdWNjZXNzIG1hdGNoaW5nIG1hc3RlciB0cmlhbmd1bGFyCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU1MS1odHRwLWZldGNoLnNoIGIvdC90NTU1MS1odHRwLWZldGNoLnNoCmluZGV4IGIyM2VmYmIuLjU1YTg2NmEgMTAwNzU1Ci0tLSBhL3QvdDU1NTEtaHR0cC1mZXRjaC5zaAorKysgYi90L3Q1NTUxLWh0dHAtZmV0Y2guc2gKQEAgLTIwOSwxMyArMjA5LDE3IEBACiAKIAkjIG5vdyBhc3NpZ24gdGFncyB0byBhbGwgdGhlIGRhbmdsaW5nIGNvbW1pdHMgd2UgY3JlYXRlZCBhYm92ZQogCXRhZz0kKCIkUEVSTF9QQVRIIiAtZSAicHJpbnQgXCJibGFcIiB4IDMwIikgJiYKLQlzZWQgLWUgInMvXjpcKC5cK1wpIFwoLlwrXCkkL1wyIHJlZnNcL3RhZ3NcLyR0YWctXDEvIiA8bWFya3MgPj5wYWNrZWQtcmVmcworCXNlZCAtZSAic3xeOlwoW14gXSpcKSBcKC4qXCkkfFwyIHJlZnMvdGFncy8kdGFnLVwxfCIgPG1hcmtzID4+cGFja2VkLXJlZnMKIAkpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgRVhQRU5TSVZFICdjbG9uZSB0aGUgNTAsMDAwIHRhZyByZXBvIHRvIGNoZWNrIE9TIGNvbW1hbmQgbGluZSBvdmVyZmxvdycgJwogCWdpdCBjbG9uZSAkSFRUUERfVVJML3NtYXJ0L3JlcG8uZ2l0IHRvby1tYW55LXJlZnMgMj5lcnIgJiYKLQl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorCXRlc3RfbGluZV9jb3VudCA9IDAgZXJyICYmCisJKAorCQljZCB0b28tbWFueS1yZWZzICYmCisJCXRlc3QgJChnaXQgZm9yLWVhY2gtcmVmIHJlZnMvdGFncyB8IHdjIC1sKSA9IDUwMDAwCisJKQogJwogCiBzdG9wX2h0dHBkCmRpZmYgLS1naXQgYS90L3Q1NTYwLWh0dHAtYmFja2VuZC1ub3NlcnZlci5zaCBiL3QvdDU1NjAtaHR0cC1iYWNrZW5kLW5vc2VydmVyLnNoCmluZGV4IGVmOThkOTUuLjliZTlhZTMgMTAwNzU1Ci0tLSBhL3QvdDU1NjAtaHR0cC1iYWNrZW5kLW5vc2VydmVyLnNoCisrKyBiL3QvdDU1NjAtaHR0cC1iYWNrZW5kLW5vc2VydmVyLnNoCkBAIC01LDcgKzUsNyBAQAogCiBIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEg9IiRUUkFTSF9ESVJFQ1RPUlkiCiAKLXRlc3RfaGF2ZV9wcmVyZXEgTUlOR1cgJiYgZXhwb3J0IEdSRVBfT1BUSU9OUz0tVQordGVzdF9oYXZlX3ByZXJlcSBHUkVQX1NUUklQU19DUiAmJiBleHBvcnQgR1JFUF9PUFRJT05TPS1VCiAKIHJ1bl9iYWNrZW5kKCkgewogCWVjaG8gIiQyIiB8CmRpZmYgLS1naXQgYS90L3Q1NjAxLWNsb25lLnNoIGIvdC90NTYwMS1jbG9uZS5zaAppbmRleCA2Nzg2OWI0Li4wNjI5MTQ5IDEwMDc1NQotLS0gYS90L3Q1NjAxLWNsb25lLnNoCisrKyBiL3QvdDU2MDEtY2xvbmUuc2gKQEAgLTI4MCw0ICsyODAsOSBAQAogCXRlc3RfY21wIGZldGNoLmV4cGVjdGVkIGZldGNoLmFjdHVhbAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE5PVF9NSU5HVyxOT1RfQ1lHV0lOICdjbG9uZSBsb2NhbCBwYXRoIGZvbzpiYXInICcKKwljcCAtUiBzcmMgImZvbzpiYXIiICYmCisJZ2l0IGNsb25lICIuL2ZvbzpiYXIiIGZvb2JhcgorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU3MDItY2xvbmUtb3B0aW9ucy5zaCBiL3QvdDU3MDItY2xvbmUtb3B0aW9ucy5zaAppbmRleCAwMmNiMDI0Li44NWNhZGZhIDEwMDc1NQotLS0gYS90L3Q1NzAyLWNsb25lLW9wdGlvbnMuc2gKKysrIGIvdC90NTcwMi1jbG9uZS1vcHRpb25zLnNoCkBAIC0yMiw3ICsyMiw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWRpcmVjdGVkIGNsb25lJyAnCiAKIAlnaXQgY2xvbmUgImZpbGU6Ly8kKHB3ZCkvcGFyZW50IiBjbG9uZS1yZWRpcmVjdGVkID5vdXQgMj5lcnIgJiYKLQl0ZXN0ICEgLXMgZXJyCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycgogCiAnCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWRpcmVjdGVkIGNsb25lIC12JyAnCmRpZmYgLS1naXQgYS90L3Q1NzEwLWluZm8tYWx0ZXJuYXRlLnNoIGIvdC90NTcxMC1pbmZvLWFsdGVybmF0ZS5zaAppbmRleCA4OTU2YzIxLi41YTZlNDlkIDEwMDc1NQotLS0gYS90L3Q1NzEwLWluZm8tYWx0ZXJuYXRlLnNoCisrKyBiL3QvdDU3MTAtaW5mby1hbHRlcm5hdGUuc2gKQEAgLTU4LDcgKzU4LDEzIEBACiBnaXQgY2xvbmUgLWwgLXMgRCBFICYmCiBnaXQgY2xvbmUgLWwgLXMgRSBGICYmCiBnaXQgY2xvbmUgLWwgLXMgRiBHICYmCi10ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1iYXJlIC1sIC1zIEcgSCcKK2dpdCBjbG9uZSAtLWJhcmUgLWwgLXMgRyBIJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkaXR5IG9mIGRlZXBlc3QgcmVwb3NpdG9yeScgXAorJ2NkIEggJiYgeworCXRlc3RfdmFsaWRfcmVwbworCXRlc3QgJD8gLW5lIDAKK30nCiAKIGNkICIkYmFzZV9kaXIiCiAKZGlmZiAtLWdpdCBhL3QvdDU4MDEtcmVtb3RlLWhlbHBlcnMuc2ggYi90L3Q1ODAxLXJlbW90ZS1oZWxwZXJzLnNoCmluZGV4IGRiYjAyZTIuLjhjNGM1MzkgMTAwNzU1Ci0tLSBhL3QvdDU4MDEtcmVtb3RlLWhlbHBlcnMuc2gKKysrIGIvdC90NTgwMS1yZW1vdGUtaGVscGVycy5zaApAQCAtOCwxMSArOCw2IEBACiAuIC4vdGVzdC1saWIuc2gKIC4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWdwZy5zaAogCi1pZiAhIHR5cGUgIiR7QkFTSC1iYXNofSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0Jc2tpcF9hbGw9J3NraXBwaW5nIHJlbW90ZS10ZXN0Z2l0IHRlc3RzLCBiYXNoIG5vdCBhdmFpbGFibGUnCi0JdGVzdF9kb25lCi1maQotCiBjb21wYXJlX3JlZnMoKSB7CiAJZ2l0IC0tZ2l0LWRpcj0iJDEvLmdpdCIgcmV2LXBhcnNlIC0tdmVyaWZ5ICQyID5leHBlY3QgJiYKIAlnaXQgLS1naXQtZGlyPSIkMy8uZ2l0IiByZXYtcGFyc2UgLS12ZXJpZnkgJDQgPmFjdHVhbCAmJgpAQCAtMTAxLDM5ICs5NiwyOCBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIHdpdGhvdXQgcmVmc3BlYycgJwogCUdJVF9SRU1PVEVfVEVTVEdJVF9SRUZTUEVDPSIiIFwKLQlnaXQgY2xvbmUgInRlc3RnaXQ6OiR7UFdEfS9zZXJ2ZXIiIGxvY2FsMiAmJgorCWdpdCBjbG9uZSAidGVzdGdpdDo6JHtQV0R9L3NlcnZlciIgbG9jYWwyIDI+ZXJyb3IgJiYKKwlncmVwICJUaGlzIHJlbW90ZSBoZWxwZXIgc2hvdWxkIGltcGxlbWVudCByZWZzcGVjIGNhcGFiaWxpdHkiIGVycm9yICYmCiAJY29tcGFyZV9yZWZzIGxvY2FsMiBIRUFEIHNlcnZlciBIRUFECiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGxpbmcgd2l0aG91dCByZWZzcGVjcycgJwogCShjZCBsb2NhbDIgJiYKIAlnaXQgcmVzZXQgLS1oYXJkICYmCi0JR0lUX1JFTU9URV9URVNUR0lUX1JFRlNQRUM9IiIgZ2l0IHB1bGwpICYmCisJR0lUX1JFTU9URV9URVNUR0lUX1JFRlNQRUM9IiIgZ2l0IHB1bGwgMj4uLi9lcnJvcikgJiYKKwlncmVwICJUaGlzIHJlbW90ZSBoZWxwZXIgc2hvdWxkIGltcGxlbWVudCByZWZzcGVjIGNhcGFiaWxpdHkiIGVycm9yICYmCiAJY29tcGFyZV9yZWZzIGxvY2FsMiBIRUFEIHNlcnZlciBIRUFECiAnCiAKLXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ3B1c2hpbmcgd2l0aG91dCByZWZzcGVjcycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaGluZyB3aXRob3V0IHJlZnNwZWNzJyAnCiAJdGVzdF93aGVuX2ZpbmlzaGVkICIoY2QgbG9jYWwyICYmIGdpdCByZXNldCAtLWhhcmQgb3JpZ2luKSIgJiYKIAkoY2QgbG9jYWwyICYmCiAJZWNobyBjb250ZW50ID4+ZmlsZSAmJgogCWdpdCBjb21taXQgLWEgLW0gdGVuICYmCi0JR0lUX1JFTU9URV9URVNUR0lUX1JFRlNQRUM9IiIgZ2l0IHB1c2gpICYmCi0JY29tcGFyZV9yZWZzIGxvY2FsMiBIRUFEIHNlcnZlciBIRUFECi0nCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGxpbmcgd2l0aCBzdHJhaWdodCByZWZzcGVjJyAnCi0JKGNkIGxvY2FsMiAmJgotCUdJVF9SRU1PVEVfVEVTVEdJVF9SRUZTUEVDPSIqOioiIGdpdCBwdWxsKSAmJgotCWNvbXBhcmVfcmVmcyBsb2NhbDIgSEVBRCBzZXJ2ZXIgSEVBRAotJwotCi10ZXN0X2V4cGVjdF9mYWlsdXJlICdwdXNoaW5nIHdpdGggc3RyYWlnaHQgcmVmc3BlYycgJwotCXRlc3Rfd2hlbl9maW5pc2hlZCAiKGNkIGxvY2FsMiAmJiBnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbikiICYmCi0JKGNkIGxvY2FsMiAmJgotCWVjaG8gY29udGVudCA+PmZpbGUgJiYKLQlnaXQgY29tbWl0IC1hIC1tIGVsZXZlbiAmJgotCUdJVF9SRU1PVEVfVEVTVEdJVF9SRUZTUEVDPSIqOioiIGdpdCBwdXNoKSAmJgotCWNvbXBhcmVfcmVmcyBsb2NhbDIgSEVBRCBzZXJ2ZXIgSEVBRAorCUdJVF9SRU1PVEVfVEVTVEdJVF9SRUZTUEVDPSIiICYmCisJZXhwb3J0IEdJVF9SRU1PVEVfVEVTVEdJVF9SRUZTUEVDICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggMj4uLi9lcnJvcikgJiYKKwlncmVwICJyZW1vdGUtaGVscGVyIGRvZXNuLnQgc3VwcG9ydCBwdXNoOyByZWZzcGVjIG5lZWRlZCIgZXJyb3IKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZyB3aXRob3V0IG1hcmtzJyAnCkBAIC0xODYsNiArMTcwLDUwIEBACiAJY29tcGFyZV9yZWZzIGxvY2FsIHNpZ25lZC10YWctMiBzZXJ2ZXIgc2lnbmVkLXRhZy0yCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdXBkYXRlIHJlZnMnICcKKwkoY2QgbG9jYWwgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdXBkYXRlIG1hc3RlciAmJgorCWVjaG8gdXBkYXRlID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdXBkYXRlICYmCisJZ2l0IHB1c2ggb3JpZ2luIHVwZGF0ZSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVtb3Rlcy9vcmlnaW4vdXBkYXRlID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRlc3RnaXQvb3JpZ2luL2hlYWRzL3VwZGF0ZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB1cGRhdGUgcmVmcyBmYWlsdXJlJyAnCisJKGNkIGxvY2FsICYmCisJZ2l0IGNoZWNrb3V0IHVwZGF0ZSAmJgorCWVjaG8gInVwZGF0ZSBmYWlsIiA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJ1cGRhdGUgZmFpbCIgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRlc3RnaXQvb3JpZ2luL2hlYWRzL3VwZGF0ZSA+ZXhwZWN0ICYmCisJR0lUX1JFTU9URV9URVNUR0lUX1BVU0hfRVJST1I9Im5vbi1mYXN0IGZvcndhcmQiICYmCisJZXhwb3J0IEdJVF9SRU1PVEVfVEVTVEdJVF9QVVNIX0VSUk9SICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwdXNoIG9yaWdpbiB1cGRhdGUgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRlc3RnaXQvb3JpZ2luL2hlYWRzL3VwZGF0ZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvcGVyIGZhaWx1cmUgY2hlY2tzIGZvciBmZXRjaGluZycgJworCShHSVRfUkVNT1RFX1RFU1RHSVRfRkFJTFVSRT0xICYmCisJZXhwb3J0IEdJVF9SRU1PVEVfVEVTVEdJVF9GQUlMVVJFICYmCisJY2QgbG9jYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggMj4gZXJyb3IgJiYKKwljYXQgZXJyb3IgJiYKKwlncmVwIC1xICJFcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtaW1wb3J0IiBlcnJvcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvcGVyIGZhaWx1cmUgY2hlY2tzIGZvciBwdXNoaW5nJyAnCisJKEdJVF9SRU1PVEVfVEVTVEdJVF9GQUlMVVJFPTEgJiYKKwlleHBvcnQgR0lUX1JFTU9URV9URVNUR0lUX0ZBSUxVUkUgJiYKKwljZCBsb2NhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tYWxsCisJKQorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG1lc3NhZ2VzJyAnCiAJKGNkIGxvY2FsICYmCiAJZ2l0IGNoZWNrb3V0IC1iIG5ld19icmFuY2ggbWFzdGVyICYmCmRpZmYgLS1naXQgYS90L3Q2MDAyLXJldi1saXN0LWJpc2VjdC5zaCBiL3QvdDYwMDItcmV2LWxpc3QtYmlzZWN0LnNoCmluZGV4IGZiMDc1MzYuLjQzYWQ3NzIgMTAwNzU1Ci0tLSBhL3QvdDYwMDItcmV2LWxpc3QtYmlzZWN0LnNoCisrKyBiL3QvdDYwMDItcmV2LWxpc3QtYmlzZWN0LnNoCkBAIC0zOSwyNSArMzksMjUgQEAKIGRhdGUgPnBhdGgwCiBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgwCiBzYXZlX3RhZyB0cmVlIGdpdCB3cml0ZS10cmVlCi1vbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowMCIgaGlkZV9lcnJvciBzYXZlX3RhZyByb290IHVuaXF1ZV9jb21taXQgcm9vdCB0cmVlCi1vbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowMSIgc2F2ZV90YWcgbDAgdW5pcXVlX2NvbW1pdCBsMCB0cmVlIC1wIHJvb3QKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjAyIiBzYXZlX3RhZyBsMSB1bmlxdWVfY29tbWl0IGwxIHRyZWUgLXAgbDAKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjAzIiBzYXZlX3RhZyBsMiB1bmlxdWVfY29tbWl0IGwyIHRyZWUgLXAgbDEKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjA0IiBzYXZlX3RhZyBhMCB1bmlxdWVfY29tbWl0IGEwIHRyZWUgLXAgbDIKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjA1IiBzYXZlX3RhZyBhMSB1bmlxdWVfY29tbWl0IGExIHRyZWUgLXAgYTAKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjA2IiBzYXZlX3RhZyBiMSB1bmlxdWVfY29tbWl0IGIxIHRyZWUgLXAgYTAKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjA3IiBzYXZlX3RhZyBjMSB1bmlxdWVfY29tbWl0IGMxIHRyZWUgLXAgYjEKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjA4IiBzYXZlX3RhZyBiMiB1bmlxdWVfY29tbWl0IGIyIHRyZWUgLXAgYjEKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjA5IiBzYXZlX3RhZyBiMyB1bmlxdWVfY29tbWl0IGIyIHRyZWUgLXAgYjIKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjEwIiBzYXZlX3RhZyBjMiB1bmlxdWVfY29tbWl0IGMyIHRyZWUgLXAgYzEgLXAgYjIKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjExIiBzYXZlX3RhZyBjMyB1bmlxdWVfY29tbWl0IGMzIHRyZWUgLXAgYzIKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjEyIiBzYXZlX3RhZyBhMiB1bmlxdWVfY29tbWl0IGEyIHRyZWUgLXAgYTEKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjEzIiBzYXZlX3RhZyBhMyB1bmlxdWVfY29tbWl0IGEzIHRyZWUgLXAgYTIKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjE0IiBzYXZlX3RhZyBiNCB1bmlxdWVfY29tbWl0IGI0IHRyZWUgLXAgYjMgLXAgYTMKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjE1IiBzYXZlX3RhZyBhNCB1bmlxdWVfY29tbWl0IGE0IHRyZWUgLXAgYTMgLXAgYjQgLXAgYzMKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjE2IiBzYXZlX3RhZyBsMyB1bmlxdWVfY29tbWl0IGwzIHRyZWUgLXAgYTQKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjE3IiBzYXZlX3RhZyBsNCB1bmlxdWVfY29tbWl0IGw0IHRyZWUgLXAgbDMKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjE4IiBzYXZlX3RhZyBsNSB1bmlxdWVfY29tbWl0IGw1IHRyZWUgLXAgbDQKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowMCIgaGlkZV9lcnJvciBzYXZlX3RhZyByb290IHVuaXF1ZV9jb21taXQgcm9vdCB0cmVlCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDEiIHNhdmVfdGFnIGwwIHVuaXF1ZV9jb21taXQgbDAgdHJlZSAtcCByb290Citvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDIiIHNhdmVfdGFnIGwxIHVuaXF1ZV9jb21taXQgbDEgdHJlZSAtcCBsMAorb25fY29tbWl0dGVyX2RhdGUgIjAwOjAzIiBzYXZlX3RhZyBsMiB1bmlxdWVfY29tbWl0IGwyIHRyZWUgLXAgbDEKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowNCIgc2F2ZV90YWcgYTAgdW5pcXVlX2NvbW1pdCBhMCB0cmVlIC1wIGwyCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDUiIHNhdmVfdGFnIGExIHVuaXF1ZV9jb21taXQgYTEgdHJlZSAtcCBhMAorb25fY29tbWl0dGVyX2RhdGUgIjAwOjA2IiBzYXZlX3RhZyBiMSB1bmlxdWVfY29tbWl0IGIxIHRyZWUgLXAgYTAKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowNyIgc2F2ZV90YWcgYzEgdW5pcXVlX2NvbW1pdCBjMSB0cmVlIC1wIGIxCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDgiIHNhdmVfdGFnIGIyIHVuaXF1ZV9jb21taXQgYjIgdHJlZSAtcCBiMQorb25fY29tbWl0dGVyX2RhdGUgIjAwOjA5IiBzYXZlX3RhZyBiMyB1bmlxdWVfY29tbWl0IGIyIHRyZWUgLXAgYjIKK29uX2NvbW1pdHRlcl9kYXRlICIwMDoxMCIgc2F2ZV90YWcgYzIgdW5pcXVlX2NvbW1pdCBjMiB0cmVlIC1wIGMxIC1wIGIyCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MTEiIHNhdmVfdGFnIGMzIHVuaXF1ZV9jb21taXQgYzMgdHJlZSAtcCBjMgorb25fY29tbWl0dGVyX2RhdGUgIjAwOjEyIiBzYXZlX3RhZyBhMiB1bmlxdWVfY29tbWl0IGEyIHRyZWUgLXAgYTEKK29uX2NvbW1pdHRlcl9kYXRlICIwMDoxMyIgc2F2ZV90YWcgYTMgdW5pcXVlX2NvbW1pdCBhMyB0cmVlIC1wIGEyCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MTQiIHNhdmVfdGFnIGI0IHVuaXF1ZV9jb21taXQgYjQgdHJlZSAtcCBiMyAtcCBhMworb25fY29tbWl0dGVyX2RhdGUgIjAwOjE1IiBzYXZlX3RhZyBhNCB1bmlxdWVfY29tbWl0IGE0IHRyZWUgLXAgYTMgLXAgYjQgLXAgYzMKK29uX2NvbW1pdHRlcl9kYXRlICIwMDoxNiIgc2F2ZV90YWcgbDMgdW5pcXVlX2NvbW1pdCBsMyB0cmVlIC1wIGE0Citvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MTciIHNhdmVfdGFnIGw0IHVuaXF1ZV9jb21taXQgbDQgdHJlZSAtcCBsMworb25fY29tbWl0dGVyX2RhdGUgIjAwOjE4IiBzYXZlX3RhZyBsNSB1bmlxdWVfY29tbWl0IGw1IHRyZWUgLXAgbDQKIGdpdCB1cGRhdGUtcmVmIEhFQUQgJCh0YWcgbDUpCiAKIApAQCAtOTAsMjkgKzkwLDI5IEBACiAjICAgICBGCiAKIAotb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDAiIGhpZGVfZXJyb3Igc2F2ZV90YWcgRiB1bmlxdWVfY29tbWl0IEYgdHJlZQotb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDEiIHNhdmVfdGFnIGU4IHVuaXF1ZV9jb21taXQgZTggdHJlZSAtcCBGCi1vbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowMiIgc2F2ZV90YWcgZTcgdW5pcXVlX2NvbW1pdCBlNyB0cmVlIC1wIGU4Ci1vbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowMyIgc2F2ZV90YWcgZTYgdW5pcXVlX2NvbW1pdCBlNiB0cmVlIC1wIGU3Ci1vbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowNCIgc2F2ZV90YWcgZTUgdW5pcXVlX2NvbW1pdCBlNSB0cmVlIC1wIGU2Ci1vbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowNSIgc2F2ZV90YWcgZjQgdW5pcXVlX2NvbW1pdCBmNCB0cmVlIC1wIEYKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjA2IiBzYXZlX3RhZyBmMyB1bmlxdWVfY29tbWl0IGYzIHRyZWUgLXAgZjQKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjA3IiBzYXZlX3RhZyBmMiB1bmlxdWVfY29tbWl0IGYyIHRyZWUgLXAgZjMKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjA4IiBzYXZlX3RhZyBmMSB1bmlxdWVfY29tbWl0IGYxIHRyZWUgLXAgZjIKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjA5IiBzYXZlX3RhZyBlNCB1bmlxdWVfY29tbWl0IGU0IHRyZWUgLXAgZTUKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjEwIiBzYXZlX3RhZyBlMyB1bmlxdWVfY29tbWl0IGUzIHRyZWUgLXAgZTQKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjExIiBzYXZlX3RhZyBlMiB1bmlxdWVfY29tbWl0IGUyIHRyZWUgLXAgZTMKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjEyIiBzYXZlX3RhZyBlMSB1bmlxdWVfY29tbWl0IGUxIHRyZWUgLXAgZTIKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjEzIiBzYXZlX3RhZyBFIHVuaXF1ZV9jb21taXQgRSB0cmVlIC1wIGUxIC1wIGYxCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDAiIGhpZGVfZXJyb3Igc2F2ZV90YWcgRiB1bmlxdWVfY29tbWl0IEYgdHJlZQorb25fY29tbWl0dGVyX2RhdGUgIjAwOjAxIiBzYXZlX3RhZyBlOCB1bmlxdWVfY29tbWl0IGU4IHRyZWUgLXAgRgorb25fY29tbWl0dGVyX2RhdGUgIjAwOjAyIiBzYXZlX3RhZyBlNyB1bmlxdWVfY29tbWl0IGU3IHRyZWUgLXAgZTgKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowMyIgc2F2ZV90YWcgZTYgdW5pcXVlX2NvbW1pdCBlNiB0cmVlIC1wIGU3Citvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDQiIHNhdmVfdGFnIGU1IHVuaXF1ZV9jb21taXQgZTUgdHJlZSAtcCBlNgorb25fY29tbWl0dGVyX2RhdGUgIjAwOjA1IiBzYXZlX3RhZyBmNCB1bmlxdWVfY29tbWl0IGY0IHRyZWUgLXAgRgorb25fY29tbWl0dGVyX2RhdGUgIjAwOjA2IiBzYXZlX3RhZyBmMyB1bmlxdWVfY29tbWl0IGYzIHRyZWUgLXAgZjQKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowNyIgc2F2ZV90YWcgZjIgdW5pcXVlX2NvbW1pdCBmMiB0cmVlIC1wIGYzCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDgiIHNhdmVfdGFnIGYxIHVuaXF1ZV9jb21taXQgZjEgdHJlZSAtcCBmMgorb25fY29tbWl0dGVyX2RhdGUgIjAwOjA5IiBzYXZlX3RhZyBlNCB1bmlxdWVfY29tbWl0IGU0IHRyZWUgLXAgZTUKK29uX2NvbW1pdHRlcl9kYXRlICIwMDoxMCIgc2F2ZV90YWcgZTMgdW5pcXVlX2NvbW1pdCBlMyB0cmVlIC1wIGU0Citvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MTEiIHNhdmVfdGFnIGUyIHVuaXF1ZV9jb21taXQgZTIgdHJlZSAtcCBlMworb25fY29tbWl0dGVyX2RhdGUgIjAwOjEyIiBzYXZlX3RhZyBlMSB1bmlxdWVfY29tbWl0IGUxIHRyZWUgLXAgZTIKK29uX2NvbW1pdHRlcl9kYXRlICIwMDoxMyIgc2F2ZV90YWcgRSB1bmlxdWVfY29tbWl0IEUgdHJlZSAtcCBlMSAtcCBmMQogCi1vbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowMCIgaGlkZV9lcnJvciBzYXZlX3RhZyBVIHVuaXF1ZV9jb21taXQgVSB0cmVlCi1vbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowMSIgc2F2ZV90YWcgdTAgdW5pcXVlX2NvbW1pdCB1MCB0cmVlIC1wIFUKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjAxIiBzYXZlX3RhZyB1MSB1bmlxdWVfY29tbWl0IHUxIHRyZWUgLXAgdTAKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjAyIiBzYXZlX3RhZyB1MiB1bmlxdWVfY29tbWl0IHUyIHRyZWUgLXAgdTAKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjAzIiBzYXZlX3RhZyB1MyB1bmlxdWVfY29tbWl0IHUzIHRyZWUgLXAgdTAKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjA0IiBzYXZlX3RhZyB1NCB1bmlxdWVfY29tbWl0IHU0IHRyZWUgLXAgdTAKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjA1IiBzYXZlX3RhZyB1NSB1bmlxdWVfY29tbWl0IHU1IHRyZWUgLXAgdTAKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjA2IiBzYXZlX3RhZyBWIHVuaXF1ZV9jb21taXQgViB0cmVlIC1wIHUxIC1wIHUyIC1wIHUzIC1wIHU0IC1wIHU1Citvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDAiIGhpZGVfZXJyb3Igc2F2ZV90YWcgVSB1bmlxdWVfY29tbWl0IFUgdHJlZQorb25fY29tbWl0dGVyX2RhdGUgIjAwOjAxIiBzYXZlX3RhZyB1MCB1bmlxdWVfY29tbWl0IHUwIHRyZWUgLXAgVQorb25fY29tbWl0dGVyX2RhdGUgIjAwOjAxIiBzYXZlX3RhZyB1MSB1bmlxdWVfY29tbWl0IHUxIHRyZWUgLXAgdTAKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowMiIgc2F2ZV90YWcgdTIgdW5pcXVlX2NvbW1pdCB1MiB0cmVlIC1wIHUwCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDMiIHNhdmVfdGFnIHUzIHVuaXF1ZV9jb21taXQgdTMgdHJlZSAtcCB1MAorb25fY29tbWl0dGVyX2RhdGUgIjAwOjA0IiBzYXZlX3RhZyB1NCB1bmlxdWVfY29tbWl0IHU0IHRyZWUgLXAgdTAKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowNSIgc2F2ZV90YWcgdTUgdW5pcXVlX2NvbW1pdCB1NSB0cmVlIC1wIHUwCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDYiIHNhdmVfdGFnIFYgdW5pcXVlX2NvbW1pdCBWIHRyZWUgLXAgdTEgLXAgdTIgLXAgdTMgLXAgdTQgLXAgdTUKIAogdGVzdF9zZXF1ZW5jZSgpCiB7CmRpZmYgLS1naXQgYS90L3Q2MDAzLXJldi1saXN0LXRvcG8tb3JkZXIuc2ggYi90L3Q2MDAzLXJldi1saXN0LXRvcG8tb3JkZXIuc2gKaW5kZXggZTRjNTJiMC4uMjRkMTgzNiAxMDA3NTUKLS0tIGEvdC90NjAwMy1yZXYtbGlzdC10b3BvLW9yZGVyLnNoCisrKyBiL3QvdDYwMDMtcmV2LWxpc3QtdG9wby1vcmRlci5zaApAQCAtMTYsMzkgKzE2LDM0IEBACiBkYXRlID5wYXRoMAogZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMAogc2F2ZV90YWcgdHJlZSBnaXQgd3JpdGUtdHJlZQotb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDAiIGhpZGVfZXJyb3Igc2F2ZV90YWcgcm9vdCB1bmlxdWVfY29tbWl0IHJvb3QgdHJlZQotb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDEiIHNhdmVfdGFnIGwwIHVuaXF1ZV9jb21taXQgbDAgdHJlZSAtcCByb290Ci1vbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowMiIgc2F2ZV90YWcgbDEgdW5pcXVlX2NvbW1pdCBsMSB0cmVlIC1wIGwwCi1vbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowMyIgc2F2ZV90YWcgbDIgdW5pcXVlX2NvbW1pdCBsMiB0cmVlIC1wIGwxCi1vbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowNCIgc2F2ZV90YWcgYTAgdW5pcXVlX2NvbW1pdCBhMCB0cmVlIC1wIGwyCi1vbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowNSIgc2F2ZV90YWcgYTEgdW5pcXVlX2NvbW1pdCBhMSB0cmVlIC1wIGEwCi1vbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowNiIgc2F2ZV90YWcgYjEgdW5pcXVlX2NvbW1pdCBiMSB0cmVlIC1wIGEwCi1vbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowNyIgc2F2ZV90YWcgYzEgdW5pcXVlX2NvbW1pdCBjMSB0cmVlIC1wIGIxCi1vbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowOCIgYXNfYXV0aG9yIGZvb2JhckBleGFtcGxlLmNvbSBzYXZlX3RhZyBiMiB1bmlxdWVfY29tbWl0IGIyIHRyZWUgLXAgYjEKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjA5IiBzYXZlX3RhZyBiMyB1bmlxdWVfY29tbWl0IGIzIHRyZWUgLXAgYjIKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjEwIiBzYXZlX3RhZyBjMiB1bmlxdWVfY29tbWl0IGMyIHRyZWUgLXAgYzEgLXAgYjIKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjExIiBzYXZlX3RhZyBjMyB1bmlxdWVfY29tbWl0IGMzIHRyZWUgLXAgYzIKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjEyIiBzYXZlX3RhZyBhMiB1bmlxdWVfY29tbWl0IGEyIHRyZWUgLXAgYTEKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjEzIiBzYXZlX3RhZyBhMyB1bmlxdWVfY29tbWl0IGEzIHRyZWUgLXAgYTIKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjE0IiBzYXZlX3RhZyBiNCB1bmlxdWVfY29tbWl0IGI0IHRyZWUgLXAgYjMgLXAgYTMKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjE1IiBzYXZlX3RhZyBhNCB1bmlxdWVfY29tbWl0IGE0IHRyZWUgLXAgYTMgLXAgYjQgLXAgYzMKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjE2IiBzYXZlX3RhZyBsMyB1bmlxdWVfY29tbWl0IGwzIHRyZWUgLXAgYTQKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjE3IiBzYXZlX3RhZyBsNCB1bmlxdWVfY29tbWl0IGw0IHRyZWUgLXAgbDMKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjE4IiBzYXZlX3RhZyBsNSB1bmlxdWVfY29tbWl0IGw1IHRyZWUgLXAgbDQKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjE5IiBzYXZlX3RhZyBtMSB1bmlxdWVfY29tbWl0IG0xIHRyZWUgLXAgYTQgLXAgYzMKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjIwIiBzYXZlX3RhZyBtMiB1bmlxdWVfY29tbWl0IG0yIHRyZWUgLXAgYzMgLXAgYTQKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjIxIiBoaWRlX2Vycm9yIHNhdmVfdGFnIGFsdF9yb290IHVuaXF1ZV9jb21taXQgYWx0X3Jvb3QgdHJlZQotb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MjIiIHNhdmVfdGFnIHIwIHVuaXF1ZV9jb21taXQgcjAgdHJlZSAtcCBhbHRfcm9vdAotb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MjMiIHNhdmVfdGFnIHIxIHVuaXF1ZV9jb21taXQgcjEgdHJlZSAtcCByMAotb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MjQiIHNhdmVfdGFnIGw1cjEgdW5pcXVlX2NvbW1pdCBsNXIxIHRyZWUgLXAgbDUgLXAgcjEKLW9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjI1IiBzYXZlX3RhZyByMWw1IHVuaXF1ZV9jb21taXQgcjFsNSB0cmVlIC1wIHIxIC1wIGw1Citvbl9kYXRlcyAiMDA6MDAiICIwMDowMCIgaGlkZV9lcnJvciBzYXZlX3RhZyByb290IHVuaXF1ZV9jb21taXQgcm9vdCB0cmVlCitvbl9kYXRlcyAiMDA6MDEiICIwMDowMSIgc2F2ZV90YWcgbDAgdW5pcXVlX2NvbW1pdCBsMCB0cmVlIC1wIHJvb3QKK29uX2RhdGVzICIwMDowMiIgIjAwOjAyIiBzYXZlX3RhZyBsMSB1bmlxdWVfY29tbWl0IGwxIHRyZWUgLXAgbDAKK29uX2RhdGVzICIwMDowMyIgIjAwOjAzIiBzYXZlX3RhZyBsMiB1bmlxdWVfY29tbWl0IGwyIHRyZWUgLXAgbDEKK29uX2RhdGVzICIwMDowNCIgIjAwOjA0IiBzYXZlX3RhZyBhMCB1bmlxdWVfY29tbWl0IGEwIHRyZWUgLXAgbDIKK29uX2RhdGVzICIwMDowNSIgIjAwOjA1IiBzYXZlX3RhZyBhMSB1bmlxdWVfY29tbWl0IGExIHRyZWUgLXAgYTAKK29uX2RhdGVzICIwMDowNiIgIjAwOjA2IiBzYXZlX3RhZyBiMSB1bmlxdWVfY29tbWl0IGIxIHRyZWUgLXAgYTAKK29uX2RhdGVzICIwMDowNyIgIjAwOjA3IiBzYXZlX3RhZyBjMSB1bmlxdWVfY29tbWl0IGMxIHRyZWUgLXAgYjEKK29uX2RhdGVzICIwMDowOCIgIjAwOjA4IiBhc19hdXRob3IgZm9vYmFyQGV4YW1wbGUuY29tIHNhdmVfdGFnIGIyIHVuaXF1ZV9jb21taXQgYjIgdHJlZSAtcCBiMQorb25fZGF0ZXMgIjAwOjA5IiAiMDA6MDkiIHNhdmVfdGFnIGIzIHVuaXF1ZV9jb21taXQgYjMgdHJlZSAtcCBiMgorb25fZGF0ZXMgIjAwOjEwIiAiMDA6MTAiIHNhdmVfdGFnIGMyIHVuaXF1ZV9jb21taXQgYzIgdHJlZSAtcCBjMSAtcCBiMgorb25fZGF0ZXMgIjAwOjExIiAiMDA6MTEiIHNhdmVfdGFnIGMzIHVuaXF1ZV9jb21taXQgYzMgdHJlZSAtcCBjMgorb25fZGF0ZXMgIjAwOjEyIiAiMDA6MDAiIHNhdmVfdGFnIGEyIHVuaXF1ZV9jb21taXQgYTIgdHJlZSAtcCBhMQorb25fZGF0ZXMgIjAwOjEzIiAiMDA6MDEiIHNhdmVfdGFnIGEzIHVuaXF1ZV9jb21taXQgYTMgdHJlZSAtcCBhMgorb25fZGF0ZXMgIjAwOjE0IiAiMDA6MTQiIHNhdmVfdGFnIGI0IHVuaXF1ZV9jb21taXQgYjQgdHJlZSAtcCBiMyAtcCBhMworb25fZGF0ZXMgIjAwOjE1IiAiMDA6MTUiIHNhdmVfdGFnIGE0IHVuaXF1ZV9jb21taXQgYTQgdHJlZSAtcCBhMyAtcCBiNCAtcCBjMworb25fZGF0ZXMgIjAwOjE2IiAiMDA6MTYiIHNhdmVfdGFnIGwzIHVuaXF1ZV9jb21taXQgbDMgdHJlZSAtcCBhNAorb25fZGF0ZXMgIjAwOjE3IiAiMDA6MTciIHNhdmVfdGFnIGw0IHVuaXF1ZV9jb21taXQgbDQgdHJlZSAtcCBsMworb25fZGF0ZXMgIjAwOjE4IiAiMDA6MTgiIHNhdmVfdGFnIGw1IHVuaXF1ZV9jb21taXQgbDUgdHJlZSAtcCBsNAorb25fZGF0ZXMgIjAwOjE5IiAiMDA6MTkiIHNhdmVfdGFnIG0xIHVuaXF1ZV9jb21taXQgbTEgdHJlZSAtcCBhNCAtcCBjMworb25fZGF0ZXMgIjAwOjIwIiAiMDA6MjAiIHNhdmVfdGFnIG0yIHVuaXF1ZV9jb21taXQgbTIgdHJlZSAtcCBjMyAtcCBhNAorb25fZGF0ZXMgIjAwOjIxIiAiMDA6MjEiIGhpZGVfZXJyb3Igc2F2ZV90YWcgYWx0X3Jvb3QgdW5pcXVlX2NvbW1pdCBhbHRfcm9vdCB0cmVlCitvbl9kYXRlcyAiMDA6MjIiICIwMDoyMiIgc2F2ZV90YWcgcjAgdW5pcXVlX2NvbW1pdCByMCB0cmVlIC1wIGFsdF9yb290Citvbl9kYXRlcyAiMDA6MjMiICIwMDoyMyIgc2F2ZV90YWcgcjEgdW5pcXVlX2NvbW1pdCByMSB0cmVlIC1wIHIwCitvbl9kYXRlcyAiMDA6MjQiICIwMDoyNCIgc2F2ZV90YWcgbDVyMSB1bmlxdWVfY29tbWl0IGw1cjEgdHJlZSAtcCBsNSAtcCByMQorb25fZGF0ZXMgIjAwOjI1IiAiMDA6MjUiIHNhdmVfdGFnIHIxbDUgdW5pcXVlX2NvbW1pdCByMWw1IHRyZWUgLXAgcjEgLXAgbDUKIAogCi0jCi0jIG5vdGU6IGFzIG9mIDIwLzYsIGl0IGlzbid0IHBvc3NpYmxlIHRvIGNyZWF0ZSBkdXBsaWNhdGUgcGFyZW50cywgc28gdGhpcwotIyBjYW4ndCBiZSB0ZXN0ZWQuCi0jCi0jb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MjAiIHNhdmVfdGFnIG0zIHVuaXF1ZV9jb21taXQgbTMgdHJlZSAtcCBjMyAtcCBhNCAtcCBjMwogaGlkZV9lcnJvciBzYXZlX3RhZyBlMSBhc19hdXRob3IgZUBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGUxIHRyZWUKIHNhdmVfdGFnIGUyIGFzX2F1dGhvciBlQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZTIgdHJlZSAtcCBlMQogc2F2ZV90YWcgZjEgYXNfYXV0aG9yIGZAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBmMSB0cmVlIC1wIGUxCkBAIC0xMDUsNiArMTAwLDUwIEBACiByb290CiBFT0YKIAordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSBkYXRlIG9yZGVyJyAnZ2l0IHJldi1saXN0IC0tZGF0ZS1vcmRlciAgSEVBRCcgPDxFT0YKK2w1CitsNAorbDMKK2E0CitiNAorYTMKK2EyCitjMworYzIKK2IzCitiMgorYzEKK2IxCithMQorYTAKK2wyCitsMQorbDAKK3Jvb3QKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnc2ltcGxlIGF1dGhvci1kYXRlIG9yZGVyJyAnZ2l0IHJldi1saXN0IC0tYXV0aG9yLWRhdGUtb3JkZXIgIEhFQUQnIDw8RU9GCitsNQorbDQKK2wzCithNAorYjQKK2MzCitjMgorYjMKK2IyCitjMQorYjEKK2EzCithMgorYTEKK2EwCitsMgorbDEKK2wwCityb290CitFT0YKKwogdGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ3R3byBkaWFtb25kcyB0b3BvIG9yZGVyIChnNiknICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICBnNCcgPDxFT0YKIGc0CiBoMgpkaWZmIC0tZ2l0IGEvdC90NjAwNi1yZXYtbGlzdC1mb3JtYXQuc2ggYi90L3Q2MDA2LXJldi1saXN0LWZvcm1hdC5zaAppbmRleCAwMzkzYzlmLi45ODc0NDAzIDEwMDc1NQotLS0gYS90L3Q2MDA2LXJldi1saXN0LWZvcm1hdC5zaAorKysgYi90L3Q2MDA2LXJldi1saXN0LWZvcm1hdC5zaApAQCAtMSwyMCArMSw0NSBAQAogIyEvYmluL3NoCiAKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEplbnMgTGVobWFubgorIyBDb3B5cmlnaHQgKGMpIDIwMTEgQWxleGV5IFNodW1raW4gKCsgbm9uLVVURi04IGNvbW1pdCBlbmNvZGluZyB0ZXN0cykKKwogdGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJldi1saXN0IC0tcHJldHR5PWZvcm1hdCB0ZXN0JwogCiAuIC4vdGVzdC1saWIuc2gKIC4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXRlcm1pbmFsLnNoCiAKIHRlc3RfdGljaworIyBTdHJpbmcgImFkZGVkIiBpbiBHZXJtYW4KKyMgKHRyYW5zbGF0ZWQgd2l0aCBHb29nbGUgVHJhbnNsYXRlKSwKKyMgZW5jb2RlZCBpbiBVVEYtOCwgdXNlZCBhcyBhIGNvbW1pdCBsb2cgbWVzc2FnZSBiZWxvdy4KK2FkZGVkPSQocHJpbnRmICJhZGRlZCAoaGluenVnZWZcMzAzXDI3NGd0KSBmb28iKQorYWRkZWRfaXNvODg1OTE9JChlY2hvICIkYWRkZWQiIHwgaWNvbnYgLWYgdXRmLTggLXQgaXNvODg1OS0xKQorIyBzYW1lIGJ1dCAiY2hhbmdlZCIKK2NoYW5nZWQ9JChwcmludGYgImNoYW5nZWQgKGdlXDMwM1wyNDRuZGVydCkgZm9vIikKK2NoYW5nZWRfaXNvODg1OTE9JChlY2hvICIkY2hhbmdlZCIgfCBpY29udiAtZiB1dGYtOCAtdCBpc284ODU5LTEpCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCi10b3VjaCBmb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSAiYWRkZWQgZm9vIiAmJgotICBlY2hvIGNoYW5nZWQgPmZvbyAmJiBnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2VkIGZvbyIKKwk6ID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRFbmNvZGluZyBpc284ODU5LTEgJiYKKwlnaXQgY29tbWl0IC1tICIkYWRkZWRfaXNvODg1OTEiICYmCisJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJaGVhZDFfc2hvcnQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tc2hvcnQgJGhlYWQxKSAmJgorCXRyZWUxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOikgJiYKKwl0cmVlMV9zaG9ydD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1zaG9ydCAkdHJlZTEpICYmCisJZWNobyAiJGNoYW5nZWQiID4gZm9vICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiJGNoYW5nZWRfaXNvODg1OTEiICYmCisJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJaGVhZDJfc2hvcnQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tc2hvcnQgJGhlYWQyKSAmJgorCXRyZWUyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOikgJiYKKwl0cmVlMl9zaG9ydD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1zaG9ydCAkdHJlZTIpCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGkxOG4uY29tbWl0RW5jb2RpbmcKICcKIAotIyB1c2FnZTogdGVzdF9mb3JtYXQgbmFtZSBmb3JtYXRfc3RyaW5nIDxleHBlY3RlZF9vdXRwdXQKKyMgdXNhZ2U6IHRlc3RfZm9ybWF0IG5hbWUgZm9ybWF0X3N0cmluZyBbZmFpbHVyZV0gPGV4cGVjdGVkX291dHB1dAogdGVzdF9mb3JtYXQgKCkgewogCWNhdCA+ZXhwZWN0LiQxCi0JdGVzdF9leHBlY3Rfc3VjY2VzcyAiZm9ybWF0ICQxIiAiCisJdGVzdF9leHBlY3RfJHszOi1zdWNjZXNzfSAiZm9ybWF0ICQxIiAiCiAJCWdpdCByZXYtbGlzdCAtLXByZXR0eT1mb3JtYXQ6JyQyJyBtYXN0ZXIgPm91dHB1dC4kMSAmJgogCQl0ZXN0X2NtcCBleHBlY3QuJDEgb3V0cHV0LiQxCiAJIgpAQCAtMzIsNDkgKzU3LDQ5IEBACiAJdGVzdF9jbXAgZXhwZWN0ICIkMSIKIH0KIAotdGVzdF9mb3JtYXQgcGVyY2VudCAlJWggPDwnRU9GJwotY29tbWl0IDEzMWEzMTBlYjkxM2QxMDdkZDNjMDlhNjVkMTY1MTE3NTg5ODczNWQKK3Rlc3RfZm9ybWF0IHBlcmNlbnQgJSVoIDw8RU9GCitjb21taXQgJGhlYWQyCiAlaAotY29tbWl0IDg2Yzc1Y2ZkNzA4YTBlNTg2OGRjODc2ZWQ1YjhiYjY2YzgwYjQ4NzMKK2NvbW1pdCAkaGVhZDEKICVoCiBFT0YKIAotdGVzdF9mb3JtYXQgaGFzaCAlSCVuJWggPDwnRU9GJwotY29tbWl0IDEzMWEzMTBlYjkxM2QxMDdkZDNjMDlhNjVkMTY1MTE3NTg5ODczNWQKLTEzMWEzMTBlYjkxM2QxMDdkZDNjMDlhNjVkMTY1MTE3NTg5ODczNWQKLTEzMWEzMTAKLWNvbW1pdCA4NmM3NWNmZDcwOGEwZTU4NjhkYzg3NmVkNWI4YmI2NmM4MGI0ODczCi04NmM3NWNmZDcwOGEwZTU4NjhkYzg3NmVkNWI4YmI2NmM4MGI0ODczCi04NmM3NWNmCit0ZXN0X2Zvcm1hdCBoYXNoICVIJW4laCA8PEVPRgorY29tbWl0ICRoZWFkMgorJGhlYWQyCiskaGVhZDJfc2hvcnQKK2NvbW1pdCAkaGVhZDEKKyRoZWFkMQorJGhlYWQxX3Nob3J0CiBFT0YKIAotdGVzdF9mb3JtYXQgdHJlZSAlVCVuJXQgPDwnRU9GJwotY29tbWl0IDEzMWEzMTBlYjkxM2QxMDdkZDNjMDlhNjVkMTY1MTE3NTg5ODczNWQKLWZlNzIyNjEyZjI2ZGE1MDY0YzMyY2EzODQzYWExNTRiZGIwYjA4YTAKLWZlNzIyNjEKLWNvbW1pdCA4NmM3NWNmZDcwOGEwZTU4NjhkYzg3NmVkNWI4YmI2NmM4MGI0ODczCi00ZDVmY2FkYzI5M2EzNDhlODhmNzc3ZGMwOTIwZjExZTdkNzE0NDFjCi00ZDVmY2FkCit0ZXN0X2Zvcm1hdCB0cmVlICVUJW4ldCA8PEVPRgorY29tbWl0ICRoZWFkMgorJHRyZWUyCiskdHJlZTJfc2hvcnQKK2NvbW1pdCAkaGVhZDEKKyR0cmVlMQorJHRyZWUxX3Nob3J0CiBFT0YKIAotdGVzdF9mb3JtYXQgcGFyZW50cyAlUCVuJXAgPDwnRU9GJwotY29tbWl0IDEzMWEzMTBlYjkxM2QxMDdkZDNjMDlhNjVkMTY1MTE3NTg5ODczNWQKLTg2Yzc1Y2ZkNzA4YTBlNTg2OGRjODc2ZWQ1YjhiYjY2YzgwYjQ4NzMKLTg2Yzc1Y2YKLWNvbW1pdCA4NmM3NWNmZDcwOGEwZTU4NjhkYzg3NmVkNWI4YmI2NmM4MGI0ODczCit0ZXN0X2Zvcm1hdCBwYXJlbnRzICVQJW4lcCA8PEVPRgorY29tbWl0ICRoZWFkMgorJGhlYWQxCiskaGVhZDFfc2hvcnQKK2NvbW1pdCAkaGVhZDEKIAogCiBFT0YKIAogIyB3ZSBkb24ndCB0ZXN0IHJlbGF0aXZlIGhlcmUKLXRlc3RfZm9ybWF0IGF1dGhvciAlYW4lbiVhZSVuJWFkJW4lYUQlbiVhdCA8PCdFT0YnCi1jb21taXQgMTMxYTMxMGViOTEzZDEwN2RkM2MwOWE2NWQxNjUxMTc1ODk4NzM1ZAordGVzdF9mb3JtYXQgYXV0aG9yICVhbiVuJWFlJW4lYWQlbiVhRCVuJWF0IDw8RU9GCitjb21taXQgJGhlYWQyCiBBIFUgVGhvcgogYXV0aG9yQGV4YW1wbGUuY29tCiBUaHUgQXByIDcgMTU6MTM6MTMgMjAwNSAtMDcwMAogVGh1LCA3IEFwciAyMDA1IDE1OjEzOjEzIC0wNzAwCiAxMTEyOTExOTkzCi1jb21taXQgODZjNzVjZmQ3MDhhMGU1ODY4ZGM4NzZlZDViOGJiNjZjODBiNDg3MworY29tbWl0ICRoZWFkMQogQSBVIFRob3IKIGF1dGhvckBleGFtcGxlLmNvbQogVGh1IEFwciA3IDE1OjEzOjEzIDIwMDUgLTA3MDAKQEAgLTgyLDE0ICsxMDcsMTQgQEAKIDExMTI5MTE5OTMKIEVPRgogCi10ZXN0X2Zvcm1hdCBjb21taXR0ZXIgJWNuJW4lY2UlbiVjZCVuJWNEJW4lY3QgPDwnRU9GJwotY29tbWl0IDEzMWEzMTBlYjkxM2QxMDdkZDNjMDlhNjVkMTY1MTE3NTg5ODczNWQKK3Rlc3RfZm9ybWF0IGNvbW1pdHRlciAlY24lbiVjZSVuJWNkJW4lY0QlbiVjdCA8PEVPRgorY29tbWl0ICRoZWFkMgogQyBPIE1pdHRlcgogY29tbWl0dGVyQGV4YW1wbGUuY29tCiBUaHUgQXByIDcgMTU6MTM6MTMgMjAwNSAtMDcwMAogVGh1LCA3IEFwciAyMDA1IDE1OjEzOjEzIC0wNzAwCiAxMTEyOTExOTkzCi1jb21taXQgODZjNzVjZmQ3MDhhMGU1ODY4ZGM4NzZlZDViOGJiNjZjODBiNDg3MworY29tbWl0ICRoZWFkMQogQyBPIE1pdHRlcgogY29tbWl0dGVyQGV4YW1wbGUuY29tCiBUaHUgQXByIDcgMTU6MTM6MTMgMjAwNSAtMDcwMApAQCAtOTcsNDMgKzEyMiw0NSBAQAogMTExMjkxMTk5MwogRU9GCiAKLXRlc3RfZm9ybWF0IGVuY29kaW5nICVlIDw8J0VPRicKLWNvbW1pdCAxMzFhMzEwZWI5MTNkMTA3ZGQzYzA5YTY1ZDE2NTExNzU4OTg3MzVkCi1jb21taXQgODZjNzVjZmQ3MDhhMGU1ODY4ZGM4NzZlZDViOGJiNjZjODBiNDg3MwordGVzdF9mb3JtYXQgZW5jb2RpbmcgJWUgPDxFT0YKK2NvbW1pdCAkaGVhZDIKK2lzbzg4NTktMQorY29tbWl0ICRoZWFkMQoraXNvODg1OS0xCiBFT0YKIAotdGVzdF9mb3JtYXQgc3ViamVjdCAlcyA8PCdFT0YnCi1jb21taXQgMTMxYTMxMGViOTEzZDEwN2RkM2MwOWE2NWQxNjUxMTc1ODk4NzM1ZAotY2hhbmdlZCBmb28KLWNvbW1pdCA4NmM3NWNmZDcwOGEwZTU4NjhkYzg3NmVkNWI4YmI2NmM4MGI0ODczCi1hZGRlZCBmb28KK3Rlc3RfZm9ybWF0IHN1YmplY3QgJXMgPDxFT0YKK2NvbW1pdCAkaGVhZDIKKyRjaGFuZ2VkCitjb21taXQgJGhlYWQxCiskYWRkZWQKIEVPRgogCi10ZXN0X2Zvcm1hdCBib2R5ICViIDw8J0VPRicKLWNvbW1pdCAxMzFhMzEwZWI5MTNkMTA3ZGQzYzA5YTY1ZDE2NTExNzU4OTg3MzVkCi1jb21taXQgODZjNzVjZmQ3MDhhMGU1ODY4ZGM4NzZlZDViOGJiNjZjODBiNDg3MwordGVzdF9mb3JtYXQgYm9keSAlYiA8PEVPRgorY29tbWl0ICRoZWFkMgorY29tbWl0ICRoZWFkMQogRU9GCiAKLXRlc3RfZm9ybWF0IHJhdy1ib2R5ICVCIDw8J0VPRicKLWNvbW1pdCAxMzFhMzEwZWI5MTNkMTA3ZGQzYzA5YTY1ZDE2NTExNzU4OTg3MzVkCi1jaGFuZ2VkIGZvbwordGVzdF9mb3JtYXQgcmF3LWJvZHkgJUIgPDxFT0YKK2NvbW1pdCAkaGVhZDIKKyRjaGFuZ2VkCiAKLWNvbW1pdCA4NmM3NWNmZDcwOGEwZTU4NjhkYzg3NmVkNWI4YmI2NmM4MGI0ODczCi1hZGRlZCBmb28KK2NvbW1pdCAkaGVhZDEKKyRhZGRlZAogCiBFT0YKIAotdGVzdF9mb3JtYXQgY29sb3JzICVDcmVkZm9vJUNncmVlbmJhciVDYmx1ZWJheiVDcmVzZXR4eXp6eSA8PCdFT0YnCi1jb21taXQgMTMxYTMxMGViOTEzZDEwN2RkM2MwOWE2NWQxNjUxMTc1ODk4NzM1ZAordGVzdF9mb3JtYXQgY29sb3JzICVDcmVkZm9vJUNncmVlbmJhciVDYmx1ZWJheiVDcmVzZXR4eXp6eSA8PEVPRgorY29tbWl0ICRoZWFkMgogG1szMW1mb28bWzMybWJhchtbMzRtYmF6G1tteHl6enkKLWNvbW1pdCA4NmM3NWNmZDcwOGEwZTU4NjhkYzg3NmVkNWI4YmI2NmM4MGI0ODczCitjb21taXQgJGhlYWQxCiAbWzMxbWZvbxtbMzJtYmFyG1szNG1iYXobW214eXp6eQogRU9GCiAKLXRlc3RfZm9ybWF0IGFkdmFuY2VkLWNvbG9ycyAnJUMocmVkIHllbGxvdyBib2xkKWZvbyVDKHJlc2V0KScgPDwnRU9GJwotY29tbWl0IDEzMWEzMTBlYjkxM2QxMDdkZDNjMDlhNjVkMTY1MTE3NTg5ODczNWQKK3Rlc3RfZm9ybWF0IGFkdmFuY2VkLWNvbG9ycyAnJUMocmVkIHllbGxvdyBib2xkKWZvbyVDKHJlc2V0KScgPDxFT0YKK2NvbW1pdCAkaGVhZDIKIBtbMTszMTs0M21mb28bW20KLWNvbW1pdCA4NmM3NWNmZDcwOGEwZTU4NjhkYzg3NmVkNWI4YmI2NmM4MGI0ODczCitjb21taXQgJGhlYWQxCiAbWzE7MzE7NDNtZm9vG1ttCiBFT0YKIApAQCAtMTc5LDQ2ICsyMDYsNzEgQEAKIAkpCiAnCiAKLWNhdCA+Y29tbWl0LW1zZyA8PCdFT0YnCitpY29udiAtZiB1dGYtOCAtdCBpc284ODU5LTEgPiBjb21taXQtbXNnIDw8RU9GCiBUZXN0IHByaW50aW5nIG9mIGNvbXBsZXggYm9kaWVzCiAKIFRoaXMgY29tbWl0IG1lc3NhZ2UgaXMgbXVjaCBsb25nZXIgdGhhbiB0aGUgb3RoZXJzLAogYW5kIGl0IHdpbGwgYmUgZW5jb2RlZCBpbiBpc284ODU5LTEuIFdlIHNob3VsZCB0aGVyZWZvcmUKLWluY2x1ZGUgYW4gaXNvODg1OSBjaGFyYWN0ZXI6IKFidWVubyEKK2luY2x1ZGUgYW4gaXNvODg1OSBjaGFyYWN0ZXI6IMKhYnVlbm8hCiBFT0YKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY29tcGxleCBib2R5JyAnCi1naXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgaXNvODg1OS0xICYmCi0gIGVjaG8gY2hhbmdlMiA+Zm9vICYmIGdpdCBjb21taXQgLWEgLUYgY29tbWl0LW1zZworCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBpc284ODU5LTEgJiYKKwllY2hvIGNoYW5nZTIgPmZvbyAmJiBnaXQgY29tbWl0IC1hIC1GIGNvbW1pdC1tc2cgJiYKKwloZWFkMz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwloZWFkM19zaG9ydD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkaGVhZDMpCiAnCiAKLXRlc3RfZm9ybWF0IGNvbXBsZXgtZW5jb2RpbmcgJWUgPDwnRU9GJwotY29tbWl0IDFlZDg4ZGE0YTViNWVkOGM0NDkxMTRhYzEzMWVmYzYyMTc4NzM0YzMKK3Rlc3RfZm9ybWF0IGNvbXBsZXgtZW5jb2RpbmcgJWUgPDxFT0YKK2NvbW1pdCAkaGVhZDMKIGlzbzg4NTktMQotY29tbWl0IDEzMWEzMTBlYjkxM2QxMDdkZDNjMDlhNjVkMTY1MTE3NTg5ODczNWQKLWNvbW1pdCA4NmM3NWNmZDcwOGEwZTU4NjhkYzg3NmVkNWI4YmI2NmM4MGI0ODczCitjb21taXQgJGhlYWQyCitpc284ODU5LTEKK2NvbW1pdCAkaGVhZDEKK2lzbzg4NTktMQogRU9GCiAKLXRlc3RfZm9ybWF0IGNvbXBsZXgtc3ViamVjdCAlcyA8PCdFT0YnCi1jb21taXQgMWVkODhkYTRhNWI1ZWQ4YzQ0OTExNGFjMTMxZWZjNjIxNzg3MzRjMwordGVzdF9mb3JtYXQgY29tcGxleC1zdWJqZWN0ICVzIDw8RU9GCitjb21taXQgJGhlYWQzCiBUZXN0IHByaW50aW5nIG9mIGNvbXBsZXggYm9kaWVzCi1jb21taXQgMTMxYTMxMGViOTEzZDEwN2RkM2MwOWE2NWQxNjUxMTc1ODk4NzM1ZAotY2hhbmdlZCBmb28KLWNvbW1pdCA4NmM3NWNmZDcwOGEwZTU4NjhkYzg3NmVkNWI4YmI2NmM4MGI0ODczCi1hZGRlZCBmb28KK2NvbW1pdCAkaGVhZDIKKyRjaGFuZ2VkX2lzbzg4NTkxCitjb21taXQgJGhlYWQxCiskYWRkZWRfaXNvODg1OTEKIEVPRgogCi10ZXN0X2Zvcm1hdCBjb21wbGV4LWJvZHkgJWIgPDwnRU9GJwotY29tbWl0IDFlZDg4ZGE0YTViNWVkOGM0NDkxMTRhYzEzMWVmYzYyMTc4NzM0YzMKLVRoaXMgY29tbWl0IG1lc3NhZ2UgaXMgbXVjaCBsb25nZXIgdGhhbiB0aGUgb3RoZXJzLAotYW5kIGl0IHdpbGwgYmUgZW5jb2RlZCBpbiBpc284ODU5LTEuIFdlIHNob3VsZCB0aGVyZWZvcmUKLWluY2x1ZGUgYW4gaXNvODg1OSBjaGFyYWN0ZXI6IKFidWVubyEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZXhwZWN0ZWQgbWVzc2FnZXMgKGZvciB0ZXN0ICViKScgJworCWNhdCA8PC1FT0YgPmV4cGVjdGVkLnV0Zi04ICYmCisJY29tbWl0ICRoZWFkMworCVRoaXMgY29tbWl0IG1lc3NhZ2UgaXMgbXVjaCBsb25nZXIgdGhhbiB0aGUgb3RoZXJzLAorCWFuZCBpdCB3aWxsIGJlIGVuY29kZWQgaW4gaXNvODg1OS0xLiBXZSBzaG91bGQgdGhlcmVmb3JlCisJaW5jbHVkZSBhbiBpc284ODU5IGNoYXJhY3RlcjogwqFidWVubyEKIAotY29tbWl0IDEzMWEzMTBlYjkxM2QxMDdkZDNjMDlhNjVkMTY1MTE3NTg5ODczNWQKLWNvbW1pdCA4NmM3NWNmZDcwOGEwZTU4NjhkYzg3NmVkNWI4YmI2NmM4MGI0ODczCisJY29tbWl0ICRoZWFkMgorCWNvbW1pdCAkaGVhZDEKKwlFT0YKKwlpY29udiAtZiB1dGYtOCAtdCBpc284ODU5LTEgZXhwZWN0ZWQudXRmLTggPmV4cGVjdGVkLmlzbzg4NTktMQorJworCit0ZXN0X2Zvcm1hdCBjb21wbGV4LWJvZHkgJWIgPGV4cGVjdGVkLmlzbzg4NTktMQorCisjIEdpdCB1c2VzIGkxOG4uY29tbWl0RW5jb2RpbmcgaWYgbm8gaTE4bi5sb2dPdXRwdXRFbmNvZGluZyBzZXQKKyMgc28gdW5zZXQgaTE4bi5jb21taXRFbmNvZGluZyB0byB0ZXN0IGVuY29kaW5nIGNvbnZlcnNpb24KK2dpdCBjb25maWcgLS11bnNldCBpMThuLmNvbW1pdEVuY29kaW5nCisKK3Rlc3RfZm9ybWF0IGNvbXBsZXgtc3ViamVjdC1jb21taXRlbmNvZGluZy11bnNldCAlcyA8PEVPRgorY29tbWl0ICRoZWFkMworVGVzdCBwcmludGluZyBvZiBjb21wbGV4IGJvZGllcworY29tbWl0ICRoZWFkMgorJGNoYW5nZWQKK2NvbW1pdCAkaGVhZDEKKyRhZGRlZAogRU9GCiAKK3Rlc3RfZm9ybWF0IGNvbXBsZXgtYm9keS1jb21taXRlbmNvZGluZy11bnNldCAlYiA8ZXhwZWN0ZWQudXRmLTgKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnJXgwMCBzaG93cyBOVUwnICcKLQllY2hvICA+ZXhwZWN0IGNvbW1pdCAxZWQ4OGRhNGE1YjVlZDhjNDQ5MTE0YWMxMzFlZmM2MjE3ODczNGMzICYmCisJZWNobyAgPmV4cGVjdCBjb21taXQgJGhlYWQzICYmCiAJZWNobyA+PmV4cGVjdCBmb29RYmFyICYmCiAJZ2l0IHJldi1saXN0IC0xIC0tZm9ybWF0PWZvbyV4MDBiYXIgSEVBRCA+YWN0dWFsLm51bCAmJgogCW51bF90b19xIDxhY3R1YWwubnVsID5hY3R1YWwgJiYKQEAgLTI2NSwxMiArMzE3LDEyIEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBTUCBiZWZvcmUgbm9uLWVtcHR5ICgxKScgJwogCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDoiJXMlIGJUaGFua3MiIEhFQUReXiA+YWN0dWFsICYmCi0JdGVzdCAkKHdjIC13IDxhY3R1YWwpID0gMgorCXRlc3QgJCh3YyAtdyA8YWN0dWFsKSA9IDMKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIFNQIGJlZm9yZSBub24tZW1wdHkgKDIpJyAnCiAJZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiIlcyUgc1RoYW5rcyIgSEVBRF5eID5hY3R1YWwgJiYKLQl0ZXN0ICQod2MgLXcgPGFjdHVhbCkgPSA0CisJdGVzdCAkKHdjIC13IDxhY3R1YWwpID0gNgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFiYnJldicgJwpkaWZmIC0tZ2l0IGEvdC90NjAxMi1yZXYtbGlzdC1zaW1wbGlmeS5zaCBiL3QvdDYwMTItcmV2LWxpc3Qtc2ltcGxpZnkuc2gKaW5kZXggZGQ2ZGM4NC4uNTdjZTIzOSAxMDA3NTUKLS0tIGEvdC90NjAxMi1yZXYtbGlzdC1zaW1wbGlmeS5zaAorKysgYi90L3Q2MDEyLXJldi1saXN0LXNpbXBsaWZ5LnNoCkBAIC0xNCwyMSArMTQsMjQgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCiAJZWNobyAiSGkgdGhlcmUiID5maWxlICYmCi0JZ2l0IGFkZCBmaWxlICYmCi0JdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gIkluaXRpYWwgZmlsZSIgJiYKKwllY2hvICJpbml0aWFsIiA+bG9zdCAmJgorCWdpdCBhZGQgZmlsZSBsb3N0ICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gIkluaXRpYWwgZmlsZSBhbmQgbG9zdCIgJiYKIAlub3RlIEEgJiYKIAogCWdpdCBicmFuY2ggb3RoZXItYnJhbmNoICYmCiAKIAllY2hvICJIZWxsbyIgPmZpbGUgJiYKLQlnaXQgYWRkIGZpbGUgJiYKLQl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAiTW9kaWZpZWQgZmlsZSIgJiYKKwllY2hvICJzZWNvbmQiID5sb3N0ICYmCisJZ2l0IGFkZCBmaWxlIGxvc3QgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAiTW9kaWZpZWQgZmlsZSBhbmQgbG9zdCIgJiYKIAlub3RlIEIgJiYKIAogCWdpdCBjaGVja291dCBvdGhlci1icmFuY2ggJiYKIAogCWVjaG8gIkhlbGxvIiA+ZmlsZSAmJgotCWdpdCBhZGQgZmlsZSAmJgorCT5sb3N0ICYmCisJZ2l0IGFkZCBmaWxlIGxvc3QgJiYKIAl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAiTW9kaWZpZWQgdGhlIGZpbGUgaWRlbnRpY2FsbHkiICYmCiAJbm90ZSBDICYmCiAKQEAgLTM3LDcgKzQwLDkgQEAKIAl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAiQWRkIGFub3RoZXIgZmlsZSIgJiYKIAlub3RlIEQgJiYKIAotCXRlc3RfdGljayAmJiBnaXQgbWVyZ2UgLW0gIm1lcmdlIiBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLW0gIm1lcmdlIiBtYXN0ZXIgJiYKKwk+bG9zdCAmJiBnaXQgY29tbWl0IC1hIC1tICJtZXJnZSIgJiYKIAlub3RlIEUgJiYKIAogCWVjaG8gIllldCBhbm90aGVyIiA+ZWxpZiAmJgpAQCAtMTA1LDkgKzExMCwyMSBAQAogY2hlY2tfcmVzdWx0ICdLIEkgSCBFIEMgQiBBJyAtLWZ1bGwtaGlzdG9yeSAtLSBmaWxlCiBjaGVja19yZXN1bHQgJ0sgSSBIIEUgQyBCIEEnIC0tZnVsbC1oaXN0b3J5IC0tdG9wby1vcmRlciAtLSBmaWxlCiBjaGVja19yZXN1bHQgJ0sgSSBIIEUgQyBCIEEnIC0tZnVsbC1oaXN0b3J5IC0tZGF0ZS1vcmRlciAtLSBmaWxlCi1jaGVja19vdXRjb21lIGZhaWx1cmUgJ0kgRSBDIEIgQScgLS1zaW1wbGlmeS1tZXJnZXMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdJIEUgQyBCIEEnIC0tc2ltcGxpZnktbWVyZ2VzIC0tIGZpbGUKIGNoZWNrX3Jlc3VsdCAnSSBCIEEnIC0tIGZpbGUKIGNoZWNrX3Jlc3VsdCAnSSBCIEEnIC0tdG9wby1vcmRlciAtLSBmaWxlCiBjaGVja19yZXN1bHQgJ0gnIC0tZmlyc3QtcGFyZW50IC0tIGFub3RoZXItZmlsZQogCitjaGVja19yZXN1bHQgJ0UgQyBCIEEnIC0tZnVsbC1oaXN0b3J5IEUgLS0gbG9zdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnVsbCBoaXN0b3J5IHNpbXBsaWZpY2F0aW9uIHdpdGhvdXQgcGFyZW50JyAnCisJcHJpbnRmICIlc1xuIiBFIEMgQiBBID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tcHJldHR5PSIkRk1UIiAtLWZ1bGwtaGlzdG9yeSBFIC0tIGxvc3QgfAorCXVubm90ZSA+YWN0dWFsICYmCisJc2VkIC1lICJzL14uKglcKFteIF0qXCkgLiovXDEvIiA+Y2hlY2sgPGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBjaGVjayB8fCB7CisJCWNhdCBhY3R1YWwKKwkJZmFsc2UKKwl9CisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAxOS1yZXYtbGlzdC1hbmNlc3RyeS1wYXRoLnNoIGIvdC90NjAxOS1yZXYtbGlzdC1hbmNlc3RyeS1wYXRoLnNoCmluZGV4IDM5YjRjYjAuLmRhYmViYWUgMTAwNzU1Ci0tLSBhL3QvdDYwMTktcmV2LWxpc3QtYW5jZXN0cnktcGF0aC5zaAorKysgYi90L3Q2MDE5LXJldi1saXN0LWFuY2VzdHJ5LXBhdGguc2gKQEAgLTEzLDYgKzEzLDEzIEBACiAjCiAjICBELi5NIC0tIE0udCAgICAgICAgICAgICAgICAgPT0gTQogIyAgLS1hbmNlc3RyeS1wYXRoIEQuLk0gLS0gTS50ID09IE0KKyMKKyMgIEYuLi5JICAgICAgICAgICAgICAgICA9PSBGIEcgSCBJCisjICAtLWFuY2VzdHJ5LXBhdGggRi4uLkkgPT0gRiBIIEkKKyMKKyMgIEcuLk0gLS0gRy50ICAgICAgICAgICAgICAgICA9PSBbbm90aGluZyAtIHdhcyBkcm9wcGVkIGluICItcyBvdXJzIiBtZXJnZSBMXQorIyAgLS1hbmNlc3RyeS1wYXRoIEcuLk0gLS0gRy50ID09IEwKKyMgIC0tYW5jZXN0cnktcGF0aCAtLXNpbXBsaWZ5LW1lcmdlcyBHXi4uTSAtLSBHLnQgPT0gRyBMCiAKIC4gLi90ZXN0LWxpYi5zaAogCkBAIC02MywxMyArNzAsNTIgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tYW5jZXN0cnktcGF0Y2ggRC4uTSAtLSBNLnQnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tYW5jZXN0cnktcGF0aCBELi5NIC0tIE0udCcgJwogCWVjaG8gTSA+ZXhwZWN0ICYmCiAJZ2l0IHJldi1saXN0IC0tYW5jZXN0cnktcGF0aCAtLWZvcm1hdD0lcyBELi5NIC0tIE0udCB8CiAJc2VkIC1lICIvXmNvbW1pdCAvZCIgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgRi4uLkknICcKKwlmb3IgYyBpbiBGIEcgSCBJOyBkbyBlY2hvICRjOyBkb25lID5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgLS1mb3JtYXQ9JXMgRi4uLkkgfAorCXNlZCAtZSAiL15jb21taXQgL2QiIHwKKwlzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tYW5jZXN0cnktcGF0aCBGLi4uSScgJworCWZvciBjIGluIEYgSCBJOyBkbyBlY2hvICRjOyBkb25lID5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIC0tZm9ybWF0PSVzIEYuLi5JIHwKKwlzZWQgLWUgIi9eY29tbWl0IC9kIiB8CisJc29ydCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIEcudCBpcyBkcm9wcGVkIGluIGFuICItcyBvdXJzIiBtZXJnZQordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgRy4uTSAtLSBHLnQnICcKKwk+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IC0tZm9ybWF0PSVzIEcuLk0gLS0gRy50IHwKKwlzZWQgLWUgIi9eY29tbWl0IC9kIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggRy4uTSAtLSBHLnQnICcKKwllY2hvIEwgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggLS1mb3JtYXQ9JXMgRy4uTSAtLSBHLnQgfAorCXNlZCAtZSAiL15jb21taXQgL2QiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tYW5jZXN0cnktcGF0aCAtLXNpbXBsaWZ5LW1lcmdlcyBHXi4uTSAtLSBHLnQnICcKKwlmb3IgYyBpbiBHIEw7IGRvIGVjaG8gJGM7IGRvbmUgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggLS1zaW1wbGlmeS1tZXJnZXMgLS1mb3JtYXQ9JXMgR14uLk0gLS0gRy50IHwKKwlzZWQgLWUgIi9eY29tbWl0IC9kIiB8CisJc29ydCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCiAjICAgYi0tLWJjCiAjICAvIFwgLwogIyBhICAgWApkaWZmIC0tZ2l0IGEvdC90NjAyMS1tZXJnZS1jcmlzcy1jcm9zcy5zaCBiL3QvdDYwMjEtbWVyZ2UtY3Jpc3MtY3Jvc3Muc2gKaW5kZXggMzMxYjliMC4uZDE1YjMxMyAxMDA3NTUKLS0tIGEvdC90NjAyMS1tZXJnZS1jcmlzcy1jcm9zcy5zaAorKysgYi90L3Q2MDIxLW1lcmdlLWNyaXNzLWNyb3NzLnNoCkBAIC0zLDcgKzMsNyBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMDUgRnJlZHJpayBLdWl2aW5lbgogIwogCi0jIFNlZSBodHRwOi8vbWFyYy50aGVhaW1zZ3JvdXAuY29tLz9sPWdpdCZtPTExMTQ2MzM1ODUwMDM2MiZ3PTIgZm9yIGEKKyMgU2VlIGh0dHA6Ly9tYXJjLmluZm8vP2w9Z2l0Jm09MTExNDYzMzU4NTAwMzYyJnc9MiBmb3IgYQogIyBuaWNlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhpcyBpcyBhYm91dC4KIAogCmRpZmYgLS1naXQgYS90L3Q2MDM1LW1lcmdlLWRpci10by1zeW1saW5rLnNoIGIvdC90NjAzNS1tZXJnZS1kaXItdG8tc3ltbGluay5zaAppbmRleCAyNTk5YWU1Li45MzI0ZWE0IDEwMDc1NQotLS0gYS90L3Q2MDM1LW1lcmdlLWRpci10by1zeW1saW5rLnNoCisrKyBiL3QvdDYwMzUtbWVyZ2UtZGlyLXRvLXN5bWxpbmsuc2gKQEAgLTMsNyArMyw3IEBACiB0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnaW5nIHdoZW4gYSBkaXJlY3Rvcnkgd2FzIHJlcGxhY2VkIHdpdGggYSBzeW1saW5rJwogLiAuL3Rlc3QtbGliLnNoCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2NyZWF0ZSBhIGNvbW1pdCB3aGVyZSBkaXIgYS9iIGNoYW5nZWQgdG8gc3ltbGluaycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGEgY29tbWl0IHdoZXJlIGRpciBhL2IgY2hhbmdlZCB0byBzeW1saW5rJyAnCiAJbWtkaXIgLXAgYS9iL2MgYS9iLTIvYyAmJgogCT4gYS9iL2MvZCAmJgogCT4gYS9iLTIvYy9kICYmCkBAIC0xMiwxMiArMTIsMTIgQEAKIAlnaXQgY29tbWl0IC1tIGJhc2UgJiYKIAlnaXQgdGFnIHN0YXJ0ICYmCiAJcm0gLXJmIGEvYiAmJgotCWxuIC1zIGItMiBhL2IgJiYKIAlnaXQgYWRkIC1BICYmCisJdGVzdF9sbl9zX2FkZCBiLTIgYS9iICYmCiAJZ2l0IGNvbW1pdCAtbSAiZGlyIHRvIHN5bWxpbmsiCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2NoZWNrb3V0IGRvZXMgbm90IGNsb2JiZXIgdW50cmFja2VkIHN5bWxpbmsnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGRvZXMgbm90IGNsb2JiZXIgdW50cmFja2VkIHN5bWxpbmsnICcKIAlnaXQgY2hlY2tvdXQgSEVBRF4wICYmCiAJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKIAlnaXQgcm0gLS1jYWNoZWQgYS9iICYmCkBAIC0yNSw3ICsyNSw3IEBACiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IHN0YXJ0XjAKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnYS9iLTIvYy9kIGlzIGtlcHQgd2hlbiBjbG9iYmVyaW5nIHN5bWxpbmsgYicgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYS9iLTIvYy9kIGlzIGtlcHQgd2hlbiBjbG9iYmVyaW5nIHN5bWxpbmsgYicgJwogCWdpdCBjaGVja291dCBIRUFEXjAgJiYKIAlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgogCWdpdCBybSAtLWNhY2hlZCBhL2IgJiYKQEAgLTM0LDE0ICszNCwxNCBAQAogCXRlc3QgLWYgYS9iLTIvYy9kCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2NoZWNrb3V0IHNob3VsZCBub3QgaGF2ZSBkZWxldGVkIGEvYi0yL2MvZCcgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgc2hvdWxkIG5vdCBoYXZlIGRlbGV0ZWQgYS9iLTIvYy9kJyAnCiAJZ2l0IGNoZWNrb3V0IEhFQUReMCAmJgogCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCiAJIGdpdCBjaGVja291dCBzdGFydF4wICYmCiAJIHRlc3QgLWYgYS9iLTIvYy9kCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3NldHVwIGZvciBtZXJnZSB0ZXN0JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgbWVyZ2UgdGVzdCcgJwogCWdpdCByZXNldCAtLWhhcmQgJiYKIAl0ZXN0IC1mIGEvYi0yL2MvZCAmJgogCWVjaG8geCA+IGEveCAmJgpAQCAtNTAsMzkgKzUwLDUxIEBACiAJZ2l0IHRhZyBiYXNlbGluZQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdIYW5kbGUgRC9GIGNvbmZsaWN0LCBkbyBub3QgbG9zZSBhL2ItMi9jL2QgaW4gbWVyZ2UgKHJlc29sdmUpJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdIYW5kbGUgRC9GIGNvbmZsaWN0LCBkbyBub3QgbG9zZSBhL2ItMi9jL2QgaW4gbWVyZ2UgKHJlc29sdmUpJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWdpdCBjaGVja291dCBiYXNlbGluZV4wICYmCiAJZ2l0IG1lcmdlIC1zIHJlc29sdmUgbWFzdGVyICYmCi0JdGVzdCAtaCBhL2IgJiYKIAl0ZXN0IC1mIGEvYi0yL2MvZAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdIYW5kbGUgRC9GIGNvbmZsaWN0LCBkbyBub3QgbG9zZSBhL2ItMi9jL2QgaW4gbWVyZ2UgKHJlY3Vyc2l2ZSknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2EvYiB3YXMgcmVzb2x2ZWQgYXMgc3ltbGluaycgJworCXRlc3QgLWggYS9iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0hhbmRsZSBEL0YgY29uZmxpY3QsIGRvIG5vdCBsb3NlIGEvYi0yL2MvZCBpbiBtZXJnZSAocmVjdXJzaXZlKScgJwogCWdpdCByZXNldCAtLWhhcmQgJiYKIAlnaXQgY2hlY2tvdXQgYmFzZWxpbmVeMCAmJgogCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgbWFzdGVyICYmCi0JdGVzdCAtaCBhL2IgJiYKIAl0ZXN0IC1mIGEvYi0yL2MvZAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdIYW5kbGUgRi9EIGNvbmZsaWN0LCBkbyBub3QgbG9zZSBhL2ItMi9jL2QgaW4gbWVyZ2UgKHJlc29sdmUpJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdhL2Igd2FzIHJlc29sdmVkIGFzIHN5bWxpbmsnICcKKwl0ZXN0IC1oIGEvYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdIYW5kbGUgRi9EIGNvbmZsaWN0LCBkbyBub3QgbG9zZSBhL2ItMi9jL2QgaW4gbWVyZ2UgKHJlc29sdmUpJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgogCWdpdCBtZXJnZSAtcyByZXNvbHZlIGJhc2VsaW5lXjAgJiYKLQl0ZXN0IC1oIGEvYiAmJgogCXRlc3QgLWYgYS9iLTIvYy9kCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ0hhbmRsZSBGL0QgY29uZmxpY3QsIGRvIG5vdCBsb3NlIGEvYi0yL2MvZCBpbiBtZXJnZSAocmVjdXJzaXZlKScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnYS9iIHdhcyByZXNvbHZlZCBhcyBzeW1saW5rJyAnCisJdGVzdCAtaCBhL2IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSGFuZGxlIEYvRCBjb25mbGljdCwgZG8gbm90IGxvc2UgYS9iLTIvYy9kIGluIG1lcmdlIChyZWN1cnNpdmUpJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgogCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgYmFzZWxpbmVeMCAmJgotCXRlc3QgLWggYS9iICYmCiAJdGVzdCAtZiBhL2ItMi9jL2QKICcKIAotdGVzdF9leHBlY3RfZmFpbHVyZSBTWU1MSU5LUyAnZG8gbm90IGxvc2UgdW50cmFja2VkIGluIG1lcmdlIChyZXNvbHZlKScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnYS9iIHdhcyByZXNvbHZlZCBhcyBzeW1saW5rJyAnCisJdGVzdCAtaCBhL2IKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnZG8gbm90IGxvc2UgdW50cmFja2VkIGluIG1lcmdlIChyZXNvbHZlKScgJwogCWdpdCByZXNldCAtLWhhcmQgJiYKIAlnaXQgY2hlY2tvdXQgYmFzZWxpbmVeMCAmJgogCT5hL2IvYy9lICYmCkBAIC05MSw3ICsxMDMsNyBAQAogCXRlc3QgLWYgYS9iLTIvYy9kCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2RvIG5vdCBsb3NlIHVudHJhY2tlZCBpbiBtZXJnZSAocmVjdXJzaXZlKScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGxvc2UgdW50cmFja2VkIGluIG1lcmdlIChyZWN1cnNpdmUpJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWdpdCBjaGVja291dCBiYXNlbGluZV4wICYmCiAJPmEvYi9jL2UgJiYKQEAgLTEwMCw1MiArMTEyLDYxIEBACiAJdGVzdCAtZiBhL2ItMi9jL2QKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZG8gbm90IGxvc2UgbW9kaWZpY2F0aW9ucyBpbiBtZXJnZSAocmVzb2x2ZSknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBsb3NlIG1vZGlmaWNhdGlvbnMgaW4gbWVyZ2UgKHJlc29sdmUpJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWdpdCBjaGVja291dCBiYXNlbGluZV4wICYmCiAJZWNobyBtb3JlIGNvbnRlbnQgPj5hL2IvYy9kICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlc29sdmUgbWFzdGVyCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2RvIG5vdCBsb3NlIG1vZGlmaWNhdGlvbnMgaW4gbWVyZ2UgKHJlY3Vyc2l2ZSknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBsb3NlIG1vZGlmaWNhdGlvbnMgaW4gbWVyZ2UgKHJlY3Vyc2l2ZSknICcKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJZ2l0IGNoZWNrb3V0IGJhc2VsaW5lXjAgJiYKIAllY2hvIG1vcmUgY29udGVudCA+PmEvYi9jL2QgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIG1hc3RlcgogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzZXR1cCBhIG1lcmdlIHdoZXJlIGRpciBhL2ItMiBjaGFuZ2VkIHRvIHN5bWxpbmsnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGEgbWVyZ2Ugd2hlcmUgZGlyIGEvYi0yIGNoYW5nZWQgdG8gc3ltbGluaycgJwogCWdpdCByZXNldCAtLWhhcmQgJiYKIAlnaXQgY2hlY2tvdXQgc3RhcnReMCAmJgogCXJtIC1yZiBhL2ItMiAmJgotCWxuIC1zIGIgYS9iLTIgJiYKIAlnaXQgYWRkIC1BICYmCisJdGVzdF9sbl9zX2FkZCBiIGEvYi0yICYmCiAJZ2l0IGNvbW1pdCAtbSAiZGlyIGEvYi0yIHRvIHN5bWxpbmsiICYmCiAJZ2l0IHRhZyB0ZXN0MgogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdtZXJnZSBzaG91bGQgbm90IGhhdmUgRC9GIGNvbmZsaWN0cyAocmVzb2x2ZSknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHNob3VsZCBub3QgaGF2ZSBEL0YgY29uZmxpY3RzIChyZXNvbHZlKScgJwogCWdpdCByZXNldCAtLWhhcmQgJiYKIAlnaXQgY2hlY2tvdXQgYmFzZWxpbmVeMCAmJgogCWdpdCBtZXJnZSAtcyByZXNvbHZlIHRlc3QyICYmCi0JdGVzdCAtaCBhL2ItMiAmJgogCXRlc3QgLWYgYS9iL2MvZAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdtZXJnZSBzaG91bGQgbm90IGhhdmUgRC9GIGNvbmZsaWN0cyAocmVjdXJzaXZlKScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnYS9iLTIgd2FzIHJlc29sdmVkIGFzIHN5bWxpbmsnICcKKwl0ZXN0IC1oIGEvYi0yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHNob3VsZCBub3QgaGF2ZSBEL0YgY29uZmxpY3RzIChyZWN1cnNpdmUpJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWdpdCBjaGVja291dCBiYXNlbGluZV4wICYmCiAJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSB0ZXN0MiAmJgotCXRlc3QgLWggYS9iLTIgJiYKIAl0ZXN0IC1mIGEvYi9jL2QKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnbWVyZ2Ugc2hvdWxkIG5vdCBoYXZlIEYvRCBjb25mbGljdHMgKHJlY3Vyc2l2ZSknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2EvYi0yIHdhcyByZXNvbHZlZCBhcyBzeW1saW5rJyAnCisJdGVzdCAtaCBhL2ItMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBzaG91bGQgbm90IGhhdmUgRi9EIGNvbmZsaWN0cyAocmVjdXJzaXZlKScgJwogCWdpdCByZXNldCAtLWhhcmQgJiYKIAlnaXQgY2hlY2tvdXQgLWIgZm9vIHRlc3QyICYmCiAJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBiYXNlbGluZV4wICYmCi0JdGVzdCAtaCBhL2ItMiAmJgogCXRlc3QgLWYgYS9iL2MvZAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdhL2ItMiB3YXMgcmVzb2x2ZWQgYXMgc3ltbGluaycgJworCXRlc3QgLWggYS9iLTIKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MTExLXJldi1saXN0LXRyZWVzYW1lLnNoIGIvdC90NjExMS1yZXYtbGlzdC10cmVlc2FtZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OGI4NGRmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjExMS1yZXYtbGlzdC10cmVlc2FtZS5zaApAQCAtMCwwICsxLDE5NiBAQAorIyEvYmluL3NoCisjCisjICAgICAgICAsLS0tRS0tLiAgICpILS0tLS0tLS0tLS4gICAgICAgICAgICAgKiBtYXJrcyAhVFJFRVNBTUUgcGFyZW50IHBhdGhzCisjICAgICAgIC8gICAgICAgIFwgLyAgICAgICAgICAgICBcKgorIyAqQS0tKkItLS1ELS0qRi0qRy0tLS0tLS0tLUstKkwtKk0KKyMgICBcICAgICAvKiAgICAgICBcICAgICAgIC8KKyMgICAgYC1DLScgICAgICAgICAgYC0qSS0qSgorIworIyBBIGNyZWF0ZXMgImZpbGUiLCBCIGFuZCBGIGNoYW5nZSBpdC4KKyMgT2RkIG1lcmdlIEcgdGFrZXMgdGhlIG9sZCB2ZXJzaW9uIGZyb20gQi4KKyMgSSBjaGFuZ2VzIGl0LCBidXQgSiByZXZlcnRzIGl0LCBzbyBLIGlzIFRSRUVTQU1FIHRvIGJvdGggcGFyZW50cy4KKyMgSCBhbmQgTCBib3RoIGNoYW5nZSAiZmlsZSIsIGFuZCBNIG1lcmdlcyB0aG9zZSBjaGFuZ2VzLgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUUkVFU0FNRSBhbmQgbGltaXRpbmcnCisKKy4gLi90ZXN0LWxpYi5zaAorCitub3RlICgpIHsKKwlnaXQgdGFnICIkMSIKK30KKwordW5ub3RlICgpIHsKKwlnaXQgbmFtZS1yZXYgLS10YWdzIC0tc3RkaW4gfCBzZWQgLWUgInN8JF94NDAgKHRhZ3MvXChbXildKlwpKVwoWyAJXVwpfFwxXDJ8ZyIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgIkluaXRpYWwgZmlsZSIgZmlsZSAiSGkgdGhlcmUiIEEgJiYKKwlnaXQgYnJhbmNoIG90aGVyLWJyYW5jaCAmJgorCisJdGVzdF9jb21taXQgImZpbGU9SGVsbG8iIGZpbGUgIkhlbGxvIiBCICYmCisJZ2l0IGJyYW5jaCB0aGlyZC1icmFuY2ggJiYKKworCWdpdCBjaGVja291dCBvdGhlci1icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCAiQWRkZWQgb3RoZXIiIG90aGVyICJIZWxsbyIgQyAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfbWVyZ2UgRCBvdGhlci1icmFuY2ggJiYKKworCWdpdCBjaGVja291dCB0aGlyZC1icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCAiVGhpcmQgZmlsZSIgdGhpcmQgIk5vdGhpbmciIEUgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCAiZmlsZT1CbGFoIiBmaWxlICJCbGFoIiBGICYmCisKKwl0ZXN0X3RpY2sgJiYgZ2l0IG1lcmdlIC0tbm8tY29tbWl0IHRoaXJkLWJyYW5jaCAmJgorCWdpdCBjaGVja291dCB0aGlyZC1icmFuY2ggZmlsZSAmJgorCWdpdCBjb21taXQgJiYKKwlub3RlIEcgJiYKKwlnaXQgYnJhbmNoIGZpZGRsZXItYnJhbmNoICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgcGFydDItYnJhbmNoICYmCisJdGVzdF9jb21taXQgImZpbGU9UGFydCAyIiBmaWxlICJQYXJ0IDIiIEggJiYKKworCWdpdCBjaGVja291dCBmaWRkbGVyLWJyYW5jaCAmJgorCXRlc3RfY29tbWl0ICJCYWQgY29tbWl0IiBmaWxlICJTaWxseSIgSSAmJgorCisJdGVzdF90aWNrICYmIGdpdCByZXZlcnQgSSAmJiBub3RlIEogJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IG1lcmdlIC0tbm8tZmYgZmlkZGxlci1icmFuY2ggJiYKKwlub3RlIEsKKworCXRlc3RfY29tbWl0ICJmaWxlPVBhcnQgMSIgZmlsZSAiUGFydCAxIiBMICYmCisKKwl0ZXN0X3RpY2sgJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHBhcnQyLWJyYW5jaCAmJgorCXRlc3RfY29tbWl0IE0gZmlsZSAiUGFydHMgMSsyIgorJworCitjaGVja19vdXRjb21lICgpIHsKKwlvdXRjb21lPSQxCisJc2hpZnQKKworCWNhc2UgIiQxIiBpbgorCSoiKCIqKQorCQlGTVQ9IiVQCSVIIHwgJXMiCisJCW11bmdlX2FjdHVhbD0iCisJCQlzL15cKFteCV0qXCkJXChbXiBdKlwpIC4qLyhcMSlcMi8KKwkJCXMvIC8vZworCQkJcy8oKS8vCisJCSIKKwkJOzsKKwkqKQorCQlGTVQ9IiVIIHwgJXMiCisJCW11bmdlX2FjdHVhbD0icy9eXChbXiBdKlwpIC4qL1wxLyIKKwkJOzsKKwllc2FjICYmCisJcHJpbnRmICIlc1xuIiAkMSA+ZXhwZWN0ICYmCisJc2hpZnQKKworCXBhcmFtPSIkKiIgJiYKKwl0ZXN0X2V4cGVjdF8kb3V0Y29tZSAibG9nICRwYXJhbSIgJworCQlnaXQgbG9nIC0tZm9ybWF0PSIkRk1UIiAkcGFyYW0gfAorCQl1bm5vdGUgPmFjdHVhbCAmJgorCQlzZWQgLWUgIiRtdW5nZV9hY3R1YWwiIDxhY3R1YWwgPmNoZWNrICYmCisJCXRlc3RfY21wIGV4cGVjdCBjaGVjayB8fCB7CisJCQljYXQgYWN0dWFsCisJCQlmYWxzZQorCQl9CisJJworfQorCitjaGVja19yZXN1bHQgKCkgeworCWNoZWNrX291dGNvbWUgc3VjY2VzcyAiJEAiCit9CisKKyMgT2RkIG1lcmdlIEcgZHJvcHMgYSBjaGFuZ2UgaW4gRi4gSW1wb3J0YW50IHRoYXQgRyBpcyBsaXN0ZWQgaW4gYWxsCisjIGV4Y2VwdCB0aGUgbW9zdCBiYXNpYyBsaXN0LiBBY2hpZXZpbmcgdGhpcyBtZWFucyBub3JtYWwgbWVyZ2UgRCB3aWxsIGFsc28gYmUKKyMgc2hvd24gaW4gbm9ybWFsIGZ1bGwtaGlzdG9yeSwgYXMgd2UgY2FuJ3QgZGlzdGluZ3Vpc2ggdW5sZXNzIHdlIGRvIGEKKyMgc2ltcGxpZmljYXRpb24gcGFzcy4gQWZ0ZXIgc2ltcGxpZmljYXRpb24sIEQgaXMgZHJvcHBlZCBidXQgRyByZW1haW5zLgorIyBBbHNvLCBtZXJnZSBzaW1wbGlmaWNhdGlvbiBvZiBHIHNob3VsZCBub3QgZHJvcCB0aGUgcGFyZW50IEIgdGhhdCB0aGUgZGVmYXVsdAorIyBzaW1wbGUgaGlzdG9yeSBmb2xsb3dzLgorY2hlY2tfcmVzdWx0ICdNIEwgSyBKIEkgSCBHIEYgRSBEIEMgQiBBJworY2hlY2tfcmVzdWx0ICcoTEgpTSAoSylMIChHSilLIChJKUogKEcpSSAoRylIIChGRSlHIChEKUYgKEIpRSAoQkMpRCAoQSlDIChBKUIgQScKK2NoZWNrX3Jlc3VsdCAnTSBIIEwgSyBKIEkgRyBFIEYgRCBDIEIgQScgLS10b3BvLW9yZGVyCitjaGVja19yZXN1bHQgJ00gTCBIIEIgQScgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoTEgpTSAoQilMIChCKUggKEEpQiBBJyAtLXBhcmVudHMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdNIEwgSiBJIEggRyBGIEQgQiBBJyAtLWZ1bGwtaGlzdG9yeSAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhMSClNIChLKUwgKEdKKUsgKEkpSiAoRylJIChHKUggKEZCKUcgKEQpRiAoQkEpRCAoQSlCIEEnIC0tZnVsbC1oaXN0b3J5IC0tcGFyZW50cyAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhMSClNIChHKUggKEopTCAoSSlKIChHKUkgKEZCKUcgKEIpRiAoQSlCIEEnIC0tc2ltcGxpZnktbWVyZ2VzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnTSBMIEsgRyBGIEQgQiBBJyAtLWZpcnN0LXBhcmVudAorY2hlY2tfcmVzdWx0ICdNIEwgRyBGIEIgQScgLS1maXJzdC1wYXJlbnQgLS0gZmlsZQorCisjIENoZWNrIHRoYXQgb2RkIG1lcmdlIEcgcmVtYWlucyBzaG93biB3aGVuIEYgaXMgdGhlIGJvdHRvbS4KK2NoZWNrX3Jlc3VsdCAnTSBMIEsgSiBJIEggRyBFJyBGLi5NCitjaGVja19yZXN1bHQgJ00gSCBMIEsgSiBJIEcgRScgRi4uTSAtLXRvcG8tb3JkZXIKK2NoZWNrX3Jlc3VsdCAnTSBMIEgnIEYuLk0gLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoTEgpTSAoQilMIChCKUgnIC0tcGFyZW50cyBGLi5NIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnTSBMIEogSSBIIEcnIEYuLk0gLS1mdWxsLWhpc3RvcnkgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoTEgpTSAoSylMIChHSilLIChJKUogKEcpSSAoRylIIChGQilHJyBGLi5NIC0tZnVsbC1oaXN0b3J5IC0tcGFyZW50cyAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhMSClNIChHKUggKEopTCAoSSlKIChHKUkgKEZCKUcnIEYuLk0gLS1zaW1wbGlmeS1tZXJnZXMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdNIEwgSyBKIEkgSCBHJyBGLi5NIC0tYW5jZXN0cnktcGF0aAorY2hlY2tfcmVzdWx0ICdNIEwgSiBJIEggRycgRi4uTSAtLWFuY2VzdHJ5LXBhdGggLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoTEgpTSAoSylMIChHSilLIChJKUogKEcpSSAoRylIIChGRSlHJyBGLi5NIC0tYW5jZXN0cnktcGF0aCAtLXBhcmVudHMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoTEgpTSAoRylIIChKKUwgKEkpSiAoRylJIChGRSlHJyBGLi5NIC0tYW5jZXN0cnktcGF0aCAtLXNpbXBsaWZ5LW1lcmdlcyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ00gTCBLIEcnIEYuLk0gLS1maXJzdC1wYXJlbnQKK2NoZWNrX3Jlc3VsdCAnTSBMIEcnIEYuLk0gLS1maXJzdC1wYXJlbnQgLS0gZmlsZQorCisjIE5vdGUgdGhhdCBHIGlzIHBydW5lZCB3aGVuIEUgaXMgdGhlIGJvdHRvbSwgZXZlbiBpZiBpdCdzIHRoZSBzYW1lIGNvbW1pdCBsaXN0CisjIElmIHdlIHdhbnQgaGlzdG9yeSBzaW5jZSBFLCB0aGVuIHdlJ3JlIHF1aXRlIGhhcHB5IHRvIGlnbm9yZSBHIHRoYXQgdG9vayBFLgorY2hlY2tfcmVzdWx0ICdNIEwgSyBKIEkgSCBHJyBFLi5NIC0tYW5jZXN0cnktcGF0aAorY2hlY2tfcmVzdWx0ICdNIEwgSiBJIEgnIEUuLk0gLS1hbmNlc3RyeS1wYXRoIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnKExIKU0gKEspTCAoRUopSyAoSSlKIChFKUkgKEUpSCcgRS4uTSAtLWFuY2VzdHJ5LXBhdGggLS1wYXJlbnRzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnKExIKU0gKEUpSCAoSilMIChJKUogKEUpSScgRS4uTSAtLWFuY2VzdHJ5LXBhdGggLS1zaW1wbGlmeS1tZXJnZXMgLS0gZmlsZQorCisjIFNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIGlnbm9yZSBJLUogYnJhbmNoIGluIHNpbXBsZSBsb2csIGRlc3BpdGUgbGltaXRpbmcKKyMgdG8gRy4KK2NoZWNrX3Jlc3VsdCAnTSBMIEsgSiBJIEgnIEcuLk0KK2NoZWNrX3Jlc3VsdCAnTSBIIEwgSyBKIEknIEcuLk0gLS10b3BvLW9yZGVyCitjaGVja19yZXN1bHQgJ00gTCBIJyBHLi5NIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnKExIKU0gKEcpTCAoRylIJyBHLi5NIC0tcGFyZW50cyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ00gTCBKIEkgSCcgRy4uTSAtLWZ1bGwtaGlzdG9yeSAtLSBmaWxlCitjaGVja19yZXN1bHQgJ00gTCBLIEogSSBIJyBHLi5NIC0tZnVsbC1oaXN0b3J5IC0tcGFyZW50cyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ00gSCBMIEogSScgRy4uTSAtLXNpbXBsaWZ5LW1lcmdlcyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ00gTCBLIEogSSBIJyBHLi5NIC0tYW5jZXN0cnktcGF0aAorY2hlY2tfcmVzdWx0ICdNIEwgSiBJIEgnIEcuLk0gLS1hbmNlc3RyeS1wYXRoIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnTSBMIEsgSiBJIEgnIEcuLk0gLS1hbmNlc3RyeS1wYXRoIC0tcGFyZW50cyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ00gSCBMIEogSScgRy4uTSAtLWFuY2VzdHJ5LXBhdGggLS1zaW1wbGlmeS1tZXJnZXMgLS0gZmlsZQorCisjIEIuLkYgc2hvdWxkIGJlIGFibGUgdG8gc2ltcGxpZnkgdGhlIG1lcmdlIEQgZnJvbSBpcnJlbGV2YW50IHNpZGUgYnJhbmNoIEMuCisjIERlZmF1bHQgbG9nIHNob3VsZCBhbHNvIGJlIGZyZWUgdG8gZm9sbG93IEItRCwgYW5kIGlnbm9yZSBDLgorIyBCdXQgLS1mdWxsLWhpc3Rvcnkgc2hvdWxkbid0IGRyb3AgRCBvbiBpdHMgb3duIC0gd2l0aG91dCBzaW1wbGlmaWNhdGlvbiwKKyMgd2UgY2FuJ3QgZGVjaWRlIGlmIHRoZSBtZXJnZSBmcm9tIElOVEVSRVNUSU5HIGNvbW1pdCBDIHdhcyBzZW5zaWJsZS4KK2NoZWNrX3Jlc3VsdCAnRiBEIEMnIEIuLkYKK2NoZWNrX3Jlc3VsdCAnRicgQi4uRiAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhCKUYnIEIuLkYgLS1wYXJlbnRzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnRiBEJyBCLi5GIC0tZnVsbC1oaXN0b3J5IC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnKEQpRiAoQkEpRCcgQi4uRiAtLWZ1bGwtaGlzdG9yeSAtLXBhcmVudHMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoQilGJyBCLi5GIC0tc2ltcGxpZnktbWVyZ2VzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnRiBEJyBCLi5GIC0tYW5jZXN0cnktcGF0aAorY2hlY2tfcmVzdWx0ICdGJyBCLi5GIC0tYW5jZXN0cnktcGF0aCAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0YnIEIuLkYgLS1hbmNlc3RyeS1wYXRoIC0tcGFyZW50cyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0YnIEIuLkYgLS1hbmNlc3RyeS1wYXRoIC0tc2ltcGxpZnktbWVyZ2VzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnRiBEJyBCLi5GIC0tZmlyc3QtcGFyZW50CitjaGVja19yZXN1bHQgJ0YnIEIuLkYgLS1maXJzdC1wYXJlbnQgLS0gZmlsZQorCisjIEUuLi5GIHNob3VsZCBiZSBlcXVpdmFsZW50IHRvIEUgRiBeQiwgYW5kIGJlIGFibGUgdG8gZHJvcCBEIGFzIGFib3ZlLgorY2hlY2tfcmVzdWx0ICdGJyBFIEYgXkIgLS0gZmlsZSAjIGluY2x1ZGVzIEQKK2NoZWNrX3Jlc3VsdCAnRicgRS4uLkYgLS0gZmlsZSAjIGluY2x1ZGVzIEQKKworIyBBbnkgc29ydCBvZiBmdWxsIGhpc3Rvcnkgb2YgQy4uRiBzaG91bGQgc2hvdyBELCBhcyBpdCdzIHRoZSBjb25uZWN0aW9uIHRvIEMsCisjIGFuZCBpdCBkaWZmZXJzIGZyb20gaXQuCitjaGVja19yZXN1bHQgJ0YgRCBCJyBDLi5GCitjaGVja19yZXN1bHQgJ0YgQicgQy4uRiAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhCKUYgKEEpQicgQy4uRiAtLXBhcmVudHMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdGIEQgQicgQy4uRiAtLWZ1bGwtaGlzdG9yeSAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhEKUYgKEJDKUQgKEEpQicgQy4uRiAtLWZ1bGwtaGlzdG9yeSAtLXBhcmVudHMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoRClGIChCQylEIChBKUInIEMuLkYgLS1zaW1wbGlmeS1tZXJnZXMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdGIEQnIEMuLkYgLS1hbmNlc3RyeS1wYXRoCitjaGVja19yZXN1bHQgJ0YgRCcgQy4uRiAtLWFuY2VzdHJ5LXBhdGggLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdGIEQnIEMuLkYgLS1hbmNlc3RyeS1wYXRoIC0tcGFyZW50cyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0YgRCcgQy4uRiAtLWFuY2VzdHJ5LXBhdGggLS1zaW1wbGlmeS1tZXJnZXMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdGIEQgQicgQy4uRiAtLWZpcnN0LXBhcmVudAorY2hlY2tfcmVzdWx0ICdGIEInIEMuLkYgLS1maXJzdC1wYXJlbnQgLS0gZmlsZQorCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjEyMC1kZXNjcmliZS5zaCBiL3QvdDYxMjAtZGVzY3JpYmUuc2gKaW5kZXggZjY3YWE2Zi4uYzBlNWIyYSAxMDA3NTUKLS0tIGEvdC90NjEyMC1kZXNjcmliZS5zaAorKysgYi90L3Q2MTIwLWRlc2NyaWJlLnNoCkBAIC0xMTAsNiArMTEwLDkgQEAKIGNoZWNrX2Rlc2NyaWJlIEItMC0qIC0tbG9uZyBIRUFEXl4yXgogY2hlY2tfZGVzY3JpYmUgQS0zLSogLS1sb25nIEhFQUReXjIKIAorY2hlY2tfZGVzY3JpYmUgYy03LSogLS10YWdzCitjaGVja19kZXNjcmliZSBlLTMtKiAtLWZpcnN0LXBhcmVudCAtLXRhZ3MKKwogOiA+ZXJyLmV4cGVjdAogY2hlY2tfZGVzY3JpYmUgQSAtLWFsbCBBXjAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHdhcm5pbmcgd2FzIGRpc3BsYXllZCBmb3IgQScgJwpAQCAtMTcxLDQgKzE3NCwyOCBAQAogCiBjaGVja19kZXNjcmliZSAidGVzdDItbGlnaHR3ZWlnaHQtKiIgLS1sb25nIC0tdGFncyAtLW1hdGNoPSJ0ZXN0Mi0qIiBIRUFEXgogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduYW1lLXJldiB3aXRoIGV4YWN0IHRhZ3MnICcKKwllY2hvIEEgPmV4cGVjdCAmJgorCXRhZ19vYmplY3Q9JChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9BKSAmJgorCWdpdCBuYW1lLXJldiAtLXRhZ3MgLS1uYW1lLW9ubHkgJHRhZ19vYmplY3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gIkFeMCIgPmV4cGVjdCAmJgorCXRhZ2dlZF9jb21taXQ9JChnaXQgcmV2LXBhcnNlICJyZWZzL3RhZ3MvQV4wIikgJiYKKwlnaXQgbmFtZS1yZXYgLS10YWdzIC0tbmFtZS1vbmx5ICR0YWdnZWRfY29tbWl0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaWJlIC0tY29udGFpbnMgd2l0aCB0aGUgZXhhY3QgdGFncycgJworCWVjaG8gIkFeMCIgPmV4cGVjdCAmJgorCXRhZ19vYmplY3Q9JChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9BKSAmJgorCWdpdCBkZXNjcmliZSAtLWNvbnRhaW5zICR0YWdfb2JqZWN0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvICJBXjAiID5leHBlY3QgJiYKKwl0YWdnZWRfY29tbWl0PSQoZ2l0IHJldi1wYXJzZSAicmVmcy90YWdzL0FeMCIpICYmCisJZ2l0IGRlc2NyaWJlIC0tY29udGFpbnMgJHRhZ2dlZF9jb21taXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MDAxLW12LnNoIGIvdC90NzAwMS1tdi5zaAppbmRleCBhODQ1YjE1Li4xMDE4MTZlIDEwMDc1NQotLS0gYS90L3Q3MDAxLW12LnNoCisrKyBiL3QvdDcwMDEtbXYuc2gKQEAgLTIxOCwxMyArMjE4LDEzIEBACiAKIHJtIC1mIGRpcnR5IGRpcnR5MgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdnaXQgbXYgc2hvdWxkIG92ZXJ3cml0ZSBzeW1saW5rIHRvIGEgZmlsZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG12IHNob3VsZCBvdmVyd3JpdGUgc3ltbGluayB0byBhIGZpbGUnICcKIAogCXJtIC1mciAuZ2l0ICYmCiAJZ2l0IGluaXQgJiYKIAllY2hvIDEgPm1vdmVkICYmCi0JbG4gLXMgbW92ZWQgc3ltbGluayAmJgotCWdpdCBhZGQgbW92ZWQgc3ltbGluayAmJgorCXRlc3RfbG5fc19hZGQgbW92ZWQgc3ltbGluayAmJgorCWdpdCBhZGQgbW92ZWQgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbXYgbW92ZWQgc3ltbGluayAmJgogCWdpdCBtdiAtZiBtb3ZlZCBzeW1saW5rICYmCiAJISB0ZXN0IC1lIG1vdmVkICYmCkBAIC0yMzcsMjIgKzIzNywyNiBAQAogCiBybSAtZiBtb3ZlZCBzeW1saW5rCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2dpdCBtdiBzaG91bGQgb3ZlcndyaXRlIGZpbGUgd2l0aCBhIHN5bWxpbmsnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBtdiBzaG91bGQgb3ZlcndyaXRlIGZpbGUgd2l0aCBhIHN5bWxpbmsnICcKIAogCXJtIC1mciAuZ2l0ICYmCiAJZ2l0IGluaXQgJiYKIAllY2hvIDEgPm1vdmVkICYmCi0JbG4gLXMgbW92ZWQgc3ltbGluayAmJgotCWdpdCBhZGQgbW92ZWQgc3ltbGluayAmJgorCXRlc3RfbG5fc19hZGQgbW92ZWQgc3ltbGluayAmJgorCWdpdCBhZGQgbW92ZWQgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbXYgc3ltbGluayBtb3ZlZCAmJgogCWdpdCBtdiAtZiBzeW1saW5rIG1vdmVkICYmCiAJISB0ZXN0IC1lIHN5bWxpbmsgJiYKLQl0ZXN0IC1oIG1vdmVkICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKIAlnaXQgZGlmZi1maWxlcyAtLXF1aWV0CiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnY2hlY2sgbW92ZWQgc3ltbGluaycgJworCisJdGVzdCAtaCBtb3ZlZAorJworCiBybSAtZiBtb3ZlZCBzeW1saW5rCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzAxMS1za2lwLXdvcmt0cmVlLXJlYWRpbmcuc2ggYi90L3Q3MDExLXNraXAtd29ya3RyZWUtcmVhZGluZy5zaAppbmRleCA4ZjNiNTRkLi44OGQ2MGMxIDEwMDc1NQotLS0gYS90L3Q3MDExLXNraXAtd29ya3RyZWUtcmVhZGluZy5zaAorKysgYi90L3Q3MDExLXNraXAtd29ya3RyZWUtcmVhZGluZy5zaApAQCAtOTEsMTIgKzkxLDEyIEBACiAJdGVzdF9jbXAgZXhwZWN0ZWQgMQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtLWRlbGV0ZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgLS1kZWxldGVkJyAnCiAJc2V0dXBfYWJzZW50ICYmCiAJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLWQpIgogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtLWRlbGV0ZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgLS1kZWxldGVkJyAnCiAJc2V0dXBfZGlydHkgJiYKIAl0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAtZCkiCiAnCmRpZmYgLS1naXQgYS90L3Q3MTAyLXJlc2V0LnNoIGIvdC90NzEwMi1yZXNldC5zaAppbmRleCBkZjgyZWM5Li44ZDRiNTBkIDEwMDc1NQotLS0gYS90L3Q3MTAyLXJlc2V0LnNoCisrKyBiL3QvdDcxMDItcmVzZXQuc2gKQEAgLTksNiArOSwxOSBAQAogCiAuIC4vdGVzdC1saWIuc2gKIAorY29tbWl0X21zZyAoKSB7CisJIyBTdHJpbmcgIm1vZGlmeSAybmQgZmlsZSAoY2hhbmdlZCkiIHBhcnRseSBpbiBHZXJtYW4KKwkjICh0cmFuc2xhdGVkIHdpdGggR29vZ2xlIFRyYW5zbGF0ZSksCisJIyBlbmNvZGVkIGluIFVURi04LCB1c2VkIGFzIGEgY29tbWl0IGxvZyBtZXNzYWdlIGJlbG93LgorCW1zZz0ibW9kaWZ5IDJuZCBmaWxlIChnZVwzMDNcMjQ0bmRlcnQpXG4iCisJaWYgdGVzdCAtbiAiJDEiCisJdGhlbgorCQlwcmludGYgIiRtc2ciIHwgaWNvbnYgLWYgdXRmLTggLXQgIiQxIgorCWVsc2UKKwkJcHJpbnRmICIkbXNnIgorCWZpCit9CisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0aW5nIGluaXRpYWwgZmlsZXMgYW5kIGNvbW1pdHMnICcKIAl0ZXN0X3RpY2sgJiYKIAllY2hvICIxc3QgZmlsZSIgPmZpcnN0ICYmCkBAIC0yOCw3ICs0MSw3IEBACiAKIAllY2hvICIxc3QgbGluZSAybmQgZmlsZSIgPnNlY29uZGZpbGUgJiYKIAllY2hvICIybmQgbGluZSAybmQgZmlsZSIgPj5zZWNvbmRmaWxlICYmCi0JZ2l0IGNvbW1pdCAtYSAtbSAibW9kaWZ5IDJuZCBmaWxlIiAmJgorCWdpdCAtYyAiaTE4bi5jb21taXRFbmNvZGluZz1pc284ODU5LTEiIGNvbW1pdCAtYSAtbSAiJChjb21taXRfbXNnIGlzbzg4NTktMSkiICYmCiAJaGVhZDU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCiAnCiAjIGdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSAjIHRvIHNlZSB0aG9zZSBTSEExIGludm9sdmVkCkBAIC00NCw2ICs1NywyMCBAQAogCWRvbmUgfCB0ZXN0X2NtcCAuY2F0X2V4cGVjdCAtCiB9CiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0taGFyZCBtZXNzYWdlJyAnCisJaGV4PSQoZ2l0IGxvZyAtMSAtLWZvcm1hdD0iJWgiKSAmJgorCWdpdCByZXNldCAtLWhhcmQgPiAuYWN0dWFsICYmCisJZWNobyBIRUFEIGlzIG5vdyBhdCAkaGV4ICQoY29tbWl0X21zZykgPiAuZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCAuZXhwZWN0ZWQgLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWhhcmQgbWVzc2FnZSAoaXNvODg1OS0xIGxvZ291dHB1dGVuY29kaW5nKScgJworCWhleD0kKGdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVoIikgJiYKKwlnaXQgLWMgImkxOG4ubG9nT3V0cHV0RW5jb2Rpbmc9aXNvODg1OS0xIiByZXNldCAtLWhhcmQgPiAuYWN0dWFsICYmCisJZWNobyBIRUFEIGlzIG5vdyBhdCAkaGV4ICQoY29tbWl0X21zZyBpc284ODU5LTEpID4gLmV4cGVjdGVkICYmCisJdGVzdF9jbXAgLmV4cGVjdGVkIC5hY3R1YWwKKycKKwogPi5kaWZmX2V4cGVjdAogPi5jYWNoZWRfZXhwZWN0CiBjYXQgPi5jYXRfZXhwZWN0IDw8RU9GCkBAIC0xOTIsNyArMjE5LDggQEAKIAknY2hhbmdpbmcgZmlsZXMgYW5kIHJlZG8gdGhlIGxhc3QgY29tbWl0IHNob3VsZCBzdWNjZWVkJyAnCiAJZWNobyAiM3JkIGxpbmUgMm5kIGZpbGUiID4+c2Vjb25kZmlsZSAmJgogCWdpdCBjb21taXQgLWEgLUMgT1JJR19IRUFEICYmCi0JY2hlY2tfY2hhbmdlcyAzZDNiN2JlMDExYTU4Y2EwYzE3OWFlNDVkOTRlNmM4M2MwYjBjZDBkICYmCisJaGVhZDQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJY2hlY2tfY2hhbmdlcyAkaGVhZDQgJiYKIAl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgT1JJR19IRUFEKSIgPSBcCiAJCQkkaGVhZDUKICcKQEAgLTIxMSw3ICsyMzksNyBAQAogCWdpdCByZXNldCAtLWhhcmQgSEVBRH4yICYmCiAJY2hlY2tfY2hhbmdlcyBkZGFlZmUwMGYxZGExNjg2NDU5MWM2MWZkYzdhZGI1ZDdjZDZiNzRlICYmCiAJdGVzdCAiJChnaXQgcmV2LXBhcnNlIE9SSUdfSEVBRCkiID0gXAotCQkJM2QzYjdiZTAxMWE1OGNhMGMxNzlhZTQ1ZDk0ZTZjODNjMGIwY2QwZAorCQkJJGhlYWQ0CiAnCiAKID4uZGlmZl9leHBlY3QKQEAgLTMwMyw3ICszMzEsNyBAQAogCiAJZWNobyAiMXN0IGxpbmUgMm5kIGZpbGUiID5zZWNvbmRmaWxlICYmCiAJZWNobyAiMm5kIGxpbmUgMm5kIGZpbGUiID4+c2Vjb25kZmlsZSAmJgotCWdpdCBjb21taXQgLWEgLW0gIm1vZGlmeSAybmQgZmlsZSIgJiYKKwlnaXQgLWMgImkxOG4uY29tbWl0RW5jb2Rpbmc9aXNvODg1OS0xIiBjb21taXQgLWEgLW0gIiQoY29tbWl0X21zZyBpc284ODU5LTEpIiAmJgogCWNoZWNrX2NoYW5nZXMgJGhlYWQ1CiAnCiAKQEAgLTMyNiwxMCArMzU0LDExIEBACiAJZ2l0IGNoZWNrb3V0IGJyYW5jaDIgJiYKIAllY2hvICIzcmQgbGluZSBpbiBicmFuY2gyIiA+PnNlY29uZGZpbGUgJiYKIAlnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2UgaW4gYnJhbmNoMiIgJiYKKwloZWFkMz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKIAogCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC4gYnJhbmNoMSAmJgogCWdpdCByZXNldCAtLWhhcmQgJiYKLQljaGVja19jaGFuZ2VzIDc3YWJiMzM3MDczZmI0MzY5YTdhZDY5ZmY2ZjVlYzBlNGQ2YjU0YmIKKwljaGVja19jaGFuZ2VzICRoZWFkMwogJwogCiA+LmRpZmZfZXhwZWN0CkBAIC00NTcsNyArNDg2LDcgQEAKIAl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLXF1aWV0IC0tIHNlY29uZGZpbGUgJiYKIAl0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkIC0tbmFtZS1vbmx5KSIgJiYKIAl0ZXN0IC1mIHNlY29uZGZpbGUgJiYKLQl0ZXN0ICEgLXMgc2Vjb25kZmlsZQorCXRlc3RfbXVzdF9iZV9lbXB0eSBzZWNvbmRmaWxlCiAKICcKIApkaWZmIC0tZ2l0IGEvdC90NzIwMS1jby5zaCBiL3QvdDcyMDEtY28uc2gKaW5kZXggYmU5NjcyZS4uMGM5ZWMwYSAxMDA3NTUKLS0tIGEvdC90NzIwMS1jby5zaAorKysgYi90L3Q3MjAxLWNvLnNoCkBAIC00MzEsNiArNDMxLDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2NoZWNrb3V0IHdpdGggLS10cmFjayBmYWtlcyBhIHNlbnNpYmxlIC1iIDxuYW1lPicgJworICAgIGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi5mZXRjaCAiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiICYmCiAgICAgZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9rb2FsYS9iZWFyIHJlbmFtZXIgJiYKIAogICAgIGdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi9rb2FsYS9iZWFyICYmCmRpZmYgLS1naXQgYS90L3Q3MzAxLWNsZWFuLWludGVyYWN0aXZlLnNoIGIvdC90NzMwMS1jbGVhbi1pbnRlcmFjdGl2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZTYwNTVkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzMwMS1jbGVhbi1pbnRlcmFjdGl2ZS5zaApAQCAtMCwwICsxLDQzOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjbGVhbiAtaSBiYXNpYyB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwlta2RpciAtcCBzcmMgJiYKKwl0b3VjaCBzcmMvcGFydDEuYyBNYWtlZmlsZSAmJgorCWVjaG8gYnVpbGQgPi5naXRpZ25vcmUgJiYKKwllY2hvIFwqLm8gPj4uZ2l0aWdub3JlICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSBzZXR1cCAmJgorCXRvdWNoIHNyYy9wYXJ0Mi5jIFJFQURNRSAmJgorCWdpdCBhZGQgLgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaSAoY2xlYW4pJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwllY2hvIGMgfCBnaXQgY2xlYW4gLWkgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pIChxdWl0KScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZWNobyBxIHwgZ2l0IGNsZWFuIC1pICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pIChDdHJsK0QpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwllY2hvICJcMDQiIHwgZ2l0IGNsZWFuIC1pICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoZmlsdGVyIGFsbCknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCShlY2hvIGY7IGVjaG8gIioiOyBlY2hvOyBlY2hvIGMpIHwgXAorCWdpdCBjbGVhbiAtaWQgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIChmaWx0ZXIgcGF0dGVybnMpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwkoZWNobyBmOyBlY2hvICJwYXJ0My4qICoub3V0IjsgZWNobzsgZWNobyBjKSB8IFwKKwlnaXQgY2xlYW4gLWlkICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoZmlsdGVyIHBhdHRlcm5zIDIpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwkoZWNobyBmOyBlY2hvICIqICEqLm91dCI7IGVjaG87IGVjaG8gYykgfCBcCisJZ2l0IGNsZWFuIC1pZCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoc2VsZWN0IC0gYWxsKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJKGVjaG8gczsgZWNobyAiKiI7IGVjaG87IGVjaG8gYykgfCBcCisJZ2l0IGNsZWFuIC1pZCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgISAtZiBzcmMvcGFydDQuaCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaWQgKHNlbGVjdCAtIG5vbmUpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwkoZWNobyBzOyBlY2hvOyBlY2hvIGMpIHwgXAorCWdpdCBjbGVhbiAtaWQgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIChzZWxlY3QgLSBudW1iZXIpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwkoZWNobyBzOyBlY2hvIDM7IGVjaG87IGVjaG8gYykgfCBcCisJZ2l0IGNsZWFuIC1pZCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAtZiBhLm91dCAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoc2VsZWN0IC0gbnVtYmVyIDIpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwkoZWNobyBzOyBlY2hvIDIgMzsgZWNobyA1OyBlY2hvOyBlY2hvIGMpIHwgXAorCWdpdCBjbGVhbiAtaWQgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIChzZWxlY3QgLSBudW1iZXIgMyknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCShlY2hvIHM7IGVjaG8gMyw0IDU7IGVjaG87IGVjaG8gYykgfCBcCisJZ2l0IGNsZWFuIC1pZCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAtZiBhLm91dCAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAtZiBzcmMvcGFydDQuaCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaWQgKHNlbGVjdCAtIHJhbmdlKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJKGVjaG8gczsgZWNobyAxLDMtNDsgZWNobyAyOyBlY2hvOyBlY2hvIGMpIHwgXAorCWdpdCBjbGVhbiAtaWQgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAhIC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaWQgKHNlbGVjdCAtIHJhbmdlIDIpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwkoZWNobyBzOyBlY2hvIDQtIDE7IGVjaG87IGVjaG8gYykgfCBcCisJZ2l0IGNsZWFuIC1pZCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoaW52ZXJzZSBzZWxlY3QpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwkoZWNobyBzOyBlY2hvICIqIjsgZWNobyAtNS0gMSAtMjsgZWNobzsgZWNobyBjKSB8IFwKKwlnaXQgY2xlYW4gLWlkICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoYXNrKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJKGVjaG8gYTsgZWNobyBZOyBlY2hvIHk7IGVjaG8gbm87IGVjaG8geWVzOyBlY2hvIGJhZDsgZWNobykgfCBcCisJZ2l0IGNsZWFuIC1pZCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAtZiBzcmMvcGFydDQuaCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaWQgKGFzayAtIEN0cmwrRCknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCShlY2hvIGE7IGVjaG8gWTsgZWNobyBubzsgZWNobyB5ZXM7IGVjaG8gIlwwNCIpIHwgXAorCWdpdCBjbGVhbiAtaWQgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCB3aXRoIHByZWZpeCBhbmQgcGF0aCAoZmlsdGVyKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJKGNkIGJ1aWxkLyAmJiBcCisJIChlY2hvIGY7IGVjaG8gImRvY3MiOyBlY2hvICIqLmgiOyBlY2hvIDsgZWNobyBjKSB8IFwKKwkgZ2l0IGNsZWFuIC1pZCAuLikgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIHdpdGggcHJlZml4IGFuZCBwYXRoIChzZWxlY3QgYnkgbmFtZSknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCShjZCBidWlsZC8gJiYgXAorCSAoZWNobyBzOyBlY2hvICIuLi9kb2NzLyI7IGVjaG8gIi4uL3NyYy9wYXJ0My5jIjsgXAorCSAgZWNobyAiLi4vc3JjL3BhcnQ0LmMiOyAgZWNobzsgZWNobyBjKSB8IFwKKwkgZ2l0IGNsZWFuIC1pZCAuLikgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIHdpdGggcHJlZml4IGFuZCBwYXRoIChhc2spJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwkoY2QgYnVpbGQvICYmIFwKKwkgKGVjaG8gYTsgZWNobyBZOyBlY2hvIHk7IGVjaG8gbm87IGVjaG8geWVzOyBlY2hvIGJhZDsgZWNobykgfCBcCisJIGdpdCBjbGVhbiAtaWQgLi4pICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDAwLXN1Ym1vZHVsZS1iYXNpYy5zaCBiL3QvdDc0MDAtc3VibW9kdWxlLWJhc2ljLnNoCmluZGV4IGZmMjY1MzUuLjVlZTk3YjAgMTAwNzU1Ci0tLSBhL3QvdDc0MDAtc3VibW9kdWxlLWJhc2ljLnNoCisrKyBiL3QvdDc0MDAtc3VibW9kdWxlLWJhc2ljLnNoCkBAIC03OCw3ICs3OCw3IEBACiAJKAogCQljZCBhZGR0ZXN0ICYmCiAJCWdpdCBzdWJtb2R1bGUgYWRkIC1xICIkc3VibW9kdXJsIiBzdWJtb2QgPmFjdHVhbCAmJgotCQl0ZXN0ICEgLXMgYWN0dWFsICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKIAkJZWNobyAiZ2l0ZGlyOiAuLi8uZ2l0L21vZHVsZXMvc3VibW9kIiA+ZXhwZWN0ICYmCiAJCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvLmdpdCAmJgogCQkoCkBAIC0yMTIsNiArMjEyLDMyIEBACiAJdGVzdF9jbXAgZW1wdHkgdW50cmFja2VkCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgaW4gc3ViZGlyZWN0b3J5JyAnCisJZWNobyAicmVmcy9oZWFkcy9tYXN0ZXIiID5leHBlY3QgJiYKKwk+ZW1wdHkgJiYKKworCW1rZGlyIGFkZHRlc3Qvc3ViICYmCisJKAorCQljZCBhZGR0ZXN0L3N1YiAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAiJHN1Ym1vZHVybCIgLi4vcmVhbHN1Ym1vZDMgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0CisJKSAmJgorCisJcm0gLWYgaGVhZHMgaGVhZCB1bnRyYWNrZWQgJiYKKwlpbnNwZWN0IGFkZHRlc3QvcmVhbHN1Ym1vZDMgLi4vLi4gJiYKKwl0ZXN0X2NtcCBleHBlY3QgaGVhZHMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgaGVhZCAmJgorCXRlc3RfY21wIGVtcHR5IHVudHJhY2tlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIGluIHN1YmRpcmVjdG9yeSB3aXRoIHJlbGF0aXZlIHBhdGggc2hvdWxkIGZhaWwnICcKKwkoCisJCWNkIGFkZHRlc3Qvc3ViICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgYWRkIC4uLy4uLyBzdWJtb2QzIDI+Li4vLi4vb3V0cHV0LmVycgorCSkgJiYKKwl0ZXN0X2kxOG5ncmVwIHRvcGxldmVsIG91dHB1dC5lcnIKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgLSBhZGQgYW4gZXhhbXBsZSBlbnRyeSB0byAuZ2l0bW9kdWxlcycgJwogCUdJVF9DT05GSUc9LmdpdG1vZHVsZXMgXAogCWdpdCBjb25maWcgc3VibW9kdWxlLmV4YW1wbGUudXJsIGdpdDovL2V4YW1wbGUuY29tL2luaXQuZ2l0CkBAIC0zMDgsNyArMzM0LDcgQEAKIAogCW1rZGlyIGluaXQgJiYKIAlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtcSA+dXBkYXRlLm91dCAmJgotCXRlc3QgISAtcyB1cGRhdGUub3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHVwZGF0ZS5vdXQgJiYKIAogCWluc3BlY3QgaW5pdCAmJgogCXRlc3RfY21wIGV4cGVjdCBoZWFkLXNoYTEKQEAgLTMxOSw2ICszNDUsMjYgQEAKIAlncmVwICJeICRyZXYxIiBsaXN0CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAidXAtdG8tZGF0ZSIgZnJvbSBzdWJkaXJlY3RvcnknICcKKwlta2RpciAtcCBzdWIgJiYKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgc3VibW9kdWxlIHN0YXR1cyA+Li4vbGlzdAorCSkgJiYKKwlncmVwICJeICRyZXYxIiBsaXN0ICYmCisJZ3JlcCAiXFwuXFwuL2luaXQiIGxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzICJ1cC10by1kYXRlIiBmcm9tIHN1YmRpcmVjdG9yeSB3aXRoIHBhdGgnICcKKwlta2RpciAtcCBzdWIgJiYKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgc3VibW9kdWxlIHN0YXR1cyAuLi9pbml0ID4uLi9saXN0CisJKSAmJgorCWdyZXAgIl4gJHJldjEiIGxpc3QgJiYKKwlncmVwICJcXC5cXC4vaW5pdCIgbGlzdAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc2hvdWxkIGJlICJtb2RpZmllZCIgYWZ0ZXIgc3VibW9kdWxlIGNvbW1pdCcgJwogCSgKIAkJY2QgaW5pdCAmJgpAQCAtMzk5LDYgKzQ0NSwyNSBAQAogCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgaW5pdC8uZ2l0CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSAtLWluaXQgZnJvbSBzdWJkaXJlY3RvcnknICcKKwltdiBpbml0IGluaXQyICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuZXhhbXBsZS51cmwgIiQocHdkKS9pbml0MiIgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLmV4YW1wbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIHN1Ym1vZHVsZS5leGFtcGxlLnVybCAmJgorCisJbWtkaXIgLXAgc3ViICYmCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLi4vaW5pdCA+dXBkYXRlLm91dCAmJgorCQljYXQgdXBkYXRlLm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJub3QgaW5pdGlhbGl6ZWQiIHVwZGF0ZS5vdXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciAuLi9pbml0Ly5naXQgJiYKKworCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLi4vaW5pdAorCSkgJiYKKwlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIGluaXQvLmdpdAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgYWRkIGZpbGVzIGZyb20gYSBzdWJtb2R1bGUnICcKIAogCWdpdCByZXNldCAtLWhhcmQgJiYKQEAgLTY5Niw3ICs3NjEsNyBAQAogCQlybSAtcmYgcmVwbyAmJgogCQlnaXQgcm0gcmVwbyAmJgogCQlnaXQgc3VibW9kdWxlIGFkZCAtcSAtLW5hbWUgcmVwb19uZXcgIiRzdWJtb2R1cmwvYmFyZS5naXQiIHJlcG8gPmFjdHVhbCAmJgotCQl0ZXN0ICEgLXMgYWN0dWFsICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKIAkJZWNobyAiZ2l0ZGlyOiAuLi8uZ2l0L21vZHVsZXMvc3VibW9kIiA+ZXhwZWN0ICYmCiAJCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvLmdpdCAmJgogCQkoCkBAIC03NzIsNiArODM3LDIxIEBACiAJcm1kaXIgaW5pdAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgZGVpbml0IGZyb20gc3ViZGlyZWN0b3J5JyAnCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0ICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuZXhhbXBsZS5mb28gYmFyICYmCisJbWtkaXIgLXAgc3ViICYmCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBkZWluaXQgLi4vaW5pdCA+Li4vb3V0cHV0CisJKSAmJgorCWdyZXAgIlxcLlxcLi9pbml0IiBvdXRwdXQgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICJzdWJtb2R1bGVcLmV4YW1wbGVcLiIpIiAmJgorCXRlc3QgLW4gIiQoZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgInN1Ym1vZHVsZVwuZXhhbXBsZTJcLiIpIiAmJgorCXRlc3QgLWYgZXhhbXBsZTIvLmdpdCAmJgorCXJtZGlyIGluaXQKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGRlaW5pdCAuIGRlaW5pdHMgYWxsIGluaXRpYWxpemVkIHN1Ym1vZHVsZXMnICcKIAlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgJiYKIAlnaXQgY29uZmlnIHN1Ym1vZHVsZS5leGFtcGxlLmZvbyBiYXIgJiYKQEAgLTg2OCw0ICs5NDgsMzUgQEAKIAl0ZXN0IC1uICIkKGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICJzdWJtb2R1bGVcLmV4YW1wbGVcLiIpIgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgd2l0aCBVVEYtOCBuYW1lJyAnCisJc3ZuYW1lPSQocHJpbnRmICJcMzAzXDI0NSBcMzAzXDI0NFwzMDNcMjY2IikgJiYKKwlta2RpciAiJHN2bmFtZSIgJiYKKwkoCisJCWNkICIkc3ZuYW1lIiAmJgorCQlnaXQgaW5pdCAmJgorCQk+c3ViICYmCisJCWdpdCBhZGQgc3ViICYmCisJCWdpdCBjb21taXQgLW0gImluaXQgc3ViIgorCSkgJiYKKwl0ZXN0X2NvbmZpZyBjb3JlLnByZWNvbXBvc2V1bmljb2RlIHRydWUgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuLyIkc3ZuYW1lIiAmJgorCWdpdCBzdWJtb2R1bGUgPiYyICYmCisJdGVzdCAtbiAiJChnaXQgc3VibW9kdWxlIHwgZ3JlcCAiJHN2bmFtZSIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIGNsb25lIHNoYWxsb3cgc3VibW9kdWxlJyAnCisJbWtkaXIgc3VwZXIgJiYKKwlwd2Q9JChwd2QpCisJKAorCQljZCBzdXBlciAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAtLWRlcHRoPTEgZmlsZTovLyIkcHdkIi9leGFtcGxlMiBzdWJtb2R1bGUgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQl0ZXN0IDEgPSAkKGdpdCBsb2cgLS1vbmVsaW5lIHwgd2MgLWwpCisJCSkKKwkpCisnCisKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDAxLXN1Ym1vZHVsZS1zdW1tYXJ5LnNoIGIvdC90NzQwMS1zdWJtb2R1bGUtc3VtbWFyeS5zaAppbmRleCAzMGI0MjllLi5hYzI0MzRjIDEwMDc1NQotLS0gYS90L3Q3NDAxLXN1Ym1vZHVsZS1zdW1tYXJ5LnNoCisrKyBiL3QvdDc0MDEtc3VibW9kdWxlLXN1bW1hcnkuc2gKQEAgLTQ1LDYgKzQ1LDQyIEBACiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAiCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZGVkIHN1Ym1vZHVsZSAoc3ViZGlyZWN0b3J5KScgIgorCW1rZGlyIHN1YiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSA+Li4vYWN0dWFsCisJKSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIC4uL3NtMSAwMDAwMDAwLi4uJGhlYWQxICgyKToKKyAgPiBBZGQgZm9vMgorCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkZWQgc3VibW9kdWxlIChzdWJkaXJlY3Rvcnkgb25seSknICIKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgc3VibW9kdWxlIHN1bW1hcnkgLiA+Li4vYWN0dWFsCisJKSAmJgorCT5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGRlZCBzdWJtb2R1bGUgKHN1YmRpcmVjdG9yeSB3aXRoIGV4cGxpY2l0IHBhdGgpJyAiCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5IC4uL3NtMSA+Li4vYWN0dWFsCisJKSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIC4uL3NtMSAwMDAwMDAwLi4uJGhlYWQxICgyKToKKyAgPiBBZGQgZm9vMgorCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwogY29tbWl0X2ZpbGUgc20xICYmCiBoZWFkMj0kKGFkZF9maWxlIHNtMSBmb28zKQogCkBAIC03Niw4ICsxMTIsOCBAQAogKQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUoYmFja3dhcmQpJyAiCi0gICAgZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5ID5hY3R1YWwgJiYKLSAgICBjYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKICogc20xICRoZWFkMi4uLiRoZWFkMyAoMik6CiAgIDwgQWRkIGZvbzMKICAgPCBBZGQgZm9vMgpAQCAtODksOCArMTI1LDggQEAKIGhlYWQ0PSQoYWRkX2ZpbGUgc20xIGZvbzQgZm9vNSkgJiYKIGhlYWQ0X2Z1bGw9JChHSVRfRElSPXNtMS8uZ2l0IGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZShiYWNrd2FyZCBhbmQgZm9yd2FyZCknICIKLSAgICBnaXQgc3VibW9kdWxlIHN1bW1hcnkgPmFjdHVhbCAmJgotICAgIGNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgogKiBzbTEgJGhlYWQyLi4uJGhlYWQ0ICg0KToKICAgPiBBZGQgZm9vNQogICA+IEFkZCBmb280CkBAIC0xMDIsMTUgKzEzOCwxNSBAQAogIgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXN1bW1hcnktbGltaXQnICIKLSAgICBnaXQgc3VibW9kdWxlIHN1bW1hcnkgLW4gMyA+YWN0dWFsICYmCi0gICAgY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgLW4gMyA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKICogc20xICRoZWFkMi4uLiRoZWFkNCAoNCk6CiAgID4gQWRkIGZvbzUKICAgPiBBZGQgZm9vNAogICA8IEFkZCBmb28zCiAKIEVPRgotICAgIHRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogIgogCiBjb21taXRfZmlsZSBzbTEgJiYKQEAgLTEyMiw4ICsxNTgsOCBAQAogbXYgc20xLWJhayBzbTEKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndHlwZWNoYW5nZWQgc3VibW9kdWxlKHN1Ym1vZHVsZS0+YmxvYiksIC0tY2FjaGVkJyAiCi0gICAgZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5IC0tY2FjaGVkID5hY3R1YWwgJiYKLSAgICBjYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSAtLWNhY2hlZCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKICogc20xICRoZWFkNChzdWJtb2R1bGUpLT4kaGVhZDUoYmxvYikgKDMpOgogICA8IEFkZCBmb281CiAKQEAgLTEzMiw1OSArMTY4LDU5IEBACiAiCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R5cGVjaGFuZ2VkIHN1Ym1vZHVsZShzdWJtb2R1bGUtPmJsb2IpLCAtLWZpbGVzJyAiCi0gICAgZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5IC0tZmlsZXMgPmFjdHVhbCAmJgotICAgIGNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5IC0tZmlsZXMgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCiAqIHNtMSAkaGVhZDUoYmxvYiktPiRoZWFkNChzdWJtb2R1bGUpICgzKToKICAgPiBBZGQgZm9vNQogCiBFT0YKLSAgICB0ZXN0X2kxOG5jbXAgYWN0dWFsIGV4cGVjdGVkCisJdGVzdF9pMThuY21wIGFjdHVhbCBleHBlY3RlZAogIgogCiBybSAtcmYgc20xICYmCiBnaXQgY2hlY2tvdXQtaW5kZXggc20xCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0eXBlY2hhbmdlZCBzdWJtb2R1bGUoc3VibW9kdWxlLT5ibG9iKScgIgotICAgIGdpdCBzdWJtb2R1bGUgc3VtbWFyeSA+YWN0dWFsICYmCi0gICAgY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCiAqIHNtMSAkaGVhZDQoc3VibW9kdWxlKS0+JGhlYWQ1KGJsb2IpOgogCiBFT0YKLSAgICB0ZXN0X2kxOG5jbXAgYWN0dWFsIGV4cGVjdGVkCisJdGVzdF9pMThuY21wIGFjdHVhbCBleHBlY3RlZAogIgogCiBybSAtZiBzbTEgJiYKIHRlc3RfY3JlYXRlX3JlcG8gc20xICYmCiBoZWFkNj0kKGFkZF9maWxlIHNtMSBmb282IGZvbzcpCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdub25leGlzdGVudCBjb21taXQnICIKLSAgICBnaXQgc3VibW9kdWxlIHN1bW1hcnkgPmFjdHVhbCAmJgotICAgIGNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgogKiBzbTEgJGhlYWQ0Li4uJGhlYWQ2OgogICBXYXJuOiBzbTEgZG9lc24ndCBjb250YWluIGNvbW1pdCAkaGVhZDRfZnVsbAogCiBFT0YKLSAgICB0ZXN0X2kxOG5jbXAgYWN0dWFsIGV4cGVjdGVkCisJdGVzdF9pMThuY21wIGFjdHVhbCBleHBlY3RlZAogIgogCiBjb21taXRfZmlsZQogdGVzdF9leHBlY3Rfc3VjY2VzcyAndHlwZWNoYW5nZWQgc3VibW9kdWxlKGJsb2ItPnN1Ym1vZHVsZSknICIKLSAgICBnaXQgc3VibW9kdWxlIHN1bW1hcnkgPmFjdHVhbCAmJgotICAgIGNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgogKiBzbTEgJGhlYWQ1KGJsb2IpLT4kaGVhZDYoc3VibW9kdWxlKSAoMik6CiAgID4gQWRkIGZvbzcKIAogRU9GCi0gICAgdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKICIKIAogY29tbWl0X2ZpbGUgc20xICYmCiBybSAtcmYgc20xCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGVkIHN1Ym1vZHVsZScgIgotICAgIGdpdCBzdWJtb2R1bGUgc3VtbWFyeSA+YWN0dWFsICYmCi0gICAgY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCiAqIHNtMSAkaGVhZDYuLi4wMDAwMDAwOgogCiBFT0YKLSAgICB0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICIKIAogdGVzdF9jcmVhdGVfcmVwbyBzbTIgJiYKQEAgLTE5Miw0MyArMjI4LDQzIEBACiBnaXQgYWRkIHNtMgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBzdWJtb2R1bGVzJyAiCi0gICAgZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5ID5hY3R1YWwgJiYKLSAgICBjYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKICogc20xICRoZWFkNi4uLjAwMDAwMDA6CiAKICogc20yIDAwMDAwMDAuLi4kaGVhZDcgKDIpOgogICA+IEFkZCBmb285CiAKIEVPRgotICAgIHRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogIgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRoIGZpbHRlcicgIgotICAgIGdpdCBzdWJtb2R1bGUgc3VtbWFyeSBzbTIgPmFjdHVhbCAmJgotICAgIGNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5IHNtMiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKICogc20yIDAwMDAwMDAuLi4kaGVhZDcgKDIpOgogICA+IEFkZCBmb285CiAKIEVPRgotICAgIHRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogIgogCiBjb21taXRfZmlsZSBzbTIKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdmVuIGNvbW1pdCcgIgotICAgIGdpdCBzdWJtb2R1bGUgc3VtbWFyeSBIRUFEXiA+YWN0dWFsICYmCi0gICAgY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgSEVBRF4gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCiAqIHNtMSAkaGVhZDYuLi4wMDAwMDAwOgogCiAqIHNtMiAwMDAwMDAwLi4uJGhlYWQ3ICgyKToKICAgPiBBZGQgZm9vOQogCiBFT0YKLSAgICB0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICIKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1mb3Itc3RhdHVzJyAiCi0gICAgZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5IC0tZm9yLXN0YXR1cyBIRUFEXiA+YWN0dWFsICYmCi0gICAgdGVzdF9pMThuY21wIGFjdHVhbCAtIDw8RU9GCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5IC0tZm9yLXN0YXR1cyBIRUFEXiA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGFjdHVhbCAtIDw8RU9GCiAjIFN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKICMKICMgKiBzbTEgJGhlYWQ2Li4uMDAwMDAwMDoKQEAgLTI0MCwxNCArMjc2LDE0IEBACiAiCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgd2hlbiB1c2luZyAtLWZpbGVzIHRvZ2V0aGVyIHdpdGggLS1jYWNoZWQnICIKLSAgICB0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHN1bW1hcnkgLS1maWxlcyAtLWNhY2hlZAorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgc3VtbWFyeSAtLWZpbGVzIC0tY2FjaGVkCiAiCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3VsZCBub3QgZmFpbCBpbiBhbiBlbXB0eSByZXBvJyAiCi0gICAgZ2l0IGluaXQgeHl6enkgJiYKLSAgICBjZCB4eXp6eSAmJgotICAgIGdpdCBzdWJtb2R1bGUgc3VtbWFyeSA+b3V0cHV0IDI+JjEgJiYKLSAgICB0ZXN0X2NtcCBvdXRwdXQgL2Rldi9udWxsCisJZ2l0IGluaXQgeHl6enkgJiYKKwljZCB4eXp6eSAmJgorCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSA+b3V0cHV0IDI+JjEgJiYKKwl0ZXN0X2NtcCBvdXRwdXQgL2Rldi9udWxsCiAiCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQwMy1zdWJtb2R1bGUtc3luYy5zaCBiL3QvdDc0MDMtc3VibW9kdWxlLXN5bmMuc2gKaW5kZXggOTRlMjZjNC4uNzliYzEzNSAxMDA3NTUKLS0tIGEvdC90NzQwMy1zdWJtb2R1bGUtc3luYy5zaAorKysgYi90L3Q3NDAzLXN1Ym1vZHVsZS1zeW5jLnNoCkBAIC0xMSwyMTYgKzExLDMzOCBAQAogLiAuL3Rlc3QtbGliLnNoCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJwotCWVjaG8gZmlsZSA+IGZpbGUgJiYKKwllY2hvIGZpbGUgPmZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKIAl0ZXN0X3RpY2sgJiYKIAlnaXQgY29tbWl0IC1tIHVwc3RyZWFtICYmCiAJZ2l0IGNsb25lIC4gc3VwZXIgJiYKIAlnaXQgY2xvbmUgc3VwZXIgc3VibW9kdWxlICYmCi0JKGNkIHN1Ym1vZHVsZSAmJgotCSBnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgc3ViLXN1Ym1vZHVsZSAmJgotCSB0ZXN0X3RpY2sgJiYKLQkgZ2l0IGNvbW1pdCAtbSAic3ViLXN1Ym1vZHVsZSIKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgc3ViLXN1Ym1vZHVsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAic3ViLXN1Ym1vZHVsZSIKIAkpICYmCi0JKGNkIHN1cGVyICYmCi0JIGdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBzdWJtb2R1bGUgJiYKLQkgdGVzdF90aWNrICYmCi0JIGdpdCBjb21taXQgLW0gInN1Ym1vZHVsZSIKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBzdWJtb2R1bGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gInN1Ym1vZHVsZSIKIAkpICYmCiAJZ2l0IGNsb25lIHN1cGVyIHN1cGVyLWNsb25lICYmCi0JKGNkIHN1cGVyLWNsb25lICYmIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSkgJiYKKwkoCisJCWNkIHN1cGVyLWNsb25lICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZQorCSkgJiYKIAlnaXQgY2xvbmUgc3VwZXIgZW1wdHktY2xvbmUgJiYKLQkoY2QgZW1wdHktY2xvbmUgJiYgZ2l0IHN1Ym1vZHVsZSBpbml0KSAmJgorCSgKKwkJY2QgZW1wdHktY2xvbmUgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0CisJKSAmJgogCWdpdCBjbG9uZSBzdXBlciB0b3Atb25seS1jbG9uZSAmJgogCWdpdCBjbG9uZSBzdXBlciByZWxhdGl2ZS1jbG9uZSAmJgotCShjZCByZWxhdGl2ZS1jbG9uZSAmJiBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUpICYmCisJKAorCQljZCByZWxhdGl2ZS1jbG9uZSAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUKKwkpICYmCiAJZ2l0IGNsb25lIHN1cGVyIHJlY3Vyc2l2ZS1jbG9uZSAmJgotCShjZCByZWN1cnNpdmUtY2xvbmUgJiYgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlKQotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2Ugc3VibW9kdWxlJyAnCi0JKGNkIHN1Ym1vZHVsZSAmJgotCSBlY2hvIHNlY29uZCBsaW5lID4+IGZpbGUgJiYKLQkgdGVzdF90aWNrICYmCi0JIGdpdCBjb21taXQgLWEgLW0gImNoYW5nZSBzdWJtb2R1bGUiCisJKAorCQljZCByZWN1cnNpdmUtY2xvbmUgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlCiAJKQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2Ugc3VibW9kdWxlJyAnCisJKAorCQljZCBzdWJtb2R1bGUgJiYKKwkJZWNobyBzZWNvbmQgbGluZSA+PmZpbGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLWEgLW0gImNoYW5nZSBzdWJtb2R1bGUiCisJKQorJworCityZXNldF9zdWJtb2R1bGVfdXJscyAoKSB7CisJbG9jYWwgcm9vdAorCXJvb3Q9JChwd2QpICYmCisJKAorCQljZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCAiJHJvb3Qvc3VibW9kdWxlIgorCSkgJiYKKwkoCisJCWNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZS9zdWItc3VibW9kdWxlICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgIiRyb290L3N1Ym1vZHVsZSIKKwkpCit9CisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZSBzdWJtb2R1bGUgdXJsJyAnCi0JKGNkIHN1cGVyICYmCi0JIGNkIHN1Ym1vZHVsZSAmJgotCSBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCi0JIGdpdCBwdWxsCisJKAorCQljZCBzdXBlciAmJgorCQljZCBzdWJtb2R1bGUgJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgcHVsbAogCSkgJiYKIAltdiBzdWJtb2R1bGUgbW92ZWQtc3VibW9kdWxlICYmCi0JKGNkIG1vdmVkLXN1Ym1vZHVsZSAmJgotCSBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWItc3VibW9kdWxlLnVybCAuLi9tb3ZlZC1zdWJtb2R1bGUgJiYKLQkgdGVzdF90aWNrICYmCi0JIGdpdCBjb21taXQgLWEgLW0gbW92ZWQtc3ViLXN1Ym1vZHVsZQorCSgKKwkJY2QgbW92ZWQtc3VibW9kdWxlICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi1zdWJtb2R1bGUudXJsIC4uL21vdmVkLXN1Ym1vZHVsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBtb3ZlZC1zdWItc3VibW9kdWxlCiAJKSAmJgotCShjZCBzdXBlciAmJgotCSBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsIC4uL21vdmVkLXN1Ym1vZHVsZSAmJgotCSB0ZXN0X3RpY2sgJiYKLQkgZ2l0IGNvbW1pdCAtYSAtbSBtb3ZlZC1zdWJtb2R1bGUKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym1vZHVsZS51cmwgLi4vbW92ZWQtc3VibW9kdWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1hIC1tIG1vdmVkLXN1Ym1vZHVsZQogCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyIgc2hvdWxkIHVwZGF0ZSBzdWJtb2R1bGUgVVJMcycgJwotCShjZCBzdXBlci1jbG9uZSAmJgotCSBnaXQgcHVsbCAtLW5vLXJlY3Vyc2Utc3VibW9kdWxlcyAmJgotCSBnaXQgc3VibW9kdWxlIHN5bmMKKwkoCisJCWNkIHN1cGVyLWNsb25lICYmCisJCWdpdCBwdWxsIC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYwogCSkgJiYKLQl0ZXN0IC1kICIkKGNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZSAmJgotCSBnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsCisJdGVzdCAtZCAiJCgKKwkJY2Qgc3VwZXItY2xvbmUvc3VibW9kdWxlICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwKIAkpIiAmJgotCXRlc3QgISAtZCAiJChjZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUvc3ViLXN1Ym1vZHVsZSAmJgotCSBnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsCisJdGVzdCAhIC1kICIkKAorCQljZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUvc3ViLXN1Ym1vZHVsZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsCiAJKSIgJiYKLQkoY2Qgc3VwZXItY2xvbmUvc3VibW9kdWxlICYmCi0JIGdpdCBjaGVja291dCBtYXN0ZXIgJiYKLQkgZ2l0IHB1bGwKKwkoCisJCWNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZSAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBwdWxsCiAJKSAmJgotCShjZCBzdXBlci1jbG9uZSAmJgotCSB0ZXN0IC1kICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cmwpIgorCSgKKwkJY2Qgc3VwZXItY2xvbmUgJiYKKwkJdGVzdCAtZCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsKSIKIAkpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMgLS1yZWN1cnNpdmUiIHNob3VsZCB1cGRhdGUgYWxsIHN1Ym1vZHVsZSBVUkxzJyAnCi0JKGNkIHN1cGVyLWNsb25lICYmCi0JIChjZCBzdWJtb2R1bGUgJiYKLQkgIGdpdCBwdWxsIC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzCi0JICkgJiYKLQkgZ2l0IHN1Ym1vZHVsZSBzeW5jIC0tcmVjdXJzaXZlCisJKAorCQljZCBzdXBlci1jbG9uZSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCWdpdCBwdWxsIC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzCisJCSkgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzeW5jIC0tcmVjdXJzaXZlCiAJKSAmJgotCXRlc3QgLWQgIiQoY2Qgc3VwZXItY2xvbmUvc3VibW9kdWxlICYmCi0JIGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwKKwl0ZXN0IC1kICIkKAorCQljZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybAogCSkiICYmCi0JdGVzdCAtZCAiJChjZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUvc3ViLXN1Ym1vZHVsZSAmJgotCSBnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsCisJdGVzdCAtZCAiJCgKKwkJY2Qgc3VwZXItY2xvbmUvc3VibW9kdWxlL3N1Yi1zdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybAogCSkiICYmCi0JKGNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZS9zdWItc3VibW9kdWxlICYmCi0JIGdpdCBjaGVja291dCBtYXN0ZXIgJiYKLQkgZ2l0IHB1bGwKKwkoCisJCWNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZS9zdWItc3VibW9kdWxlICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IHB1bGwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IHN1Ym1vZHVsZSBVUkxzJyAnCisJcmVzZXRfc3VibW9kdWxlX3VybHMgc3VwZXItY2xvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyIgc2hvdWxkIHVwZGF0ZSBzdWJtb2R1bGUgVVJMcyAtIHN1YmRpcmVjdG9yeScgJworCSgKKwkJY2Qgc3VwZXItY2xvbmUgJiYKKwkJZ2l0IHB1bGwgLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMgJiYKKwkJbWtkaXIgLXAgc3ViICYmCisJCWNkIHN1YiAmJgorCQlnaXQgc3VibW9kdWxlIHN5bmMgPi4uLy4uL291dHB1dAorCSkgJiYKKwlncmVwICJcXC5cXC4vc3VibW9kdWxlIiBvdXRwdXQgJiYKKwl0ZXN0IC1kICIkKAorCQljZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybAorCSkiICYmCisJdGVzdCAhIC1kICIkKAorCQljZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUvc3ViLXN1Ym1vZHVsZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsCisJKSIgJiYKKwkoCisJCWNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZSAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBwdWxsCisJKSAmJgorCSgKKwkJY2Qgc3VwZXItY2xvbmUgJiYKKwkJdGVzdCAtZCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsKSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMgLS1yZWN1cnNpdmUiIHNob3VsZCB1cGRhdGUgYWxsIHN1Ym1vZHVsZSBVUkxzIC0gc3ViZGlyZWN0b3J5JyAnCisJKAorCQljZCBzdXBlci1jbG9uZSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCWdpdCBwdWxsIC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzCisJCSkgJiYKKwkJbWtkaXIgLXAgc3ViICYmCisJCWNkIHN1YiAmJgorCQlnaXQgc3VibW9kdWxlIHN5bmMgLS1yZWN1cnNpdmUgPi4uLy4uL291dHB1dAorCSkgJiYKKwlncmVwICJcXC5cXC4vc3VibW9kdWxlL3N1Yi1zdWJtb2R1bGUiIG91dHB1dCAmJgorCXRlc3QgLWQgIiQoCisJCWNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsCisJKSIgJiYKKwl0ZXN0IC1kICIkKAorCQljZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUvc3ViLXN1Ym1vZHVsZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsCisJKSIgJiYKKwkoCisJCWNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZS9zdWItc3VibW9kdWxlICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IHB1bGwKIAkpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMiIHNob3VsZCB1cGRhdGUga25vd24gc3VibW9kdWxlIFVSTHMnICcKLQkoY2QgZW1wdHktY2xvbmUgJiYKLQkgZ2l0IHB1bGwgJiYKLQkgZ2l0IHN1Ym1vZHVsZSBzeW5jICYmCi0JIHRlc3QgLWQgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCkiCisJKAorCQljZCBlbXB0eS1jbG9uZSAmJgorCQlnaXQgcHVsbCAmJgorCQlnaXQgc3VibW9kdWxlIHN5bmMgJiYKKwkJdGVzdCAtZCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsKSIKIAkpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMiIHNob3VsZCBub3Qgdml2aWZ5IHVuaW50ZXJlc3Rpbmcgc3VibW9kdWxlJyAnCi0JKGNkIHRvcC1vbmx5LWNsb25lICYmCi0JIGdpdCBwdWxsICYmCi0JIGdpdCBzdWJtb2R1bGUgc3luYyAmJgotCSB0ZXN0IC16ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cmwpIiAmJgotCSBnaXQgc3VibW9kdWxlIHN5bmMgc3VibW9kdWxlICYmCi0JIHRlc3QgLXogIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCkiCisJKAorCQljZCB0b3Atb25seS1jbG9uZSAmJgorCQlnaXQgcHVsbCAmJgorCQlnaXQgc3VibW9kdWxlIHN5bmMgJiYKKwkJdGVzdCAteiAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsKSIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzeW5jIHN1Ym1vZHVsZSAmJgorCQl0ZXN0IC16ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cmwpIgogCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyIgaGFuZGxlcyBvcmlnaW4gVVJMIG9mIHRoZSBmb3JtIGZvbycgJwotCShjZCByZWxhdGl2ZS1jbG9uZSAmJgotCSBnaXQgcmVtb3RlIHNldC11cmwgb3JpZ2luIGZvbyAmJgotCSBnaXQgc3VibW9kdWxlIHN5bmMgJiYKLQkoY2Qgc3VibW9kdWxlICYmCi0JICNhY3R1YWwgZmFpbHMgd2l0aDogImNhbm5vdCBzdHJpcCBvZmYgdXJsIGZvbwotCSB0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIuLi9zdWJtb2R1bGUiCi0JKQorCSgKKwkJY2QgcmVsYXRpdmUtY2xvbmUgJiYKKwkJZ2l0IHJlbW90ZSBzZXQtdXJsIG9yaWdpbiBmb28gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzeW5jICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZSAmJgorCQkJI2FjdHVhbCBmYWlscyB3aXRoOiAiY2Fubm90IHN0cmlwIG9mZiB1cmwgZm9vCisJCQl0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIuLi9zdWJtb2R1bGUiCisJCSkKIAkpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMiIGhhbmRsZXMgb3JpZ2luIFVSTCBvZiB0aGUgZm9ybSBmb28vYmFyJyAnCi0JKGNkIHJlbGF0aXZlLWNsb25lICYmCi0JIGdpdCByZW1vdGUgc2V0LXVybCBvcmlnaW4gZm9vL2JhciAmJgotCSBnaXQgc3VibW9kdWxlIHN5bmMgJiYKLQkoY2Qgc3VibW9kdWxlICYmCi0JICNhY3R1YWwgZm9vL3N1Ym1vZHVsZQotCSB0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIuLi9mb28vc3VibW9kdWxlIgotCSkKLQkoY2Qgc3VibW9kdWxlL3N1Yi1zdWJtb2R1bGUgJiYKLQkgdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgIT0gIi4uLy4uL2Zvby9zdWJtb2R1bGUiCi0JKQorCSgKKwkJY2QgcmVsYXRpdmUtY2xvbmUgJiYKKwkJZ2l0IHJlbW90ZSBzZXQtdXJsIG9yaWdpbiBmb28vYmFyICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYyAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCSNhY3R1YWwgZm9vL3N1Ym1vZHVsZQorCQkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAiLi4vZm9vL3N1Ym1vZHVsZSIKKwkJKSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUvc3ViLXN1Ym1vZHVsZSAmJgorCQkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgIT0gIi4uLy4uL2Zvby9zdWJtb2R1bGUiCisJCSkKIAkpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMgLS1yZWN1cnNpdmUiIHByb3BhZ2F0ZXMgY2hhbmdlcyBpbiBvcmlnaW4nICcKLQkoY2QgcmVjdXJzaXZlLWNsb25lICYmCi0JIGdpdCByZW1vdGUgc2V0LXVybCBvcmlnaW4gZm9vL2JhciAmJgotCSBnaXQgc3VibW9kdWxlIHN5bmMgLS1yZWN1cnNpdmUgJiYKLQkoY2Qgc3VibW9kdWxlICYmCi0JICNhY3R1YWwgZm9vL3N1Ym1vZHVsZQotCSB0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIuLi9mb28vc3VibW9kdWxlIgotCSkKLQkoY2Qgc3VibW9kdWxlL3N1Yi1zdWJtb2R1bGUgJiYKLQkgdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAiLi4vLi4vZm9vL3N1Ym1vZHVsZSIKLQkpCisJKAorCQljZCByZWN1cnNpdmUtY2xvbmUgJiYKKwkJZ2l0IHJlbW90ZSBzZXQtdXJsIG9yaWdpbiBmb28vYmFyICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYyAtLXJlY3Vyc2l2ZSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCSNhY3R1YWwgZm9vL3N1Ym1vZHVsZQorCQkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAiLi4vZm9vL3N1Ym1vZHVsZSIKKwkJKSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUvc3ViLXN1Ym1vZHVsZSAmJgorCQkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAiLi4vLi4vZm9vL3N1Ym1vZHVsZSIKKwkJKQogCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyIgaGFuZGxlcyBvcmlnaW4gVVJMIG9mIHRoZSBmb3JtIC4vZm9vJyAnCi0JKGNkIHJlbGF0aXZlLWNsb25lICYmCi0JIGdpdCByZW1vdGUgc2V0LXVybCBvcmlnaW4gLi9mb28gJiYKLQkgZ2l0IHN1Ym1vZHVsZSBzeW5jICYmCi0JKGNkIHN1Ym1vZHVsZSAmJgotCSAjYWN0dWFsIC4vc3VibW9kdWxlCi0JIHRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkiID0gIi4uL3N1Ym1vZHVsZSIKLQkpCisJKAorCQljZCByZWxhdGl2ZS1jbG9uZSAmJgorCQlnaXQgcmVtb3RlIHNldC11cmwgb3JpZ2luIC4vZm9vICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYyAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCSNhY3R1YWwgLi9zdWJtb2R1bGUKKwkJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkiID0gIi4uL3N1Ym1vZHVsZSIKKwkJKQogCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyIgaGFuZGxlcyBvcmlnaW4gVVJMIG9mIHRoZSBmb3JtIC4vZm9vL2JhcicgJwotCShjZCByZWxhdGl2ZS1jbG9uZSAmJgotCSBnaXQgcmVtb3RlIHNldC11cmwgb3JpZ2luIC4vZm9vL2JhciAmJgotCSBnaXQgc3VibW9kdWxlIHN5bmMgJiYKLQkoY2Qgc3VibW9kdWxlICYmCi0JICNhY3R1YWwgLi9mb28vc3VibW9kdWxlCi0JIHRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkiID0gIi4uL2Zvby9zdWJtb2R1bGUiCi0JKQorCSgKKwkJY2QgcmVsYXRpdmUtY2xvbmUgJiYKKwkJZ2l0IHJlbW90ZSBzZXQtdXJsIG9yaWdpbiAuL2Zvby9iYXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzeW5jICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZSAmJgorCQkJI2FjdHVhbCAuL2Zvby9zdWJtb2R1bGUKKwkJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkiID0gIi4uL2Zvby9zdWJtb2R1bGUiCisJCSkKIAkpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMiIGhhbmRsZXMgb3JpZ2luIFVSTCBvZiB0aGUgZm9ybSAuLi9mb28nICcKLQkoY2QgcmVsYXRpdmUtY2xvbmUgJiYKLQkgZ2l0IHJlbW90ZSBzZXQtdXJsIG9yaWdpbiAuLi9mb28gJiYKLQkgZ2l0IHN1Ym1vZHVsZSBzeW5jICYmCi0JKGNkIHN1Ym1vZHVsZSAmJgotCSAjYWN0dWFsIC4uL3N1Ym1vZHVsZQotCSB0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIuLi8uLi9zdWJtb2R1bGUiCi0JKQorCSgKKwkJY2QgcmVsYXRpdmUtY2xvbmUgJiYKKwkJZ2l0IHJlbW90ZSBzZXQtdXJsIG9yaWdpbiAuLi9mb28gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzeW5jICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZSAmJgorCQkJI2FjdHVhbCAuLi9zdWJtb2R1bGUKKwkJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkiID0gIi4uLy4uL3N1Ym1vZHVsZSIKKwkJKQogCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyIgaGFuZGxlcyBvcmlnaW4gVVJMIG9mIHRoZSBmb3JtIC4uL2Zvby9iYXInICcKLQkoY2QgcmVsYXRpdmUtY2xvbmUgJiYKLQkgZ2l0IHJlbW90ZSBzZXQtdXJsIG9yaWdpbiAuLi9mb28vYmFyICYmCi0JIGdpdCBzdWJtb2R1bGUgc3luYyAmJgotCShjZCBzdWJtb2R1bGUgJiYKLQkgI2FjdHVhbCAuLi9mb28vc3VibW9kdWxlCi0JIHRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkiID0gIi4uLy4uL2Zvby9zdWJtb2R1bGUiCi0JKQorCSgKKwkJY2QgcmVsYXRpdmUtY2xvbmUgJiYKKwkJZ2l0IHJlbW90ZSBzZXQtdXJsIG9yaWdpbiAuLi9mb28vYmFyICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYyAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCSNhY3R1YWwgLi4vZm9vL3N1Ym1vZHVsZQorCQkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAiLi4vLi4vZm9vL3N1Ym1vZHVsZSIKKwkJKQogCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyIgaGFuZGxlcyBvcmlnaW4gVVJMIG9mIHRoZSBmb3JtIC4uL2Zvby9iYXIgd2l0aCBkZWVwbHkgbmVzdGVkIHN1Ym1vZHVsZScgJwotCShjZCByZWxhdGl2ZS1jbG9uZSAmJgotCSBnaXQgcmVtb3RlIHNldC11cmwgb3JpZ2luIC4uL2Zvby9iYXIgJiYKLQkgbWtkaXIgLXAgYS9iL2MgJiYKLQkgKCBjZCBhL2IvYyAmJgotCSAgIGdpdCBpbml0ICYmCi0JICAgOj4gLmdpdGlnbm9yZSAmJgotCSAgIGdpdCBhZGQgLmdpdGlnbm9yZSAmJgotCSAgIHRlc3RfdGljayAmJgotCSAgIGdpdCBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IiApICYmCi0JIGdpdCBzdWJtb2R1bGUgYWRkIC4uL2Jhci9hL2IvYyAuL2EvYi9jICYmCi0JIGdpdCBzdWJtb2R1bGUgc3luYyAmJgotCShjZCBhL2IvYyAmJgotCSAjYWN0dWFsIC4uL2Zvby9iYXIvYS9iL2MKLQkgdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAiLi4vLi4vLi4vLi4vZm9vL2Jhci9hL2IvYyIKLQkpCisJKAorCQljZCByZWxhdGl2ZS1jbG9uZSAmJgorCQlnaXQgcmVtb3RlIHNldC11cmwgb3JpZ2luIC4uL2Zvby9iYXIgJiYKKwkJbWtkaXIgLXAgYS9iL2MgJiYKKwkJKAorCQkJY2QgYS9iL2MgJiYKKwkJCWdpdCBpbml0ICYmCisJCQk+LmdpdGlnbm9yZSAmJgorCQkJZ2l0IGFkZCAuZ2l0aWdub3JlICYmCisJCQl0ZXN0X3RpY2sgJiYKKwkJCWdpdCBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IgorCQkpICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL2Jhci9hL2IvYyAuL2EvYi9jICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYyAmJgorCQkoCisJCQljZCBhL2IvYyAmJgorCQkJI2FjdHVhbCAuLi9mb28vYmFyL2EvYi9jCisJCQl0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIuLi8uLi8uLi8uLi9mb28vYmFyL2EvYi9jIgorCQkpCiAJKQogJwogCmRpZmYgLS1naXQgYS90L3Q3NDA2LXN1Ym1vZHVsZS11cGRhdGUuc2ggYi90L3Q3NDA2LXN1Ym1vZHVsZS11cGRhdGUuc2gKaW5kZXggYTRmZmVhMC4uYjE5MmY5MyAxMDA3NTUKLS0tIGEvdC90NzQwNi1zdWJtb2R1bGUtdXBkYXRlLnNoCisrKyBiL3QvdDc0MDYtc3VibW9kdWxlLXVwZGF0ZS5zaApAQCAtODAsNiArODAsMjEgQEAKIAkpCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgZnJvbSBzdWJkaXJlY3RvcnknICcKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJIGdpdCByZXNldCAtLWhhcmQgSEVBRH4xCisJKSAmJgorCW1rZGlyIHN1cGVyL3N1YiAmJgorCShjZCBzdXBlci9zdWIgJiYKKwkgKGNkIC4uL3N1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLi4vc3VibW9kdWxlICYmCisJIGNkIC4uL3N1Ym1vZHVsZSAmJgorCSAhIGNvbXBhcmVfaGVhZAorCSkKKycKKwogYXBvcz0iJyI7CiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIGRvZXMgbm90IGZldGNoIGFscmVhZHkgcHJlc2VudCBjb21taXRzJyAnCiAJKGNkIHN1Ym1vZHVsZSAmJgpAQCAtMjc5LDYgKzI5NCwzNSBAQAogCSkKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtIGNvbW1hbmQgaW4gLmdpdC9jb25maWcnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSAiIWdpdCBjaGVja291dCIKKwkpICYmCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSAhIGNvbXBhcmVfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtIGNvbW1hbmQgaW4gLmdpdC9jb25maWcgY2F0Y2hlcyBmYWlsdXJlJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgIiFmYWxzZSIKKwkpICYmCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlCisJKQorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgaW5pdCBwaWNrcyB1cCByZWJhc2UnICcKIAkoY2Qgc3VwZXIgJiYKIAkgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUucmViYXNpbmcudXBkYXRlIHJlYmFzZSAmJgpAQCAtNjg1LDE0ICs3MjksMjQgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3N1Ym1vZHVsZSB1cGRhdGUgY2FuIGhhbmRsZSBzeW1ib2xpYyBsaW5rcyBpbiBwd2QnICcKIAlta2RpciAtcCBsaW5rZWQvZGlyICYmCiAJbG4gLXMgbGlua2VkL2RpciBsaW5rdG8gJiYKLQkoCi0JCWNkIGxpbmt0byAmJgotCQlnaXQgY2xvbmUgIiRUUkFTSF9ESVJFQ1RPUlkiL3N1cGVyX3VwZGF0ZV9yMiBzdXBlciAmJgotCQkoCi0JCQljZCBzdXBlciAmJgotCQkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlCi0JCSkKKwkoY2QgbGlua3RvICYmCisJIGdpdCBjbG9uZSAiJFRSQVNIX0RJUkVDVE9SWSIvc3VwZXJfdXBkYXRlX3IyIHN1cGVyICYmCisJIChjZCBzdXBlciAmJgorCSAgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlCisJICkKIAkpCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgY2xvbmUgc2hhbGxvdyBzdWJtb2R1bGUnICcKKwlnaXQgY2xvbmUgY2xvbmVkIHN1cGVyMyAmJgorCXB3ZD0kKHB3ZCkKKwkoY2Qgc3VwZXIzICYmCisJIHNlZCAtZSAicyN1cmwgPSAuLi8jdXJsID0gZmlsZTovLyRwd2QvIyIgPC5naXRtb2R1bGVzID4uZ2l0bW9kdWxlcy50bXAgJiYKKwkgbXYgLWYgLmdpdG1vZHVsZXMudG1wIC5naXRtb2R1bGVzICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLWRlcHRoPTMKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgdGVzdCAxID0gJChnaXQgbG9nIC0tb25lbGluZSB8IHdjIC1sKQorCSApCisJKQorJwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDA3LXN1Ym1vZHVsZS1mb3JlYWNoLnNoIGIvdC90NzQwNy1zdWJtb2R1bGUtZm9yZWFjaC5zaAppbmRleCAxMDdiNGI3Li45MWQ0ZmQxIDEwMDc1NQotLS0gYS90L3Q3NDA3LXN1Ym1vZHVsZS1mb3JlYWNoLnNoCisrKyBiL3QvdDc0MDctc3VibW9kdWxlLWZvcmVhY2guc2gKQEAgLTgwLDYgKzgwLDIyIEBACiAJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKICcKIAorY2F0ID5leHBlY3QgPDxFT0YKK0VudGVyaW5nICcuLi9zdWIxJworJHB3ZC9jbG9uZS1mb28xLS4uL3N1YjEtJHN1YjFzaGExCitFbnRlcmluZyAnLi4vc3ViMycKKyRwd2QvY2xvbmUtZm9vMy0uLi9zdWIzLSRzdWIzc2hhMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgInN1Ym1vZHVsZSBmb3JlYWNoIiBmcm9tIHN1YmRpcmVjdG9yeScgJworCW1rZGlyIGNsb25lL3N1YiAmJgorCSgKKwkJY2QgY2xvbmUvc3ViICYmCisJCWdpdCBzdWJtb2R1bGUgZm9yZWFjaCAiZWNobyBcJHRvcGxldmVsLVwkbmFtZS1cJHNtX3BhdGgtXCRzaGExIiA+Li4vLi4vYWN0dWFsCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG5lc3RlZCBzdWJtb2R1bGVzJyAnCiAJZ2l0IGNsb25lIHN1Ym1vZHVsZSBuZXN0ZWQxICYmCiAJZ2l0IGNsb25lIHN1Ym1vZHVsZSBuZXN0ZWQyICYmCmRpZmYgLS1naXQgYS90L3Q3NTAwLWNvbW1pdC5zaCBiL3QvdDc1MDAtY29tbWl0LnNoCmluZGV4IDQzNmI3YjYuLmJkYzFmMjkgMTAwNzU1Ci0tLSBhL3QvdDc1MDAtY29tbWl0LnNoCisrKyBiL3QvdDc1MDAtY29tbWl0LnNoCkBAIC0xMyw5ICsxMyw5IEBACiAJZXhwZWN0PWNvbW1pdF9tc2dfaXMuZXhwZWN0CiAJYWN0dWFsPWNvbW1pdF9tc2dfaXMuYWN0dWFsCiAKLQlwcmludGYgIiVzIiAiJChnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDolcyViIC0xKSIgPiRleHBlY3QgJiYKLQlwcmludGYgIiVzIiAiJDEiID4kYWN0dWFsICYmCi0JdGVzdF9pMThuY21wICRleHBlY3QgJGFjdHVhbAorCXByaW50ZiAiJXMiICIkKGdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiVzJWIgLTEpIiA+IiRhY3R1YWwiICYmCisJcHJpbnRmICIlcyIgIiQxIiA+IiRleHBlY3QiICYmCisJdGVzdF9pMThuY21wICIkZXhwZWN0IiAiJGFjdHVhbCIKIH0KIAogIyBBIHNhbml0eSBjaGVjayB0byBzZWUgaWYgY29tbWl0IGlzIHdvcmtpbmcgYXQgYWxsLgpkaWZmIC0tZ2l0IGEvdC90NzUwMS1jb21taXQuc2ggYi90L3Q3NTAxLWNvbW1pdC5zaAppbmRleCAxOTVlNzQ3Li45OWNlMzZmIDEwMDc1NQotLS0gYS90L3Q3NTAxLWNvbW1pdC5zaAorKysgYi90L3Q3NTAxLWNvbW1pdC5zaApAQCAtNTI0LDQgKzUyNCwxNyBAQAogCXRlc3RfaTE4bmdyZXAgIiBjaGFuZ2VkLCA1IGluc2VydGlvbnMiIG91dHB1dAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW9ubHkgd29ya3Mgb24gdG8tYmUtYm9ybiBicmFuY2gnICcKKwkjIFRoaXMgdGVzdCByZWxpZXMgb24gaGF2aW5nIHNvbWV0aGluZyBpbiB0aGUgaW5kZXgsIGFzIGl0CisJIyB3b3VsZCBub3Qgb3RoZXJ3aXNlIGFjdHVhbGx5IHByb3ZlIG11Y2guICBTbyBjaGVjayB0aGlzLgorCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzKSIgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gb3JwaGFuICYmCisJZWNobyBmb28gPm5ld2ZpbGUgJiYKKwlnaXQgYWRkIG5ld2ZpbGUgJiYKKwlnaXQgY29tbWl0IC0tb25seSBuZXdmaWxlIC1tIi0tb25seSBvbiB1bmJvcm4gYnJhbmNoIiAmJgorCWVjaG8gbmV3ZmlsZSA+ZXhwZWN0ZWQgJiYKKwlnaXQgbHMtdHJlZSAtciAtLW5hbWUtb25seSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTAyLWNvbW1pdC5zaCBiL3QvdDc1MDItY29tbWl0LnNoCmluZGV4IGE0OTM4YjEuLjYzMTNkYTIgMTAwNzU1Ci0tLSBhL3QvdDc1MDItY29tbWl0LnNoCisrKyBiL3QvdDc1MDItY29tbWl0LnNoCkBAIC0zNjEsNiArMzYxLDIzIEBACiAJdGVzdF9jbXAgZXhwZWN0IC5naXQvcmVzdWx0CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBmaXJlIGVkaXRvciBpZiAtbSA8bXNnPiB3YXMgZ2l2ZW4nICcKKwllY2hvIHRpY2sgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvICJlZGl0b3Igbm90IHN0YXJ0ZWQiID4uZ2l0L3Jlc3VsdCAmJgorCShHSVRfRURJVE9SPSJcIiQocHdkKS8uZ2l0L0ZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLW0gdGljaykgJiYKKwl0ZXN0ICIkKGNhdCAuZ2l0L3Jlc3VsdCkiID0gImVkaXRvciBub3Qgc3RhcnRlZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGZpcmUgZWRpdG9yIGlmIC1tICIiIHdhcyBnaXZlbicgJworCWVjaG8gdG9jayA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gImVkaXRvciBub3Qgc3RhcnRlZCIgPi5naXQvcmVzdWx0ICYmCisJKEdJVF9FRElUT1I9IlwiJChwd2QpLy5naXQvRkFLRV9FRElUT1JcIiIgXAorCSBnaXQgY29tbWl0IC1tICIiIC0tYWxsb3ctZW1wdHktbWVzc2FnZSkgJiYKKwl0ZXN0ICIkKGNhdCAuZ2l0L3Jlc3VsdCkiID0gImVkaXRvciBub3Qgc3RhcnRlZCIKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGZpcmUgZWRpdG9yIGluIHRoZSBwcmVzZW5jZSBvZiBjb25mbGljdHMnICcKIAogCWdpdCBjbGVhbiAtZiAmJgpkaWZmIC0tZ2l0IGEvdC90NzUwOC1zdGF0dXMuc2ggYi90L3Q3NTA4LXN0YXR1cy5zaAppbmRleCBlMmZmZGFjLi5hYzNkMGZlIDEwMDc1NQotLS0gYS90L3Q3NTA4LXN0YXR1cy5zaAorKysgYi90L3Q3NTA4LXN0YXR1cy5zaApAQCAtMTMzNSw0ICsxMzM1LDY2IEBACiAJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBvZiB0ZXN0IGVudmlyb25tZW50JyAnCisJZ2l0IGNvbmZpZyBzdGF0dXMuc2hvd1VudHJhY2tlZEZpbGVzIG5vICYmCisJZ2l0IHN0YXR1cyAtcyA+ZXhwZWN0ZWRfc2hvcnQgJiYKKwlnaXQgc3RhdHVzIC0tbm8tc2hvcnQgPmV4cGVjdGVkX25vc2hvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInN0YXR1cy5zaG9ydD10cnVlIiBzYW1lIGFzICItcyInICcKKwlnaXQgLWMgc3RhdHVzLnNob3J0PXRydWUgc3RhdHVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9zaG9ydCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInN0YXR1cy5zaG9ydD10cnVlIiB3ZWFrZXIgdGhhbiAiLS1uby1zaG9ydCInICcKKwlnaXQgLWMgc3RhdHVzLnNob3J0PXRydWUgc3RhdHVzIC0tbm8tc2hvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkX25vc2hvcnQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJzdGF0dXMuc2hvcnQ9ZmFsc2UiIHNhbWUgYXMgIi0tbm8tc2hvcnQiJyAnCisJZ2l0IC1jIHN0YXR1cy5zaG9ydD1mYWxzZSBzdGF0dXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkX25vc2hvcnQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJzdGF0dXMuc2hvcnQ9ZmFsc2UiIHdlYWtlciB0aGFuICItcyInICcKKwlnaXQgLWMgc3RhdHVzLnNob3J0PWZhbHNlIHN0YXR1cyAtcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfc2hvcnQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJzdGF0dXMuYnJhbmNoPXRydWUiIHNhbWUgYXMgIi1iIicgJworCWdpdCBzdGF0dXMgLXNiID5leHBlY3RlZF9icmFuY2ggJiYKKwlnaXQgLWMgc3RhdHVzLmJyYW5jaD10cnVlIHN0YXR1cyAtcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfYnJhbmNoIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcic3RhdHVzLmJyYW5jaD10cnVlIiBkaWZmZXJlbnQgZnJvbSAiLS1uby1icmFuY2giJyAnCisJZ2l0IHN0YXR1cyAtcyAtLW5vLWJyYW5jaCAgPmV4cGVjdGVkX25vYnJhbmNoICYmCisJZ2l0IC1jIHN0YXR1cy5icmFuY2g9dHJ1ZSBzdGF0dXMgLXMgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3RfY21wIGV4cGVjdGVkX25vYnJhbmNoIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcic3RhdHVzLmJyYW5jaD10cnVlIiB3ZWFrZXIgdGhhbiAiLS1uby1icmFuY2giJyAnCisJZ2l0IC1jIHN0YXR1cy5icmFuY2g9dHJ1ZSBzdGF0dXMgLXMgLS1uby1icmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkX25vYnJhbmNoIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcic3RhdHVzLmJyYW5jaD10cnVlIiB3ZWFrZXIgdGhhbiAiLS1wb3JjZWxhaW4iJyAnCisgICAgICAgZ2l0IC1jIHN0YXR1cy5icmFuY2g9dHJ1ZSBzdGF0dXMgLS1wb3JjZWxhaW4gPmFjdHVhbCAmJgorICAgICAgIHRlc3RfY21wIGV4cGVjdGVkX25vYnJhbmNoIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcic3RhdHVzLmJyYW5jaD1mYWxzZSIgc2FtZSBhcyAiLS1uby1icmFuY2giJyAnCisJZ2l0IC1jIHN0YXR1cy5icmFuY2g9ZmFsc2Ugc3RhdHVzIC1zID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9ub2JyYW5jaCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInN0YXR1cy5icmFuY2g9ZmFsc2UiIHdlYWtlciB0aGFuICItYiInICcKKwlnaXQgLWMgc3RhdHVzLmJyYW5jaD1mYWxzZSBzdGF0dXMgLXNiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9icmFuY2ggYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Jlc3RvcmUgZGVmYXVsdCB0ZXN0IGVudmlyb25tZW50JyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHN0YXR1cy5zaG93VW50cmFja2VkRmlsZXMKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTEyLXN0YXR1cy1oZWxwLnNoIGIvdC90NzUxMi1zdGF0dXMtaGVscC5zaAppbmRleCBiZjA4ZDRlLi4zMWE3OThmIDEwMDc1NQotLS0gYS90L3Q3NTEyLXN0YXR1cy1oZWxwLnNoCisrKyBiL3QvdDc1MTItc3RhdHVzLWhlbHAuc2gKQEAgLTc3LDcgKzc3LDcgQEAKIAlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUReXikgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIEhFQUReIC0tb250byBIRUFEXl4gJiYKIAljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgotCSMgSEVBRCBkZXRhY2hlZCBhdCAkT05UTworCSMgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCiAJIyBZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZyBicmFuY2ggJ1wnJ3JlYmFzZV9jb25mbGljdHMnXCcnIG9uICdcJyckT05UTydcJycuCiAJIyAgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIikKIAkjICAgKHVzZSAiZ2l0IHJlYmFzZSAtLXNraXAiIHRvIHNraXAgdGhpcyBwYXRjaCkKQEAgLTEwNCw3ICsxMDQsNyBAQAogCWVjaG8gdGhyZWUgPm1haW4udHh0ICYmCiAJZ2l0IGFkZCBtYWluLnR4dCAmJgogCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCi0JIyBIRUFEIGRldGFjaGVkIGF0ICRPTlRPCisJIyByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KIAkjIFlvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nIGJyYW5jaCAnXCcncmViYXNlX2NvbmZsaWN0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KIAkjICAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIikKIAkjCkBAIC0xMzYsNyArMTM2LDcgQEAKIAlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHJlYmFzZV9pX2NvbmZsaWN0cykgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIHJlYmFzZV9pX2NvbmZsaWN0cyAmJgogCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCi0JIyBIRUFEIGRldGFjaGVkIGF0ICRPTlRPCisJIyByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KIAkjIFlvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nIGJyYW5jaCAnXCcncmViYXNlX2lfY29uZmxpY3RzX3NlY29uZCdcJycgb24gJ1wnJyRPTlRPJ1wnJy4KIAkjICAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuICJnaXQgcmViYXNlIC0tY29udGludWUiKQogCSMgICAodXNlICJnaXQgcmViYXNlIC0tc2tpcCIgdG8gc2tpcCB0aGlzIHBhdGNoKQpAQCAtMTYyLDcgKzE2Miw3IEBACiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSByZWJhc2VfaV9jb25mbGljdHMgJiYKIAlnaXQgYWRkIG1haW4udHh0ICYmCiAJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKLQkjIEhFQUQgZGV0YWNoZWQgYXQgJE9OVE8KKwkjIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTwogCSMgWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcgYnJhbmNoICdcJydyZWJhc2VfaV9jb25mbGljdHNfc2Vjb25kJ1wnJyBvbiAnXCcnJE9OVE8nXCcnLgogCSMgICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuICJnaXQgcmViYXNlIC0tY29udGludWUiKQogCSMKQEAgLTE4OCwxMCArMTg4LDkgQEAKIAlleHBvcnQgRkFLRV9MSU5FUyAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgogCU9OVE89JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRH4yKSAmJgotCVRHVD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCB0d29fcmViYXNlX2kpICYmCiAJZ2l0IHJlYmFzZSAtaSBIRUFEfjIgJiYKIAljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgotCSMgSEVBRCBkZXRhY2hlZCBmcm9tICRUR1QKKwkjIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTwogCSMgWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ3JlYmFzZV9pX2VkaXQnXCcnIG9uICdcJyckT05UTydcJycuCiAJIyAgICh1c2UgImdpdCBjb21taXQgLS1hbWVuZCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KQogCSMgICAodXNlICJnaXQgcmViYXNlIC0tY29udGludWUiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpCkBAIC0yMTYsOSArMjE1LDggQEAKIAlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUR+MykgJiYKIAlnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgogCWdpdCByZXNldCBIRUFEXiAmJgotCVRHVD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgogCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCi0JIyBIRUFEIGRldGFjaGVkIGF0ICRUR1QKKwkjIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTwogCSMgWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnXCcnc3BsaXRfY29tbWl0J1wnJyBvbiAnXCcnJE9OVE8nXCcnLgogCSMgICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gImdpdCByZWJhc2UgLS1jb250aW51ZSIpCiAJIwpAQCAtMjQ2LDExICsyNDQsMTAgQEAKIAlleHBvcnQgRkFLRV9MSU5FUyAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgogCU9OVE89JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRH4zKSAmJgotCVRHVD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCB0aHJlZV9hbWVuZCkgJiYKIAlnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgogCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiZm9vIiAmJgogCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCi0JIyBIRUFEIGRldGFjaGVkIGZyb20gJFRHVAorCSMgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCiAJIyBZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnXCcnYW1lbmRfbGFzdCdcJycgb24gJ1wnJyRPTlRPJ1wnJy4KIAkjICAgKHVzZSAiZ2l0IGNvbW1pdCAtLWFtZW5kIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpCiAJIyAgICh1c2UgImdpdCByZWJhc2UgLS1jb250aW51ZSIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykKQEAgLTI4MCw3ICsyNzcsNyBAQAogCWdpdCByZWJhc2UgLWkgSEVBRH4zICYmCiAJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCiAJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKLQkjIEhFQUQgZGV0YWNoZWQgZnJvbSAkT05UTworCSMgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCiAJIyBZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnXCcnc2V2ZXJhbF9lZGl0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KIAkjICAgKHVzZSAiZ2l0IGNvbW1pdCAtLWFtZW5kIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpCiAJIyAgICh1c2UgImdpdCByZWJhc2UgLS1jb250aW51ZSIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykKQEAgLTMwMiw3ICsyOTksNyBAQAogCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgogCWdpdCByZXNldCBIRUFEXiAmJgogCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCi0JIyBIRUFEIGRldGFjaGVkIGZyb20gJE9OVE8KKwkjIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTwogCSMgWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnXCcnc2V2ZXJhbF9lZGl0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KIAkjICAgKE9uY2UgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiwgcnVuICJnaXQgcmViYXNlIC0tY29udGludWUiKQogCSMKQEAgLTMyOSw3ICszMjYsNyBAQAogCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgogCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiZm9vIiAmJgogCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCi0JIyBIRUFEIGRldGFjaGVkIGZyb20gJE9OVE8KKwkjIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTwogCSMgWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ3NldmVyYWxfZWRpdHMnXCcnIG9uICdcJyckT05UTydcJycuCiAJIyAgICh1c2UgImdpdCBjb21taXQgLS1hbWVuZCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KQogCSMgICAodXNlICJnaXQgcmViYXNlIC0tY29udGludWUiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpCkBAIC0zNTEsNyArMzQ4LDcgQEAKIAlnaXQgY29tbWl0IC0tYW1lbmQgLW0gImEiICYmCiAJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCiAJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKLQkjIEhFQUQgZGV0YWNoZWQgZnJvbSAkT05UTworCSMgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCiAJIyBZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnXCcnc2V2ZXJhbF9lZGl0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KIAkjICAgKHVzZSAiZ2l0IGNvbW1pdCAtLWFtZW5kIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpCiAJIyAgICh1c2UgImdpdCByZWJhc2UgLS1jb250aW51ZSIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykKQEAgLTM3NCw3ICszNzEsNyBAQAogCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgogCWdpdCByZXNldCBIRUFEXiAmJgogCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCi0JIyBIRUFEIGRldGFjaGVkIGZyb20gJE9OVE8KKwkjIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTwogCSMgWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnXCcnc2V2ZXJhbF9lZGl0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KIAkjICAgKE9uY2UgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiwgcnVuICJnaXQgcmViYXNlIC0tY29udGludWUiKQogCSMKQEAgLTQwMiw3ICszOTksNyBAQAogCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgogCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiZCIgJiYKIAljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgotCSMgSEVBRCBkZXRhY2hlZCBmcm9tICRPTlRPCisJIyByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KIAkjIFlvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICdcJydzZXZlcmFsX2VkaXRzJ1wnJyBvbiAnXCcnJE9OVE8nXCcnLgogCSMgICAodXNlICJnaXQgY29tbWl0IC0tYW1lbmQiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkKIAkjICAgKHVzZSAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKQpAQCAtNDI2LDcgKzQyMyw3IEBACiAJZ2l0IGNvbW1pdCAtbSAiZSIgJiYKIAlnaXQgcmViYXNlIC0tY29udGludWUgJiYKIAljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgotCSMgSEVBRCBkZXRhY2hlZCBmcm9tICRPTlRPCisJIyByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KIAkjIFlvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICdcJydzZXZlcmFsX2VkaXRzJ1wnJyBvbiAnXCcnJE9OVE8nXCcnLgogCSMgICAodXNlICJnaXQgY29tbWl0IC0tYW1lbmQiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkKIAkjICAgKHVzZSAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKQpAQCAtNDUxLDcgKzQ0OCw3IEBACiAJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCiAJZ2l0IHJlc2V0IEhFQUReICYmCiAJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKLQkjIEhFQUQgZGV0YWNoZWQgZnJvbSAkT05UTworCSMgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCiAJIyBZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICdcJydzZXZlcmFsX2VkaXRzJ1wnJyBvbiAnXCcnJE9OVE8nXCcnLgogCSMgICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gImdpdCByZWJhc2UgLS1jb250aW51ZSIpCiAJIwpAQCAtNDgxLDcgKzQ3OCw3IEBACiAJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCiAJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJoIiAmJgogCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCi0JIyBIRUFEIGRldGFjaGVkIGZyb20gJE9OVE8KKwkjIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTwogCSMgWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ3NldmVyYWxfZWRpdHMnXCcnIG9uICdcJyckT05UTydcJycuCiAJIyAgICh1c2UgImdpdCBjb21taXQgLS1hbWVuZCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KQogCSMgICAodXNlICJnaXQgcmViYXNlIC0tY29udGludWUiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpCkBAIC01MTAsNyArNTA3LDcgQEAKIAljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKIAkjIE9uIGJyYW5jaCBhbV9hbHJlYWR5X2V4aXN0cwogCSMgWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb24uCi0JIyAgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biAiZ2l0IGFtIC0tcmVzb2x2ZWQiKQorCSMgICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gImdpdCBhbSAtLWNvbnRpbnVlIikKIAkjICAgKHVzZSAiZ2l0IGFtIC0tc2tpcCIgdG8gc2tpcCB0aGlzIHBhdGNoKQogCSMgICAodXNlICJnaXQgYW0gLS1hYm9ydCIgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoKQogCSMKQEAgLTUzMiw3ICs1MjksNyBAQAogCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgogCSMgT24gYnJhbmNoIGFtX25vdF9leGlzdHMKIAkjIFlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLgotCSMgICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gImdpdCBhbSAtLXJlc29sdmVkIikKKwkjICAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuICJnaXQgYW0gLS1jb250aW51ZSIpCiAJIyAgICh1c2UgImdpdCBhbSAtLXNraXAiIHRvIHNraXAgdGhpcyBwYXRjaCkKIAkjICAgKHVzZSAiZ2l0IGFtIC0tYWJvcnQiIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCkKIAkjCkBAIC02MDEsNyArNTk4LDcgQEAKIAlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUReXikgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIEhFQUReIC0tb250byBIRUFEXl4gJiYKIAljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgotCSMgSEVBRCBkZXRhY2hlZCBhdCAkT05UTworCSMgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCiAJIyBZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZyBicmFuY2ggJ1wnJ3N0YXR1c2hpbnRzX2Rpc2FibGVkJ1wnJyBvbiAnXCcnJE9OVE8nXCcnLgogCSMKIAkjIFVubWVyZ2VkIHBhdGhzOgpAQCAtNjMyLDcgKzYyOSw4IEBACiAJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCiAJIyBPbiBicmFuY2ggY2hlcnJ5X2JyYW5jaAogCSMgWW91IGFyZSBjdXJyZW50bHkgY2hlcnJ5LXBpY2tpbmcuCi0JIyAgIChmaXggY29uZmxpY3RzIGFuZCBydW4gImdpdCBjb21taXQiKQorCSMgICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuICJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSIpCisJIyAgICh1c2UgImdpdCBjaGVycnktcGljayAtLWFib3J0IiB0byBjYW5jZWwgdGhlIGNoZXJyeS1waWNrIG9wZXJhdGlvbikKIAkjCiAJIyBVbm1lcmdlZCBwYXRoczoKIAkjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIG1hcmsgcmVzb2x1dGlvbikKQEAgLTY1NSw3ICs2NTMsOCBAQAogCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgogCSMgT24gYnJhbmNoIGNoZXJyeV9icmFuY2gKIAkjIFlvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nLgotCSMgICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuICJnaXQgY29tbWl0IikKKwkjICAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biAiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUiKQorCSMgICAodXNlICJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydCIgdG8gY2FuY2VsIHRoZSBjaGVycnktcGljayBvcGVyYXRpb24pCiAJIwogCSMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CiAJIwpAQCAtNjY3LDcgKzY2Niw3IEBACiAJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc2hvd2luZyBkZXRhY2hlZCBmcm9tIGEgdGFnJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc2hvd2luZyBkZXRhY2hlZCBhdCBhbmQgZnJvbSBhIHRhZycgJwogCXRlc3RfY29tbWl0IGF0YWcgdGFnZ2luZyAmJgogCWdpdCBjaGVja291dCBhdGFnICYmCiAJY2F0ID5leHBlY3RlZCA8PC1cRU9GCkBAIC02NzUsNiArNjc0LDE0IEBACiAJbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKIAlFT0YKIAlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GCisJIyBIRUFEIGRldGFjaGVkIGZyb20gYXRhZworCW5vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCisJRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCiAJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCmRpZmYgLS1naXQgYS90L3Q3NjAwLW1lcmdlLnNoIGIvdC90NzYwMC1tZXJnZS5zaAppbmRleCAyZjcwNDMzLi4xMGFhMDI4IDEwMDc1NQotLS0gYS90L3Q3NjAwLW1lcmdlLnNoCisrKyBiL3QvdDc2MDAtbWVyZ2Uuc2gKQEAgLTMxNiw3ICszMTYsNyBAQAogCiB0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc3VjY2VzZnVsIG1lcmdlIG9mIGMxIHdpdGggYzIgKHNxdWFzaCwgZmYtb25seSknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc3VjY2Vzc2Z1bCBtZXJnZSBvZiBjMSB3aXRoIGMyIChzcXVhc2gsIGZmLW9ubHkpJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLXNxdWFzaCAtLWZmLW9ubHkgYzIKICcKQEAgLTQ5Nyw5ICs0OTcsMTUgQEAKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1mZiAtLXNxdWFzaCBjMQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21iaW5pbmcgLS1mZi1vbmx5IGFuZCAtLW5vLWZmIGlzIHJlZnVzZWQnICcKLQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1mZi1vbmx5IC0tbm8tZmYgYzEgJiYKLQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1mZiAtLWZmLW9ubHkgYzEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29wdGlvbiAtLWZmLW9ubHkgb3ZlcndyaXRlcyAtLW5vLWZmJyAnCisJZ2l0IG1lcmdlIC0tbm8tZmYgLS1mZi1vbmx5IGMxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tbm8tZmYgLS1mZi1vbmx5IGMyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29wdGlvbiAtLW5vLWZmIG92ZXJyaWRlcyBtZXJnZS5mZj1vbmx5IGNvbmZpZycgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5mZiBvbmx5ICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgYzEKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzAgd2l0aCBjMSAoZmYgb3ZlcnJpZGVzIG5vLWZmKScgJwpkaWZmIC0tZ2l0IGEvdC90NzYwNy1tZXJnZS1vdmVyd3JpdGUuc2ggYi90L3Q3NjA3LW1lcmdlLW92ZXJ3cml0ZS5zaAppbmRleCA2NTQ3ZWI4Li43NThhNjIzIDEwMDc1NQotLS0gYS90L3Q3NjA3LW1lcmdlLW92ZXJ3cml0ZS5zaAorKysgYi90L3Q3NjA3LW1lcmdlLW92ZXJ3cml0ZS5zaApAQCAtMTQxLDExICsxNDEsMTAgQEAKIAl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnd2lsbCBub3QgYmUgY29uZnVzZWQgYnkgc3ltbGluayBpbiBsZWFkaW5nIHBhdGgnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgbm90IGJlIGNvbmZ1c2VkIGJ5IHN5bWxpbmsgaW4gbGVhZGluZyBwYXRoJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgogCXJtIC1yZiBzdWIgJiYKLQlsbiAtcyBzdWIyIHN1YiAmJgotCWdpdCBhZGQgc3ViICYmCisJdGVzdF9sbl9zX2FkZCBzdWIyIHN1YiAmJgogCWdpdCBjb21taXQgLW0gbG4gJiYKIAlnaXQgY2hlY2tvdXQgc3ViCiAnCmRpZmYgLS1naXQgYS90L3Q3ODAwLWRpZmZ0b29sLnNoIGIvdC90NzgwMC1kaWZmdG9vbC5zaAppbmRleCBkNDZmMDQxLi4yNDE4NTI4IDEwMDc1NQotLS0gYS90L3Q3ODAwLWRpZmZ0b29sLnNoCisrKyBiL3QvdDc4MDAtZGlmZnRvb2wuc2gKQEAgLTM4NSw2ICszODUsMjUgQEAKIAl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0CiAnCiAKK3dyaXRlX3NjcmlwdCBtb2RpZnktcmlnaHQtZmlsZSA8PFxFT0YKK2VjaG8gIm5ldyBjb250ZW50IiA+IiQyL2ZpbGUiCitFT0YKKworcnVuX2Rpcl9kaWZmX3Rlc3QgJ2RpZmZ0b29sIC0tZGlyLWRpZmYgc3luY3Mgd29ya3RyZWUgd2l0aCB1bnN0YWdlZCBjaGFuZ2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gIm9yaWcgY29udGVudCIgPmZpbGUgJiYKKwlnaXQgZGlmZnRvb2wgLWQgJHN5bWxpbmtzIC0tZXh0Y21kICIkKHB3ZCkvbW9kaWZ5LXJpZ2h0LWZpbGUiIGJyYW5jaCAmJgorCWVjaG8gIm5ldyBjb250ZW50IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKworcnVuX2Rpcl9kaWZmX3Rlc3QgJ2RpZmZ0b29sIC0tZGlyLWRpZmYgc3luY3Mgd29ya3RyZWUgd2l0aG91dCB1bnN0YWdlZCBjaGFuZ2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBkaWZmdG9vbCAtZCAkc3ltbGlua3MgLS1leHRjbWQgIiQocHdkKS9tb2RpZnktcmlnaHQtZmlsZSIgYnJhbmNoICYmCisJZWNobyAibmV3IGNvbnRlbnQiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorJworCiB3cml0ZV9zY3JpcHQgbW9kaWZ5LWZpbGUgPDxcRU9GCiBlY2hvICJuZXcgY29udGVudCIgPmZpbGUKIEVPRgpkaWZmIC0tZ2l0IGEvdC90ODAwMS1hbm5vdGF0ZS5zaCBiL3QvdDgwMDEtYW5ub3RhdGUuc2gKaW5kZXggNDE5NjJmMC4uNzIxNzZlNCAxMDA3NTUKLS0tIGEvdC90ODAwMS1hbm5vdGF0ZS5zaAorKysgYi90L3Q4MDAxLWFubm90YXRlLnNoCkBAIC02LDkgKzYsOSBAQAogUFJPRz0nZ2l0IGFubm90YXRlJwogLiAiJFRFU1RfRElSRUNUT1JZIi9hbm5vdGF0ZS10ZXN0cy5zaAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdBbm5vdGF0aW5nIGFuIG9sZCByZXZpc2lvbiB3b3JrcycgJwotCWdpdCBhbm5vdGF0ZSBmaWxlIG1hc3RlciA+cmVzdWx0ICYmCi0JYXdrICJ7IHByaW50IFwkMzsgfSIgPHJlc3VsdCA+YXV0aG9ycyAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW5ub3RhdGUgb2xkIHJldmlzaW9uJyAnCisJZ2l0IGFubm90YXRlIGZpbGUgbWFzdGVyID5hY3R1YWwgJiYKKwlhd2sgInsgcHJpbnQgXCQzOyB9IiA8YWN0dWFsID5hdXRob3JzICYmCiAJdGVzdCAyID0gJChncmVwIEEgPGF1dGhvcnMgfCB3YyAtbCkgJiYKIAl0ZXN0IDIgPSAkKGdyZXAgQiA8YXV0aG9ycyB8IHdjIC1sKQogJwpkaWZmIC0tZ2l0IGEvdC90ODAwMi1ibGFtZS5zaCBiL3QvdDgwMDItYmxhbWUuc2gKaW5kZXggZTI4OTZjZi4uNWNkZjNmMSAxMDA3NTUKLS0tIGEvdC90ODAwMi1ibGFtZS5zaAorKysgYi90L3Q4MDAyLWJsYW1lLnNoCkBAIC03LDggKzcsMTYgQEAKIC4gIiRURVNUX0RJUkVDVE9SWSIvYW5ub3RhdGUtdGVzdHMuc2gKIAogUFJPRz0nZ2l0IGJsYW1lIC1jIC1lJwotdGVzdF9leHBlY3Rfc3VjY2VzcyAnQmxhbWUgLS1zaG93LWVtYWlsIHdvcmtzJyAnCi0gICAgY2hlY2tfY291bnQgIjxBQHRlc3QuZ2l0PiIgMSAiPEJAdGVzdC5naXQ+IiAxICI8QjFAdGVzdC5naXQ+IiAxICI8QjJAdGVzdC5naXQ+IiAxICI8YXV0aG9yQGV4YW1wbGUuY29tPiIgMSAiPENAdGVzdC5naXQ+IiAxICI8REB0ZXN0LmdpdD4iIDEgIjxFIGF0IHRlc3QgZG90IGdpdD4iIDEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC0tc2hvdy1lbWFpbCcgJworCWNoZWNrX2NvdW50IFwKKwkJIjxBQHRlc3QuZ2l0PiIgMSBcCisJCSI8QkB0ZXN0LmdpdD4iIDEgXAorCQkiPEIxQHRlc3QuZ2l0PiIgMSBcCisJCSI8QjJAdGVzdC5naXQ+IiAxIFwKKwkJIjxhdXRob3JAZXhhbXBsZS5jb20+IiAxIFwKKwkJIjxDQHRlc3QuZ2l0PiIgMSBcCisJCSI8REB0ZXN0LmdpdD4iIDEgXAorCQkiPEUgYXQgdGVzdCBkb3QgZ2l0PiIgMQogJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDgwMDMtYmxhbWUtY29ybmVyLWNhc2VzLnNoIGIvdC90ODAwMy1ibGFtZS1jb3JuZXItY2FzZXMuc2gKaW5kZXggMjMwMTQzYy4uZTdjYWMxZCAxMDA3NTUKLS0tIGEvdC90ODAwMy1ibGFtZS1jb3JuZXItY2FzZXMuc2gKKysrIGIvdC90ODAwMy1ibGFtZS1jb3JuZXItY2FzZXMuc2gKQEAgLTE3NSw2ICsxNzUsMTIgQEAKIAlncmVwICJoYXMgb25seSAyIGxpbmVzIiBlcnJvcnMKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgcGFyc2VzIDxlbmQ+IHBhcnQgb2YgLUwnICcKKwlnaXQgYmxhbWUgLUwxLDEgdHJlcyA+b3V0ICYmCisJY2F0IG91dCAmJgorCXRlc3QgJCh3YyAtbCA8IG91dCkgLWVxIDEKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZW50IG9mIGxpbmUgbnVtYmVycywgbmluZSBsaW5lcycgJwogCWdpdCBibGFtZSBuaW5lX2xpbmVzID5hY3R1YWwgJiYKIAl0ZXN0ICQoZ3JlcCAtYyAiICAiIGFjdHVhbCkgPSAwCmRpZmYgLS1naXQgYS90L3Q4MDA2LWJsYW1lLXRleHRjb252LnNoIGIvdC90ODAwNi1ibGFtZS10ZXh0Y29udi5zaAppbmRleCBiZjZjYWE0Li43NjgzNTE1IDEwMDc1NQotLS0gYS90L3Q4MDA2LWJsYW1lLXRleHRjb252LnNoCisrKyBiL3QvdDgwMDYtYmxhbWUtdGV4dGNvbnYuc2gKQEAgLTE4LDE3ICsxOCwxMyBAQAogCWVjaG8gImJpbjogdGVzdCBudW1iZXIgMCIgPnplcm8uYmluICYmCiAJZWNobyAiYmluOiB0ZXN0IDEiID5vbmUuYmluICYmCiAJZWNobyAiYmluOiB0ZXN0IG51bWJlciAyIiA+dHdvLmJpbiAmJgotCWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1M7IHRoZW4KLQkJbG4gLXMgb25lLmJpbiBzeW1saW5rLmJpbgotCWZpICYmCisJdGVzdF9sbl9zX2FkZCBvbmUuYmluIHN5bWxpbmsuYmluICYmCiAJZ2l0IGFkZCAuICYmCiAJR0lUX0FVVEhPUl9OQU1FPU51bWJlcjEgZ2l0IGNvbW1pdCAtYSAtbSBGaXJzdCAtLWRhdGU9IjIwMTAtMDEtMDEgMTg6MDA6MDAiICYmCiAJZWNobyAiYmluOiB0ZXN0IDEgdmVyc2lvbiAyIiA+b25lLmJpbiAmJgogCWVjaG8gImJpbjogdGVzdCBudW1iZXIgMiB2ZXJzaW9uIDIiID4+dHdvLmJpbiAmJgotCWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1M7IHRoZW4KLQkJcm0gc3ltbGluay5iaW4gJiYKLQkJbG4gLXMgdHdvLmJpbiBzeW1saW5rLmJpbgotCWZpICYmCisJcm0gLWYgc3ltbGluay5iaW4gJiYKKwl0ZXN0X2xuX3NfYWRkIHR3by5iaW4gc3ltbGluay5iaW4gJiYKIAlHSVRfQVVUSE9SX05BTUU9TnVtYmVyMiBnaXQgY29tbWl0IC1hIC1tIFNlY29uZCAtLWRhdGU9IjIwMTAtMDEtMDEgMjA6MDA6MDAiCiAnCiAKQEAgLTEzNSw3ICsxMzEsNyBAQAogCiAjIGNwIHR3by5iaW4gdGhyZWUuYmluICBhbmQgbWFrZSBzbWFsbCB0d2VhawogIyAodGhpcyB3aWxsIGRpcmVjdCBibGFtZSAtQyAtQyB0aHJlZS5iaW4gdG8gY29uc2lkZXIgdHdvLmJpbiBhbmQgc3ltbGluay5iaW4pCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdtYWtlIGFub3RoZXIgbmV3IGNvbW1pdCcgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBhbm90aGVyIG5ldyBjb21taXQnICcKIAljYXQgPnRocmVlLmJpbiA8PFxFT0YgJiYKIGJpbjogdGVzdCBudW1iZXIgMgogYmluOiB0ZXN0IG51bWJlciAyIHZlcnNpb24gMgpAQCAtMTQ2LDcgKzE0Miw3IEBACiAJR0lUX0FVVEhPUl9OQU1FPU51bWJlcjQgZ2l0IGNvbW1pdCAtYSAtbSBGb3VydGggLS1kYXRlPSIyMDEwLTAxLTAxIDIzOjAwOjAwIgogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdibGFtZSBvbiBsYXN0IGNvbW1pdCAoLUMgLUMsIHN5bWxpbmspJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSBvbiBsYXN0IGNvbW1pdCAoLUMgLUMsIHN5bWxpbmspJyAnCiAJZ2l0IGJsYW1lIC1DIC1DIHRocmVlLmJpbiA+YmxhbWUgJiYKIAlmaW5kX2JsYW1lIDxibGFtZSA+cmVzdWx0ICYmCiAJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKZGlmZiAtLWdpdCBhL3QvdDgwMDctY2F0LWZpbGUtdGV4dGNvbnYuc2ggYi90L3Q4MDA3LWNhdC1maWxlLXRleHRjb252LnNoCmluZGV4IDc4YTAwODUuLmI5NWUxMDIgMTAwNzU1Ci0tLSBhL3QvdDgwMDctY2F0LWZpbGUtdGV4dGNvbnYuc2gKKysrIGIvdC90ODAwNy1jYXQtZmlsZS10ZXh0Y29udi5zaApAQCAtMTIsOSArMTIsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAnICcKIAllY2hvICJiaW46IHRlc3QiID5vbmUuYmluICYmCi0JaWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUzsgdGhlbgotCQlsbiAtcyBvbmUuYmluIHN5bWxpbmsuYmluCi0JZmkgJiYKKwl0ZXN0X2xuX3NfYWRkIG9uZS5iaW4gc3ltbGluay5iaW4gJiYKIAlnaXQgYWRkIC4gJiYKIAlHSVRfQVVUSE9SX05BTUU9TnVtYmVyMSBnaXQgY29tbWl0IC1hIC1tIEZpcnN0IC0tZGF0ZT0iMjAxMC0wMS0wMSAxODowMDowMCIgJiYKIAllY2hvICJiaW46IHRlc3QgdmVyc2lvbiAyIiA+b25lLmJpbiAmJgpAQCAtNzIsMTQgKzcwLDE0IEBACiAJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2NhdC1maWxlIHdpdGhvdXQgLS10ZXh0Y29udiAoc3ltbGluayknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhdC1maWxlIHdpdGhvdXQgLS10ZXh0Y29udiAoc3ltbGluayknICcKIAlnaXQgY2F0LWZpbGUgYmxvYiA6c3ltbGluay5iaW4gPnJlc3VsdCAmJgogCXByaW50ZiAiJXMiICJvbmUuYmluIiA+ZXhwZWN0ZWQKIAl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKICcKIAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdjYXQtZmlsZSAtLXRleHRjb252IG9uIGluZGV4IChzeW1saW5rKScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0LWZpbGUgLS10ZXh0Y29udiBvbiBpbmRleCAoc3ltbGluayknICcKIAkhIGdpdCBjYXQtZmlsZSAtLXRleHRjb252IDpzeW1saW5rLmJpbiAyPnJlc3VsdCAmJgogCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCiBmYXRhbDogZ2l0IGNhdC1maWxlIC0tdGV4dGNvbnY6IHVuYWJsZSB0byBydW4gdGV4dGNvbnYgb24gOnN5bWxpbmsuYmluCkBAIC04Nyw3ICs4NSw3IEBACiAJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2NhdC1maWxlIC0tdGV4dGNvbnYgb24gSEVBRCAoc3ltbGluayknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhdC1maWxlIC0tdGV4dGNvbnYgb24gSEVBRCAoc3ltbGluayknICcKIAkhIGdpdCBjYXQtZmlsZSAtLXRleHRjb252IEhFQUQ6c3ltbGluay5iaW4gMj5yZXN1bHQgJiYKIAljYXQgPmV4cGVjdGVkIDw8RU9GICYmCiBmYXRhbDogZ2l0IGNhdC1maWxlIC0tdGV4dGNvbnY6IHVuYWJsZSB0byBydW4gdGV4dGNvbnYgb24gSEVBRDpzeW1saW5rLmJpbgpkaWZmIC0tZ2l0IGEvdC90OTAwMS1zZW5kLWVtYWlsLnNoIGIvdC90OTAwMS1zZW5kLWVtYWlsLnNoCmluZGV4IGViZDVjNWQuLjI4MTNhYTkgMTAwNzU1Ci0tLSBhL3QvdDkwMDEtc2VuZC1lbWFpbC5zaAorKysgYi90L3Q5MDAxLXNlbmQtZW1haWwuc2gKQEAgLTE3MSw2ICsxNzEsODEgQEAKIEVPRgogIgogCit0ZXN0X3N1cHByZXNzX3NlbGYgKCkgeworCXRlc3RfY29tbWl0ICQzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUReIiAmJgorCisJd3JpdGVfc2NyaXB0IGNjY21kLXNlZCA8PC1FT0YgJiYKKwkJc2VkIC1uIC1lIHMvXmNjY21kLS0vL3AgIlwkMSIKKwlFT0YKKworCWdpdCBjb21taXQgLS1hbWVuZCAtLWF1dGhvcj0iJDEgPCQyPiIgLUYgLSAmJgorCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0xID4ic3VwcHJlc3Mtc2VsZi0kMy5wYXRjaCIgJiYKKworCWdpdCBzZW5kLWVtYWlsIC0tZnJvbT0iJDEgPCQyPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tY2MtY21kPS4vY2NjbWQtc2VkIFwKKwkJLS1zdXBwcmVzcy1jYz1zZWxmIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJc3VwcHJlc3Mtc2VsZi0kMy5wYXRjaCAmJgorCisJbXYgbXNndHh0MSBtc2d0eHQxLSQzICYmCisJc2VkIC1lICcvXiQvcScgbXNndHh0MS0kMyA+Im1zZ2hkcjEtJDMiICYmCisJPiJleHBlY3RlZC1uby1jYy0kMyIgJiYKKworCShncmVwICdeQ2M6JyBtc2doZHIxLSQzID4iYWN0dWFsLW5vLWNjLSQzIjsKKwkgdGVzdF9jbXAgZXhwZWN0ZWQtbm8tY2MtJDMgYWN0dWFsLW5vLWNjLSQzKQorfQorCit0ZXN0X3N1cHByZXNzX3NlbGZfdW5xdW90ZWQgKCkgeworCXRlc3Rfc3VwcHJlc3Nfc2VsZiAiJDEiICIkMiIgInVucXVvdGVkLSQzIiA8PC1FT0YKKwkJdGVzdCBzdXBwcmVzcy1jYy5zZWxmIHVucXVvdGVkLSQzIHdpdGggbmFtZSAkMSBlbWFpbCAkMgorCisJCXVucXVvdGVkLSQzCisKKwkJY2NjbWQtLSQxIDwkMj4KKworCQlDYzogJDEgPCQyPgorCQlTaWduZWQtb2ZmLWJ5OiAkMSA8JDI+CisJRU9GCit9CisKK3Rlc3Rfc3VwcHJlc3Nfc2VsZl9xdW90ZWQgKCkgeworCXRlc3Rfc3VwcHJlc3Nfc2VsZiAiJDEiICIkMiIgInF1b3RlZC0kMyIgPDwtRU9GCisJCXRlc3Qgc3VwcHJlc3MtY2Muc2VsZiBxdW90ZWQtJDMgd2l0aCBuYW1lICQxIGVtYWlsICQyCisKKwkJcXVvdGVkLSQzCisKKwkJY2NjbWQtLSIkMSIgPCQyPgorCisJCUNjOiAkMSA8JDI+CisJCUNjOiAiJDEiIDwkMj4KKwkJU2lnbmVkLW9mZi1ieTogJDEgPCQyPgorCQlTaWduZWQtb2ZmLWJ5OiAiJDEiIDwkMj4KKwlFT0YKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZWxmIG5hbWUgaXMgc3VwcHJlc3NlZCcgIgorCXRlc3Rfc3VwcHJlc3Nfc2VsZl91bnF1b3RlZCAnQSBVIFRob3InICdhdXRob3JAZXhhbXBsZS5jb20nIFwKKwkJJ3NlbGZfbmFtZV9zdXBwcmVzc2VkJworIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbGYgbmFtZSB3aXRoIGRvdCBpcyBzdXBwcmVzc2VkJyAiCisJdGVzdF9zdXBwcmVzc19zZWxmX3F1b3RlZCAnQSBVLiBUaG9yJyAnYXV0aG9yQGV4YW1wbGUuY29tJyBcCisJCSdzZWxmX25hbWVfZG90X3N1cHByZXNzZWQnCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnbm9uLWFzY2lpIHNlbGYgbmFtZSBpcyBzdXBwcmVzc2VkJyAiCisJdGVzdF9zdXBwcmVzc19zZWxmX3F1b3RlZCAnRsO8w7Fuw70gTsOibcOpJyAnb2RkXz89bWFpbEBleGFtcGxlLmNvbScgXAorCQknbm9uX2FzY2lpX3NlbGZfc3VwcHJlc3NlZCcKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzYW5pdGl6ZWQgc2VsZiBuYW1lIGlzIHN1cHByZXNzZWQnICIKKwl0ZXN0X3N1cHByZXNzX3NlbGZfdW5xdW90ZWQgJ1wiQSBVLiBUaG9yXCInICdhdXRob3JAZXhhbXBsZS5jb20nIFwKKwkJJ3NlbGZfbmFtZV9zYW5pdGl6ZWRfc3VwcHJlc3NlZCcKKyIKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdTaG93IGFsbCBoZWFkZXJzJyAnCiAJZ2l0IHNlbmQtZW1haWwgXAogCQktLWRyeS1ydW4gXApAQCAtODgxLDYgKzk1NiwyMCBAQAogCWdyZXAgIl5Gcm9tOiBGw7zDsW7DvSBOw6Jtw6kgPG9kZF8/PW1haWxAZXhhbXBsZS5jb20+IiBtc2d0eHQxCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAndXRmOCBzZW5kZXIgaXMgbm90IGR1cGxpY2F0ZWQnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJdGVzdF9jb21taXQgd2VpcmRfc2VuZGVyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUReIiAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtLWF1dGhvciAiRsO8w7Fuw70gTsOibcOpIDxvZGRfPz1tYWlsQGV4YW1wbGUuY29tPiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0xID5mdW5ueV9uYW1lLnBhdGNoICYmCisJZ2l0IHNlbmQtZW1haWwgLS1mcm9tPSJGw7zDsW7DvSBOw6Jtw6kgPG9kZF8/PW1haWxAZXhhbXBsZS5jb20+IiBcCisJICAtLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJICAtLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCSAgZnVubnlfbmFtZS5wYXRjaCAmJgorCWdyZXAgIl5Gcm9tOiAiIG1zZ3R4dDEgPm1zZ2Zyb20gJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIG1zZ2Zyb20KKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZW5kZW1haWwuY29tcG9zZWVuY29kaW5nIHdvcmtzJyAnCiAJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgogCWdpdCBjb25maWcgc2VuZGVtYWlsLmNvbXBvc2VlbmNvZGluZyBpc28tODg1OS0xICYmCkBAIC0xMDAzLDU1ICsxMDkyLDYgQEAKIAlncmVwICJJbi1SZXBseS1UbzogIiBzdGRvdXQKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICd3YXJuaW5nIHdpdGggYW4gaW1wbGljaXQgLS1jaGFpbi1yZXBseS10bycgJwotCWdpdCBzZW5kLWVtYWlsIFwKLQktLWRyeS1ydW4gXAotCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAotCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKLQlvdXRkaXIvMDAwPy0qLnBhdGNoIDI+ZXJyb3JzID5vdXQgJiYKLQlncmVwICJuby1jaGFpbi1yZXBseS10byIgZXJyb3JzCi0nCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnbm8gd2FybmluZyB3aXRoIGFuIGV4cGxpY2l0IC0tY2hhaW4tcmVwbHktdG8nICcKLQlnaXQgc2VuZC1lbWFpbCBcCi0JLS1kcnktcnVuIFwKLQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKLQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCi0JLS1jaGFpbi1yZXBseS10byBcCi0Jb3V0ZGlyLzAwMD8tKi5wYXRjaCAyPmVycm9ycyA+b3V0ICYmCi0JISBncmVwICJuby1jaGFpbi1yZXBseS10byIgZXJyb3JzCi0nCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnbm8gd2FybmluZyB3aXRoIGFuIGV4cGxpY2l0IC0tbm8tY2hhaW4tcmVwbHktdG8nICcKLQlnaXQgc2VuZC1lbWFpbCBcCi0JLS1kcnktcnVuIFwKLQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKLQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCi0JLS1ub2NoYWluLXJlcGx5LXRvIFwKLQlvdXRkaXIvMDAwPy0qLnBhdGNoIDI+ZXJyb3JzID5vdXQgJiYKLQkhIGdyZXAgIm5vLWNoYWluLXJlcGx5LXRvIiBlcnJvcnMKLScKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdubyB3YXJuaW5nIHdpdGggc2VuZGVtYWlsLmNoYWlucmVwbHl0byA9IGZhbHNlJyAnCi0JZ2l0IGNvbmZpZyBzZW5kZW1haWwuY2hhaW5yZXBseXRvIGZhbHNlICYmCi0JZ2l0IHNlbmQtZW1haWwgXAotCS0tZHJ5LXJ1biBcCi0JLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCi0JLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAotCW91dGRpci8wMDA/LSoucGF0Y2ggMj5lcnJvcnMgPm91dCAmJgotCSEgZ3JlcCAibm8tY2hhaW4tcmVwbHktdG8iIGVycm9ycwotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ25vIHdhcm5pbmcgd2l0aCBzZW5kZW1haWwuY2hhaW5yZXBseXRvID0gdHJ1ZScgJwotCWdpdCBjb25maWcgc2VuZGVtYWlsLmNoYWlucmVwbHl0byB0cnVlICYmCi0JZ2l0IHNlbmQtZW1haWwgXAotCS0tZHJ5LXJ1biBcCi0JLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCi0JLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAotCW91dGRpci8wMDA/LSoucGF0Y2ggMj5lcnJvcnMgPm91dCAmJgotCSEgZ3JlcCAibm8tY2hhaW4tcmVwbHktdG8iIGVycm9ycwotJwotCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbmRlbWFpbC50byB3b3JrcycgJwogCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBzZW5kZW1haWwudG8gIlNvbWVib2R5IDxzb21lYm9keUBleC5jb20+IiAmJgogCWdpdCBzZW5kLWVtYWlsIFwKZGlmZiAtLWdpdCBhL3QvdDkxMTQtZ2l0LXN2bi1kY29tbWl0LW1lcmdlLnNoIGIvdC90OTExNC1naXQtc3ZuLWRjb21taXQtbWVyZ2Uuc2gKaW5kZXggMzA3Nzg1MS4uZjUyNGQyZiAxMDA3NTUKLS0tIGEvdC90OTExNC1naXQtc3ZuLWRjb21taXQtbWVyZ2Uuc2gKKysrIGIvdC90OTExNC1naXQtc3ZuLWRjb21taXQtbWVyZ2Uuc2gKQEAgLTQ4LDcgKzQ4LDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGdpdCBtaXJyb3IgYW5kIG1lcmdlJyAnCiAJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgLXQgdGFncyAtVCB0cnVuayAtYiBicmFuY2hlcyAmJgogCWdpdCBzdm4gZmV0Y2ggJiYKLQlnaXQgY2hlY2tvdXQgLS10cmFjayAtYiBzdm4gcmVtb3Rlcy90cnVuayAmJgorCWdpdCBjaGVja291dCAtYiBzdm4gcmVtb3Rlcy90cnVuayAmJgogCWdpdCBjaGVja291dCAtYiBtZXJnZSAmJgogCWVjaG8gbmV3IGZpbGUgPiBuZXdfZmlsZSAmJgogCWdpdCBhZGQgbmV3X2ZpbGUgJiYKZGlmZiAtLWdpdCBhL3QvdDkzNTAtZmFzdC1leHBvcnQuc2ggYi90L3Q5MzUwLWZhc3QtZXhwb3J0LnNoCmluZGV4IDI0NzFiYzYuLjM0YzJkOGYgMTAwNzU1Ci0tLSBhL3QvdDkzNTAtZmFzdC1leHBvcnQuc2gKKysrIGIvdC90OTM1MC1mYXN0LWV4cG9ydC5zaApAQCAtMzk2LDcgKzM5Niw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWctb2JqX3RhZycgICAgICdnaXQgZmFzdC1leHBvcnQgdGFnLW9ial90YWcnCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWctb2JqX3RhZy1vYmonICdnaXQgZmFzdC1leHBvcnQgdGFnLW9ial90YWctb2JqJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdkaXJlY3RvcnkgYmVjb21lcyBzeW1saW5rJyAgICAgICAgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlyZWN0b3J5IGJlY29tZXMgc3ltbGluaycgICAgICAgICcKIAlnaXQgaW5pdCBkaXJ0b3N5bWxpbmsgJiYKIAlnaXQgaW5pdCByZXN1bHQgJiYKIAkoCkBAIC00MDgsOCArNDA4LDcgQEAKIAkJZ2l0IGFkZCBmb28vd29ybGQgYmFyL3dvcmxkICYmCiAJCWdpdCBjb21taXQgLXEgLW1vbmUgJiYKIAkJZ2l0IHJtIC1yIGZvbyAmJgotCQlsbiAtcyBiYXIgZm9vICYmCi0JCWdpdCBhZGQgZm9vICYmCisJCXRlc3RfbG5fc19hZGQgYmFyIGZvbyAmJgogCQlnaXQgY29tbWl0IC1xIC1tdHdvCiAJKSAmJgogCSgKZGlmZiAtLWdpdCBhL3QvdDk0MDItZ2l0LWN2c3NlcnZlci1yZWZzLnNoIGIvdC90OTQwMi1naXQtY3Zzc2VydmVyLXJlZnMuc2gKaW5kZXggNzM1YTAxOC4uZGI2OWFmMiAxMDA3NTUKLS0tIGEvdC90OTQwMi1naXQtY3Zzc2VydmVyLXJlZnMuc2gKKysrIGIvdC90OTQwMi1naXQtY3Zzc2VydmVyLXJlZnMuc2gKQEAgLTMzMCw3ICszMzAsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGF0ZSBiYXNpYyBkaWZmcyBzYXZlZCBkdXJpbmcgYWJvdmUgY3Zzd29yazIgZWRpdHMnICcKIAl0ZXN0ICQoZ3JlcCBJbmRleDogY3ZzRWRpdDEuZGlmZiB8IHdjIC1sKSA9IDEgJiYKLQl0ZXN0ICEgLXMgY3ZzRWRpdDItZW1wdHkuZGlmZiAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBjdnNFZGl0Mi1lbXB0eS5kaWZmICYmCiAJdGVzdCAkKGdyZXAgSW5kZXg6IGN2c0VkaXQyLU4uZGlmZiB8IHdjIC1sKSA9IDEgJiYKIAl0ZXN0ICQoZ3JlcCBJbmRleDogY3ZzRWRpdDMuZGlmZiB8IHdjIC1sKSA9IDMgJiYKIAlybSAtcmYgZGlmZlNhbmRib3ggJiYKQEAgLTQ1NiwyMCArNDU2LDIwIEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBkaWZmIC1yIHYxIC11JyAnCiAJKCBjZCBjdnN3b3JrICYmIGN2cyAtZiBkaWZmIC1yIHYxIC11ICkgPmN2c0RpZmYub3V0IDI+Y3ZzLmxvZyAmJgotCXRlc3QgISAtcyBjdnNEaWZmLm91dCAmJgotCXRlc3QgISAtcyBjdnMubG9nCisJdGVzdF9tdXN0X2JlX2VtcHR5IGN2c0RpZmYub3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGN2cy5sb2cKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGRpZmYgLU4gLXIgdjIgLXUnICcKIAkoIGNkIGN2c3dvcmsgJiYgISBjdnMgLWYgZGlmZiAtTiAtciB2MiAtdSApID5jdnNEaWZmLm91dCAyPmN2cy5sb2cgJiYKLQl0ZXN0ICEgLXMgY3ZzLmxvZyAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBjdnMubG9nICYmCiAJdGVzdCAtcyBjdnNEaWZmLm91dCAmJgogCWNoZWNrX2RpZmYgY3ZzRGlmZi5vdXQgdjIgdjEgPmNoZWNrX2RpZmYub3V0IDI+JjEKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGRpZmYgLU4gLXIgdjIgLXIgdjEuMicgJwogCSggY2QgY3Zzd29yayAmJiAhIGN2cyAtZiBkaWZmIC1OIC1yIHYyIC1yIHYxLjIgLXUgKSA+Y3ZzRGlmZi5vdXQgMj5jdnMubG9nICYmCi0JdGVzdCAhIC1zIGN2cy5sb2cgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgY3ZzLmxvZyAmJgogCXRlc3QgLXMgY3ZzRGlmZi5vdXQgJiYKIAljaGVja19kaWZmIGN2c0RpZmYub3V0IHYyIHYxLjIgPmNoZWNrX2RpZmYub3V0IDI+JjEKICcKQEAgLTQ4OCw3ICs0ODgsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBbY3Zzd29yazNdIGRpZmYnICcKIAkoIGNkIGN2c3dvcmszICYmICEgY3ZzIC1mIGRpZmYgLU4gLXUgKSA+IiRXT1JLRElSL2N2c0RpZmYub3V0IiAyPmN2cy5sb2cgJiYKLQl0ZXN0ICEgLXMgY3ZzLmxvZyAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBjdnMubG9nICYmCiAJdGVzdCAtcyBjdnNEaWZmLm91dCAmJgogCXRlc3QgJChncmVwIEluZGV4OiBjdnNEaWZmLm91dCB8IHdjIC1sKSA9IDMgJiYKIAl0ZXN0X2NtcCBjdnNEaWZmLm91dCBjdnN3b3JrM2VkaXQuZGlmZiAmJgpkaWZmIC0tZ2l0IGEvdC90OTUwMC1naXR3ZWItc3RhbmRhbG9uZS1uby1lcnJvcnMuc2ggYi90L3Q5NTAwLWdpdHdlYi1zdGFuZGFsb25lLW5vLWVycm9ycy5zaAppbmRleCA2NzgzYzE0Li42ZmNhMTkzIDEwMDc1NQotLS0gYS90L3Q5NTAwLWdpdHdlYi1zdGFuZGFsb25lLW5vLWVycm9ycy5zaAorKysgYi90L3Q5NTAwLWdpdHdlYi1zdGFuZGFsb25lLW5vLWVycm9ycy5zaApAQCAtMTU2LDEwICsxNTYsMTAgQEAKIAkgZ2l0IGNvbW1pdCAtYSAtbSAiRmlsZSByZW5hbWVkLiIgJiYKIAkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZiInCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ2NvbW1pdGRpZmYoMCk6IGZpbGUgdG8gc3ltbGluaycgXAogCSdybSByZW5hbWVkX2ZpbGUgJiYKLQkgbG4gLXMgZmlsZSByZW5hbWVkX2ZpbGUgJiYKKwkgdGVzdF9sbl9zX2FkZCBmaWxlIHJlbmFtZWRfZmlsZSAmJgogCSBnaXQgY29tbWl0IC1hIC1tICJGaWxlIHRvIHN5bWxpbmsuIiAmJgogCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKIApAQCAtMjEyLDE1ICsyMTIsMTQgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBjb21taXRkaWZmIHRlc3RpbmcgKHRha2VuIGZyb20gdDQxMTQtYXBwbHktdHlwZWNoYW5nZS5zaCkKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc2V0dXAgdHlwZWNoYW5nZSBjb21taXRzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0eXBlY2hhbmdlIGNvbW1pdHMnICcKIAllY2hvICJoZWxsbyB3b3JsZCIgPiBmb28gJiYKIAllY2hvICJoaSBwbGFuZXQiID4gYmFyICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmb28gYmFyICYmCiAJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCiAJZ2l0IGJyYW5jaCBpbml0aWFsICYmCiAJcm0gLWYgZm9vICYmCi0JbG4gLXMgYmFyIGZvbyAmJgotCWdpdCB1cGRhdGUtaW5kZXggZm9vICYmCisJdGVzdF9sbl9zX2FkZCBiYXIgZm9vICYmCiAJZ2l0IGNvbW1pdCAtbSAiZm9vIHN5bWxpbmtlZCB0byBiYXIiICYmCiAJZ2l0IGJyYW5jaCBmb28tc3ltbGlua2VkLXRvLWJhciAmJgogCXJtIC1mIGZvbyAmJgpAQCAtMzYxLDExICszNjAsNyBAQAogCSBlY2hvICJDaGFuZ2VkIiA+PiAwNC1yZW5hbWUtdG8gJiYKIAkgdGVzdF9jaG1vZCAreCAwNS1tb2RlLWNoYW5nZSAmJgogCSBybSAtZiAwNi1maWxlLW9yLXN5bWxpbmsgJiYKLQkgaWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUzsgdGhlbgotCQlsbiAtcyAwMS1jaGFuZ2UgMDYtZmlsZS1vci1zeW1saW5rCi0JIGVsc2UKLQkJcHJpbnRmICVzIDAxLWNoYW5nZSA+IDA2LWZpbGUtb3Itc3ltbGluawotCSBmaSAmJgorCSB0ZXN0X2xuX3NfYWRkIDAxLWNoYW5nZSAwNi1maWxlLW9yLXN5bWxpbmsgJiYKIAkgZWNobyAiQ2hhbmdlZCBhbmQgaGF2ZSBtb2RlIGNoYW5nZWQiID4gMDctY2hhbmdlLW1vZGUtY2hhbmdlCSYmCiAJIHRlc3RfY2htb2QgK3ggMDctY2hhbmdlLW1vZGUtY2hhbmdlICYmCiAJIGdpdCBjb21taXQgLWEgLW0gIkxhcmdlIGNvbW1pdCIgJiYKZGlmZiAtLWdpdCBhL3QvdDk4MDEtZ2l0LXA0LWJyYW5jaC5zaCBiL3QvdDk4MDEtZ2l0LXA0LWJyYW5jaC5zaAppbmRleCA5NzMwODIxLi4yYmYxNDJkIDEwMDc1NQotLS0gYS90L3Q5ODAxLWdpdC1wNC1icmFuY2guc2gKKysrIGIvdC90OTgwMS1naXQtcDQtYnJhbmNoLnNoCkBAIC00NjksOSArNDY5LDExIEBACiAJCVZpZXc6IC8vZGVwb3QvdXNlY3MvYjEvLi4uIC8vZGVwb3QvdXNlY3MvYjMvLi4uCiAJCUVPRgogCi0JCWVjaG8gYjMvYjMtZmlsZTMgPmIzL2IzLWZpbGUzICYmCi0JCXA0IGFkZCBiMy9iMy1maWxlMyAmJgotCQlwNCBzdWJtaXQgLWQgImIzL2IzLWZpbGUzIgorCQllY2hvIGIzL2IzLWZpbGUzXzEgPmIzL2IzLWZpbGUzXzEgJiYKKwkJZWNobyBiMy9iMy1maWxlM18yID5iMy9iMy1maWxlM18yICYmCisJCXA0IGFkZCBiMy9iMy1maWxlM18xICYmCisJCXA0IGFkZCBiMy9iMy1maWxlM18yICYmCisJCXA0IHN1Ym1pdCAtZCAiYjMvYjMtZmlsZTNfMSBiMy9iMy1maWxlM18yIgogCSkKICcKIApAQCAtNDg3LDYgKzQ4OSwyMSBAQAogCSkKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlLWNsaWVudC1zcGVjIGRldGVjdC1icmFuY2hlcyBza2lwcyBmaWxlcyBpbiBicmFuY2hlcycgJworCWNsaWVudF92aWV3ICIvL2RlcG90L3VzZWNzLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICItLy9kZXBvdC91c2Vjcy9iMy9iMy1maWxlM18xIC8vY2xpZW50L2IzL2IzLWZpbGUzXzEiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF9jcmVhdGVfcmVwbyAiJGdpdCIgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcDQgc3luYyAtLWRldGVjdC1icmFuY2hlcyAtLXVzZS1jbGllbnQtc3BlYyAvL2RlcG90L3VzZWNzQGFsbCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyIHA0L3VzZWNzL2IzICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGIxLWZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGIzLWZpbGUzXzIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYjMtZmlsZTNfMQorCSkKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAna2lsbCBwNGQnICcKIAlraWxsX3A0ZAogJwpkaWZmIC0tZ2l0IGEvdC90OTgwMi1naXQtcDQtZmlsZXR5cGUuc2ggYi90L3Q5ODAyLWdpdC1wNC1maWxldHlwZS5zaAppbmRleCBlZWVmYTY3Li5iMGQxZDk0IDEwMDc1NQotLS0gYS90L3Q5ODAyLWdpdC1wNC1maWxldHlwZS5zaAorKysgYi90L3Q5ODAyLWdpdC1wNC1maWxldHlwZS5zaApAQCAtOTUsNyArOTUsNyBAQAogCQlnaXQgaW5pdCAmJgogCQllY2hvICIqIGVvbD1sZiIgPi5naXRhdHRyaWJ1dGVzICYmCiAJCWdpdCBwNCBzeW5jIC8vZGVwb3RAYWxsICYmCi0JCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIG1hc3RlciBwNC9tYXN0ZXIgJiYKIAkJdGVzdF9jbXAgIiRjbGkiL2YtdW5peC1vcmlnIGYtdW5peCAmJgogCQl0ZXN0X2NtcCAiJGNsaSIvZi13aW4tYXMtbGYgZi13aW4KIAkpCkBAIC0xMDksNyArMTA5LDcgQEAKIAkJZ2l0IGluaXQgJiYKIAkJZWNobyAiKiBlb2w9Y3JsZiIgPi5naXRhdHRyaWJ1dGVzICYmCiAJCWdpdCBwNCBzeW5jIC8vZGVwb3RAYWxsICYmCi0JCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIG1hc3RlciBwNC9tYXN0ZXIgJiYKIAkJdGVzdF9jbXAgIiRjbGkiL2YtdW5peC1hcy1jcmxmIGYtdW5peCAmJgogCQl0ZXN0X2NtcCAiJGNsaSIvZi13aW4tb3JpZyBmLXdpbgogCSkKZGlmZiAtLWdpdCBhL3QvdDk5MDItY29tcGxldGlvbi5zaCBiL3QvdDk5MDItY29tcGxldGlvbi5zaAppbmRleCA2ZDlkMTQxLi4yNzJhMDcxIDEwMDc1NQotLS0gYS90L3Q5OTAyLWNvbXBsZXRpb24uc2gKKysrIGIvdC90OTkwMi1jb21wbGV0aW9uLnNoCkBAIC02OSw3ICs2OSw3IEBACiAJbG9jYWwgLWEgQ09NUFJFUExZIF93b3JkcwogCWxvY2FsIF9jd29yZAogCV93b3Jkcz0oICQxICkKLQl0ZXN0ICIkezE6IC0xfSIgPT0gJyAnICYmIF93b3Jkcys9KCcnKQorCXRlc3QgIiR7MTogLTF9IiA9ICcgJyAmJiBfd29yZHMrPSgnJykKIAkoKCBfY3dvcmQgPSAkeyNfd29yZHNbQF19IC0gMSApKQogCV9fZ2l0X3dyYXBfX2dpdF9tYWluICYmIHByaW50X2NvbXAKIH0KQEAgLTEyMiw2ICsxMjIsMTQwIEBACiAKIGludmFsaWRfdmFyaWFibGVfbmFtZT0nJHtmb28uYmFyfScKIAorYWN0dWFsPSIkVFJBU0hfRElSRUNUT1JZL2FjdHVhbCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIF9fZ2l0ZGlyIHRlc3RzJyAnCisJbWtkaXIgLXAgc3ViZGlyL3N1YnN1YmRpciAmJgorCWdpdCBpbml0IG90aGVycmVwbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdGRpciAtIGZyb20gY29tbWFuZCBsaW5lICh0aHJvdWdoICRfX2dpdF9kaXIpJyAnCisJZWNobyAiJFRSQVNIX0RJUkVDVE9SWS9vdGhlcnJlcG8vLmdpdCIgPmV4cGVjdGVkICYmCisJKAorCQlfX2dpdF9kaXI9IiRUUkFTSF9ESVJFQ1RPUlkvb3RoZXJyZXBvLy5naXQiICYmCisJCV9fZ2l0ZGlyID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0ZGlyIC0gcmVwbyBhcyBhcmd1bWVudCcgJworCWVjaG8gIm90aGVycmVwby8uZ2l0IiA+ZXhwZWN0ZWQgJiYKKwlfX2dpdGRpciAib3RoZXJyZXBvIiA+IiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0ZGlyIC0gcmVtb3RlIGFzIGFyZ3VtZW50JyAnCisJZWNobyAicmVtb3RlIiA+ZXhwZWN0ZWQgJiYKKwlfX2dpdGRpciAicmVtb3RlIiA+IiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0ZGlyIC0gLmdpdCBkaXJlY3RvcnkgaW4gY3dkJyAnCisJZWNobyAiLmdpdCIgPmV4cGVjdGVkICYmCisJX19naXRkaXIgPiIkYWN0dWFsIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdGRpciAtIC5naXQgZGlyZWN0b3J5IGluIHBhcmVudCcgJworCWVjaG8gIiQocHdkIC1QKS8uZ2l0IiA+ZXhwZWN0ZWQgJiYKKwkoCisJCWNkIHN1YmRpci9zdWJzdWJkaXIgJiYKKwkJX19naXRkaXIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRkaXIgLSBjd2QgaXMgYSAuZ2l0IGRpcmVjdG9yeScgJworCWVjaG8gIi4iID5leHBlY3RlZCAmJgorCSgKKwkJY2QgLmdpdCAmJgorCQlfX2dpdGRpciA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdGRpciAtIHBhcmVudCBpcyBhIC5naXQgZGlyZWN0b3J5JyAnCisJZWNobyAiJChwd2QgLVApLy5naXQiID5leHBlY3RlZCAmJgorCSgKKwkJY2QgLmdpdC9yZWZzL2hlYWRzICYmCisJCV9fZ2l0ZGlyID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0ZGlyIC0gJEdJVF9ESVIgc2V0IHdoaWxlIC5naXQgZGlyZWN0b3J5IGluIGN3ZCcgJworCWVjaG8gIiRUUkFTSF9ESVJFQ1RPUlkvb3RoZXJyZXBvLy5naXQiID5leHBlY3RlZCAmJgorCSgKKwkJR0lUX0RJUj0iJFRSQVNIX0RJUkVDVE9SWS9vdGhlcnJlcG8vLmdpdCIgJiYKKwkJZXhwb3J0IEdJVF9ESVIgJiYKKwkJX19naXRkaXIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRkaXIgLSAkR0lUX0RJUiBzZXQgd2hpbGUgLmdpdCBkaXJlY3RvcnkgaW4gcGFyZW50JyAnCisJZWNobyAiJFRSQVNIX0RJUkVDVE9SWS9vdGhlcnJlcG8vLmdpdCIgPmV4cGVjdGVkICYmCisJKAorCQlHSVRfRElSPSIkVFJBU0hfRElSRUNUT1JZL290aGVycmVwby8uZ2l0IiAmJgorCQlleHBvcnQgR0lUX0RJUiAmJgorCQljZCBzdWJkaXIgJiYKKwkJX19naXRkaXIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRkaXIgLSBub24tZXhpc3RpbmcgJEdJVF9ESVInICcKKwkoCisJCUdJVF9ESVI9IiRUUkFTSF9ESVJFQ1RPUlkvbm9uLWV4aXN0aW5nIiAmJgorCQlleHBvcnQgR0lUX0RJUiAmJgorCQl0ZXN0X211c3RfZmFpbCBfX2dpdGRpcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRkaXIgLSBnaXRmaWxlIGluIGN3ZCcgJworCWVjaG8gIiQocHdkIC1QKS9vdGhlcnJlcG8vLmdpdCIgPmV4cGVjdGVkICYmCisJZWNobyAiZ2l0ZGlyOiAkVFJBU0hfRElSRUNUT1JZL290aGVycmVwby8uZ2l0IiA+c3ViZGlyLy5naXQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIHN1YmRpci8uZ2l0IiAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCV9fZ2l0ZGlyID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0ZGlyIC0gZ2l0ZmlsZSBpbiBwYXJlbnQnICcKKwllY2hvICIkKHB3ZCAtUCkvb3RoZXJyZXBvLy5naXQiID5leHBlY3RlZCAmJgorCWVjaG8gImdpdGRpcjogJFRSQVNIX0RJUkVDVE9SWS9vdGhlcnJlcG8vLmdpdCIgPnN1YmRpci8uZ2l0ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBzdWJkaXIvLmdpdCIgJiYKKwkoCisJCWNkIHN1YmRpci9zdWJzdWJkaXIgJiYKKwkJX19naXRkaXIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnX19naXRkaXIgLSByZXN1bHRpbmcgcGF0aCBhdm9pZHMgc3ltbGlua3MnICcKKwllY2hvICIkKHB3ZCAtUCkvb3RoZXJyZXBvLy5naXQiID5leHBlY3RlZCAmJgorCW1rZGlyIG90aGVycmVwby9kaXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBvdGhlcnJlcG8vZGlyIiAmJgorCWxuIC1zIG90aGVycmVwby9kaXIgbGluayAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbGluayIgJiYKKwkoCisJCWNkIGxpbmsgJiYKKwkJX19naXRkaXIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRkaXIgLSBub3QgYSBnaXQgcmVwb3NpdG9yeScgJworCSgKKwkJY2Qgc3ViZGlyL3N1YnN1YmRpciAmJgorCQlHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX0RJUkVDVE9SWSIgJiYKKwkJZXhwb3J0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTICYmCisJCXRlc3RfbXVzdF9mYWlsIF9fZ2l0ZGlyCisJKQorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdGNvbXAgLSB0cmFpbGluZyBzcGFjZSAtIG9wdGlvbnMnICcKIAl0ZXN0X2dpdGNvbXAgIi0tcmUiICItLWRyeS1ydW4gLS1yZXVzZS1tZXNzYWdlPSAtLXJlZWRpdC1tZXNzYWdlPQogCQktLXJlc2V0LWF1dGhvciIgPDwtRU9GCkBAIC0yMzEsNiArMzY1LDcgQEAKIAktLWV4ZWMtcGF0aCBaCiAJLS1leGVjLXBhdGg9CiAJLS1odG1sLXBhdGggWgorCS0tbWFuLXBhdGggWgogCS0taW5mby1wYXRoIFoKIAktLXdvcmstdHJlZT0KIAktLW5hbWVzcGFjZT0KQEAgLTM0Nyw0ICs0ODIsODEgQEAKIAl0ZXN0X2NvbXBsZXRpb24gImdpdCBzZW5kLWVtYWlsIG1hIiAibWFzdGVyICIKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tcGxldGUgZmlsZXMnICcKKwlnaXQgaW5pdCB0bXAgJiYgY2QgdG1wICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjZCAuLiAmJiBybSAtcmYgdG1wIiAmJgorCisJZWNobyAiZXhwZWN0ZWQiID4gLmdpdGlnbm9yZSAmJgorCWVjaG8gIm91dCIgPj4gLmdpdGlnbm9yZSAmJgorCisJZ2l0IGFkZCAuZ2l0aWdub3JlICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgY29tbWl0ICIgIi5naXRpZ25vcmUiICYmCisKKwlnaXQgY29tbWl0IC1tIGlnbm9yZSAmJgorCisJdG91Y2ggbmV3ICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgYWRkICIgIm5ldyIgJiYKKworCWdpdCBhZGQgbmV3ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBuZXcgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBhZGQgIiAiIiAmJgorCisJZ2l0IG12IG5ldyBtb2RpZmllZCAmJgorCWVjaG8gbW9kaWZ5ID4gbW9kaWZpZWQgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBhZGQgIiAibW9kaWZpZWQiICYmCisKKwl0b3VjaCB1bnRyYWNrZWQgJiYKKworCTogVE9ETyAuZ2l0aWdub3JlIHNob3VsZCBub3QgYmUgaGVyZSAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IHJtICIgPDwtXEVPRiAmJgorCS5naXRpZ25vcmUKKwltb2RpZmllZAorCUVPRgorCisJdGVzdF9jb21wbGV0aW9uICJnaXQgY2xlYW4gIiAidW50cmFja2VkIiAmJgorCisJOiBUT0RPIC5naXRpZ25vcmUgc2hvdWxkIG5vdCBiZSBoZXJlICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgbXYgIiA8PC1cRU9GICYmCisJLmdpdGlnbm9yZQorCW1vZGlmaWVkCisJRU9GCisKKwlta2RpciBkaXIgJiYKKwl0b3VjaCBkaXIvZmlsZS1pbi1kaXIgJiYKKwlnaXQgYWRkIGRpci9maWxlLWluLWRpciAmJgorCWdpdCBjb21taXQgLW0gZGlyICYmCisKKwlta2RpciB1bnRyYWNrZWQtZGlyICYmCisKKwk6IFRPRE8gLmdpdGlnbm9yZSBzaG91bGQgbm90IGJlIGhlcmUgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBtdiBtb2RpZmllZCAiIDw8LVxFT0YgJiYKKwkuZ2l0aWdub3JlCisJZGlyCisJbW9kaWZpZWQKKwl1bnRyYWNrZWQKKwl1bnRyYWNrZWQtZGlyCisJRU9GCisKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBjb21taXQgIiAibW9kaWZpZWQiICYmCisKKwk6IFRPRE8gLmdpdGlnbm9yZSBzaG91bGQgbm90IGJlIGhlcmUgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBscy1maWxlcyAiIDw8LVxFT0YKKwkuZ2l0aWdub3JlCisJZGlyCisJbW9kaWZpZWQKKwlFT0YKKworCXRvdWNoIG1vbWlmaWVkICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgYWRkIG1vbSIgIm1vbWlmaWVkIgorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjb21wbGV0ZSB3aXRoIHRpbGRlIGV4cGFuc2lvbicgJworCWdpdCBpbml0IHRtcCAmJiBjZCB0bXAgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNkIC4uICYmIHJtIC1yZiB0bXAiICYmCisKKwl0b3VjaCB+L3RtcC9maWxlICYmCisKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBhZGQgfi90bXAvIiAifi90bXAvZmlsZSIKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5OTAzLWJhc2gtcHJvbXB0LnNoIGIvdC90OTkwMy1iYXNoLXByb21wdC5zaAppbmRleCAwODNiMzE5Li4zYzNlNGU4IDEwMDc1NQotLS0gYS90L3Q5OTAzLWJhc2gtcHJvbXB0LnNoCisrKyBiL3QvdDk5MDMtYmFzaC1wcm9tcHQuc2gKQEAgLTEwLDUyOCArMTAsNTU4IEBACiAuICIkR0lUX0JVSUxEX0RJUi9jb250cmliL2NvbXBsZXRpb24vZ2l0LXByb21wdC5zaCIKIAogYWN0dWFsPSIkVFJBU0hfRElSRUNUT1JZL2FjdHVhbCIKK2NfcmVkPSdcXFtcXGVbMzFtXFxdJworY19ncmVlbj0nXFxbXFxlWzMybVxcXScKK2NfbGJsdWU9J1xcW1xcZVsxOzM0bVxcXScKK2NfY2xlYXI9J1xcW1xcZVswbVxcXScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIHByb21wdCB0ZXN0cycgJwotCW1rZGlyIC1wIHN1YmRpci9zdWJzdWJkaXIgJiYKIAlnaXQgaW5pdCBvdGhlcnJlcG8gJiYKLQllY2hvIDEgPiBmaWxlICYmCisJZWNobyAxID5maWxlICYmCiAJZ2l0IGFkZCBmaWxlICYmCiAJdGVzdF90aWNrICYmCiAJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCiAJZ2l0IHRhZyAtYSAtbSBtc2cxIHQxICYmCiAJZ2l0IGNoZWNrb3V0IC1iIGIxICYmCi0JZWNobyAyID4gZmlsZSAmJgorCWVjaG8gMiA+ZmlsZSAmJgogCWdpdCBjb21taXQgLW0gInNlY29uZCBiMSIgZmlsZSAmJgotCWVjaG8gMyA+IGZpbGUgJiYKKwllY2hvIDMgPmZpbGUgJiYKIAlnaXQgY29tbWl0IC1tICJ0aGlyZCBiMSIgZmlsZSAmJgogCWdpdCB0YWcgLWEgLW0gbXNnMiB0MiAmJgogCWdpdCBjaGVja291dCAtYiBiMiBtYXN0ZXIgJiYKLQllY2hvIDAgPiBmaWxlICYmCisJZWNobyAwID5maWxlICYmCiAJZ2l0IGNvbW1pdCAtbSAic2Vjb25kIGIyIiBmaWxlICYmCi0JZWNobyAwMCA+IGZpbGUgJiYKKwllY2hvIDAwID5maWxlICYmCiAJZ2l0IGNvbW1pdCAtbSAiYW5vdGhlciBiMiIgZmlsZSAmJgotCWVjaG8gMDAwID4gZmlsZSAmJgorCWVjaG8gMDAwID5maWxlICYmCiAJZ2l0IGNvbW1pdCAtbSAieWV0IGFub3RoZXIgYjIiIGZpbGUgJiYKIAlnaXQgY2hlY2tvdXQgbWFzdGVyCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGRpciAtIGZyb20gY29tbWFuZCBsaW5lICh0aHJvdWdoICRfX2dpdF9kaXIpJyAnCi0JZWNobyAiJFRSQVNIX0RJUkVDVE9SWS9vdGhlcnJlcG8vLmdpdCIgPiBleHBlY3RlZCAmJgotCSgKLQkJX19naXRfZGlyPSIkVFJBU0hfRElSRUNUT1JZL290aGVycmVwby8uZ2l0IiAmJgotCQlfX2dpdGRpciA+ICIkYWN0dWFsIgotCSkgJiYKLQl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKLScKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0ZGlyIC0gcmVwbyBhcyBhcmd1bWVudCcgJwotCWVjaG8gIm90aGVycmVwby8uZ2l0IiA+IGV4cGVjdGVkICYmCi0JX19naXRkaXIgIm90aGVycmVwbyIgPiAiJGFjdHVhbCIgJiYKLQl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKLScKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0ZGlyIC0gcmVtb3RlIGFzIGFyZ3VtZW50JyAnCi0JZWNobyAicmVtb3RlIiA+IGV4cGVjdGVkICYmCi0JX19naXRkaXIgInJlbW90ZSIgPiAiJGFjdHVhbCIgJiYKLQl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKLScKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0ZGlyIC0gLmdpdCBkaXJlY3RvcnkgaW4gY3dkJyAnCi0JZWNobyAiLmdpdCIgPiBleHBlY3RlZCAmJgotCV9fZ2l0ZGlyID4gIiRhY3R1YWwiICYmCi0JdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCi0nCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGRpciAtIC5naXQgZGlyZWN0b3J5IGluIHBhcmVudCcgJwotCWVjaG8gIiQocHdkIC1QKS8uZ2l0IiA+IGV4cGVjdGVkICYmCi0JKAotCQljZCBzdWJkaXIvc3Vic3ViZGlyICYmCi0JCV9fZ2l0ZGlyID4gIiRhY3R1YWwiCi0JKSAmJgotCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRkaXIgLSBjd2QgaXMgYSAuZ2l0IGRpcmVjdG9yeScgJwotCWVjaG8gIi4iID4gZXhwZWN0ZWQgJiYKLQkoCi0JCWNkIC5naXQgJiYKLQkJX19naXRkaXIgPiAiJGFjdHVhbCIKLQkpICYmCi0JdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCi0nCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGRpciAtIHBhcmVudCBpcyBhIC5naXQgZGlyZWN0b3J5JyAnCi0JZWNobyAiJChwd2QgLVApLy5naXQiID4gZXhwZWN0ZWQgJiYKLQkoCi0JCWNkIC5naXQvcmVmcy9oZWFkcyAmJgotCQlfX2dpdGRpciA+ICIkYWN0dWFsIgotCSkgJiYKLQl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKLScKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0ZGlyIC0gJEdJVF9ESVIgc2V0IHdoaWxlIC5naXQgZGlyZWN0b3J5IGluIGN3ZCcgJwotCWVjaG8gIiRUUkFTSF9ESVJFQ1RPUlkvb3RoZXJyZXBvLy5naXQiID4gZXhwZWN0ZWQgJiYKLQkoCi0JCUdJVF9ESVI9IiRUUkFTSF9ESVJFQ1RPUlkvb3RoZXJyZXBvLy5naXQiICYmCi0JCWV4cG9ydCBHSVRfRElSICYmCi0JCV9fZ2l0ZGlyID4gIiRhY3R1YWwiCi0JKSAmJgotCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRkaXIgLSAkR0lUX0RJUiBzZXQgd2hpbGUgLmdpdCBkaXJlY3RvcnkgaW4gcGFyZW50JyAnCi0JZWNobyAiJFRSQVNIX0RJUkVDVE9SWS9vdGhlcnJlcG8vLmdpdCIgPiBleHBlY3RlZCAmJgotCSgKLQkJR0lUX0RJUj0iJFRSQVNIX0RJUkVDVE9SWS9vdGhlcnJlcG8vLmdpdCIgJiYKLQkJZXhwb3J0IEdJVF9ESVIgJiYKLQkJY2Qgc3ViZGlyICYmCi0JCV9fZ2l0ZGlyID4gIiRhY3R1YWwiCi0JKSAmJgotCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRkaXIgLSBub24tZXhpc3RpbmcgJEdJVF9ESVInICcKLQkoCi0JCUdJVF9ESVI9IiRUUkFTSF9ESVJFQ1RPUlkvbm9uLWV4aXN0aW5nIiAmJgotCQlleHBvcnQgR0lUX0RJUiAmJgotCQl0ZXN0X211c3RfZmFpbCBfX2dpdGRpcgotCSkKLScKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0ZGlyIC0gZ2l0ZmlsZSBpbiBjd2QnICcKLQllY2hvICIkKHB3ZCAtUCkvb3RoZXJyZXBvLy5naXQiID4gZXhwZWN0ZWQgJiYKLQllY2hvICJnaXRkaXI6ICRUUkFTSF9ESVJFQ1RPUlkvb3RoZXJyZXBvLy5naXQiID4gc3ViZGlyLy5naXQgJiYKLQl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIHN1YmRpci8uZ2l0IiAmJgotCSgKLQkJY2Qgc3ViZGlyICYmCi0JCV9fZ2l0ZGlyID4gIiRhY3R1YWwiCi0JKSAmJgotCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRkaXIgLSBnaXRmaWxlIGluIHBhcmVudCcgJwotCWVjaG8gIiQocHdkIC1QKS9vdGhlcnJlcG8vLmdpdCIgPiBleHBlY3RlZCAmJgotCWVjaG8gImdpdGRpcjogJFRSQVNIX0RJUkVDVE9SWS9vdGhlcnJlcG8vLmdpdCIgPiBzdWJkaXIvLmdpdCAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgc3ViZGlyLy5naXQiICYmCi0JKAotCQljZCBzdWJkaXIvc3Vic3ViZGlyICYmCi0JCV9fZ2l0ZGlyID4gIiRhY3R1YWwiCi0JKSAmJgotCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdnaXRkaXIgLSByZXN1bHRpbmcgcGF0aCBhdm9pZHMgc3ltbGlua3MnICcKLQllY2hvICIkKHB3ZCAtUCkvb3RoZXJyZXBvLy5naXQiID4gZXhwZWN0ZWQgJiYKLQlta2RpciBvdGhlcnJlcG8vZGlyICYmCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgb3RoZXJyZXBvL2RpciIgJiYKLQlsbiAtcyBvdGhlcnJlcG8vZGlyIGxpbmsgJiYKLQl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxpbmsiICYmCi0JKAotCQljZCBsaW5rICYmCi0JCV9fZ2l0ZGlyID4gIiRhY3R1YWwiCi0JKSAmJgotCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRkaXIgLSBub3QgYSBnaXQgcmVwb3NpdG9yeScgJwotCSgKLQkJY2Qgc3ViZGlyL3N1YnN1YmRpciAmJgotCQlHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX0RJUkVDVE9SWSIgJiYKLQkJZXhwb3J0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTICYmCi0JCXRlc3RfbXVzdF9mYWlsIF9fZ2l0ZGlyCi0JKQotJwotCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBicmFuY2ggbmFtZScgJwotCXByaW50ZiAiIChtYXN0ZXIpIiA+IGV4cGVjdGVkICYmCi0JX19naXRfcHMxID4gIiRhY3R1YWwiICYmCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgorCV9fZ2l0X3BzMSA+IiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3Byb21wdCAtIGJyYW5jaCBuYW1lIC0gc3ltbGluayBzeW1yZWYnICcKKwlwcmludGYgIiAobWFzdGVyKSIgPmV4cGVjdGVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCXRlc3RfY29uZmlnIGNvcmUucHJlZmVyU3ltbGlua1JlZnMgdHJ1ZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlfX2dpdF9wczEgPiIkYWN0dWFsIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSB1bmJvcm4gYnJhbmNoJyAnCisJcHJpbnRmICIgKHVuYm9ybikiID5leHBlY3RlZCAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiB1bmJvcm4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGV0YWNoZWQgaGVhZCcgJwotCXByaW50ZiAiICgoJXMuLi4pKSIgJChnaXQgbG9nIC0xIC0tZm9ybWF0PSIlaCIgYjFeKSA+IGV4cGVjdGVkICYmCisJcHJpbnRmICIgKCglcy4uLikpIiAkKGdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVoIiAtLWFiYnJldj0xMyBiMV4pID5leHBlY3RlZCAmJgorCXRlc3RfY29uZmlnIGNvcmUuYWJicmV2IDEzICYmCiAJZ2l0IGNoZWNrb3V0IGIxXiAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKLQlfX2dpdF9wczEgPiAiJGFjdHVhbCIgJiYKKwlfX2dpdF9wczEgPiIkYWN0dWFsIiAmJgogCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkZXNjcmliZSBkZXRhY2hlZCBoZWFkIC0gY29udGFpbnMnICcKLQlwcmludGYgIiAoKHQyfjEpKSIgPiBleHBlY3RlZCAmJgorCXByaW50ZiAiICgodDJ+MSkpIiA+ZXhwZWN0ZWQgJiYKIAlnaXQgY2hlY2tvdXQgYjFeICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgogCSgKIAkJR0lUX1BTMV9ERVNDUklCRV9TVFlMRT1jb250YWlucyAmJgotCQlfX2dpdF9wczEgPiAiJGFjdHVhbCIKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKIAkpICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRlc2NyaWJlIGRldGFjaGVkIGhlYWQgLSBicmFuY2gnICcKLQlwcmludGYgIiAoKGIxfjEpKSIgPiBleHBlY3RlZCAmJgorCXByaW50ZiAiICgoYjF+MSkpIiA+ZXhwZWN0ZWQgJiYKIAlnaXQgY2hlY2tvdXQgYjFeICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgogCSgKIAkJR0lUX1BTMV9ERVNDUklCRV9TVFlMRT1icmFuY2ggJiYKLQkJX19naXRfcHMxID4gIiRhY3R1YWwiCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCiAJKSAmJgogCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkZXNjcmliZSBkZXRhY2hlZCBoZWFkIC0gZGVzY3JpYmUnICcKLQlwcmludGYgIiAoKHQxLTEtZyVzKSkiICQoZ2l0IGxvZyAtMSAtLWZvcm1hdD0iJWgiIGIxXikgPiBleHBlY3RlZCAmJgorCXByaW50ZiAiICgodDEtMS1nJXMpKSIgJChnaXQgbG9nIC0xIC0tZm9ybWF0PSIlaCIgYjFeKSA+ZXhwZWN0ZWQgJiYKIAlnaXQgY2hlY2tvdXQgYjFeICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgogCSgKIAkJR0lUX1BTMV9ERVNDUklCRV9TVFlMRT1kZXNjcmliZSAmJgotCQlfX2dpdF9wczEgPiAiJGFjdHVhbCIKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKIAkpICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRlc2NyaWJlIGRldGFjaGVkIGhlYWQgLSBkZWZhdWx0JyAnCi0JcHJpbnRmICIgKCh0MikpIiA+IGV4cGVjdGVkICYmCisJcHJpbnRmICIgKCh0MikpIiA+ZXhwZWN0ZWQgJiYKIAlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggYjEgJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCi0JX19naXRfcHMxID4gIiRhY3R1YWwiICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gaW5zaWRlIC5naXQgZGlyZWN0b3J5JyAnCi0JcHJpbnRmICIgKEdJVF9ESVIhKSIgPiBleHBlY3RlZCAmJgorCXByaW50ZiAiIChHSVRfRElSISkiID5leHBlY3RlZCAmJgogCSgKIAkJY2QgLmdpdCAmJgotCQlfX2dpdF9wczEgPiAiJGFjdHVhbCIKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKIAkpICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRlZXAgaW5zaWRlIC5naXQgZGlyZWN0b3J5JyAnCi0JcHJpbnRmICIgKEdJVF9ESVIhKSIgPiBleHBlY3RlZCAmJgorCXByaW50ZiAiIChHSVRfRElSISkiID5leHBlY3RlZCAmJgogCSgKIAkJY2QgLmdpdC9yZWZzL2hlYWRzICYmCi0JCV9fZ2l0X3BzMSA+ICIkYWN0dWFsIgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgogCSkgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gaW5zaWRlIGJhcmUgcmVwb3NpdG9yeScgJwotCXByaW50ZiAiIChCQVJFOm1hc3RlcikiID4gZXhwZWN0ZWQgJiYKKwlwcmludGYgIiAoQkFSRTptYXN0ZXIpIiA+ZXhwZWN0ZWQgJiYKIAlnaXQgaW5pdCAtLWJhcmUgYmFyZS5naXQgJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBiYXJlLmdpdCIgJiYKIAkoCiAJCWNkIGJhcmUuZ2l0ICYmCi0JCV9fZ2l0X3BzMSA+ICIkYWN0dWFsIgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgogCSkgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gaW50ZXJhY3RpdmUgcmViYXNlJyAnCi0JcHJpbnRmICIgKGIxfFJFQkFTRS1pIDIvMykiID4gZXhwZWN0ZWQKLQllY2hvICIjISRTSEVMTF9QQVRIIiA+ZmFrZV9lZGl0b3Iuc2ggJiYKLQljYXQgPj5mYWtlX2VkaXRvci5zaCA8PFxFT0YgJiYKLWVjaG8gImV4ZWMgZWNobyIgPiAiJDEiCi1lY2hvICJlZGl0ICQoZ2l0IGxvZyAtMSAtLWZvcm1hdD0iJWgiKSIgPj4gIiQxIgotZWNobyAiZXhlYyBlY2hvIiA+PiAiJDEiCi1FT0YKKwlwcmludGYgIiAoYjF8UkVCQVNFLWkgMi8zKSIgPmV4cGVjdGVkCisJd3JpdGVfc2NyaXB0IGZha2VfZWRpdG9yLnNoIDw8LVxFT0YgJiYKKwkJZWNobyAiZXhlYyBlY2hvIiA+IiQxIgorCQllY2hvICJlZGl0ICQoZ2l0IGxvZyAtMSAtLWZvcm1hdD0iJWgiKSIgPj4iJDEiCisJCWVjaG8gImV4ZWMgZWNobyIgPj4iJDEiCisJRU9GCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBmYWtlX2VkaXRvci5zaCIgJiYKLQljaG1vZCBhK3ggZmFrZV9lZGl0b3Iuc2ggJiYKIAl0ZXN0X3NldF9lZGl0b3IgIiRUUkFTSF9ESVJFQ1RPUlkvZmFrZV9lZGl0b3Iuc2giICYmCiAJZ2l0IGNoZWNrb3V0IGIxICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgogCWdpdCByZWJhc2UgLWkgSEVBRF4gJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIKLQlfX2dpdF9wczEgPiAiJGFjdHVhbCIgJiYKKwlfX2dpdF9wczEgPiIkYWN0dWFsIiAmJgogCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSByZWJhc2UgbWVyZ2UnICcKLQlwcmludGYgIiAoYjJ8UkVCQVNFLW0gMS8zKSIgPiBleHBlY3RlZCAmJgorCXByaW50ZiAiIChiMnxSRUJBU0UtbSAxLzMpIiA+ZXhwZWN0ZWQgJiYKIAlnaXQgY2hlY2tvdXQgYjIgJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLW1lcmdlIGIxIGIyICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCi0JX19naXRfcHMxID4gIiRhY3R1YWwiICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gcmViYXNlJyAnCi0JcHJpbnRmICIgKCh0Mil8UkVCQVNFIDEvMykiID4gZXhwZWN0ZWQgJiYKKwlwcmludGYgIiAoYjJ8UkVCQVNFIDEvMykiID5leHBlY3RlZCAmJgogCWdpdCBjaGVja291dCBiMiAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIGIxIGIyICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCi0JX19naXRfcHMxID4gIiRhY3R1YWwiICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gbWVyZ2UnICcKLQlwcmludGYgIiAoYjF8TUVSR0lORykiID4gZXhwZWN0ZWQgJiYKKwlwcmludGYgIiAoYjF8TUVSR0lORykiID5leHBlY3RlZCAmJgogCWdpdCBjaGVja291dCBiMSAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYjIgJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCi0JX19naXRfcHMxID4gIiRhY3R1YWwiICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gY2hlcnJ5LXBpY2snICcKLQlwcmludGYgIiAobWFzdGVyfENIRVJSWS1QSUNLSU5HKSIgPiBleHBlY3RlZCAmJgorCXByaW50ZiAiIChtYXN0ZXJ8Q0hFUlJZLVBJQ0tJTkcpIiA+ZXhwZWN0ZWQgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgYjEgJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCi0JX19naXRfcHMxID4gIiRhY3R1YWwiICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gYmlzZWN0JyAnCi0JcHJpbnRmICIgKG1hc3RlcnxCSVNFQ1RJTkcpIiA+IGV4cGVjdGVkICYmCisJcHJpbnRmICIgKG1hc3RlcnxCSVNFQ1RJTkcpIiA+ZXhwZWN0ZWQgJiYKIAlnaXQgYmlzZWN0IHN0YXJ0ICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgYmlzZWN0IHJlc2V0IiAmJgotCV9fZ2l0X3BzMSA+ICIkYWN0dWFsIiAmJgorCV9fZ2l0X3BzMSA+IiRhY3R1YWwiICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBjbGVhbicgJwotCXByaW50ZiAiIChtYXN0ZXIpIiA+IGV4cGVjdGVkICYmCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgogCSgKIAkJR0lUX1BTMV9TSE9XRElSVFlTVEFURT15ICYmCi0JCV9fZ2l0X3BzMSA+ICIkYWN0dWFsIgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgogCSkgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIGRpcnR5IHdvcmt0cmVlJyAnCi0JcHJpbnRmICIgKG1hc3RlciAqKSIgPiBleHBlY3RlZCAmJgotCWVjaG8gImRpcnR5IiA+IGZpbGUgJiYKKwlwcmludGYgIiAobWFzdGVyICopIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICJkaXJ0eSIgPmZpbGUgJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCiAJKAogCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKLQkJX19naXRfcHMxID4gIiRhY3R1YWwiCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCiAJKSAmJgogCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkaXJ0eSBzdGF0dXMgaW5kaWNhdG9yIC0gZGlydHkgaW5kZXgnICcKLQlwcmludGYgIiAobWFzdGVyICspIiA+IGV4cGVjdGVkICYmCi0JZWNobyAiZGlydHkiID4gZmlsZSAmJgorCXByaW50ZiAiIChtYXN0ZXIgKykiID5leHBlY3RlZCAmJgorCWVjaG8gImRpcnR5IiA+ZmlsZSAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKIAlnaXQgYWRkIC11ICYmCiAJKAogCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKLQkJX19naXRfcHMxID4gIiRhY3R1YWwiCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCiAJKSAmJgogCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkaXJ0eSBzdGF0dXMgaW5kaWNhdG9yIC0gZGlydHkgaW5kZXggYW5kIHdvcmt0cmVlJyAnCi0JcHJpbnRmICIgKG1hc3RlciAqKykiID4gZXhwZWN0ZWQgJiYKLQllY2hvICJkaXJ0eSBpbmRleCIgPiBmaWxlICYmCisJcHJpbnRmICIgKG1hc3RlciAqKykiID5leHBlY3RlZCAmJgorCWVjaG8gImRpcnR5IGluZGV4IiA+ZmlsZSAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKIAlnaXQgYWRkIC11ICYmCi0JZWNobyAiZGlydHkgd29ya3RyZWUiID4gZmlsZSAmJgorCWVjaG8gImRpcnR5IHdvcmt0cmVlIiA+ZmlsZSAmJgogCSgKIAkJR0lUX1BTMV9TSE9XRElSVFlTVEFURT15ICYmCi0JCV9fZ2l0X3BzMSA+ICIkYWN0dWFsIgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgogCSkgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIGJlZm9yZSByb290IGNvbW1pdCcgJwotCXByaW50ZiAiIChtYXN0ZXIgIykiID4gZXhwZWN0ZWQgJiYKKwlwcmludGYgIiAobWFzdGVyICMpIiA+ZXhwZWN0ZWQgJiYKIAkoCiAJCUdJVF9QUzFfU0hPV0RJUlRZU1RBVEU9eSAmJgogCQljZCBvdGhlcnJlcG8gJiYKLQkJX19naXRfcHMxID4gIiRhY3R1YWwiCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCiAJKSAmJgogCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkaXJ0eSBzdGF0dXMgaW5kaWNhdG9yIC0gc2hlbGwgdmFyaWFibGUgdW5zZXQgd2l0aCBjb25maWcgZGlzYWJsZWQnICcKLQlwcmludGYgIiAobWFzdGVyKSIgPiBleHBlY3RlZCAmJgotCWVjaG8gImRpcnR5IiA+IGZpbGUgJiYKKwlwcmludGYgIiAobWFzdGVyKSIgPmV4cGVjdGVkICYmCisJZWNobyAiZGlydHkiID5maWxlICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgogCXRlc3RfY29uZmlnIGJhc2guc2hvd0RpcnR5U3RhdGUgZmFsc2UgJiYKIAkoCiAJCXNhbmVfdW5zZXQgR0lUX1BTMV9TSE9XRElSVFlTVEFURSAmJgotCQlfX2dpdF9wczEgPiAiJGFjdHVhbCIKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKIAkpICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBzaGVsbCB2YXJpYWJsZSB1bnNldCB3aXRoIGNvbmZpZyBlbmFibGVkJyAnCi0JcHJpbnRmICIgKG1hc3RlcikiID4gZXhwZWN0ZWQgJiYKLQllY2hvICJkaXJ0eSIgPiBmaWxlICYmCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgorCWVjaG8gImRpcnR5IiA+ZmlsZSAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKIAl0ZXN0X2NvbmZpZyBiYXNoLnNob3dEaXJ0eVN0YXRlIHRydWUgJiYKIAkoCiAJCXNhbmVfdW5zZXQgR0lUX1BTMV9TSE9XRElSVFlTVEFURSAmJgotCQlfX2dpdF9wczEgPiAiJGFjdHVhbCIKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKIAkpICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBzaGVsbCB2YXJpYWJsZSBzZXQgd2l0aCBjb25maWcgZGlzYWJsZWQnICcKLQlwcmludGYgIiAobWFzdGVyKSIgPiBleHBlY3RlZCAmJgotCWVjaG8gImRpcnR5IiA+IGZpbGUgJiYKKwlwcmludGYgIiAobWFzdGVyKSIgPmV4cGVjdGVkICYmCisJZWNobyAiZGlydHkiID5maWxlICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgogCXRlc3RfY29uZmlnIGJhc2guc2hvd0RpcnR5U3RhdGUgZmFsc2UgJiYKIAkoCiAJCUdJVF9QUzFfU0hPV0RJUlRZU1RBVEU9eSAmJgotCQlfX2dpdF9wczEgPiAiJGFjdHVhbCIKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKIAkpICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBzaGVsbCB2YXJpYWJsZSBzZXQgd2l0aCBjb25maWcgZW5hYmxlZCcgJwotCXByaW50ZiAiIChtYXN0ZXIgKikiID4gZXhwZWN0ZWQgJiYKLQllY2hvICJkaXJ0eSIgPiBmaWxlICYmCisJcHJpbnRmICIgKG1hc3RlciAqKSIgPmV4cGVjdGVkICYmCisJZWNobyAiZGlydHkiID5maWxlICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgogCXRlc3RfY29uZmlnIGJhc2guc2hvd0RpcnR5U3RhdGUgdHJ1ZSAmJgogCSgKIAkJR0lUX1BTMV9TSE9XRElSVFlTVEFURT15ICYmCi0JCV9fZ2l0X3BzMSA+ICIkYWN0dWFsIgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgogCSkgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIG5vdCBzaG93biBpbnNpZGUgLmdpdCBkaXJlY3RvcnknICcKLQlwcmludGYgIiAoR0lUX0RJUiEpIiA+IGV4cGVjdGVkICYmCi0JZWNobyAiZGlydHkiID4gZmlsZSAmJgorCXByaW50ZiAiIChHSVRfRElSISkiID5leHBlY3RlZCAmJgorCWVjaG8gImRpcnR5IiA+ZmlsZSAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKIAkoCiAJCUdJVF9QUzFfU0hPV0RJUlRZU1RBVEU9eSAmJgogCQljZCAuZ2l0ICYmCi0JCV9fZ2l0X3BzMSA+ICIkYWN0dWFsIgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgogCSkgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gc3Rhc2ggc3RhdHVzIGluZGljYXRvciAtIG5vIHN0YXNoJyAnCi0JcHJpbnRmICIgKG1hc3RlcikiID4gZXhwZWN0ZWQgJiYKKwlwcmludGYgIiAobWFzdGVyKSIgPmV4cGVjdGVkICYmCiAJKAogCQlHSVRfUFMxX1NIT1dTVEFTSFNUQVRFPXkgJiYKLQkJX19naXRfcHMxID4gIiRhY3R1YWwiCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCiAJKSAmJgogCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBzdGFzaCBzdGF0dXMgaW5kaWNhdG9yIC0gc3Rhc2gnICcKLQlwcmludGYgIiAobWFzdGVyICQpIiA+IGV4cGVjdGVkICYmCisJcHJpbnRmICIgKG1hc3RlciAkKSIgPmV4cGVjdGVkICYmCiAJZWNobyAyID5maWxlICYmCiAJZ2l0IHN0YXNoICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgc3Rhc2ggZHJvcCIgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCiAJKAogCQlHSVRfUFMxX1NIT1dTVEFTSFNUQVRFPXkgJiYKLQkJX19naXRfcHMxID4gIiRhY3R1YWwiCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCiAJKSAmJgogCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBzdGFzaCBzdGF0dXMgaW5kaWNhdG9yIC0gbm90IHNob3duIGluc2lkZSAuZ2l0IGRpcmVjdG9yeScgJwotCXByaW50ZiAiIChHSVRfRElSISkiID4gZXhwZWN0ZWQgJiYKKwlwcmludGYgIiAoR0lUX0RJUiEpIiA+ZXhwZWN0ZWQgJiYKIAllY2hvIDIgPmZpbGUgJiYKIAlnaXQgc3Rhc2ggJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBzdGFzaCBkcm9wIiAmJgogCSgKIAkJR0lUX1BTMV9TSE9XU1RBU0hTVEFURT15ICYmCiAJCWNkIC5naXQgJiYKLQkJX19naXRfcHMxID4gIiRhY3R1YWwiCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCiAJKSAmJgogCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSB1bnRyYWNrZWQgZmlsZXMgc3RhdHVzIGluZGljYXRvciAtIG5vIHVudHJhY2tlZCBmaWxlcycgJwotCXByaW50ZiAiIChtYXN0ZXIpIiA+IGV4cGVjdGVkICYmCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgogCSgKIAkJR0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVM9eSAmJgogCQljZCBvdGhlcnJlcG8gJiYKLQkJX19naXRfcHMxID4gIiRhY3R1YWwiCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCiAJKSAmJgogCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSB1bnRyYWNrZWQgZmlsZXMgc3RhdHVzIGluZGljYXRvciAtIHVudHJhY2tlZCBmaWxlcycgJwotCXByaW50ZiAiIChtYXN0ZXIgJSUpIiA+IGV4cGVjdGVkICYmCisJcHJpbnRmICIgKG1hc3RlciAlJSkiID5leHBlY3RlZCAmJgogCSgKIAkJR0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVM9eSAmJgotCQlfX2dpdF9wczEgPiAiJGFjdHVhbCIKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKIAkpICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHVudHJhY2tlZCBmaWxlcyBzdGF0dXMgaW5kaWNhdG9yIC0gc2hlbGwgdmFyaWFibGUgdW5zZXQgd2l0aCBjb25maWcgZGlzYWJsZWQnICcKLQlwcmludGYgIiAobWFzdGVyKSIgPiBleHBlY3RlZCAmJgorCXByaW50ZiAiIChtYXN0ZXIpIiA+ZXhwZWN0ZWQgJiYKIAl0ZXN0X2NvbmZpZyBiYXNoLnNob3dVbnRyYWNrZWRGaWxlcyBmYWxzZSAmJgogCSgKIAkJc2FuZV91bnNldCBHSVRfUFMxX1NIT1dVTlRSQUNLRURGSUxFUyAmJgotCQlfX2dpdF9wczEgPiAiJGFjdHVhbCIKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKIAkpICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHVudHJhY2tlZCBmaWxlcyBzdGF0dXMgaW5kaWNhdG9yIC0gc2hlbGwgdmFyaWFibGUgdW5zZXQgd2l0aCBjb25maWcgZW5hYmxlZCcgJwotCXByaW50ZiAiIChtYXN0ZXIpIiA+IGV4cGVjdGVkICYmCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgogCXRlc3RfY29uZmlnIGJhc2guc2hvd1VudHJhY2tlZEZpbGVzIHRydWUgJiYKIAkoCiAJCXNhbmVfdW5zZXQgR0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVMgJiYKLQkJX19naXRfcHMxID4gIiRhY3R1YWwiCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCiAJKSAmJgogCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSB1bnRyYWNrZWQgZmlsZXMgc3RhdHVzIGluZGljYXRvciAtIHNoZWxsIHZhcmlhYmxlIHNldCB3aXRoIGNvbmZpZyBkaXNhYmxlZCcgJwotCXByaW50ZiAiIChtYXN0ZXIpIiA+IGV4cGVjdGVkICYmCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgogCXRlc3RfY29uZmlnIGJhc2guc2hvd1VudHJhY2tlZEZpbGVzIGZhbHNlICYmCiAJKAogCQlHSVRfUFMxX1NIT1dVTlRSQUNLRURGSUxFUz15ICYmCi0JCV9fZ2l0X3BzMSA+ICIkYWN0dWFsIgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgogCSkgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gdW50cmFja2VkIGZpbGVzIHN0YXR1cyBpbmRpY2F0b3IgLSBzaGVsbCB2YXJpYWJsZSBzZXQgd2l0aCBjb25maWcgZW5hYmxlZCcgJwotCXByaW50ZiAiIChtYXN0ZXIgJSUpIiA+IGV4cGVjdGVkICYmCisJcHJpbnRmICIgKG1hc3RlciAlJSkiID5leHBlY3RlZCAmJgogCXRlc3RfY29uZmlnIGJhc2guc2hvd1VudHJhY2tlZEZpbGVzIHRydWUgJiYKIAkoCiAJCUdJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTPXkgJiYKLQkJX19naXRfcHMxID4gIiRhY3R1YWwiCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCiAJKSAmJgogCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSB1bnRyYWNrZWQgZmlsZXMgc3RhdHVzIGluZGljYXRvciAtIG5vdCBzaG93biBpbnNpZGUgLmdpdCBkaXJlY3RvcnknICcKLQlwcmludGYgIiAoR0lUX0RJUiEpIiA+IGV4cGVjdGVkICYmCisJcHJpbnRmICIgKEdJVF9ESVIhKSIgPmV4cGVjdGVkICYmCiAJKAogCQlHSVRfUFMxX1NIT1dVTlRSQUNLRURGSUxFUz15ICYmCiAJCWNkIC5naXQgJiYKLQkJX19naXRfcHMxID4gIiRhY3R1YWwiCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCiAJKSAmJgogCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBmb3JtYXQgc3RyaW5nIHN0YXJ0aW5nIHdpdGggZGFzaCcgJwotCXByaW50ZiAtLSAiLW1hc3RlciIgPiBleHBlY3RlZCAmJgotCV9fZ2l0X3BzMSAiLSVzIiA+ICIkYWN0dWFsIiAmJgorCXByaW50ZiAtLSAiLW1hc3RlciIgPmV4cGVjdGVkICYmCisJX19naXRfcHMxICItJXMiID4iJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gcGMgbW9kZScgJworCXByaW50ZiAiQkVGT1JFOiAobWFzdGVyKTpBRlRFUiIgPmV4cGVjdGVkICYmCisJcHJpbnRmICIiID5leHBlY3RlZF9vdXRwdXQgJiYKKwkoCisJCV9fZ2l0X3BzMSAiQkVGT1JFOiIgIjpBRlRFUiIgPiIkYWN0dWFsIiAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZF9vdXRwdXQgIiRhY3R1YWwiICYmCisJCXByaW50ZiAiJXMiICIkUFMxIiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBiYXNoIGNvbG9yIHBjIG1vZGUgLSBicmFuY2ggbmFtZScgJworCXByaW50ZiAiQkVGT1JFOiAoJHtjX2dyZWVufW1hc3RlciR7Y19jbGVhcn0pOkFGVEVSIiA+ZXhwZWN0ZWQgJiYKKwkoCisJCUdJVF9QUzFfU0hPV0NPTE9SSElOVFM9eSAmJgorCQlfX2dpdF9wczEgIkJFRk9SRToiICI6QUZURVIiID4iJGFjdHVhbCIKKwkJcHJpbnRmICIlcyIgIiRQUzEiID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGJhc2ggY29sb3IgcGMgbW9kZSAtIGRldGFjaGVkIGhlYWQnICcKKwlwcmludGYgIkJFRk9SRTogKCR7Y19yZWR9KCVzLi4uKSR7Y19jbGVhcn0pOkFGVEVSIiAkKGdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVoIiBiMV4pID5leHBlY3RlZCAmJgorCWdpdCBjaGVja291dCBiMV4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJKAorCQlHSVRfUFMxX1NIT1dDT0xPUkhJTlRTPXkgJiYKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiAmJgorCQlwcmludGYgIiVzIiAiJFBTMSIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gYmFzaCBjb2xvciBwYyBtb2RlIC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIGRpcnR5IHdvcmt0cmVlJyAnCisJcHJpbnRmICJCRUZPUkU6ICgke2NfZ3JlZW59bWFzdGVyJHtjX2NsZWFyfSAke2NfcmVkfSoke2NfY2xlYXJ9KTpBRlRFUiIgPmV4cGVjdGVkICYmCisJZWNobyAiZGlydHkiID5maWxlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCSgKKwkJR0lUX1BTMV9TSE9XRElSVFlTVEFURT15ICYmCisJCUdJVF9QUzFfU0hPV0NPTE9SSElOVFM9eSAmJgorCQlfX2dpdF9wczEgIkJFRk9SRToiICI6QUZURVIiICYmCisJCXByaW50ZiAiJXMiICIkUFMxIiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBiYXNoIGNvbG9yIHBjIG1vZGUgLSBkaXJ0eSBzdGF0dXMgaW5kaWNhdG9yIC0gZGlydHkgaW5kZXgnICcKKwlwcmludGYgIkJFRk9SRTogKCR7Y19ncmVlbn1tYXN0ZXIke2NfY2xlYXJ9ICR7Y19ncmVlbn0rJHtjX2NsZWFyfSk6QUZURVIiID5leHBlY3RlZCAmJgorCWVjaG8gImRpcnR5IiA+ZmlsZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgYWRkIC11ICYmCisJKAorCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKKwkJR0lUX1BTMV9TSE9XQ09MT1JISU5UUz15ICYmCisJCV9fZ2l0X3BzMSAiQkVGT1JFOiIgIjpBRlRFUiIgJiYKKwkJcHJpbnRmICIlcyIgIiRQUzEiID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGJhc2ggY29sb3IgcGMgbW9kZSAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBkaXJ0eSBpbmRleCBhbmQgd29ya3RyZWUnICcKKwlwcmludGYgIkJFRk9SRTogKCR7Y19ncmVlbn1tYXN0ZXIke2NfY2xlYXJ9ICR7Y19yZWR9KiR7Y19ncmVlbn0rJHtjX2NsZWFyfSk6QUZURVIiID5leHBlY3RlZCAmJgorCWVjaG8gImRpcnR5IGluZGV4IiA+ZmlsZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgYWRkIC11ICYmCisJZWNobyAiZGlydHkgd29ya3RyZWUiID5maWxlICYmCisJKAorCQlHSVRfUFMxX1NIT1dDT0xPUkhJTlRTPXkgJiYKKwkJR0lUX1BTMV9TSE9XRElSVFlTVEFURT15ICYmCisJCV9fZ2l0X3BzMSAiQkVGT1JFOiIgIjpBRlRFUiIgJiYKKwkJcHJpbnRmICIlcyIgIiRQUzEiID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGJhc2ggY29sb3IgcGMgbW9kZSAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBiZWZvcmUgcm9vdCBjb21taXQnICcKKwlwcmludGYgIkJFRk9SRTogKCR7Y19ncmVlbn1tYXN0ZXIke2NfY2xlYXJ9ICR7Y19ncmVlbn0jJHtjX2NsZWFyfSk6QUZURVIiID5leHBlY3RlZCAmJgorCSgKKwkJR0lUX1BTMV9TSE9XRElSVFlTVEFURT15ICYmCisJCUdJVF9QUzFfU0hPV0NPTE9SSElOVFM9eSAmJgorCQljZCBvdGhlcnJlcG8gJiYKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiAmJgorCQlwcmludGYgIiVzIiAiJFBTMSIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gYmFzaCBjb2xvciBwYyBtb2RlIC0gaW5zaWRlIC5naXQgZGlyZWN0b3J5JyAnCisJcHJpbnRmICJCRUZPUkU6ICgke2NfZ3JlZW59R0lUX0RJUiEke2NfY2xlYXJ9KTpBRlRFUiIgPmV4cGVjdGVkICYmCisJZWNobyAiZGlydHkiID5maWxlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCSgKKwkJR0lUX1BTMV9TSE9XRElSVFlTVEFURT15ICYmCisJCUdJVF9QUzFfU0hPV0NPTE9SSElOVFM9eSAmJgorCQljZCAuZ2l0ICYmCisJCV9fZ2l0X3BzMSAiQkVGT1JFOiIgIjpBRlRFUiIgJiYKKwkJcHJpbnRmICIlcyIgIiRQUzEiID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGJhc2ggY29sb3IgcGMgbW9kZSAtIHN0YXNoIHN0YXR1cyBpbmRpY2F0b3InICcKKwlwcmludGYgIkJFRk9SRTogKCR7Y19ncmVlbn1tYXN0ZXIke2NfY2xlYXJ9ICR7Y19sYmx1ZX1cJCR7Y19jbGVhcn0pOkFGVEVSIiA+ZXhwZWN0ZWQgJiYKKwllY2hvIDIgPmZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBzdGFzaCBkcm9wIiAmJgorCSgKKwkJR0lUX1BTMV9TSE9XU1RBU0hTVEFURT15ICYmCisJCUdJVF9QUzFfU0hPV0NPTE9SSElOVFM9eSAmJgorCQlfX2dpdF9wczEgIkJFRk9SRToiICI6QUZURVIiICYmCisJCXByaW50ZiAiJXMiICIkUFMxIiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBiYXNoIGNvbG9yIHBjIG1vZGUgLSB1bnRyYWNrZWQgZmlsZXMgc3RhdHVzIGluZGljYXRvcicgJworCXByaW50ZiAiQkVGT1JFOiAoJHtjX2dyZWVufW1hc3RlciR7Y19jbGVhcn0gJHtjX3JlZH0lJSR7Y19jbGVhcn0pOkFGVEVSIiA+ZXhwZWN0ZWQgJiYKKwkoCisJCUdJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTPXkgJiYKKwkJR0lUX1BTMV9TSE9XQ09MT1JISU5UUz15ICYmCisJCV9fZ2l0X3BzMSAiQkVGT1JFOiIgIjpBRlRFUiIgJiYKKwkJcHJpbnRmICIlcyIgIiRQUzEiID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHpzaCBjb2xvciBwYyBtb2RlJyAnCisJcHJpbnRmICJCRUZPUkU6ICglJUZ7Z3JlZW59bWFzdGVyJSVmKTpBRlRFUiIgPmV4cGVjdGVkICYmCisJKAorCQlaU0hfVkVSU0lPTj01LjAuMCAmJgorCQlHSVRfUFMxX1NIT1dDT0xPUkhJTlRTPXkgJiYKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiA+IiRhY3R1YWwiCisJCXByaW50ZiAiJXMiICIkUFMxIiA+IiRhY3R1YWwiCisJKSAmJgogCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgogJwogCmRpZmYgLS1naXQgYS90L3Rlc3QtbGliLWZ1bmN0aW9ucy5zaCBiL3QvdGVzdC1saWItZnVuY3Rpb25zLnNoCmluZGV4IDUyNTEwMDkuLmE3ZTlhYWMgMTAwNjQ0Ci0tLSBhL3QvdGVzdC1saWItZnVuY3Rpb25zLnNoCisrKyBiL3QvdGVzdC1saWItZnVuY3Rpb25zLnNoCkBAIC0zNDMsNiArMzQzLDcgQEAKIH0KIAogdGVzdF9leHBlY3RfZmFpbHVyZSAoKSB7CisJdGVzdF9zdGFydF8KIAl0ZXN0ICIkIyIgPSAzICYmIHsgdGVzdF9wcmVyZXE9JDE7IHNoaWZ0OyB9IHx8IHRlc3RfcHJlcmVxPQogCXRlc3QgIiQjIiA9IDIgfHwKIAllcnJvciAiYnVnIGluIHRoZSB0ZXN0IHNjcmlwdDogbm90IDIgb3IgMyBwYXJhbWV0ZXJzIHRvIHRlc3QtZXhwZWN0LWZhaWx1cmUiCkBAIC0zNTcsMTAgKzM1OCwxMSBAQAogCQkJdGVzdF9rbm93bl9icm9rZW5fZmFpbHVyZV8gIiQxIgogCQlmaQogCWZpCi0JZWNobyA+JjMgIiIKKwl0ZXN0X2ZpbmlzaF8KIH0KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAoKSB7CisJdGVzdF9zdGFydF8KIAl0ZXN0ICIkIyIgPSAzICYmIHsgdGVzdF9wcmVyZXE9JDE7IHNoaWZ0OyB9IHx8IHRlc3RfcHJlcmVxPQogCXRlc3QgIiQjIiA9IDIgfHwKIAllcnJvciAiYnVnIGluIHRoZSB0ZXN0IHNjcmlwdDogbm90IDIgb3IgMyBwYXJhbWV0ZXJzIHRvIHRlc3QtZXhwZWN0LXN1Y2Nlc3MiCkBAIC0zNzUsNyArMzc3LDcgQEAKIAkJCXRlc3RfZmFpbHVyZV8gIiRAIgogCQlmaQogCWZpCi0JZWNobyA+JjMgIiIKKwl0ZXN0X2ZpbmlzaF8KIH0KIAogIyB0ZXN0X2V4dGVybmFsIHJ1bnMgZXh0ZXJuYWwgdGVzdCBzY3JpcHRzIHRoYXQgcHJvdmlkZSBjb250aW51b3VzCkBAIC02MDksNiArNjExLDE4IEBACiAJJEdJVF9URVNUX0NNUCAiJEAiCiB9CiAKKyMgQ2hlY2sgaWYgdGhlIGZpbGUgZXhwZWN0ZWQgdG8gYmUgZW1wdHkgaXMgaW5kZWVkIGVtcHR5LCBhbmQgYmFyZnMKKyMgb3RoZXJ3aXNlLgorCit0ZXN0X211c3RfYmVfZW1wdHkgKCkgeworCWlmIHRlc3QgLXMgIiQxIgorCXRoZW4KKwkJZWNobyAiJyQxJyBpcyBub3QgZW1wdHksIGl0IGNvbnRhaW5zOiIKKwkJY2F0ICIkMSIKKwkJcmV0dXJuIDEKKwlmaQorfQorCiAjIFRlc3RzIHRoYXQgaXRzIHR3byBwYXJhbWV0ZXJzIHJlZmVyIHRvIHRoZSBzYW1lIHJldmlzaW9uCiB0ZXN0X2NtcF9yZXYgKCkgewogCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQxIiA+ZXhwZWN0LnJldiAmJgpAQCAtNjc5LDMgKzY5MywyMCBAQAogCQltdiAuZ2l0L2hvb2tzIC5naXQvaG9va3MtZGlzYWJsZWQKIAkpIHx8IGV4aXQKIH0KKworIyBUaGlzIGZ1bmN0aW9uIGhlbHBzIG9uIHN5bWxpbmsgY2hhbGxlbmdlZCBmaWxlIHN5c3RlbXMgd2hlbiBpdCBpcyBub3QKKyMgaW1wb3J0YW50IHRoYXQgdGhlIGZpbGUgc3lzdGVtIGVudHJ5IGlzIGEgc3ltYm9saWMgbGluay4KKyMgVXNlIHRlc3RfbG5fc19hZGQgaW5zdGVhZCBvZiAibG4gLXMgeCB5ICYmIGdpdCBhZGQgeSIgdG8gYWRkIGEKKyMgc3ltYm9saWMgbGluayBlbnRyeSB5IHRvIHRoZSBpbmRleC4KKwordGVzdF9sbl9zX2FkZCAoKSB7CisJaWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUworCXRoZW4KKwkJbG4gLXMgIiQxIiAiJDIiICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgIiQyIgorCWVsc2UKKwkJcHJpbnRmICclcycgIiQxIiA+IiQyIiAmJgorCQlsbl9zX29iaj0kKGdpdCBoYXNoLW9iamVjdCAtdyAiJDIiKSAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEyMDAwMCAkbG5fc19vYmogIiQyIgorCWZpCit9CmRpZmYgLS1naXQgYS90L3Rlc3QtbGliLnNoIGIvdC90ZXN0LWxpYi5zaAppbmRleCBjYTZiZGVmLi4xYWEyN2JkIDEwMDY0NAotLS0gYS90L3Rlc3QtbGliLnNoCisrKyBiL3QvdGVzdC1saWIuc2gKQEAgLTU0LDggKzU0LDggQEAKIAkjIGRvIG5vdCByZWRpcmVjdCBhZ2FpbgogCTs7CiAqJyAtLXRlZSAnKnwqJyAtLXZhJyopCi0JbWtkaXIgLXAgdGVzdC1yZXN1bHRzCi0JQkFTRT10ZXN0LXJlc3VsdHMvJChiYXNlbmFtZSAiJDAiIC5zaCkKKwlta2RpciAtcCAiJFRFU1RfT1VUUFVUX0RJUkVDVE9SWS90ZXN0LXJlc3VsdHMiCisJQkFTRT0iJFRFU1RfT1VUUFVUX0RJUkVDVE9SWS90ZXN0LXJlc3VsdHMvJChiYXNlbmFtZSAiJDAiIC5zaCkiCiAJKEdJVF9URVNUX1RFRV9TVEFSVEVEPWRvbmUgJHtTSEVMTF9QQVRIfSAiJDAiICIkQCIgMj4mMTsKIAkgZWNobyAkPyA+ICRCQVNFLmV4aXQpIHwgdGVlICRCQVNFLm91dAogCXRlc3QgIiQoY2F0ICRCQVNFLmV4aXQpIiA9IDAKQEAgLTkyLDYgKzkyLDcgQEAKIAlwcmludCBqb2luKCJcbiIsIEB2YXJzKTsKICcpCiB1bnNldCBYREdfQ09ORklHX0hPTUUKK3Vuc2V0IEdJVFBFUkxMSUIKIEdJVF9BVVRIT1JfRU1BSUw9YXV0aG9yQGV4YW1wbGUuY29tCiBHSVRfQVVUSE9SX05BTUU9J0EgVSBUaG9yJwogR0lUX0NPTU1JVFRFUl9FTUFJTD1jb21taXR0ZXJAZXhhbXBsZS5jb20KQEAgLTE4NCw2ICsxODUsOSBAQAogCQloZWxwPXQ7IHNoaWZ0IDs7CiAJLXZ8LS12fC0tdmV8LS12ZXJ8LS12ZXJifC0tdmVyYm98LS12ZXJib3N8LS12ZXJib3NlKQogCQl2ZXJib3NlPXQ7IHNoaWZ0IDs7CisJLS12ZXJib3NlLW9ubHk9KikKKwkJdmVyYm9zZV9vbmx5PSQoZXhwciAieiQxIiA6ICd6W149XSo9XCguKlwpJykKKwkJc2hpZnQgOzsKIAktcXwtLXF8LS1xdXwtLXF1aXwtLXF1aWV8LS1xdWlldCkKIAkJIyBJZ25vcmUgLS1xdWlldCB1bmRlciBhIFRBUDo6SGFybmVzcy4gU2F5aW5nIGhvdyBtYW55IHRlc3RzCiAJCSMgcGFzc2VkIHdpdGhvdXQgdGhlIG9rL25vdCBvayBkZXRhaWxzIGlzIGFsd2F5cyBhbiBlcnJvci4KQEAgLTE5OCwxNyArMjAyLDM5IEBACiAJLS12YWxncmluZD0qKQogCQl2YWxncmluZD0kKGV4cHIgInokMSIgOiAneltePV0qPVwoLipcKScpCiAJCXNoaWZ0IDs7CisJLS12YWxncmluZC1vbmx5PSopCisJCXZhbGdyaW5kX29ubHk9JChleHByICJ6JDEiIDogJ3pbXj1dKj1cKC4qXCknKQorCQlzaGlmdCA7OworCS0tdmFsZ3JpbmQtcGFyYWxsZWw9KikKKwkJdmFsZ3JpbmRfcGFyYWxsZWw9JChleHByICJ6JDEiIDogJ3pbXj1dKj1cKC4qXCknKQorCQlzaGlmdCA7OworCS0tdmFsZ3JpbmQtb25seS1zdHJpZGU9KikKKwkJdmFsZ3JpbmRfb25seV9zdHJpZGU9JChleHByICJ6JDEiIDogJ3pbXj1dKj1cKC4qXCknKQorCQlzaGlmdCA7OworCS0tdmFsZ3JpbmQtb25seS1vZmZzZXQ9KikKKwkJdmFsZ3JpbmRfb25seV9vZmZzZXQ9JChleHByICJ6JDEiIDogJ3pbXj1dKj1cKC4qXCknKQorCQlzaGlmdCA7OwogCS0tdGVlKQogCQlzaGlmdCA7OyAjIHdhcyBoYW5kbGVkIGFscmVhZHkKIAktLXJvb3Q9KikKIAkJcm9vdD0kKGV4cHIgInokMSIgOiAneltePV0qPVwoLipcKScpCiAJCXNoaWZ0IDs7CisJLS1zdGF0dXNwcmVmaXg9KikKKwkJc3RhdHVzcHJlZml4PSQoZXhwciAieiQxIiA6ICd6W149XSo9XCguKlwpJykKKwkJc2hpZnQgOzsKIAkqKQogCQllY2hvICJlcnJvcjogdW5rbm93biB0ZXN0IG9wdGlvbiAnJDEnIiA+JjI7IGV4aXQgMSA7OwogCWVzYWMKIGRvbmUKIAotdGVzdCAtbiAiJHZhbGdyaW5kIiAmJiB2ZXJib3NlPXQKK2lmIHRlc3QgLW4gIiR2YWxncmluZF9vbmx5IiB8fCB0ZXN0IC1uICIkdmFsZ3JpbmRfb25seV9zdHJpZGUiCit0aGVuCisJdGVzdCAteiAiJHZhbGdyaW5kIiAmJiB2YWxncmluZD1tZW1jaGVjaworCXRlc3QgLXogIiR2ZXJib3NlIiAmJiB2ZXJib3NlX29ubHk9IiR2YWxncmluZF9vbmx5IgorZWxpZiB0ZXN0IC1uICIkdmFsZ3JpbmQiCit0aGVuCisJdmVyYm9zZT10CitmaQogCiBpZiB0ZXN0IC1uICIkY29sb3IiCiB0aGVuCkBAIC0zMDMsMTIgKzMyOSwxMiBAQAogCiB0ZXN0X29rXyAoKSB7CiAJdGVzdF9zdWNjZXNzPSQoKCR0ZXN0X3N1Y2Nlc3MgKyAxKSkKLQlzYXlfY29sb3IgIiIgIm9rICR0ZXN0X2NvdW50IC0gJEAiCisJc2F5X2NvbG9yICIiICIke3N0YXR1c3ByZWZpeH1vayAkdGVzdF9jb3VudCAtICRAIgogfQogCiB0ZXN0X2ZhaWx1cmVfICgpIHsKIAl0ZXN0X2ZhaWx1cmU9JCgoJHRlc3RfZmFpbHVyZSArIDEpKQotCXNheV9jb2xvciBlcnJvciAibm90IG9rICR0ZXN0X2NvdW50IC0gJDEiCisJc2F5X2NvbG9yIGVycm9yICIke3N0YXR1c3ByZWZpeH1ub3Qgb2sgJHRlc3RfY291bnQgLSAkMSIKIAlzaGlmdAogCWVjaG8gIiRAIiB8IHNlZCAtZSAncy9eLyMJLycKIAl0ZXN0ICIkaW1tZWRpYXRlIiA9ICIiIHx8IHsgR0lUX0VYSVRfT0s9dDsgZXhpdCAxOyB9CkBAIC0zMTYsMTggKzM0Miw4MyBAQAogCiB0ZXN0X2tub3duX2Jyb2tlbl9va18gKCkgewogCXRlc3RfZml4ZWQ9JCgoJHRlc3RfZml4ZWQrMSkpCi0Jc2F5X2NvbG9yIGVycm9yICJvayAkdGVzdF9jb3VudCAtICRAICMgVE9ETyBrbm93biBicmVha2FnZSB2YW5pc2hlZCIKKwlzYXlfY29sb3IgZXJyb3IgIiR7c3RhdHVzcHJlZml4fW9rICR0ZXN0X2NvdW50IC0gJEAgIyBUT0RPIGtub3duIGJyZWFrYWdlIHZhbmlzaGVkIgogfQogCiB0ZXN0X2tub3duX2Jyb2tlbl9mYWlsdXJlXyAoKSB7CiAJdGVzdF9icm9rZW49JCgoJHRlc3RfYnJva2VuKzEpKQotCXNheV9jb2xvciB3YXJuICJub3Qgb2sgJHRlc3RfY291bnQgLSAkQCAjIFRPRE8ga25vd24gYnJlYWthZ2UiCisJc2F5X2NvbG9yIHdhcm4gIiR7c3RhdHVzcHJlZml4fW5vdCBvayAkdGVzdF9jb3VudCAtICRAICMgVE9ETyBrbm93biBicmVha2FnZSIKIH0KIAogdGVzdF9kZWJ1ZyAoKSB7CiAJdGVzdCAiJGRlYnVnIiA9ICIiIHx8IGV2YWwgIiQxIgogfQogCittYXRjaF9wYXR0ZXJuX2xpc3QgKCkgeworCWFyZz0iJDEiCisJc2hpZnQKKwl0ZXN0IC16ICIkKiIgJiYgcmV0dXJuIDEKKwlmb3IgcGF0dGVybl8KKwlkbworCQljYXNlICIkYXJnIiBpbgorCQkkcGF0dGVybl8pCisJCQlyZXR1cm4gMAorCQllc2FjCisJZG9uZQorCXJldHVybiAxCit9CisKK21heWJlX3RlYXJkb3duX3ZlcmJvc2UgKCkgeworCXRlc3QgLXogIiR2ZXJib3NlX29ubHkiICYmIHJldHVybgorCWV4ZWMgND4vZGV2L251bGwgMz4vZGV2L251bGwKKwl2ZXJib3NlPQorfQorCitsYXN0X3ZlcmJvc2U9dAorbWF5YmVfc2V0dXBfdmVyYm9zZSAoKSB7CisJdGVzdCAteiAiJHZlcmJvc2Vfb25seSIgJiYgcmV0dXJuCisJaWYgbWF0Y2hfcGF0dGVybl9saXN0ICR0ZXN0X2NvdW50ICR2ZXJib3NlX29ubHkgfHwKKwkJeyB0ZXN0IC1uICIkdmFsZ3JpbmRfb25seV9zdHJpZGUiICYmCisJCWV4cHIgJHRlc3RfY291bnQgIiUiICR2YWxncmluZF9vbmx5X3N0cmlkZSAtICR2YWxncmluZF9vbmx5X29mZnNldCA9IDAgPi9kZXYvbnVsbDsgfQorCXRoZW4KKwkJZXhlYyA0PiYyIDM+JjEKKwkJIyBFbWl0IGEgZGVsaW1pdGluZyBibGFuayBsaW5lIHdoZW4gZ29pbmcgZnJvbQorCQkjIG5vbi12ZXJib3NlIHRvIHZlcmJvc2UuICBXaXRoaW4gdmVyYm9zZSBtb2RlIHRoZQorCQkjIGRlbGltaXRlciBpcyBwcmludGVkIGJ5IHRlc3RfZXhwZWN0XyouICBUaGUgY2hvaWNlCisJCSMgb2YgdGhlIGluaXRpYWwgJGxhc3RfdmVyYm9zZSBpcyBzdWNoIHRoYXQgYmVmb3JlCisJCSMgdGVzdCAxLCB3ZSBkbyBub3QgcHJpbnQgaXQuCisJCXRlc3QgLXogIiRsYXN0X3ZlcmJvc2UiICYmIGVjaG8gPiYzICIiCisJCXZlcmJvc2U9dAorCWVsc2UKKwkJZXhlYyA0Pi9kZXYvbnVsbCAzPi9kZXYvbnVsbAorCQl2ZXJib3NlPQorCWZpCisJbGFzdF92ZXJib3NlPSR2ZXJib3NlCit9CisKK21heWJlX3RlYXJkb3duX3ZhbGdyaW5kICgpIHsKKwl0ZXN0IC16ICIkR0lUX1ZBTEdSSU5EIiAmJiByZXR1cm4KKwlHSVRfVkFMR1JJTkRfRU5BQkxFRD0KK30KKworbWF5YmVfc2V0dXBfdmFsZ3JpbmQgKCkgeworCXRlc3QgLXogIiRHSVRfVkFMR1JJTkQiICYmIHJldHVybgorCWlmIHRlc3QgLXogIiR2YWxncmluZF9vbmx5IiAmJiB0ZXN0IC16ICIkdmFsZ3JpbmRfb25seV9zdHJpZGUiCisJdGhlbgorCQlHSVRfVkFMR1JJTkRfRU5BQkxFRD10CisJCXJldHVybgorCWZpCisJR0lUX1ZBTEdSSU5EX0VOQUJMRUQ9CisJaWYgbWF0Y2hfcGF0dGVybl9saXN0ICR0ZXN0X2NvdW50ICR2YWxncmluZF9vbmx5CisJdGhlbgorCQlHSVRfVkFMR1JJTkRfRU5BQkxFRD10CisJZWxpZiB0ZXN0IC1uICIkdmFsZ3JpbmRfb25seV9zdHJpZGUiICYmCisJCWV4cHIgJHRlc3RfY291bnQgIiUiICR2YWxncmluZF9vbmx5X3N0cmlkZSAtICR2YWxncmluZF9vbmx5X29mZnNldCA9IDAgPi9kZXYvbnVsbAorCXRoZW4KKwkJR0lUX1ZBTEdSSU5EX0VOQUJMRUQ9dAorCWZpCit9CisKIHRlc3RfZXZhbF8gKCkgewogCSMgVGhpcyBpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIGJlY2F1c2Ugc29tZSB0ZXN0cyB1c2UKIAkjICJyZXR1cm4iIHRvIGVuZCBhIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgYmxvY2sgZWFybHkuCkBAIC0zMzcsOCArNDI4LDEwIEBACiB0ZXN0X3J1bl8gKCkgewogCXRlc3RfY2xlYW51cD06CiAJZXhwZWN0aW5nX2ZhaWx1cmU9JDIKKwlzZXR1cF9tYWxsb2NfY2hlY2sKIAl0ZXN0X2V2YWxfICIkMSIKIAlldmFsX3JldD0kPworCXRlYXJkb3duX21hbGxvY19jaGVjawogCiAJaWYgdGVzdCAteiAiJGltbWVkaWF0ZSIgfHwgdGVzdCAkZXZhbF9yZXQgPSAwIHx8IHRlc3QgLW4gIiRleHBlY3RpbmdfZmFpbHVyZSIKIAl0aGVuCkBAIC0zNTMsMTcgKzQ0NiwyNCBAQAogCXJldHVybiAiJGV2YWxfcmV0IgogfQogCi10ZXN0X3NraXAgKCkgewordGVzdF9zdGFydF8gKCkgewogCXRlc3RfY291bnQ9JCgoJHRlc3RfY291bnQrMSkpCisJbWF5YmVfc2V0dXBfdmVyYm9zZQorCW1heWJlX3NldHVwX3ZhbGdyaW5kCit9CisKK3Rlc3RfZmluaXNoXyAoKSB7CisJZWNobyA+JjMgIiIKKwltYXliZV90ZWFyZG93bl92YWxncmluZAorCW1heWJlX3RlYXJkb3duX3ZlcmJvc2UKK30KKwordGVzdF9za2lwICgpIHsKIAl0b19za2lwPQotCWZvciBza3AgaW4gJEdJVF9TS0lQX1RFU1RTCi0JZG8KLQkJY2FzZSAkdGhpc190ZXN0LiR0ZXN0X2NvdW50IGluCi0JCSRza3ApCi0JCQl0b19za2lwPXQKLQkJCWJyZWFrCi0JCWVzYWMKLQlkb25lCisJaWYgbWF0Y2hfcGF0dGVybl9saXN0ICR0aGlzX3Rlc3QuJHRlc3RfY291bnQgJEdJVF9TS0lQX1RFU1RTCisJdGhlbgorCQl0b19za2lwPXQKKwlmaQogCWlmIHRlc3QgLXogIiR0b19za2lwIiAmJiB0ZXN0IC1uICIkdGVzdF9wcmVyZXEiICYmCiAJICAgISB0ZXN0X2hhdmVfcHJlcmVxICIkdGVzdF9wcmVyZXEiCiAJdGhlbgpAQCAtMzc3LDggKzQ3Nyw4IEBACiAJCQlvZl9wcmVyZXE9IiBvZiAkdGVzdF9wcmVyZXEiCiAJCWZpCiAKLQkJc2F5X2NvbG9yIHNraXAgPiYzICJza2lwcGluZyB0ZXN0OiAkQCIKLQkJc2F5X2NvbG9yIHNraXAgIm9rICR0ZXN0X2NvdW50ICMgc2tpcCAkMSAobWlzc2luZyAkbWlzc2luZ19wcmVyZXEke29mX3ByZXJlcX0pIgorCQlzYXlfY29sb3Igc2tpcCA+JjMgIiR7c3RhdHVzcHJlZml4fXNraXBwaW5nIHRlc3Q6ICRAIgorCQlzYXlfY29sb3Igc2tpcCAiJHtzdGF0dXNwcmVmaXh9b2sgJHRlc3RfY291bnQgIyBza2lwICQxIChtaXNzaW5nICRtaXNzaW5nX3ByZXJlcSR7b2ZfcHJlcmVxfSkiCiAJCTogdHJ1ZQogCQk7OwogCSopCkBAIC0zOTUsNiArNDk1LDggQEAKIHRlc3RfZG9uZSAoKSB7CiAJR0lUX0VYSVRfT0s9dAogCisJIyBOb3RlOiB0MDAwMCByZWxpZXMgb24gJEhBUk5FU1NfQUNUSVZFIGRpc2FibGluZyB0aGUgLmNvdW50cworCSMgb3V0cHV0IGZpbGUKIAlpZiB0ZXN0IC16ICIkSEFSTkVTU19BQ1RJVkUiCiAJdGhlbgogCQl0ZXN0X3Jlc3VsdHNfZGlyPSIkVEVTVF9PVVRQVVRfRElSRUNUT1JZL3Rlc3QtcmVzdWx0cyIKQEAgLTQxNCwxMSArNTE2LDExIEBACiAKIAlpZiB0ZXN0ICIkdGVzdF9maXhlZCIgIT0gMAogCXRoZW4KLQkJc2F5X2NvbG9yIGVycm9yICIjICR0ZXN0X2ZpeGVkIGtub3duIGJyZWFrYWdlKHMpIHZhbmlzaGVkOyBwbGVhc2UgdXBkYXRlIHRlc3QocykiCisJCXNheV9jb2xvciBlcnJvciAiJHtzdGF0dXNwcmVmaXh9IyAkdGVzdF9maXhlZCBrbm93biBicmVha2FnZShzKSB2YW5pc2hlZDsgcGxlYXNlIHVwZGF0ZSB0ZXN0KHMpIgogCWZpCiAJaWYgdGVzdCAiJHRlc3RfYnJva2VuIiAhPSAwCiAJdGhlbgotCQlzYXlfY29sb3Igd2FybiAiIyBzdGlsbCBoYXZlICR0ZXN0X2Jyb2tlbiBrbm93biBicmVha2FnZShzKSIKKwkJc2F5X2NvbG9yIHdhcm4gIiR7c3RhdHVzcHJlZml4fSMgc3RpbGwgaGF2ZSAkdGVzdF9icm9rZW4ga25vd24gYnJlYWthZ2UocykiCiAJZmkKIAlpZiB0ZXN0ICIkdGVzdF9icm9rZW4iICE9IDAgfHwgdGVzdCAiJHRlc3RfZml4ZWQiICE9IDAKIAl0aGVuCkBAIC00NDEsOSArNTQzLDkgQEAKIAkJdGhlbgogCQkJaWYgdGVzdCAkdGVzdF9yZW1haW5pbmcgLWd0IDAKIAkJCXRoZW4KLQkJCQlzYXlfY29sb3IgcGFzcyAiIyBwYXNzZWQgYWxsICRtc2ciCisJCQkJc2F5X2NvbG9yIHBhc3MgIiR7c3RhdHVzcHJlZml4fSMgcGFzc2VkIGFsbCAkbXNnIgogCQkJZmkKLQkJCXNheSAiMS4uJHRlc3RfY291bnQkc2tpcF9hbGwiCisJCQlzYXkgIiR7c3RhdHVzcHJlZml4fTEuLiR0ZXN0X2NvdW50JHNraXBfYWxsIgogCQlmaQogCiAJCXRlc3QgLWQgIiRyZW1vdmVfdHJhc2giICYmCkBAIC00NTcsOCArNTU5LDggQEAKIAkqKQogCQlpZiB0ZXN0ICR0ZXN0X2V4dGVybmFsX2hhc190YXAgLWVxIDAKIAkJdGhlbgotCQkJc2F5X2NvbG9yIGVycm9yICIjIGZhaWxlZCAkdGVzdF9mYWlsdXJlIGFtb25nICRtc2ciCi0JCQlzYXkgIjEuLiR0ZXN0X2NvdW50IgorCQkJc2F5X2NvbG9yIGVycm9yICIke3N0YXR1c3ByZWZpeH0jIGZhaWxlZCAkdGVzdF9mYWlsdXJlIGFtb25nICRtc2ciCisJCQlzYXkgIiR7c3RhdHVzcHJlZml4fTEuLiR0ZXN0X2NvdW50IgogCQlmaQogCiAJCWV4aXQgMSA7OwpAQCAtNDY2LDYgKzU2OCw5IEBACiAJZXNhYwogfQogCisKKyMgU2V0IHVwIGEgZGlyZWN0b3J5IHRoYXQgd2UgY2FuIHB1dCBpbiBQQVRIIHdoaWNoIHJlZGlyZWN0cyBhbGwgZ2l0CisjIGNhbGxzIHRvICd2YWxncmluZCBnaXQgLi4uJy4KIGlmIHRlc3QgLW4gIiR2YWxncmluZCIKIHRoZW4KIAltYWtlX3N5bWxpbmsgKCkgewpAQCAtNTEzLDMxICs2MTgsNDMgQEAKIAkJbWFrZV9zeW1saW5rICIkc3ltbGlua190YXJnZXQiICIkR0lUX1ZBTEdSSU5EL2Jpbi8kYmFzZSIgfHwgZXhpdAogCX0KIAotCSMgb3ZlcnJpZGUgYWxsIGdpdCBleGVjdXRhYmxlcyBpbiBURVNUX0RJUkVDVE9SWS8uLgotCUdJVF9WQUxHUklORD0kVEVTVF9ESVJFQ1RPUlkvdmFsZ3JpbmQKLQlta2RpciAtcCAiJEdJVF9WQUxHUklORCIvYmluCi0JZm9yIGZpbGUgaW4gJEdJVF9CVUlMRF9ESVIvZ2l0KiAkR0lUX0JVSUxEX0RJUi90ZXN0LSoKLQlkbwotCQltYWtlX3ZhbGdyaW5kX3N5bWxpbmsgJGZpbGUKLQlkb25lCi0JIyBzcGVjaWFsLWNhc2UgdGhlIG1lcmdldG9vbHMgbG9hZGFibGVzCi0JbWFrZV9zeW1saW5rICIkR0lUX0JVSUxEX0RJUiIvbWVyZ2V0b29scyAiJEdJVF9WQUxHUklORC9iaW4vbWVyZ2V0b29scyIKLQlPTERJRlM9JElGUwotCUlGUz06Ci0JZm9yIHBhdGggaW4gJFBBVEgKLQlkbwotCQlscyAiJHBhdGgiL2dpdC0qIDI+IC9kZXYvbnVsbCB8Ci0JCXdoaWxlIHJlYWQgZmlsZQorCSMgSW4gdGhlIGNhc2Ugb2YgLS12YWxncmluZC1wYXJhbGxlbCwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZQorCSMgd3JhcHBpbmcgb25jZSwgaW4gdGhlIG1haW4gc2NyaXB0LiAgVGhlIHdvcmtlciBjaGlsZHJlbiBhbGwKKwkjIGhhdmUgJHZhbGdyaW5kX29ubHlfc3RyaWRlIHNldCwgc28gd2UgY2FuIHNraXAgYmFzZWQgb24gdGhhdC4KKwlpZiB0ZXN0IC16ICIkdmFsZ3JpbmRfb25seV9zdHJpZGUiCisJdGhlbgorCQkjIG92ZXJyaWRlIGFsbCBnaXQgZXhlY3V0YWJsZXMgaW4gVEVTVF9ESVJFQ1RPUlkvLi4KKwkJR0lUX1ZBTEdSSU5EPSRURVNUX0RJUkVDVE9SWS92YWxncmluZAorCQlta2RpciAtcCAiJEdJVF9WQUxHUklORCIvYmluCisJCWZvciBmaWxlIGluICRHSVRfQlVJTERfRElSL2dpdCogJEdJVF9CVUlMRF9ESVIvdGVzdC0qCiAJCWRvCi0JCQltYWtlX3ZhbGdyaW5kX3N5bWxpbmsgIiRmaWxlIgorCQkJbWFrZV92YWxncmluZF9zeW1saW5rICRmaWxlCiAJCWRvbmUKLQlkb25lCi0JSUZTPSRPTERJRlMKKwkJIyBzcGVjaWFsLWNhc2UgdGhlIG1lcmdldG9vbHMgbG9hZGFibGVzCisJCW1ha2Vfc3ltbGluayAiJEdJVF9CVUlMRF9ESVIiL21lcmdldG9vbHMgIiRHSVRfVkFMR1JJTkQvYmluL21lcmdldG9vbHMiCisJCU9MRElGUz0kSUZTCisJCUlGUz06CisJCWZvciBwYXRoIGluICRQQVRICisJCWRvCisJCQlscyAiJHBhdGgiL2dpdC0qIDI+IC9kZXYvbnVsbCB8CisJCQl3aGlsZSByZWFkIGZpbGUKKwkJCWRvCisJCQkJbWFrZV92YWxncmluZF9zeW1saW5rICIkZmlsZSIKKwkJCWRvbmUKKwkJZG9uZQorCQlJRlM9JE9MRElGUworCWZpCiAJUEFUSD0kR0lUX1ZBTEdSSU5EL2JpbjokUEFUSAogCUdJVF9FWEVDX1BBVEg9JEdJVF9WQUxHUklORC9iaW4KIAlleHBvcnQgR0lUX1ZBTEdSSU5ECiAJR0lUX1ZBTEdSSU5EX01PREU9IiR2YWxncmluZCIKIAlleHBvcnQgR0lUX1ZBTEdSSU5EX01PREUKKwlHSVRfVkFMR1JJTkRfRU5BQkxFRD10CisJaWYgdGVzdCAtbiAiJHZhbGdyaW5kX29ubHkiIHx8IHRlc3QgLW4gIiR2YWxncmluZF9vbmx5X3N0cmlkZSIKKwl0aGVuCisJCUdJVF9WQUxHUklORF9FTkFCTEVEPQorCWZpCisJZXhwb3J0IEdJVF9WQUxHUklORF9FTkFCTEVECiBlbGlmIHRlc3QgLW4gIiRHSVRfVEVTVF9JTlNUQUxMRUQiCiB0aGVuCiAJR0lUX0VYRUNfUEFUSD0kKCRHSVRfVEVTVF9JTlNUQUxMRUQvZ2l0IC0tZXhlYy1wYXRoKSAgfHwKQEAgLTYyMiwyMSArNzM5LDUzIEBACiBlbHNlCiAJbWtkaXIgLXAgIiRUUkFTSF9ESVJFQ1RPUlkiCiBmaQorCisjIEdyb3NzIGhhY2sgdG8gc3Bhd24gTiBzdWItaW5zdGFuY2VzIG9mIHRoZSB0ZXN0cyBpbiBwYXJhbGxlbCwgYW5kCisjIHN1bW1hcml6ZSB0aGUgcmVzdWx0cy4gIE5vdGUgdGhhdCBpZiB0aGlzIGlzIGVuYWJsZWQsIHRoZSBzY3JpcHQKKyMgdGVybWluYXRlcyBhdCB0aGUgZW5kIG9mIHRoaXMgJ2lmJyBibG9jay4KK2lmIHRlc3QgLW4gIiR2YWxncmluZF9wYXJhbGxlbCIKK3RoZW4KKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgJHZhbGdyaW5kX3BhcmFsbGVsKQorCWRvCisJCXJvb3Q9IiRUUkFTSF9ESVJFQ1RPUlkvdmdwYXJhbGxlbC0kaSIKKwkJbWtkaXIgIiRyb290IgorCQlURVNUX09VVFBVVF9ESVJFQ1RPUlk9IiRyb290IiBcCisJCQkke1NIRUxMX1BBVEh9ICIkMCIgXAorCQkJLS1yb290PSIkcm9vdCIgLS1zdGF0dXNwcmVmaXg9IlskaV0gIiBcCisJCQktLXZhbGdyaW5kPSIkdmFsZ3JpbmQiIFwKKwkJCS0tdmFsZ3JpbmQtb25seS1zdHJpZGU9IiR2YWxncmluZF9wYXJhbGxlbCIgXAorCQkJLS12YWxncmluZC1vbmx5LW9mZnNldD0iJGkiICYKKwkJcGlkcz0iJHBpZHMgJCEiCisJZG9uZQorCXRyYXAgImtpbGwgJHBpZHMiIElOVCBURVJNIEhVUAorCXdhaXQgJHBpZHMKKwl0cmFwIC0gSU5UIFRFUk0gSFVQCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxICR2YWxncmluZF9wYXJhbGxlbCkKKwlkbworCQlyb290PSIkVFJBU0hfRElSRUNUT1JZL3ZncGFyYWxsZWwtJGkiCisJCWV2YWwgIiQoY2F0ICIkcm9vdC90ZXN0LXJlc3VsdHMvJChiYXNlbmFtZSAiJDAiIC5zaCkiLSouY291bnRzIHwKKwkJCXNlZCAncy9eXChbYS16XVthLXpdKlwpIFwoWzAtOV1bMC05XSpcKS9pbm5lcl9cMT1cMi8nKSIKKwkJdGVzdF9jb3VudD0kKGV4cHIgJHRlc3RfY291bnQgKyAkaW5uZXJfdG90YWwpCisJCXRlc3Rfc3VjY2Vzcz0kKGV4cHIgJHRlc3Rfc3VjY2VzcyArICRpbm5lcl9zdWNjZXNzKQorCQl0ZXN0X2ZpeGVkPSQoZXhwciAkdGVzdF9maXhlZCArICRpbm5lcl9maXhlZCkKKwkJdGVzdF9icm9rZW49JChleHByICR0ZXN0X2Jyb2tlbiArICRpbm5lcl9icm9rZW4pCisJCXRlc3RfZmFpbHVyZT0kKGV4cHIgJHRlc3RfZmFpbHVyZSArICRpbm5lcl9mYWlsZWQpCisJZG9uZQorCXRlc3RfZG9uZQorZmkKKwogIyBVc2UgLVAgdG8gcmVzb2x2ZSBzeW1saW5rcyBpbiBvdXIgd29ya2luZyBkaXJlY3Rvcnkgc28gdGhhdCB0aGUgY3dkCiAjIGluIHN1YnByb2Nlc3NlcyBsaWtlIGdpdCBlcXVhbHMgb3VyICRQV0QgKGZvciBwYXRobmFtZSBjb21wYXJpc29ucykuCiBjZCAtUCAiJFRSQVNIX0RJUkVDVE9SWSIgfHwgZXhpdCAxCiAKIHRoaXNfdGVzdD0kezAjIyovfQogdGhpc190ZXN0PSR7dGhpc190ZXN0JSUtKn0KLWZvciBza3AgaW4gJEdJVF9TS0lQX1RFU1RTCi1kbwotCWNhc2UgIiR0aGlzX3Rlc3QiIGluCi0JJHNrcCkKLQkJc2F5X2NvbG9yIGluZm8gPiYzICJza2lwcGluZyB0ZXN0ICR0aGlzX3Rlc3QgYWx0b2dldGhlciIKLQkJc2tpcF9hbGw9InNraXAgYWxsIHRlc3RzIGluICR0aGlzX3Rlc3QiCi0JCXRlc3RfZG9uZQotCWVzYWMKLWRvbmUKK2lmIG1hdGNoX3BhdHRlcm5fbGlzdCAiJHRoaXNfdGVzdCIgJEdJVF9TS0lQX1RFU1RTCit0aGVuCisJc2F5X2NvbG9yIGluZm8gPiYzICJza2lwcGluZyB0ZXN0ICR0aGlzX3Rlc3QgYWx0b2dldGhlciIKKwlza2lwX2FsbD0ic2tpcCBhbGwgdGVzdHMgaW4gJHRoaXNfdGVzdCIKKwl0ZXN0X2RvbmUKK2ZpCiAKICMgUHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgJ3llcycgdXRpbGl0eQogeWVzICgpIHsKQEAgLTY3Niw2ICs4MjUsNyBAQAogCXRlc3Rfc2V0X3ByZXJlcSBNSU5HVwogCXRlc3Rfc2V0X3ByZXJlcSBOT1RfQ1lHV0lOCiAJdGVzdF9zZXRfcHJlcmVxIFNFRF9TVFJJUFNfQ1IKKwl0ZXN0X3NldF9wcmVyZXEgR1JFUF9TVFJJUFNfQ1IKIAk7OwogKkNZR1dJTiopCiAJdGVzdF9zZXRfcHJlcmVxIFBPU0lYUEVSTQpAQCAtNjgzLDYgKzgzMyw3IEBACiAJdGVzdF9zZXRfcHJlcmVxIE5PVF9NSU5HVwogCXRlc3Rfc2V0X3ByZXJlcSBDWUdXSU4KIAl0ZXN0X3NldF9wcmVyZXEgU0VEX1NUUklQU19DUgorCXRlc3Rfc2V0X3ByZXJlcSBHUkVQX1NUUklQU19DUgogCTs7CiAqKQogCXRlc3Rfc2V0X3ByZXJlcSBQT1NJWFBFUk0KQEAgLTczNyw3ICs4ODgsMTQgQEAKIAogdGVzdF9sYXp5X3ByZXJlcSBQSVBFICcKIAkjIHRlc3Qgd2hldGhlciB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyBGSUZPcwotCXJtIC1mIHRlc3RmaWZvICYmIG1rZmlmbyB0ZXN0ZmlmbworCWNhc2UgJCh1bmFtZSAtcykgaW4KKwlDWUdXSU4qKQorCQlmYWxzZQorCQk7OworCSopCisJCXJtIC1mIHRlc3RmaWZvICYmIG1rZmlmbyB0ZXN0ZmlmbworCQk7OworCWVzYWMKICcKIAogdGVzdF9sYXp5X3ByZXJlcSBTWU1MSU5LUyAnCmRpZmYgLS1naXQgYS90L3ZhbGdyaW5kL2FuYWx5emUuc2ggYi90L3ZhbGdyaW5kL2FuYWx5emUuc2gKaW5kZXggZDgxMDVkOS4uMmZmYzgwZiAxMDA3NTUKLS0tIGEvdC92YWxncmluZC9hbmFseXplLnNoCisrKyBiL3QvdmFsZ3JpbmQvYW5hbHl6ZS5zaApAQCAtMSw2ICsxLDEwIEBACiAjIS9iaW4vc2gKIAotb3V0X3ByZWZpeD0kKGRpcm5hbWUgIiQwIikvLi4vdGVzdC1yZXN1bHRzL3ZhbGdyaW5kLm91dAorIyBHZXQgVEVTVF9PVVRQVVRfRElSRUNUT1JZIGZyb20gR0lULUJVSUxELU9QVElPTlMgaWYgaXQncyB0aGVyZS4uLgorLiAiJChkaXJuYW1lICIkMCIpLy4uLy4uL0dJVC1CVUlMRC1PUFRJT05TIgorIyAuLi4gb3RoZXJ3aXNlIHNldCBpdCB0byB0aGUgZGVmYXVsdCB2YWx1ZS4KKzogJHtURVNUX09VVFBVVF9ESVJFQ1RPUlk9JChkaXJuYW1lICIkMCIpLy4ufQorCiBvdXRwdXQ9CiBjb3VudD0wCiB0b3RhbF9jb3VudD0wCkBAIC0xMTUsNyArMTE5LDcgQEAKIAlmaW5pc2hfb3V0cHV0CiB9CiAKLWZvciB0ZXN0X3NjcmlwdCBpbiAiJChkaXJuYW1lICIkMCIpIi8uLi90ZXN0LXJlc3VsdHMvKi5vdXQKK2ZvciB0ZXN0X3NjcmlwdCBpbiAiJFRFU1RfT1VUUFVUX0RJUkVDVE9SWSIvdGVzdC1yZXN1bHRzLyoub3V0CiBkbwogCWhhbmRsZV9vbmUgJHRlc3Rfc2NyaXB0CiBkb25lCmRpZmYgLS1naXQgYS90L3ZhbGdyaW5kL3ZhbGdyaW5kLnNoIGIvdC92YWxncmluZC92YWxncmluZC5zaAppbmRleCA2Yjg3YzkxLi40MjE1MzAzIDEwMDc1NQotLS0gYS90L3ZhbGdyaW5kL3ZhbGdyaW5kLnNoCisrKyBiL3QvdmFsZ3JpbmQvdmFsZ3JpbmQuc2gKQEAgLTQsNiArNCw5IEBACiAKIFRPT0xfT1BUSU9OUz0nLS1sZWFrLWNoZWNrPW5vJwogCit0ZXN0IC16ICIkR0lUX1ZBTEdSSU5EX0VOQUJMRUQiICYmCitleGVjICIkR0lUX1ZBTEdSSU5EIi8uLi8uLi8iJGJhc2UiICIkQCIKKwogY2FzZSAiJEdJVF9WQUxHUklORF9NT0RFIiBpbgogbWVtY2hlY2stZmFzdCkKIAk7OwpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2hvb2tzLS1wcmUtY29tbWl0LnNhbXBsZSBiL3RlbXBsYXRlcy9ob29rcy0tcHJlLWNvbW1pdC5zYW1wbGUKaW5kZXggMThjNDgyOS4uNTg2ZTNiZiAxMDA3NTUKLS0tIGEvdGVtcGxhdGVzL2hvb2tzLS1wcmUtY29tbWl0LnNhbXBsZQorKysgYi90ZW1wbGF0ZXMvaG9va3MtLXByZS1jb21taXQuc2FtcGxlCkBAIC0xNSwxMyArMTUsMTMgQEAKIAlhZ2FpbnN0PTRiODI1ZGM2NDJjYjZlYjlhMDYwZTU0YmY4ZDY5Mjg4ZmJlZTQ5MDQKIGZpCiAKLSMgSWYgeW91IHdhbnQgdG8gYWxsb3cgbm9uLWFzY2lpIGZpbGVuYW1lcyBzZXQgdGhpcyB2YXJpYWJsZSB0byB0cnVlLgorIyBJZiB5b3Ugd2FudCB0byBhbGxvdyBub24tQVNDSUkgZmlsZW5hbWVzIHNldCB0aGlzIHZhcmlhYmxlIHRvIHRydWUuCiBhbGxvd25vbmFzY2lpPSQoZ2l0IGNvbmZpZyBob29rcy5hbGxvd25vbmFzY2lpKQogCiAjIFJlZGlyZWN0IG91dHB1dCB0byBzdGRlcnIuCiBleGVjIDE+JjIKIAotIyBDcm9zcyBwbGF0Zm9ybSBwcm9qZWN0cyB0ZW5kIHRvIGF2b2lkIG5vbi1hc2NpaSBmaWxlbmFtZXM7IHByZXZlbnQKKyMgQ3Jvc3MgcGxhdGZvcm0gcHJvamVjdHMgdGVuZCB0byBhdm9pZCBub24tQVNDSUkgZmlsZW5hbWVzOyBwcmV2ZW50CiAjIHRoZW0gZnJvbSBiZWluZyBhZGRlZCB0byB0aGUgcmVwb3NpdG9yeS4gV2UgZXhwbG9pdCB0aGUgZmFjdCB0aGF0IHRoZQogIyBwcmludGFibGUgcmFuZ2Ugc3RhcnRzIGF0IHRoZSBzcGFjZSBjaGFyYWN0ZXIgYW5kIGVuZHMgd2l0aCB0aWxkZS4KIGlmIFsgIiRhbGxvd25vbmFzY2lpIiAhPSAidHJ1ZSIgXSAmJgpAQCAtMzEsMTggKzMxLDE3IEBACiAJdGVzdCAkKGdpdCBkaWZmIC0tY2FjaGVkIC0tbmFtZS1vbmx5IC0tZGlmZi1maWx0ZXI9QSAteiAkYWdhaW5zdCB8CiAJICBMQ19BTEw9QyB0ciAtZCAnWyAtfl1cMCcgfCB3YyAtYykgIT0gMAogdGhlbgotCWVjaG8gIkVycm9yOiBBdHRlbXB0IHRvIGFkZCBhIG5vbi1hc2NpaSBmaWxlIG5hbWUuIgotCWVjaG8KLQllY2hvICJUaGlzIGNhbiBjYXVzZSBwcm9ibGVtcyBpZiB5b3Ugd2FudCB0byB3b3JrIgotCWVjaG8gIndpdGggcGVvcGxlIG9uIG90aGVyIHBsYXRmb3Jtcy4iCi0JZWNobwotCWVjaG8gIlRvIGJlIHBvcnRhYmxlIGl0IGlzIGFkdmlzYWJsZSB0byByZW5hbWUgdGhlIGZpbGUgLi4uIgotCWVjaG8KLQllY2hvICJJZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgeW91IGNhbiBkaXNhYmxlIHRoaXMiCi0JZWNobyAiY2hlY2sgdXNpbmc6IgotCWVjaG8KLQllY2hvICIgIGdpdCBjb25maWcgaG9va3MuYWxsb3dub25hc2NpaSB0cnVlIgotCWVjaG8KKwljYXQgPDxcRU9GCitFcnJvcjogQXR0ZW1wdCB0byBhZGQgYSBub24tQVNDSUkgZmlsZSBuYW1lLgorCitUaGlzIGNhbiBjYXVzZSBwcm9ibGVtcyBpZiB5b3Ugd2FudCB0byB3b3JrIHdpdGggcGVvcGxlIG9uIG90aGVyIHBsYXRmb3Jtcy4KKworVG8gYmUgcG9ydGFibGUgaXQgaXMgYWR2aXNhYmxlIHRvIHJlbmFtZSB0aGUgZmlsZS4KKworSWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIHlvdSBjYW4gZGlzYWJsZSB0aGlzIGNoZWNrIHVzaW5nOgorCisgIGdpdCBjb25maWcgaG9va3MuYWxsb3dub25hc2NpaSB0cnVlCitFT0YKIAlleGl0IDEKIGZpCiAKZGlmZiAtLWdpdCBhL3RlbXBsYXRlcy9ob29rcy0tcHJlLXB1c2guc2FtcGxlIGIvdGVtcGxhdGVzL2hvb2tzLS1wcmUtcHVzaC5zYW1wbGUKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvdGVzdC1jaG10aW1lLmMgYi90ZXN0LWNobXRpbWUuYwppbmRleCAwMmI0MmJhLi4wZGY3NDg3IDEwMDY0NAotLS0gYS90ZXN0LWNobXRpbWUuYworKysgYi90ZXN0LWNobXRpbWUuYwpAQCAtNTYsNyArNTYsNyBAQAogCXJldHVybiAxOwogfQogCi1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKIAlzdGF0aWMgaW50IHZlcmJvc2U7CiAKQEAgLTg0LDE1ICs4NCwxNSBAQAogCQlpZiAoc3RhdChhcmd2W2ldLCAmc2IpIDwgMCkgewogCQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gc3RhdCAlczogJXNcbiIsCiAJCQkgICAgICAgIGFyZ3ZbaV0sIHN0cmVycm9yKGVycm5vKSk7Ci0JCQlyZXR1cm4gLTE7CisJCQlyZXR1cm4gMTsKIAkJfQogCi0jaWZkZWYgV0lOMzIKKyNpZmRlZiBHSVRfV0lORE9XU19OQVRJVkUKIAkJaWYgKCEoc2Iuc3RfbW9kZSAmIFNfSVdVU1IpICYmCiAJCQkJY2htb2QoYXJndltpXSwgc2Iuc3RfbW9kZSB8IFNfSVdVU1IpKSB7CiAJCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBtYWtlIHVzZXItd3JpdGFibGUgJXM6ICVzIiwKIAkJCQlhcmd2W2ldLCBzdHJlcnJvcihlcnJubykpOwotCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIDE7CiAJCX0KICNlbmRpZgogCkBAIC0xMDcsNyArMTA3LDcgQEAKIAkJaWYgKHV0Yi5tb2R0aW1lICE9IHNiLnN0X210aW1lICYmIHV0aW1lKGFyZ3ZbaV0sICZ1dGIpIDwgMCkgewogCQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbW9kaWZ5IHRpbWUgb24gJXM6ICVzXG4iLAogCQkJICAgICAgICBhcmd2W2ldLCBzdHJlcnJvcihlcnJubykpOwotCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIDE7CiAJCX0KIAl9CiAKQEAgLTExNSw1ICsxMTUsNSBAQAogCiB1c2FnZToKIAlmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiAlcyAlc1xuIiwgYXJndlswXSwgdXNhZ2Vfc3RyKTsKLQlyZXR1cm4gLTE7CisJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS90ZXN0LWR1bXAtY2FjaGUtdHJlZS5jIGIvdGVzdC1kdW1wLWNhY2hlLXRyZWUuYwppbmRleCBhNmZmZGYzLi40N2VhYjk3IDEwMDY0NAotLS0gYS90ZXN0LWR1bXAtY2FjaGUtdHJlZS5jCisrKyBiL3Rlc3QtZHVtcC1jYWNoZS10cmVlLmMKQEAgLTU5LDYgKzU5LDggQEAKIAlzdHJ1Y3QgY2FjaGVfdHJlZSAqYW5vdGhlciA9IGNhY2hlX3RyZWUoKTsKIAlpZiAocmVhZF9jYWNoZSgpIDwgMCkKIAkJZGllKCJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIik7Ci0JY2FjaGVfdHJlZV91cGRhdGUoYW5vdGhlciwgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIsIFdSSVRFX1RSRUVfRFJZX1JVTik7CisJY2FjaGVfdHJlZV91cGRhdGUoYW5vdGhlciwKKwkJCSAgKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICopYWN0aXZlX2NhY2hlLAorCQkJICBhY3RpdmVfbnIsIFdSSVRFX1RSRUVfRFJZX1JVTik7CiAJcmV0dXJuIGR1bXBfY2FjaGVfdHJlZShhY3RpdmVfY2FjaGVfdHJlZSwgYW5vdGhlciwgIiIpOwogfQpkaWZmIC0tZ2l0IGEvdGVzdC1pbmRleC12ZXJzaW9uLmMgYi90ZXN0LWluZGV4LXZlcnNpb24uYwppbmRleCBiZmFhZDllLi4wNWQ0Njk5IDEwMDY0NAotLS0gYS90ZXN0LWluZGV4LXZlcnNpb24uYworKysgYi90ZXN0LWluZGV4LXZlcnNpb24uYwpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogCi1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJc3RydWN0IGNhY2hlX2hlYWRlciBoZHI7CiAJaW50IHZlcnNpb247CmRpZmYgLS1naXQgYS90ZXN0LW1lcmdlc29ydC5jIGIvdGVzdC1tZXJnZXNvcnQuYwppbmRleCAzZjM4OGI0Li5lYTNiOTU5IDEwMDY0NAotLS0gYS90ZXN0LW1lcmdlc29ydC5jCisrKyBiL3Rlc3QtbWVyZ2Vzb3J0LmMKQEAgLTIyLDcgKzIyLDcgQEAKIAlyZXR1cm4gc3RyY21wKHgtPnRleHQsIHktPnRleHQpOwogfQogCi1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJc3RydWN0IGxpbmUgKmxpbmUsICpwID0gTlVMTCwgKmxpbmVzID0gTlVMTDsKIAlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CmRpZmYgLS1naXQgYS90ZXN0LXBhcnNlLW9wdGlvbnMuYyBiL3Rlc3QtcGFyc2Utb3B0aW9ucy5jCmluZGV4IDNjOTUxMGEuLjQzNGU4YjggMTAwNjQ0Ci0tLSBhL3Rlc3QtcGFyc2Utb3B0aW9ucy5jCisrKyBiL3Rlc3QtcGFyc2Utb3B0aW9ucy5jCkBAIC0yOSw3ICsyOSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAljb25zdCBjaGFyICpwcmVmaXggPSAicHJlZml4LyI7CiAJY29uc3QgY2hhciAqdXNhZ2VbXSA9IHsKQEAgLTgxLDcgKzgxLDcgQEAKIAl9OwogCWludCBpOwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCB1c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgKGNvbnN0IGNoYXIgKiopYXJndiwgcHJlZml4LCBvcHRpb25zLCB1c2FnZSwgMCk7CiAKIAlwcmludGYoImJvb2xlYW46ICVkXG4iLCBib29sZWFuKTsKIAlwcmludGYoImludGVnZXI6ICV1XG4iLCBpbnRlZ2VyKTsKZGlmZiAtLWdpdCBhL3Rlc3QtcGF0aC11dGlscy5jIGIvdGVzdC1wYXRoLXV0aWxzLmMKaW5kZXggMDA5MmNiZi4uYmI5NzVlNCAxMDA2NDQKLS0tIGEvdGVzdC1wYXRoLXV0aWxzLmMKKysrIGIvdGVzdC1wYXRoLXV0aWxzLmMKQEAgLTI4LDYgKzI4LDE5IEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyB2b2lkIG5vcm1hbGl6ZV9hcmd2X3N0cmluZyhjb25zdCBjaGFyICoqdmFyLCBjb25zdCBjaGFyICppbnB1dCkKK3sKKwlpZiAoIXN0cmNtcChpbnB1dCwgIjxudWxsPiIpKQorCQkqdmFyID0gTlVMTDsKKwllbHNlIGlmICghc3RyY21wKGlucHV0LCAiPGVtcHR5PiIpKQorCQkqdmFyID0gIiI7CisJZWxzZQorCQkqdmFyID0gaW5wdXQ7CisKKwlpZiAoKnZhciAmJiAoKip2YXIgPT0gJzwnIHx8ICoqdmFyID09ICcoJykpCisJCWRpZSgiQmFkIHZhbHVlOiAlc1xuIiwgaW5wdXQpOworfQorCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJaWYgKGFyZ2MgPT0gMyAmJiAhc3RyY21wKGFyZ3ZbMV0sICJub3JtYWxpemVfcGF0aF9jb3B5IikpIHsKQEAgLTEwMyw2ICsxMTYsMjUgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJaWYgKGFyZ2MgPT0gMyAmJiAhc3RyY21wKGFyZ3ZbMV0sICJtaW5nd19wYXRoIikpIHsKKwkJcHV0cyhhcmd2WzJdKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFyZ2MgPT0gNCAmJiAhc3RyY21wKGFyZ3ZbMV0sICJyZWxhdGl2ZV9wYXRoIikpIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICppbiwgKnByZWZpeCwgKnJlbDsKKwkJbm9ybWFsaXplX2FyZ3Zfc3RyaW5nKCZpbiwgYXJndlsyXSk7CisJCW5vcm1hbGl6ZV9hcmd2X3N0cmluZygmcHJlZml4LCBhcmd2WzNdKTsKKwkJcmVsID0gcmVsYXRpdmVfcGF0aChpbiwgcHJlZml4LCAmc2IpOworCQlpZiAoIXJlbCkKKwkJCXB1dHMoIihudWxsKSIpOworCQllbHNlCisJCQlwdXRzKHN0cmxlbihyZWwpID4gMCA/IHJlbCA6ICIoZW1wdHkpIik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCXJldHVybiAwOworCX0KKwogCWZwcmludGYoc3RkZXJyLCAiJXM6IHVua25vd24gZnVuY3Rpb24gbmFtZTogJXNcbiIsIGFyZ3ZbMF0sCiAJCWFyZ3ZbMV0gPyBhcmd2WzFdIDogIih0aGVyZSB3YXMgbm9uZSkiKTsKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL3Rlc3QtcHJpby1xdWV1ZS5jIGIvdGVzdC1wcmlvLXF1ZXVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JlNzJmMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QtcHJpby1xdWV1ZS5jCkBAIC0wLDAgKzEsMzkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInByaW8tcXVldWUuaCIKKworc3RhdGljIGludCBpbnRjbXAoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiLCB2b2lkICpkYXRhKQoreworCWNvbnN0IGludCAqYSA9IHZhLCAqYiA9IHZiOworCXJldHVybiAqYSAtICpiOworfQorCitzdGF0aWMgdm9pZCBzaG93KGludCAqdikKK3sKKwlpZiAoIXYpCisJCXByaW50ZigiTlVMTFxuIik7CisJZWxzZQorCQlwcmludGYoIiVkXG4iLCAqdik7CisJZnJlZSh2KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBwcmlvX3F1ZXVlIHBxID0geyBpbnRjbXAgfTsKKworCXdoaWxlICgqKythcmd2KSB7CisJCWlmICghc3RyY21wKCphcmd2LCAiZ2V0IikpCisJCQlzaG93KHByaW9fcXVldWVfZ2V0KCZwcSkpOworCQllbHNlIGlmICghc3RyY21wKCphcmd2LCAiZHVtcCIpKSB7CisJCQlpbnQgKnY7CisJCQl3aGlsZSAoKHYgPSBwcmlvX3F1ZXVlX2dldCgmcHEpKSkKKwkJCSAgICAgICBzaG93KHYpOworCQl9CisJCWVsc2UgeworCQkJaW50ICp2ID0gbWFsbG9jKHNpemVvZigqdikpOworCQkJKnYgPSBhdG9pKCphcmd2KTsKKwkJCXByaW9fcXVldWVfcHV0KCZwcSwgdik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3QtcmVhZC1jYWNoZS5jIGIvdGVzdC1yZWFkLWNhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI1YmNmMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QtcmVhZC1jYWNoZS5jCkBAIC0wLDAgKzEsMTMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBpLCBjbnQgPSAxOworCWlmIChhcmdjID09IDIpCisJCWNudCA9IHN0cnRvbChhcmd2WzFdLCBOVUxMLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKKwkJcmVhZF9jYWNoZSgpOworCQlkaXNjYXJkX2NhY2hlKCk7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1zdWJwcm9jZXNzLmMgYi90ZXN0LXN1YnByb2Nlc3MuYwppbmRleCBmMmQ0YzBkLi45MzUyNWViIDEwMDY0NAotLS0gYS90ZXN0LXN1YnByb2Nlc3MuYworKysgYi90ZXN0LXN1YnByb2Nlc3MuYwpAQCAtMSw3ICsxLDcgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCiAKLWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcDsKIAlpbnQgbm9naXQgPSAwOwpAQCAtMTUsNiArMTUsNiBAQAogCX0KIAltZW1zZXQoJmNwLCAwLCBzaXplb2YoY3ApKTsKIAljcC5naXRfY21kID0gMTsKLQljcC5hcmd2ID0gYXJndiArIDE7CisJY3AuYXJndiA9IChjb25zdCBjaGFyICoqKWFyZ3YgKyAxOwogCXJldHVybiBydW5fY29tbWFuZCgmY3ApOwogfQpkaWZmIC0tZ2l0IGEvdGhyZWFkLXV0aWxzLmMgYi90aHJlYWQtdXRpbHMuYwppbmRleCA3ZjRiNzZhLi45NzM5NmE3IDEwMDY0NAotLS0gYS90aHJlYWQtdXRpbHMuYworKysgYi90aHJlYWQtdXRpbHMuYwpAQCAtMjQsNyArMjQsNyBAQAogCWxvbmcgbmNwdXM7CiAjZW5kaWYKIAotI2lmZGVmIF9XSU4zMgorI2lmZGVmIEdJVF9XSU5ET1dTX05BVElWRQogCVNZU1RFTV9JTkZPIGluZm87CiAJR2V0U3lzdGVtSW5mbygmaW5mbyk7CiAKZGlmZiAtLWdpdCBhL3RyYWNlLmMgYi90cmFjZS5jCmluZGV4IDVlYzBlM2IuLjNkNzQ0ZDEgMTAwNjQ0Ci0tLSBhL3RyYWNlLmMKKysrIGIvdHJhY2UuYwpAQCAtNzUsNiArNzUsNyBAQAogCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOwogfQogCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQogc3RhdGljIHZvaWQgdHJhY2VfcHJpbnRmX2tleShjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgYXA7CmRpZmYgLS1naXQgYS90cmFuc3BvcnQtaGVscGVyLmMgYi90cmFuc3BvcnQtaGVscGVyLmMKaW5kZXggNTIyZDc5MS4uNDVhMzVkZiAxMDA2NDQKLS0tIGEvdHJhbnNwb3J0LWhlbHBlci5jCisrKyBiL3RyYW5zcG9ydC1oZWxwZXIuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgInRocmVhZC11dGlscy5oIgogI2luY2x1ZGUgInNpZ2NoYWluLmgiCiAjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInJlZnMuaCIKIAogc3RhdGljIGludCBkZWJ1ZzsKIApAQCAtNDcsNyArNDgsNyBAQAogCQlkaWVfZXJybm8oIkZ1bGwgd3JpdGUgdG8gcmVtb3RlIGhlbHBlciBmYWlsZWQiKTsKIH0KIAotc3RhdGljIGludCByZWN2bGluZV9maChGSUxFICpoZWxwZXIsIHN0cnVjdCBzdHJidWYgKmJ1ZmZlcikKK3N0YXRpYyBpbnQgcmVjdmxpbmVfZmgoRklMRSAqaGVscGVyLCBzdHJ1Y3Qgc3RyYnVmICpidWZmZXIsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RyYnVmX3Jlc2V0KGJ1ZmZlcik7CiAJaWYgKGRlYnVnKQpAQCAtNjUsNyArNjYsNyBAQAogCiBzdGF0aWMgaW50IHJlY3ZsaW5lKHN0cnVjdCBoZWxwZXJfZGF0YSAqaGVscGVyLCBzdHJ1Y3Qgc3RyYnVmICpidWZmZXIpCiB7Ci0JcmV0dXJuIHJlY3ZsaW5lX2ZoKGhlbHBlci0+b3V0LCBidWZmZXIpOworCXJldHVybiByZWN2bGluZV9maChoZWxwZXItPm91dCwgYnVmZmVyLCBoZWxwZXItPm5hbWUpOwogfQogCiBzdGF0aWMgdm9pZCB4Y2hnbGluZShzdHJ1Y3QgaGVscGVyX2RhdGEgKmhlbHBlciwgc3RydWN0IHN0cmJ1ZiAqYnVmZmVyKQpAQCAtMjE3LDYgKzIxOCw4IEBACiAJCWZvciAoaSA9IDA7IGkgPCByZWZzcGVjX25yOyBpKyspCiAJCQlmcmVlKChjaGFyICopcmVmc3BlY3NbaV0pOwogCQlmcmVlKHJlZnNwZWNzKTsKKwl9IGVsc2UgaWYgKGRhdGEtPmltcG9ydCB8fCBkYXRhLT5iaWRpX2ltcG9ydCB8fCBkYXRhLT5leHBvcnQpIHsKKwkJd2FybmluZygiVGhpcyByZW1vdGUgaGVscGVyIHNob3VsZCBpbXBsZW1lbnQgcmVmc3BlYyBjYXBhYmlsaXR5LiIpOwogCX0KIAlzdHJidWZfcmVsZWFzZSgmYnVmKTsKIAlpZiAoZGVidWcpCkBAIC00NzMsNyArNDc2LDcgQEAKIAkgKiB3ZXJlIGZldGNoaW5nLgogCSAqCiAJICogKElmIG5vICJyZWZzcGVjIiBjYXBhYmlsaXR5IHdhcyBzcGVjaWZpZWQsIGZvciBoaXN0b3JpY2FsCi0JICogcmVhc29ucyB3ZSBkZWZhdWx0IHRvICo6Ki4pCisJICogcmVhc29ucyB3ZSBkZWZhdWx0IHRvIHRoZSBlcXVpdmFsZW50IG9mICo6Ki4pCiAJICoKIAkgKiBTdG9yZSB0aGUgcmVzdWx0IGluIHRvX2ZldGNoW2ldLm9sZF9zaGExLiAgQ2FsbGVycyBzdWNoCiAJICogYXMgImdpdCBmZXRjaCIgY2FuIHVzZSB0aGUgdmFsdWUgdG8gd3JpdGUgZmVlZGJhY2sgdG8gdGhlCkBAIC01NDAsNyArNTQzLDcgQEAKIAkJZ290byBleGl0OwogCiAJc2VuZGxpbmUoZGF0YSwgJmNtZGJ1Zik7Ci0JcmVjdmxpbmVfZmgoaW5wdXQsICZjbWRidWYpOworCXJlY3ZsaW5lX2ZoKGlucHV0LCAmY21kYnVmLCBuYW1lKTsKIAlpZiAoIXN0cmNtcChjbWRidWYuYnVmLCAiIikpIHsKIAkJZGF0YS0+bm9fZGlzY29ubmVjdF9yZXEgPSAxOwogCQlpZiAoZGVidWcpCkBAIC02MjIsNyArNjI1LDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyB2b2lkIHB1c2hfdXBkYXRlX3JlZl9zdGF0dXMoc3RydWN0IHN0cmJ1ZiAqYnVmLAorc3RhdGljIGludCBwdXNoX3VwZGF0ZV9yZWZfc3RhdHVzKHN0cnVjdCBzdHJidWYgKmJ1ZiwKIAkJCQkgICBzdHJ1Y3QgcmVmICoqcmVmLAogCQkJCSAgIHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzKQogewpAQCAtNjg4LDcgKzY5MSw3IEBACiAJCSpyZWYgPSBmaW5kX3JlZl9ieV9uYW1lKHJlbW90ZV9yZWZzLCByZWZuYW1lKTsKIAlpZiAoISpyZWYpIHsKIAkJd2FybmluZygiaGVscGVyIHJlcG9ydGVkIHVuZXhwZWN0ZWQgc3RhdHVzIG9mICVzIiwgcmVmbmFtZSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJfQogCiAJaWYgKCgqcmVmKS0+c3RhdHVzICE9IFJFRl9TVEFUVVNfTk9ORSkgewpAQCAtNjk3LDExICs3MDAsMTIgQEAKIAkJICogc3RhdHVzIHJlcG9ydGVkIGJ5IHRoZSByZW1vdGUgaGVscGVyIGlmIHRoZSBsYXR0ZXIgaXMgJ25vIG1hdGNoJy4KIAkJICovCiAJCWlmIChzdGF0dXMgPT0gUkVGX1NUQVRVU19OT05FKQotCQkJcmV0dXJuOworCQkJcmV0dXJuIDE7CiAJfQogCiAJKCpyZWYpLT5zdGF0dXMgPSBzdGF0dXM7CiAJKCpyZWYpLT5yZW1vdGVfc3RhdHVzID0gbXNnOworCXJldHVybiAhKHN0YXR1cyA9PSBSRUZfU1RBVFVTX09LKTsKIH0KIAogc3RhdGljIHZvaWQgcHVzaF91cGRhdGVfcmVmc19zdGF0dXMoc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhLApAQCAtNzEwLDExICs3MTQsMjQgQEAKIAlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwogCXN0cnVjdCByZWYgKnJlZiA9IHJlbW90ZV9yZWZzOwogCWZvciAoOzspIHsKKwkJY2hhciAqcHJpdmF0ZTsKKwogCQlyZWN2bGluZShkYXRhLCAmYnVmKTsKIAkJaWYgKCFidWYubGVuKQogCQkJYnJlYWs7CiAKLQkJcHVzaF91cGRhdGVfcmVmX3N0YXR1cygmYnVmLCAmcmVmLCByZW1vdGVfcmVmcyk7CisJCWlmIChwdXNoX3VwZGF0ZV9yZWZfc3RhdHVzKCZidWYsICZyZWYsIHJlbW90ZV9yZWZzKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghZGF0YS0+cmVmc3BlY3MpCisJCQljb250aW51ZTsKKworCQkvKiBwcm9wYWdhdGUgYmFjayB0aGUgdXBkYXRlIHRvIHRoZSByZW1vdGUgbmFtZXNwYWNlICovCisJCXByaXZhdGUgPSBhcHBseV9yZWZzcGVjcyhkYXRhLT5yZWZzcGVjcywgZGF0YS0+cmVmc3BlY19uciwgcmVmLT5uYW1lKTsKKwkJaWYgKCFwcml2YXRlKQorCQkJY29udGludWU7CisJCXVwZGF0ZV9yZWYoInVwZGF0ZSBieSBoZWxwZXIiLCBwcml2YXRlLCByZWYtPm5ld19zaGExLCBOVUxMLCAwLCAwKTsKKwkJZnJlZShwcml2YXRlKTsKIAl9CiAJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CiB9CkBAIC03ODksNiArODA2LDE0IEBACiAJc3RydWN0IHN0cmluZ19saXN0IHJldmxpc3RfYXJncyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKIAorCWlmICghZGF0YS0+cmVmc3BlY3MpCisJCWRpZSgicmVtb3RlLWhlbHBlciBkb2Vzbid0IHN1cHBvcnQgcHVzaDsgcmVmc3BlYyBuZWVkZWQiKTsKKworCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0RSWV9SVU4pIHsKKwkJaWYgKHNldF9oZWxwZXJfb3B0aW9uKHRyYW5zcG9ydCwgImRyeS1ydW4iLCAidHJ1ZSIpICE9IDApCisJCQlkaWUoImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IGRyeS1ydW4iLCBkYXRhLT5uYW1lKTsKKwl9CisKIAloZWxwZXIgPSBnZXRfaGVscGVyKHRyYW5zcG9ydCk7CiAKIAl3cml0ZV9jb25zdGFudChoZWxwZXItPmluLCAiZXhwb3J0XG4iKTsKQEAgLTc5OSw4ICs4MjQsOSBAQAogCQljaGFyICpwcml2YXRlOwogCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCi0JCWlmICghZGF0YS0+cmVmc3BlY3MpCi0JCQljb250aW51ZTsKKwkJaWYgKHJlZi0+ZGVsZXRpb24pCisJCQlkaWUoInJlbW90ZS1oZWxwZXJzIGRvIG5vdCBzdXBwb3J0IHJlZiBkZWxldGlvbiIpOworCiAJCXByaXZhdGUgPSBhcHBseV9yZWZzcGVjcyhkYXRhLT5yZWZzcGVjcywgZGF0YS0+cmVmc3BlY19uciwgcmVmLT5uYW1lKTsKIAkJaWYgKHByaXZhdGUgJiYgIWdldF9zaGExKHByaXZhdGUsIHNoYTEpKSB7CiAJCQlzdHJidWZfYWRkZigmYnVmLCAiXiVzIiwgcHJpdmF0ZSk7CkBAIC04MDksMTMgKzgzNSwxNCBAQAogCQl9CiAJCWZyZWUocHJpdmF0ZSk7CiAKLQkJaWYgKHJlZi0+ZGVsZXRpb24pIHsKKwkJaWYgKHJlZi0+ZGVsZXRpb24pCiAJCQlkaWUoInJlbW90ZS1oZWxwZXJzIGRvIG5vdCBzdXBwb3J0IHJlZiBkZWxldGlvbiIpOwotCQl9CiAKLQkJaWYgKHJlZi0+cGVlcl9yZWYpCisJCWlmIChyZWYtPnBlZXJfcmVmKSB7CisJCQlpZiAoc3RyY21wKHJlZi0+cGVlcl9yZWYtPm5hbWUsIHJlZi0+bmFtZSkpCisJCQkJZGllKCJyZW1vdGUtaGVscGVycyBkbyBub3Qgc3VwcG9ydCBvbGQ6bmV3IHN5bnRheCIpOwogCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZyZXZsaXN0X2FyZ3MsIHJlZi0+cGVlcl9yZWYtPm5hbWUpOwotCisJCX0KIAl9CiAKIAlpZiAoZ2V0X2V4cG9ydGVyKHRyYW5zcG9ydCwgJmV4cG9ydGVyLCAmcmV2bGlzdF9hcmdzKSkKQEAgLTk1NSw2ICs5ODIsNyBAQAogI2RlZmluZSBQQlVGRkVSU0laRSA4MTkyCiAKIC8qIFByaW50IGJpZGlyZWN0aW9uYWwgdHJhbnNmZXIgbG9vcCBkZWJ1ZyBtZXNzYWdlLiAqLworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKIHN0YXRpYyB2b2lkIHRyYW5zZmVyX2RlYnVnKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKQEAgLTEwNDAsNyArMTA2OCw3IEBACiAJCXJldHVybiAtMTsKIAl9IGVsc2UgaWYgKGJ5dGVzID09IDApIHsKIAkJdHJhbnNmZXJfZGVidWcoIiVzIEVPRiAod2l0aCAlaSBieXRlcyBpbiBidWZmZXIpIiwKLQkJCXQtPnNyY19uYW1lLCB0LT5idWZ1c2UpOworCQkJdC0+c3JjX25hbWUsIChpbnQpdC0+YnVmdXNlKTsKIAkJdC0+c3RhdGUgPSBTU1RBVEVfRkxVU0hJTkc7CiAJfSBlbHNlIGlmIChieXRlcyA+IDApIHsKIAkJdC0+YnVmdXNlICs9IGJ5dGVzOwpkaWZmIC0tZ2l0IGEvdHJhbnNwb3J0LmMgYi90cmFuc3BvcnQuYwppbmRleCBiYTVkOGFmLi5lMTVkYjk4IDEwMDY0NAotLS0gYS90cmFuc3BvcnQuYworKysgYi90cmFuc3BvcnQuYwpAQCAtNTM0LDYgKzUzNCw4IEBACiAJYXJncy5xdWlldCA9ICh0cmFuc3BvcnQtPnZlcmJvc2UgPCAwKTsKIAlhcmdzLm5vX3Byb2dyZXNzID0gIXRyYW5zcG9ydC0+cHJvZ3Jlc3M7CiAJYXJncy5kZXB0aCA9IGRhdGEtPm9wdGlvbnMuZGVwdGg7CisJYXJncy5jaGVja19zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkID0KKwkJZGF0YS0+b3B0aW9ucy5jaGVja19zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkOwogCiAJaWYgKCFkYXRhLT5nb3RfcmVtb3RlX2hlYWRzKSB7CiAJCWNvbm5lY3Rfc2V0dXAodHJhbnNwb3J0LCAwLCAwKTsKQEAgLTU1MSw2ICs1NTMsOCBAQAogCQlyZWZzID0gTlVMTDsKIAlkYXRhLT5jb25uID0gTlVMTDsKIAlkYXRhLT5nb3RfcmVtb3RlX2hlYWRzID0gMDsKKwlkYXRhLT5vcHRpb25zLnNlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgPQorCQlhcmdzLnNlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQ7CiAKIAlmcmVlX3JlZnMocmVmc190bXApOwogCkBAIC0xMjI4LDcgKzEyMzIsNyBAQAogCQkgKiB0aGVuIGxvY2FsIGFuZCByZW1vdGUgcmVmcyBhcmUgbGlrZWx5IHRvIHN0aWxsIGJlIGVxdWFsLgogCQkgKiBKdXN0IGZlZWQgdGhlbSBhbGwgdG8gdGhlIGZldGNoIG1ldGhvZCBpbiB0aGF0IGNhc2UuCiAJCSAqIFRoaXMgY29uZGl0aW9uIHNob3VsZG4ndCBiZSBtZXQgaW4gYSBub24tZGVlcGVuaW5nIGZldGNoCi0JCSAqIChzZWUgYnVpbHRpbi1mZXRjaC5jOnF1aWNrZmV0Y2goKSkuCisJCSAqIChzZWUgYnVpbHRpbi9mZXRjaC5jOnF1aWNrZmV0Y2goKSkuCiAJCSAqLwogCQloZWFkcyA9IHhtYWxsb2MobnJfcmVmcyAqIHNpemVvZigqaGVhZHMpKTsKIAkJZm9yIChybSA9IHJlZnM7IHJtOyBybSA9IHJtLT5uZXh0KQpkaWZmIC0tZ2l0IGEvdHJhbnNwb3J0LmggYi90cmFuc3BvcnQuaAppbmRleCBmY2IxZDI1Li5lYTcwZWE3IDEwMDY0NAotLS0gYS90cmFuc3BvcnQuaAorKysgYi90cmFuc3BvcnQuaApAQCAtOCw2ICs4LDggQEAKIAl1bnNpZ25lZCB0aGluIDogMTsKIAl1bnNpZ25lZCBrZWVwIDogMTsKIAl1bnNpZ25lZCBmb2xsb3d0YWdzIDogMTsKKwl1bnNpZ25lZCBjaGVja19zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkIDogMTsKKwl1bnNpZ25lZCBzZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkIDogMTsKIAlpbnQgZGVwdGg7CiAJY29uc3QgY2hhciAqdXBsb2FkcGFjazsKIAljb25zdCBjaGFyICpyZWNlaXZlcGFjazsKQEAgLTE2OCw3ICsxNzAsNyBAQAogaW50IHRyYW5zcG9ydF9oZWxwZXJfaW5pdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGNvbnN0IGNoYXIgKm5hbWUpOwogaW50IGJpZGlyZWN0aW9uYWxfdHJhbnNmZXJfbG9vcChpbnQgaW5wdXQsIGludCBvdXRwdXQpOwogCi0vKiBjb21tb24gbWV0aG9kcyB1c2VkIGJ5IHRyYW5zcG9ydC5jIGFuZCBidWlsdGluLXNlbmQtcGFjay5jICovCisvKiBjb21tb24gbWV0aG9kcyB1c2VkIGJ5IHRyYW5zcG9ydC5jIGFuZCBidWlsdGluL3NlbmQtcGFjay5jICovCiB2b2lkIHRyYW5zcG9ydF92ZXJpZnlfcmVtb3RlX25hbWVzKGludCBucl9oZWFkcywgY29uc3QgY2hhciAqKmhlYWRzKTsKIAogdm9pZCB0cmFuc3BvcnRfdXBkYXRlX3RyYWNraW5nX3JlZihzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHN0cnVjdCByZWYgKnJlZiwgaW50IHZlcmJvc2UpOwpkaWZmIC0tZ2l0IGEvdHJlZS13YWxrLmMgYi90cmVlLXdhbGsuYwppbmRleCA2ZTMwZWY5Li5jNjI2MTM1IDEwMDY0NAotLS0gYS90cmVlLXdhbGsuYworKysgYi90cmVlLXdhbGsuYwpAQCAtMzIzLDcgKzMyMyw2IEBACiAKIGludCB0cmF2ZXJzZV90cmVlcyhpbnQgbiwgc3RydWN0IHRyZWVfZGVzYyAqdCwgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8pCiB7Ci0JaW50IHJldCA9IDA7CiAJaW50IGVycm9yID0gMDsKIAlzdHJ1Y3QgbmFtZV9lbnRyeSAqZW50cnkgPSB4bWFsbG9jKG4qc2l6ZW9mKCplbnRyeSkpOwogCWludCBpOwpAQCAtMzQxLDYgKzM0MCw3IEBACiAJCXN0cmJ1Zl9zZXRsZW4oJmJhc2UsIGluZm8tPnBhdGhsZW4pOwogCX0KIAlmb3IgKDs7KSB7CisJCWludCB0cmVlc191c2VkOwogCQl1bnNpZ25lZCBsb25nIG1hc2ssIGRpcm1hc2s7CiAJCWNvbnN0IGNoYXIgKmZpcnN0ID0gTlVMTDsKIAkJaW50IGZpcnN0X2xlbiA9IDA7CkBAIC00MDQsMTUgKzQwNCwxNCBAQAogCQlpZiAoaW50ZXJlc3RpbmcgPCAwKQogCQkJYnJlYWs7CiAJCWlmIChpbnRlcmVzdGluZykgewotCQkJcmV0ID0gaW5mby0+Zm4obiwgbWFzaywgZGlybWFzaywgZW50cnksIGluZm8pOwotCQkJaWYgKHJldCA8IDApIHsKLQkJCQllcnJvciA9IHJldDsKKwkJCXRyZWVzX3VzZWQgPSBpbmZvLT5mbihuLCBtYXNrLCBkaXJtYXNrLCBlbnRyeSwgaW5mbyk7CisJCQlpZiAodHJlZXNfdXNlZCA8IDApIHsKKwkJCQllcnJvciA9IHRyZWVzX3VzZWQ7CiAJCQkJaWYgKCFpbmZvLT5zaG93X2FsbF9lcnJvcnMpCiAJCQkJCWJyZWFrOwogCQkJfQotCQkJbWFzayAmPSByZXQ7CisJCQltYXNrICY9IHRyZWVzX3VzZWQ7CiAJCX0KLQkJcmV0ID0gMDsKIAkJZm9yIChpID0gMDsgaSA8IG47IGkrKykKIAkJCWlmIChtYXNrICYgKDF1bCA8PCBpKSkKIAkJCQl1cGRhdGVfZXh0ZW5kZWRfZW50cnkodHggKyBpLCBlbnRyeSArIGkpOwpkaWZmIC0tZ2l0IGEvdHJlZS13YWxrLmggYi90cmVlLXdhbGsuaAppbmRleCAyYmYwZGI5Li5hZTA0YjY0IDEwMDY0NAotLS0gYS90cmVlLXdhbGsuaAorKysgYi90cmVlLXdhbGsuaApAQCAtNDYsNyArNDYsNyBAQAogCWludCBwYXRobGVuOwogCXN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWM7CiAKLQl1bnNpZ25lZCBsb25nIGNvbmZsaWN0czsKKwl1bnNpZ25lZCBsb25nIGRmX2NvbmZsaWN0czsKIAl0cmF2ZXJzZV9jYWxsYmFja190IGZuOwogCXZvaWQgKmRhdGE7CiAJaW50IHNob3dfYWxsX2Vycm9yczsKZGlmZiAtLWdpdCBhL3RyZWUuYyBiL3RyZWUuYwppbmRleCA2MmZlZDYzLi5jMGU1NjhjIDEwMDY0NAotLS0gYS90cmVlLmMKKysrIGIvdHJlZS5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAkgKiBzb3J0IGF0IHRoZSBlbmQuCiAJICovCiAJZm9yIChpID0gMDsgIWZuICYmIGkgPCBhY3RpdmVfbnI7IGkrKykgewotCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOwogCQlpZiAoY2Vfc3RhZ2UoY2UpID09IHN0YWdlKQogCQkJZm4gPSByZWFkX29uZV9lbnRyeTsKIAl9CmRpZmYgLS1naXQgYS91bnBhY2stdHJlZXMuYyBiL3VucGFjay10cmVlcy5jCmluZGV4IGVkZTQyOTkuLmJmMDE3MTcgMTAwNjQ0Ci0tLSBhL3VucGFjay10cmVlcy5jCisrKyBiL3VucGFjay10cmVlcy5jCkBAIC0xMTYsMTQgKzExNiwyMCBAQAogCQkJQUREX0NBQ0hFX09LX1RPX0FERCB8IEFERF9DQUNIRV9PS19UT19SRVBMQUNFKTsKIH0KIAotc3RhdGljIHZvaWQgYWRkX2VudHJ5KHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbywgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKLQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCitzdGF0aWMgc3RydWN0IGNhY2hlX2VudHJ5ICpkdXBfZW50cnkoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKIHsKIAl1bnNpZ25lZCBpbnQgc2l6ZSA9IGNlX3NpemUoY2UpOwogCXN0cnVjdCBjYWNoZV9lbnRyeSAqbmV3ID0geG1hbGxvYyhzaXplKTsKIAogCW1lbWNweShuZXcsIGNlLCBzaXplKTsKLQlkb19hZGRfZW50cnkobywgbmV3LCBzZXQsIGNsZWFyKTsKKwlyZXR1cm4gbmV3OworfQorCitzdGF0aWMgdm9pZCBhZGRfZW50cnkoc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkgICAgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJZG9fYWRkX2VudHJ5KG8sIGR1cF9lbnRyeShjZSksIHNldCwgY2xlYXIpOwogfQogCiAvKgpAQCAtMTczLDcgKzE3OSw3IEBACiAgKiBVbmxpbmsgdGhlIGxhc3QgY29tcG9uZW50IGFuZCBzY2hlZHVsZSB0aGUgbGVhZGluZyBkaXJlY3RvcmllcyBmb3IKICAqIHJlbW92YWwsIHN1Y2ggdGhhdCBlbXB0eSBkaXJlY3RvcmllcyBnZXQgcmVtb3ZlZC4KICAqLwotc3RhdGljIHZvaWQgdW5saW5rX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCitzdGF0aWMgdm9pZCB1bmxpbmtfZW50cnkoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKIHsKIAlpZiAoIWNoZWNrX2xlYWRpbmdfcGF0aChjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSkpKQogCQlyZXR1cm47CkBAIC0xOTMsNyArMTk5LDcgQEAKIAogCWlmIChvLT51cGRhdGUgJiYgby0+dmVyYm9zZV91cGRhdGUpIHsKIAkJZm9yICh0b3RhbCA9IGNudCA9IDA7IGNudCA8IGluZGV4LT5jYWNoZV9ucjsgY250KyspIHsKLQkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpbmRleC0+Y2FjaGVbY250XTsKKwkJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpbmRleC0+Y2FjaGVbY250XTsKIAkJCWlmIChjZS0+Y2VfZmxhZ3MgJiAoQ0VfVVBEQVRFIHwgQ0VfV1RfUkVNT1ZFKSkKIAkJCQl0b3RhbCsrOwogCQl9CkBAIC0yMDYsNyArMjEyLDcgQEAKIAlpZiAoby0+dXBkYXRlKQogCQlnaXRfYXR0cl9zZXRfZGlyZWN0aW9uKEdJVF9BVFRSX0NIRUNLT1VULCAmby0+cmVzdWx0KTsKIAlmb3IgKGkgPSAwOyBpIDwgaW5kZXgtPmNhY2hlX25yOyBpKyspIHsKLQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGluZGV4LT5jYWNoZVtpXTsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGluZGV4LT5jYWNoZVtpXTsKIAogCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfV1RfUkVNT1ZFKSB7CiAJCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCArK2NudCk7CkBAIC0yMzUsOCArMjQxLDExIEBACiAJcmV0dXJuIGVycnMgIT0gMDsKIH0KIAotc3RhdGljIGludCB2ZXJpZnlfdXB0b2RhdGVfc3BhcnNlKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbyk7Ci1zdGF0aWMgaW50IHZlcmlmeV9hYnNlbnRfc3BhcnNlKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGVudW0gdW5wYWNrX3RyZWVzX2Vycm9yX3R5cGVzLCBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pOworc3RhdGljIGludCB2ZXJpZnlfdXB0b2RhdGVfc3BhcnNlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pOworc3RhdGljIGludCB2ZXJpZnlfYWJzZW50X3NwYXJzZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCWVudW0gdW5wYWNrX3RyZWVzX2Vycm9yX3R5cGVzLAorCQkJCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbyk7CiAKIHN0YXRpYyBpbnQgYXBwbHlfc3BhcnNlX2NoZWNrb3V0KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKIHsKQEAgLTI5MSw3ICszMDAsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjYWxsX3VucGFja19mbihzdHJ1Y3QgY2FjaGVfZW50cnkgKipzcmMsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3N0YXRpYyBpbmxpbmUgaW50IGNhbGxfdW5wYWNrX2ZuKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICpzcmMsCisJCQkJIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKIHsKIAlpbnQgcmV0ID0gby0+Zm4oc3JjLCBvKTsKIAlpZiAocmV0ID4gMCkKQEAgLTMyMCw3ICszMzAsNyBAQAogCQlpbmRleC0+Y2FjaGVbaV0tPmNlX2ZsYWdzICY9IH4oQ0VfVU5QQUNLRUQgfCBDRV9BRERFRCB8IENFX05FV19TS0lQX1dPUktUUkVFKTsKIH0KIAotc3RhdGljIGludCBsb2NhdGVfaW5fc3JjX2luZGV4KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCitzdGF0aWMgaW50IGxvY2F0ZV9pbl9zcmNfaW5kZXgoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKIAkJCSAgICAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCiB7CiAJc3RydWN0IGluZGV4X3N0YXRlICppbmRleCA9IG8tPnNyY19pbmRleDsKQEAgLTM2Niw3ICszNzYsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBhZGRfc2FtZV91bm1lcmdlZChzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorc3RhdGljIHZvaWQgYWRkX3NhbWVfdW5tZXJnZWQoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKIAkJCSAgICAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKIHsKIAlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4ID0gby0+c3JjX2luZGV4OwpAQCAtMzg4LDcgKzM5OCw3IEBACiBzdGF0aWMgaW50IHVucGFja19pbmRleF9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAogCQkJICAgICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQogewotCXN0cnVjdCBjYWNoZV9lbnRyeSAqc3JjW01BWF9VTlBBQ0tfVFJFRVMgKyAxXSA9IHsgTlVMTCwgfTsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKnNyY1tNQVhfVU5QQUNLX1RSRUVTICsgMV0gPSB7IE5VTEwsIH07CiAJaW50IHJldDsKIAogCXNyY1swXSA9IGNlOwpAQCAtNDU0LDcgKzQ2NCw3IEBACiAJbmV3aW5mby5wYXRoc3BlYyA9IGluZm8tPnBhdGhzcGVjOwogCW5ld2luZm8ubmFtZSA9ICpwOwogCW5ld2luZm8ucGF0aGxlbiArPSB0cmVlX2VudHJ5X2xlbihwKSArIDE7Ci0JbmV3aW5mby5jb25mbGljdHMgfD0gZGZfY29uZmxpY3RzOworCW5ld2luZm8uZGZfY29uZmxpY3RzIHw9IGRmX2NvbmZsaWN0czsKIAogCWZvciAoaSA9IDA7IGkgPCBuOyBpKyssIGRpcm1hc2sgPj49IDEpIHsKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSA9IE5VTEw7CkBAIC01NTUsMTcgKzU2NSwxMiBAQAogewogCWludCBpOwogCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbyA9IGluZm8tPmRhdGE7Ci0JdW5zaWduZWQgbG9uZyBjb25mbGljdHM7CisJdW5zaWduZWQgbG9uZyBjb25mbGljdHMgPSBpbmZvLT5kZl9jb25mbGljdHMgfCBkaXJtYXNrOwogCiAJLyogRG8gd2UgaGF2ZSAqb25seSogZGlyZWN0b3JpZXM/IE5vdGhpbmcgdG8gZG8gKi8KIAlpZiAobWFzayA9PSBkaXJtYXNrICYmICFzcmNbMF0pCiAJCXJldHVybiAwOwogCi0JY29uZmxpY3RzID0gaW5mby0+Y29uZmxpY3RzOwotCWlmIChvLT5tZXJnZSkKLQkJY29uZmxpY3RzID4+PSAxOwotCWNvbmZsaWN0cyB8PSBkaXJtYXNrOwotCiAJLyoKIAkgKiBPaywgd2UndmUgZmlsbGVkIGluIHVwIHRvIGFueSBwb3RlbnRpYWwgaW5kZXggZW50cnkgaW4gc3JjWzBdLAogCSAqIG5vdyBkbyB0aGUgcmVzdC4KQEAgLTU5MCw4ICs1OTUsMTYgQEAKIAkJc3JjW2kgKyBvLT5tZXJnZV0gPSBjcmVhdGVfY2VfZW50cnkoaW5mbywgbmFtZXMgKyBpLCBzdGFnZSk7CiAJfQogCi0JaWYgKG8tPm1lcmdlKQotCQlyZXR1cm4gY2FsbF91bnBhY2tfZm4oc3JjLCBvKTsKKwlpZiAoby0+bWVyZ2UpIHsKKwkJaW50IHJjID0gY2FsbF91bnBhY2tfZm4oKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICopc3JjLAorCQkJCQlvKTsKKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IHNyY1tpICsgby0+bWVyZ2VdOworCQkJaWYgKGNlICE9IG8tPmRmX2NvbmZsaWN0X2VudHJ5KQorCQkJCWZyZWUoY2UpOworCQl9CisJCXJldHVybiByYzsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQogCQlpZiAoc3JjW2ldICYmIHNyY1tpXSAhPSBvLT5kZl9jb25mbGljdF9lbnRyeSkKQEAgLTYzNyw3ICs2NTAsNyBAQAogCWludCBwX2xlbiA9IHRyZWVfZW50cnlfbGVuKHApOwogCiAJZm9yIChwb3MgPSBvLT5jYWNoZV9ib3R0b207IHBvcyA8IGluZGV4LT5jYWNoZV9ucjsgcG9zKyspIHsKLQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGluZGV4LT5jYWNoZVtwb3NdOworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaW5kZXgtPmNhY2hlW3Bvc107CiAJCWNvbnN0IGNoYXIgKmNlX25hbWUsICpjZV9zbGFzaDsKIAkJaW50IGNtcCwgY2VfbGVuOwogCkBAIC03ODksMTMgKzgwMiw2IEBACiAKIAkvKiBOb3cgaGFuZGxlIGFueSBkaXJlY3Rvcmllcy4uICovCiAJaWYgKGRpcm1hc2spIHsKLQkJdW5zaWduZWQgbG9uZyBjb25mbGljdHMgPSBtYXNrICYgfmRpcm1hc2s7Ci0JCWlmIChvLT5tZXJnZSkgewotCQkJY29uZmxpY3RzIDw8PSAxOwotCQkJaWYgKHNyY1swXSkKLQkJCQljb25mbGljdHMgfD0gMTsKLQkJfQotCiAJCS8qIHNwZWNpYWwgY2FzZTogImRpZmYtaW5kZXggLS1jYWNoZWQiIGxvb2tpbmcgYXQgYSB0cmVlICovCiAJCWlmIChvLT5kaWZmX2luZGV4X2NhY2hlZCAmJgogCQkgICAgbiA9PSAxICYmIGRpcm1hc2sgPT0gMSAmJiBTX0lTRElSKG5hbWVzLT5tb2RlKSkgewpAQCAtODE0LDcgKzgyMCw3IEBACiAJCQl9CiAJCX0KIAotCQlpZiAodHJhdmVyc2VfdHJlZXNfcmVjdXJzaXZlKG4sIGRpcm1hc2ssIGNvbmZsaWN0cywKKwkJaWYgKHRyYXZlcnNlX3RyZWVzX3JlY3Vyc2l2ZShuLCBkaXJtYXNrLCBtYXNrICYgfmRpcm1hc2ssCiAJCQkJCSAgICAgbmFtZXMsIGluZm8pIDwgMCkKIAkJCXJldHVybiAtMTsKIAkJcmV0dXJuIG1hc2s7CkBAIC05OTUsNyArMTAwMSw5IEBACiAJCSAgICAgICBzZWxlY3RfZmxhZywgc2tpcF93dF9mbGFnLCBlbCk7CiB9CiAKLXN0YXRpYyBpbnQgdmVyaWZ5X2Fic2VudChzdHJ1Y3QgY2FjaGVfZW50cnkgKiwgZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqKTsKK3N0YXRpYyBpbnQgdmVyaWZ5X2Fic2VudChjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiwKKwkJCSBlbnVtIHVucGFja190cmVlc19lcnJvcl90eXBlcywKKwkJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKik7CiAvKgogICogTi13YXkgbWVyZ2UgImxlbiIgdHJlZXMuICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZSB0byBtYW5pcHVsYXRlIHRoZQogICogcmVzdWx0aW5nIGluZGV4LCAtMiBvbiBmYWlsdXJlIHRvIHJlZmxlY3QgdGhlIGNoYW5nZXMgdG8gdGhlIHdvcmsgdHJlZS4KQEAgLTExNjUsMTIgKzExNzMsMTMgQEAKIAogLyogSGVyZSBjb21lIHRoZSBtZXJnZSBmdW5jdGlvbnMgKi8KIAotc3RhdGljIGludCByZWplY3RfbWVyZ2Uoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQorc3RhdGljIGludCByZWplY3RfbWVyZ2UoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKIHsKIAlyZXR1cm4gYWRkX3JlamVjdGVkX3BhdGgobywgRVJST1JfV09VTERfT1ZFUldSSVRFLCBjZS0+bmFtZSk7CiB9CiAKLXN0YXRpYyBpbnQgc2FtZShzdHJ1Y3QgY2FjaGVfZW50cnkgKmEsIHN0cnVjdCBjYWNoZV9lbnRyeSAqYikKK3N0YXRpYyBpbnQgc2FtZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmEsIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqYikKIHsKIAlpZiAoISFhICE9ICEhYikKIAkJcmV0dXJuIDA7CkBAIC0xMTg3LDkgKzExOTYsOSBAQAogICogV2hlbiBhIENFIGdldHMgdHVybmVkIGludG8gYW4gdW5tZXJnZWQgZW50cnksIHdlCiAgKiB3YW50IGl0IHRvIGJlIHVwLXRvLWRhdGUKICAqLwotc3RhdGljIGludCB2ZXJpZnlfdXB0b2RhdGVfMShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAotCQkJCSAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbywKLQkJCQkgICBlbnVtIHVucGFja190cmVlc19lcnJvcl90eXBlcyBlcnJvcl90eXBlKQorc3RhdGljIGludCB2ZXJpZnlfdXB0b2RhdGVfMShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJICAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8sCisJCQkgICAgIGVudW0gdW5wYWNrX3RyZWVzX2Vycm9yX3R5cGVzIGVycm9yX3R5cGUpCiB7CiAJc3RydWN0IHN0YXQgc3Q7CiAKQEAgLTEyMjgsNyArMTIzNyw3IEBACiAJCWFkZF9yZWplY3RlZF9wYXRoKG8sIGVycm9yX3R5cGUsIGNlLT5uYW1lKTsKIH0KIAotc3RhdGljIGludCB2ZXJpZnlfdXB0b2RhdGUoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKK3N0YXRpYyBpbnQgdmVyaWZ5X3VwdG9kYXRlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCiAJCQkgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCiB7CiAJaWYgKCFvLT5za2lwX3NwYXJzZV9jaGVja291dCAmJiAoY2UtPmNlX2ZsYWdzICYgQ0VfTkVXX1NLSVBfV09SS1RSRUUpKQpAQCAtMTIzNiwxMyArMTI0NSwxNCBAQAogCXJldHVybiB2ZXJpZnlfdXB0b2RhdGVfMShjZSwgbywgRVJST1JfTk9UX1VQVE9EQVRFX0ZJTEUpOwogfQogCi1zdGF0aWMgaW50IHZlcmlmeV91cHRvZGF0ZV9zcGFyc2Uoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKK3N0YXRpYyBpbnQgdmVyaWZ5X3VwdG9kYXRlX3NwYXJzZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAogCQkJCSAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQogewogCXJldHVybiB2ZXJpZnlfdXB0b2RhdGVfMShjZSwgbywgRVJST1JfU1BBUlNFX05PVF9VUFRPREFURV9GSUxFKTsKIH0KIAotc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9jZV9wYXRoKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3N0YXRpYyB2b2lkIGludmFsaWRhdGVfY2VfcGF0aChjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJICAgICAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKIHsKIAlpZiAoY2UpCiAJCWNhY2hlX3RyZWVfaW52YWxpZGF0ZV9wYXRoKG8tPnNyY19pbmRleC0+Y2FjaGVfdHJlZSwgY2UtPm5hbWUpOwpAQCAtMTI1NSwxNiArMTI2NSwxNiBAQAogICogQ3VycmVudGx5LCBnaXQgZG9lcyBub3QgY2hlY2tvdXQgc3VicHJvamVjdHMgZHVyaW5nIGEgc3VwZXJwcm9qZWN0CiAgKiBjaGVja291dCwgc28gaXQgaXMgbm90IGdvaW5nIHRvIG92ZXJ3cml0ZSBhbnl0aGluZy4KICAqLwotc3RhdGljIGludCB2ZXJpZnlfY2xlYW5fc3VibW9kdWxlKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCi0JCQkJICAgICAgZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgZXJyb3JfdHlwZSwKLQkJCQkgICAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCitzdGF0aWMgaW50IHZlcmlmeV9jbGVhbl9zdWJtb2R1bGUoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkgIGVudW0gdW5wYWNrX3RyZWVzX2Vycm9yX3R5cGVzIGVycm9yX3R5cGUsCisJCQkJICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmVyaWZ5X2NsZWFuX3N1YmRpcmVjdG9yeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAotCQkJCSAgICAgIGVudW0gdW5wYWNrX3RyZWVzX2Vycm9yX3R5cGVzIGVycm9yX3R5cGUsCi0JCQkJICAgICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQorc3RhdGljIGludCB2ZXJpZnlfY2xlYW5fc3ViZGlyZWN0b3J5KGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJICAgICBlbnVtIHVucGFja190cmVlc19lcnJvcl90eXBlcyBlcnJvcl90eXBlLAorCQkJCSAgICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQogewogCS8qCiAJICogd2UgYXJlIGFib3V0IHRvIGV4dHJhY3QgImNlLT5uYW1lIjsgd2Ugd291bGQgbm90IHdhbnQgdG8gbG9zZQpAQCAtMTM0MywxOCArMTM1MywxOCBAQAogICovCiBzdGF0aWMgaW50IGljYXNlX2V4aXN0cyhzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8sIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sIHN0cnVjdCBzdGF0ICpzdCkKIHsKLQlzdHJ1Y3QgY2FjaGVfZW50cnkgKnNyYzsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKnNyYzsKIAogCXNyYyA9IGluZGV4X25hbWVfZXhpc3RzKG8tPnNyY19pbmRleCwgbmFtZSwgbGVuLCAxKTsKIAlyZXR1cm4gc3JjICYmICFpZV9tYXRjaF9zdGF0KG8tPnNyY19pbmRleCwgc3JjLCBzdCwgQ0VfTUFUQ0hfSUdOT1JFX1ZBTElEfENFX01BVENIX0lHTk9SRV9TS0lQX1dPUktUUkVFKTsKIH0KIAogc3RhdGljIGludCBjaGVja19va190b19yZW1vdmUoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgaW50IGR0eXBlLAotCQkJICAgICAgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0LAorCQkJICAgICAgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0LAogCQkJICAgICAgZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgZXJyb3JfdHlwZSwKIAkJCSAgICAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKIHsKLQlzdHJ1Y3QgY2FjaGVfZW50cnkgKnJlc3VsdDsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKnJlc3VsdDsKIAogCS8qCiAJICogSXQgbWF5IGJlIHRoYXQgdGhlICdsc3RhdCgpJyBzdWNjZWVkZWQgZXZlbiB0aG91Z2gKQEAgLTE0MDUsOSArMTQxNSw5IEBACiAgKiBXZSBkbyBub3Qgd2FudCB0byByZW1vdmUgb3Igb3ZlcndyaXRlIGEgd29ya2luZyB0cmVlIGZpbGUgdGhhdAogICogaXMgbm90IHRyYWNrZWQsIHVubGVzcyBpdCBpcyBpZ25vcmVkLgogICovCi1zdGF0aWMgaW50IHZlcmlmeV9hYnNlbnRfMShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAotCQkJCSBlbnVtIHVucGFja190cmVlc19lcnJvcl90eXBlcyBlcnJvcl90eXBlLAotCQkJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCitzdGF0aWMgaW50IHZlcmlmeV9hYnNlbnRfMShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJICAgZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgZXJyb3JfdHlwZSwKKwkJCSAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKIHsKIAlpbnQgbGVuOwogCXN0cnVjdCBzdGF0IHN0OwpAQCAtMTQ0MCw3ICsxNDUwLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgdmVyaWZ5X2Fic2VudChzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorc3RhdGljIGludCB2ZXJpZnlfYWJzZW50KGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCiAJCQkgZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgZXJyb3JfdHlwZSwKIAkJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCiB7CkBAIC0xNDQ5LDkgKzE0NTksOSBAQAogCXJldHVybiB2ZXJpZnlfYWJzZW50XzEoY2UsIGVycm9yX3R5cGUsIG8pOwogfQogCi1zdGF0aWMgaW50IHZlcmlmeV9hYnNlbnRfc3BhcnNlKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCi0JCQkgZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgZXJyb3JfdHlwZSwKLQkJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCitzdGF0aWMgaW50IHZlcmlmeV9hYnNlbnRfc3BhcnNlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgZXJyb3JfdHlwZSwKKwkJCQlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCiB7CiAJZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgb3JwaGFuZWRfZXJyb3IgPSBlcnJvcl90eXBlOwogCWlmIChvcnBoYW5lZF9lcnJvciA9PSBFUlJPUl9XT1VMRF9MT1NFX1VOVFJBQ0tFRF9PVkVSV1JJVFRFTikKQEAgLTE0NjAsMTAgKzE0NzAsMTIgQEAKIAlyZXR1cm4gdmVyaWZ5X2Fic2VudF8xKGNlLCBvcnBoYW5lZF9lcnJvciwgbyk7CiB9CiAKLXN0YXRpYyBpbnQgbWVyZ2VkX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqbWVyZ2UsIHN0cnVjdCBjYWNoZV9lbnRyeSAqb2xkLAotCQlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCitzdGF0aWMgaW50IG1lcmdlZF9lbnRyeShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQsCisJCQlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCiB7CiAJaW50IHVwZGF0ZSA9IENFX1VQREFURTsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKm1lcmdlID0gZHVwX2VudHJ5KGNlKTsKIAogCWlmICghb2xkKSB7CiAJCS8qCkBAIC0xNDgxLDggKzE0OTMsMTEgQEAKIAkJdXBkYXRlIHw9IENFX0FEREVEOwogCQltZXJnZS0+Y2VfZmxhZ3MgfD0gQ0VfTkVXX1NLSVBfV09SS1RSRUU7CiAKLQkJaWYgKHZlcmlmeV9hYnNlbnQobWVyZ2UsIEVSUk9SX1dPVUxEX0xPU0VfVU5UUkFDS0VEX09WRVJXUklUVEVOLCBvKSkKKwkJaWYgKHZlcmlmeV9hYnNlbnQobWVyZ2UsCisJCQkJICBFUlJPUl9XT1VMRF9MT1NFX1VOVFJBQ0tFRF9PVkVSV1JJVFRFTiwgbykpIHsKKwkJCWZyZWUobWVyZ2UpOwogCQkJcmV0dXJuIC0xOworCQl9CiAJCWludmFsaWRhdGVfY2VfcGF0aChtZXJnZSwgbyk7CiAJfSBlbHNlIGlmICghKG9sZC0+Y2VfZmxhZ3MgJiBDRV9DT05GTElDVEVEKSkgewogCQkvKgpAQCAtMTQ5Niw4ICsxNTExLDEwIEBACiAJCQljb3B5X2NhY2hlX2VudHJ5KG1lcmdlLCBvbGQpOwogCQkJdXBkYXRlID0gMDsKIAkJfSBlbHNlIHsKLQkJCWlmICh2ZXJpZnlfdXB0b2RhdGUob2xkLCBvKSkKKwkJCWlmICh2ZXJpZnlfdXB0b2RhdGUob2xkLCBvKSkgeworCQkJCWZyZWUobWVyZ2UpOwogCQkJCXJldHVybiAtMTsKKwkJCX0KIAkJCS8qIE1pZ3JhdGUgb2xkIGZsYWdzIG92ZXIgKi8KIAkJCXVwZGF0ZSB8PSBvbGQtPmNlX2ZsYWdzICYgKENFX1NLSVBfV09SS1RSRUUgfCBDRV9ORVdfU0tJUF9XT1JLVFJFRSk7CiAJCQlpbnZhbGlkYXRlX2NlX3BhdGgob2xkLCBvKTsKQEAgLTE1MTAsMTIgKzE1MjcsMTMgQEAKIAkJaW52YWxpZGF0ZV9jZV9wYXRoKG9sZCwgbyk7CiAJfQogCi0JYWRkX2VudHJ5KG8sIG1lcmdlLCB1cGRhdGUsIENFX1NUQUdFTUFTSyk7CisJZG9fYWRkX2VudHJ5KG8sIG1lcmdlLCB1cGRhdGUsIENFX1NUQUdFTUFTSyk7CiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgZGVsZXRlZF9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKm9sZCwKLQkJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQorc3RhdGljIGludCBkZWxldGVkX2VudHJ5KGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQsCisJCQkgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQogewogCS8qIERpZCBpdCBleGlzdCBpbiB0aGUgaW5kZXg/ICovCiAJaWYgKCFvbGQpIHsKQEAgLTE1MzAsNyArMTU0OCw4IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQga2VlcF9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCitzdGF0aWMgaW50IGtlZXBfZW50cnkoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJICAgICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQogewogCWFkZF9lbnRyeShvLCBjZSwgMCwgMCk7CiAJcmV0dXJuIDE7CkBAIC0xNTUyLDExICsxNTcxLDEyIEBACiB9CiAjZW5kaWYKIAotaW50IHRocmVld2F5X21lcmdlKHN0cnVjdCBjYWNoZV9lbnRyeSAqKnN0YWdlcywgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoraW50IHRocmVld2F5X21lcmdlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICpzdGFnZXMsCisJCSAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKIHsKLQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmluZGV4OwotCXN0cnVjdCBjYWNoZV9lbnRyeSAqaGVhZDsKLQlzdHJ1Y3QgY2FjaGVfZW50cnkgKnJlbW90ZSA9IHN0YWdlc1tvLT5oZWFkX2lkeCArIDFdOworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqaW5kZXg7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpoZWFkOworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqcmVtb3RlID0gc3RhZ2VzW28tPmhlYWRfaWR4ICsgMV07CiAJaW50IGNvdW50OwogCWludCBoZWFkX21hdGNoID0gMDsKIAlpbnQgcmVtb3RlX21hdGNoID0gMDsKQEAgLTE2NDEsNyArMTY2MSw3IEBACiAJaWYgKG8tPmFnZ3Jlc3NpdmUpIHsKIAkJaW50IGhlYWRfZGVsZXRlZCA9ICFoZWFkOwogCQlpbnQgcmVtb3RlX2RlbGV0ZWQgPSAhcmVtb3RlOwotCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gTlVMTDsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IE5VTEw7CiAKIAkJaWYgKGluZGV4KQogCQkJY2UgPSBpbmRleDsKQEAgLTE3MjQsMTEgKzE3NDQsMTIgQEAKICAqICJjYXJyeSBmb3J3YXJkIiBydWxlLCBwbGVhc2Ugc2VlIDxEb2N1bWVudGF0aW9uL2dpdC1yZWFkLXRyZWUudHh0Pi4KICAqCiAgKi8KLWludCB0d293YXlfbWVyZ2Uoc3RydWN0IGNhY2hlX2VudHJ5ICoqc3JjLCBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCitpbnQgdHdvd2F5X21lcmdlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICpzcmMsCisJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCiB7Ci0Jc3RydWN0IGNhY2hlX2VudHJ5ICpjdXJyZW50ID0gc3JjWzBdOwotCXN0cnVjdCBjYWNoZV9lbnRyeSAqb2xkdHJlZSA9IHNyY1sxXTsKLQlzdHJ1Y3QgY2FjaGVfZW50cnkgKm5ld3RyZWUgPSBzcmNbMl07CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjdXJyZW50ID0gc3JjWzBdOworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqb2xkdHJlZSA9IHNyY1sxXTsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKm5ld3RyZWUgPSBzcmNbMl07CiAKIAlpZiAoby0+bWVyZ2Vfc2l6ZSAhPSAyKQogCQlyZXR1cm4gZXJyb3IoIkNhbm5vdCBkbyBhIHR3b3dheSBtZXJnZSBvZiAlZCB0cmVlcyIsCkBAIC0xNzkwLDExICsxODExLDExIEBACiAgKiBLZWVwIHRoZSBpbmRleCBlbnRyaWVzIGF0IHN0YWdlMCwgY29sbGFwc2Ugc3RhZ2UxIGJ1dCBtYWtlIHN1cmUKICAqIHN0YWdlMCBkb2VzIG5vdCBoYXZlIGFueXRoaW5nIHRoZXJlLgogICovCi1pbnQgYmluZF9tZXJnZShzdHJ1Y3QgY2FjaGVfZW50cnkgKipzcmMsCi0JCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK2ludCBiaW5kX21lcmdlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICpzcmMsCisJICAgICAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKIHsKLQlzdHJ1Y3QgY2FjaGVfZW50cnkgKm9sZCA9IHNyY1swXTsKLQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmEgPSBzcmNbMV07CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQgPSBzcmNbMF07CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICphID0gc3JjWzFdOwogCiAJaWYgKG8tPm1lcmdlX3NpemUgIT0gMSkKIAkJcmV0dXJuIGVycm9yKCJDYW5ub3QgZG8gYSBiaW5kIG1lcmdlIG9mICVkIHRyZWVzIiwKQEAgLTE4MTQsMTAgKzE4MzUsMTEgQEAKICAqIFRoZSBydWxlIGlzOgogICogLSB0YWtlIHRoZSBzdGF0IGluZm9ybWF0aW9uIGZyb20gc3RhZ2UwLCB0YWtlIHRoZSBkYXRhIGZyb20gc3RhZ2UxCiAgKi8KLWludCBvbmV3YXlfbWVyZ2Uoc3RydWN0IGNhY2hlX2VudHJ5ICoqc3JjLCBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCitpbnQgb25ld2F5X21lcmdlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICpzcmMsCisJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCiB7Ci0Jc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQgPSBzcmNbMF07Ci0Jc3RydWN0IGNhY2hlX2VudHJ5ICphID0gc3JjWzFdOworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqb2xkID0gc3JjWzBdOworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqYSA9IHNyY1sxXTsKIAogCWlmIChvLT5tZXJnZV9zaXplICE9IDEpCiAJCXJldHVybiBlcnJvcigiQ2Fubm90IGRvIGEgb25ld2F5IG1lcmdlIG9mICVkIHRyZWVzIiwKZGlmZiAtLWdpdCBhL3VucGFjay10cmVlcy5oIGIvdW5wYWNrLXRyZWVzLmgKaW5kZXggNWU0MzJmNS4uMzZhNzNhNiAxMDA2NDQKLS0tIGEvdW5wYWNrLXRyZWVzLmgKKysrIGIvdW5wYWNrLXRyZWVzLmgKQEAgLTgsNyArOCw3IEBACiBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnM7CiBzdHJ1Y3QgZXhjbHVkZV9saXN0OwogCi10eXBlZGVmIGludCAoKm1lcmdlX2ZuX3QpKHN0cnVjdCBjYWNoZV9lbnRyeSAqKnNyYywKK3R5cGVkZWYgaW50ICgqbWVyZ2VfZm5fdCkoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICogY29uc3QgKnNyYywKIAkJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvcHRpb25zKTsKIAogZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgewpAQCAtNzcsOSArNzcsMTMgQEAKIGV4dGVybiBpbnQgdW5wYWNrX3RyZWVzKHVuc2lnbmVkIG4sIHN0cnVjdCB0cmVlX2Rlc2MgKnQsCiAJCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqb3B0aW9ucyk7CiAKLWludCB0aHJlZXdheV9tZXJnZShzdHJ1Y3QgY2FjaGVfZW50cnkgKipzdGFnZXMsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbyk7Ci1pbnQgdHdvd2F5X21lcmdlKHN0cnVjdCBjYWNoZV9lbnRyeSAqKnNyYywgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKTsKLWludCBiaW5kX21lcmdlKHN0cnVjdCBjYWNoZV9lbnRyeSAqKnNyYywgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKTsKLWludCBvbmV3YXlfbWVyZ2Uoc3RydWN0IGNhY2hlX2VudHJ5ICoqc3JjLCBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pOworaW50IHRocmVld2F5X21lcmdlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICpzdGFnZXMsCisJCSAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbyk7CitpbnQgdHdvd2F5X21lcmdlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICpzcmMsCisJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pOworaW50IGJpbmRfbWVyZ2UoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICogY29uc3QgKnNyYywKKwkgICAgICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKTsKK2ludCBvbmV3YXlfbWVyZ2UoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICogY29uc3QgKnNyYywKKwkJIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdXBsb2FkLXBhY2suYyBiL3VwbG9hZC1wYWNrLmMKaW5kZXggYmZhNjI3OWMuLjEyN2U1OWEgMTAwNjQ0Ci0tLSBhL3VwbG9hZC1wYWNrLmMKKysrIGIvdXBsb2FkLXBhY2suYwpAQCAtNTkyLDcgKzU5Miw3IEBACiAJCQkJZGllKCJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiLCBsaW5lKTsKIAkJCW9iamVjdCA9IHBhcnNlX29iamVjdChzaGExKTsKIAkJCWlmICghb2JqZWN0KQotCQkJCWRpZSgiZGlkIG5vdCBmaW5kIG9iamVjdCBmb3IgJXMiLCBsaW5lKTsKKwkJCQljb250aW51ZTsKIAkJCWlmIChvYmplY3QtPnR5cGUgIT0gT0JKX0NPTU1JVCkKIAkJCQlkaWUoImludmFsaWQgc2hhbGxvdyBvYmplY3QgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CiAJCQlpZiAoIShvYmplY3QtPmZsYWdzICYgQ0xJRU5UX1NIQUxMT1cpKSB7CmRpZmYgLS1naXQgYS91dGY4LmggYi91dGY4LmgKaW5kZXggMzJhN2JmYi4uNjVkMGU0MiAxMDA2NDQKLS0tIGEvdXRmOC5oCisrKyBiL3V0ZjguaApAQCAtMTAsNiArMTAsNyBAQAogaW50IGlzX3V0ZjgoY29uc3QgY2hhciAqdGV4dCk7CiBpbnQgaXNfZW5jb2RpbmdfdXRmOChjb25zdCBjaGFyICpuYW1lKTsKIGludCBzYW1lX2VuY29kaW5nKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCiBpbnQgdXRmOF9mcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOwogCiB2b2lkIHN0cmJ1Zl9hZGRfd3JhcHBlZF90ZXh0KHN0cnVjdCBzdHJidWYgKmJ1ZiwKZGlmZiAtLWdpdCBhL3dpbGRtYXRjaC5jIGIvd2lsZG1hdGNoLmMKaW5kZXggNzE5MmJkYy4uZjkxYmE5OSAxMDA2NDQKLS0tIGEvd2lsZG1hdGNoLmMKKysrIGIvd2lsZG1hdGNoLmMKQEAgLTE5Niw2ICsxOTYsMTEgQEAKIAkJCQkJfQogCQkJCQlpZiAodF9jaCA8PSBwX2NoICYmIHRfY2ggPj0gcHJldl9jaCkKIAkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQllbHNlIGlmICgoZmxhZ3MgJiBXTV9DQVNFRk9MRCkgJiYgSVNMT1dFUih0X2NoKSkgeworCQkJCQkJdWNoYXIgdF9jaF91cHBlciA9IHRvdXBwZXIodF9jaCk7CisJCQkJCQlpZiAodF9jaF91cHBlciA8PSBwX2NoICYmIHRfY2hfdXBwZXIgPj0gcHJldl9jaCkKKwkJCQkJCQltYXRjaGVkID0gMTsKKwkJCQkJfQogCQkJCQlwX2NoID0gMDsgLyogVGhpcyBtYWtlcyAicHJldl9jaCIgZ2V0IHNldCB0byAwLiAqLwogCQkJCX0gZWxzZSBpZiAocF9jaCA9PSAnWycgJiYgcFsxXSA9PSAnOicpIHsKIAkJCQkJY29uc3QgdWNoYXIgKnM7CkBAIC0yNDUsNiArMjUwLDggQEAKIAkJCQkJfSBlbHNlIGlmIChDQ19FUShzLGksICJ1cHBlciIpKSB7CiAJCQkJCQlpZiAoSVNVUFBFUih0X2NoKSkKIAkJCQkJCQltYXRjaGVkID0gMTsKKwkJCQkJCWVsc2UgaWYgKChmbGFncyAmIFdNX0NBU0VGT0xEKSAmJiBJU0xPV0VSKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOwogCQkJCQl9IGVsc2UgaWYgKENDX0VRKHMsaSwgInhkaWdpdCIpKSB7CiAJCQkJCQlpZiAoSVNYRElHSVQodF9jaCkpCiAJCQkJCQkJbWF0Y2hlZCA9IDE7CmRpZmYgLS1naXQgYS93cmFwLWZvci1iaW4uc2ggYi93cmFwLWZvci1iaW4uc2gKaW5kZXggNTNhOGRkMC4uNzAxZDIzMyAxMDA2NDQKLS0tIGEvd3JhcC1mb3ItYmluLnNoCisrKyBiL3dyYXAtZm9yLWJpbi5zaApAQCAtMTQsNyArMTQsNyBAQAogCUdJVF9URU1QTEFURV9ESVI9J0BAQlVJTERfRElSQEAvdGVtcGxhdGVzL2JsdCcKIAlleHBvcnQgR0lUX1RFTVBMQVRFX0RJUgogZmkKLUdJVFBFUkxMSUI9J0BAQlVJTERfRElSQEAvcGVybC9ibGliL2xpYicKK0dJVFBFUkxMSUI9J0BAQlVJTERfRElSQEAvcGVybC9ibGliL2xpYiciJHtHSVRQRVJMTElCOis6JEdJVFBFUkxMSUJ9IgogR0lUX1RFWFRET01BSU5ESVI9J0BAQlVJTERfRElSQEAvcG8vYnVpbGQvbG9jYWxlJwogUEFUSD0nQEBCVUlMRF9ESVJAQC9iaW4td3JhcHBlcnM6JyIkUEFUSCIKIGV4cG9ydCBHSVRfRVhFQ19QQVRIIEdJVFBFUkxMSUIgUEFUSCBHSVRfVEVYVERPTUFJTkRJUgpkaWZmIC0tZ2l0IGEvd3JhcHBlci5jIGIvd3JhcHBlci5jCmluZGV4IGJhYzU5ZDIuLjZhMDE1ZGUgMTAwNjQ0Ci0tLSBhL3dyYXBwZXIuYworKysgYi93cmFwcGVyLmMKQEAgLTMyMiw3ICszMjIsNyBAQAogCQl0ZW1wbGF0ZVs1XSA9IGxldHRlcnNbdiAlIG51bV9sZXR0ZXJzXTsgdiAvPSBudW1fbGV0dGVyczsKIAogCQlmZCA9IG9wZW4ocGF0dGVybiwgT19DUkVBVCB8IE9fRVhDTCB8IE9fUkRXUiwgbW9kZSk7Ci0JCWlmIChmZCA+IDApCisJCWlmIChmZCA+PSAwKQogCQkJcmV0dXJuIGZkOwogCQkvKgogCQkgKiBGYXRhbCBlcnJvciAoRVBFUk0sIEVOT1NQQyBldGMpLgpAQCAtNDA4LDE4ICs0MDgsMjQgQEAKIAl3YXJuaW5nKF8oInVuYWJsZSB0byBhY2Nlc3MgJyVzJzogJXMiKSwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKIH0KIAotaW50IGFjY2Vzc19vcl93YXJuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtb2RlKQorc3RhdGljIGludCBhY2Nlc3NfZXJyb3JfaXNfb2soaW50IGVyciwgdW5zaWduZWQgZmxhZykKK3sKKwlyZXR1cm4gZXJyID09IEVOT0VOVCB8fCBlcnIgPT0gRU5PVERJUiB8fAorCQkoKGZsYWcgJiBBQ0NFU1NfRUFDQ0VTX09LKSAmJiBlcnIgPT0gRUFDQ0VTKTsKK30KKworaW50IGFjY2Vzc19vcl93YXJuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtb2RlLCB1bnNpZ25lZCBmbGFnKQogewogCWludCByZXQgPSBhY2Nlc3MocGF0aCwgbW9kZSk7Ci0JaWYgKHJldCAmJiBlcnJubyAhPSBFTk9FTlQgJiYgZXJybm8gIT0gRU5PVERJUikKKwlpZiAocmV0ICYmICFhY2Nlc3NfZXJyb3JfaXNfb2soZXJybm8sIGZsYWcpKQogCQl3YXJuX29uX2luYWNjZXNzaWJsZShwYXRoKTsKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgYWNjZXNzX29yX2RpZShjb25zdCBjaGFyICpwYXRoLCBpbnQgbW9kZSkKK2ludCBhY2Nlc3Nfb3JfZGllKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtb2RlLCB1bnNpZ25lZCBmbGFnKQogewogCWludCByZXQgPSBhY2Nlc3MocGF0aCwgbW9kZSk7Ci0JaWYgKHJldCAmJiBlcnJubyAhPSBFTk9FTlQgJiYgZXJybm8gIT0gRU5PVERJUikKKwlpZiAocmV0ICYmICFhY2Nlc3NfZXJyb3JfaXNfb2soZXJybm8sIGZsYWcpKQogCQlkaWVfZXJybm8oXygidW5hYmxlIHRvIGFjY2VzcyAnJXMnIiksIHBhdGgpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS93dC1zdGF0dXMuYyBiL3d0LXN0YXR1cy5jCmluZGV4IGJmODRhODYuLmNiMjRmMWYgMTAwNjQ0Ci0tLSBhL3d0LXN0YXR1cy5jCisrKyBiL3d0LXN0YXR1cy5jCkBAIC0xMjcsNiArMTI3LDcgQEAKIAlzLT5jaGFuZ2Uuc3RyZHVwX3N0cmluZ3MgPSAxOwogCXMtPnVudHJhY2tlZC5zdHJkdXBfc3RyaW5ncyA9IDE7CiAJcy0+aWdub3JlZC5zdHJkdXBfc3RyaW5ncyA9IDE7CisJcy0+c2hvd19icmFuY2ggPSAtMTsgIC8qIHVuc3BlY2lmaWVkICovCiB9CiAKIHN0YXRpYyB2b2lkIHd0X3N0YXR1c19wcmludF91bm1lcmdlZF9oZWFkZXIoc3RydWN0IHd0X3N0YXR1cyAqcykKQEAgLTI0Myw3ICsyNDQsNyBAQAogCXN0cnVjdCBzdHJidWYgb25lYnVmID0gU1RSQlVGX0lOSVQ7CiAJY29uc3QgY2hhciAqb25lLCAqaG93ID0gXygiYnVnIik7CiAKLQlvbmUgPSBxdW90ZV9wYXRoKGl0LT5zdHJpbmcsIC0xLCAmb25lYnVmLCBzLT5wcmVmaXgpOworCW9uZSA9IHF1b3RlX3BhdGgoaXQtPnN0cmluZywgcy0+cHJlZml4LCAmb25lYnVmKTsKIAlzdGF0dXNfcHJpbnRmKHMsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpLCAiXHQiKTsKIAlzd2l0Y2ggKGQtPnN0YWdlbWFzaykgewogCWNhc2UgMTogaG93ID0gXygiYm90aCBkZWxldGVkOiIpOyBicmVhazsKQEAgLTI5Nyw4ICsyOTgsOCBAQAogCQkgICAgY2hhbmdlX3R5cGUpOwogCX0KIAotCW9uZSA9IHF1b3RlX3BhdGgob25lX25hbWUsIC0xLCAmb25lYnVmLCBzLT5wcmVmaXgpOwotCXR3byA9IHF1b3RlX3BhdGgodHdvX25hbWUsIC0xLCAmdHdvYnVmLCBzLT5wcmVmaXgpOworCW9uZSA9IHF1b3RlX3BhdGgob25lX25hbWUsIHMtPnByZWZpeCwgJm9uZWJ1Zik7CisJdHdvID0gcXVvdGVfcGF0aCh0d29fbmFtZSwgcy0+cHJlZml4LCAmdHdvYnVmKTsKIAogCXN0YXR1c19wcmludGYocywgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICJcdCIpOwogCXN3aXRjaCAoc3RhdHVzKSB7CkBAIC0zNzEsNyArMzcyLDcgQEAKIHN0YXRpYyBpbnQgdW5tZXJnZWRfbWFzayhjb25zdCBjaGFyICpwYXRoKQogewogCWludCBwb3MsIG1hc2s7Ci0Jc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOwogCiAJcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgc3RybGVuKHBhdGgpKTsKIAlpZiAoMCA8PSBwb3MpCkBAIC00NzUsNyArNDc2LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKIAkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0OwogCQlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkOwotCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOwogCiAJCWlmICghY2VfcGF0aF9tYXRjaChjZSwgJnBhdGhzcGVjKSkKIAkJCWNvbnRpbnVlOwpAQCAtNzA2LDggKzcwNyw3IEBACiAJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdDsKIAkJY29uc3QgY2hhciAqcGF0aDsKIAkJaXQgPSAmKGwtPml0ZW1zW2ldKTsKLQkJcGF0aCA9IHF1b3RlX3BhdGgoaXQtPnN0cmluZywgc3RybGVuKGl0LT5zdHJpbmcpLAotCQkJCSAgJmJ1Ziwgcy0+cHJlZml4KTsKKwkJcGF0aCA9IHF1b3RlX3BhdGgoaXQtPnN0cmluZywgcy0+cHJlZml4LCAmYnVmKTsKIAkJaWYgKGNvbHVtbl9hY3RpdmUocy0+Y29sb3B0cykpIHsKIAkJCXN0cmluZ19saXN0X2FwcGVuZCgmb3V0cHV0LCBwYXRoKTsKIAkJCWNvbnRpbnVlOwpAQCAtODI2LDcgKzgyNiw3IEBACiAJaWYgKGFkdmljZV9zdGF0dXNfaGludHMpIHsKIAkJaWYgKCFzdGF0ZS0+YW1fZW1wdHlfcGF0Y2gpCiAJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAotCQkJCV8oIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IGFtIC0tcmVzb2x2ZWRcIikiKSk7CisJCQkJXygiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgYW0gLS1jb250aW51ZVwiKSIpKTsKIAkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKIAkJCV8oIiAgKHVzZSBcImdpdCBhbSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIikpOwogCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLApAQCAtOTU1LDEwICs5NTUsMTIgQEAKIAlpZiAoYWR2aWNlX3N0YXR1c19oaW50cykgewogCQlpZiAoaGFzX3VubWVyZ2VkKHMpKQogCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKLQkJCQlfKCIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY29tbWl0XCIpIikpOworCQkJCV8oIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIikpOwogCQllbHNlCiAJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAotCQkJCV8oIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCBjb21taXRcIikiKSk7CisJCQkJXygiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiKSk7CisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQlfKCIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgY2hlcnJ5LXBpY2sgb3BlcmF0aW9uKSIpKTsKIAl9CiAJd3Rfc3RhdHVzX3ByaW50X3RyYWlsZXIocyk7CiB9CkBAIC0xMDM1LDcgKzEwMzcsNiBAQAogfQogCiBzdHJ1Y3QgZ3JhYl8xc3Rfc3dpdGNoX2NiZGF0YSB7Ci0JaW50IGZvdW5kOwogCXN0cnVjdCBzdHJidWYgYnVmOwogCXVuc2lnbmVkIGNoYXIgbnNoYTFbMjBdOwogfTsKQEAgLTEwNTksNyArMTA2MCw2IEBACiAJZm9yIChlbmQgPSB0YXJnZXQ7ICplbmQgJiYgKmVuZCAhPSAnXG4nOyBlbmQrKykKIAkJOwogCXN0cmJ1Zl9hZGQoJmNiLT5idWYsIHRhcmdldCwgZW5kIC0gdGFyZ2V0KTsKLQljYi0+Zm91bmQgPSAxOwogCXJldHVybiAxOwogfQogCkBAIC0xMTc2LDcgKzExNzYsMTAgQEAKIAkJCWJyYW5jaF9uYW1lICs9IDExOwogCQllbHNlIGlmICghc3RyY21wKGJyYW5jaF9uYW1lLCAiSEVBRCIpKSB7CiAJCQlicmFuY2hfc3RhdHVzX2NvbG9yID0gY29sb3IoV1RfU1RBVFVTX05PQlJBTkNILCBzKTsKLQkJCWlmIChzdGF0ZS5kZXRhY2hlZF9mcm9tKSB7CisJCQlpZiAoc3RhdGUucmViYXNlX2luX3Byb2dyZXNzIHx8IHN0YXRlLnJlYmFzZV9pbnRlcmFjdGl2ZV9pbl9wcm9ncmVzcykgeworCQkJCW9uX3doYXQgPSBfKCJyZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIik7CisJCQkJYnJhbmNoX25hbWUgPSBzdGF0ZS5vbnRvOworCQkJfSBlbHNlIGlmIChzdGF0ZS5kZXRhY2hlZF9mcm9tKSB7CiAJCQkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIAkJCQlicmFuY2hfbmFtZSA9IHN0YXRlLmRldGFjaGVkX2Zyb207CiAJCQkJaWYgKCFnZXRfc2hhMSgiSEVBRCIsIHNoYTEpICYmCkBAIC0xMjg5LDcgKzEyOTIsNyBAQAogCX0gZWxzZSB7CiAJCXN0cnVjdCBzdHJidWYgb25lYnVmID0gU1RSQlVGX0lOSVQ7CiAJCWNvbnN0IGNoYXIgKm9uZTsKLQkJb25lID0gcXVvdGVfcGF0aChpdC0+c3RyaW5nLCAtMSwgJm9uZWJ1Ziwgcy0+cHJlZml4KTsKKwkJb25lID0gcXVvdGVfcGF0aChpdC0+c3RyaW5nLCBzLT5wcmVmaXgsICZvbmVidWYpOwogCQlwcmludGYoIiAlc1xuIiwgb25lKTsKIAkJc3RyYnVmX3JlbGVhc2UoJm9uZWJ1Zik7CiAJfQpAQCAtMTMxNyw3ICsxMzIwLDcgQEAKIAkJc3RydWN0IHN0cmJ1ZiBvbmVidWYgPSBTVFJCVUZfSU5JVDsKIAkJY29uc3QgY2hhciAqb25lOwogCQlpZiAoZC0+aGVhZF9wYXRoKSB7Ci0JCQlvbmUgPSBxdW90ZV9wYXRoKGQtPmhlYWRfcGF0aCwgLTEsICZvbmVidWYsIHMtPnByZWZpeCk7CisJCQlvbmUgPSBxdW90ZV9wYXRoKGQtPmhlYWRfcGF0aCwgcy0+cHJlZml4LCAmb25lYnVmKTsKIAkJCWlmICgqb25lICE9ICciJyAmJiBzdHJjaHIob25lLCAnICcpICE9IE5VTEwpIHsKIAkJCQlwdXRjaGFyKCciJyk7CiAJCQkJc3RyYnVmX2FkZGNoKCZvbmVidWYsICciJyk7CkBAIC0xMzI2LDcgKzEzMjksNyBAQAogCQkJcHJpbnRmKCIlcyAtPiAiLCBvbmUpOwogCQkJc3RyYnVmX3JlbGVhc2UoJm9uZWJ1Zik7CiAJCX0KLQkJb25lID0gcXVvdGVfcGF0aChpdC0+c3RyaW5nLCAtMSwgJm9uZWJ1Ziwgcy0+cHJlZml4KTsKKwkJb25lID0gcXVvdGVfcGF0aChpdC0+c3RyaW5nLCBzLT5wcmVmaXgsICZvbmVidWYpOwogCQlpZiAoKm9uZSAhPSAnIicgJiYgc3RyY2hyKG9uZSwgJyAnKSAhPSBOVUxMKSB7CiAJCQlwdXRjaGFyKCciJyk7CiAJCQlzdHJidWZfYWRkY2goJm9uZWJ1ZiwgJyInKTsKQEAgLTEzNDUsNyArMTM0OCw3IEBACiAJfSBlbHNlIHsKIAkJc3RydWN0IHN0cmJ1ZiBvbmVidWYgPSBTVFJCVUZfSU5JVDsKIAkJY29uc3QgY2hhciAqb25lOwotCQlvbmUgPSBxdW90ZV9wYXRoKGl0LT5zdHJpbmcsIC0xLCAmb25lYnVmLCBzLT5wcmVmaXgpOworCQlvbmUgPSBxdW90ZV9wYXRoKGl0LT5zdHJpbmcsIHMtPnByZWZpeCwgJm9uZWJ1Zik7CiAJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19VTlRSQUNLRUQsIHMpLCAiJXMiLCBzaWduKTsKIAkJcHJpbnRmKCIgJXNcbiIsIG9uZSk7CiAJCXN0cmJ1Zl9yZWxlYXNlKCZvbmVidWYpOwpkaWZmIC0tZ2l0IGEvd3Qtc3RhdHVzLmggYi93dC1zdGF0dXMuaAppbmRleCA0MTIxYmMyLi5mYjcxNTJlIDEwMDY0NAotLS0gYS93dC1zdGF0dXMuaAorKysgYi93dC1zdGF0dXMuaApAQCAtOTYsOSArOTYsOSBAQAogdm9pZCB3dF9zaG9ydHN0YXR1c19wcmludChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKTsKIHZvaWQgd3RfcG9yY2VsYWluX3ByaW50KHN0cnVjdCB3dF9zdGF0dXMgKnMpOwogCi12b2lkIHN0YXR1c19wcmludGZfbG4oc3RydWN0IHd0X3N0YXR1cyAqcywgY29uc3QgY2hhciAqY29sb3IsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotCTsKLXZvaWQgc3RhdHVzX3ByaW50ZihzdHJ1Y3Qgd3Rfc3RhdHVzICpzLCBjb25zdCBjaGFyICpjb2xvciwgY29uc3QgY2hhciAqZm10LCAuLi4pCi0JOworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDMsIDQpKSkKK3ZvaWQgc3RhdHVzX3ByaW50Zl9sbihzdHJ1Y3Qgd3Rfc3RhdHVzICpzLCBjb25zdCBjaGFyICpjb2xvciwgY29uc3QgY2hhciAqZm10LCAuLi4pOworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDMsIDQpKSkKK3ZvaWQgc3RhdHVzX3ByaW50ZihzdHJ1Y3Qgd3Rfc3RhdHVzICpzLCBjb25zdCBjaGFyICpjb2xvciwgY29uc3QgY2hhciAqZm10LCAuLi4pOwogCiAjZW5kaWYgLyogU1RBVFVTX0ggKi8KZGlmZiAtLWdpdCBhL3hkaWZmL3hkaWZmLmggYi94ZGlmZi94ZGlmZi5oCmluZGV4IDIxOWEzYmIuLmMwMzM5OTEgMTAwNjQ0Ci0tLSBhL3hkaWZmL3hkaWZmLmgKKysrIGIveGRpZmYveGRpZmYuaApAQCAtMzksNiArMzksOCBAQAogI2RlZmluZSBYREZfRElGRl9BTEdPUklUSE1fTUFTSyAoWERGX1BBVElFTkNFX0RJRkYgfCBYREZfSElTVE9HUkFNX0RJRkYpCiAjZGVmaW5lIFhERl9ESUZGX0FMRyh4KSAoKHgpICYgWERGX0RJRkZfQUxHT1JJVEhNX01BU0spCiAKKyNkZWZpbmUgWERGX0lHTk9SRV9CTEFOS19MSU5FUyAoMSA8PCA3KQorCiAjZGVmaW5lIFhETF9FTUlUX0ZVTkNOQU1FUyAoMSA8PCAwKQogI2RlZmluZSBYRExfRU1JVF9DT01NT04gKDEgPDwgMSkKICNkZWZpbmUgWERMX0VNSVRfRlVOQ0NPTlRFWFQgKDEgPDwgMikKZGlmZiAtLWdpdCBhL3hkaWZmL3hkaWZmaS5jIGIveGRpZmYveGRpZmZpLmMKaW5kZXggYjJlYjZkYi4uMjM1OGEyZCAxMDA2NDQKLS0tIGEveGRpZmYveGRpZmZpLmMKKysrIGIveGRpZmYveGRpZmZpLmMKQEAgLTM5NCw2ICszOTQsNyBAQAogCXhjaC0+aTIgPSBpMjsKIAl4Y2gtPmNoZzEgPSBjaGcxOwogCXhjaC0+Y2hnMiA9IGNoZzI7CisJeGNoLT5pZ25vcmUgPSAwOwogCiAJcmV0dXJuIHhjaDsKIH0KQEAgLTU0NCw3ICs1NDUsOSBAQAogCXhkY2hhbmdlX3QgKnhjaCwgKnhjaGU7CiAKIAlmb3IgKHhjaCA9IHhzY3I7IHhjaDsgeGNoID0geGNoZS0+bmV4dCkgewotCQl4Y2hlID0geGRsX2dldF9odW5rKHhjaCwgeGVjZmcpOworCQl4Y2hlID0geGRsX2dldF9odW5rKCZ4Y2gsIHhlY2ZnKTsKKwkJaWYgKCF4Y2gpCisJCQlicmVhazsKIAkJaWYgKHhlY2ZnLT5odW5rX2Z1bmMoeGNoLT5pMSwgeGNoZS0+aTEgKyB4Y2hlLT5jaGcxIC0geGNoLT5pMSwKIAkJCQkgICAgIHhjaC0+aTIsIHhjaGUtPmkyICsgeGNoZS0+Y2hnMiAtIHhjaC0+aTIsCiAJCQkJICAgICBlY2ItPnByaXYpIDwgMCkKQEAgLTU1Myw2ICs1NTYsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgeGRsX21hcmtfaWdub3JhYmxlKHhkY2hhbmdlX3QgKnhzY3IsIHhkZmVudl90ICp4ZSwgbG9uZyBmbGFncykKK3sKKwl4ZGNoYW5nZV90ICp4Y2g7CisKKwlmb3IgKHhjaCA9IHhzY3I7IHhjaDsgeGNoID0geGNoLT5uZXh0KSB7CisJCWludCBpZ25vcmUgPSAxOworCQl4cmVjb3JkX3QgKipyZWM7CisJCWxvbmcgaTsKKworCQlyZWMgPSAmeGUtPnhkZjEucmVjc1t4Y2gtPmkxXTsKKwkJZm9yIChpID0gMDsgaSA8IHhjaC0+Y2hnMSAmJiBpZ25vcmU7IGkrKykKKwkJCWlnbm9yZSA9IHhkbF9ibGFua2xpbmUocmVjW2ldLT5wdHIsIHJlY1tpXS0+c2l6ZSwgZmxhZ3MpOworCisJCXJlYyA9ICZ4ZS0+eGRmMi5yZWNzW3hjaC0+aTJdOworCQlmb3IgKGkgPSAwOyBpIDwgeGNoLT5jaGcyICYmIGlnbm9yZTsgaSsrKQorCQkJaWdub3JlID0geGRsX2JsYW5rbGluZShyZWNbaV0tPnB0ciwgcmVjW2ldLT5zaXplLCBmbGFncyk7CisKKwkJeGNoLT5pZ25vcmUgPSBpZ25vcmU7CisJfQorfQorCiBpbnQgeGRsX2RpZmYobW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsCiAJICAgICB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnLCB4ZGVtaXRjYl90ICplY2IpIHsKIAl4ZGNoYW5nZV90ICp4c2NyOwpAQCAtNTcxLDYgKzU5NSw5IEBACiAJCXJldHVybiAtMTsKIAl9CiAJaWYgKHhzY3IpIHsKKwkJaWYgKHhwcC0+ZmxhZ3MgJiBYREZfSUdOT1JFX0JMQU5LX0xJTkVTKQorCQkJeGRsX21hcmtfaWdub3JhYmxlKHhzY3IsICZ4ZSwgeHBwLT5mbGFncyk7CisKIAkJaWYgKGVmKCZ4ZSwgeHNjciwgZWNiLCB4ZWNmZykgPCAwKSB7CiAKIAkJCXhkbF9mcmVlX3NjcmlwdCh4c2NyKTsKZGlmZiAtLWdpdCBhL3hkaWZmL3hkaWZmaS5oIGIveGRpZmYveGRpZmZpLmgKaW5kZXggN2E5MmVhOS4uOGI4MTIwNiAxMDA2NDQKLS0tIGEveGRpZmYveGRpZmZpLmgKKysrIGIveGRpZmYveGRpZmZpLmgKQEAgLTQxLDYgKzQxLDcgQEAKIAlzdHJ1Y3Qgc194ZGNoYW5nZSAqbmV4dDsKIAlsb25nIGkxLCBpMjsKIAlsb25nIGNoZzEsIGNoZzI7CisJaW50IGlnbm9yZTsKIH0geGRjaGFuZ2VfdDsKIAogCmRpZmYgLS1naXQgYS94ZGlmZi94ZW1pdC5jIGIveGRpZmYveGVtaXQuYwppbmRleCBkMTFkYmY5Li40ZDg2NDU4IDEwMDY0NAotLS0gYS94ZGlmZi94ZW1pdC5jCisrKyBiL3hkaWZmL3hlbWl0LmMKQEAgLTU2LDE2ICs1Niw1MSBAQAogLyoKICAqIFN0YXJ0aW5nIGF0IHRoZSBwYXNzZWQgY2hhbmdlIGF0b20sIGZpbmQgdGhlIGxhdGVzdCBjaGFuZ2UgYXRvbSB0byBiZSBpbmNsdWRlZAogICogaW5zaWRlIHRoZSBkaWZmZXJlbnRpYWwgaHVuayBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uLgorICogQWxzbyBhZHZhbmNlIHhzY3IgaWYgdGhlIGZpcnN0IGNoYW5nZXMgbXVzdCBiZSBkaXNjYXJkZWQuCiAgKi8KLXhkY2hhbmdlX3QgKnhkbF9nZXRfaHVuayh4ZGNoYW5nZV90ICp4c2NyLCB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnKSB7Ci0JeGRjaGFuZ2VfdCAqeGNoLCAqeGNocDsKK3hkY2hhbmdlX3QgKnhkbF9nZXRfaHVuayh4ZGNoYW5nZV90ICoqeHNjciwgeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZykKK3sKKwl4ZGNoYW5nZV90ICp4Y2gsICp4Y2hwLCAqbHhjaDsKIAlsb25nIG1heF9jb21tb24gPSAyICogeGVjZmctPmN0eGxlbiArIHhlY2ZnLT5pbnRlcmh1bmtjdHhsZW47CisJbG9uZyBtYXhfaWdub3JhYmxlID0geGVjZmctPmN0eGxlbjsKKwl1bnNpZ25lZCBsb25nIGlnbm9yZWQgPSAwOyAvKiBudW1iZXIgb2YgaWdub3JlZCBibGFuayBsaW5lcyAqLwogCi0JZm9yICh4Y2hwID0geHNjciwgeGNoID0geHNjci0+bmV4dDsgeGNoOyB4Y2hwID0geGNoLCB4Y2ggPSB4Y2gtPm5leHQpCi0JCWlmICh4Y2gtPmkxIC0gKHhjaHAtPmkxICsgeGNocC0+Y2hnMSkgPiBtYXhfY29tbW9uKQorCS8qIHJlbW92ZSBpZ25vcmFibGUgY2hhbmdlcyB0aGF0IGFyZSB0b28gZmFyIGJlZm9yZSBvdGhlciBjaGFuZ2VzICovCisJZm9yICh4Y2hwID0gKnhzY3I7IHhjaHAgJiYgeGNocC0+aWdub3JlOyB4Y2hwID0geGNocC0+bmV4dCkgeworCQl4Y2ggPSB4Y2hwLT5uZXh0OworCisJCWlmICh4Y2ggPT0gTlVMTCB8fAorCQkgICAgeGNoLT5pMSAtICh4Y2hwLT5pMSArIHhjaHAtPmNoZzEpID49IG1heF9pZ25vcmFibGUpCisJCQkqeHNjciA9IHhjaDsKKwl9CisKKwlpZiAoKnhzY3IgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlseGNoID0gKnhzY3I7CisKKwlmb3IgKHhjaHAgPSAqeHNjciwgeGNoID0geGNocC0+bmV4dDsgeGNoOyB4Y2hwID0geGNoLCB4Y2ggPSB4Y2gtPm5leHQpIHsKKwkJbG9uZyBkaXN0YW5jZSA9IHhjaC0+aTEgLSAoeGNocC0+aTEgKyB4Y2hwLT5jaGcxKTsKKwkJaWYgKGRpc3RhbmNlID4gbWF4X2NvbW1vbikKIAkJCWJyZWFrOwogCi0JcmV0dXJuIHhjaHA7CisJCWlmIChkaXN0YW5jZSA8IG1heF9pZ25vcmFibGUgJiYgKCF4Y2gtPmlnbm9yZSB8fCBseGNoID09IHhjaHApKSB7CisJCQlseGNoID0geGNoOworCQkJaWdub3JlZCA9IDA7CisJCX0gZWxzZSBpZiAoZGlzdGFuY2UgPCBtYXhfaWdub3JhYmxlICYmIHhjaC0+aWdub3JlKSB7CisJCQlpZ25vcmVkICs9IHhjaC0+Y2hnMjsKKwkJfSBlbHNlIGlmIChseGNoICE9IHhjaHAgJiYKKwkJCSAgIHhjaC0+aTEgKyBpZ25vcmVkIC0gKGx4Y2gtPmkxICsgbHhjaC0+Y2hnMSkgPiBtYXhfY29tbW9uKSB7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmICgheGNoLT5pZ25vcmUpIHsKKwkJCWx4Y2ggPSB4Y2g7CisJCQlpZ25vcmVkID0gMDsKKwkJfSBlbHNlIHsKKwkJCWlnbm9yZWQgKz0geGNoLT5jaGcyOworCQl9CisJfQorCisJcmV0dXJuIGx4Y2g7CiB9CiAKIApAQCAtMTM5LDcgKzE3NCw5IEBACiAJCXJldHVybiB4ZGxfZW1pdF9jb21tb24oeGUsIHhzY3IsIGVjYiwgeGVjZmcpOwogCiAJZm9yICh4Y2ggPSB4c2NyOyB4Y2g7IHhjaCA9IHhjaGUtPm5leHQpIHsKLQkJeGNoZSA9IHhkbF9nZXRfaHVuayh4Y2gsIHhlY2ZnKTsKKwkJeGNoZSA9IHhkbF9nZXRfaHVuaygmeGNoLCB4ZWNmZyk7CisJCWlmICgheGNoKQorCQkJYnJlYWs7CiAKIAkJczEgPSBYRExfTUFYKHhjaC0+aTEgLSB4ZWNmZy0+Y3R4bGVuLCAwKTsKIAkJczIgPSBYRExfTUFYKHhjaC0+aTIgLSB4ZWNmZy0+Y3R4bGVuLCAwKTsKZGlmZiAtLWdpdCBhL3hkaWZmL3hlbWl0LmggYi94ZGlmZi94ZW1pdC5oCmluZGV4IGMyZTJlODMuLmQyOTcxMDcgMTAwNjQ0Ci0tLSBhL3hkaWZmL3hlbWl0LmgKKysrIGIveGRpZmYveGVtaXQuaApAQCAtMjcsNyArMjcsNyBAQAogdHlwZWRlZiBpbnQgKCplbWl0X2Z1bmNfdCkoeGRmZW52X3QgKnhlLCB4ZGNoYW5nZV90ICp4c2NyLCB4ZGVtaXRjYl90ICplY2IsCiAJCQkgICB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnKTsKIAoteGRjaGFuZ2VfdCAqeGRsX2dldF9odW5rKHhkY2hhbmdlX3QgKnhzY3IsIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcpOworeGRjaGFuZ2VfdCAqeGRsX2dldF9odW5rKHhkY2hhbmdlX3QgKip4c2NyLCB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnKTsKIGludCB4ZGxfZW1pdF9kaWZmKHhkZmVudl90ICp4ZSwgeGRjaGFuZ2VfdCAqeHNjciwgeGRlbWl0Y2JfdCAqZWNiLAogCQkgIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcpOwogCmRpZmYgLS1naXQgYS94ZGlmZi94dXRpbHMuYyBiL3hkaWZmL3h1dGlscy5jCmluZGV4IDk1MDRlYWUuLjYyY2IyM2QgMTAwNjQ0Ci0tLSBhL3hkaWZmL3h1dGlscy5jCisrKyBiL3hkaWZmL3h1dGlscy5jCkBAIC0xNDMsNiArMTQzLDE5IEBACiAJcmV0dXJuIG5sICsgMTsKIH0KIAoraW50IHhkbF9ibGFua2xpbmUoY29uc3QgY2hhciAqbGluZSwgbG9uZyBzaXplLCBsb25nIGZsYWdzKQoreworCWxvbmcgaTsKKworCWlmICghKGZsYWdzICYgWERGX1dISVRFU1BBQ0VfRkxBR1MpKQorCQlyZXR1cm4gKHNpemUgPD0gMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZSAmJiBYRExfSVNTUEFDRShsaW5lW2ldKTsgaSsrKQorCQk7CisKKwlyZXR1cm4gKGkgPT0gc2l6ZSk7Cit9CisKIGludCB4ZGxfcmVjbWF0Y2goY29uc3QgY2hhciAqbDEsIGxvbmcgczEsIGNvbnN0IGNoYXIgKmwyLCBsb25nIHMyLCBsb25nIGZsYWdzKQogewogCWludCBpMSwgaTI7CmRpZmYgLS1naXQgYS94ZGlmZi94dXRpbHMuaCBiL3hkaWZmL3h1dGlscy5oCmluZGV4IGFkMTQyOGUuLjQ2NDZjZTUgMTAwNjQ0Ci0tLSBhL3hkaWZmL3h1dGlscy5oCisrKyBiL3hkaWZmL3h1dGlscy5oCkBAIC0zMiw2ICszMiw3IEBACiB2b2lkIHhkbF9jaGFfZnJlZShjaGFzdG9yZV90ICpjaGEpOwogdm9pZCAqeGRsX2NoYV9hbGxvYyhjaGFzdG9yZV90ICpjaGEpOwogbG9uZyB4ZGxfZ3Vlc3NfbGluZXMobW1maWxlX3QgKm1mLCBsb25nIHNhbXBsZSk7CitpbnQgeGRsX2JsYW5rbGluZShjb25zdCBjaGFyICpsaW5lLCBsb25nIHNpemUsIGxvbmcgZmxhZ3MpOwogaW50IHhkbF9yZWNtYXRjaChjb25zdCBjaGFyICpsMSwgbG9uZyBzMSwgY29uc3QgY2hhciAqbDIsIGxvbmcgczIsIGxvbmcgZmxhZ3MpOwogdW5zaWduZWQgbG9uZyB4ZGxfaGFzaF9yZWNvcmQoY2hhciBjb25zdCAqKmRhdGEsIGNoYXIgY29uc3QgKnRvcCwgbG9uZyBmbGFncyk7CiB1bnNpZ25lZCBpbnQgeGRsX2hhc2hiaXRzKHVuc2lnbmVkIGludCBzaXplKTsK