From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manasi Navare Subject: Re: [PATCH i-g-t] tools: Add intel_dp_compliance for DisplayPort 1.2 compliance automation Date: Fri, 2 Dec 2016 11:27:41 -0800 Message-ID: <20161202192741.GA23283@intel.com> References: <1479786027-19231-1-git-send-email-manasi.d.navare@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 91AA06E9DE for ; Fri, 2 Dec 2016 19:24:58 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1479786027-19231-1-git-send-email-manasi.d.navare@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org UGV0cmkgYW5kIE1hcml1cywgY291bGQgeW91IHBsZWFzZSByZXZpZXcgdGhpcyBwYXRjaCB3aGVu IHlvdSBoYXZlIHRpbWU/ClRoaXMgdG9vbCBoYXMgYmVlbiBldm9sdmVkIHRocm91Z2ggdGhlIERQ Ui0xMjAgY29tcGxpYW5jZSB0ZXN0aW5nLgpJdCBoYXMgYmVlbiBmdWxseSB2ZXJpZmllZCB1c2lu ZyBEUFItMTIwIGFuZCBpdCBhZGRyZXNzZXMgdGhlIGNvbW1lbnRzIGFuZApjb25jZXJucyB0aGF0 IE1hcml1cyBoYWQgZmV3IG1vbnRocyBhZ28gb24gdGhlIG9sZGVyIHZlcnNpb24gb2YgdGhpcyB0 b29sLgoKUmVnYXJkcwpNYW5hc2kKCk9uIE1vbiwgTm92IDIxLCAyMDE2IGF0IDA3OjQwOjI3UE0g LTA4MDAsIE1hbmFzaSBOYXZhcmUgd3JvdGU6Cj4gVGhpcyBpcyB0aGUgdXNlcnNwYWNlIGNvbXBv bmVudCBvZiB0aGUgRGlzcGxheXBvcnQgQ29tcGxpYW5jZQo+IHRlc3Rpbmcgc29mdHdhcmUgcmVx dWlyZWQgZm9yIGNvbXBsaWFuY2UgdGVzdGluZyBvZiB0aGUgSTkxNQo+IERpc3BsYXkgUG9ydCBk cml2ZXIuIFRoaXMgbXVzdCBiZSBydW5uaW5nIGluIG9yZGVyIHRvIHN1Y2Nlc3NmdWxseQo+IGNv bXBsZXRlIERpc3BsYXkgUG9ydCBjb21wbGlhbmNlIHRlc3RpbmcuIFRoaXMgYXBwIGFuZCB0aGUg a2VybmVsCj4gY29kZSB0aGF0IGFjY29tcGFuaWVzIGl0IGhhcyBiZWVuIHdyaXR0ZW4gdG8gc2F0 aWZ5IHRoZSByZXF1aXJlbWVudHMKPiBvZiB0aGUgRGlzcGxheXBvcnQgTGluayBDVFMgMS4yIHJl djEuMSBzcGVjaWZpY2F0aW9uIGZyb20gVkVTQS4KPiBOb3RlIHRoYXQgdGhpcyBhcHBsaWNhdGlv biBkb2VzIG5vdCBzdXBwb3J0IGVEUCBjb21wbGlhbmNlIHRlc3RpbmcuCj4gVGhpcyB1dGlsaXR5 IGhhcyBhbiBhdXRvbWF0aW9uIHN1cHBvcnQgZm9yIHRoZSBMaW5rIHRyYWluaW5nIHRlc3RzCj4g KDQuMy4xLjEuIC0gNC4zLjIuMyksIEVESUQgdGVzdHMgKDQuMi4yLjMKPiAtIDQuMi4yLjYpIGFu ZCBWaWRlbyBQYXR0ZXJuIGdlbmVyYXRpb24gdGVzdHMgKDQuMy4zLjEpIGZyb20gQ1RTCj4gc3Bl Y2lmaWNhdGlvbiAxLjIgUmV2IDEuMS4KPiAKPiBUaGlzIHRvb2wgaGFzIHRoZSBzdXBwb3J0IGZv ciByZXNwb25kaW5nIHRvIHRoZSBob3RwbHVnIHVldmVudHMKPiBzZW50IGJ5IGNvbXBsaWFuY2Ug dGVzdHRpbmcgdW5pdCBhZnRlciBlYWNoIHRlc3QuCj4gCj4gVGhlIExpbnV4IERVVCBydW5uaW5n IHRoaXMgdXRpbGl0eSBtdXN0IGJlIGluIHRleHQgKGNvbnNvbGUpIG1vZGUKPiBhbmQgY2Fubm90 IGhhdmUgYW55IG90aGVyIGRpc3BsYXkgbWFuYWdlciBydW5uaW5nLiBTaW5jZSB0aGlzIHVzZXMK PiBzeXNmcyBub2RlcyBmb3Iga2VybmVsIGludGVyYWN0aW9uLCB0aGlzIHV0aWxpdHkgc2hvdWxk IGJlIHJ1biBhcwo+IFJvb3QuIE9uY2UgdGhpcyB1c2VyIGFwcGxpY2F0aW9uIGlzIHVwIGFuZCBy dW5uaW5nLCB3YWl0aW5nIGZvcgo+IHRlc3QgcmVxdWVzdHMsIHRoZSB0ZXN0IGFwcGxpYW5jZSBz b2Z0d2FyZSBvbiB0aGUgd2luZG93cyBob3N0Cj4gY2FuIG5vdyBiZSB1c2VkIHRvIGV4ZWN1dGUg dGhlIGNvbXBsaWFuY2UgdGVzdHMuCj4gCj4gVGhpcyBhcHAgaXMgYmFzZWQgb24gc29tZSBwcmlv ciB3b3JrIGRvbmUgaW4gQXByaWwgMjAxNSAoYnkKPiBUb2RkIFByZXZpdGUgPHRwcmV2aXRlQGdt YWlsLmNvbT4pCj4gCj4gU2lnbmVkLW9mZi1ieTogTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQubmF2 YXJlQGludGVsLmNvbT4KPiAtLS0KPiAgdG9vbHMvTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAg ICAgfCAgICAzICstCj4gIHRvb2xzL01ha2VmaWxlLnNvdXJjZXMgICAgICAgICAgICAgIHwgICAg NyArCj4gIHRvb2xzL2ludGVsX2RwX2NvbXBsaWFuY2UuYyAgICAgICAgIHwgMTA0NSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICB0b29scy9pbnRlbF9kcF9jb21wbGlhbmNl LmggICAgICAgICB8ICAgMzUgKysKPiAgdG9vbHMvaW50ZWxfZHBfY29tcGxpYW5jZV9ob3RwbHVn LmMgfCAgMTIzICsrKysrCj4gIDUgZmlsZXMgY2hhbmdlZCwgMTIxMiBpbnNlcnRpb25zKCspLCAx IGRlbGV0aW9uKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9pbnRlbF9kcF9jb21wbGlh bmNlLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2ludGVsX2RwX2NvbXBsaWFuY2UuaAo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvaW50ZWxfZHBfY29tcGxpYW5jZV9ob3RwbHVnLmMK PiAKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvTWFrZWZpbGUuYW0gYi90b29scy9NYWtlZmlsZS5hbQo+ IGluZGV4IDE4Zjg2ZjYuLmVhYzZkNjQgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvTWFrZWZpbGUuYW0K PiArKysgYi90b29scy9NYWtlZmlsZS5hbQo+IEBAIC0xMyw3ICsxMyw3IEBAIEFNX0NQUEZMQUdT ID0gLUkkKHRvcF9zcmNkaXIpIC1JJCh0b3Bfc3JjZGlyKS9saWIKPiAgQU1fQ0ZMQUdTID0gJChE RUJVR19DRkxBR1MpICQoRFJNX0NGTEFHUykgJChQQ0lBQ0NFU1NfQ0ZMQUdTKSAkKENXQVJORkxB R1MpIFwKPiAgCSAgICAkKENBSVJPX0NGTEFHUykgJChMSUJVTldJTkRfQ0ZMQUdTKSAtRFBLR0RB VEFESVI9XCIkKHBrZ2RhdGFkaXIpXCIgXAo+ICAJICAgICQoV0VSUk9SX0NGTEFHUykKPiAtTERB REQgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmludGVsX3Rvb2xzLmxhCj4gK0xEQUREID0gJCh0 b3BfYnVpbGRkaXIpL2xpYi9saWJpbnRlbF90b29scy5sYSAkKEdMSUJfTElCUykKPiAgQU1fTERG TEFHUyA9IC1XbCwtLWFzLW5lZWRlZAo+ICAKPiAgCj4gQEAgLTI0LDYgKzI0LDcgQEAgbW9kdWxl ZGlyID0gJChsaWJkaXIpCj4gIGludGVsX2F1YmR1bXBfbGFfTERGTEFHUyA9IC1tb2R1bGUgLWF2 b2lkLXZlcnNpb24gLW5vLXVuZGVmaW5lZAo+ICBpbnRlbF9hdWJkdW1wX2xhX1NPVVJDRVMgPSBh dWJkdW1wLmMKPiAgaW50ZWxfYXViZHVtcF9sYV9MSUJBREQgPSAkKHRvcF9idWlsZGRpcikvbGli L2xpYmludGVsX3Rvb2xzLmxhIC1sZGwKPiAraW50ZWxfZHBfY29tcGxpYW5jZV9sYV9MSUJBREQg PSAkKExEQUREKQo+ICAKPiAgYmluX1NDUklQVFMgPSBpbnRlbF9hdWJkdW1wCj4gIENMRUFORklM RVMgPSAkKGJpbl9TQ1JJUFRTKQo+IGRpZmYgLS1naXQgYS90b29scy9NYWtlZmlsZS5zb3VyY2Vz IGIvdG9vbHMvTWFrZWZpbGUuc291cmNlcwo+IGluZGV4IGJlNTg4NzEuLjA5YzA2NjcgMTAwNjQ0 Cj4gLS0tIGEvdG9vbHMvTWFrZWZpbGUuc291cmNlcwo+ICsrKyBiL3Rvb2xzL01ha2VmaWxlLnNv dXJjZXMKPiBAQCAtMTMsNiArMTMsNyBAQCB0b29sc19wcm9nX2xpc3RzID0JCVwKPiAgCWludGVs X2Jpb3NfcmVhZGVyCVwKPiAgCWludGVsX2Rpc3BsYXlfY3JjCVwKPiAgCWludGVsX2Rpc3BsYXlf cG9sbGVyCVwKPiArCWludGVsX2RwX2NvbXBsaWFuY2UJXAo+ICAJaW50ZWxfZm9yY2V3YWtlZAlc Cj4gIAlpbnRlbF9ncHVfZnJlcXVlbmN5CVwKPiAgCWludGVsX2Zpcm13YXJlX2RlY29kZQlcCj4g QEAgLTU1LDMgKzU2LDkgQEAgaW50ZWxfbDNfcGFyaXR5X1NPVVJDRVMgPQlcCj4gIAlpbnRlbF9s M19wYXJpdHkuaAlcCj4gIAlpbnRlbF9sM191ZGV2X2xpc3RlbmVyLmMKPiAgCj4gK2ludGVsX2Rw X2NvbXBsaWFuY2VfU09VUkNFUyA9IFwKPiArICAgICAgICBpbnRlbF9kcF9jb21wbGlhbmNlLmMg XAo+ICsgICAgICAgIGludGVsX2RwX2NvbXBsaWFuY2UuaCBcCj4gKyAgICAgICAgaW50ZWxfZHBf Y29tcGxpYW5jZV9ob3RwbHVnLmMgXAo+ICsgICAgICAgICQoTlVMTCkKPiArCj4gZGlmZiAtLWdp dCBhL3Rvb2xzL2ludGVsX2RwX2NvbXBsaWFuY2UuYyBiL3Rvb2xzL2ludGVsX2RwX2NvbXBsaWFu Y2UuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uOTY3ZDJmOAo+IC0t LSAvZGV2L251bGwKPiArKysgYi90b29scy9pbnRlbF9kcF9jb21wbGlhbmNlLmMKPiBAQCAtMCww ICsxLDEwNDUgQEAKPiArLyoKPiArICogQ29weXJpZ2h0ID8gMjAxNC0yMDE1IEludGVsIENvcnBv cmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks Cj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1v ZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4g KyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiAr ICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF UiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAqIERpc3BsYXlwb3J0 IENvbXBsaWFuY2UgVGVzdGluZyBBcHBsaWNhdGlvbgo+ICsgKgo+ICsgKiBUaGlzIGlzIHRoZSB1 c2Vyc3BhY2UgY29tcG9uZW50IG9mIHRoZSBEaXNwbGF5cG9ydCBDb21wbGlhbmNlIHRlc3RpbmcK PiArICogc29mdHdhcmUgcmVxdWlyZWQgZm9yIGNvbXBsaWFuY2UgdGVzdGluZyBvZiB0aGUgSTkx NSBEaXNwbGF5IFBvcnQgZHJpdmVyLgo+ICsgKiBUaGlzIG11c3QgYmUgcnVubmluZyBpbiBvcmRl ciB0byBzdWNjZXNzZnVsbHkgY29tcGxldGUgRGlzcGxheSBQb3J0Cj4gKyAqIGNvbXBsaWFuY2Ug dGVzdGluZy4gVGhpcyBhcHAgYW5kIHRoZSBrZXJuZWwgY29kZSB0aGF0IGFjY29tcGFuaWVzIGl0 IGhhcyBiZWVuCj4gKyAqIHdyaXR0ZW4gdG8gc2F0aWZ5IHRoZSByZXF1aXJlbWVudHMgb2YgdGhl IERpc3BsYXlwb3J0IExpbmsgQ1RTIDEuMiByZXYxLjEKPiArICogc3BlY2lmaWNhdGlvbiBmcm9t IFZFU0EuIE5vdGUgdGhhdCB0aGlzIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBvcnQgZURQCj4g KyAqIGNvbXBsaWFuY2UgdGVzdGluZy4KPiArICoKPiArICogQ29tcGxpYW5jZSBUZXN0aW5nIHJl cXVpcmVzIHNldmVyYWwgY29tcG9uZW50czoKPiArICogICAtIEEga2VybmVsIGJ1aWxkIHRoYXQg Y29udGFpbnMgdGhlIHBhdGNoIHNldCBmb3IgRFAgY29tcGxpYW5jZSBzdXBwb3J0Cj4gKyAqICAg LSBBIERpc3BsYXlwb3J0IENvbXBsaWFuY2UgVGVzdGluZyBhcHBsaWFuY2Ugc3VjaCBhcyBVbmln cmFmLURQUjEyMAo+ICsgKiAgIC0gVGhpcyB1c2VyIGFwcGxpY2F0aW9uCj4gKyAqICAgLSBBIHdp bmRvd3MgaG9zdCBtYWNoaW5lIHRvIHJ1biB0aGUgRFBSIHRlc3Qgc29mdHdhcmUKPiArICogICAt IFJvb3QgYWNjZXNzIG9uIHRoZSBEVVQgZHVlIHRvIHRoZSB1c2Ugb2Ygc3lzZnMgdXRpbGl0eQo+ ICsgKgo+ICsgKiBUZXN0IFNldHVwOgo+ICsgKiBJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0 aGF0IHRoZSB3aW5kb3dzIGhvc3QsIHRlc3QgYXBwbGlhbmNlIGFuZCBEVVQKPiArICogYmUgZnJl c2hseSByZXN0YXJ0ZWQgYmVmb3JlIGFueSB0ZXN0aW5nIGJlZ2lucyB0byBlbnN1cmUgdGhhdCBh bnkgcHJldmlvdXMKPiArICogY29uZmlndXJhdGlvbnMgYW5kIHNldHRpbmdzIHdpbGwgbm90IGlu dGVyZmVyZSB3aXRoIHRlc3QgcHJvY2Vzcy4gUmVmZXIgdG8KPiArICogdGhlIHRlc3QgYXBwbGlh bmNlIGRvY3VtZW50YXRpb24gZm9yIHNldHVwLCBzb2Z0d2FyZSBpbnN0YWxsYXRpb24gYW5kCj4g KyAqIG9wZXJhdGlvbiBzcGVjaWZpYyB0byB0aGF0IGRldmljZS4KPiArICoKPiArICogVGhlIExp bnV4IERVVCBtdXN0IGJlIGluIHRleHQgKGNvbnNvbGUpIG1vZGUgYW5kIGNhbm5vdCBoYXZlIGFu eSBvdGhlcgo+ICsgKiBkaXNwbGF5IG1hbmFnZXIgcnVubmluZy4gWW91IG11c3QgYmUgbG9nZ2Vk IGluIGFzIHJvb3QgdG8gcnVuIHRoaXMgdXNlciBhcHAuCj4gKyAqIE9uY2UgdGhlIHVzZXIgYXBw bGljYXRpb24gaXMgdXAgYW5kIHJ1bm5pbmcsIHdhaXRpbmcgZm9yIHRlc3QgcmVxdWVzdHMsIHRo ZQo+ICsgKiBzb2Z0d2FyZSBvbiB0aGUgd2luZG93cyBob3N0IGNhbiBub3cgYmUgdXNlZCB0byBl eGVjdXRlIHRoZSBjb21wbGlhbmNlIHRlc3RzLgo+ICsgKgo+ICsgKiBUaGlzIHVzZXJzcGFjZSBh cHBsaWNhdGlvbiBzdXBwb3J0cyBmb2xsb3dpbmcgdGVzdHMgZnJvbSB0aGUgRFAgQ1RTIFNwZWMK PiArICogUmV2IDEuMToKPiArICogICAtIEVESUQgVGVzdHM6IFN1cHBvcnRzIEVESUQgcmVhZCAo NC4yLjIuMyksRURJRCBSZWFkIGZhaWx1cmUgYW5kIGNvcnJ1cHRpb24KPiArICogICAgIGRldGVj dGlvbiB0ZXN0cyAoNC4yLjIuNCwgNC4yLjIuNSwgNC4yLjIuNikKPiArICogICAtIFZpZGVvIFBh dHRlcm4gZ2VuZXJhdGlvbiB0ZXN0czogVGhpcyBzdXBwb3J0cyBvbmx5IHRoZSAyNCBhbmQgMThi cHAgY29sb3IKPiArICogICAgIHJhbXAgdGVzdCBwYXR0ZXJuICg0LjMuMy4xKS4KPiArICoKPiAr ICogQ29ubmVjdGlvbnMgKHJlcXVpcmVkKToKPiArICogICAtIFRlc3QgQXBwbGlhbmNlIGNvbm5l Y3RlZCB0byB0aGUgZXh0ZXJuYWwgRGlzcGxheXBvcnQgY29ubmVjdG9yIG9uIHRoZSBEVVQKPiAr ICogICAtIFRlc3QgQXBwbGlhbmNlIE1vbml0b3IgT3V0IGNvbm5lY3RlZCB0byBEaXNwbGF5cG9y dCBjb25uZWN0b3Igb24gdGhlCj4gKyAqIG1vbml0b3IKPiArICogICAtIFRlc3QgYXBwbGlhbmNl IGNvbm5lY3RlZCB0byB0aGUgV2luZG93cyBIb3N0IHZpYSBVU0IKPiArICoKPiArICogRGVidWdm cyBGaWxlczoKPiArICogVGhlIGZpbGUgcm9vdCBmb3IgYWxsICB0aGUgZGVidWdmcyBmaWxlOgo+ ICsgKiAvc3lzL2tlcm5lbC9kZWJ1Zy9kcmkvMC8KPiArICoKPiArICogVGhlIHNwZWNpZmljIGZp bGVzIGFyZSBhcyBmb2xsb3dzOgo+ICsgKgo+ICsgKiBpOTE1X2RwX3Rlc3RfYWN0aXZlCj4gKyAq IEEgc2ltcGxlIGZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgY29tcGxpYW5jZSB0 ZXN0aW5nIGlzIGN1cnJlbnRseQo+ICsgKiBhY3RpdmUgaW4gdGhlIGtlcm5lbC4gVGhpcyBmbGFn IGlzIHBvbGxlZCBieSB1c2Vyc3BhY2UgYW5kIG9uY2Ugc2V0LCBpbnZva2VzCj4gKyAqIHRoZSB0 ZXN0IGhhbmRsZXIgaW4gdGhlIHVzZXIgYXBwLiBUaGlzIGZsYWcgaXMgc2V0IGJ5IHRoZSB0ZXN0 IGhhbmRsZXIgaW4gdGhlCj4gKyAqIGtlcm5lbCBhZnRlciByZWFkaW5nIHRoZSByZWdpc3RlcnMg cmVxdWVzdGVkIGJ5IHRoZSB0ZXN0IGFwcGxpYW5jZS4KPiArICoKPiArICogaTkxNV9kcF90ZXN0 X2RhdGEKPiArICogVGVzdCBkYXRhIGlzIHVzZWQgYnkgdGhlIGtlcm5lbCB0byBwYXNzIHBhcmFt ZXRlcnMgdG8gdGhlIHVzZXIgYXBwLiBFZzogSW4KPiArICogY2FzZSBvZiBFRElEIHRlc3RzLCB0 aGUgZGF0YSB0aGF0IGlzIGRlbGl2ZXJlZCB0byB0aGUgdXNlcnNwYWNlIGlzIHRoZSB2aWRlbwo+ ICsgKiBtb2RlIHRvIGJlIHNldCBmb3IgdGhlIHRlc3QuCj4gKyAqIEluIGNhc2Ugb2YgdmlkZW8g cGF0dGVybiB0ZXN0LCB0aGUgZGF0YSB0aGF0IGlzIGRlbGl2ZXJlZCB0byB0aGUgdXNlcnNwYWNl IGlzCj4gKyAqIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSB0ZXN0IHBhdHRlcm4gYW5kIHRo ZSBiaXRzIHBlciBjb2xvciB2YWx1ZS4KPiArICoKPiArICogaTkxNV9kcF90ZXN0X3R5cGUKPiAr ICogVGhlIHRlc3QgdHlwZSB2YXJpYWJsZSBpbnN0cnVjdHMgdGhlIHVzZXIgYXBwIGFzIHRvIHdo YXQgdGhlIHJlcXVlc3RlZCB0ZXN0Cj4gKyAqIHdhcyBmcm9tIHRoZSBzaW5rIGRldmljZS4gVGhl c2UgdmFsdWVzIGRlZmluZWQgYXQgdGhlIHRvcCBvZiB0aGUgYXBwbGljYXRpb24ncwo+ICsgKiBt YWluIGltcGxlbWVudGF0aW9uIGZpbGUgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgdmFs dWVzIGRlZmluZWQgaW4gdGhlCj4gKyAqIGtlcm5lbCdzIGRybV9kcF9oZWxwZXIuaCBmaWxlLgo+ ICsgKiBUaGlzIGFwcCBpcyBiYXNlZCBvbiBzb21lIHByaW9yIHdvcmsgc3VibWl0dGVkIGluIEFw cmlsIDIwMTUgYnkgVG9kZCBQcmV2aXRlCj4gKyAqICg8dHByZXZpdGVAZ21haWwuY29tPikKPiAr ICoKPiArICoKPiArICogVGhpcyB0b29sIGNhbiBiZSBydW4gYXM6Cj4gKyAqIC4vaW50ZWxfZHBf Y29tcGxpYW5jZSAgSXQgd2lsbCB3YWl0IHRpbGwgeW91IHN0YXJ0IGNvbXBsaWFuY2Ugc3VpdGUg ZnJvbQo+ICsgKiBEUFIgMTIwLgo+ICsgKiAuL2ludGVsX2RwX2NvbXBsaWFuY2UgLWggIFRoaXMg d2lsbCBvcGVuIHRoZSBoZWxwCj4gKyAqIC4vaW50ZWxfZHBfY29tcGxpYW5jZSAtaSAgVGhpcyB3 aWxsIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudAo+ICsgKiBjb25uZWN0b3JzL0NS VENzLiBUaGlzIGNhbiBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS4KPiArICoKPiArICog QXV0aG9yczoKPiArICogICAgTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQubmF2YXJlQGludGVsLmNv bT4KPiArICoKPiArICogRWxlbWVudHMgb2YgdGhlIG1vZGVzZXQgY29kZSBhZGFwdGVkIGZyb20g RGF2aWQgSGVycm1hbm4ncwo+ICsgKiBEUk0gbW9kZXNldCBleGFtcGxlCj4gKyAqCj4gKyAqLwo+ ICsjaW5jbHVkZSAiaWd0LmgiCj4gKyNpbmNsdWRlIDxlcnJuby5oPgo+ICsjaW5jbHVkZSA8Z2V0 b3B0Lmg+Cj4gKyNpbmNsdWRlIDxtYXRoLmg+Cj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4KPiArI2lu Y2x1ZGUgPHN0ZGJvb2wuaD4KPiArI2luY2x1ZGUgPHN0cmluZ3MuaD4KPiArI2luY2x1ZGUgPHVu aXN0ZC5oPgo+ICsjaW5jbHVkZSA8dGVybWlvcy5oPgo+ICsjaW5jbHVkZSA8c3lzL3BvbGwuaD4K PiArI2luY2x1ZGUgPHN5cy90aW1lLmg+Cj4gKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KPiArI2lu Y2x1ZGUgPHN5cy90eXBlcy5oPgo+ICsjaW5jbHVkZSA8c3lzL3N0YXQuaD4KPiArI2luY2x1ZGUg PHN5cy9zZWxlY3QuaD4KPiArI2luY2x1ZGUgPGFzc2VydC5oPgo+ICsjaW5jbHVkZSA8c2lnbmFs Lmg+Cj4gKyNpbmNsdWRlIDxmY250bC5oPgo+ICsjaW5jbHVkZSA8dGltZS5oPgo+ICsKPiArI2lu Y2x1ZGUgImludGVsX2RwX2NvbXBsaWFuY2UuaCIKPiArCj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4K PiArI2luY2x1ZGUgPHNpZ25hbC5oPgo+ICsKPiArLyogVXNlciBJbnB1dCBkZWZpbml0aW9ucyAq Lwo+ICsjZGVmaW5lIEhFTFBfREVTQ1JJUFRJT04gMQo+ICsKPiArLyogRGVidWdmcyBmaWxlIGRl ZmluaXRpb25zICovCj4gKyNkZWZpbmUgSU5URUxfRFBfVEVTVF9UWVBFX0ZJTEUJCSJpOTE1X2Rw X3Rlc3RfdHlwZSIKPiArI2RlZmluZSBJTlRFTF9EUF9URVNUX0FDVElWRV9GSUxFCSJpOTE1X2Rw X3Rlc3RfYWN0aXZlIgo+ICsjZGVmaW5lIElOVEVMX0RQX1RFU1RfREFUQV9GSUxFCQkiaTkxNV9k cF90ZXN0X2RhdGEiCj4gKwo+ICsvKiBEUk0gZGVmaW5pdGlvbnMgLSBtdXN0IGJlIGtlcHQgaW4g c3luYyB3aXRoIHRoZSBEUk0gaGVhZGVyICovCj4gKyNkZWZpbmUgRFBfVEVTVF9MSU5LX1RSQUlO SU5HCQkoMSA8PCAwKQo+ICsjZGVmaW5lIERQX1RFU1RfTElOS19WSURFT19QQVRURVJOCSgxIDw8 IDEpCj4gKyNkZWZpbmUgRFBfVEVTVF9MSU5LX0VESURfUkVBRAkJKDEgPDwgMikKPiArI2RlZmlu ZSBEUF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTgkoMSA8PCAzKSAvKiBEUENEID49IDEuMSAq Lwo+ICsKPiArI2RlZmluZSBEUF9DT01QTElBTkNFX1RFU1RfVFlQRV9NQVNLCShEUF9URVNUX0xJ TktfVFJBSU5JTkcgICAgICB8CVwKPiArCQkJCQkgRFBfVEVTVF9MSU5LX1ZJREVPX1BBVFRFUk4g fAlcCj4gKwkJCQkJIERQX1RFU1RfTElOS19FRElEX1JFQUQgICAgIHwJXAo+ICsJCQkJCSBEUF9U RVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTikKPiArCj4gKy8qIE5PVEU6IFRoZXNlIG11c3QgYmUg a2VwdCBpbiBzeW5jIHdpdGggdGhlIGRlZmluaXRpb25zIGluIGludGVsX2RwLmMgKi8KPiArI2Rl ZmluZSBJTlRFTF9EUF9FRElEX1NISUZUX01BU0sJMAo+ICsjZGVmaW5lIElOVEVMX0RQX0VESURf T0sJCSgwIDw8IElOVEVMX0RQX0VESURfU0hJRlRfTUFTSykKPiArI2RlZmluZSBJTlRFTF9EUF9F RElEX0NPUlJVUFQJCSgxIDw8IElOVEVMX0RQX0VESURfU0hJRlRfTUFTSykKPiArI2RlZmluZSBJ TlRFTF9EUF9SRVNPTFVUSU9OX1NISUZUX01BU0sJMAo+ICsjZGVmaW5lIElOVEVMX0RQX1JFU09M VVRJT05fUFJFRkVSUkVECSgxIDw8IElOVEVMX0RQX1JFU09MVVRJT05fU0hJRlRfTUFTSykKPiAr I2RlZmluZSBJTlRFTF9EUF9SRVNPTFVUSU9OX1NUQU5EQVJECSgyIDw8IElOVEVMX0RQX1JFU09M VVRJT05fU0hJRlRfTUFTSykKPiArI2RlZmluZSBJTlRFTF9EUF9SRVNPTFVUSU9OX0ZBSUxTQUZF CSgzIDw8IElOVEVMX0RQX1JFU09MVVRJT05fU0hJRlRfTUFTSykKPiArI2RlZmluZSBEUF9DT01Q TElBTkNFX1ZJREVPX01PREVfTUFTSwkoSU5URUxfRFBfUkVTT0xVVElPTl9QUkVGRVJSRUQJfFwK PiArCQkJCQkgSU5URUxfRFBfUkVTT0xVVElPTl9TVEFOREFSRAl8XAo+ICsJCQkJCSBJTlRFTF9E UF9SRVNPTFVUSU9OX0ZBSUxTQUZFKQo+ICsKPiArLyogR2xvYmFsIGZpbGUgcG9pbnRlcnMgZm9y IHRoZSBzeXNmcyBmaWxlcyAqLwo+ICtGSUxFICp0ZXN0X2FjdGl2ZV9mcCwgKnRlc3RfZGF0YV9m cCwgKnRlc3RfdHlwZV9mcDsKPiArCj4gK2Jvb2wgdmlkZW9fcGF0dGVybl9mbGFnOwo+ICsKPiAr LyogVmlkZW8gcGF0dGVybiB0ZXN0IGdsb2JhbHMgKi8KPiArdWludDE2X3QgaGRpc3BsYXk7Cj4g K3VpbnQxNl90IHZkaXNwbGF5Owo+ICt1aW50OF90IGJpdGRlcHRoOwo+ICsKPiArc3RhdGljIGlu dCB0aW9fZmQ7Cj4gK3N0cnVjdCB0ZXJtaW9zIHNhdmVkX3RpbzsKPiArCj4gK2RybU1vZGVSZXMg KnJlc291cmNlczsKPiAraW50IGRybV9mZCwgbW9kZXM7Cj4gK3VpbnQ2NF90IHRpbGluZyA9IExP Q0FMX0RSTV9GT1JNQVRfTU9EX05PTkU7Cj4gK3VpbnQzMl90IGRlcHRoID0gMjQsIHN0cmlkZSwg YnBwOwo+ICtpbnQgc3BlY2lmaWVkX21vZGVfbnVtID0gLTEsIHNwZWNpZmllZF9kaXNwX2lkID0g LTE7Cj4gK2ludCB3aWR0aCwgaGVpZ2h0Owo+ICtlbnVtIHsKPiArCUlOVEVMX01PREVfSU5WQUxJ RCA9IC0xLAo+ICsJSU5URUxfTU9ERV9OT05FID0gMCwKPiArCUlOVEVMX01PREVfUFJFRkVSUkVE LAo+ICsJSU5URUxfTU9ERV9TVEFOREFSRCwKPiArCUlOVEVMX01PREVfRkFJTFNBRkUsCj4gKwlJ TlRFTF9NT0RFX1ZJREVPX1BBVFRFUk5fVEVTVAo+ICt9IGludGVsX2Rpc3BsYXlfbW9kZTsKPiAr Cj4gK3N0cnVjdCB0ZXN0X3ZpZGVvX3BhdHRlcm4gewo+ICsJdWludDE2X3QgaGRpc3BsYXk7Cj4g Kwl1aW50MTZfdCB2ZGlzcGxheTsKPiArCXVpbnQ4X3QgYml0ZGVwdGg7Cj4gKwl1aW50MzJfdCBm YjsKPiArCXVpbnQzMl90IHNpemU7Cj4gKwlzdHJ1Y3QgaWd0X2ZiIGZiX3BhdHRlcm47Cj4gKwlk cm1Nb2RlTW9kZUluZm8gbW9kZTsKPiArCXVpbnQzMl90ICpwaXhtYXA7Cj4gK307Cj4gKwo+ICtz dHJ1Y3QgY29ubmVjdG9yIHsKPiArCXVpbnQzMl90IGlkOwo+ICsJaW50IG1vZGVfdmFsaWQ7Cj4g Kwlkcm1Nb2RlTW9kZUluZm8gbW9kZSwgbW9kZV9zdGFuZGFyZCwgbW9kZV9wcmVmZXJyZWQsIG1v ZGVfZmFpbHNhZmU7Cj4gKwlkcm1Nb2RlRW5jb2RlciAqZW5jb2RlcjsKPiArCWRybU1vZGVDb25u ZWN0b3IgKmNvbm5lY3RvcjsKPiArCWludCBjcnRjOwo+ICsJaW50IHBpcGU7Cj4gKwkvKiBTdGFu ZGFyZCBhbmQgcHJlZmVycmVkIGZyYW1lIGJ1ZmZlciovCj4gKwl1aW50MzJfdCBmYiwgZmJfd2lk dGgsIGZiX2hlaWdodCwgZmJfc2l6ZTsKPiArCXVpbnQ4X3QgKnBpeG1hcDsKPiArCXN0cnVjdCBp Z3RfZmIgZmJfdmlkZW9fcGF0dGVybjsKPiArCS8qIEZhaWxzYWZlIGZyYW1lYnVmZmVyIC0gbm90 ZSB0aGlzIGlzIGEgMTYtYml0IGJ1ZmZlciAqLwo+ICsJdWludDMyX3QgZmFpbHNhZmVfZmIsIGZh aWxzYWZlX3dpZHRoLCBmYWlsc2FmZV9oZWlnaHQ7Cj4gKwl1aW50MzJfdCBmYWlsc2FmZV9zaXpl Owo+ICsJdWludDhfdCAqZmFpbHNhZmVfcGl4bWFwOwo+ICsJc3RydWN0IGlndF9mYiBmYl9mYWls c2FmZV9wYXR0ZXJuOwo+ICsJc3RydWN0IHRlc3RfdmlkZW9fcGF0dGVybiB0ZXN0X3BhdHRlcm47 Cj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBjbGVhcl90ZXN0X2FjdGl2ZSh2b2lkKQo+ICt7Cj4g KwlyZXdpbmQodGVzdF9hY3RpdmVfZnApOwo+ICsJZnByaW50Zih0ZXN0X2FjdGl2ZV9mcCwgIiVk IiwgMCk7Cj4gKwlmZmx1c2godGVzdF9hY3RpdmVfZnApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBzZXR1cF9kZWJ1Z2ZzX2ZpbGVzKHZvaWQpCj4gK3sKPiArCXRlc3RfdHlwZV9mcCA9IGlndF9k ZWJ1Z2ZzX2ZvcGVuKElOVEVMX0RQX1RFU1RfVFlQRV9GSUxFLCAiciIpOwo+ICsJaWd0X3JlcXVp cmUodGVzdF90eXBlX2ZwKTsKPiArCj4gKwl0ZXN0X2RhdGFfZnAgPSBpZ3RfZGVidWdmc19mb3Bl bihJTlRFTF9EUF9URVNUX0RBVEFfRklMRSwgInIiKTsKPiArCWlndF9yZXF1aXJlKHRlc3RfZGF0 YV9mcCk7Cj4gKwo+ICsJdGVzdF9hY3RpdmVfZnAgPSBpZ3RfZGVidWdmc19mb3BlbihJTlRFTF9E UF9URVNUX0FDVElWRV9GSUxFLCAidysiKTsKPiArCWlndF9yZXF1aXJlKHRlc3RfYWN0aXZlX2Zw KTsKPiArCj4gKwkvKiBSZXNldCB0aGUgYWN0aXZlIGZsYWcgZm9yIHNhZmV0eSAqLwo+ICsJY2xl YXJfdGVzdF9hY3RpdmUoKTsKPiArfQo+ICsKPiArc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3Rl c3RfdHlwZSh2b2lkKQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIHRlc3RfdHlwZTsKPiArCj4gKwlp ZiAoIXRlc3RfdHlwZV9mcCkKPiArCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgVGVzdCBUeXBl IEZpbGUgcG9pbnRyXHJcbiIpOwo+ICsJcmV3aW5kKHRlc3RfdHlwZV9mcCk7Cj4gKwlmc2NhbmYo dGVzdF90eXBlX2ZwLCAiJTAybHgiLCAmdGVzdF90eXBlKTsKPiArCWlmICh0ZXN0X3R5cGUgPD0g MCkgewo+ICsJCWlndF93YXJuKCJUZXN0IHR5cGUgcmVhZCBmYWlsZWQgLSAlMDJseFxyXG4iLCB0 ZXN0X3R5cGUpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCXJldHVybiB0ZXN0X3R5cGU7 Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF90ZXN0X2VkaWRfZGF0YSh2b2lk KQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIHRlc3RfZGF0YTsKPiArCj4gKwlpZiAoIXRlc3RfZGF0 YV9mcCkKPiArCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgVGVzdCBkYXRhIEZpbGUgUG9pbnRl clxyXG4iKTsKPiArCj4gKwlyZXdpbmQodGVzdF9kYXRhX2ZwKTsKPiArCWZzY2FuZih0ZXN0X2Rh dGFfZnAsICIlbHgiLCAmdGVzdF9kYXRhKTsKPiArCWlmICh0ZXN0X2RhdGEgPD0gMCkgewo+ICsJ CWlndF93YXJuKCJUZXN0IGRhdGEgcmVhZCBmYWlsZWQgLSAlbHhcclxuIiwgdGVzdF9kYXRhKTsK PiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlyZXR1cm4gdGVzdF9kYXRhOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBnZXRfdGVzdF92aWRlb3BhdHRlcm5fZGF0YSh2b2lkKQo+ICt7Cj4gKwlp bnQgY291bnQgPSAwOwo+ICsJdWludDE2X3QgdmlkZW9fcGF0dGVybl92YWx1ZVszXTsKPiArCWNo YXIgdmlkZW9fcGF0dGVybl9hdHRyaWJ1dGVbMTVdOwo+ICsKPiArCWlmICghdGVzdF9kYXRhX2Zw KQo+ICsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBUZXN0IGRhdGEgRmlsZSBwb2ludGVyXHJc biIpOwo+ICsKPiArCXJld2luZCh0ZXN0X2RhdGFfZnApOwo+ICsJd2hpbGUgKCFmZW9mKHRlc3Rf ZGF0YV9mcCkgJiYgY291bnQgPCAzKQo+ICsJCWZzY2FuZih0ZXN0X2RhdGFfZnAsICIlcyAldVxu IiwgdmlkZW9fcGF0dGVybl9hdHRyaWJ1dGUsCj4gKwkJICAgICAgICh1bnNpZ25lZCBpbnQgKikm dmlkZW9fcGF0dGVybl92YWx1ZVtjb3VudCsrXSk7Cj4gKwo+ICsJaGRpc3BsYXkgPSB2aWRlb19w YXR0ZXJuX3ZhbHVlWzBdOwo+ICsJdmRpc3BsYXkgPSB2aWRlb19wYXR0ZXJuX3ZhbHVlWzFdOwo+ ICsJYml0ZGVwdGggPSB2aWRlb19wYXR0ZXJuX3ZhbHVlWzJdOwo+ICsJaWd0X2luZm8oIkhkaXNw bGF5ID0gJWRcclxuIiwgaGRpc3BsYXkpOwo+ICsJaWd0X2luZm8oIlZkaXNwbGF5ID0gJWRcclxu IiwgdmRpc3BsYXkpOwo+ICsJaWd0X2luZm8oIkJpdERlcHRoID0gJXVcclxuIiwgYml0ZGVwdGgp Owo+ICsKPiArfQo+ICsKPiArc3RhdGljIGludCBwcm9jZXNzX3Rlc3RfcmVxdWVzdChpbnQgdGVz dF90eXBlKQo+ICt7Cj4gKwlpbnQgbW9kZTsKPiArCXVuc2lnbmVkIGxvbmcgdGVzdF9kYXRhX2Vk aWQ7Cj4gKwlpbnQgc3RhdHVzID0gMDsKPiArCj4gKwlzd2l0Y2ggKHRlc3RfdHlwZSkgewo+ICsJ Y2FzZSBEUF9URVNUX0xJTktfVklERU9fUEFUVEVSTjoKPiArCQl2aWRlb19wYXR0ZXJuX2ZsYWcg PSB0cnVlOwo+ICsJCWdldF90ZXN0X3ZpZGVvcGF0dGVybl9kYXRhKCk7Cj4gKwkJbW9kZSA9IElO VEVMX01PREVfVklERU9fUEFUVEVSTl9URVNUOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBEUF9URVNU X0xJTktfRURJRF9SRUFEOgo+ICsJCXRlc3RfZGF0YV9lZGlkID0gZ2V0X3Rlc3RfZWRpZF9kYXRh KCk7Cj4gKwkJbW9kZSA9ICh0ZXN0X2RhdGFfZWRpZCAmIERQX0NPTVBMSUFOQ0VfVklERU9fTU9E RV9NQVNLKSA+Pgo+ICsJCQlJTlRFTF9EUF9SRVNPTFVUSU9OX1NISUZUX01BU0s7Cj4gKwkJYnJl YWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCS8qIFVua25vd24gdGVzdCB0eXBlICovCj4gKwkJZnByaW50 ZihzdGRlcnIsICJJbnZhbGlkIHRlc3QgcmVxdWVzdC4gSWdub3JlZC5cclxuIik7Cj4gKwkJYnJl YWs7Cj4gKwl9Cj4gKwlzdGF0dXMgPSB1cGRhdGVfZGlzcGxheShtb2RlLCB0cnVlKTsKPiArCj4g KwkvKiBSZXR1cm4gMCBvbiBzdWNjZXNzIGFuZCAtMSBvbiBmYWlsdXJlICovCj4gKwlyZXR1cm4g c3RhdHVzOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkdW1wX2Nvbm5lY3RvcnNfZmQoaW50IGRy bWZkKQo+ICt7Cj4gKwlpbnQgaSwgajsKPiArCj4gKwlkcm1Nb2RlUmVzICptb2RlX3Jlc291cmNl cyA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZHJtZmQpOwo+ICsKPiArCWlmICghbW9kZV9yZXNvdXJj ZXMpIHsKPiArCQlpZ3Rfd2FybigiZHJtTW9kZUdldFJlc291cmNlcyBmYWlsZWQ6ICVzXG4iLCBz dHJlcnJvcihlcnJubykpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlpZ3RfaW5mbygiQ29u bmVjdG9yczpcbiIpOwo+ICsJaWd0X2luZm8oImlkXHRlbmNvZGVyXHRzdGF0dXNcdFx0dHlwZVx0 c2l6ZSAobW0pXHRtb2Rlc1xuIik7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgbW9kZV9yZXNvdXJjZXMt PmNvdW50X2Nvbm5lY3RvcnM7IGkrKykgewo+ICsJCWRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3Rv cjsKPiArCj4gKwkJY29ubmVjdG9yID0gZHJtTW9kZUdldENvbm5lY3RvckN1cnJlbnQoZHJtZmQs Cj4gKwkJCQkJCSAgICAgICBtb2RlX3Jlc291cmNlcy0+Y29ubmVjdG9yc1tpXSk7Cj4gKwkJaWYg KCFjb25uZWN0b3IpIHsKPiArCQkJaWd0X3dhcm4oImNvdWxkIG5vdCBnZXQgY29ubmVjdG9yICVp OiAlc1xuIiwgbW9kZV9yZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV0sIHN0cmVycm9yKGVycm5vKSk7 Cj4gKwkJCWNvbnRpbnVlOwo+ICsJCX0KPiArCj4gKwkJaWd0X2luZm8oIiVkXHQlZFx0JXNcdCVz XHQlZHglZFx0XHQlZFxuIiwgY29ubmVjdG9yLT5jb25uZWN0b3JfaWQsIGNvbm5lY3Rvci0+ZW5j b2Rlcl9pZCwga21zdGVzdF9jb25uZWN0b3Jfc3RhdHVzX3N0cihjb25uZWN0b3ItPmNvbm5lY3Rp b24pLCBrbXN0ZXN0X2Nvbm5lY3Rvcl90eXBlX3N0cihjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBl KSwgY29ubmVjdG9yLT5tbVdpZHRoLCBjb25uZWN0b3ItPm1tSGVpZ2h0LCBjb25uZWN0b3ItPmNv dW50X21vZGVzKTsKPiArCj4gKwkJaWYgKCFjb25uZWN0b3ItPmNvdW50X21vZGVzKQo+ICsJCQlj b250aW51ZTsKPiArCj4gKwkJaWd0X2luZm8oIiAgbW9kZXM6XG4iKTsKPiArCQlpZ3RfaW5mbygi ICBuYW1lIHJlZnJlc2ggKEh6KSBoZGlzcCBoc3MgaHNlIGh0b3QgdmRpc3AgIiJ2c3MgdnNlIHZ0 b3QgZmxhZ3MgdHlwZSBjbG9ja1xuIik7Cj4gKwkJZm9yIChqID0gMDsgaiA8IGNvbm5lY3Rvci0+ Y291bnRfbW9kZXM7IGorKykgewo+ICsJCQlpZ3RfaW5mbygiWyVkXSIsIGopOwo+ICsJCQlrbXN0 ZXN0X2R1bXBfbW9kZSgmY29ubmVjdG9yLT5tb2Rlc1tqXSk7Cj4gKwkJfQo+ICsKPiArCQlkcm1N b2RlRnJlZUNvbm5lY3Rvcihjb25uZWN0b3IpOwo+ICsJfQo+ICsJaWd0X2luZm8oIlxuIik7Cj4g Kwo+ICsJZHJtTW9kZUZyZWVSZXNvdXJjZXMobW9kZV9yZXNvdXJjZXMpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBkdW1wX2NydGNzX2ZkKGludCBkcm1mZCkKPiArewo+ICsJaW50IGk7Cj4gKwlk cm1Nb2RlUmVzICptb2RlX3Jlc291cmNlcyA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZHJtZmQpOwo+ ICsKPiArCWlndF9pbmZvKCJDUlRDczpcbiIpOwo+ICsJaWd0X2luZm8oImlkXHRmYlx0cG9zXHRz aXplXG4iKTsKPiArCWZvciAoaSA9IDA7IGkgPCBtb2RlX3Jlc291cmNlcy0+Y291bnRfY3J0Y3M7 IGkrKykgewo+ICsJCWRybU1vZGVDcnRjICpjcnRjOwo+ICsKPiArCQljcnRjID0gZHJtTW9kZUdl dENydGMoZHJtZmQsIG1vZGVfcmVzb3VyY2VzLT5jcnRjc1tpXSk7Cj4gKwkJaWYgKCFjcnRjKSB7 Cj4gKwkJCWlndF93YXJuKCJjb3VsZCBub3QgZ2V0IGNydGMgJWk6ICVzXG4iLCBtb2RlX3Jlc291 cmNlcy0+Y3J0Y3NbaV0sIHN0cmVycm9yKGVycm5vKSk7Cj4gKwkJCWNvbnRpbnVlOwo+ICsJCX0K PiArCQlpZ3RfaW5mbygiJWRcdCVkXHQoJWQsJWQpXHQoJWR4JWQpXG4iLCBjcnRjLT5jcnRjX2lk LCBjcnRjLT5idWZmZXJfaWQsIGNydGMtPngsIGNydGMtPnksIGNydGMtPndpZHRoLCBjcnRjLT5o ZWlnaHQpOwo+ICsJCWttc3Rlc3RfZHVtcF9tb2RlKCZjcnRjLT5tb2RlKTsKPiArCj4gKwkJZHJt TW9kZUZyZWVDcnRjKGNydGMpOwo+ICsJfQo+ICsJaWd0X2luZm8oIlxuIik7Cj4gKwo+ICsJZHJt TW9kZUZyZWVSZXNvdXJjZXMobW9kZV9yZXNvdXJjZXMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBkdW1wX2luZm8odm9pZCkKPiArewo+ICsJZHVtcF9jb25uZWN0b3JzX2ZkKGRybV9mZCk7Cj4g KwlkdW1wX2NydGNzX2ZkKGRybV9mZCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNvbm5lY3Rv cl9maW5kX3ByZWZlcnJlZF9tb2RlKHVpbnQzMl90IGNvbm5lY3Rvcl9pZCwKPiArCQkJCQkgIHVu c2lnbmVkIGxvbmcgY3J0Y19pZHhfbWFzaywKPiArCQkJCQkgIHN0cnVjdCBjb25uZWN0b3IgKmMp Cj4gK3sKPiArCXN0cnVjdCBrbXN0ZXN0X2Nvbm5lY3Rvcl9jb25maWcgY29uZmlnOwo+ICsJYm9v bCByZXQ7Cj4gKwo+ICsJcmV0ID0ga21zdGVzdF9wcm9iZV9jb25uZWN0b3JfY29uZmlnKGRybV9m ZCwgY29ubmVjdG9yX2lkLAo+ICsJCQkJCSAgICAgY3J0Y19pZHhfbWFzaywgJmNvbmZpZyk7Cj4g KwlpZiAoIXJldCkgewo+ICsJCWMtPm1vZGVfdmFsaWQgPSAwOwo+ICsJCXJldHVybjsKPiArCX0K PiArCj4gKwljLT5jb25uZWN0b3IgPSBjb25maWcuY29ubmVjdG9yOwo+ICsJYy0+ZW5jb2RlciA9 IGNvbmZpZy5lbmNvZGVyOwo+ICsJYy0+Y3J0YyA9IGNvbmZpZy5jcnRjLT5jcnRjX2lkOwo+ICsJ Yy0+cGlwZSA9IGNvbmZpZy5waXBlOwo+ICsKPiArCWlmIChjLT5jb25uZWN0b3ItPmNvbm5lY3Rv cl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCB8fAo+ICsJICAgIGMtPmNv bm5lY3Rvci0+Y29ubmVjdGlvbiAhPSAgRFJNX01PREVfQ09OTkVDVEVEKSB7Cj4gKwkJYy0+bW9k ZV92YWxpZCA9IDA7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWMtPm1vZGUgPSBjb25maWcu ZGVmYXVsdF9tb2RlOwo+ICsJYy0+bW9kZV92YWxpZCA9IDE7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgc2V0dXBfZnJhbWVidWZmZXJzKHN0cnVjdCBjb25uZWN0b3IgKmRwX2Nvbm4pCj4gK3sKPiAr Cj4gKwlkcF9jb25uLT5mYiA9IGlndF9jcmVhdGVfZmIoZHJtX2ZkLAo+ICsJCQkJICAgIGRwX2Nv bm4tPmZiX3dpZHRoLCBkcF9jb25uLT5mYl9oZWlnaHQsCj4gKwkJCQkgICAgRFJNX0ZPUk1BVF9Y UkdCODg4OCwKPiArCQkJCSAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAo+ICsJCQkJICAg ICZkcF9jb25uLT5mYl92aWRlb19wYXR0ZXJuKTsKPiArCWlndF9hc3NlcnQoZHBfY29ubi0+ZmIp Owo+ICsKPiArCS8qIE1hcCB0aGUgbWFwcGluZyBvZiBHRU0gb2JqZWN0IGludG8gdGhlIHZpcnR1 YWwgYWRkcmVzcyBzcGFjZSAqLwo+ICsJZHBfY29ubi0+cGl4bWFwID0gZ2VtX21tYXBfX2d0dChk cm1fZmQsCj4gKwkJCQkJZHBfY29ubi0+ZmJfdmlkZW9fcGF0dGVybi5nZW1faGFuZGxlLAo+ICsJ CQkJCWRwX2Nvbm4tPmZiX3ZpZGVvX3BhdHRlcm4uc2l6ZSwKPiArCQkJCQlQUk9UX1JFQUQgfCBQ Uk9UX1dSSVRFKTsKPiArCWdlbV9zZXRfZG9tYWluKGRybV9mZCwgZHBfY29ubi0+ZmJfdmlkZW9f cGF0dGVybi5nZW1faGFuZGxlLAo+ICsJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1 X0dFTV9ET01BSU5fR1RUKTsKPiArCWRwX2Nvbm4tPmZiX3NpemUgPSBkcF9jb25uLT5mYl92aWRl b19wYXR0ZXJuLnNpemU7Cj4gKwo+ICsJLyogQWZ0ZXIgZmlsbGluZyB0aGUgZGV2aWNlIG1lbW9y eSB3aXRoIDBzIGl0IG5lZWRzIHRvIGJlIHVubWFwcGVkICovCj4gKwltZW1zZXQoZHBfY29ubi0+ cGl4bWFwLCAwLCBkcF9jb25uLT5mYl9zaXplKTsKPiArCW11bm1hcChkcF9jb25uLT5waXhtYXAs IGRwX2Nvbm4tPmZiX3NpemUpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IHNldHVwX2ZhaWxzYWZlX2ZyYW1lYnVmZmVyKHN0cnVjdCBjb25uZWN0b3IgKmRwX2Nvbm4p Cj4gK3sKPiArCj4gKwlkcF9jb25uLT5mYWlsc2FmZV9mYiA9IGlndF9jcmVhdGVfZmIoZHJtX2Zk LAo+ICsJCQkJCSAgICAgZHBfY29ubi0+ZmFpbHNhZmVfd2lkdGgsCj4gKwkJCQkJICAgICBkcF9j b25uLT5mYWlsc2FmZV9oZWlnaHQsCj4gKwkJCQkJICAgICBEUk1fRk9STUFUX1hSR0I4ODg4LAo+ ICsJCQkJCSAgICAgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKPiArCQkJCQkgICAgICZkcF9j b25uLT5mYl9mYWlsc2FmZV9wYXR0ZXJuKTsKPiArCWlndF9hc3NlcnQoZHBfY29ubi0+ZmFpbHNh ZmVfZmIpOwo+ICsKPiArCS8qIE1hcCB0aGUgbWFwcGluZyBvZiBHRU0gb2JqZWN0IGludG8gdGhl IHZpcnR1YWwgYWRkcmVzcyBzcGFjZSAqLwo+ICsJZHBfY29ubi0+ZmFpbHNhZmVfcGl4bWFwID0g Z2VtX21tYXBfX2d0dChkcm1fZmQsCj4gKwkJCQkJCSBkcF9jb25uLT5mYl9mYWlsc2FmZV9wYXR0 ZXJuLmdlbV9oYW5kbGUsCj4gKwkJCQkJCSBkcF9jb25uLT5mYl9mYWlsc2FmZV9wYXR0ZXJuLnNp emUsCj4gKwkJCQkJCSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKPiArCWdlbV9zZXRfZG9tYWlu KGRybV9mZCwgZHBfY29ubi0+ZmJfZmFpbHNhZmVfcGF0dGVybi5nZW1faGFuZGxlLAo+ICsJCSAg ICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKPiArCWRwX2Nv bm4tPmZhaWxzYWZlX3NpemUgPSBkcF9jb25uLT5mYl9mYWlsc2FmZV9wYXR0ZXJuLnNpemU7Cj4g Kwo+ICsJLyogQWZ0ZXIgZmlsbGluZyB0aGUgZGV2aWNlIGZyYW1lYnVmZmVyIHRoZSBtYXBwZWQg bWVtb3J5IG5lZWRzIHRvIGJlIGZyZWVkICovCj4gKwltZW1zZXQoZHBfY29ubi0+ZmFpbHNhZmVf cGl4bWFwLCAwLCBkcF9jb25uLT5mYWlsc2FmZV9zaXplKTsKPiArCW11bm1hcChkcF9jb25uLT5m YWlsc2FmZV9waXhtYXAsIGRwX2Nvbm4tPmZhaWxzYWZlX3NpemUpOwo+ICsKPiArCXJldHVybiAw Owo+ICsKPiArfQo+ICsKPiArc3RhdGljIGludCBzZXR1cF92aWRlb19wYXR0ZXJuX2ZyYW1lYnVm ZmVyKHN0cnVjdCBjb25uZWN0b3IgKmRwX2Nvbm4pCj4gK3sKPiArCXVpbnQzMl90ICB2aWRlb193 aWR0aCwgdmlkZW9faGVpZ2h0Owo+ICsKPiArCXZpZGVvX3dpZHRoID0gZHBfY29ubi0+dGVzdF9w YXR0ZXJuLmhkaXNwbGF5Owo+ICsJdmlkZW9faGVpZ2h0ID0gZHBfY29ubi0+dGVzdF9wYXR0ZXJu LnZkaXNwbGF5Owo+ICsJZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmZiID0gaWd0X2NyZWF0ZV9mYihk cm1fZmQsCj4gKwkJCQkJCSB2aWRlb193aWR0aCwgdmlkZW9faGVpZ2h0LAo+ICsJCQkJCQkgRFJN X0ZPUk1BVF9YUkdCODg4OCwKPiArCQkJCQkJIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4g KwkJCQkJCSAmZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmZiX3BhdHRlcm4pOwo+ICsJaWd0X2Fzc2Vy dChkcF9jb25uLT50ZXN0X3BhdHRlcm4uZmIpOwo+ICsKPiArCS8qIE1hcCB0aGUgbWFwcGluZyBv ZiBHRU0gb2JqZWN0IGludG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSAqLwo+ICsJZHBfY29u bi0+dGVzdF9wYXR0ZXJuLnBpeG1hcCA9IGdlbV9tbWFwX19ndHQoZHJtX2ZkLAo+ICsJCQkJCQkg ICAgIGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5mYl9wYXR0ZXJuLmdlbV9oYW5kbGUsCj4gKwkJCQkJ CSAgICAgZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmZiX3BhdHRlcm4uc2l6ZSwKPiArCQkJCQkJICAg ICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKPiArCWdlbV9zZXRfZG9tYWluKGRybV9mZCwgZHBf Y29ubi0+dGVzdF9wYXR0ZXJuLmZiX3BhdHRlcm4uZ2VtX2hhbmRsZSwKPiArCQkgICAgICAgSTkx NV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7Cj4gKwo+ICsJZHBfY29ubi0+ dGVzdF9wYXR0ZXJuLnNpemUgPSBkcF9jb25uLT50ZXN0X3BhdHRlcm4uZmJfcGF0dGVybi5zaXpl Owo+ICsKPiArCW1lbXNldChkcF9jb25uLT50ZXN0X3BhdHRlcm4ucGl4bWFwLCAwLCBkcF9jb25u LT50ZXN0X3BhdHRlcm4uc2l6ZSk7Cj4gKwlyZXR1cm4gMDsKPiArCj4gK30KPiArCj4gK3N0YXRp YyBpbnQgZmlsbF9mcmFtZWJ1ZmZlcihzdHJ1Y3QgY29ubmVjdG9yICpkcF9jb25uKQo+ICt7Cj4g Kwl1aW50MzJfdCB0aWxlX2hlaWdodCwgdGlsZV93aWR0aCwgdmlkZW9fd2lkdGgsIHZpZGVvX2hl aWdodDsKPiArCXVpbnQzMl90ICpyZWRfcHRyLCAqZ3JlZW5fcHRyLCAqYmx1ZV9wdHIsICp3aGl0 ZV9wdHIsICpzcmNfcHRyLCAqZHN0X3B0cjsKPiArCWludCB4LCB5Owo+ICsJaW50MzJfdCBwaXhl bF92YWw7Cj4gKwo+ICsJdmlkZW9fd2lkdGggPSBkcF9jb25uLT50ZXN0X3BhdHRlcm4uaGRpc3Bs YXk7Cj4gKwl2aWRlb19oZWlnaHQgPSBkcF9jb25uLT50ZXN0X3BhdHRlcm4udmRpc3BsYXk7Cj4g Kwo+ICsJdGlsZV9oZWlnaHQgPSA2NDsKPiArCXRpbGVfd2lkdGggPSAxIDw8ICAoZHBfY29ubi0+ dGVzdF9wYXR0ZXJuLmJpdGRlcHRoKTsKPiArCj4gKwlyZWRfcHRyID0gZHBfY29ubi0+dGVzdF9w YXR0ZXJuLnBpeG1hcDsKPiArCWdyZWVuX3B0ciA9IHJlZF9wdHIgKyAodmlkZW9fd2lkdGggKiB0 aWxlX2hlaWdodCk7Cj4gKwlibHVlX3B0ciA9IGdyZWVuX3B0ciArICh2aWRlb193aWR0aCAqIHRp bGVfaGVpZ2h0KTsKPiArCXdoaXRlX3B0ciA9IGJsdWVfcHRyICsgKHZpZGVvX3dpZHRoICogdGls ZV9oZWlnaHQpOwo+ICsJeCA9IDA7Cj4gKwo+ICsJLyogRmlsbCB0aGUgZnJhbWUgYnVmZmVyIHdp dGggdmlkZW8gcGF0dGVybiBmcm9tIENUUyAzLjEuNSAqLwo+ICsJd2hpbGUgKHggPCB2aWRlb193 aWR0aCkgewo+ICsJCWZvciAocGl4ZWxfdmFsID0gMDsgcGl4ZWxfdmFsIDwgMjU2Owo+ICsJCSAg ICAgcGl4ZWxfdmFsID0gcGl4ZWxfdmFsICsgKDI1NiAvIHRpbGVfd2lkdGgpKSB7Cj4gKwkJCXJl ZF9wdHJbeF0gPSBwaXhlbF92YWwgPDwgMTY7Cj4gKwkJCWdyZWVuX3B0clt4XSA9IHBpeGVsX3Zh bCA8PCA4Owo+ICsJCQlibHVlX3B0clt4XSA9IHBpeGVsX3ZhbCA8PCAwOwo+ICsJCQl3aGl0ZV9w dHJbeF0gPSByZWRfcHRyW3hdIHwgZ3JlZW5fcHRyW3hdIHwgYmx1ZV9wdHJbeF07Cj4gKwkJCWlm ICgrK3ggPj0gdmlkZW9fd2lkdGgpCj4gKwkJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwlmb3Ig KHkgPSAwOyB5IDwgdmlkZW9faGVpZ2h0OyB5KyspIHsKPiArCQlpZiAoeSA9PSAwIHx8IHkgPT0g NjQgfHwgeSA9PSAxMjggfHwgeSA9PSAxOTIpCj4gKwkJCWNvbnRpbnVlOwo+ICsJCXN3aXRjaCAo KHkgLyB0aWxlX2hlaWdodCkgJSA0KSB7Cj4gKwkJY2FzZSAwOgo+ICsJCQlzcmNfcHRyID0gcmVk X3B0cjsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSAxOgo+ICsJCQlzcmNfcHRyID0gZ3JlZW5fcHRy Owo+ICsJCQlicmVhazsKPiArCQljYXNlIDI6Cj4gKwkJCXNyY19wdHIgPSBibHVlX3B0cjsKPiAr CQkJYnJlYWs7Cj4gKwkJY2FzZSAzOgo+ICsJCQlzcmNfcHRyID0gd2hpdGVfcHRyOwo+ICsJCQli cmVhazsKPiArCQl9Cj4gKwkJZHN0X3B0ciA9IGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5waXhtYXAg KyAoeSAqIHZpZGVvX3dpZHRoKTsKPiArCQltZW1jcHkoZHN0X3B0ciwgc3JjX3B0ciwgKHZpZGVv X3dpZHRoICogNCkpOwo+ICsJfQo+ICsJbXVubWFwKGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5waXht YXAsCj4gKwkgICAgICAgZHBfY29ubi0+dGVzdF9wYXR0ZXJuLnNpemUpOwo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgc2V0X3Rlc3RfbW9kZShzdHJ1Y3QgY29ubmVjdG9yICpk cF9jb25uKQo+ICt7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCWludCBpOwo+ICsJYm9vbCBmb3VuZF9z dGQgPSBmYWxzZSwgZm91bmRfZnMgPSBmYWxzZTsKPiArCWRybU1vZGVDb25uZWN0b3IgKmMgPSBk cF9jb25uLT5jb25uZWN0b3I7Cj4gKwo+ICsJLyogSWdub3JlIGFueSBkaXNjb25uZWN0ZWQgZGV2 aWNlcyAqLwo+ICsJaWYgKGMtPmNvbm5lY3Rpb24gIT0gRFJNX01PREVfQ09OTkVDVEVEKSB7Cj4g KwkJaWd0X3dhcm4oIkNvbm5lY3RvciAldSBkaXNjb25uZWN0ZWRcclxuIiwgYy0+Y29ubmVjdG9y X2lkKTsKPiArCQlyZXR1cm4gLUVOT0VOVDsKPiArCX0KPiArCWlndF9pbmZvKCJDb25uZWN0b3Ig U2V0dXA6XHJcbiIpOwo+ICsJLyogU2V0dXAgcHJlZmVycmVkIG1vZGUgLSBzaG91bGQgYmUgbW9k ZVswXSBpbiB0aGUgbGlzdCAqLwo+ICsJZHBfY29ubi0+bW9kZV9wcmVmZXJyZWQgPSBjLT5tb2Rl c1swXTsKPiArCWRwX2Nvbm4tPmZiX3dpZHRoID0gYy0+bW9kZXNbMF0uaGRpc3BsYXk7Cj4gKwlk cF9jb25uLT5mYl9oZWlnaHQgPSBjLT5tb2Rlc1swXS52ZGlzcGxheTsKPiArCj4gKwlkcF9jb25u LT50ZXN0X3BhdHRlcm4ubW9kZSA9IGMtPm1vZGVzWzBdOwo+ICsJZHBfY29ubi0+dGVzdF9wYXR0 ZXJuLm1vZGUuaGRpc3BsYXkgPSBjLT5tb2Rlc1swXS5oZGlzcGxheTsKPiArCWRwX2Nvbm4tPnRl c3RfcGF0dGVybi5tb2RlLnZkaXNwbGF5ID0gYy0+bW9kZXNbMF0udmRpc3BsYXk7Cj4gKwo+ICsJ aWd0X2luZm8oIlByZWZlcnJlZCBtb2RlIChtb2RlIDApIGZvciBjb25uZWN0b3IgJXUgaXMgJXV4 JXVcclxuIiwKPiArCQkgZHBfY29ubi0+aWQsIGMtPm1vZGVzWzBdLmhkaXNwbGF5LCBjLT5tb2Rl c1swXS52ZGlzcGxheSk7Cj4gKwlmZmx1c2goc3RkaW4pOwo+ICsKPiArCWZvciAoaSA9IDE7IGkg PCBjLT5jb3VudF9tb2RlczsgaSsrKSB7Cj4gKwkJLyogU3RhbmRhcmQgbW9kZSBpcyA4MDB4NjAw QDYwICovCj4gKwkJaWYgKGMtPm1vZGVzW2ldLmhkaXNwbGF5ID09IDgwMCAmJgo+ICsJCSAgICBj LT5tb2Rlc1tpXS52ZGlzcGxheSA9PSA2MDAgJiYKPiArCQkgICAgYy0+bW9kZXNbaV0udnJlZnJl c2ggPT0gNjAgJiYKPiArCQkgICAgZm91bmRfc3RkID09IGZhbHNlKSB7Cj4gKwkJCWRwX2Nvbm4t Pm1vZGVfc3RhbmRhcmQgPSBjLT5tb2Rlc1tpXTsKPiArCQkJaWd0X2luZm8oIlN0YW5kYXJkIG1v ZGUgKCVkKSBmb3IgY29ubmVjdG9yICV1IGlzICV1eCV1XHJcbiIsCj4gKwkJCQkgaSwKPiArCQkJ CSBjLT5jb25uZWN0b3JfaWQsCj4gKwkJCQkgYy0+bW9kZXNbaV0uaGRpc3BsYXksCj4gKwkJCQkg Yy0+bW9kZXNbaV0udmRpc3BsYXkpOwo+ICsJCQlmb3VuZF9zdGQgPSB0cnVlOwo+ICsJCX0KPiAr CQkvKiBGYWlsc2FmZSBtb2RlIGlzIDY0MHg0ODBANjAgKi8KPiArCQlpZiAoYy0+bW9kZXNbaV0u aGRpc3BsYXkgPT0gNjQwICYmCj4gKwkJICAgIGMtPm1vZGVzW2ldLnZkaXNwbGF5ID09IDQ4MCAm Jgo+ICsJCSAgICBjLT5tb2Rlc1tpXS52cmVmcmVzaCA9PSA2MCAmJgo+ICsJCSAgICBmb3VuZF9m cyA9PSBmYWxzZSkgewo+ICsJCQlkcF9jb25uLT5tb2RlX2ZhaWxzYWZlID0gYy0+bW9kZXNbaV07 Cj4gKwkJCWRwX2Nvbm4tPmZhaWxzYWZlX3dpZHRoID0gYy0+bW9kZXNbaV0uaGRpc3BsYXk7Cj4g KwkJCWRwX2Nvbm4tPmZhaWxzYWZlX2hlaWdodCA9IGMtPm1vZGVzW2ldLnZkaXNwbGF5Owo+ICsJ CQlpZ3RfaW5mbygiRmFpbHNhZmUgbW9kZSAoJWQpIGZvciBjb25uZWN0b3IgJXUgaXMgJXV4JXVc clxuIiwKPiArCQkJCSBpLAo+ICsJCQkJIGMtPmNvbm5lY3Rvcl9pZCwKPiArCQkJCSBjLT5tb2Rl c1tpXS5oZGlzcGxheSwKPiArCQkJCSBjLT5tb2Rlc1tpXS52ZGlzcGxheSk7Cj4gKwkJCWZvdW5k X2ZzID0gdHJ1ZTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gc2V0dXBfZnJhbWVidWZmZXJz KGRwX2Nvbm4pOwo+ICsJaWYgKHJldCkgewo+ICsJCWlndF93YXJuKCJDcmVhdGUgZnJhbWVidWZm ZXIgZm9yIGNvbm5lY3RvciAldSBmYWlsZWQgKCVkKVxyXG4iLAo+ICsJCQkgYy0+Y29ubmVjdG9y X2lkLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKGZvdW5kX2ZzKSB7 Cj4gKwkJcmV0ID0gc2V0dXBfZmFpbHNhZmVfZnJhbWVidWZmZXIoZHBfY29ubik7Cj4gKwkJaWYg KHJldCkgewo+ICsJCQlpZ3Rfd2FybigiQ3JlYXRlIGZhaWxzYWZlIGZyYW1lYnVmZmVyIGZvciBj b25uZWN0b3IgJXUiCj4gKwkJCQkgImZhaWxlZCAoJWQpXHJcbiIsCj4gKwkJCQkgYy0+Y29ubmVj dG9yX2lkLCByZXQpOwo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAo dmlkZW9fcGF0dGVybl9mbGFnKSB7Cj4gKwkJZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmhkaXNwbGF5 ID0gaGRpc3BsYXk7Cj4gKwkJZHBfY29ubi0+dGVzdF9wYXR0ZXJuLnZkaXNwbGF5ID0gdmRpc3Bs YXk7Cj4gKwkJZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmJpdGRlcHRoID0gYml0ZGVwdGg7Cj4gKwkJ cmV0ID0gc2V0dXBfdmlkZW9fcGF0dGVybl9mcmFtZWJ1ZmZlcihkcF9jb25uKTsKPiArCQlpZiAo cmV0KSB7Cj4gKwkJCWlndF93YXJuKCJDcmVhdGUgZnJhbWVidWZmZXIgZm9yIGNvbm5lY3RvciAl dSBmYWlsZWQgKCVkKVxyXG4iLAo+ICsJCQkJIGMtPmNvbm5lY3Rvcl9pZCwgcmV0KTsKPiArCQkJ cmV0dXJuIHJldDsKPiArCQl9Cj4gKwkJcmV0ID0gZmlsbF9mcmFtZWJ1ZmZlcihkcF9jb25uKTsK PiArCQlpZiAocmV0KSB7Cj4gKwkJCWlndF93YXJuKCJGaWxsIGZyYW1lYnVmZmVyIGZvciBjb25u ZWN0b3IgJXUgZmFpbGVkICglZClcclxuIiwKPiArCQkJCSBjLT5jb25uZWN0b3JfaWQsIHJldCk7 Cj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgc2V0X3ZpZGVvKGludCBtb2RlLCBzdHJ1Y3QgY29ubmVjdG9yICp0 ZXN0X2Nvbm5lY3RvcikKPiArewo+ICsJZHJtTW9kZU1vZGVJbmZvICpyZXF1ZXN0ZWRfbW9kZTsK PiArCXVpbnQzMl90IHJlcXVpcmVkX2ZiX2lkOwo+ICsJc3RydWN0IGlndF9mYiByZXF1aXJlZF9m YjsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCXN3aXRjaCAobW9kZSkgewo+ICsJY2FzZSBJTlRF TF9NT0RFX05PTkU6Cj4gKwkJaWd0X2luZm8oIk5PTkVcclxuIik7Cj4gKwkJcmV0ID0gZHJtTW9k ZVNldENydGMoZHJtX2ZkLCB0ZXN0X2Nvbm5lY3Rvci0+Y3J0YywKPiArCQkJCSAgICAgLTEsIDAs IDAsIE5VTEwsIDAsIE5VTEwpOwo+ICsJCWdvdG8gb3V0Owo+ICsJY2FzZSBJTlRFTF9NT0RFX1BS RUZFUlJFRDoKPiArCQlpZ3RfaW5mbygiUFJFRkVSUkVEXHJcbiIpOwo+ICsJCXJlcXVlc3RlZF9t b2RlID0gICZ0ZXN0X2Nvbm5lY3Rvci0+bW9kZV9wcmVmZXJyZWQ7Cj4gKwkJcmVxdWlyZWRfZmJf aWQgPSB0ZXN0X2Nvbm5lY3Rvci0+ZmI7Cj4gKwkJcmVxdWlyZWRfZmIgPSB0ZXN0X2Nvbm5lY3Rv ci0+ZmJfdmlkZW9fcGF0dGVybjsKPiArCQlicmVhazsKPiArCWNhc2UgSU5URUxfTU9ERV9TVEFO REFSRDoKPiArCQlpZ3RfaW5mbygiU1RBTkRBUkRcclxuIik7Cj4gKwkJcmVxdWVzdGVkX21vZGUg PSAgJnRlc3RfY29ubmVjdG9yLT5tb2RlX3N0YW5kYXJkOwo+ICsJCXJlcXVpcmVkX2ZiX2lkID0g dGVzdF9jb25uZWN0b3ItPmZiOwo+ICsJCXJlcXVpcmVkX2ZiID0gdGVzdF9jb25uZWN0b3ItPmZi X3ZpZGVvX3BhdHRlcm47Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIElOVEVMX01PREVfRkFJTFNBRkU6 Cj4gKwkJaWd0X2luZm8oIkZBSUxTQUZFXHJcbiIpOwo+ICsJCXJlcXVlc3RlZF9tb2RlID0gICZ0 ZXN0X2Nvbm5lY3Rvci0+bW9kZV9mYWlsc2FmZTsKPiArCQlyZXF1aXJlZF9mYl9pZCA9IHRlc3Rf Y29ubmVjdG9yLT5mYWlsc2FmZV9mYjsKPiArCQlyZXF1aXJlZF9mYiA9IHRlc3RfY29ubmVjdG9y LT5mYl9mYWlsc2FmZV9wYXR0ZXJuOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJTlRFTF9NT0RFX1ZJ REVPX1BBVFRFUk5fVEVTVDoKPiArCQlpZ3RfaW5mbygiVklERU8gUEFUVEVSTiBURVNUXHJcbiIp Owo+ICsJCXJlcXVlc3RlZF9tb2RlID0gJnRlc3RfY29ubmVjdG9yLT50ZXN0X3BhdHRlcm4ubW9k ZTsKPiArCQlyZXF1aXJlZF9mYl9pZCA9IHRlc3RfY29ubmVjdG9yLT50ZXN0X3BhdHRlcm4uZmI7 Cj4gKwkJcmVxdWlyZWRfZmIgPSB0ZXN0X2Nvbm5lY3Rvci0+dGVzdF9wYXR0ZXJuLmZiX3BhdHRl cm47Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIElOVEVMX01PREVfSU5WQUxJRDoKPiArCWRlZmF1bHQ6 Cj4gKwkJaWd0X3dhcm4oIklOVkFMSUQhICglMDh4KSBNb2RlIHNldCBhYm9ydGVkIVxyXG4iLCBt b2RlKTsKPiArCQlyZXR1cm4gLTE7Cj4gKwl9Cj4gKwo+ICsJaWd0X2luZm8oIkNSVEMoJXUpOiIs IHRlc3RfY29ubmVjdG9yLT5jcnRjKTsKPiArCWttc3Rlc3RfZHVtcF9tb2RlKHJlcXVlc3RlZF9t b2RlKTsKPiArCXJldCA9IGRybU1vZGVTZXRDcnRjKGRybV9mZCwgdGVzdF9jb25uZWN0b3ItPmNy dGMsIHJlcXVpcmVkX2ZiX2lkLCAwLCAwLAo+ICsJCQkgICAgICZ0ZXN0X2Nvbm5lY3Rvci0+aWQs IDEsIHJlcXVlc3RlZF9tb2RlKTsKPiArCWlmIChyZXQpIHsKPiArCQlpZ3Rfd2FybigiZmFpbGVk IHRvIHNldCBtb2RlICglZHglZEAlZEh6KTogJXNcbiIsCj4gKwkJCSByZXF1ZXN0ZWRfbW9kZS0+ aGRpc3BsYXksIHJlcXVlc3RlZF9tb2RlLT52ZGlzcGxheSwKPiArCQkJIHJlcXVlc3RlZF9tb2Rl LT52cmVmcmVzaCwgc3RyZXJyb3IoZXJybm8pKTsKPiArCQlpZ3RfcmVtb3ZlX2ZiKGRybV9mZCwg JnJlcXVpcmVkX2ZiKTsKPiArCj4gKwl9Cj4gKwkvKiBLZWVwIHRoZSBwYXR0ZXJuIG9uIG91dHB1 dCBsaW5lcyBmb3IgYXRsZWFzdCAwLjUgc2VjcyBmb3IKPiArCSAqIERQUi0xMjAgdG8gZGV0ZWN0 IGl0Lgo+ICsJICovCj4gKwl1c2xlZXAoMTAwMDAwMCk7Cj4gKwo+ICtvdXQ6Cj4gKwlpZiAocmV0 KSB7Cj4gKwkJaWd0X3dhcm4oIkZhaWxlZCB0byBzZXQgQ1JUQyBmb3IgY29ubmVjdG9yICV1XHJc biIsCj4gKwkJCSB0ZXN0X2Nvbm5lY3Rvci0+aWQpOwo+ICsJfQo+ICsKPiArCXJldHVybiByZXQ7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQKPiArc2V0X2RlZmF1bHRfbW9kZShzdHJ1Y3QgY29ubmVj dG9yICpjKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgZmJfaWQgPSAwOwo+ICsJc3RydWN0IGlndF9m YiBmYl9pbmZvOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJYy0+bW9kZSA9IGMtPmNvbm5lY3Rv ci0+bW9kZXNbMF07Cj4gKwo+ICsJaWYgKCFjLT5tb2RlX3ZhbGlkKQo+ICsJCXJldHVybiAtMTsK PiArCj4gKwl3aWR0aCA9IGMtPm1vZGUuaGRpc3BsYXk7Cj4gKwloZWlnaHQgPSBjLT5tb2RlLnZk aXNwbGF5Owo+ICsKPiArCWZiX2lkID0gaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKGRybV9mZCwgd2lk dGgsIGhlaWdodCwKPiArCQkJCSAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCj4gKwkJCQkgICAg ICB0aWxpbmcsICZmYl9pbmZvKTsKPiArCj4gKwlpZ3RfaW5mbygiQ1JUQygldSk6WyVkXSIsIGMt PmNydGMsIDApOwo+ICsJa21zdGVzdF9kdW1wX21vZGUoJmMtPm1vZGUpOwo+ICsJZHJtTW9kZVNl dENydGMoZHJtX2ZkLCBjLT5jcnRjLCAtMSwgMCwgMCwgTlVMTCwgMCwgTlVMTCk7Cj4gKwlyZXQg PSBkcm1Nb2RlU2V0Q3J0Yyhkcm1fZmQsIGMtPmNydGMsIGZiX2lkLCAwLCAwLAo+ICsJCQkgICAg ICZjLT5pZCwgMSwgJmMtPm1vZGUpOwo+ICsJaWYgKHJldCkgewo+ICsJCWlndF93YXJuKCJmYWls ZWQgdG8gc2V0IG1vZGUgKCVkeCVkQCVkSHopOiAlc1xuIiwgd2lkdGgsIGhlaWdodCwgYy0+bW9k ZS52cmVmcmVzaCwgc3RyZXJyb3IoZXJybm8pKTsKPiArCQlpZ3RfcmVtb3ZlX2ZiKGRybV9mZCwg JmZiX2luZm8pOwo+ICsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKgo+ ICsgKiBSZS1wcm9iZSBjb25uZWN0b3JzIGFuZCBkbyBhIG1vZGVzZXQgYmFzZWQgb24gdGVzdCBy ZXF1ZXN0IG9yCj4gKyAqIGluIGNhc2Ugb2YgYSBob3RwbHVnIHVldmVudC4KPiArICoKPiArICog QG1vZGU6IFZpZGVvIG1vZGUgcmVxdWVzdGVkIGJ5IHRoZSB0ZXN0Cj4gKyAqIEBpc19jb21wbGlh bmNlX3Rlc3Q6IDE6IElmIGl0IGlzIGEgY29tcGxpYW5jZSB0ZXN0Cj4gKyAqICAgICAgICAgICAg ICAgICAgICAgIDA6IElmIGl0IGlzIGEgaG90cGx1ZyBldmVudAo+ICsgKgo+ICsgKiBSZXR1cm5z Ogo+ICsgKiAwOiBPbiBTdWNjZXNzCj4gKyAqIC0xOiBPbiBmYWlsdXJlCj4gKyAqLwo+ICtpbnQg dXBkYXRlX2Rpc3BsYXkoaW50IG1vZGUsIGJvb2wgaXNfY29tcGxpYW5jZV90ZXN0KQo+ICt7Cj4g KwlzdHJ1Y3QgY29ubmVjdG9yICpjb25uZWN0b3JzOwo+ICsJaW50IGMsIHJldCA9IDA7Cj4gKwl1 bnNpZ25lZCBsb25nIGNydGNfaWR4X21hc2sgPSAtMVVMOwo+ICsKPiArCXJlc291cmNlcyA9IGRy bU1vZGVHZXRSZXNvdXJjZXMoZHJtX2ZkKTsKPiArCWlmICghcmVzb3VyY2VzKSB7Cj4gKwkJaWd0 X3dhcm4oImRybU1vZGVHZXRSZXNvdXJjZXMgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8p KTsKPiArCQlyZXR1cm4gLTE7Cj4gKwl9Cj4gKwo+ICsJY29ubmVjdG9ycyA9IGNhbGxvYyhyZXNv dXJjZXMtPmNvdW50X2Nvbm5lY3RvcnMsCj4gKwkJCSAgICBzaXplb2Yoc3RydWN0IGNvbm5lY3Rv cikpOwo+ICsJaWYgKCFjb25uZWN0b3JzKQo+ICsJCXJldHVybiAtMTsKPiArCj4gKwkvKiBGaW5k IGFueSBjb25uZWN0ZWQgZGlzcGxheXMgKi8KPiArCWZvciAoYyA9IDA7IGMgPCByZXNvdXJjZXMt PmNvdW50X2Nvbm5lY3RvcnM7IGMrKykgewo+ICsKPiArCQlzdHJ1Y3QgY29ubmVjdG9yICpjb25u ZWN0b3IgPSAmY29ubmVjdG9yc1tjXTsKPiArCj4gKwkJY29ubmVjdG9yLT5pZCA9IHJlc291cmNl cy0+Y29ubmVjdG9yc1tjXTsKPiArCQljb25uZWN0b3JfZmluZF9wcmVmZXJyZWRfbW9kZShjb25u ZWN0b3ItPmlkLAo+ICsJCQkJCSAgICAgIGNydGNfaWR4X21hc2ssCj4gKwkJCQkJICAgICAgY29u bmVjdG9yKTsKPiArCQlpZiAoIWNvbm5lY3Rvci0+bW9kZV92YWxpZCkKPiArCQkJY29udGludWU7 Cj4gKwkJaWYgKGlzX2NvbXBsaWFuY2VfdGVzdCkgewo+ICsJCQlzZXRfdGVzdF9tb2RlKGNvbm5l Y3Rvcik7Cj4gKwkJCXJldCA9IHNldF92aWRlbyhJTlRFTF9NT0RFX05PTkUsIGNvbm5lY3Rvcik7 Cj4gKwkJCXJldCA9IHNldF92aWRlbyhtb2RlLCBjb25uZWN0b3IpOwo+ICsKPiArCQl9IGVsc2UK PiArCQkJcmV0ID0gc2V0X2RlZmF1bHRfbW9kZShjb25uZWN0b3IpOwo+ICsKPiArCQljcnRjX2lk eF9tYXNrICY9IH4oMSA8PCBjb25uZWN0b3ItPnBpcGUpOwo+ICsKPiArCQlkcm1Nb2RlRnJlZUVu Y29kZXIoY29ubmVjdG9yLT5lbmNvZGVyKTsKPiArCQlkcm1Nb2RlRnJlZUNvbm5lY3Rvcihjb25u ZWN0b3ItPmNvbm5lY3Rvcik7Cj4gKwo+ICsJfQo+ICsKPiArCS8qIEVycm9yIGNvbmRpdGlvbiBp ZiBubyBjb25uZWN0ZWQgZGlzcGxheXMgKi8KPiArCj4gKwlmcmVlKGNvbm5lY3RvcnMpOwo+ICsJ ZHJtTW9kZUZyZWVSZXNvdXJjZXMocmVzb3VyY2VzKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiAr Cj4gK3N0YXRpYyBjb25zdCBjaGFyIG9wdHN0cltdID0gImhpIjsKPiArCj4gK3N0YXRpYyB2b2lk IF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkgdXNhZ2UoY2hhciAqbmFtZSwgY2hhciBvcHQpCj4g K3sKPiArCWlndF9pbmZvKCJ1c2FnZTogJXMgWy1oaV1cbiIsIG5hbWUpOwo+ICsJaWd0X2luZm8o Ilx0LWlcdGR1bXAgaW5mb1xuIik7Cj4gKwlpZ3RfaW5mbygiXHREZWZhdWx0IGlzIHRvIHJlc3Bv bmQgdG8gRFBSLTEyMCB0ZXN0cy5cbiIpOwo+ICsJZXhpdCgob3B0ICE9ICdoJykgPyAtMSA6IDAp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjbGVhbnVwX2RlYnVnZnModm9pZCkKPiArewo+ICsJ ZmNsb3NlKHRlc3RfYWN0aXZlX2ZwKTsKPiArCWZjbG9zZSh0ZXN0X2RhdGFfZnApOwo+ICsJZmNs b3NlKHRlc3RfdHlwZV9mcCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18o KG5vcmV0dXJuKSkgY2xlYW51cF9hbmRfZXhpdChpbnQgcmV0KQo+ICt7Cj4gKwljbGVhbnVwX2Rl YnVnZnMoKTsKPiArCWNsb3NlKGRybV9mZCk7Cj4gKwlpZ3RfaW5mbygiQ29tcGxpYW5jZSB0ZXN0 aW5nIEFwcGxpY2F0aW9uIEV4aXRpbmdcbiIpOwo+ICsJZXhpdChyZXQpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBjbGVhbnVwX3Rlc3Qodm9pZCkKPiArewo+ICsJdmlkZW9fcGF0dGVybl9mbGFn ID0gZmFsc2U7Cj4gKwloZGlzcGxheSA9IDA7Cj4gKwl2ZGlzcGxheSA9IDA7Cj4gKwliaXRkZXB0 aCA9IDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHJlYWRfdGVzdF9yZXF1ZXN0KHZvaWQpCj4g K3sKPiArCXVuc2lnbmVkIGxvbmcgdGVzdF90eXBlOwo+ICsKPiArCXRlc3RfdHlwZSA9IGdldF90 ZXN0X3R5cGUoKTsKPiArCXByb2Nlc3NfdGVzdF9yZXF1ZXN0KHRlc3RfdHlwZSk7Cj4gKwljbGVh bnVwX3Rlc3QoKTsKPiArCWNsZWFyX3Rlc3RfYWN0aXZlKCk7Cj4gK30KPiArCj4gK3N0YXRpYyBn Ym9vbGVhbiB0ZXN0X2hhbmRsZXIoR0lPQ2hhbm5lbCAqc291cmNlLCBHSU9Db25kaXRpb24gY29u ZGl0aW9uLAo+ICsJCQkgICAgIGdwb2ludGVyIGRhdGEpCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcg dGVzdF9hY3RpdmU7Cj4gKwo+ICsJcmV3aW5kKHRlc3RfYWN0aXZlX2ZwKTsKPiArCWZzY2FuZih0 ZXN0X2FjdGl2ZV9mcCwgIiVseCIsICZ0ZXN0X2FjdGl2ZSk7Cj4gKwlpZiAodGVzdF9hY3RpdmUp Cj4gKwkJcmVhZF90ZXN0X3JlcXVlc3QoKTsKPiArCXJldHVybiBUUlVFOwo+ICt9Cj4gKwo+ICtz dGF0aWMgZ2Jvb2xlYW4gaW5wdXRfZXZlbnQoR0lPQ2hhbm5lbCAqc291cmNlLCBHSU9Db25kaXRp b24gY29uZGl0aW9uLAo+ICsJCQkJZ3BvaW50ZXIgZGF0YSkKPiArewo+ICsJZ2NoYXIgYnVmWzJd Owo+ICsJZ3NpemUgY291bnQ7Cj4gKwo+ICsJY291bnQgPSByZWFkKGdfaW9fY2hhbm5lbF91bml4 X2dldF9mZChzb3VyY2UpLCBidWYsIHNpemVvZihidWYpKTsKPiArCWlmIChidWZbMF0gPT0gJ3En ICYmIChjb3VudCA9PSAxIHx8IGJ1ZlsxXSA9PSAnXG4nKSkgewo+ICsJCWNsZWFudXBfYW5kX2V4 aXQoMCk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIFRSVUU7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGVudGVyX2V4ZWNfcGF0aChjaGFyICoqYXJndikKPiArewo+ICsJY2hhciAqZXhlY19wYXRoID0g TlVMTDsKPiArCWNoYXIgKnBvcyA9IE5VTEw7Cj4gKwlzaG9ydCBsZW5fcGF0aCA9IDA7Cj4gKwlp bnQgcmV0Owo+ICsKPiArCWxlbl9wYXRoID0gc3RybGVuKGFyZ3ZbMF0pOwo+ICsJZXhlY19wYXRo ID0gKGNoYXIgKikgbWFsbG9jKGxlbl9wYXRoKTsKPiArCj4gKwltZW1jcHkoZXhlY19wYXRoLCBh cmd2WzBdLCBsZW5fcGF0aCk7Cj4gKwlwb3MgPSBzdHJyY2hyKGV4ZWNfcGF0aCwgJy8nKTsKPiAr CWlmIChwb3MgIT0gTlVMTCkKPiArCQkqKHBvcysxKSA9ICdcMCc7Cj4gKwo+ICsJcmV0ID0gY2hk aXIoZXhlY19wYXRoKTsKPiArCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCWZyZWUoZXhlY19w YXRoKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcmVzdG9yZV90ZXJtaW9fbW9kZShpbnQgc2ln KQo+ICt7Cj4gKwl0Y3NldGF0dHIodGlvX2ZkLCBUQ1NBTk9XLCAmc2F2ZWRfdGlvKTsKPiArCWNs b3NlKHRpb19mZCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNldF90ZXJtaW9fbW9kZSh2b2lk KQo+ICt7Cj4gKwlzdHJ1Y3QgdGVybWlvcyB0aW87Cj4gKwo+ICsJLyogZG9uJ3QgYXR0ZW1wdCB0 byBzZXQgdGVybWluYWwgYXR0cmlidXRlcyBpZiBub3QgaW4gdGhlIGZvcmVncm91bmQKPiArCSAq IHByb2Nlc3MgZ3JvdXAKPiArCSAqLwo+ICsJaWYgKGdldHBncnAoKSAhPSB0Y2dldHBncnAoU1RE T1VUX0ZJTEVOTykpCj4gKwkJcmV0dXJuOwo+ICsKPiArCXRpb19mZCA9IGR1cChTVERJTl9GSUxF Tk8pOwo+ICsJdGNnZXRhdHRyKHRpb19mZCwgJnNhdmVkX3Rpbyk7Cj4gKwlpZ3RfaW5zdGFsbF9l eGl0X2hhbmRsZXIocmVzdG9yZV90ZXJtaW9fbW9kZSk7Cj4gKwl0aW8gPSBzYXZlZF90aW87Cj4g Kwl0aW8uY19sZmxhZyAmPSB+KElDQU5PTiB8IEVDSE8pOwo+ICsJdGNzZXRhdHRyKHRpb19mZCwg VENTQU5PVywgJnRpbyk7Cj4gK30KPiArCj4gK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKPiArewo+ICsJaW50IGM7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCUdJT0NoYW5uZWwgKnN0ZGlu Y2hhbm5lbCwgKnRlc3RhY3RpdmVfY2hhbm5lbDsKPiArCUdNYWluTG9vcCAqbWFpbmxvb3A7Cj4g Kwlib29sIG9wdF9kdW1wX2luZm8gPSBmYWxzZTsKPiArCXN0cnVjdCBvcHRpb24gbG9uZ19vcHRz W10gPSB7Cj4gKwkJeyJoZWxwLWRlc2NyaXB0aW9uIiwgMCwgMCwgSEVMUF9ERVNDUklQVElPTn0s Cj4gKwkJeyJoZWxwIiwgMCwgMCwgJ2gnfSwKPiArCX07Cj4gKwo+ICsJaWd0X3NraXBfb25fc2lt dWxhdGlvbigpOwo+ICsKPiArCWVudGVyX2V4ZWNfcGF0aChhcmd2KTsKPiArCj4gKwl3aGlsZSAo KGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBvcHRzdHIsIGxvbmdfb3B0cywgTlVMTCkpICE9 IC0xKSB7Cj4gKwkJc3dpdGNoIChjKSB7Cj4gKwkJY2FzZSAnaSc6Cj4gKwkJCW9wdF9kdW1wX2lu Zm8gPSB0cnVlOwo+ICsJCQlicmVhazsKPiArCQljYXNlIEhFTFBfREVTQ1JJUFRJT046Cj4gKwkJ CWlndF9pbmZvKCJEUCBDb21wbGlhbmNlIFRlc3QgU3VpdGUgdXNpbmcgRFBSLTEyMFxuIik7Cj4g KwkJCWlndF9pbmZvKCJFRElEIFRlc3RzXG4iKTsKPiArCQkJaWd0X2luZm8oIlZpZGVvIFBhdHRl cm4gR2VuZXJhdGlvbiBUZXN0c1xuIik7Cj4gKwkJCWV4aXQoMCk7Cj4gKwkJCWJyZWFrOwo+ICsJ CWRlZmF1bHQ6Cj4gKwkJCS8qIGZhbGwgdGhyb3VnaCAqLwo+ICsJCWNhc2UgJ2gnOgo+ICsJCQl1 c2FnZShhcmd2WzBdLCBjKTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXNldF90 ZXJtaW9fbW9kZSgpOwo+ICsKPiArCWlndF9pbmZvKCIqKioqKioqKioqKioqRFAgQ29tcGxpYW5j ZSBUZXN0aW5nIHVzaW5nIERQUi0xMjAqKioqKioqKioqKioqXG4iKTsKPiArCWlndF9pbmZvKCJX YWl0aW5nIGZvciBUZXN0IFJlcXVlc3QgSW5wdXQuLi4uLi5cbiIpOwo+ICsJZHJtX2ZkID0gZHJt X29wZW5fZHJpdmVyKERSSVZFUl9BTlkpOwo+ICsKPiArCWlmIChvcHRfZHVtcF9pbmZvKSB7Cj4g KwkJZHVtcF9pbmZvKCk7Cj4gKwkJZ290byBvdXRfY2xvc2U7Cj4gKwl9Cj4gKwo+ICsJa21zdGVz dF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOwo+ICsJc2V0dXBfZGVidWdmc19maWxlcygpOwo+ICsJ Y2xlYW51cF90ZXN0KCk7Cj4gKwo+ICsJbWFpbmxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwg RkFMU0UpOwo+ICsJaWYgKCFtYWlubG9vcCkgewo+ICsJCWlndF93YXJuKCJmYWlsZWQgdG8gY3Jl YXRlIGdsaWIgbWFpbmxvb3BcbiIpOwo+ICsJCXJldCA9IC0xOwo+ICsJCWdvdG8gb3V0X2Nsb3Nl Owo+ICsJfQo+ICsKPiArCWlmICghaW50ZWxfZHBfY29tcGxpYW5jZV9zZXR1cF9ob3RwbHVnKCkp IHsKPiArCQlpZ3Rfd2FybigiZmFpbGVkIHRvIGluaXRpYWxpemUgaG90cGx1ZyBzdXBwb3J0XG4i KTsKPiArCQlnb3RvIG91dF9tYWlubG9vcDsKPiArCX0KPiArCj4gKwl0ZXN0YWN0aXZlX2NoYW5u ZWwgPSBnX2lvX2NoYW5uZWxfdW5peF9uZXcoZmlsZW5vKHRlc3RfYWN0aXZlX2ZwKSk7Cj4gKwlp ZiAoIXRlc3RhY3RpdmVfY2hhbm5lbCkgewo+ICsJCWlndF93YXJuKCJmYWlsZWQgdG8gY3JlYXRl IFRlc3QgQWN0aXZlIEdJTyBjaGFubmVsXG4iKTsKPiArCQlnb3RvIG91dF9jbG9zZTsKPiArCX0K PiArCj4gKwlyZXQgPSBnX2lvX2FkZF93YXRjaCh0ZXN0YWN0aXZlX2NoYW5uZWwsIEdfSU9fSU4g fCBHX0lPX0VSUiwgdGVzdF9oYW5kbGVyLAo+ICsJCQkgICAgIE5VTEwpOwo+ICsJaWYgKHJldCA8 IDApIHsKPiArCQlpZ3Rfd2FybigiZmFpbGVkIHRvIGFkZCB3YXRjaCBvbiB1ZGV2IEdJTyBjaGFu bmVsXG4iKTsKPiArCQlnb3RvIG91dF9jbG9zZTsKPiArCX0KPiArCj4gKwlzdGRpbmNoYW5uZWwg PSBnX2lvX2NoYW5uZWxfdW5peF9uZXcoMCk7Cj4gKwlpZiAoIXN0ZGluY2hhbm5lbCkgewo+ICsJ CWlndF93YXJuKCJmYWlsZWQgdG8gY3JlYXRlIHN0ZGluIEdJTyBjaGFubmVsXG4iKTsKPiArCQln b3RvIG91dF9ob3RwbHVnOwo+ICsJfQo+ICsKPiArCXJldCA9IGdfaW9fYWRkX3dhdGNoKHN0ZGlu Y2hhbm5lbCwgR19JT19JTiB8IEdfSU9fRVJSLCBpbnB1dF9ldmVudCwKPiArCQkJICAgICBOVUxM KTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJaWd0X3dhcm4oImZhaWxlZCB0byBhZGQgd2F0Y2gg b24gc3RkaW4gR0lPIGNoYW5uZWxcbiIpOwo+ICsJCWdvdG8gb3V0X3N0ZGlvOwo+ICsJfQo+ICsK PiArCXJldCA9IDA7Cj4gKwo+ICsJZ19tYWluX2xvb3BfcnVuKG1haW5sb29wKTsKPiArCj4gK291 dF9zdGRpbzoKPiArCWdfaW9fY2hhbm5lbF9zaHV0ZG93bihzdGRpbmNoYW5uZWwsIFRSVUUsIE5V TEwpOwo+ICtvdXRfaG90cGx1ZzoKPiArCWludGVsX2RwX2NvbXBsaWFuY2VfY2xlYW51cF9ob3Rw bHVnKCk7Cj4gK291dF9tYWlubG9vcDoKPiArCWdfbWFpbl9sb29wX3VucmVmKG1haW5sb29wKTsK PiArb3V0X2Nsb3NlOgo+ICsJY2xlYW51cF9kZWJ1Z2ZzKCk7Cj4gKwljbG9zZShkcm1fZmQpOwo+ ICsKPiArCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCj4gKwlpZ3RfaW5mbygiQ29tcGxpYW5j ZSB0ZXN0aW5nIGFwcGxpY2F0aW9uIGV4aXRpbmcuXG4iKTsKPiArCWlndF9leGl0KCk7Cj4gK30K PiBkaWZmIC0tZ2l0IGEvdG9vbHMvaW50ZWxfZHBfY29tcGxpYW5jZS5oIGIvdG9vbHMvaW50ZWxf ZHBfY29tcGxpYW5jZS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5h ZGUxZTJmCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3Rvb2xzL2ludGVsX2RwX2NvbXBsaWFuY2Uu aAo+IEBAIC0wLDAgKzEsMzUgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IDIwMTAgSW50ZWwgQ29y cG9yYXRpb24KPiArICogTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQubmF2YXJlQGludGVsLmNvbT4K PiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us IHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl Cj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCj4gKyAqIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgo+ICsgKgo+ ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZF TlQgU0hBTEwgVEhFCj4gKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiAr ICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqLwo+ICsK PiArI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiArI2luY2x1ZGUg PHN0ZGxpYi5oPgo+ICsjaW5jbHVkZSA8Z2xpYi5oPgo+ICsKPiArZXh0ZXJuIGludCBkcm1fZmQ7 Cj4gKwo+ICtnYm9vbGVhbiBpbnRlbF9kcF9jb21wbGlhbmNlX3NldHVwX2hvdHBsdWcodm9pZCk7 Cj4gK3ZvaWQgaW50ZWxfZHBfY29tcGxpYW5jZV9jbGVhbnVwX2hvdHBsdWcodm9pZCk7Cj4gKwo+ ICsvKiBjYWxsZWQgYnkgdGhlIGhvdHBsdWcgY29kZSAqLwo+ICtpbnQgdXBkYXRlX2Rpc3BsYXko aW50IG1vZGUsIGJvb2wgaXNfY29tcGxpYW5jZV90ZXN0KTsKPiBkaWZmIC0tZ2l0IGEvdG9vbHMv aW50ZWxfZHBfY29tcGxpYW5jZV9ob3RwbHVnLmMgYi90b29scy9pbnRlbF9kcF9jb21wbGlhbmNl X2hvdHBsdWcuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZDQ4OTAy Ngo+IC0tLSAvZGV2L251bGwKPiArKysgYi90b29scy9pbnRlbF9kcF9jb21wbGlhbmNlX2hvdHBs dWcuYwo+IEBAIC0wLDAgKzEsMTIzIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAyMDEwIEludGVs IENvcnBvcmF0aW9uCj4gKyAqICAgSmVzc2UgQmFybmVzIDxqZXNzZS5iYXJuZXNAaW50ZWwuY29t Pgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn ZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2Vs bCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0 aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBm b2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KPiArICog YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCj4gKyAq Cj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBF VkVOVCBTSEFMTCBUSEUKPiArICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICovCj4g Kwo+ICsjaW5jbHVkZSAiaWd0LmgiCj4gKyNpbmNsdWRlIDxzdGRpby5oPgo+ICsjaW5jbHVkZSA8 c3RyaW5nLmg+Cj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4KPiArCj4gKyNpbmNsdWRlIDxzeXMvc3Rh dC5oPgo+ICsKPiArI2luY2x1ZGUgImludGVsX2RwX2NvbXBsaWFuY2UuaCIKPiArI2luY2x1ZGUg PGxpYnVkZXYuaD4KPiArc3RhdGljIHN0cnVjdCB1ZGV2X21vbml0b3IgKnVldmVudF9tb25pdG9y Owo+ICtzdGF0aWMgc3RydWN0IHVkZXYgKnVkZXY7Cj4gK3N0YXRpYyBHSU9DaGFubmVsICp1ZGV2 Y2hhbm5lbDsKPiArCj4gK3N0YXRpYyBnYm9vbGVhbiBob3RwbHVnX2V2ZW50KEdJT0NoYW5uZWwg KnNvdXJjZSwgR0lPQ29uZGl0aW9uIGNvbmRpdGlvbiwKPiArCQkJICAgICAgZ3BvaW50ZXIgZGF0 YSkKPiArewo+ICsJc3RydWN0IHVkZXZfZGV2aWNlICpkZXY7Cj4gKwlkZXZfdCB1ZGV2X2Rldm51 bTsKPiArCXN0cnVjdCBzdGF0IHM7Cj4gKwljb25zdCBjaGFyICpob3RwbHVnOwo+ICsKPiArCWRl diA9IHVkZXZfbW9uaXRvcl9yZWNlaXZlX2RldmljZSh1ZXZlbnRfbW9uaXRvcik7Cj4gKwlpZiAo IWRldikKPiArCQlnb3RvIG91dDsKPiArCj4gKwl1ZGV2X2Rldm51bSA9IHVkZXZfZGV2aWNlX2dl dF9kZXZudW0oZGV2KTsKPiArCWZzdGF0KGRybV9mZCwgJnMpOwo+ICsKPiArCWhvdHBsdWcgPSB1 ZGV2X2RldmljZV9nZXRfcHJvcGVydHlfdmFsdWUoZGV2LCAiSE9UUExVRyIpOwo+ICsKPiArCWlm IChtZW1jbXAoJnMuc3RfcmRldiwgJnVkZXZfZGV2bnVtLCBzaXplb2YoZGV2X3QpKSA9PSAwICYm Cj4gKwkgICAgaG90cGx1ZyAmJiBhdG9pKGhvdHBsdWcpID09IDEpCj4gKwkJdXBkYXRlX2Rpc3Bs YXkoMCwgZmFsc2UpOwo+ICsKPiArCXVkZXZfZGV2aWNlX3VucmVmKGRldik7Cj4gK291dDoKPiAr CXJldHVybiBUUlVFOwo+ICt9Cj4gKwo+ICsKPiArZ2Jvb2xlYW4gaW50ZWxfZHBfY29tcGxpYW5j ZV9zZXR1cF9ob3RwbHVnKHZvaWQpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJdWRldiA9IHVk ZXZfbmV3KCk7Cj4gKwlpZiAoIXVkZXYpIHsKPiArCQlpZ3Rfd2FybigiZmFpbGVkIHRvIGNyZWF0 ZSB1ZGV2IG9iamVjdFxuIik7Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJdWV2ZW50X21v bml0b3IgPSB1ZGV2X21vbml0b3JfbmV3X2Zyb21fbmV0bGluayh1ZGV2LCAidWRldiIpOwo+ICsJ aWYgKCF1ZXZlbnRfbW9uaXRvcikgewo+ICsJCWlndF93YXJuKCJmYWlsZWQgdG8gY3JlYXRlIHVk ZXYgZXZlbnQgbW9uaXRvclxuIik7Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0g dWRldl9tb25pdG9yX2ZpbHRlcl9hZGRfbWF0Y2hfc3Vic3lzdGVtX2RldnR5cGUodWV2ZW50X21v bml0b3IsCj4gKwkJCQkJCQkgICAgICAiZHJtIiwKPiArCQkJCQkJCSAgICAgICJkcm1fbWlub3Ii KTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJaWd0X3dhcm4oImZhaWxlZCB0byBmaWx0ZXIgZm9y IGRybSBldmVudHNcbiIpOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCXJldCA9IHVkZXZf bW9uaXRvcl9lbmFibGVfcmVjZWl2aW5nKHVldmVudF9tb25pdG9yKTsKPiArCWlmIChyZXQgPCAw KSB7Cj4gKwkJaWd0X3dhcm4oImZhaWxlZCB0byBlbmFibGUgdWRldiBldmVudCByZWNlcHRpb25c biIpOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCXVkZXZjaGFubmVsID0KPiArCQlnX2lv X2NoYW5uZWxfdW5peF9uZXcodWRldl9tb25pdG9yX2dldF9mZCh1ZXZlbnRfbW9uaXRvcikpOwo+ ICsJaWYgKCF1ZGV2Y2hhbm5lbCkgewo+ICsJCWlndF93YXJuKCJmYWlsZWQgdG8gY3JlYXRlIHVk ZXYgR0lPIGNoYW5uZWxcbiIpOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCXJldCA9IGdf aW9fYWRkX3dhdGNoKHVkZXZjaGFubmVsLCBHX0lPX0lOIHwgR19JT19FUlIsIGhvdHBsdWdfZXZl bnQsCj4gKwkJCSAgICAgdWRldik7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWlndF93YXJuKCJm YWlsZWQgdG8gYWRkIHdhdGNoIG9uIHVkZXYgR0lPIGNoYW5uZWxcbiIpOwo+ICsJCWdvdG8gb3V0 Owo+ICsJfQo+ICsKPiArCXJldHVybiBUUlVFOwo+ICsKPiArb3V0Ogo+ICsJaW50ZWxfZHBfY29t cGxpYW5jZV9jbGVhbnVwX2hvdHBsdWcoKTsKPiArCXJldHVybiBGQUxTRTsKPiArfQo+ICsKPiAr dm9pZCBpbnRlbF9kcF9jb21wbGlhbmNlX2NsZWFudXBfaG90cGx1Zyh2b2lkKQo+ICt7Cj4gKwlp ZiAodWRldmNoYW5uZWwpCj4gKwkJZ19pb19jaGFubmVsX3NodXRkb3duKHVkZXZjaGFubmVsLCBU UlVFLCBOVUxMKTsKPiArCWlmICh1ZXZlbnRfbW9uaXRvcikKPiArCQl1ZGV2X21vbml0b3JfdW5y ZWYodWV2ZW50X21vbml0b3IpOwo+ICsJaWYgKHVkZXYpCj4gKwkJdWRldl91bnJlZih1ZGV2KTsK PiArfQo+IC0tIAo+IDEuOS4xCj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeAo=