From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manasi Navare Subject: Re: [PATCH i-g-t v3] tools: Add intel_dp_compliance for DisplayPort 1.2 compliance automation Date: Wed, 18 Jan 2017 10:28:45 -0800 Message-ID: <20170118182844.GE671@intel.com> References: <1482478887-26387-1-git-send-email-dhinakaran.pandiyan@intel.com> <20170111134412.3ibmuujldnv7tlio@platvala-desk.ger.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 451B66E8EC for ; Wed, 18 Jan 2017 18:24:29 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20170111134412.3ibmuujldnv7tlio@platvala-desk.ger.corp.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Petri Latvala Cc: "intel-gfx@lists.freedesktop.org" , "Pandiyan, Dhinakaran" , Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBKYW4gMTEsIDIwMTcgYXQgMDM6NDQ6MTJQTSArMDIwMCwgUGV0cmkgTGF0dmFsYSB3 cm90ZToKPiAKPiBIaQo+IAo+IFRoZSBjb3B5cmlnaHQgc3RhdGVtZW50cyBzdGlsbCBuZWVkIHRo ZSB5ZWFyCj4gY29ycmVjdGVkLiBpbnRlbF9kcF9jb21wbGlhbmNlIG5lZWRzIHRvIGJlIGFkZGVk IHRvIHRvb2xzLy5naXRpZ25vcmUKPiAKPiBTb21lIG5ldyBjb21tZW50cyBhbHNvOgo+IAo+IC0g V2h5IGRvIHNvbWUgb2YgdGhlIHByaW50cyBoYXZlIFxyXG4/CgpUaGUgXHJcbiBpcyByZXF1aXJl ZCBpbiBzb21lIG9mIHRoZSBwcmludHMgc28gdGhhdCB0aGUgb3V0cHV0IHByaW50cyBhcmUgcHJv cGVybHkgYWxpZ25lZC4KCgo+IC0gQnVpbGRpbmcgaW50ZWxfZHBfY29tcGxpYW5jZSBzaG91bGQg YWN0dWFsbHkgYmUgbWFkZSBjb25kaXRpb25hbCB1cG9uIEhBVkVfVURFVgo+CkkgZGlkbnQgZmlu ZCBhbnkgY29uZGl0aW9uYWwgSEFWRV9VREVWIGJ1aWxkcyBpbiB0aGUgZXhpc3RpbmcgTWFrZWZp bGUuCkhvdyBjYW4gSSBidWlsZCBpbnRlbC1kcF9jb21wbGlhbmNlIGNvbmRpdGlvbmFsbHkgb24g SEFWRV9VREVWPwpDb3VsZCB5b3UgcG9pbnQgbWUgdG8gc29tZSBleGFtcGxlIGluIHRoZSBleGlz dGluZyBNYWtlZmlsZT8KCk1hbmFzaSAKPiAKPiAKPiAtLQo+IFBldHJpIExhdHZhbGEKPiAKPiAK PiAKPiBPbiBGcmksIERlYyAyMywgMjAxNiBhdCAwOTo0Nzo0OEFNICswMjAwLCBQYW5kaXlhbiwg RGhpbmFrYXJhbiB3cm90ZToKPiA+IEkgaGF2ZSBhZGRyZXNzZWQgcmV2aWV3IGNvbW1lbnRzIHRo YXQgUGV0cmksIEppbSBoYWQgZm9yIHRoaXMgcGF0Y2ggYWxvbmcgd2l0aCBtYWtpbmcgc29tZSBz bWFsbCBjaGFuZ2VzIGZvciBlcnJvciBoYW5kbGluZy4gVGhlIGZ1bmN0aW9uYWxpdHkgaXMgbW9z dGx5IHVuY2hhbmdlZCBmcm9tIE1hbmFzaSdzIHZlcnNpb24uCj4gPiAKPiA+IC1ESwo+ID4gX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4gRnJvbTogUGFuZGl5YW4s IERoaW5ha2FyYW4KPiA+IFNlbnQ6IFRodXJzZGF5LCBEZWNlbWJlciAyMiwgMjAxNiAxMTo0MSBQ TQo+ID4gVG86IGludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiA+IENjOiBqaW0uYnJp ZGVAbGludXguaW50ZWwuY29tOyBOYXZhcmUsIE1hbmFzaSBEOyBMYXR2YWxhLCBQZXRyaTsgVmxh ZCwgTWFyaXVzIEM7IERhbmllbCBWZXR0ZXI7IFBhbmRpeWFuLCBEaGluYWthcmFuCj4gPiBTdWJq ZWN0OiBbUEFUQ0ggaS1nLXQgdjNdIHRvb2xzOiBBZGQgaW50ZWxfZHBfY29tcGxpYW5jZSBmb3Ig RGlzcGxheVBvcnQgMS4yIGNvbXBsaWFuY2UgYXV0b21hdGlvbgo+ID4gCj4gPiBGcm9tOiAiTmF2 YXJlLCBNYW5hc2kgRCIgPG1hbmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+Cj4gPiAKPiA+IFRoaXMg aXMgdGhlIHVzZXJzcGFjZSBjb21wb25lbnQgb2YgdGhlIERpc3BsYXlwb3J0IENvbXBsaWFuY2UK PiA+IHRlc3Rpbmcgc29mdHdhcmUgcmVxdWlyZWQgZm9yIGNvbXBsaWFuY2UgdGVzdGluZyBvZiB0 aGUgSTkxNQo+ID4gRGlzcGxheSBQb3J0IGRyaXZlci4gVGhpcyBtdXN0IGJlIHJ1bm5pbmcgaW4g b3JkZXIgdG8gc3VjY2Vzc2Z1bGx5Cj4gPiBjb21wbGV0ZSBEaXNwbGF5IFBvcnQgY29tcGxpYW5j ZSB0ZXN0aW5nLiBUaGlzIGFwcCBhbmQgdGhlIGtlcm5lbAo+ID4gY29kZSB0aGF0IGFjY29tcGFu aWVzIGl0IGhhcyBiZWVuIHdyaXR0ZW4gdG8gc2F0aWZ5IHRoZSByZXF1aXJlbWVudHMKPiA+IG9m IHRoZSBEaXNwbGF5cG9ydCBMaW5rIENUUyAxLjIgcmV2MS4xIHNwZWNpZmljYXRpb24gZnJvbSBW RVNBLgo+ID4gTm90ZSB0aGF0IHRoaXMgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcG9ydCBlRFAg Y29tcGxpYW5jZSB0ZXN0aW5nLgo+ID4gVGhpcyB1dGlsaXR5IGhhcyBhbiBhdXRvbWF0aW9uIHN1 cHBvcnQgZm9yIHRoZSBMaW5rIHRyYWluaW5nIHRlc3RzCj4gPiAoNC4zLjEuMS4gLSA0LjMuMi4z KSwgRURJRCB0ZXN0cyAoNC4yLjIuMwo+ID4gLSA0LjIuMi42KSBhbmQgVmlkZW8gUGF0dGVybiBn ZW5lcmF0aW9uIHRlc3RzICg0LjMuMy4xKSBmcm9tIENUUwo+ID4gc3BlY2lmaWNhdGlvbiAxLjIg UmV2IDEuMS4KPiA+IAo+ID4gVGhpcyB0b29sIGhhcyB0aGUgc3VwcG9ydCBmb3IgcmVzcG9uZGlu ZyB0byB0aGUgaG90cGx1ZyB1ZXZlbnRzCj4gPiBzZW50IGJ5IGNvbXBsaWFuY2UgdGVzdHRpbmcg dW5pdCBhZnRlciBlYWNoIHRlc3QuCj4gPiAKPiA+IFRoZSBMaW51eCBEVVQgcnVubmluZyB0aGlz IHV0aWxpdHkgbXVzdCBiZSBpbiB0ZXh0IChjb25zb2xlKSBtb2RlCj4gPiBhbmQgY2Fubm90IGhh dmUgYW55IG90aGVyIGRpc3BsYXkgbWFuYWdlciBydW5uaW5nLiBTaW5jZSB0aGlzIHVzZXMKPiA+ IHN5c2ZzIG5vZGVzIGZvciBrZXJuZWwgaW50ZXJhY3Rpb24sIHRoaXMgdXRpbGl0eSBzaG91bGQg YmUgcnVuIGFzCj4gPiBSb290LiBPbmNlIHRoaXMgdXNlciBhcHBsaWNhdGlvbiBpcyB1cCBhbmQg cnVubmluZywgd2FpdGluZyBmb3IKPiA+IHRlc3QgcmVxdWVzdHMsIHRoZSB0ZXN0IGFwcGxpYW5j ZSBzb2Z0d2FyZSBvbiB0aGUgd2luZG93cyBob3N0Cj4gPiBjYW4gbm93IGJlIHVzZWQgdG8gZXhl Y3V0ZSB0aGUgY29tcGxpYW5jZSB0ZXN0cy4KPiA+IAo+ID4gVGhpcyBhcHAgaXMgYmFzZWQgb24g c29tZSBwcmlvciB3b3JrIGRvbmUgaW4gQXByaWwgMjAxNSAoYnkKPiA+IFRvZGQgUHJldml0ZSA8 dHByZXZpdGVAZ21haWwuY29tPikKPiA+IAo+ID4gdjI6Cj4gPiAqIEFkZCBtb2RlIHVuc2V0IG9u IGhvdHBsdWcgdWV2ZW50IG9uIGRpc2Nvbm5lY3QgKE1hbmFzaSBOYXZhcmUpCj4gPiAKPiA+IHYz Ogo+ID4gTWFkZSBjYXBpdGFsaXphdGlvbiBjb25zaXN0ZW50Cj4gPiBSZWR1Y2VkIGxpbmUgbGVu Z3Rocwo+ID4gQWRkZWQgcmV0dXJuIHZhbHVlIGNoZWNrcwo+ID4gQ2hhbmdlZCBob3cgR0xpYiBp cyBsaW5rZWQKPiA+IEZpeGVkIGJ1aWxkIHdhcm5pbmdzCj4gPiAKPiA+IENjOiBQZXRyaSBMYXR2 YWxhIDxwZXRyaS5sYXR2YWxhQGludGVsLmNvbT4KPiA+IENjOiBNYXJpdXMgVmxhZCA8bWFyaXVz LmMudmxhZEBpbnRlbC5jb20+Cj4gPiBDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBm ZndsbC5jaD4KPiA+IFNpZ25lZC1vZmYtYnk6IE1hbmFzaSBOYXZhcmUgPG1hbmFzaS5kLm5hdmFy ZUBpbnRlbC5jb20+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBEaGluYWthcmFuIFBhbmRpeWFuIDxkaGlu YWthcmFuLnBhbmRpeWFuQGludGVsLmNvbT4KPiA+IC0tLQo+ID4gIHRvb2xzL01ha2VmaWxlLmFt ICAgICAgICAgICAgICAgICAgIHwgICAgMSArCj4gPiAgdG9vbHMvTWFrZWZpbGUuc291cmNlcyAg ICAgICAgICAgICAgfCAgICA3ICsKPiA+ICB0b29scy9pbnRlbF9kcF9jb21wbGlhbmNlLmMgICAg ICAgICB8IDExMDQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ICB0b29s cy9pbnRlbF9kcF9jb21wbGlhbmNlLmggICAgICAgICB8ICAgMzUgKysKPiA+ICB0b29scy9pbnRl bF9kcF9jb21wbGlhbmNlX2hvdHBsdWcuYyB8ICAxMjMgKysrKwo+ID4gIDUgZmlsZXMgY2hhbmdl ZCwgMTI3MCBpbnNlcnRpb25zKCspCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2ludGVs X2RwX2NvbXBsaWFuY2UuYwo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9pbnRlbF9kcF9j b21wbGlhbmNlLmgKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvaW50ZWxfZHBfY29tcGxp YW5jZV9ob3RwbHVnLmMKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL3Rvb2xzL01ha2VmaWxlLmFtIGIv dG9vbHMvTWFrZWZpbGUuYW0KPiA+IGluZGV4IDE4Zjg2ZjYuLmJkOGY1MTIgMTAwNjQ0Cj4gPiAt LS0gYS90b29scy9NYWtlZmlsZS5hbQo+ID4gKysrIGIvdG9vbHMvTWFrZWZpbGUuYW0KPiA+IEBA IC0xNiw2ICsxNiw3IEBAIEFNX0NGTEFHUyA9ICQoREVCVUdfQ0ZMQUdTKSAkKERSTV9DRkxBR1Mp ICQoUENJQUNDRVNTX0NGTEFHUykgJChDV0FSTkZMQUdTKSBcCj4gPiAgTERBREQgPSAkKHRvcF9i dWlsZGRpcikvbGliL2xpYmludGVsX3Rvb2xzLmxhCj4gPiAgQU1fTERGTEFHUyA9IC1XbCwtLWFz LW5lZWRlZAo+ID4gCj4gPiAraW50ZWxfZHBfY29tcGxpYW5jZV9MREFERCA9ICQodG9wX2J1aWxk ZGlyKS9saWIvbGliaW50ZWxfdG9vbHMubGEgJChHTElCX0xJQlMpCj4gPiAKPiA+ICAjIGF1YmR1 bXBlcgo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvdG9vbHMvTWFrZWZpbGUuc291cmNlcyBiL3Rvb2xz L01ha2VmaWxlLnNvdXJjZXMKPiA+IGluZGV4IGUyNDUxZWEuLmU4Y2U4OTEgMTAwNjQ0Cj4gPiAt LS0gYS90b29scy9NYWtlZmlsZS5zb3VyY2VzCj4gPiArKysgYi90b29scy9NYWtlZmlsZS5zb3Vy Y2VzCj4gPiBAQCAtMTMsNiArMTMsNyBAQCB0b29sc19wcm9nX2xpc3RzID0gICAgICAgICAgICBc Cj4gPiAgICAgICAgIGludGVsX2Jpb3NfcmVhZGVyICAgICAgIFwKPiA+ICAgICAgICAgaW50ZWxf ZGlzcGxheV9jcmMgICAgICAgXAo+ID4gICAgICAgICBpbnRlbF9kaXNwbGF5X3BvbGxlciAgICBc Cj4gPiArICAgICAgIGludGVsX2RwX2NvbXBsaWFuY2UgICAgIFwKPiA+ICAgICAgICAgaW50ZWxf Zm9yY2V3YWtlZCAgICAgICAgXAo+ID4gICAgICAgICBpbnRlbF9ncHVfZnJlcXVlbmN5ICAgICBc Cj4gPiAgICAgICAgIGludGVsX2Zpcm13YXJlX2RlY29kZSAgIFwKPiA+IEBAIC01NiwzICs1Nyw5 IEBAIGludGVsX2wzX3Bhcml0eV9TT1VSQ0VTID0gICAgIFwKPiA+ICAgICAgICAgaW50ZWxfbDNf cGFyaXR5LmggICAgICAgXAo+ID4gICAgICAgICBpbnRlbF9sM191ZGV2X2xpc3RlbmVyLmMKPiA+ IAo+ID4gK2ludGVsX2RwX2NvbXBsaWFuY2VfU09VUkNFUyA9IFwKPiA+ICsgICAgICAgIGludGVs X2RwX2NvbXBsaWFuY2UuYyBcCj4gPiArICAgICAgICBpbnRlbF9kcF9jb21wbGlhbmNlLmggXAo+ ID4gKyAgICAgICAgaW50ZWxfZHBfY29tcGxpYW5jZV9ob3RwbHVnLmMgXAo+ID4gKyAgICAgICAg JChOVUxMKQo+ID4gKwo+ID4gZGlmZiAtLWdpdCBhL3Rvb2xzL2ludGVsX2RwX2NvbXBsaWFuY2Uu YyBiL3Rvb2xzL2ludGVsX2RwX2NvbXBsaWFuY2UuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiA+IGluZGV4IDAwMDAwMDAuLmRmMWNhMTAKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL3Rv b2xzL2ludGVsX2RwX2NvbXBsaWFuY2UuYwo+ID4gQEAgLTAsMCArMSwxMTA0IEBACj4gPiArLyoK PiA+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgo+ID4gKyAqCj4gPiAr ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEKPiA+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ID4gKyAqIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 IGxpbWl0YXRpb24KPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiA+ICsgKiBhbmQvb3Igc2VsbCBj b3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUK PiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgo+ID4gKyAqCj4gPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ID4g KyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUKPiA+ICsgKiBTb2Z0d2FyZS4KPiA+ICsgKgo+ID4gKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCj4gPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gPiArICogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5U IFNIQUxMCj4gPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ ID4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiA+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gPiAr ICoKPiA+ICsgKiBEaXNwbGF5cG9ydCBDb21wbGlhbmNlIFRlc3RpbmcgQXBwbGljYXRpb24KPiA+ ICsgKgo+ID4gKyAqIFRoaXMgaXMgdGhlIHVzZXJzcGFjZSBjb21wb25lbnQgb2YgdGhlIERpc3Bs YXlwb3J0IENvbXBsaWFuY2UgdGVzdGluZwo+ID4gKyAqIHNvZnR3YXJlIHJlcXVpcmVkIGZvciBj b21wbGlhbmNlIHRlc3Rpbmcgb2YgdGhlIEk5MTUgRGlzcGxheSBQb3J0IGRyaXZlci4KPiA+ICsg KiBUaGlzIG11c3QgYmUgcnVubmluZyBpbiBvcmRlciB0byBzdWNjZXNzZnVsbHkgY29tcGxldGUg RGlzcGxheSBQb3J0Cj4gPiArICogY29tcGxpYW5jZSB0ZXN0aW5nLiBUaGlzIGFwcCBhbmQgdGhl IGtlcm5lbCBjb2RlIHRoYXQgYWNjb21wYW5pZXMgaXQgaGFzIGJlZW4KPiA+ICsgKiB3cml0dGVu IHRvIHNhdGlmeSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBEaXNwbGF5cG9ydCBMaW5rIENUUyAx LjIgcmV2MS4xCj4gPiArICogc3BlY2lmaWNhdGlvbiBmcm9tIFZFU0EuIE5vdGUgdGhhdCB0aGlz IGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBvcnQgZURQCj4gPiArICogY29tcGxpYW5jZSB0ZXN0 aW5nLgo+ID4gKyAqCj4gPiArICogQ29tcGxpYW5jZSBUZXN0aW5nIHJlcXVpcmVzIHNldmVyYWwg Y29tcG9uZW50czoKPiA+ICsgKiAgIC0gQSBrZXJuZWwgYnVpbGQgdGhhdCBjb250YWlucyB0aGUg cGF0Y2ggc2V0IGZvciBEUCBjb21wbGlhbmNlIHN1cHBvcnQKPiA+ICsgKiAgIC0gQSBEaXNwbGF5 cG9ydCBDb21wbGlhbmNlIFRlc3RpbmcgYXBwbGlhbmNlIHN1Y2ggYXMgVW5pZ3JhZi1EUFIxMjAK PiA+ICsgKiAgIC0gVGhpcyB1c2VyIGFwcGxpY2F0aW9uCj4gPiArICogICAtIEEgd2luZG93cyBo b3N0IG1hY2hpbmUgdG8gcnVuIHRoZSBEUFIgdGVzdCBzb2Z0d2FyZQo+ID4gKyAqICAgLSBSb290 IGFjY2VzcyBvbiB0aGUgRFVUIGR1ZSB0byB0aGUgdXNlIG9mIHN5c2ZzIHV0aWxpdHkKPiA+ICsg Kgo+ID4gKyAqIFRlc3QgU2V0dXA6Cj4gPiArICogSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQg dGhhdCB0aGUgd2luZG93cyBob3N0LCB0ZXN0IGFwcGxpYW5jZSBhbmQgRFVUCj4gPiArICogYmUg ZnJlc2hseSByZXN0YXJ0ZWQgYmVmb3JlIGFueSB0ZXN0aW5nIGJlZ2lucyB0byBlbnN1cmUgdGhh dCBhbnkgcHJldmlvdXMKPiA+ICsgKiBjb25maWd1cmF0aW9ucyBhbmQgc2V0dGluZ3Mgd2lsbCBu b3QgaW50ZXJmZXJlIHdpdGggdGVzdCBwcm9jZXNzLiBSZWZlciB0bwo+ID4gKyAqIHRoZSB0ZXN0 IGFwcGxpYW5jZSBkb2N1bWVudGF0aW9uIGZvciBzZXR1cCwgc29mdHdhcmUgaW5zdGFsbGF0aW9u IGFuZAo+ID4gKyAqIG9wZXJhdGlvbiBzcGVjaWZpYyB0byB0aGF0IGRldmljZS4KPiA+ICsgKgo+ ID4gKyAqIFRoZSBMaW51eCBEVVQgbXVzdCBiZSBpbiB0ZXh0IChjb25zb2xlKSBtb2RlIGFuZCBj YW5ub3QgaGF2ZSBhbnkgb3RoZXIKPiA+ICsgKiBkaXNwbGF5IG1hbmFnZXIgcnVubmluZy4gWW91 IG11c3QgYmUgbG9nZ2VkIGluIGFzIHJvb3QgdG8gcnVuIHRoaXMgdXNlciBhcHAuCj4gPiArICog T25jZSB0aGUgdXNlciBhcHBsaWNhdGlvbiBpcyB1cCBhbmQgcnVubmluZywgd2FpdGluZyBmb3Ig dGVzdCByZXF1ZXN0cywgdGhlCj4gPiArICogc29mdHdhcmUgb24gdGhlIHdpbmRvd3MgaG9zdCBj YW4gbm93IGJlIHVzZWQgdG8gZXhlY3V0ZSB0aGUgY29tcGxpYW5jZSB0ZXN0cy4KPiA+ICsgKgo+ ID4gKyAqIFRoaXMgdXNlcnNwYWNlIGFwcGxpY2F0aW9uIHN1cHBvcnRzIGZvbGxvd2luZyB0ZXN0 cyBmcm9tIHRoZSBEUCBDVFMgU3BlYwo+ID4gKyAqIFJldiAxLjE6Cj4gPiArICogICAtIExpbmsg VHJhaW5pbmcgVGVzdHM6IFN1cHBvcnRzIHRlc3RzIDQuMy4xLjEgdG8gNC4zLjIuMwo+ID4gKyAq ICAgLSBFRElEIFRlc3RzOiBTdXBwb3J0cyBFRElEIHJlYWQgKDQuMi4yLjMpLEVESUQgUmVhZCBm YWlsdXJlIGFuZCBjb3JydXB0aW9uCj4gPiArICogICAgIGRldGVjdGlvbiB0ZXN0cyAoNC4yLjIu NCwgNC4yLjIuNSwgNC4yLjIuNikKPiA+ICsgKiAgIC0gVmlkZW8gUGF0dGVybiBnZW5lcmF0aW9u IHRlc3RzOiBUaGlzIHN1cHBvcnRzIG9ubHkgdGhlIDI0IGFuZCAxOGJwcCBjb2xvcgo+ID4gKyAq ICAgICByYW1wIHRlc3QgcGF0dGVybiAoNC4zLjMuMSkuCj4gPiArICoKPiA+ICsgKiBDb25uZWN0 aW9ucyAocmVxdWlyZWQpOgo+ID4gKyAqICAgLSBUZXN0IEFwcGxpYW5jZSBjb25uZWN0ZWQgdG8g dGhlIGV4dGVybmFsIERpc3BsYXlwb3J0IGNvbm5lY3RvciBvbiB0aGUgRFVUCj4gPiArICogICAt IFRlc3QgQXBwbGlhbmNlIE1vbml0b3IgT3V0IGNvbm5lY3RlZCB0byBEaXNwbGF5cG9ydCBjb25u ZWN0b3Igb24gdGhlCj4gPiArICogbW9uaXRvcgo+ID4gKyAqICAgLSBUZXN0IGFwcGxpYW5jZSBj b25uZWN0ZWQgdG8gdGhlIFdpbmRvd3MgSG9zdCB2aWEgVVNCCj4gPiArICoKPiA+ICsgKiBEZWJ1 Z2ZzIEZpbGVzOgo+ID4gKyAqIFRoZSBmaWxlIHJvb3QgZm9yIGFsbCAgdGhlIGRlYnVnZnMgZmls ZToKPiA+ICsgKiAvc3lzL2tlcm5lbC9kZWJ1Zy9kcmkvMC8KPiA+ICsgKgo+ID4gKyAqIFRoZSBz cGVjaWZpYyBmaWxlcyBhcmUgYXMgZm9sbG93czoKPiA+ICsgKgo+ID4gKyAqIGk5MTVfZHBfdGVz dF9hY3RpdmUKPiA+ICsgKiBBIHNpbXBsZSBmbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgb3Ig bm90IGNvbXBsaWFuY2UgdGVzdGluZyBpcyBjdXJyZW50bHkKPiA+ICsgKiBhY3RpdmUgaW4gdGhl IGtlcm5lbC4gVGhpcyBmbGFnIGlzIHBvbGxlZCBieSB1c2Vyc3BhY2UgYW5kIG9uY2Ugc2V0LCBp bnZva2VzCj4gPiArICogdGhlIHRlc3QgaGFuZGxlciBpbiB0aGUgdXNlciBhcHAuIFRoaXMgZmxh ZyBpcyBzZXQgYnkgdGhlIHRlc3QgaGFuZGxlciBpbiB0aGUKPiA+ICsgKiBrZXJuZWwgYWZ0ZXIg cmVhZGluZyB0aGUgcmVnaXN0ZXJzIHJlcXVlc3RlZCBieSB0aGUgdGVzdCBhcHBsaWFuY2UuCj4g PiArICoKPiA+ICsgKiBpOTE1X2RwX3Rlc3RfZGF0YQo+ID4gKyAqIFRlc3QgZGF0YSBpcyB1c2Vk IGJ5IHRoZSBrZXJuZWwgdG8gcGFzcyBwYXJhbWV0ZXJzIHRvIHRoZSB1c2VyIGFwcC4gRWc6IElu Cj4gPiArICogY2FzZSBvZiBFRElEIHRlc3RzLCB0aGUgZGF0YSB0aGF0IGlzIGRlbGl2ZXJlZCB0 byB0aGUgdXNlcnNwYWNlIGlzIHRoZSB2aWRlbwo+ID4gKyAqIG1vZGUgdG8gYmUgc2V0IGZvciB0 aGUgdGVzdC4KPiA+ICsgKiBJbiBjYXNlIG9mIHZpZGVvIHBhdHRlcm4gdGVzdCwgdGhlIGRhdGEg dGhhdCBpcyBkZWxpdmVyZWQgdG8gdGhlIHVzZXJzcGFjZSBpcwo+ID4gKyAqIHRoZSB3aWR0aCBh bmQgaGVpZ2h0IG9mIHRoZSB0ZXN0IHBhdHRlcm4gYW5kIHRoZSBiaXRzIHBlciBjb2xvciB2YWx1 ZS4KPiA+ICsgKgo+ID4gKyAqIGk5MTVfZHBfdGVzdF90eXBlCj4gPiArICogVGhlIHRlc3QgdHlw ZSB2YXJpYWJsZSBpbnN0cnVjdHMgdGhlIHVzZXIgYXBwIGFzIHRvIHdoYXQgdGhlIHJlcXVlc3Rl ZCB0ZXN0Cj4gPiArICogd2FzIGZyb20gdGhlIHNpbmsgZGV2aWNlLiBUaGVzZSB2YWx1ZXMgZGVm aW5lZCBhdCB0aGUgdG9wIG9mIHRoZSBhcHBsaWNhdGlvbidzCj4gPiArICogbWFpbiBpbXBsZW1l bnRhdGlvbiBmaWxlIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIHZhbHVlcyBkZWZpbmVk IGluIHRoZQo+ID4gKyAqIGtlcm5lbCdzIGRybV9kcF9oZWxwZXIuaCBmaWxlLgo+ID4gKyAqIFRo aXMgYXBwIGlzIGJhc2VkIG9uIHNvbWUgcHJpb3Igd29yayBzdWJtaXR0ZWQgaW4gQXByaWwgMjAx NSBieSBUb2RkIFByZXZpdGUKPiA+ICsgKiAoPHRwcmV2aXRlQGdtYWlsLmNvbT4pCj4gPiArICoK PiA+ICsgKgo+ID4gKyAqIFRoaXMgdG9vbCBjYW4gYmUgcnVuIGFzOgo+ID4gKyAqIC4vaW50ZWxf ZHBfY29tcGxpYW5jZSAgSXQgd2lsbCB3YWl0IHRpbGwgeW91IHN0YXJ0IGNvbXBsaWFuY2Ugc3Vp dGUgZnJvbQo+ID4gKyAqIERQUiAxMjAuCj4gPiArICogLi9pbnRlbF9kcF9jb21wbGlhbmNlIC1o ICBUaGlzIHdpbGwgb3BlbiB0aGUgaGVscAo+ID4gKyAqIC4vaW50ZWxfZHBfY29tcGxpYW5jZSAt aSAgVGhpcyB3aWxsIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudAo+ID4gKyAqIGNv bm5lY3RvcnMvQ1JUQ3MuIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLgo+ ID4gKyAqCj4gPiArICogQXV0aG9yczoKPiA+ICsgKiAgICBNYW5hc2kgTmF2YXJlIDxtYW5hc2ku ZC5uYXZhcmVAaW50ZWwuY29tPgo+ID4gKyAqCj4gPiArICogRWxlbWVudHMgb2YgdGhlIG1vZGVz ZXQgY29kZSBhZGFwdGVkIGZyb20gRGF2aWQgSGVycm1hbm4ncwo+ID4gKyAqIERSTSBtb2Rlc2V0 IGV4YW1wbGUKPiA+ICsgKgo+ID4gKyAqLwo+ID4gKyNpbmNsdWRlICJpZ3QuaCIKPiA+ICsjaW5j bHVkZSA8ZXJybm8uaD4KPiA+ICsjaW5jbHVkZSA8Z2V0b3B0Lmg+Cj4gPiArI2luY2x1ZGUgPG1h dGguaD4KPiA+ICsjaW5jbHVkZSA8c3RkaW50Lmg+Cj4gPiArI2luY2x1ZGUgPHN0ZGJvb2wuaD4K PiA+ICsjaW5jbHVkZSA8c3RyaW5ncy5oPgo+ID4gKyNpbmNsdWRlIDx1bmlzdGQuaD4KPiA+ICsj aW5jbHVkZSA8dGVybWlvcy5oPgo+ID4gKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgo+ID4gKyNpbmNs dWRlIDxzeXMvdGltZS5oPgo+ID4gKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KPiA+ICsjaW5jbHVk ZSA8c3lzL3R5cGVzLmg+Cj4gPiArI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cj4gPiArI2luY2x1ZGUg PHN5cy9zZWxlY3QuaD4KPiA+ICsjaW5jbHVkZSA8YXNzZXJ0Lmg+Cj4gPiArI2luY2x1ZGUgPHNp Z25hbC5oPgo+ID4gKyNpbmNsdWRlIDxmY250bC5oPgo+ID4gKyNpbmNsdWRlIDx0aW1lLmg+Cj4g PiArCj4gPiArI2luY2x1ZGUgImludGVsX2RwX2NvbXBsaWFuY2UuaCIKPiA+ICsKPiA+ICsjaW5j bHVkZSA8c3RkbGliLmg+Cj4gPiArI2luY2x1ZGUgPHNpZ25hbC5oPgo+ID4gKwo+ID4gKy8qIFVz ZXIgSW5wdXQgZGVmaW5pdGlvbnMgKi8KPiA+ICsjZGVmaW5lIEhFTFBfREVTQ1JJUFRJT04gMQo+ ID4gKwo+ID4gKy8qIERlYnVnZnMgZmlsZSBkZWZpbml0aW9ucyAqLwo+ID4gKyNkZWZpbmUgSU5U RUxfRFBfVEVTVF9UWVBFX0ZJTEUgICAgICAgICAgICAgICAgImk5MTVfZHBfdGVzdF90eXBlIgo+ ID4gKyNkZWZpbmUgSU5URUxfRFBfVEVTVF9BQ1RJVkVfRklMRSAgICAgICJpOTE1X2RwX3Rlc3Rf YWN0aXZlIgo+ID4gKyNkZWZpbmUgSU5URUxfRFBfVEVTVF9EQVRBX0ZJTEUgICAgICAgICAgICAg ICAgImk5MTVfZHBfdGVzdF9kYXRhIgo+ID4gKwo+ID4gKy8qIERSTSBkZWZpbml0aW9ucyAtIG11 c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIERSTSBoZWFkZXIgKi8KPiA+ICsjZGVmaW5lIERQ X1RFU1RfTElOS19UUkFJTklORyAgICAgICAgICAoMSA8PCAwKQo+ID4gKyNkZWZpbmUgRFBfVEVT VF9MSU5LX1ZJREVPX1BBVFRFUk4gICAgICgxIDw8IDEpCj4gPiArI2RlZmluZSBEUF9URVNUX0xJ TktfRURJRF9SRUFEICAgICAgICAgKDEgPDwgMikKPiA+ICsjZGVmaW5lIERQX1RFU1RfTElOS19Q SFlfVEVTVF9QQVRURVJOICAoMSA8PCAzKSAvKiBEUENEID49IDEuMSAqLwo+ID4gKwo+ID4gKyNk ZWZpbmUgRFBfQ09NUExJQU5DRV9URVNUX1RZUEVfTUFTSyAgIChEUF9URVNUX0xJTktfVFJBSU5J TkcgICAgICB8ICAgXAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEUF9URVNUX0xJTktfVklERU9fUEFUVEVSTiB8ICAgXAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBEUF9URVNUX0xJTktfRURJRF9SRUFEICAgICB8ICAgXAo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUF9URVNUX0xJTktf UEhZX1RFU1RfUEFUVEVSTikKPiA+ICsKPiA+ICsvKiBOT1RFOiBUaGVzZSBtdXN0IGJlIGtlcHQg aW4gc3luYyB3aXRoIHRoZSBkZWZpbml0aW9ucyBpbiBpbnRlbF9kcC5jICovCj4gPiArI2RlZmlu ZSBJTlRFTF9EUF9FRElEX1NISUZUX01BU0sgICAgICAgMAo+ID4gKyNkZWZpbmUgSU5URUxfRFBf RURJRF9PSyAgICAgICAgICAgICAgICgwIDw8IElOVEVMX0RQX0VESURfU0hJRlRfTUFTSykKPiA+ ICsjZGVmaW5lIElOVEVMX0RQX0VESURfQ09SUlVQVCAgICAgICAgICAoMSA8PCBJTlRFTF9EUF9F RElEX1NISUZUX01BU0spCj4gPiArI2RlZmluZSBJTlRFTF9EUF9SRVNPTFVUSU9OX1NISUZUX01B U0sgMAo+ID4gKyNkZWZpbmUgSU5URUxfRFBfUkVTT0xVVElPTl9QUkVGRVJSRUQgICgxIDw8IElO VEVMX0RQX1JFU09MVVRJT05fU0hJRlRfTUFTSykKPiA+ICsjZGVmaW5lIElOVEVMX0RQX1JFU09M VVRJT05fU1RBTkRBUkQgICAoMiA8PCBJTlRFTF9EUF9SRVNPTFVUSU9OX1NISUZUX01BU0spCj4g PiArI2RlZmluZSBJTlRFTF9EUF9SRVNPTFVUSU9OX0ZBSUxTQUZFICAgKDMgPDwgSU5URUxfRFBf UkVTT0xVVElPTl9TSElGVF9NQVNLKQo+ID4gKyNkZWZpbmUgRFBfQ09NUExJQU5DRV9WSURFT19N T0RFX01BU0sgIChJTlRFTF9EUF9SRVNPTFVUSU9OX1BSRUZFUlJFRCAgfFwKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5URUxfRFBfUkVTT0xVVElPTl9TVEFO REFSRCAgIHxcCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElO VEVMX0RQX1JFU09MVVRJT05fRkFJTFNBRkUpCj4gPiArCj4gPiArLyogR2xvYmFsIGZpbGUgcG9p bnRlcnMgZm9yIHRoZSBzeXNmcyBmaWxlcyAqLwo+ID4gK0ZJTEUgKnRlc3RfYWN0aXZlX2ZwLCAq dGVzdF9kYXRhX2ZwLCAqdGVzdF90eXBlX2ZwOwo+ID4gKwo+ID4gK2Jvb2wgdmlkZW9fcGF0dGVy bl9mbGFnOwo+ID4gKwo+ID4gKy8qIFZpZGVvIHBhdHRlcm4gdGVzdCBnbG9iYWxzICovCj4gPiAr dWludDE2X3QgaGRpc3BsYXk7Cj4gPiArdWludDE2X3QgdmRpc3BsYXk7Cj4gPiArdWludDhfdCBi aXRkZXB0aDsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IHRpb19mZDsKPiA+ICtzdHJ1Y3QgdGVybWlv cyBzYXZlZF90aW87Cj4gPiArCj4gPiArZHJtTW9kZVJlcyAqcmVzb3VyY2VzOwo+ID4gK2ludCBk cm1fZmQsIG1vZGVzOwo+ID4gK3VpbnQ2NF90IHRpbGluZyA9IExPQ0FMX0RSTV9GT1JNQVRfTU9E X05PTkU7Cj4gPiArdWludDMyX3QgZGVwdGggPSAyNCwgc3RyaWRlLCBicHA7Cj4gPiAraW50IHNw ZWNpZmllZF9tb2RlX251bSA9IC0xLCBzcGVjaWZpZWRfZGlzcF9pZCA9IC0xOwo+ID4gK2ludCB3 aWR0aCwgaGVpZ2h0Owo+ID4gK3VpbnQzMl90IHRlc3RfY3J0YzsKPiA+ICt1aW50MzJfdCB0ZXN0 X2Nvbm5lY3Rvcl9pZDsKPiA+ICtlbnVtIHsKPiA+ICsgICAgICAgSU5URUxfTU9ERV9JTlZBTElE ID0gLTEsCj4gPiArICAgICAgIElOVEVMX01PREVfTk9ORSA9IDAsCj4gPiArICAgICAgIElOVEVM X01PREVfUFJFRkVSUkVELAo+ID4gKyAgICAgICBJTlRFTF9NT0RFX1NUQU5EQVJELAo+ID4gKyAg ICAgICBJTlRFTF9NT0RFX0ZBSUxTQUZFLAo+ID4gKyAgICAgICBJTlRFTF9NT0RFX1ZJREVPX1BB VFRFUk5fVEVTVAo+ID4gK30gaW50ZWxfZGlzcGxheV9tb2RlOwo+ID4gKwo+ID4gK3N0cnVjdCB0 ZXN0X3ZpZGVvX3BhdHRlcm4gewo+ID4gKyAgICAgICB1aW50MTZfdCBoZGlzcGxheTsKPiA+ICsg ICAgICAgdWludDE2X3QgdmRpc3BsYXk7Cj4gPiArICAgICAgIHVpbnQ4X3QgYml0ZGVwdGg7Cj4g PiArICAgICAgIHVpbnQzMl90IGZiOwo+ID4gKyAgICAgICB1aW50MzJfdCBzaXplOwo+ID4gKyAg ICAgICBzdHJ1Y3QgaWd0X2ZiIGZiX3BhdHRlcm47Cj4gPiArICAgICAgIGRybU1vZGVNb2RlSW5m byBtb2RlOwo+ID4gKyAgICAgICB1aW50MzJfdCAqcGl4bWFwOwo+ID4gK307Cj4gPiArCj4gPiAr c3RydWN0IGNvbm5lY3RvciB7Cj4gPiArICAgICAgIHVpbnQzMl90IGlkOwo+ID4gKyAgICAgICBp bnQgbW9kZV92YWxpZDsKPiA+ICsgICAgICAgZHJtTW9kZU1vZGVJbmZvIG1vZGUsIG1vZGVfc3Rh bmRhcmQsIG1vZGVfcHJlZmVycmVkLCBtb2RlX2ZhaWxzYWZlOwo+ID4gKyAgICAgICBkcm1Nb2Rl Q29ubmVjdG9yICpjb25uZWN0b3I7Cj4gPiArICAgICAgIGludCBjcnRjOwo+ID4gKyAgICAgICAv KiBTdGFuZGFyZCBhbmQgcHJlZmVycmVkIGZyYW1lIGJ1ZmZlciovCj4gPiArICAgICAgIHVpbnQz Ml90IGZiLCBmYl93aWR0aCwgZmJfaGVpZ2h0LCBmYl9zaXplOwo+ID4gKyAgICAgICB1aW50OF90 ICpwaXhtYXA7Cj4gPiArICAgICAgIHN0cnVjdCBpZ3RfZmIgZmJfdmlkZW9fcGF0dGVybjsKPiA+ ICsgICAgICAgLyogRmFpbHNhZmUgZnJhbWVidWZmZXIgLSBub3RlIHRoaXMgaXMgYSAxNi1iaXQg YnVmZmVyICovCj4gPiArICAgICAgIHVpbnQzMl90IGZhaWxzYWZlX2ZiLCBmYWlsc2FmZV93aWR0 aCwgZmFpbHNhZmVfaGVpZ2h0Owo+ID4gKyAgICAgICB1aW50MzJfdCBmYWlsc2FmZV9zaXplOwo+ ID4gKyAgICAgICB1aW50OF90ICpmYWlsc2FmZV9waXhtYXA7Cj4gPiArICAgICAgIHN0cnVjdCBp Z3RfZmIgZmJfZmFpbHNhZmVfcGF0dGVybjsKPiA+ICsgICAgICAgc3RydWN0IHRlc3RfdmlkZW9f cGF0dGVybiB0ZXN0X3BhdHRlcm47Cj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBjbGVh cl90ZXN0X2FjdGl2ZSh2b2lkKQo+ID4gK3sKPiA+ICsgICAgICAgcmV3aW5kKHRlc3RfYWN0aXZl X2ZwKTsKPiA+ICsgICAgICAgZnByaW50Zih0ZXN0X2FjdGl2ZV9mcCwgIiVkIiwgMCk7Cj4gPiAr ICAgICAgIGZmbHVzaCh0ZXN0X2FjdGl2ZV9mcCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2 b2lkIHNldHVwX2RlYnVnZnNfZmlsZXModm9pZCkKPiA+ICt7Cj4gPiArICAgICAgIHRlc3RfdHlw ZV9mcCA9IGlndF9kZWJ1Z2ZzX2ZvcGVuKElOVEVMX0RQX1RFU1RfVFlQRV9GSUxFLCAiciIpOwo+ ID4gKyAgICAgICBpZ3RfcmVxdWlyZSh0ZXN0X3R5cGVfZnApOwo+ID4gKwo+ID4gKyAgICAgICB0 ZXN0X2RhdGFfZnAgPSBpZ3RfZGVidWdmc19mb3BlbihJTlRFTF9EUF9URVNUX0RBVEFfRklMRSwg InIiKTsKPiA+ICsgICAgICAgaWd0X3JlcXVpcmUodGVzdF9kYXRhX2ZwKTsKPiA+ICsKPiA+ICsg ICAgICAgdGVzdF9hY3RpdmVfZnAgPSBpZ3RfZGVidWdmc19mb3BlbihJTlRFTF9EUF9URVNUX0FD VElWRV9GSUxFLCAidysiKTsKPiA+ICsgICAgICAgaWd0X3JlcXVpcmUodGVzdF9hY3RpdmVfZnAp Owo+ID4gKwo+ID4gKyAgICAgICAvKiBSZXNldCB0aGUgYWN0aXZlIGZsYWcgZm9yIHNhZmV0eSAq Lwo+ID4gKyAgICAgICBjbGVhcl90ZXN0X2FjdGl2ZSgpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgdW5zaWduZWQgbG9uZyBnZXRfdGVzdF90eXBlKHZvaWQpCj4gPiArewo+ID4gKyAgICAgICB1 bnNpZ25lZCBsb25nIHRlc3RfdHlwZTsKPiA+ICsgICAgICAgaW50IHJldDsKPiA+ICsKPiA+ICsg ICAgICAgaWYgKCF0ZXN0X3R5cGVfZnApCj4gPiArICAgICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsICJJbnZhbGlkIHRlc3RfdHlwZSBmaWxlXHJcbiIpOwo+ID4gKyAgICAgICByZXdpbmQodGVz dF90eXBlX2ZwKTsKPiA+ICsgICAgICAgcmV0ID0gZnNjYW5mKHRlc3RfdHlwZV9mcCwgIiUwMmx4 IiwgJnRlc3RfdHlwZSk7Cj4gPiArICAgICAgIGlmIChyZXQgPCAxIHx8IHRlc3RfdHlwZSA8PSAw KSB7Cj4gPiArICAgICAgICAgICAgICAgaWd0X3dhcm4oInRlc3RfdHlwZSByZWFkIGZhaWxlZCAt ICUwMmx4XHJcbiIsIHRlc3RfdHlwZSk7Cj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4g PiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgcmV0dXJuIHRlc3RfdHlwZTsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3Rlc3RfZWRpZF9kYXRhKHZvaWQpCj4g PiArewo+ID4gKyAgICAgICB1bnNpZ25lZCBsb25nIHRlc3RfZGF0YTsKPiA+ICsgICAgICAgaW50 IHJldDsKPiA+ICsKPiA+ICsgICAgICAgaWYgKCF0ZXN0X2RhdGFfZnApCj4gPiArICAgICAgICAg ICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHRlc3RfZGF0YSBmaWxlXHJcbiIpOwo+ID4g Kwo+ID4gKyAgICAgICByZXdpbmQodGVzdF9kYXRhX2ZwKTsKPiA+ICsgICAgICAgcmV0ID0gZnNj YW5mKHRlc3RfZGF0YV9mcCwgIiVseCIsICZ0ZXN0X2RhdGEpOwo+ID4gKyAgICAgICBpZiAocmV0 IDwgMSB8fCB0ZXN0X2RhdGEgPD0gMCkgewo+ID4gKyAgICAgICAgICAgICAgIGlndF93YXJuKCJ0 ZXN0X2RhdGEgcmVhZCBmYWlsZWQgLSAlbHhcclxuIiwgdGVzdF9kYXRhKTsKPiA+ICsgICAgICAg ICAgICAgICByZXR1cm4gMDsKPiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4g dGVzdF9kYXRhOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBnZXRfdGVzdF92aWRlb3Bh dHRlcm5fZGF0YSh2b2lkKQo+ID4gK3sKPiA+ICsgICAgICAgaW50IGNvdW50ID0gMDsKPiA+ICsg ICAgICAgdWludDE2X3QgdmlkZW9fcGF0dGVybl92YWx1ZVszXTsKPiA+ICsgICAgICAgY2hhciB2 aWRlb19wYXR0ZXJuX2F0dHJpYnV0ZVsxNV07Cj4gPiArICAgICAgIGludCByZXQ7Cj4gPiArCj4g PiArICAgICAgIGlmICghdGVzdF9kYXRhX2ZwKQo+ID4gKyAgICAgICAgICAgICAgIGZwcmludGYo c3RkZXJyLCAiSW52YWxpZCB0ZXN0X2RhdGEgZmlsZVxyXG4iKTsKPiA+ICsKPiA+ICsgICAgICAg cmV3aW5kKHRlc3RfZGF0YV9mcCk7Cj4gPiArICAgICAgIHdoaWxlICghZmVvZih0ZXN0X2RhdGFf ZnApICYmIGNvdW50IDwgMykgewo+ID4gKyAgICAgICAgICAgICAgIHJldCA9IGZzY2FuZih0ZXN0 X2RhdGFfZnAsICIlcyAldVxuIiwgdmlkZW9fcGF0dGVybl9hdHRyaWJ1dGUsCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQgKikmdmlkZW9fcGF0dGVybl92YWx1ZVtjb3Vu dCsrXSk7Cj4gPiArICAgICAgICAgICAgICAgaWYgKHJldCA8IDIpIHsKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIGlndF93YXJuKCJ0ZXN0X2RhdGEgcmVhZCBmYWlsZWRcbiIpOwo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwo+ID4gKyAgICAgICAgICAgICAgIH0KPiA+ICsg ICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICBoZGlzcGxheSA9IHZpZGVvX3BhdHRlcm5fdmFsdWVb MF07Cj4gPiArICAgICAgIHZkaXNwbGF5ID0gdmlkZW9fcGF0dGVybl92YWx1ZVsxXTsKPiA+ICsg ICAgICAgYml0ZGVwdGggPSB2aWRlb19wYXR0ZXJuX3ZhbHVlWzJdOwo+ID4gKyAgICAgICBpZ3Rf aW5mbygiSGRpc3BsYXkgPSAlZFxyXG4iLCBoZGlzcGxheSk7Cj4gPiArICAgICAgIGlndF9pbmZv KCJWZGlzcGxheSA9ICVkXHJcbiIsIHZkaXNwbGF5KTsKPiA+ICsgICAgICAgaWd0X2luZm8oIkJp dERlcHRoID0gJXVcclxuIiwgYml0ZGVwdGgpOwo+ID4gKwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgaW50IHByb2Nlc3NfdGVzdF9yZXF1ZXN0KGludCB0ZXN0X3R5cGUpCj4gPiArewo+ID4gKyAg ICAgICBpbnQgbW9kZTsKPiA+ICsgICAgICAgdW5zaWduZWQgbG9uZyB0ZXN0X2RhdGFfZWRpZDsK PiA+ICsgICAgICAgYm9vbCB2YWxpZCA9IGZhbHNlOwo+ID4gKyAgICAgICBzd2l0Y2ggKHRlc3Rf dHlwZSkgewo+ID4gKyAgICAgICBjYXNlIERQX1RFU1RfTElOS19WSURFT19QQVRURVJOOgo+ID4g KyAgICAgICAgICAgICAgIHZpZGVvX3BhdHRlcm5fZmxhZyA9IHRydWU7Cj4gPiArICAgICAgICAg ICAgICAgZ2V0X3Rlc3RfdmlkZW9wYXR0ZXJuX2RhdGEoKTsKPiA+ICsgICAgICAgICAgICAgICBt b2RlID0gSU5URUxfTU9ERV9WSURFT19QQVRURVJOX1RFU1Q7Cj4gPiArICAgICAgICAgICAgICAg dmFsaWQgPSB0cnVlOwo+ID4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICBjYXNl IERQX1RFU1RfTElOS19FRElEX1JFQUQ6Cj4gPiArICAgICAgICAgICAgICAgdGVzdF9kYXRhX2Vk aWQgPSBnZXRfdGVzdF9lZGlkX2RhdGEoKTsKPiA+ICsgICAgICAgICAgICAgICBtb2RlID0gKHRl c3RfZGF0YV9lZGlkICYgRFBfQ09NUExJQU5DRV9WSURFT19NT0RFX01BU0spID4+Cj4gPiArICAg ICAgICAgICAgICAgICAgICAgICBJTlRFTF9EUF9SRVNPTFVUSU9OX1NISUZUX01BU0s7Cj4gPiAr ICAgICAgICAgICAgICAgdmFsaWQgPSB0cnVlOwo+ID4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+ ID4gKyAgICAgICBkZWZhdWx0Ogo+ID4gKyAgICAgICAgICAgICAgIC8qIFVua25vd24gdGVzdCB0 eXBlICovCj4gPiArICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHRlc3Qg cmVxdWVzdCwgaWdub3JlZC5cclxuIik7Cj4gPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiAr ICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgaWYgKHZhbGlkKQo+ID4gKyAgICAgICAgICAgICAg IHJldHVybiB1cGRhdGVfZGlzcGxheShtb2RlLCB0cnVlKTsKPiA+ICsKPiA+ICsgICAgICAgcmV0 dXJuIC0xOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBkdW1wX2Nvbm5lY3RvcnNfZmQo aW50IGRybWZkKQo+ID4gK3sKPiA+ICsgICAgICAgaW50IGksIGo7Cj4gPiArCj4gPiArICAgICAg IGRybU1vZGVSZXMgKm1vZGVfcmVzb3VyY2VzID0gZHJtTW9kZUdldFJlc291cmNlcyhkcm1mZCk7 Cj4gPiArCj4gPiArICAgICAgIGlmICghbW9kZV9yZXNvdXJjZXMpIHsKPiA+ICsgICAgICAgICAg ICAgICBpZ3Rfd2FybigiZHJtTW9kZUdldFJlc291cmNlcyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJv cihlcnJubykpOwo+ID4gKyAgICAgICAgICAgICAgIHJldHVybjsKPiA+ICsgICAgICAgfQo+ID4g Kwo+ID4gKyAgICAgICBpZ3RfaW5mbygiQ29ubmVjdG9yczpcbiIpOwo+ID4gKyAgICAgICBpZ3Rf aW5mbygiaWRcdGVuY29kZXJcdHN0YXR1c1x0XHR0eXBlXHRzaXplIChtbSlcdG1vZGVzXG4iKTsK PiA+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IG1vZGVfcmVzb3VyY2VzLT5jb3VudF9jb25uZWN0 b3JzOyBpKyspIHsKPiA+ICsgICAgICAgICAgICAgICBkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0 b3I7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgY29ubmVjdG9yID0gZHJtTW9kZUdldENvbm5l Y3RvckN1cnJlbnQoZHJtZmQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbW9kZV9yZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV0pOwo+ID4g KyAgICAgICAgICAgICAgIGlmICghY29ubmVjdG9yKSB7Cj4gPiArICAgICAgICAgICAgICAgICAg ICAgICBpZ3Rfd2FybigiQ291bGQgbm90IGdldCBjb25uZWN0b3IgJWk6ICVzXG4iLAo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9yZXNvdXJjZXMtPmNvbm5lY3RvcnNb aV0sIHN0cmVycm9yKGVycm5vKSk7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51 ZTsKPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgaWd0X2lu Zm8oIiVkXHQlZFx0JXNcdCVzXHQlZHglZFx0XHQlZFxuIiwKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICBjb25uZWN0b3ItPmNvbm5lY3Rvcl9pZCwKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICBjb25uZWN0b3ItPmVuY29kZXJfaWQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg a21zdGVzdF9jb25uZWN0b3Jfc3RhdHVzX3N0cihjb25uZWN0b3ItPmNvbm5lY3Rpb24pLAo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgIGttc3Rlc3RfY29ubmVjdG9yX3R5cGVfc3RyKGNvbm5l Y3Rvci0+Y29ubmVjdG9yX3R5cGUpLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5l Y3Rvci0+bW1XaWR0aCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3ItPm1t SGVpZ2h0LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rvci0+Y291bnRfbW9k ZXMpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgIGlmICghY29ubmVjdG9yLT5jb3VudF9tb2Rl cykKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKwo+ID4gKyAgICAg ICAgICAgICAgIGlndF9pbmZvKCIgIE1vZGVzOlxuIik7Cj4gPiArICAgICAgICAgICAgICAgaWd0 X2luZm8oIiAgbmFtZSByZWZyZXNoIChIeikgaGRpc3AgaHNzIGhzZSBodG90IHZkaXNwICIidnNz IHZzZSB2dG90IGZsYWdzIHR5cGUgY2xvY2tcbiIpOwo+ID4gKyAgICAgICAgICAgICAgIGZvciAo aiA9IDA7IGogPCBjb25uZWN0b3ItPmNvdW50X21vZGVzOyBqKyspIHsKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIGlndF9pbmZvKCJbJWRdIiwgaik7Cj4gPiArICAgICAgICAgICAgICAgICAg ICAgICBrbXN0ZXN0X2R1bXBfbW9kZSgmY29ubmVjdG9yLT5tb2Rlc1tqXSk7Cj4gPiArICAgICAg ICAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgIGRybU1vZGVGcmVlQ29ubmVjdG9y KGNvbm5lY3Rvcik7Cj4gPiArICAgICAgIH0KPiA+ICsgICAgICAgaWd0X2luZm8oIlxuIik7Cj4g PiArCj4gPiArICAgICAgIGRybU1vZGVGcmVlUmVzb3VyY2VzKG1vZGVfcmVzb3VyY2VzKTsKPiA+ ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZHVtcF9jcnRjc19mZChpbnQgZHJtZmQpCj4gPiAr ewo+ID4gKyAgICAgICBpbnQgaTsKPiA+ICsgICAgICAgZHJtTW9kZVJlcyAqbW9kZV9yZXNvdXJj ZXM7Cj4gPiArCj4gPiArICAgICAgIG1vZGVfcmVzb3VyY2VzID0gZHJtTW9kZUdldFJlc291cmNl cyhkcm1mZCk7Cj4gPiArICAgICAgIGlmICghbW9kZV9yZXNvdXJjZXMpIHsKPiA+ICsgICAgICAg ICAgICAgICBpZ3Rfd2FybigiZHJtTW9kZUdldFJlc291cmNlcyBmYWlsZWQ6ICVzXG4iLCBzdHJl cnJvcihlcnJubykpOwo+ID4gKyAgICAgICAgICAgICAgIHJldHVybjsKPiA+ICsgICAgICAgfQo+ ID4gKwo+ID4gKyAgICAgICBpZ3RfaW5mbygiQ1JUQ3M6XG4iKTsKPiA+ICsgICAgICAgaWd0X2lu Zm8oImlkXHRmYlx0cG9zXHRzaXplXG4iKTsKPiA+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IG1v ZGVfcmVzb3VyY2VzLT5jb3VudF9jcnRjczsgaSsrKSB7Cj4gPiArICAgICAgICAgICAgICAgZHJt TW9kZUNydGMgKmNydGM7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgY3J0YyA9IGRybU1vZGVH ZXRDcnRjKGRybWZkLCBtb2RlX3Jlc291cmNlcy0+Y3J0Y3NbaV0pOwo+ID4gKyAgICAgICAgICAg ICAgIGlmICghY3J0Yykgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWd0X3dhcm4oIkNv dWxkIG5vdCBnZXQgY3J0YyAlaTogJXNcbiIsIG1vZGVfcmVzb3VyY2VzLT5jcnRjc1tpXSwgc3Ry ZXJyb3IoZXJybm8pKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4g KyAgICAgICAgICAgICAgIH0KPiA+ICsgICAgICAgICAgICAgICBpZ3RfaW5mbygiJWRcdCVkXHQo JWQsJWQpXHQoJWR4JWQpXG4iLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIGNydGMtPmNy dGNfaWQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgY3J0Yy0+YnVmZmVyX2lkLAo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgIGNydGMtPngsCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgY3J0Yy0+eSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBjcnRjLT53aWR0aCwK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBjcnRjLT5oZWlnaHQpOwo+ID4gKwo+ID4gKyAg ICAgICAgICAgICAgIGttc3Rlc3RfZHVtcF9tb2RlKCZjcnRjLT5tb2RlKTsKPiA+ICsKPiA+ICsg ICAgICAgICAgICAgICBkcm1Nb2RlRnJlZUNydGMoY3J0Yyk7Cj4gPiArICAgICAgIH0KPiA+ICsg ICAgICAgaWd0X2luZm8oIlxuIik7Cj4gPiArCj4gPiArICAgICAgIGRybU1vZGVGcmVlUmVzb3Vy Y2VzKG1vZGVfcmVzb3VyY2VzKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZHVtcF9p bmZvKHZvaWQpCj4gPiArewo+ID4gKyAgICAgICBkdW1wX2Nvbm5lY3RvcnNfZmQoZHJtX2ZkKTsK PiA+ICsgICAgICAgZHVtcF9jcnRjc19mZChkcm1fZmQpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgaW50IHNldHVwX2ZyYW1lYnVmZmVycyhzdHJ1Y3QgY29ubmVjdG9yICpkcF9jb25uKQo+ID4g K3sKPiA+ICsKPiA+ICsgICAgICAgZHBfY29ubi0+ZmIgPSBpZ3RfY3JlYXRlX2ZiKGRybV9mZCwK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwX2Nvbm4tPmZiX3dpZHRo LCBkcF9jb25uLT5mYl9oZWlnaHQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEUk1fRk9STUFUX1hSR0I4ODg4LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZkcF9jb25uLT5mYl92aWRlb19wYXR0ZXJuKTsKPiA+ICsgICAg ICAgaWd0X2Fzc2VydChkcF9jb25uLT5mYik7Cj4gPiArCj4gPiArICAgICAgIC8qIE1hcCB0aGUg bWFwcGluZyBvZiBHRU0gb2JqZWN0IGludG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSAqLwo+ ID4gKyAgICAgICBkcF9jb25uLT5waXhtYXAgPSBnZW1fbW1hcF9fZ3R0KGRybV9mZCwKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcF9jb25uLT5mYl92aWRlb19w YXR0ZXJuLmdlbV9oYW5kbGUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZHBfY29ubi0+ZmJfdmlkZW9fcGF0dGVybi5zaXplLAo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOwo+ID4gKyAg ICAgICBpZiAoZHBfY29ubi0+cGl4bWFwID09IE5VTEwpCj4gPiArICAgICAgICAgICAgICAgcmV0 dXJuIC0xOwo+ID4gKwo+ID4gKyAgICAgICBnZW1fc2V0X2RvbWFpbihkcm1fZmQsIGRwX2Nvbm4t PmZiX3ZpZGVvX3BhdHRlcm4uZ2VtX2hhbmRsZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg STkxNV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7Cj4gPiArICAgICAgIGRw X2Nvbm4tPmZiX3NpemUgPSBkcF9jb25uLT5mYl92aWRlb19wYXR0ZXJuLnNpemU7Cj4gPiArCj4g PiArICAgICAgIC8qIEFmdGVyIGZpbGxpbmcgdGhlIGRldmljZSBtZW1vcnkgd2l0aCAwcyBpdCBu ZWVkcyB0byBiZSB1bm1hcHBlZCAqLwo+ID4gKyAgICAgICBtZW1zZXQoZHBfY29ubi0+cGl4bWFw LCAwLCBkcF9jb25uLT5mYl9zaXplKTsKPiA+ICsgICAgICAgbXVubWFwKGRwX2Nvbm4tPnBpeG1h cCwgZHBfY29ubi0+ZmJfc2l6ZSk7Cj4gPiArCj4gPiArICAgICAgIHJldHVybiAwOwo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgaW50IHNldHVwX2ZhaWxzYWZlX2ZyYW1lYnVmZmVyKHN0cnVjdCBj b25uZWN0b3IgKmRwX2Nvbm4pCj4gPiArewo+ID4gKwo+ID4gKyAgICAgICBkcF9jb25uLT5mYWls c2FmZV9mYiA9IGlndF9jcmVhdGVfZmIoZHJtX2ZkLAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZHBfY29ubi0+ZmFpbHNhZmVfd2lkdGgsCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcF9jb25uLT5mYWlsc2Fm ZV9oZWlnaHQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEUk1fRk9STUFUX1hSR0I4ODg4LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkcF9jb25uLT5mYl9mYWlsc2FmZV9w YXR0ZXJuKTsKPiA+ICsgICAgICAgaWd0X2Fzc2VydChkcF9jb25uLT5mYWlsc2FmZV9mYik7Cj4g PiArCj4gPiArICAgICAgIC8qIE1hcCB0aGUgbWFwcGluZyBvZiBHRU0gb2JqZWN0IGludG8gdGhl IHZpcnR1YWwgYWRkcmVzcyBzcGFjZSAqLwo+ID4gKyAgICAgICBkcF9jb25uLT5mYWlsc2FmZV9w aXhtYXAgPSBnZW1fbW1hcF9fZ3R0KGRybV9mZCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkcF9jb25uLT5mYl9mYWlsc2FmZV9wYXR0ZXJuLmdl bV9oYW5kbGUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZHBfY29ubi0+ZmJfZmFpbHNhZmVfcGF0dGVybi5zaXplLAo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJ VEUpOwo+ID4gKyAgICAgICBpZiAoZHBfY29ubi0+ZmFpbHNhZmVfcGl4bWFwID09IE5VTEwpCj4g PiArICAgICAgICAgICAgICAgcmV0dXJuIC0xOwo+ID4gKwo+ID4gKyAgICAgICBnZW1fc2V0X2Rv bWFpbihkcm1fZmQsIGRwX2Nvbm4tPmZiX2ZhaWxzYWZlX3BhdHRlcm4uZ2VtX2hhbmRsZSwKPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1fRE9N QUlOX0dUVCk7Cj4gPiArICAgICAgIGRwX2Nvbm4tPmZhaWxzYWZlX3NpemUgPSBkcF9jb25uLT5m Yl9mYWlsc2FmZV9wYXR0ZXJuLnNpemU7Cj4gPiArCj4gPiArICAgICAgIC8qIEFmdGVyIGZpbGxp bmcgdGhlIGRldmljZSBmcmFtZWJ1ZmZlciB0aGUgbWFwcGVkIG1lbW9yeSBuZWVkcyB0byBiZSBm cmVlZCAqLwo+ID4gKyAgICAgICBtZW1zZXQoZHBfY29ubi0+ZmFpbHNhZmVfcGl4bWFwLCAwLCBk cF9jb25uLT5mYWlsc2FmZV9zaXplKTsKPiA+ICsgICAgICAgbXVubWFwKGRwX2Nvbm4tPmZhaWxz YWZlX3BpeG1hcCwgZHBfY29ubi0+ZmFpbHNhZmVfc2l6ZSk7Cj4gPiArCj4gPiArICAgICAgIHJl dHVybiAwOwo+ID4gKwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHNldHVwX3ZpZGVvX3Bh dHRlcm5fZnJhbWVidWZmZXIoc3RydWN0IGNvbm5lY3RvciAqZHBfY29ubikKPiA+ICt7Cj4gPiAr ICAgICAgIHVpbnQzMl90ICB2aWRlb193aWR0aCwgdmlkZW9faGVpZ2h0Owo+ID4gKwo+ID4gKyAg ICAgICB2aWRlb193aWR0aCA9IGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5oZGlzcGxheTsKPiA+ICsg ICAgICAgdmlkZW9faGVpZ2h0ID0gZHBfY29ubi0+dGVzdF9wYXR0ZXJuLnZkaXNwbGF5Owo+ID4g KyAgICAgICBkcF9jb25uLT50ZXN0X3BhdHRlcm4uZmIgPSBpZ3RfY3JlYXRlX2ZiKGRybV9mZCwK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRl b193aWR0aCwgdmlkZW9faGVpZ2h0LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTE9DQUxfRFJNX0ZPUk1BVF9NT0Rf Tk9ORSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmZiX3BhdHRlcm4pOwo+ID4gKyAgICAgICBpZ3RfYXNz ZXJ0KGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5mYik7Cj4gPiArCj4gPiArICAgICAgIC8qIE1hcCB0 aGUgbWFwcGluZyBvZiBHRU0gb2JqZWN0IGludG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSAq Lwo+ID4gKyAgICAgICBkcF9jb25uLT50ZXN0X3BhdHRlcm4ucGl4bWFwID0gZ2VtX21tYXBfX2d0 dChkcm1fZmQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5mYl9wYXR0ZXJuLmdlbV9oYW5kbGUsCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRw X2Nvbm4tPnRlc3RfcGF0dGVybi5mYl9wYXR0ZXJuLnNpemUsCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJ VEUpOwo+ID4gKyAgICAgICBpZiAoZHBfY29ubi0+dGVzdF9wYXR0ZXJuLnBpeG1hcCA9PSBOVUxM KQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAtMTsKPiA+ICsKPiA+ICsgICAgICAgZ2VtX3Nl dF9kb21haW4oZHJtX2ZkLCBkcF9jb25uLT50ZXN0X3BhdHRlcm4uZmJfcGF0dGVybi5nZW1faGFu ZGxlLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1 X0dFTV9ET01BSU5fR1RUKTsKPiA+ICsKPiA+ICsgICAgICAgZHBfY29ubi0+dGVzdF9wYXR0ZXJu LnNpemUgPSBkcF9jb25uLT50ZXN0X3BhdHRlcm4uZmJfcGF0dGVybi5zaXplOwo+ID4gKwo+ID4g KyAgICAgICBtZW1zZXQoZHBfY29ubi0+dGVzdF9wYXR0ZXJuLnBpeG1hcCwgMCwgZHBfY29ubi0+ dGVzdF9wYXR0ZXJuLnNpemUpOwo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIGludCBmaWxsX2ZyYW1lYnVmZmVyKHN0cnVjdCBjb25uZWN0b3IgKmRw X2Nvbm4pCj4gPiArewo+ID4gKyAgICAgICB1aW50MzJfdCB0aWxlX2hlaWdodCwgdGlsZV93aWR0 aCwgdmlkZW9fd2lkdGgsIHZpZGVvX2hlaWdodDsKPiA+ICsgICAgICAgdWludDMyX3QgKnJlZF9w dHIsICpncmVlbl9wdHIsICpibHVlX3B0ciwgKndoaXRlX3B0ciwgKnNyY19wdHIsICpkc3RfcHRy Owo+ID4gKyAgICAgICBpbnQgeCwgeTsKPiA+ICsgICAgICAgaW50MzJfdCBwaXhlbF92YWw7Cj4g PiArCj4gPiArICAgICAgIHZpZGVvX3dpZHRoID0gZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmhkaXNw bGF5Owo+ID4gKyAgICAgICB2aWRlb19oZWlnaHQgPSBkcF9jb25uLT50ZXN0X3BhdHRlcm4udmRp c3BsYXk7Cj4gPiArCj4gPiArICAgICAgIHRpbGVfaGVpZ2h0ID0gNjQ7Cj4gPiArICAgICAgIHRp bGVfd2lkdGggPSAxIDw8ICAoZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmJpdGRlcHRoKTsKPiA+ICsK PiA+ICsgICAgICAgcmVkX3B0ciA9IGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5waXhtYXA7Cj4gPiAr ICAgICAgIGdyZWVuX3B0ciA9IHJlZF9wdHIgKyAodmlkZW9fd2lkdGggKiB0aWxlX2hlaWdodCk7 Cj4gPiArICAgICAgIGJsdWVfcHRyID0gZ3JlZW5fcHRyICsgKHZpZGVvX3dpZHRoICogdGlsZV9o ZWlnaHQpOwo+ID4gKyAgICAgICB3aGl0ZV9wdHIgPSBibHVlX3B0ciArICh2aWRlb193aWR0aCAq IHRpbGVfaGVpZ2h0KTsKPiA+ICsgICAgICAgeCA9IDA7Cj4gPiArCj4gPiArICAgICAgIC8qIEZp bGwgdGhlIGZyYW1lIGJ1ZmZlciB3aXRoIHZpZGVvIHBhdHRlcm4gZnJvbSBDVFMgMy4xLjUgKi8K PiA+ICsgICAgICAgd2hpbGUgKHggPCB2aWRlb193aWR0aCkgewo+ID4gKyAgICAgICAgICAgICAg IGZvciAocGl4ZWxfdmFsID0gMDsgcGl4ZWxfdmFsIDwgMjU2Owo+ID4gKyAgICAgICAgICAgICAg ICAgICAgcGl4ZWxfdmFsID0gcGl4ZWxfdmFsICsgKDI1NiAvIHRpbGVfd2lkdGgpKSB7Cj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICByZWRfcHRyW3hdID0gcGl4ZWxfdmFsIDw8IDE2Owo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgZ3JlZW5fcHRyW3hdID0gcGl4ZWxfdmFsIDw8IDg7Cj4g PiArICAgICAgICAgICAgICAgICAgICAgICBibHVlX3B0clt4XSA9IHBpeGVsX3ZhbCA8PCAwOwo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVfcHRyW3hdID0gcmVkX3B0clt4XSB8IGdy ZWVuX3B0clt4XSB8IGJsdWVfcHRyW3hdOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYg KCsreCA+PSB2aWRlb193aWR0aCkKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Cj4gPiArICAgICAgICAgICAgICAgfQo+ID4gKyAgICAgICB9Cj4gPiArICAgICAgIGZv ciAoeSA9IDA7IHkgPCB2aWRlb19oZWlnaHQ7IHkrKykgewo+ID4gKyAgICAgICAgICAgICAgIGlm ICh5ID09IDAgfHwgeSA9PSA2NCB8fCB5ID09IDEyOCB8fCB5ID09IDE5MikKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKyAgICAgICAgICAgICAgIHN3aXRjaCAoKHkg LyB0aWxlX2hlaWdodCkgJSA0KSB7Cj4gPiArICAgICAgICAgICAgICAgY2FzZSAwOgo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgc3JjX3B0ciA9IHJlZF9wdHI7Cj4gPiArICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgICAgICAgICBjYXNlIDE6Cj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBzcmNfcHRyID0gZ3JlZW5fcHRyOwo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICAgICAgICAgY2FzZSAyOgo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgc3JjX3B0ciA9IGJsdWVfcHRyOwo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Cj4gPiArICAgICAgICAgICAgICAgY2FzZSAzOgo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgc3JjX3B0ciA9IHdoaXRlX3B0cjsKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwo+ID4gKyAgICAgICAgICAgICAgIH0KPiA+ICsgICAgICAgICAgICAgICBkc3Rf cHRyID0gZHBfY29ubi0+dGVzdF9wYXR0ZXJuLnBpeG1hcCArICh5ICogdmlkZW9fd2lkdGgpOwo+ ID4gKyAgICAgICAgICAgICAgIG1lbWNweShkc3RfcHRyLCBzcmNfcHRyLCAodmlkZW9fd2lkdGgg KiA0KSk7Cj4gPiArICAgICAgIH0KPiA+ICsgICAgICAgbXVubWFwKGRwX2Nvbm4tPnRlc3RfcGF0 dGVybi5waXhtYXAsCj4gPiArICAgICAgICAgICAgICBkcF9jb25uLT50ZXN0X3BhdHRlcm4uc2l6 ZSk7Cj4gPiArICAgICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHNl dF90ZXN0X21vZGUoc3RydWN0IGNvbm5lY3RvciAqZHBfY29ubikKPiA+ICt7Cj4gPiArICAgICAg IGludCByZXQgPSAwOwo+ID4gKyAgICAgICBpbnQgaTsKPiA+ICsgICAgICAgYm9vbCBmb3VuZF9z dGQgPSBmYWxzZSwgZm91bmRfZnMgPSBmYWxzZTsKPiA+ICsgICAgICAgZHJtTW9kZUNvbm5lY3Rv ciAqYyA9IGRwX2Nvbm4tPmNvbm5lY3RvcjsKPiA+ICsKPiA+ICsgICAgICAgLyogSWdub3JlIGFu eSBkaXNjb25uZWN0ZWQgZGV2aWNlcyAqLwo+ID4gKyAgICAgICBpZiAoYy0+Y29ubmVjdGlvbiAh PSBEUk1fTU9ERV9DT05ORUNURUQpIHsKPiA+ICsgICAgICAgICAgICAgICBpZ3Rfd2FybigiQ29u bmVjdG9yICV1IGRpc2Nvbm5lY3RlZFxyXG4iLCBjLT5jb25uZWN0b3JfaWQpOwo+ID4gKyAgICAg ICAgICAgICAgIHJldHVybiAtRU5PRU5UOwo+ID4gKyAgICAgICB9Cj4gPiArICAgICAgIGlndF9p bmZvKCJDb25uZWN0b3Igc2V0dXA6XHJcbiIpOwo+ID4gKyAgICAgICAvKiBTZXR1cCBwcmVmZXJy ZWQgbW9kZSAtIHNob3VsZCBiZSBtb2RlWzBdIGluIHRoZSBsaXN0ICovCj4gPiArICAgICAgIGRw X2Nvbm4tPm1vZGVfcHJlZmVycmVkID0gYy0+bW9kZXNbMF07Cj4gPiArICAgICAgIGRwX2Nvbm4t PmZiX3dpZHRoID0gYy0+bW9kZXNbMF0uaGRpc3BsYXk7Cj4gPiArICAgICAgIGRwX2Nvbm4tPmZi X2hlaWdodCA9IGMtPm1vZGVzWzBdLnZkaXNwbGF5Owo+ID4gKwo+ID4gKyAgICAgICBkcF9jb25u LT50ZXN0X3BhdHRlcm4ubW9kZSA9IGMtPm1vZGVzWzBdOwo+ID4gKyAgICAgICBkcF9jb25uLT50 ZXN0X3BhdHRlcm4ubW9kZS5oZGlzcGxheSA9IGMtPm1vZGVzWzBdLmhkaXNwbGF5Owo+ID4gKyAg ICAgICBkcF9jb25uLT50ZXN0X3BhdHRlcm4ubW9kZS52ZGlzcGxheSA9IGMtPm1vZGVzWzBdLnZk aXNwbGF5Owo+ID4gKwo+ID4gKyAgICAgICBpZ3RfaW5mbygiUHJlZmVycmVkIG1vZGUgKG1vZGUg MCkgZm9yIGNvbm5lY3RvciAldSBpcyAldXgldVxyXG4iLAo+ID4gKyAgICAgICAgICAgICAgICBk cF9jb25uLT5pZCwgYy0+bW9kZXNbMF0uaGRpc3BsYXksIGMtPm1vZGVzWzBdLnZkaXNwbGF5KTsK PiA+ICsgICAgICAgZmZsdXNoKHN0ZGluKTsKPiA+ICsKPiA+ICsgICAgICAgZm9yIChpID0gMTsg aSA8IGMtPmNvdW50X21vZGVzOyBpKyspIHsKPiA+ICsgICAgICAgICAgICAgICAvKiBTdGFuZGFy ZCBtb2RlIGlzIDgwMHg2MDBANjAgKi8KPiA+ICsgICAgICAgICAgICAgICBpZiAoYy0+bW9kZXNb aV0uaGRpc3BsYXkgPT0gODAwICYmCj4gPiArICAgICAgICAgICAgICAgICAgIGMtPm1vZGVzW2ld LnZkaXNwbGF5ID09IDYwMCAmJgo+ID4gKyAgICAgICAgICAgICAgICAgICBjLT5tb2Rlc1tpXS52 cmVmcmVzaCA9PSA2MCAmJgo+ID4gKyAgICAgICAgICAgICAgICAgICBmb3VuZF9zdGQgPT0gZmFs c2UpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGRwX2Nvbm4tPm1vZGVfc3RhbmRhcmQg PSBjLT5tb2Rlc1tpXTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGlndF9pbmZvKCJTdGFu ZGFyZCBtb2RlICglZCkgZm9yIGNvbm5lY3RvciAldSBpcyAldXgldVxyXG4iLAo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGMtPmNvbm5lY3Rvcl9pZCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGMtPm1vZGVzW2ldLmhkaXNwbGF5LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYy0+bW9kZXNbaV0udmRpc3BsYXkpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgZm91bmRfc3RkID0gdHJ1ZTsKPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiArICAgICAgICAg ICAgICAgLyogRmFpbHNhZmUgbW9kZSBpcyA2NDB4NDgwQDYwICovCj4gPiArICAgICAgICAgICAg ICAgaWYgKGMtPm1vZGVzW2ldLmhkaXNwbGF5ID09IDY0MCAmJgo+ID4gKyAgICAgICAgICAgICAg ICAgICBjLT5tb2Rlc1tpXS52ZGlzcGxheSA9PSA0ODAgJiYKPiA+ICsgICAgICAgICAgICAgICAg ICAgYy0+bW9kZXNbaV0udnJlZnJlc2ggPT0gNjAgJiYKPiA+ICsgICAgICAgICAgICAgICAgICAg Zm91bmRfZnMgPT0gZmFsc2UpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGRwX2Nvbm4t Pm1vZGVfZmFpbHNhZmUgPSBjLT5tb2Rlc1tpXTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IGRwX2Nvbm4tPmZhaWxzYWZlX3dpZHRoID0gYy0+bW9kZXNbaV0uaGRpc3BsYXk7Cj4gPiArICAg ICAgICAgICAgICAgICAgICAgICBkcF9jb25uLT5mYWlsc2FmZV9oZWlnaHQgPSBjLT5tb2Rlc1tp XS52ZGlzcGxheTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGlndF9pbmZvKCJGYWlsc2Fm ZSBtb2RlICglZCkgZm9yIGNvbm5lY3RvciAldSBpcyAldXgldVxyXG4iLAo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGMtPmNvbm5lY3Rvcl9pZCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGMtPm1vZGVzW2ldLmhkaXNwbGF5LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYy0+bW9kZXNbaV0udmRpc3BsYXkpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg Zm91bmRfZnMgPSB0cnVlOwo+ID4gKyAgICAgICAgICAgICAgIH0KPiA+ICsgICAgICAgfQo+ID4g Kwo+ID4gKyAgICAgICByZXQgPSBzZXR1cF9mcmFtZWJ1ZmZlcnMoZHBfY29ubik7Cj4gPiArICAg ICAgIGlmIChyZXQpIHsKPiA+ICsgICAgICAgICAgICAgICBpZ3Rfd2FybigiQ3JlYXRpbmcgZnJh bWVidWZmZXIgZm9yIGNvbm5lY3RvciAldSBmYWlsZWQgKCVkKVxyXG4iLAo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgIGMtPmNvbm5lY3Rvcl9pZCwgcmV0KTsKPiA+ICsgICAgICAgICAgICAg ICByZXR1cm4gcmV0Owo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIGlmIChmb3VuZF9m cykgewo+ID4gKyAgICAgICAgICAgICAgIHJldCA9IHNldHVwX2ZhaWxzYWZlX2ZyYW1lYnVmZmVy KGRwX2Nvbm4pOwo+ID4gKyAgICAgICAgICAgICAgIGlmIChyZXQpIHsKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIGlndF93YXJuKCJDcmVhdGluZyBmYWlsc2FmZSBmcmFtZWJ1ZmZlciBmb3Ig Y29ubmVjdG9yICV1IGZhaWxlZCAoJWQpXHJcbiIsCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjLT5jb25uZWN0b3JfaWQsIHJldCk7Cj4gPiArICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gcmV0Owo+ID4gKyAgICAgICAgICAgICAgIH0KPiA+ICsgICAgICAgfQo+ID4g Kwo+ID4gKyAgICAgICBpZiAodmlkZW9fcGF0dGVybl9mbGFnKSB7Cj4gPiArICAgICAgICAgICAg ICAgZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmhkaXNwbGF5ID0gaGRpc3BsYXk7Cj4gPiArICAgICAg ICAgICAgICAgZHBfY29ubi0+dGVzdF9wYXR0ZXJuLnZkaXNwbGF5ID0gdmRpc3BsYXk7Cj4gPiAr ICAgICAgICAgICAgICAgZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmJpdGRlcHRoID0gYml0ZGVwdGg7 Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgcmV0ID0gc2V0dXBfdmlkZW9fcGF0dGVybl9mcmFt ZWJ1ZmZlcihkcF9jb25uKTsKPiA+ICsgICAgICAgICAgICAgICBpZiAocmV0KSB7Cj4gPiArICAg ICAgICAgICAgICAgICAgICAgICBpZ3Rfd2FybigiQ3JlYXRpbmcgZnJhbWVidWZmZXIgZm9yIGNv bm5lY3RvciAldSBmYWlsZWQgKCVkKVxyXG4iLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYy0+Y29ubmVjdG9yX2lkLCByZXQpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIHJldDsKPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAg ICAgICAgcmV0ID0gZmlsbF9mcmFtZWJ1ZmZlcihkcF9jb25uKTsKPiA+ICsgICAgICAgICAgICAg ICBpZiAocmV0KSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBpZ3Rfd2FybigiRmlsbGlu ZyBmcmFtZWJ1ZmZlciBmb3IgY29ubmVjdG9yICV1IGZhaWxlZCAoJWQpXHJcbiIsCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5jb25uZWN0b3JfaWQsIHJldCk7Cj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gKyAgICAgICAgICAgICAgIH0K PiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgaW50IHNldF92aWRlbyhpbnQgbW9kZSwgc3RydWN0IGNvbm5lY3RvciAqdGVz dF9jb25uZWN0b3IpCj4gPiArewo+ID4gKyAgICAgICBkcm1Nb2RlTW9kZUluZm8gKnJlcXVlc3Rl ZF9tb2RlOwo+ID4gKyAgICAgICB1aW50MzJfdCByZXF1aXJlZF9mYl9pZDsKPiA+ICsgICAgICAg c3RydWN0IGlndF9mYiByZXF1aXJlZF9mYjsKPiA+ICsgICAgICAgaW50IHJldCA9IDA7Cj4gPiAr Cj4gPiArICAgICAgIHN3aXRjaCAobW9kZSkgewo+ID4gKyAgICAgICBjYXNlIElOVEVMX01PREVf Tk9ORToKPiA+ICsgICAgICAgICAgICAgICBpZ3RfaW5mbygiTk9ORVxyXG4iKTsKPiA+ICsgICAg ICAgICAgICAgICByZXQgPSBkcm1Nb2RlU2V0Q3J0Yyhkcm1fZmQsIHRlc3RfY29ubmVjdG9yLT5j cnRjLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAwLCAwLCBO VUxMLCAwLCBOVUxMKTsKPiA+ICsgICAgICAgICAgICAgICBnb3RvIG91dDsKPiA+ICsgICAgICAg Y2FzZSBJTlRFTF9NT0RFX1BSRUZFUlJFRDoKPiA+ICsgICAgICAgICAgICAgICBpZ3RfaW5mbygi UFJFRkVSUkVEXHJcbiIpOwo+ID4gKyAgICAgICAgICAgICAgIHJlcXVlc3RlZF9tb2RlID0gICZ0 ZXN0X2Nvbm5lY3Rvci0+bW9kZV9wcmVmZXJyZWQ7Cj4gPiArICAgICAgICAgICAgICAgcmVxdWly ZWRfZmJfaWQgPSB0ZXN0X2Nvbm5lY3Rvci0+ZmI7Cj4gPiArICAgICAgICAgICAgICAgcmVxdWly ZWRfZmIgPSB0ZXN0X2Nvbm5lY3Rvci0+ZmJfdmlkZW9fcGF0dGVybjsKPiA+ICsgICAgICAgICAg ICAgICBicmVhazsKPiA+ICsgICAgICAgY2FzZSBJTlRFTF9NT0RFX1NUQU5EQVJEOgo+ID4gKyAg ICAgICAgICAgICAgIGlndF9pbmZvKCJTVEFOREFSRFxyXG4iKTsKPiA+ICsgICAgICAgICAgICAg ICByZXF1ZXN0ZWRfbW9kZSA9ICAmdGVzdF9jb25uZWN0b3ItPm1vZGVfc3RhbmRhcmQ7Cj4gPiAr ICAgICAgICAgICAgICAgcmVxdWlyZWRfZmJfaWQgPSB0ZXN0X2Nvbm5lY3Rvci0+ZmI7Cj4gPiAr ICAgICAgICAgICAgICAgcmVxdWlyZWRfZmIgPSB0ZXN0X2Nvbm5lY3Rvci0+ZmJfdmlkZW9fcGF0 dGVybjsKPiA+ICsgICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgY2FzZSBJTlRFTF9N T0RFX0ZBSUxTQUZFOgo+ID4gKyAgICAgICAgICAgICAgIGlndF9pbmZvKCJGQUlMU0FGRVxyXG4i KTsKPiA+ICsgICAgICAgICAgICAgICByZXF1ZXN0ZWRfbW9kZSA9ICAmdGVzdF9jb25uZWN0b3It Pm1vZGVfZmFpbHNhZmU7Cj4gPiArICAgICAgICAgICAgICAgcmVxdWlyZWRfZmJfaWQgPSB0ZXN0 X2Nvbm5lY3Rvci0+ZmFpbHNhZmVfZmI7Cj4gPiArICAgICAgICAgICAgICAgcmVxdWlyZWRfZmIg PSB0ZXN0X2Nvbm5lY3Rvci0+ZmJfZmFpbHNhZmVfcGF0dGVybjsKPiA+ICsgICAgICAgICAgICAg ICBicmVhazsKPiA+ICsgICAgICAgY2FzZSBJTlRFTF9NT0RFX1ZJREVPX1BBVFRFUk5fVEVTVDoK PiA+ICsgICAgICAgICAgICAgICBpZ3RfaW5mbygiVklERU8gUEFUVEVSTiBURVNUXHJcbiIpOwo+ ID4gKyAgICAgICAgICAgICAgIHJlcXVlc3RlZF9tb2RlID0gJnRlc3RfY29ubmVjdG9yLT50ZXN0 X3BhdHRlcm4ubW9kZTsKPiA+ICsgICAgICAgICAgICAgICByZXF1aXJlZF9mYl9pZCA9IHRlc3Rf Y29ubmVjdG9yLT50ZXN0X3BhdHRlcm4uZmI7Cj4gPiArICAgICAgICAgICAgICAgcmVxdWlyZWRf ZmIgPSB0ZXN0X2Nvbm5lY3Rvci0+dGVzdF9wYXR0ZXJuLmZiX3BhdHRlcm47Cj4gPiArICAgICAg ICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgIGNhc2UgSU5URUxfTU9ERV9JTlZBTElEOgo+ID4g KyAgICAgICBkZWZhdWx0Ogo+ID4gKyAgICAgICAgICAgICAgIGlndF93YXJuKCJJTlZBTElEISAo JTA4eCkgTW9kZSBzZXQgYWJvcnRlZCFcclxuIiwgbW9kZSk7Cj4gPiArICAgICAgICAgICAgICAg cmV0dXJuIC0xOwo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIGlndF9pbmZvKCJDUlRD KCV1KToiLCB0ZXN0X2Nvbm5lY3Rvci0+Y3J0Yyk7Cj4gPiArICAgICAgIGttc3Rlc3RfZHVtcF9t b2RlKHJlcXVlc3RlZF9tb2RlKTsKPiA+ICsgICAgICAgcmV0ID0gZHJtTW9kZVNldENydGMoZHJt X2ZkLCB0ZXN0X2Nvbm5lY3Rvci0+Y3J0YywgcmVxdWlyZWRfZmJfaWQsIDAsIDAsCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZ0ZXN0X2Nvbm5lY3Rvci0+aWQsIDEsIHJlcXVlc3Rl ZF9tb2RlKTsKPiA+ICsgICAgICAgaWYgKHJldCkgewo+ID4gKyAgICAgICAgICAgICAgIGlndF93 YXJuKCJGYWlsZWQgdG8gc2V0IG1vZGUgKCVkeCVkQCVkSHopOiAlc1xuIiwKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICByZXF1ZXN0ZWRfbW9kZS0+aGRpc3BsYXksIHJlcXVlc3RlZF9tb2Rl LT52ZGlzcGxheSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWRfbW9kZS0+ dnJlZnJlc2gsIHN0cmVycm9yKGVycm5vKSk7Cj4gPiArICAgICAgICAgICAgICAgaWd0X3JlbW92 ZV9mYihkcm1fZmQsICZyZXF1aXJlZF9mYik7Cj4gPiArCj4gPiArICAgICAgIH0KPiA+ICsgICAg ICAgLyogS2VlcCB0aGUgcGF0dGVybiBvbiBvdXRwdXQgbGluZXMgZm9yIDEgc2VjIGZvciBEUFIt MTIwIHRvIGRldGVjdCBpdCAqLwo+ID4gKyAgICAgICBzbGVlcCgxKTsKPiA+ICsKPiA+ICtvdXQ6 Cj4gPiArICAgICAgIGlmIChyZXQpIHsKPiA+ICsgICAgICAgICAgICAgICBpZ3Rfd2FybigiRmFp bGVkIHRvIHNldCBDUlRDIGZvciBjb25uZWN0b3IgJXVcclxuIiwKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICB0ZXN0X2Nvbm5lY3Rvci0+aWQpOwo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiAr ICAgICAgIHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQKPiA+ICtzZXRf ZGVmYXVsdF9tb2RlKHN0cnVjdCBjb25uZWN0b3IgKmMsIGJvb2wgc2V0X21vZGUpCj4gPiArewo+ ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgZmJfaWQgPSAwOwo+ID4gKyAgICAgICBzdHJ1Y3QgaWd0 X2ZiIGZiX2luZm87Cj4gPiArICAgICAgIGludCByZXQgPSAwOwo+ID4gKwo+ID4gKyAgICAgICBp ZiAoIXNldF9tb2RlKSB7Cj4gPiArICAgICAgICAgICAgICAgcmV0ID0gZHJtTW9kZVNldENydGMo ZHJtX2ZkLCBjLT5jcnRjLCAwLCAwLCAwLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwsIDAsIE5VTEwpOwo+ID4gKyAgICAgICAgICAgICAgIGlmIChyZXQpCj4g PiArICAgICAgICAgICAgICAgICAgICAgICBpZ3Rfd2FybigiRmFpbGVkIHRvIHVuc2V0IG1vZGUi KTsKPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gKyAgICAgICB9Cj4gPiArCj4g PiArICAgICAgIGMtPm1vZGUgPSBjLT5jb25uZWN0b3ItPm1vZGVzWzBdOwo+ID4gKwo+ID4gKyAg ICAgICB3aWR0aCA9IGMtPm1vZGUuaGRpc3BsYXk7Cj4gPiArICAgICAgIGhlaWdodCA9IGMtPm1v ZGUudmRpc3BsYXk7Cj4gPiArCj4gPiArICAgICAgIGZiX2lkID0gaWd0X2NyZWF0ZV9wYXR0ZXJu X2ZiKGRybV9mZCwgd2lkdGgsIGhlaWdodCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGlsaW5nLCAmZmJfaW5mbyk7Cj4gPiArCj4gPiArICAgICAgIGln dF9pbmZvKCJDUlRDKCV1KTpbJWRdIiwgYy0+Y3J0YywgMCk7Cj4gPiArICAgICAgIGttc3Rlc3Rf ZHVtcF9tb2RlKCZjLT5tb2RlKTsKPiA+ICsgICAgICAgZHJtTW9kZVNldENydGMoZHJtX2ZkLCBj LT5jcnRjLCAtMSwgMCwgMCwgTlVMTCwgMCwgTlVMTCk7Cj4gPiArICAgICAgIHJldCA9IGRybU1v ZGVTZXRDcnRjKGRybV9mZCwgYy0+Y3J0YywgZmJfaWQsIDAsIDAsCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZjLT5pZCwgMSwgJmMtPm1vZGUpOwo+ID4gKyAgICAgICBpZiAocmV0 KSB7Cj4gPiArICAgICAgICAgICAgICAgaWd0X3dhcm4oIkZhaWxlZCB0byBzZXQgbW9kZSAoJWR4 JWRAJWRIeik6ICVzXG4iLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWln aHQsIGMtPm1vZGUudnJlZnJlc2gsIHN0cmVycm9yKGVycm5vKSk7Cj4gPiArICAgICAgICAgICAg ICAgaWd0X3JlbW92ZV9mYihkcm1fZmQsICZmYl9pbmZvKTsKPiA+ICsKPiA+ICsgICAgICAgfQo+ ID4gKwo+ID4gKyAgICAgICByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdWlu dDMyX3QgZmluZF9jcnRjX2Zvcl9jb25uZWN0b3IoZHJtTW9kZUNvbm5lY3RvciAqYykKPiA+ICt7 Cj4gPiArICAgICAgIGRybU1vZGVFbmNvZGVyICplOwo+ID4gKyAgICAgICB1aW50MzJfdCBwb3Nz aWJsZV9jcnRjczsKPiA+ICsgICAgICAgaW50IGksIGo7Cj4gPiArCj4gPiArICAgICAgIGZvciAo aSA9IDA7IGkgPCBjLT5jb3VudF9lbmNvZGVyczsgaSsrKSB7Cj4gPiArICAgICAgICAgICAgICAg ZSA9IGRybU1vZGVHZXRFbmNvZGVyKGRybV9mZCwgYy0+ZW5jb2RlcnNbaV0pOwo+ID4gKyAgICAg ICAgICAgICAgIHBvc3NpYmxlX2NydGNzID0gZS0+cG9zc2libGVfY3J0Y3M7Cj4gPiArICAgICAg ICAgICAgICAgZHJtTW9kZUZyZWVFbmNvZGVyKGUpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAg IGZvciAoaiA9IDA7IHBvc3NpYmxlX2NydGNzID4+IGo7IGorKykKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIGlmIChwb3NzaWJsZV9jcnRjcyAmICgxIDw8IGopKQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb3VyY2VzLT5jcnRjc1tqXTsKPiA+ICsgICAg ICAgfQo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBS ZS1wcm9iZSBjb25uZWN0b3JzIGFuZCBkbyBhIG1vZGVzZXQgYmFzZWQgb24gdGVzdCByZXF1ZXN0 IG9yCj4gPiArICogaW4gY2FzZSBvZiBhIGhvdHBsdWcgdWV2ZW50Lgo+ID4gKyAqCj4gPiArICog QG1vZGU6IFZpZGVvIG1vZGUgcmVxdWVzdGVkIGJ5IHRoZSB0ZXN0Cj4gPiArICogQGlzX2NvbXBs aWFuY2VfdGVzdDogMTogSWYgaXQgaXMgYSBjb21wbGlhbmNlIHRlc3QKPiA+ICsgKiAgICAgICAg ICAgICAgICAgICAgICAwOiBJZiBpdCBpcyBhIGhvdHBsdWcgZXZlbnQKPiA+ICsgKgo+ID4gKyAq IFJldHVybnM6Cj4gPiArICogMDogT24gU3VjY2Vzcwo+ID4gKyAqIC0xOiBPbiBmYWlsdXJlCj4g PiArICovCj4gPiAraW50IHVwZGF0ZV9kaXNwbGF5KGludCBtb2RlLCBib29sIGlzX2NvbXBsaWFu Y2VfdGVzdCkKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBjb25uZWN0b3IgKmNvbm5lY3RvcnMs ICpjb25uOwo+ID4gKyAgICAgICBpbnQgY250LCByZXQgPSAwOwo+ID4gKyAgICAgICBib29sIHNl dF9tb2RlOwo+ID4gKwo+ID4gKyAgICAgICByZXNvdXJjZXMgPSBkcm1Nb2RlR2V0UmVzb3VyY2Vz KGRybV9mZCk7Cj4gPiArICAgICAgIGlmICghcmVzb3VyY2VzKSB7Cj4gPiArICAgICAgICAgICAg ICAgaWd0X3dhcm4oImRybU1vZGVHZXRSZXNvdXJjZXMgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3Io ZXJybm8pKTsKPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gLTE7Cj4gPiArICAgICAgIH0KPiA+ ICsKPiA+ICsgICAgICAgY29ubmVjdG9ycyA9IGNhbGxvYyhyZXNvdXJjZXMtPmNvdW50X2Nvbm5l Y3RvcnMsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBjb25u ZWN0b3IpKTsKPiA+ICsgICAgICAgaWYgKCFjb25uZWN0b3JzKQo+ID4gKyAgICAgICAgICAgICAg IHJldHVybiAtMTsKPiA+ICsKPiA+ICsgICAgICAgLyogRmluZCBhbnkgY29ubmVjdGVkIGRpc3Bs YXlzICovCj4gPiArICAgICAgIGZvciAoY250ID0gMDsgY250IDwgcmVzb3VyY2VzLT5jb3VudF9j b25uZWN0b3JzOyBjbnQrKykgewo+ID4gKyAgICAgICAgICAgICAgIGRybU1vZGVDb25uZWN0b3Ig KmM7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgY29ubiA9ICZjb25uZWN0b3JzW2NudF07Cj4g PiArICAgICAgICAgICAgICAgY29ubi0+aWQgPSByZXNvdXJjZXMtPmNvbm5lY3RvcnNbY250XTsK PiA+ICsgICAgICAgICAgICAgICBjID0gZHJtTW9kZUdldENvbm5lY3Rvcihkcm1fZmQsIGNvbm4t PmlkKTsKPiA+ICsgICAgICAgICAgICAgICBpZiAoYy0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01P REVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0ICYmCj4gPiArICAgICAgICAgICAgICAgICAgIGMtPmNv bm5lY3Rpb24gPT0gRFJNX01PREVfQ09OTkVDVEVEKSB7Cj4gPiArICAgICAgICAgICAgICAgICAg ICAgICB0ZXN0X2Nvbm5lY3Rvcl9pZCA9IGMtPmNvbm5lY3Rvcl9pZDsKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIGNvbm4tPmNvbm5lY3RvciA9IGM7Cj4gPiArICAgICAgICAgICAgICAgICAg ICAgICBjb25uLT5jcnRjID0gZmluZF9jcnRjX2Zvcl9jb25uZWN0b3IoYyk7Cj4gPiArICAgICAg ICAgICAgICAgICAgICAgICB0ZXN0X2NydGMgPSBjb25uLT5jcnRjOwo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgc2V0X21vZGUgPSB0cnVlOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Cj4gPiArICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjLT5jb25uZWN0b3JfaWQgPT0g dGVzdF9jb25uZWN0b3JfaWQgJiYKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmNv bm5lY3Rpb24gPT0gRFJNX01PREVfRElTQ09OTkVDVEVEKSB7Cj4gPiArICAgICAgICAgICAgICAg ICAgICAgICBjb25uLT5jb25uZWN0b3IgPSBjOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg Y29ubi0+Y3J0YyA9IHRlc3RfY3J0YzsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHNldF9t b2RlID0gZmFsc2U7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAg ICAgICAgICAgICB9Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgaWYgKGNudCA9PSBy ZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3RvcnMpIHsKPiA+ICsgICAgICAgICAgICAgICByZXQgPSAt MTsKPiA+ICsgICAgICAgICAgICAgICBnb3RvIGVycjsKPiA+ICsgICAgICAgfQo+ID4gKwo+ID4g KyAgICAgICBpZiAoaXNfY29tcGxpYW5jZV90ZXN0KSB7Cj4gPiArICAgICAgICAgICAgICAgc2V0 X3Rlc3RfbW9kZShjb25uKTsKPiA+ICsgICAgICAgICAgICAgICByZXQgPSBzZXRfdmlkZW8oSU5U RUxfTU9ERV9OT05FLCBjb25uKTsKPiA+ICsgICAgICAgICAgICAgICByZXQgPSBzZXRfdmlkZW8o bW9kZSwgY29ubik7Cj4gPiArCj4gPiArICAgICAgIH0gZWxzZQo+ID4gKyAgICAgICAgICAgICAg IHJldCA9IHNldF9kZWZhdWx0X21vZGUoY29ubiwgc2V0X21vZGUpOwo+ID4gKwo+ID4gKyBlcnI6 Cj4gPiArICAgICAgIGRybU1vZGVGcmVlQ29ubmVjdG9yKGNvbm4tPmNvbm5lY3Rvcik7Cj4gPiAr ICAgICAgIC8qIEVycm9yIGNvbmRpdGlvbiBpZiBubyBjb25uZWN0ZWQgZGlzcGxheXMgKi8KPiA+ ICsgICAgICAgZnJlZShjb25uZWN0b3JzKTsKPiA+ICsgICAgICAgZHJtTW9kZUZyZWVSZXNvdXJj ZXMocmVzb3VyY2VzKTsKPiA+ICsgICAgICAgcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiAr c3RhdGljIGNvbnN0IGNoYXIgb3B0c3RyW10gPSAiaGkiOwo+ID4gKwo+ID4gK3N0YXRpYyB2b2lk IF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkgdXNhZ2UoY2hhciAqbmFtZSwgY2hhciBvcHQpCj4g PiArewo+ID4gKyAgICAgICBpZ3RfaW5mbygidXNhZ2U6ICVzIFstaGldXG4iLCBuYW1lKTsKPiA+ ICsgICAgICAgaWd0X2luZm8oIlx0LWlcdGR1bXAgaW5mb1xuIik7Cj4gPiArICAgICAgIGlndF9p bmZvKCJcdERlZmF1bHQgaXMgdG8gcmVzcG9uZCB0byBEUFItMTIwIHRlc3RzXG4iKTsKPiA+ICsg ICAgICAgZXhpdCgob3B0ICE9ICdoJykgPyAtMSA6IDApOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgdm9pZCBjbGVhbnVwX2RlYnVnZnModm9pZCkKPiA+ICt7Cj4gPiArICAgICAgIGZjbG9zZSh0 ZXN0X2FjdGl2ZV9mcCk7Cj4gPiArICAgICAgIGZjbG9zZSh0ZXN0X2RhdGFfZnApOwo+ID4gKyAg ICAgICBmY2xvc2UodGVzdF90eXBlX2ZwKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQg X19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKSBjbGVhbnVwX2FuZF9leGl0KGludCByZXQpCj4gPiAr ewo+ID4gKyAgICAgICBjbGVhbnVwX2RlYnVnZnMoKTsKPiA+ICsgICAgICAgY2xvc2UoZHJtX2Zk KTsKPiA+ICsgICAgICAgaWd0X2luZm8oIkNvbXBsaWFuY2UgdGVzdGluZyBhcHBsaWNhdGlvbiBl eGl0aW5nXG4iKTsKPiA+ICsgICAgICAgZXhpdChyZXQpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgdm9pZCBjbGVhbnVwX3Rlc3Qodm9pZCkKPiA+ICt7Cj4gPiArICAgICAgIHZpZGVvX3BhdHRl cm5fZmxhZyA9IGZhbHNlOwo+ID4gKyAgICAgICBoZGlzcGxheSA9IDA7Cj4gPiArICAgICAgIHZk aXNwbGF5ID0gMDsKPiA+ICsgICAgICAgYml0ZGVwdGggPSAwOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgdm9pZCByZWFkX3Rlc3RfcmVxdWVzdCh2b2lkKQo+ID4gK3sKPiA+ICsgICAgICAgdW5z aWduZWQgbG9uZyB0ZXN0X3R5cGU7Cj4gPiArCj4gPiArICAgICAgIHRlc3RfdHlwZSA9IGdldF90 ZXN0X3R5cGUoKTsKPiA+ICsgICAgICAgcHJvY2Vzc190ZXN0X3JlcXVlc3QodGVzdF90eXBlKTsK PiA+ICsgICAgICAgY2xlYW51cF90ZXN0KCk7Cj4gPiArICAgICAgIGNsZWFyX3Rlc3RfYWN0aXZl KCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBnYm9vbGVhbiB0ZXN0X2hhbmRsZXIoR0lPQ2hh bm5lbCAqc291cmNlLCBHSU9Db25kaXRpb24gY29uZGl0aW9uLAo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBncG9pbnRlciBkYXRhKQo+ID4gK3sKPiA+ICsgICAgICAgdW5zaWduZWQg bG9uZyB0ZXN0X2FjdGl2ZTsKPiA+ICsgICAgICAgaW50IHJldDsKPiA+ICsKPiA+ICsgICAgICAg cmV3aW5kKHRlc3RfYWN0aXZlX2ZwKTsKPiA+ICsKPiA+ICsgICAgICAgcmV0ID0gZnNjYW5mKHRl c3RfYWN0aXZlX2ZwLCAiJWx4IiwgJnRlc3RfYWN0aXZlKTsKPiA+ICsgICAgICAgaWYgKHJldCA8 IDEpCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwo+ID4gKwo+ID4gKyAgICAgICBp ZiAodGVzdF9hY3RpdmUpCj4gPiArICAgICAgICAgICAgICAgcmVhZF90ZXN0X3JlcXVlc3QoKTsK PiA+ICsgICAgICAgcmV0dXJuIFRSVUU7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBnYm9vbGVh biBpbnB1dF9ldmVudChHSU9DaGFubmVsICpzb3VyY2UsIEdJT0NvbmRpdGlvbiBjb25kaXRpb24s Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpCj4gPiAr ewo+ID4gKyAgICAgICBnY2hhciBidWZbMl07Cj4gPiArICAgICAgIGdzaXplIGNvdW50Owo+ID4g Kwo+ID4gKyAgICAgICBjb3VudCA9IHJlYWQoZ19pb19jaGFubmVsX3VuaXhfZ2V0X2ZkKHNvdXJj ZSksIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwo+ID4gKyAgICAgICBpZiAoYnVmWzBdID09ICdxJyAmJiAo Y291bnQgPT0gMSB8fCBidWZbMV0gPT0gJ1xuJykpIHsKPiA+ICsgICAgICAgICAgICAgICBjbGVh bnVwX2FuZF9leGl0KDApOwo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIHJldHVybiBU UlVFOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBlbnRlcl9leGVjX3BhdGgoY2hhciAq KmFyZ3YpCj4gPiArewo+ID4gKyAgICAgICBjaGFyICpleGVjX3BhdGggPSBOVUxMOwo+ID4gKyAg ICAgICBjaGFyICpwb3MgPSBOVUxMOwo+ID4gKyAgICAgICBzaG9ydCBsZW5fcGF0aCA9IDA7Cj4g PiArICAgICAgIGludCByZXQ7Cj4gPiArCj4gPiArICAgICAgIGxlbl9wYXRoID0gc3RybGVuKGFy Z3ZbMF0pOwo+ID4gKyAgICAgICBleGVjX3BhdGggPSAoY2hhciAqKSBtYWxsb2MobGVuX3BhdGgp Owo+ID4gKwo+ID4gKyAgICAgICBtZW1jcHkoZXhlY19wYXRoLCBhcmd2WzBdLCBsZW5fcGF0aCk7 Cj4gPiArICAgICAgIHBvcyA9IHN0cnJjaHIoZXhlY19wYXRoLCAnLycpOwo+ID4gKyAgICAgICBp ZiAocG9zICE9IE5VTEwpCj4gPiArICAgICAgICAgICAgICAgKihwb3MrMSkgPSAnXDAnOwo+ID4g Kwo+ID4gKyAgICAgICByZXQgPSBjaGRpcihleGVjX3BhdGgpOwo+ID4gKyAgICAgICBpZ3RfYXNz ZXJ0X2VxKHJldCwgMCk7Cj4gPiArICAgICAgIGZyZWUoZXhlY19wYXRoKTsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIHZvaWQgcmVzdG9yZV90ZXJtaW9fbW9kZShpbnQgc2lnKQo+ID4gK3sKPiA+ ICsgICAgICAgdGNzZXRhdHRyKHRpb19mZCwgVENTQU5PVywgJnNhdmVkX3Rpbyk7Cj4gPiArICAg ICAgIGNsb3NlKHRpb19mZCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHNldF90ZXJt aW9fbW9kZSh2b2lkKQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IHRlcm1pb3MgdGlvOwo+ID4g Kwo+ID4gKyAgICAgICAvKiBkb24ndCBhdHRlbXB0IHRvIHNldCB0ZXJtaW5hbCBhdHRyaWJ1dGVz IGlmIG5vdCBpbiB0aGUgZm9yZWdyb3VuZAo+ID4gKyAgICAgICAgKiBwcm9jZXNzIGdyb3VwCj4g PiArICAgICAgICAqLwo+ID4gKyAgICAgICBpZiAoZ2V0cGdycCgpICE9IHRjZ2V0cGdycChTVERP VVRfRklMRU5PKSkKPiA+ICsgICAgICAgICAgICAgICByZXR1cm47Cj4gPiArCj4gPiArICAgICAg IHRpb19mZCA9IGR1cChTVERJTl9GSUxFTk8pOwo+ID4gKyAgICAgICB0Y2dldGF0dHIodGlvX2Zk LCAmc2F2ZWRfdGlvKTsKPiA+ICsgICAgICAgaWd0X2luc3RhbGxfZXhpdF9oYW5kbGVyKHJlc3Rv cmVfdGVybWlvX21vZGUpOwo+ID4gKyAgICAgICB0aW8gPSBzYXZlZF90aW87Cj4gPiArICAgICAg IHRpby5jX2xmbGFnICY9IH4oSUNBTk9OIHwgRUNITyk7Cj4gPiArICAgICAgIHRjc2V0YXR0cih0 aW9fZmQsIFRDU0FOT1csICZ0aW8pOwo+ID4gK30KPiA+ICsKPiA+ICtpbnQgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCj4gPiArewo+ID4gKyAgICAgICBpbnQgYzsKPiA+ICsgICAgICAgaW50 IHJldCA9IDA7Cj4gPiArICAgICAgIEdJT0NoYW5uZWwgKnN0ZGluY2hhbm5lbCwgKnRlc3RhY3Rp dmVfY2hhbm5lbDsKPiA+ICsgICAgICAgR01haW5Mb29wICptYWlubG9vcDsKPiA+ICsgICAgICAg Ym9vbCBvcHRfZHVtcF9pbmZvID0gZmFsc2U7Cj4gPiArICAgICAgIHN0cnVjdCBvcHRpb24gbG9u Z19vcHRzW10gPSB7Cj4gPiArICAgICAgICAgICAgICAgeyJoZWxwLWRlc2NyaXB0aW9uIiwgMCwg MCwgSEVMUF9ERVNDUklQVElPTn0sCj4gPiArICAgICAgICAgICAgICAgeyJoZWxwIiwgMCwgMCwg J2gnfSwKPiA+ICsgICAgICAgfTsKPiA+ICsKPiA+ICsgICAgICAgaWd0X3NraXBfb25fc2ltdWxh dGlvbigpOwo+ID4gKwo+ID4gKyAgICAgICBlbnRlcl9leGVjX3BhdGgoYXJndik7Cj4gPiArCj4g PiArICAgICAgIHdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIG9wdHN0ciwgbG9u Z19vcHRzLCBOVUxMKSkgIT0gLTEpIHsKPiA+ICsgICAgICAgICAgICAgICBzd2l0Y2ggKGMpIHsK PiA+ICsgICAgICAgICAgICAgICBjYXNlICdpJzoKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IG9wdF9kdW1wX2luZm8gPSB0cnVlOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Cj4gPiArICAgICAgICAgICAgICAgY2FzZSBIRUxQX0RFU0NSSVBUSU9OOgo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgaWd0X2luZm8oIkRQIENvbXBsaWFuY2UgVGVzdCBTdWl0ZSB1c2luZyBE UFItMTIwXG4iKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGlndF9pbmZvKCJFRElEIHRl c3RzXG4iKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGlndF9pbmZvKCJWaWRlbyBQYXR0 ZXJuIEdlbmVyYXRpb24gdGVzdHNcbiIpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZXhp dCgwKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgICAg ICAgIGRlZmF1bHQ6Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2gg Ki8KPiA+ICsgICAgICAgICAgICAgICBjYXNlICdoJzoKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIHVzYWdlKGFyZ3ZbMF0sIGMpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Cj4gPiArICAgICAgICAgICAgICAgfQo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIHNl dF90ZXJtaW9fbW9kZSgpOwo+ID4gKwo+ID4gKyAgICAgICBpZ3RfaW5mbygiKioqKioqKioqKioq KkRQIENvbXBsaWFuY2UgVGVzdGluZyB1c2luZyBEUFItMTIwKioqKioqKioqKioqKlxuIik7Cj4g PiArICAgICAgIGlndF9pbmZvKCJXYWl0aW5nIGZvciB0ZXN0IHJlcXVlc3QuLi4uLi5cbiIpOwo+ ID4gKyAgICAgICBkcm1fZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0FOWSk7Cj4gPiArCj4g PiArICAgICAgIGttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsKPiA+ICsgICAgICAgc2V0 dXBfZGVidWdmc19maWxlcygpOwo+ID4gKyAgICAgICBjbGVhbnVwX3Rlc3QoKTsKPiA+ICsKPiA+ ICsgICAgICAgaWYgKG9wdF9kdW1wX2luZm8pIHsKPiA+ICsgICAgICAgICAgICAgICBkdW1wX2lu Zm8oKTsKPiA+ICsgICAgICAgICAgICAgICBnb3RvIG91dF9jbG9zZTsKPiA+ICsgICAgICAgfQo+ ID4gKwo+ID4gKyAgICAgICAvKiBHZXQgdGhlIERQIGNvbm5lY3RvciBJRCBhbmQgQ1JUQyAqLwo+ ID4gKyAgICAgICBpZiAodXBkYXRlX2Rpc3BsYXkoMCwgZmFsc2UpKSB7Cj4gPiArICAgICAgICAg ICAgICAgaWd0X3dhcm4oIkZhaWxlZCB0byBzZXQgZGVmYXVsdCBtb2RlXG4iKTsKPiA+ICsgICAg ICAgICAgICAgICByZXQgPSAtMTsKPiA+ICsgICAgICAgICAgICAgICBnb3RvIG91dF9jbG9zZTsK PiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICBtYWlubG9vcCA9IGdfbWFpbl9sb29wX25l dyhOVUxMLCBGQUxTRSk7Cj4gPiArICAgICAgIGlmICghbWFpbmxvb3ApIHsKPiA+ICsgICAgICAg ICAgICAgICBpZ3Rfd2FybigiRmFpbGVkIHRvIGNyZWF0ZSBHTWFpbkxvb3BcbiIpOwo+ID4gKyAg ICAgICAgICAgICAgIHJldCA9IC0xOwo+ID4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0X2Nsb3Nl Owo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIGlmICghaW50ZWxfZHBfY29tcGxpYW5j ZV9zZXR1cF9ob3RwbHVnKCkpIHsKPiA+ICsgICAgICAgICAgICAgICBpZ3Rfd2FybigiRmFpbGVk IHRvIGluaXRpYWxpemUgaG90cGx1ZyBzdXBwb3J0XG4iKTsKPiA+ICsgICAgICAgICAgICAgICBn b3RvIG91dF9tYWlubG9vcDsKPiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICB0ZXN0YWN0 aXZlX2NoYW5uZWwgPSBnX2lvX2NoYW5uZWxfdW5peF9uZXcoZmlsZW5vKHRlc3RfYWN0aXZlX2Zw KSk7Cj4gPiArICAgICAgIGlmICghdGVzdGFjdGl2ZV9jaGFubmVsKSB7Cj4gPiArICAgICAgICAg ICAgICAgaWd0X3dhcm4oIkZhaWxlZCB0byBjcmVhdGUgdGVzdF9hY3RpdmUgR0lPQ2hhbm5lbFxu Iik7Cj4gPiArICAgICAgICAgICAgICAgZ290byBvdXRfY2xvc2U7Cj4gPiArICAgICAgIH0KPiA+ ICsKPiA+ICsgICAgICAgcmV0ID0gZ19pb19hZGRfd2F0Y2godGVzdGFjdGl2ZV9jaGFubmVsLCBH X0lPX0lOIHwgR19JT19FUlIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rf aGFuZGxlciwgTlVMTCk7Cj4gPiArICAgICAgIGlmIChyZXQgPCAwKSB7Cj4gPiArICAgICAgICAg ICAgICAgaWd0X3dhcm4oIkZhaWxlZCB0byBhZGQgd2F0Y2ggb24gdWRldiBHSU9DaGFubmVsXG4i KTsKPiA+ICsgICAgICAgICAgICAgICBnb3RvIG91dF9jbG9zZTsKPiA+ICsgICAgICAgfQo+ID4g Kwo+ID4gKyAgICAgICBzdGRpbmNoYW5uZWwgPSBnX2lvX2NoYW5uZWxfdW5peF9uZXcoMCk7Cj4g PiArICAgICAgIGlmICghc3RkaW5jaGFubmVsKSB7Cj4gPiArICAgICAgICAgICAgICAgaWd0X3dh cm4oIkZhaWxlZCB0byBjcmVhdGUgc3RkaW4gR0lPQ2hhbm5lbFxuIik7Cj4gPiArICAgICAgICAg ICAgICAgZ290byBvdXRfaG90cGx1ZzsKPiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICBy ZXQgPSBnX2lvX2FkZF93YXRjaChzdGRpbmNoYW5uZWwsIEdfSU9fSU4gfCBHX0lPX0VSUiwgaW5w dXRfZXZlbnQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwo+ID4gKyAg ICAgICBpZiAocmV0IDwgMCkgewo+ID4gKyAgICAgICAgICAgICAgIGlndF93YXJuKCJGYWlsZWQg dG8gYWRkIHdhdGNoIG9uIHN0ZGluIEdJT0NoYW5uZWxcbiIpOwo+ID4gKyAgICAgICAgICAgICAg IGdvdG8gb3V0X3N0ZGlvOwo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIHJldCA9IDA7 Cj4gPiArCj4gPiArICAgICAgIGdfbWFpbl9sb29wX3J1bihtYWlubG9vcCk7Cj4gPiArCj4gPiAr b3V0X3N0ZGlvOgo+ID4gKyAgICAgICBnX2lvX2NoYW5uZWxfc2h1dGRvd24oc3RkaW5jaGFubmVs LCBUUlVFLCBOVUxMKTsKPiA+ICtvdXRfaG90cGx1ZzoKPiA+ICsgICAgICAgaW50ZWxfZHBfY29t cGxpYW5jZV9jbGVhbnVwX2hvdHBsdWcoKTsKPiA+ICtvdXRfbWFpbmxvb3A6Cj4gPiArICAgICAg IGdfbWFpbl9sb29wX3VucmVmKG1haW5sb29wKTsKPiA+ICtvdXRfY2xvc2U6Cj4gPiArICAgICAg IGNsZWFudXBfZGVidWdmcygpOwo+ID4gKyAgICAgICBjbG9zZShkcm1fZmQpOwo+ID4gKwo+ID4g KyAgICAgICBpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Cj4gPiArCj4gPiArICAgICAgIGlndF9pbmZv KCJDb21wbGlhbmNlIHRlc3RpbmcgYXBwbGljYXRpb24gZXhpdGluZ1xuIik7Cj4gPiArICAgICAg IGlndF9leGl0KCk7Cj4gPiArfQo+ID4gZGlmZiAtLWdpdCBhL3Rvb2xzL2ludGVsX2RwX2NvbXBs aWFuY2UuaCBiL3Rvb2xzL2ludGVsX2RwX2NvbXBsaWFuY2UuaAo+ID4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLmFkZTFlMmYKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsr KyBiL3Rvb2xzL2ludGVsX2RwX2NvbXBsaWFuY2UuaAo+ID4gQEAgLTAsMCArMSwzNSBAQAo+ID4g Ky8qCj4gPiArICogQ29weXJpZ2h0IDIwMTAgSW50ZWwgQ29ycG9yYXRpb24KPiA+ICsgKiBNYW5h c2kgTmF2YXJlIDxtYW5hc2kuZC5uYXZhcmVAaW50ZWwuY29tPgo+ID4gKyAqCj4gPiArICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKPiA+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQg ZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ID4gKyAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiA+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiA+ICsg KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgo+ID4gKyAqCj4gPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KPiA+ICsgKiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KPiA+ICsg Kgo+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gPiAr ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g SU4gTk8gRVZFTlQgU0hBTEwgVEhFCj4gPiArICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ID4gKyAqIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LCBBUklTSU5HCj4gPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ID4gKyAqIElOIFRIRSBTT0ZU V0FSRS4KPiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5jbHVkZSA8c3RkaW8uaD4KPiA+ICsjaW5jbHVk ZSA8c3RyaW5nLmg+Cj4gPiArI2luY2x1ZGUgPHN0ZGxpYi5oPgo+ID4gKyNpbmNsdWRlIDxnbGli Lmg+Cj4gPiArCj4gPiArZXh0ZXJuIGludCBkcm1fZmQ7Cj4gPiArCj4gPiArZ2Jvb2xlYW4gaW50 ZWxfZHBfY29tcGxpYW5jZV9zZXR1cF9ob3RwbHVnKHZvaWQpOwo+ID4gK3ZvaWQgaW50ZWxfZHBf Y29tcGxpYW5jZV9jbGVhbnVwX2hvdHBsdWcodm9pZCk7Cj4gPiArCj4gPiArLyogY2FsbGVkIGJ5 IHRoZSBob3RwbHVnIGNvZGUgKi8KPiA+ICtpbnQgdXBkYXRlX2Rpc3BsYXkoaW50IG1vZGUsIGJv b2wgaXNfY29tcGxpYW5jZV90ZXN0KTsKPiA+IGRpZmYgLS1naXQgYS90b29scy9pbnRlbF9kcF9j b21wbGlhbmNlX2hvdHBsdWcuYyBiL3Rvb2xzL2ludGVsX2RwX2NvbXBsaWFuY2VfaG90cGx1Zy5j Cj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uN2M3ZWE2NQo+ID4g LS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvdG9vbHMvaW50ZWxfZHBfY29tcGxpYW5jZV9ob3RwbHVn LmMKPiA+IEBAIC0wLDAgKzEsMTIzIEBACj4gPiArLyoKPiA+ICsgKiBDb3B5cmlnaHQgMjAxMCBJ bnRlbCBDb3Jwb3JhdGlvbgo+ID4gKyAqICAgSmVzc2UgQmFybmVzIDxqZXNzZS5iYXJuZXNAaW50 ZWwuY29tPgo+ID4gKyAqCj4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiA+ICsgKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLAo+ID4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwK PiA+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ID4gKyAqCj4gPiArICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hh bGwgYmUgaW5jbHVkZWQgaW4KPiA+ICsgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp b25zIG9mIHRoZSBTb2Z0d2FyZS4KPiA+ICsgKgo+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4g PiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCj4gPiArICog QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUgo+ID4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gPiArICogRlJPTSwgT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBE RUFMSU5HUwo+ID4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5j bHVkZSAiaWd0LmgiCj4gPiArI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gPiArI2luY2x1ZGUgPHN0cmlu Zy5oPgo+ID4gKyNpbmNsdWRlIDxzdGRsaWIuaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSA8c3lzL3N0 YXQuaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSAiaW50ZWxfZHBfY29tcGxpYW5jZS5oIgo+ID4gKyNp bmNsdWRlIDxsaWJ1ZGV2Lmg+Cj4gPiArc3RhdGljIHN0cnVjdCB1ZGV2X21vbml0b3IgKnVldmVu dF9tb25pdG9yOwo+ID4gK3N0YXRpYyBzdHJ1Y3QgdWRldiAqdWRldjsKPiA+ICtzdGF0aWMgR0lP Q2hhbm5lbCAqdWRldmNoYW5uZWw7Cj4gPiArCj4gPiArc3RhdGljIGdib29sZWFuIGhvdHBsdWdf ZXZlbnQoR0lPQ2hhbm5lbCAqc291cmNlLCBHSU9Db25kaXRpb24gY29uZGl0aW9uLAo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSkKPiA+ICt7Cj4gPiArICAg ICAgIHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2Owo+ID4gKyAgICAgICBkZXZfdCB1ZGV2X2Rldm51 bTsKPiA+ICsgICAgICAgc3RydWN0IHN0YXQgczsKPiA+ICsgICAgICAgY29uc3QgY2hhciAqaG90 cGx1ZzsKPiA+ICsKPiA+ICsgICAgICAgZGV2ID0gdWRldl9tb25pdG9yX3JlY2VpdmVfZGV2aWNl KHVldmVudF9tb25pdG9yKTsKPiA+ICsgICAgICAgaWYgKCFkZXYpCj4gPiArICAgICAgICAgICAg ICAgZ290byBvdXQ7Cj4gPiArCj4gPiArICAgICAgIHVkZXZfZGV2bnVtID0gdWRldl9kZXZpY2Vf Z2V0X2Rldm51bShkZXYpOwo+ID4gKyAgICAgICBmc3RhdChkcm1fZmQsICZzKTsKPiA+ICsKPiA+ ICsgICAgICAgaG90cGx1ZyA9IHVkZXZfZGV2aWNlX2dldF9wcm9wZXJ0eV92YWx1ZShkZXYsICJI T1RQTFVHIik7Cj4gPiArCj4gPiArICAgICAgIGlmIChtZW1jbXAoJnMuc3RfcmRldiwgJnVkZXZf ZGV2bnVtLCBzaXplb2YoZGV2X3QpKSA9PSAwICYmCj4gPiArICAgICAgICAgICBob3RwbHVnICYm IGF0b2koaG90cGx1ZykgPT0gMSkKPiA+ICsgICAgICAgICAgICAgICB1cGRhdGVfZGlzcGxheSgw LCBmYWxzZSk7Cj4gPiArCj4gPiArICAgICAgIHVkZXZfZGV2aWNlX3VucmVmKGRldik7Cj4gPiAr b3V0Ogo+ID4gKyAgICAgICByZXR1cm4gVFJVRTsKPiA+ICt9Cj4gPiArCj4gPiArCj4gPiArZ2Jv b2xlYW4gaW50ZWxfZHBfY29tcGxpYW5jZV9zZXR1cF9ob3RwbHVnKHZvaWQpCj4gPiArewo+ID4g KyAgICAgICBpbnQgcmV0Owo+ID4gKwo+ID4gKyAgICAgICB1ZGV2ID0gdWRldl9uZXcoKTsKPiA+ ICsgICAgICAgaWYgKCF1ZGV2KSB7Cj4gPiArICAgICAgICAgICAgICAgaWd0X3dhcm4oIkZhaWxl ZCB0byBjcmVhdGUgdWRldiBvYmplY3RcbiIpOwo+ID4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0 Owo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIHVldmVudF9tb25pdG9yID0gdWRldl9t b25pdG9yX25ld19mcm9tX25ldGxpbmsodWRldiwgInVkZXYiKTsKPiA+ICsgICAgICAgaWYgKCF1 ZXZlbnRfbW9uaXRvcikgewo+ID4gKyAgICAgICAgICAgICAgIGlndF93YXJuKCJGYWlsZWQgdG8g Y3JlYXRlIHVkZXYgZXZlbnQgbW9uaXRvclxuIik7Cj4gPiArICAgICAgICAgICAgICAgZ290byBv dXQ7Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgcmV0ID0gdWRldl9tb25pdG9yX2Zp bHRlcl9hZGRfbWF0Y2hfc3Vic3lzdGVtX2RldnR5cGUodWV2ZW50X21vbml0b3IsCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJkcm0iLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiZHJtX21pbm9yIik7Cj4gPiArICAgICAgIGlmIChyZXQgPCAwKSB7 Cj4gPiArICAgICAgICAgICAgICAgaWd0X3dhcm4oIkZhaWxlZCB0byBmaWx0ZXIgZm9yIGRybSBl dmVudHNcbiIpOwo+ID4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+ID4gKyAgICAgICB9Cj4g PiArCj4gPiArICAgICAgIHJldCA9IHVkZXZfbW9uaXRvcl9lbmFibGVfcmVjZWl2aW5nKHVldmVu dF9tb25pdG9yKTsKPiA+ICsgICAgICAgaWYgKHJldCA8IDApIHsKPiA+ICsgICAgICAgICAgICAg ICBpZ3Rfd2FybigiRmFpbGVkIHRvIGVuYWJsZSB1ZGV2IGV2ZW50IHJlY2VwdGlvblxuIik7Cj4g PiArICAgICAgICAgICAgICAgZ290byBvdXQ7Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAg ICAgdWRldmNoYW5uZWwgPQo+ID4gKyAgICAgICAgICAgICAgIGdfaW9fY2hhbm5lbF91bml4X25l dyh1ZGV2X21vbml0b3JfZ2V0X2ZkKHVldmVudF9tb25pdG9yKSk7Cj4gPiArICAgICAgIGlmICgh dWRldmNoYW5uZWwpIHsKPiA+ICsgICAgICAgICAgICAgICBpZ3Rfd2FybigiRmFpbGVkIHRvIGNy ZWF0ZSB1ZGV2IEdJT0NoYW5uZWxcbiIpOwo+ID4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+ ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIHJldCA9IGdfaW9fYWRkX3dhdGNoKHVkZXZj aGFubmVsLCBHX0lPX0lOIHwgR19JT19FUlIsIGhvdHBsdWdfZXZlbnQsCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVkZXYpOwo+ID4gKyAgICAgICBpZiAocmV0IDwgMCkgewo+ID4g KyAgICAgICAgICAgICAgIGlndF93YXJuKCJGYWlsZWQgdG8gYWRkIHdhdGNoIG9uIHVkZXYgR0lP Q2hhbm5lbFxuIik7Cj4gPiArICAgICAgICAgICAgICAgZ290byBvdXQ7Cj4gPiArICAgICAgIH0K PiA+ICsKPiA+ICsgICAgICAgcmV0dXJuIFRSVUU7Cj4gPiArCj4gPiArb3V0Ogo+ID4gKyAgICAg ICBpbnRlbF9kcF9jb21wbGlhbmNlX2NsZWFudXBfaG90cGx1ZygpOwo+ID4gKyAgICAgICByZXR1 cm4gRkFMU0U7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgaW50ZWxfZHBfY29tcGxpYW5jZV9jbGVh bnVwX2hvdHBsdWcodm9pZCkKPiA+ICt7Cj4gPiArICAgICAgIGlmICh1ZGV2Y2hhbm5lbCkKPiA+ ICsgICAgICAgICAgICAgICBnX2lvX2NoYW5uZWxfc2h1dGRvd24odWRldmNoYW5uZWwsIFRSVUUs IE5VTEwpOwo+ID4gKyAgICAgICBpZiAodWV2ZW50X21vbml0b3IpCj4gPiArICAgICAgICAgICAg ICAgdWRldl9tb25pdG9yX3VucmVmKHVldmVudF9tb25pdG9yKTsKPiA+ICsgICAgICAgaWYgKHVk ZXYpCj4gPiArICAgICAgICAgICAgICAgdWRldl91bnJlZih1ZGV2KTsKPiA+ICt9Cj4gPiAtLQo+ ID4gMi43LjQKPiA+IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n ZngK