From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.3 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 86951C5519F for ; Wed, 25 Nov 2020 05:26:23 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 152082075A for ; Wed, 25 Nov 2020 05:26:23 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="tirHzSNY" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 152082075A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:References: To:Subject:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=MA/C+gasbdkpOrXnMwqR4DWw+tv90MUsv92c0EYyoSQ=; b=tirHzSNYB/cViqmX8Hk5oXQlD nOXLhIozDYWVhz6h+iZC1NzPyu9+MZVKX+mucVceeM+V3WbSEaju8EHEXQgAOtwEhvOzNTJCqD40q chW3KWcb1V39GYDysMwJw7EBV4Tsckm8g6z/lKOoWX234VC5BAz7/1jxD5o/JE4pS75oN5B/F/Z3I cI4MjjVPZUxZ+/TRCmsXmUQABuX03L7WQGgSe7j9P+uVQwobrpW/0Jeo3+9apwx4f2ZkNMlZT8kUu ZCVkrGCI3Z63KSIziLCah08RhH4NlpiPgOSD8Evx/39oDmpYWZXECbiv11/HaizK7vAAkD4+lCmor OzL6Xf8Mg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1khnJM-0006Ff-6B; Wed, 25 Nov 2020 05:25:48 +0000 Received: from foss.arm.com ([217.140.110.172]) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1khnJG-0006E7-Om for linux-arm-kernel@lists.infradead.org; Wed, 25 Nov 2020 05:25:45 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id A451D31B; Tue, 24 Nov 2020 21:25:41 -0800 (PST) Received: from [10.163.83.46] (unknown [10.163.83.46]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 688563F718; Tue, 24 Nov 2020 21:25:39 -0800 (PST) From: Anshuman Khandual Subject: Re: [RFC 07/11] coresight: sink: Add TRBE driver To: Suzuki K Poulose , linux-arm-kernel@lists.infradead.org, coresight@lists.linaro.org References: <1605012309-24812-1-git-send-email-anshuman.khandual@arm.com> <1605012309-24812-8-git-send-email-anshuman.khandual@arm.com> <27d318eb-8539-698c-9c33-309dcacecb99@arm.com> Message-ID: Date: Wed, 25 Nov 2020 10:55:36 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <27d318eb-8539-698c-9c33-309dcacecb99@arm.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201125_002543_077609_CDE40F17 X-CRM114-Status: GOOD ( 41.63 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-kernel@vger.kernel.org, mathieu.poirier@linaro.org, mike.leach@linaro.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiAxMS8xMi8yMCAzOjQzIFBNLCBTdXp1a2kgSyBQb3Vsb3NlIHdyb3RlOgo+IE9uIDExLzEw LzIwIDEyOjQ1IFBNLCBBbnNodW1hbiBLaGFuZHVhbCB3cm90ZToKPj4gVHJhY2UgQnVmZmVyIEV4 dGVuc2lvbiAoVFJCRSkgaW1wbGVtZW50cyBhIHRyYWNlIGJ1ZmZlciBwZXIgQ1BVIHdoaWNoIGlz Cj4+IGFjY2Vzc2libGUgdmlhIHRoZSBzeXN0ZW0gcmVnaXN0ZXJzLiBUaGUgVFJCRSBzdXBwb3J0 cyBkaWZmZXJlbnQgYWRkcmVzc2luZwo+PiBtb2RlcyBpbmNsdWRpbmcgQ1BVIHZpcnR1YWwgYWRk cmVzcyBhbmQgYnVmZmVyIG1vZGVzIGluY2x1ZGluZyB0aGUgY2lyY3VsYXIKPj4gYnVmZmVyIG1v ZGUuIFRoZSBUUkJFIGJ1ZmZlciBpcyBhZGRyZXNzZWQgYnkgYSBiYXNlIHBvaW50ZXIgKFRSQkJB U0VSX0VMMSksCj4+IGFuIHdyaXRlIHBvaW50ZXIgKFRSQlBUUl9FTDEpIGFuZCBhIGxpbWl0IHBv aW50ZXIgKFRSQkxJTUlUUl9FTDEpLiBCdXQgdGhlCj4+IGFjY2VzcyB0byB0aGUgdHJhY2UgYnVm ZmVyIGNvdWxkIGJlIHByb2hpYml0ZWQgYnkgYSBoaWdoZXIgZXhjZXB0aW9uIGxldmVsCj4+IChF TDMgb3IgRUwyKSwgaW5kaWNhdGVkIGJ5IFRSQklEUl9FTDEuUC4gVGhlIFRSQkUgY2FuIGFsc28g Z2VuZXJhdGUgYSBDUFUKPj4gcHJpdmF0ZSBpbnRlcnJ1cHQgKFBQSSkgb24gYWRkcmVzcyB0cmFu c2xhdGlvbiBlcnJvcnMgYW5kIHdoZW4gdGhlIGJ1ZmZlcgo+PiBpcyBmdWxsLiBPdmVyYWxsIGlt cGxlbWVudGF0aW9uIGhlcmUgaXMgaW5zcGlyZWQgZnJvbSB0aGUgQXJtIFNQRSBkcml2ZXIuCj4+ Cj4+IFNpZ25lZC1vZmYtYnk6IEFuc2h1bWFuIEtoYW5kdWFsIDxhbnNodW1hbi5raGFuZHVhbEBh cm0uY29tPgo+PiAtLS0KPj4gwqAgRG9jdW1lbnRhdGlvbi90cmFjZS9jb3Jlc2lnaHQvY29yZXNp Z2h0LXRyYmUucnN0IHzCoCAzNiArKwo+PiDCoCBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c3Jl Zy5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAyICsKPj4gwqAgZHJp dmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L0tjb25maWfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB8wqAgMTEgKwo+PiDCoCBkcml2ZXJzL2h3dHJhY2luZy9jb3Jlc2lnaHQvTWFrZWZpbGXCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4+IMKgIGRyaXZlcnMvaHd0cmFjaW5nL2Nv cmVzaWdodC9jb3Jlc2lnaHQtdHJiZS5jwqDCoMKgwqAgfCA3NjYgKysrKysrKysrKysrKysrKysr KysrKysKPj4gwqAgZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC10cmJlLmjC oMKgwqDCoCB8IDUyNSArKysrKysrKysrKysrKysrCj4+IMKgIDYgZmlsZXMgY2hhbmdlZCwgMTM0 MSBpbnNlcnRpb25zKCspCj4+IMKgIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL3Ry YWNlL2NvcmVzaWdodC9jb3Jlc2lnaHQtdHJiZS5yc3QKPj4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvaHd0cmFjaW5nL2NvcmVzaWdodC9jb3Jlc2lnaHQtdHJiZS5jCj4+IMKgIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2h3dHJhY2luZy9jb3Jlc2lnaHQvY29yZXNpZ2h0LXRyYmUu aAo+Pgo+PiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9jb3Jlc2lnaHQvY29yZXNp Z2h0LXRyYmUucnN0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9jb3Jlc2lnaHQvY29yZXNpZ2h0LXRy YmUucnN0Cj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjQzMjBhOGIK Pj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2NvcmVzaWdodC9j b3Jlc2lnaHQtdHJiZS5yc3QKPj4gQEAgLTAsMCArMSwzNiBAQAo+PiArLi4gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAKPj4gKwo+PiArPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Cj4+ICtUcmFjZSBCdWZmZXIgRXh0ZW5zaW9uIChUUkJFKS4KPj4gKz09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQo+PiArCj4+ICvCoMKgwqAgOkF1dGhvcjrCoMKgIEFuc2h1bWFuIEto YW5kdWFsIDxhbnNodW1hbi5raGFuZHVhbEBhcm0uY29tPgo+PiArwqDCoMKgIDpEYXRlOsKgwqDC oMKgIE5vdmVtYmVyIDIwMjAKPj4gKwo+PiArSGFyZHdhcmUgRGVzY3JpcHRpb24KPj4gKy0tLS0t LS0tLS0tLS0tLS0tLS0tCj4+ICsKPj4gK1RyYWNlIEJ1ZmZlciBFeHRlbnNpb24gKFRSQkUpIGlz IGEgcGVyY3B1IGhhcmR3YXJlIHdoaWNoIGNhcHR1cmVzIGluIHN5c3RlbQo+PiArbWVtb3J5LCBD UFUgdHJhY2VzIGdlbmVyYXRlZCBmcm9tIGEgY29ycmVzcG9uZGluZyBwZXJjcHUgdHJhY2luZyB1 bml0LiBUaGlzCj4+ICtnZXRzIHBsdWdnZWQgaW4gYXMgYSBjb3Jlc2lnaHQgc2luayBkZXZpY2Ug YmVjYXVzZSB0aGUgY29ycmVzcG9uZGluZyB0cmFjZQo+PiArZ2VuYXJhdG9ycyAoRVRFKSwgYXJl IHBsdWdnZWQgaW4gYXMgc291cmNlIGRldmljZS4KPj4gKwo+PiArU3lzZnMgZmlsZXMgYW5kIGRp cmVjdG9yaWVzCj4+ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPj4gKwo+PiArVGhlIFRS QkUgZGV2aWNlcyBhcHBlYXIgb24gdGhlIGV4aXN0aW5nIGNvcmVzaWdodCBidXMgYWxvbmdzaWRl IHRoZSBvdGhlcgo+PiArY29yZXNpZ2h0IGRldmljZXM6Ogo+PiArCj4+ICvCoMKgwqAgPiQgbHMg L3N5cy9idXMvY29yZXNpZ2h0L2RldmljZXMKPj4gK8KgwqDCoCB0cmJlMMKgIHRyYmUxwqAgdHJi ZTIgdHJiZTMKPj4gKwo+PiArVGhlIGBgdHJiZTxOPmBgIG5hbWVkIFRSQkVzIGFyZSBhc3NvY2lh dGVkIHdpdGggYSBDUFUuOjoKPj4gKwo+PiArwqDCoMKgID4kIGxzIC9zeXMvYnVzL2NvcmVzaWdo dC9kZXZpY2VzL3RyYmUwLwo+PiArwqDCoMKgIGlycSBhbGlnbiBkYm0KPj4gKwo+PiArKktleSBm aWxlIGl0ZW1zIGFyZTotKgo+PiArwqDCoCAqIGBgaXJxYGA6IFRSQkUgbWFpbnRlbmFuY2UgaW50 ZXJydXB0IG51bWJlcgo+PiArwqDCoCAqIGBgYWxpZ25gYDogVFJCRSB3cml0ZSBwb2ludGVyIGFs aWdubWVudAo+PiArwqDCoCAqIGBgZGJtYGA6IFRSQkUgdXBkYXRlcyBtZW1vcnkgd2l0aCBhY2Nl c3MgYW5kIGRpcnR5IGZsYWdzCj4+ICsKPj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVk ZS9hc20vc3lzcmVnLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c3JlZy5oCj4+IGluZGV4 IDE0Y2IxNTYuLjYxMTM2ZjYgMTAwNjQ0Cj4+IC0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20v c3lzcmVnLmgKPj4gKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNyZWcuaAo+PiBAQCAt OTcsNiArOTcsNyBAQAo+PiDCoCAjZGVmaW5lIFNFVF9QU1RBVEVfVUFPKHgpwqDCoMKgwqDCoMKg wqAgX19lbWl0X2luc3QoMHhkNTAwNDAxZiB8IFBTVEFURV9VQU8gfCAoKCEheCkgPDwgUFNUQVRF X0ltbV9zaGlmdCkpCj4+IMKgICNkZWZpbmUgU0VUX1BTVEFURV9TU0JTKHgpwqDCoMKgwqDCoMKg wqAgX19lbWl0X2luc3QoMHhkNTAwNDAxZiB8IFBTVEFURV9TU0JTIHwgKCghIXgpIDw8IFBTVEFU RV9JbW1fc2hpZnQpKQo+PiDCoCAjZGVmaW5lIFNFVF9QU1RBVEVfVENPKHgpwqDCoMKgwqDCoMKg wqAgX19lbWl0X2luc3QoMHhkNTAwNDAxZiB8IFBTVEFURV9UQ08gfCAoKCEheCkgPDwgUFNUQVRF X0ltbV9zaGlmdCkpCj4+ICsjZGVmaW5lIFRTQl9DU1lOQ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg X19lbWl0X2luc3QoMHhkNTAzMjI1ZikKPj4gwqAgwqAgI2RlZmluZSBfX1NZU19CQVJSSUVSX0lO U04oQ1JtLCBvcDIsIFJ0KSBcCj4+IMKgwqDCoMKgwqAgX19lbWl0X2luc3QoMHhkNTAwMDAwMCB8 IHN5c19pbnNuKDAsIDMsIDMsIChDUm0pLCAob3AyKSkgfCAoKFJ0KSAmIDB4MWYpKQo+PiBAQCAt ODY1LDYgKzg2Niw3IEBACj4+IMKgICNkZWZpbmUgSURfQUE2NE1NRlIyX0NOUF9TSElGVMKgwqDC oMKgwqDCoMKgIDAKPj4gwqAgwqAgLyogaWRfYWE2NGRmcjAgKi8KPj4gKyNkZWZpbmUgSURfQUE2 NERGUjBfVFJCRV9TSElGVMKgwqDCoMKgwqDCoMKgIDQ0Cj4+IMKgICNkZWZpbmUgSURfQUE2NERG UjBfVFJBQ0VfRklMVF9TSElGVMKgwqDCoCA0MAo+PiDCoCAjZGVmaW5lIElEX0FBNjRERlIwX0RP VUJMRUxPQ0tfU0hJRlTCoMKgwqAgMzYKPj4gwqAgI2RlZmluZSBJRF9BQTY0REZSMF9QTVNWRVJf U0hJRlTCoMKgwqAgMzIKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHd0cmFjaW5nL2NvcmVzaWdo dC9LY29uZmlnIGIvZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L0tjb25maWcKPj4gaW5kZXgg YzExOTgyNC4uMGY1ZTEwMSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9od3RyYWNpbmcvY29yZXNp Z2h0L0tjb25maWcKPj4gKysrIGIvZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L0tjb25maWcK Pj4gQEAgLTE1Niw2ICsxNTYsMTcgQEAgY29uZmlnIENPUkVTSUdIVF9DVEkKPj4gwqDCoMKgwqDC oMKgwqAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTog dGhlCj4+IMKgwqDCoMKgwqDCoMKgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjb3Jlc2lnaHQtY3Rp Lgo+PiDCoCArY29uZmlnIENPUkVTSUdIVF9UUkJFCj4+ICvCoMKgwqAgYm9vbCAiVHJhY2UgQnVm ZmVyIEV4dGVuc2lvbiAoVFJCRSkgZHJpdmVyIgo+PiArwqDCoMKgIGRlcGVuZHMgb24gQVJNNjQK Pj4gK8KgwqDCoCBoZWxwCj4+ICvCoMKgwqDCoMKgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBv cnQgZm9yIHBlcmNwdSBUcmFjZSBCdWZmZXIgRXh0ZW5zaW9uIChUUkJFKS4KPj4gK8KgwqDCoMKg wqAgVFJCRSBhbHdheXMgbmVlZHMgdG8gYmUgdXNlZCBhbG9uZyB3aXRoIGl0J3MgY29ycmVzcG9u ZGluZyBwZXJjcHUgRVRFCj4+ICvCoMKgwqDCoMKgIGNvbXBvbmVudC4gRVRFIGdlbmVyYXRlcyB0 cmFjZSBkYXRhIHdoaWNoIGlzIHRoZW4gY2FwdHVyZWQgd2l0aCBUUkJFLgo+PiArwqDCoMKgwqDC oCBVbmxpa2UgdHJhZGl0aW9uYWwgc2luayBkZXZpY2VzLCBUUkJFIGlzIGEgQ1BVIGZlYXR1cmUg YWNjZXNzaWJsZSB2aWEKPj4gK8KgwqDCoMKgwqAgc3lzdGVtIHJlZ2lzdGVycy4gQnV0IGl0J3Mg ZXhwbGljaXQgZGVwZW5kZW5jeSB3aXRoIHRyYWNlIHVuaXQgKEVURSkKPj4gK8KgwqDCoMKgwqAg cmVxdWlyZXMgaXQgdG8gYmUgcGx1Z2dlZCBpbiBhcyBhIGNvcmVzaWdodCBzaW5rIGRldmljZS4K Pj4gKwo+PiDCoCBjb25maWcgQ09SRVNJR0hUX0NUSV9JTlRFR1JBVElPTl9SRUdTCj4+IMKgwqDC oMKgwqAgYm9vbCAiQWNjZXNzIENUSSBDb3JlU2lnaHQgSW50ZWdyYXRpb24gUmVnaXN0ZXJzIgo+ PiDCoMKgwqDCoMKgIGRlcGVuZHMgb24gQ09SRVNJR0hUX0NUSQo+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L01ha2VmaWxlIGIvZHJpdmVycy9od3RyYWNpbmcvY29y ZXNpZ2h0L01ha2VmaWxlCj4+IGluZGV4IGYyMGUzNTcuLmQ2MDgxNjUgMTAwNjQ0Cj4+IC0tLSBh L2RyaXZlcnMvaHd0cmFjaW5nL2NvcmVzaWdodC9NYWtlZmlsZQo+PiArKysgYi9kcml2ZXJzL2h3 dHJhY2luZy9jb3Jlc2lnaHQvTWFrZWZpbGUKPj4gQEAgLTIxLDUgKzIxLDYgQEAgb2JqLSQoQ09O RklHX0NPUkVTSUdIVF9TVE0pICs9IGNvcmVzaWdodC1zdG0ubwo+PiDCoCBvYmotJChDT05GSUdf Q09SRVNJR0hUX0NQVV9ERUJVRykgKz0gY29yZXNpZ2h0LWNwdS1kZWJ1Zy5vCj4+IMKgIG9iai0k KENPTkZJR19DT1JFU0lHSFRfQ0FUVSkgKz0gY29yZXNpZ2h0LWNhdHUubwo+PiDCoCBvYmotJChD T05GSUdfQ09SRVNJR0hUX0NUSSkgKz0gY29yZXNpZ2h0LWN0aS5vCj4+ICtvYmotJChDT05GSUdf Q09SRVNJR0hUX1RSQkUpICs9IGNvcmVzaWdodC10cmJlLm8KPj4gwqAgY29yZXNpZ2h0LWN0aS15 IDo9IGNvcmVzaWdodC1jdGktY29yZS5vwqDCoMKgIGNvcmVzaWdodC1jdGktcGxhdGZvcm0ubyBc Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb3Jlc2lnaHQtY3RpLXN5c2ZzLm8KPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvaHd0cmFjaW5nL2NvcmVzaWdodC9jb3Jlc2lnaHQtdHJiZS5jIGIv ZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC10cmJlLmMKPj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uNDhhOGVjMwo+PiAtLS0gL2Rldi9udWxsCj4+ ICsrKyBiL2RyaXZlcnMvaHd0cmFjaW5nL2NvcmVzaWdodC9jb3Jlc2lnaHQtdHJiZS5jCj4+IEBA IC0wLDAgKzEsNzY2IEBACj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ PiArLyoKPj4gKyAqIFRoaXMgZHJpdmVyIGVuYWJsZXMgVHJhY2UgQnVmZmVyIEV4dGVuc2lvbiAo VFJCRSkgYXMgYSBwZXItY3B1IGNvcmVzaWdodAo+PiArICogc2luayBkZXZpY2UgY291bGQgdGhl biBwYWlyIHdpdGggYW4gYXBwcm9wcmlhdGUgcGVyLWNwdSBjb3Jlc2lnaHQgc291cmNlCj4+ICsg KiBkZXZpY2UgKEVURSkgdGh1cyBnZW5lcmF0aW5nIHJlcXVpcmVkIHRyYWNlIGRhdGEuIFRyYWNl IGNhbiBiZSBlbmFibGVkCj4+ICsgKiB2aWEgdGhlIHBlcmYgZnJhbWV3b3JrLgo+PiArICoKPj4g KyAqIENvcHlyaWdodCAoQykgMjAyMCBBUk0gTHRkLgo+PiArICoKPj4gKyAqIEF1dGhvcjogQW5z aHVtYW4gS2hhbmR1YWwgPGFuc2h1bWFuLmtoYW5kdWFsQGFybS5jb20+Cj4+ICsgKi8KPj4gKyNk ZWZpbmUgRFJWTkFNRSAiYXJtX3RyYmUiCj4+ICsKPj4gKyNkZWZpbmUgcHJfZm10KGZtdCkgRFJW TkFNRSAiOiAiIGZtdAo+PiArCj4+ICsjaW5jbHVkZSAiY29yZXNpZ2h0LXRyYmUuaCIKPj4gKwo+ PiArI2RlZmluZSBQRVJGX0lEWDJPRkYoaWR4LCBidWYpICgoaWR4KSAlICgoYnVmKS0+bnJfcGFn ZXMgPDwgUEFHRV9TSElGVCkpCj4+ICsKPj4gKyNkZWZpbmUgRVRFX0lHTk9SRV9QQUNLRVQgMHg3 MAo+IAo+IEFkZCBhIGNvbW1lbnQgaGVyZSwgb24gd2hhdCB0aGlzIG1lYW5zIHRvIHRoZSBkZWNv ZGVyLgoKU3VyZSwgd2lsbCBhZGQuCgo+IAo+PiArCj4+ICtzdGF0aWMgY29uc3QgY2hhciB0cmJl X25hbWVbXSA9ICJ0cmJlIjsKPiAKPiBXaHkgbm90Cj4gCj4gI2RlZmluZSBERVZOQU1FwqDCoMKg ICJ0cmJlIgoKVGhhdCBjYW4gYmUgcmVwbGFjZWQgYnV0IHdlIGFscmVhZHkgZGVmaW5lIERSVk5B TUUgd2hpY2ggZ2V0cyB1c2VkIGZvcgpuYW1pbmcgdGhlIFRSQkUgaW50ZXJydXB0IHRoYXQgc2hv d3MgdXAgaW4gL3Byb2MvaW50ZXJydXB0cy4gQnV0IGl0IGlzCiJhcm1fdHJiZSIgaW5zdGVhZC4g U2hvdWxkIC9zeXMvYnVzL2NvcmVzaWdodC9kZXZpY2VzLyBsaXN0IFRSQkUgZGV2aWNlcwphcyAi YXJtX3RyYmVOIiA/IElmIHNvLCBEUlZOQU1FIGNhbiBiZSB1c2VkIHdpdGhvdXQgYW55IHByb2Js ZW0uIFNob3VsZApEUlZOQU1FIGJlIGNoYW5nZWQgdG8ganVzdCAidHJiZSIgaW5zdGVhZCA/IEJ1 dCBpdCBtYWtlcyBzZW5zZSB0byBoYXZlCnRoZSBzYW1lIG5hbWUgZm9yIFRSQkUgZGV2aWNlcyBh bmQgdGhlIGludGVycnVwdC4KCj4gCj4gCj4+ICsKPj4gK2VudW0gdHJiZV9mYXVsdF9hY3Rpb24g ewo+PiArwqDCoMKgIFRSQkVfRkFVTFRfQUNUX1dSQVAsCj4+ICvCoMKgwqAgVFJCRV9GQVVMVF9B Q1RfU1BVUklPVVMsCj4+ICvCoMKgwqAgVFJCRV9GQVVMVF9BQ1RfRkFUQUwsCj4+ICt9Owo+PiAr Cj4+ICtzdHJ1Y3QgdHJiZV9wZXJmIHsKPiAKPiBQbGVhc2UgcmVuYW1lIHRoaXMgdG8gdHJiZV9i dWYuIFRoaXMgd2lsbCBiZSB1c2VkIGZvciBzeXNmcyBtb2RlIGFzIHdlbGwuCgpTdXJlLCB3aWxs IGRvLgoKPiAKPj4gK8KgwqDCoCB1bnNpZ25lZCBsb25nIHRyYmVfYmFzZTsKPj4gK8KgwqDCoCB1 bnNpZ25lZCBsb25nIHRyYmVfbGltaXQ7Cj4+ICvCoMKgwqAgdW5zaWduZWQgbG9uZyB0cmJlX3dy aXRlOwo+PiArwqDCoMKgIHBpZF90IHBpZDsKPiAKPiBXaHkgZG8gd2UgbmVlZCB0aGlzID8gVGhp cyBzZWVtcyB1bnVzZWQgYW5kIG1vcmVvdmVyLCB0aGVyZSBjYW5ub3QKPiBiZSBtdWx0aXBsZSB0 cmFjZXJzIGludG8gVFJCRS4gU28sIHdlIGRvbid0IG5lZWQgdG8gc2hhcmUgdGhlIHNpbmsKPiB1 bmxpa2UgdGhlIHRyYWRpdGlvbmFsIG9uZXMuCgpTdXJlLCB3aWxsIGRyb3AuCgo+IAo+PiArwqDC oMKgIGludCBucl9wYWdlczsKPj4gK8KgwqDCoCB2b2lkICoqcGFnZXM7Cj4+ICvCoMKgwqAgYm9v bCBzbmFwc2hvdDsKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9jcHVkYXRhICpjcHVkYXRhOwo+PiAr fTsKPj4gKwo+PiArc3RydWN0IHRyYmVfY3B1ZGF0YSB7Cj4+ICvCoMKgwqAgc3RydWN0IGNvcmVz aWdodF9kZXZpY2XCoMKgwqAgKmNzZGV2Owo+PiArwqDCoMKgIGJvb2wgdHJiZV9kYm07Cj4gCj4g V2h5IGRvIHdlIG5lZWQgdGhpcyA/CgpUaGlzIGlzIGFuIGludGVybmFsIGltcGxlbWVudGF0aW9u IGNoYXJhY3RlcmlzdGljIHdoaWNoIHNob3VsZCBiZQpwcmVzZW50ZWQgdG8gdGhlIHVzZXIgc3Bh Y2UgdmlhIHN5c2ZzIGZvciBiZXR0ZXIgdW5kZXJzdGFuZGluZyBhbmQKcHJvYmFibHkgZm9yIGRl YnVnIHB1cnBvc2UuIFRoZSBjdXJyZW50IHByb3Bvc2FsIGRvZXMgbm90IHN1cHBvcnQKdGhlIHNj ZW5hcmlvIHdoZW4gVFJCRSBEQk0gaXMgb2ZmLCB3aGljaCB3ZSBuZWVkIHRvIGluY29ycG9yYXRl CmxhdGVyIG9uLiBIZW5jZSBsZXRzIGp1c3QgbGVhdmUgdGhpcyBhcyBpcyBmb3Igbm93LgoKPiAK Pj4gK8KgwqDCoCB1NjQgdHJiZV9hbGlnbjsKPj4gK8KgwqDCoCBpbnQgY3B1Owo+PiArwqDCoMKg IGVudW0gY3NfbW9kZSBtb2RlOwo+PiArwqDCoMKgIHN0cnVjdCB0cmJlX3BlcmYgKnBlcmY7Cj4+ ICvCoMKgwqAgc3RydWN0IHRyYmVfZHJ2ZGF0YSAqZHJ2ZGF0YTsKPj4gK307Cj4+ICsKPj4gK3N0 cnVjdCB0cmJlX2RydmRhdGEgewo+PiArwqDCoMKgIHN0cnVjdCB0cmJlX2NwdWRhdGEgX19wZXJj cHUgKmNwdWRhdGE7Cj4+ICvCoMKgwqAgc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSBfX3BlcmNw dSAqaGFuZGxlOwo+IAo+IFNob3VsZG4ndCB0aGlzIGJlIDoKPiAKPiDCoMKgwqDCoHN0cnVjdCBw ZXJmX291dHB1dF9oYW5kbGUgX19wZXJjcHUgKipoYW5kbGUgPwo+IAo+IGFzIHdlIGdldCBhIGhh bmRsZSBmcm9tIHRoZSBldG0tcGVyZiBhbmQgaXMgbm90IGNvbnRyb2xsZWQgYnkKPiB0aGUgVFJC RSA/CgpTdXJlLCB3aWxsIGNoYW5nZSB0aGlzLgoKPiAKPj4gK8KgwqDCoCBzdHJ1Y3QgaGxpc3Rf bm9kZSBob3RwbHVnX25vZGU7Cj4+ICvCoMKgwqAgaW50IGlycTsKPj4gK8KgwqDCoCBjcHVtYXNr X3Qgc3VwcG9ydGVkX2NwdXM7Cj4+ICvCoMKgwqAgZW51bSBjcHVocF9zdGF0ZSB0cmJlX29ubGlu ZTsKPj4gK8KgwqDCoCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Owo+PiArwqDCoMKgIHN0 cnVjdCBjbGsgKmF0Y2xrOwo+IAo+IFdlIGRvbid0IGhhdmUgYW55IGNsb2NrcyBmb3IgdGhlIFRS QkUgaW5zdGFuY2UuIFBsZWFzZSByZW1vdmUuCgpTdXJlLCB3aWxsIGRyb3AuCgo+IAo+PiArfTsK Pj4gKwo+PiArc3RhdGljIGludCB0cmJlX2FsbG9jX25vZGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2 ZW50KQo+PiArewo+PiArwqDCoMKgIGlmIChldmVudC0+Y3B1ID09IC0xKQo+PiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuIE5VTUFfTk9fTk9ERTsKPj4gK8KgwqDCoCByZXR1cm4gY3B1X3RvX25vZGUo ZXZlbnQtPmNwdSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHRyYmVfZGlzYWJsZV9hbmRf ZHJhaW5fbG9jYWwodm9pZCkKPj4gK3sKPj4gK8KgwqDCoCB3cml0ZV9zeXNyZWdfcygwLCBTWVNf VFJCTElNSVRSX0VMMSk7Cj4+ICvCoMKgwqAgaXNiKCk7Cj4+ICvCoMKgwqAgZHNiKG5zaCk7Cj4+ ICvCoMKgwqAgYXNtKFRTQl9DU1lOQyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHRyYmVf cmVzZXRfbG9jYWwodm9pZCkKPj4gK3sKPj4gK8KgwqDCoCB0cmJlX2Rpc2FibGVfYW5kX2RyYWlu X2xvY2FsKCk7Cj4+ICvCoMKgwqAgd3JpdGVfc3lzcmVnX3MoMCwgU1lTX1RSQlBUUl9FTDEpOwo+ PiArwqDCoMKgIGlzYigpOwo+PiArCj4+ICvCoMKgwqAgd3JpdGVfc3lzcmVnX3MoMCwgU1lTX1RS QkJBU0VSX0VMMSk7Cj4+ICvCoMKgwqAgaXNiKCk7Cj4+ICsKPj4gK8KgwqDCoCB3cml0ZV9zeXNy ZWdfcygwLCBTWVNfVFJCU1JfRUwxKTsKPj4gK8KgwqDCoCBpc2IoKTsKPj4gK30KPj4gKwo+PiAr c3RhdGljIHZvaWQgdHJiZV9wYWRfYnVmKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRs ZSwgaW50IGxlbikKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9wZXJmICpwZXJmID0gZXRt X3BlcmZfc2lua19jb25maWcoaGFuZGxlKTsKPj4gK8KgwqDCoCB1NjQgaGVhZCA9IFBFUkZfSURY Mk9GRihoYW5kbGUtPmhlYWQsIHBlcmYpOwo+PiArCj4+ICvCoMKgwqAgbWVtc2V0KCh2b2lkICop IHBlcmYtPnRyYmVfYmFzZSArIGhlYWQsIEVURV9JR05PUkVfUEFDS0VULCBsZW4pOwo+PiArwqDC oMKgIGlmICghcGVyZi0+c25hcHNob3QpCj4+ICvCoMKgwqDCoMKgwqDCoCBwZXJmX2F1eF9vdXRw dXRfc2tpcChoYW5kbGUsIGxlbik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1bnNpZ25lZCBsb25n IHRyYmVfc25hcHNob3Rfb2Zmc2V0KHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSkK Pj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9wZXJmICpwZXJmID0gZXRtX3BlcmZfc2lua19j b25maWcoaGFuZGxlKTsKPj4gK8KgwqDCoCB1NjQgaGVhZCA9IFBFUkZfSURYMk9GRihoYW5kbGUt PmhlYWQsIHBlcmYpOwo+PiArwqDCoMKgIHU2NCBsaW1pdCA9IHBlcmYtPm5yX3BhZ2VzICogUEFH RV9TSVpFOwo+PiArCj4gCj4gU28gd2UgYXJlIHVzaW5nIGhhbGYgb2YgdGhlIGJ1ZmZlciBmb3Ig c25hcHNob3QgbW9kZSB0byBhdm9pZCBhIGNhc2Ugd2hlcmUgdGhlCj4gYW5hbHl6ZXIgaXMgdW5h YmxlIHRvIGRlY29kZSB0aGUgdHJhY2UgaW4gY2FzZSBvZiBhbiBvdmVyZmxvdy4KClJpZ2h0LgoK PiAKPj4gK8KgwqDCoCBpZiAoaGVhZCA8IGxpbWl0ID4+IDEpCj4+ICvCoMKgwqDCoMKgwqDCoCBs aW1pdCA+Pj0gMTsKPiAKPiBBbHNvIHRoaXMgbmVlZHMgdG8gYmUgdGhvdWdodCBvdXQuIFdlIG1h eSBub3QgbmVlZCB0aGlzIHJlc3RyaWN0aW9uLiBUaGUgdHJhY2UgZGVjb2Rlcgo+IHdpbGwgYmUg YWJsZSB0byB3YWxrIGZvcndhcmQgYW5kIHRoZW4gZmluZCBhIHN5bmNocm9uaXphdGlvbiBwYWNr ZXQgYW5kIHRoZW4gY29udGludWUKPiB0aGUgdHJhY2luZyBmcm9tIHRoZXJlLiBTbywgd2UgY291 bGQgdXNlIHRoZSBlbnRpcmUgYnVmZmVyIGZvciBUUkJFLgoKT2theS4gTWF5IGJlIHdlIGNvdWxk IGp1c3QgZ28gd2l0aCBoYWxmIHRoZSBUUkJFIGJ1ZmZlciBmb3Igbm93IGFuZApsYXRlciBvbiwg dXNlIHRoZSBlbnRpcmUgYnVmZmVyIGFmdGVyIGJldHRlciB1bmRlcnN0YW5kaW5nIG9uIHRoaXMg PwoKPiAKPiAKPj4gKwo+PiArwqDCoMKgIHJldHVybiBsaW1pdDsKPj4gK30KPj4gKwo+PiArc3Rh dGljIHVuc2lnbmVkIGxvbmcgdHJiZV9ub3JtYWxfb2Zmc2V0KHN0cnVjdCBwZXJmX291dHB1dF9o YW5kbGUgKmhhbmRsZSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9wZXJmICpwZXJmID0g ZXRtX3BlcmZfc2lua19jb25maWcoaGFuZGxlKTsKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9jcHVk YXRhICpjcHVkYXRhID0gcGVyZi0+Y3B1ZGF0YTsKPj4gK8KgwqDCoCBjb25zdCB1NjQgYnVmc2l6 ZSA9IHBlcmYtPm5yX3BhZ2VzICogUEFHRV9TSVpFOwo+PiArwqDCoMKgIHU2NCBsaW1pdCA9IGJ1 ZnNpemU7Cj4+ICvCoMKgwqAgdTY0IGhlYWQsIHRhaWwsIHdha2V1cDsKPj4gKwo+IAo+IENvbW1l bnRhcnkgcGxlYXNlLgoKU3VyZSwgd2lsbCBhZGQgc29tZS4KCj4gCj4+ICvCoMKgwqAgaGVhZCA9 IFBFUkZfSURYMk9GRihoYW5kbGUtPmhlYWQsIHBlcmYpOwo+PiArwqDCoMKgIGlmICghSVNfQUxJ R05FRChoZWFkLCBjcHVkYXRhLT50cmJlX2FsaWduKSkgewo+PiArwqDCoMKgwqDCoMKgwqAgdW5z aWduZWQgbG9uZyBkZWx0YSA9IHJvdW5kdXAoaGVhZCwgY3B1ZGF0YS0+dHJiZV9hbGlnbikgLSBo ZWFkOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBkZWx0YSA9IG1pbihkZWx0YSwgaGFuZGxlLT5z aXplKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHRyYmVfcGFkX2J1ZihoYW5kbGUsIGRlbHRhKTsKPj4g K8KgwqDCoMKgwqDCoMKgIGhlYWQgPSBQRVJGX0lEWDJPRkYoaGFuZGxlLT5oZWFkLCBwZXJmKTsK Pj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIWhhbmRsZS0+c2l6ZSkgewo+PiArwqDC oMKgwqDCoMKgwqAgcGVyZl9hdXhfb3V0cHV0X2ZsYWcoaGFuZGxlLCBQRVJGX0FVWF9GTEFHX1RS VU5DQVRFRCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4gK8KgwqDCoCB9Cj4+ICsK Pj4gK8KgwqDCoCB0YWlsID0gUEVSRl9JRFgyT0ZGKGhhbmRsZS0+aGVhZCArIGhhbmRsZS0+c2l6 ZSwgcGVyZik7Cj4+ICvCoMKgwqAgd2FrZXVwID0gUEVSRl9JRFgyT0ZGKGhhbmRsZS0+d2FrZXVw LCBwZXJmKTsKPj4gKwo+IAo+PiArwqDCoMKgIGlmIChoZWFkIDwgdGFpbCkKPiAKPiDCoGNvbW1l bnQKPiAKPj4gK8KgwqDCoMKgwqDCoMKgIGxpbWl0ID0gcm91bmRfZG93bih0YWlsLCBQQUdFX1NJ WkUpOwo+PiArCj4+ICvCoMKgwqAgaWYgKGhhbmRsZS0+d2FrZXVwIDwgKGhhbmRsZS0+aGVhZCAr IGhhbmRsZS0+c2l6ZSkgJiYgaGVhZCA8PSB3YWtldXApCj4+ICvCoMKgwqDCoMKgwqDCoCBsaW1p dCA9IG1pbihsaW1pdCwgcm91bmRfdXAod2FrZXVwLCBQQUdFX1NJWkUpKTsKPiAKPiBjb21tZW50 LiBBbHNvIGRvIHdlIG5lZWQgYW4gYWxpZ25lbWVudCB0byBQQUdFX1NJWkUgPwoKTGltaXQgaGFz IHRvIGJlIGFsd2F5cyBQQUdFX1NJWkUgYWxpZ25lZCBiZWNhdXNlIGl0cyBldmVudHVhbGx5IGdv aW5nCnRvIGJlIHRoZSBUUkJFIGxpbWl0IHBvaW50ZXIsIGFmdGVyIGdldHRpbmcgYWRkZWQgaW50 byB0aGUgVFJCRSBiYXNlCnBvaW50ZXIuIFdpbGwgYWRkIHNvbWUgbW9yZSBjb21tZW50IGhlcmUg YXMgd2VsbC4KCj4gCj4+ICsKPj4gK8KgwqDCoCBpZiAobGltaXQgPiBoZWFkKQo+PiArwqDCoMKg wqDCoMKgwqAgcmV0dXJuIGxpbWl0Owo+PiArCj4+ICvCoMKgwqAgdHJiZV9wYWRfYnVmKGhhbmRs ZSwgaGFuZGxlLT5zaXplKTsKPj4gK8KgwqDCoCBwZXJmX2F1eF9vdXRwdXRfZmxhZyhoYW5kbGUs IFBFUkZfQVVYX0ZMQUdfVFJVTkNBVEVEKTsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4g Kwo+PiArc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3RyYmVfbGltaXQoc3RydWN0IHBlcmZfb3V0 cHV0X2hhbmRsZSAqaGFuZGxlKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCB0cmJlX3BlcmYgKnBl cmYgPSBldG1fcGVyZl9zaW5rX2NvbmZpZyhoYW5kbGUpOwo+PiArwqDCoMKgIHVuc2lnbmVkIGxv bmcgb2Zmc2V0Owo+PiArCj4+ICvCoMKgwqAgaWYgKHBlcmYtPnNuYXBzaG90KQo+PiArwqDCoMKg wqDCoMKgwqAgb2Zmc2V0ID0gdHJiZV9zbmFwc2hvdF9vZmZzZXQoaGFuZGxlKTsKPj4gK8KgwqDC oCBlbHNlCj4+ICvCoMKgwqDCoMKgwqDCoCBvZmZzZXQgPSB0cmJlX25vcm1hbF9vZmZzZXQoaGFu ZGxlKTsKPj4gK8KgwqDCoCByZXR1cm4gcGVyZi0+dHJiZV9iYXNlICsgb2Zmc2V0Owo+PiArfQo+ PiArCj4+ICtzdGF0aWMgdm9pZCB0cmJlX2VuYWJsZV9odyhzdHJ1Y3QgdHJiZV9wZXJmICpwZXJm KQo+PiArewo+PiArwqDCoMKgIFdBUk5fT04ocGVyZi0+dHJiZV93cml0ZSA8IHBlcmYtPnRyYmVf YmFzZSk7Cj4+ICvCoMKgwqAgV0FSTl9PTihwZXJmLT50cmJlX3dyaXRlID49IHBlcmYtPnRyYmVf bGltaXQpOwo+PiArwqDCoMKgIHNldF90cmJlX2Rpc2FibGVkKCk7Cj4+ICvCoMKgwqAgY2xyX3Ry YmVfaXJxKCk7Cj4+ICvCoMKgwqAgY2xyX3RyYmVfd3JhcCgpOwo+PiArwqDCoMKgIGNscl90cmJl X2Fib3J0KCk7Cj4+ICvCoMKgwqAgY2xyX3RyYmVfZWMoKTsKPj4gK8KgwqDCoCBjbHJfdHJiZV9i c2MoKTsKPj4gK8KgwqDCoCBjbHJfdHJiZV9mc2MoKTsKPiAKPiBQbGVhc2UgbWVyZ2UgYWxsIG9m IHRoZXNlIGZpZWxkIHVwZGF0ZXMgdG8gc2luZ2xlIHJlZ2lzdGVyIHVwZGF0ZQo+IHVubGVzcyBt YW5kYXRlZCBieSB0aGUgYXJjaGl0ZWN0dXJlLgoKU3VyZSwgd2lsbCBkby4KCj4gCj4+ICvCoMKg wqAgc2V0X3RyYmVfdmlydHVhbF9tb2RlKCk7Cj4+ICvCoMKgwqAgc2V0X3RyYmVfZmlsbF9tb2Rl KFRSQkVfRklMTF9TVE9QKTsKPj4gK8KgwqDCoCBzZXRfdHJiZV90cmlnX21vZGUoVFJCRV9UUklH R0VSX0lHTk9SRSk7Cj4gCj4gU2FtZSBoZXJlIF5eCgpTdXJlLCB3aWxsIGRvLgoKPiAKPj4gK8Kg wqDCoCBpc2IoKTsKPj4gK8KgwqDCoCBzZXRfdHJiZV9iYXNlX3BvaW50ZXIocGVyZi0+dHJiZV9i YXNlKTsKPj4gK8KgwqDCoCBzZXRfdHJiZV9saW1pdF9wb2ludGVyKHBlcmYtPnRyYmVfbGltaXQp Owo+PiArwqDCoMKgIHNldF90cmJlX3dyaXRlX3BvaW50ZXIocGVyZi0+dHJiZV93cml0ZSk7Cj4+ ICvCoMKgwqAgaXNiKCk7Cj4+ICvCoMKgwqAgZHNiKGlzaHN0KTsKPj4gK8KgwqDCoCBmbHVzaF90 bGJfYWxsKCk7Cj4gCj4gV2h5IGlzIHRoaXMgbmVlZGVkID8KCldpbGwgZHJvcCBmbHVzaF90bGJf YWxsKCkuCgo+IAo+PiArwqDCoMKgIHNldF90cmJlX3J1bm5pbmcoKTsKPj4gK8KgwqDCoCBzZXRf dHJiZV9lbmFibGVkKCk7Cj4+ICvCoMKgwqAgYXNtKFRTQl9DU1lOQyk7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyB2b2lkICphcm1fdHJiZV9hbGxvY19idWZmZXIoc3RydWN0IGNvcmVzaWdodF9kZXZp Y2UgKmNzZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVj dCBwZXJmX2V2ZW50ICpldmVudCwgdm9pZCAqKnBhZ2VzLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGludCBucl9wYWdlcywgYm9vbCBzbmFwc2hvdCkKPj4gK3sKPj4g K8KgwqDCoCBzdHJ1Y3QgdHJiZV9wZXJmICpwZXJmOwo+PiArwqDCoMKgIHN0cnVjdCBwYWdlICoq cGdsaXN0Owo+PiArwqDCoMKgIGludCBpOwo+PiArCj4+ICvCoMKgwqAgaWYgKChucl9wYWdlcyA8 IDIpIHx8IChzbmFwc2hvdCAmJiAobnJfcGFnZXMgJiAxKSkpCj4gCj4gV2UgbWF5IGJlIGFibGUg dG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiBvbiBzbmFwc2hvdCBtb2RlLCBzZWUgbXkgY29tbWVu dAo+IGFib3ZlLgoKU3VyZSwgd2lsbCBkcm9wIHdoZW4gdGhlIGVudGlyZSBidWZmZXIgaXMgdXNl ZCBmb3IgdGhlIHNuYXBzaG90IG1vZGUuCgo+IAo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5V TEw7Cj4+ICsKPj4gK8KgwqDCoCBwZXJmID0ga3phbGxvY19ub2RlKHNpemVvZigqcGVyZiksIEdG UF9LRVJORUwsIHRyYmVfYWxsb2Nfbm9kZShldmVudCkpOwo+PiArwqDCoMKgIGlmIChJU19FUlIo cGVyZikpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPj4gKwo+ PiArwqDCoMKgIHBnbGlzdCA9IGtjYWxsb2MobnJfcGFnZXMsIHNpemVvZigqcGdsaXN0KSwgR0ZQ X0tFUk5FTCk7Cj4+ICvCoMKgwqAgaWYgKElTX0VSUihwZ2xpc3QpKSB7Cj4+ICvCoMKgwqDCoMKg wqDCoCBrZnJlZShwZXJmKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBFUlJfUFRSKC1FTk9N RU0pOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBucl9wYWdl czsgaSsrKQo+PiArwqDCoMKgwqDCoMKgwqAgcGdsaXN0W2ldID0gdmlydF90b19wYWdlKHBhZ2Vz W2ldKTsKPj4gKwo+PiArwqDCoMKgIHBlcmYtPnRyYmVfYmFzZSA9ICh1bnNpZ25lZCBsb25nKSB2 bWFwKHBnbGlzdCwgbnJfcGFnZXMsIFZNX01BUCwgUEFHRV9LRVJORUwpOwo+PiArwqDCoMKgIGlm IChJU19FUlIoKHZvaWQgKikgcGVyZi0+dHJiZV9iYXNlKSkgewo+PiArwqDCoMKgwqDCoMKgwqAg a2ZyZWUocGdsaXN0KTsKPj4gK8KgwqDCoMKgwqDCoMKgIGtmcmVlKHBlcmYpOwo+PiArwqDCoMKg wqDCoMKgwqAgcmV0dXJuIEVSUl9QVFIocGVyZi0+dHJiZV9iYXNlKTsKPj4gK8KgwqDCoCB9Cj4+ ICvCoMKgwqAgcGVyZi0+dHJiZV9saW1pdCA9IHBlcmYtPnRyYmVfYmFzZSArIG5yX3BhZ2VzICog UEFHRV9TSVpFOwo+PiArwqDCoMKgIHBlcmYtPnRyYmVfd3JpdGUgPSBwZXJmLT50cmJlX2Jhc2U7 Cj4+ICvCoMKgwqAgcGVyZi0+cGlkID0gdGFza19waWRfbnIoZXZlbnQtPm93bmVyKTsKPj4gK8Kg wqDCoCBwZXJmLT5zbmFwc2hvdCA9IHNuYXBzaG90Owo+PiArwqDCoMKgIHBlcmYtPm5yX3BhZ2Vz ID0gbnJfcGFnZXM7Cj4+ICvCoMKgwqAgcGVyZi0+cGFnZXMgPSBwYWdlczsKPj4gK8KgwqDCoCBr ZnJlZShwZ2xpc3QpOwo+PiArwqDCoMKgIHJldHVybiBwZXJmOwo+PiArfQo+PiArCj4+ICt2b2lk IGFybV90cmJlX2ZyZWVfYnVmZmVyKHZvaWQgKmNvbmZpZykKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1 Y3QgdHJiZV9wZXJmICpwZXJmID0gY29uZmlnOwo+PiArCj4+ICvCoMKgwqAgdnVubWFwKCh2b2lk ICopIHBlcmYtPnRyYmVfYmFzZSk7Cj4+ICvCoMKgwqAga2ZyZWUocGVyZik7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFybV90cmJlX3VwZGF0ZV9idWZmZXIoc3RydWN0IGNv cmVzaWdodF9kZXZpY2UgKmNzZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZvaWQgKmNvbmZp ZykKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9kcnZkYXRhICpkcnZkYXRhID0gZGV2X2dl dF9kcnZkYXRhKGNzZGV2LT5kZXYucGFyZW50KTsKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9jcHVk YXRhICpjcHVkYXRhID0gZGV2X2dldF9kcnZkYXRhKCZjc2Rldi0+ZGV2KTsKPj4gK8KgwqDCoCBz dHJ1Y3QgdHJiZV9wZXJmICpwZXJmID0gY29uZmlnOwo+PiArwqDCoMKgIHVuc2lnbmVkIGxvbmcg c2l6ZSwgb2Zmc2V0Owo+PiArCj4+ICvCoMKgwqAgV0FSTl9PTihwZXJmLT5jcHVkYXRhICE9IGNw dWRhdGEpOwo+PiArwqDCoMKgIFdBUk5fT04oY3B1ZGF0YS0+Y3B1ICE9IHNtcF9wcm9jZXNzb3Jf aWQoKSk7Cj4+ICvCoMKgwqAgV0FSTl9PTihjcHVkYXRhLT5tb2RlICE9IENTX01PREVfUEVSRik7 Cj4+ICvCoMKgwqAgV0FSTl9PTihjcHVkYXRhLT5kcnZkYXRhICE9IGRydmRhdGEpOwo+PiArCj4+ ICvCoMKgwqAgb2Zmc2V0ID0gZ2V0X3RyYmVfd3JpdGVfcG9pbnRlcigpIC0gZ2V0X3RyYmVfYmFz ZV9wb2ludGVyKCk7Cj4+ICvCoMKgwqAgc2l6ZSA9IG9mZnNldCAtIFBFUkZfSURYMk9GRihoYW5k bGUtPmhlYWQsIHBlcmYpOwo+PiArwqDCoMKgIGlmIChwZXJmLT5zbmFwc2hvdCkKPj4gK8KgwqDC oMKgwqDCoMKgIGhhbmRsZS0+aGVhZCArPSBzaXplOwo+PiArwqDCoMKgIHJldHVybiBzaXplOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGFybV90cmJlX2VuYWJsZShzdHJ1Y3QgY29yZXNpZ2h0 X2RldmljZSAqY3NkZXYsIHUzMiBtb2RlLCB2b2lkICpkYXRhKQo+PiArewo+PiArwqDCoMKgIHN0 cnVjdCB0cmJlX2RydmRhdGEgKmRydmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoY3NkZXYtPmRldi5w YXJlbnQpOwo+PiArwqDCoMKgIHN0cnVjdCB0cmJlX2NwdWRhdGEgKmNwdWRhdGEgPSBkZXZfZ2V0 X2RydmRhdGEoJmNzZGV2LT5kZXYpOwo+PiArwqDCoMKgIHN0cnVjdCBwZXJmX291dHB1dF9oYW5k bGUgKmhhbmRsZSA9IGRhdGE7Cj4+ICvCoMKgwqAgc3RydWN0IHRyYmVfcGVyZiAqcGVyZiA9IGV0 bV9wZXJmX3NpbmtfY29uZmlnKGhhbmRsZSk7Cj4+ICsKPj4gK8KgwqDCoCBXQVJOX09OKGNwdWRh dGEtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpOwo+PiArwqDCoMKgIFdBUk5fT04obW9kZSAh PSBDU19NT0RFX1BFUkYpOwo+IAo+IFdoeSBXQVJOX09OID8gU2ltcGx5IHJldHVybiAtRUlOVkFM ID8gQWxzbyB5b3UgbmVlZCBhIGNoZWNrIHRvIG1ha2Ugc3VyZQo+IHRoZSBtb2RlIGlzIERJU0FC TEVEICh3aGVuIHlvdSBnZXQgdG8gc3lzZnMgbW9kZSkuCj4gCj4+ICvCoMKgwqAgV0FSTl9PTihj cHVkYXRhLT5kcnZkYXRhICE9IGRydmRhdGEpOwo+PiArCj4+ICvCoMKgwqAgKnRoaXNfY3B1X3B0 cihkcnZkYXRhLT5oYW5kbGUpID0gKmhhbmRsZTsKPiAKPiBUaGF0IGlzIHdyb25nLiBTdG9yaW5n IGEgbG9jYWwgY29weSBvZiBhIGdsb2JhbCBwZXJmIGdlbmVyaWMgc3RydWN0dXJlCj4gaXMgY2Fs bGluZyBmb3IgdHJvdWJsZSwgYXNzdW1pbmcgdGhhdCB0aGUgZ2xvYmFsIHN0cnVjdHVyZSBkb2Vz bid0IGNoYW5nZQo+IGJlbmVhdGggdXMuIFBsZWFzZSBzdG9yZSBoYW5kbGUgcHRyLgoKU3VyZSwg d2lsbCBjaGFuZ2UuCgo+IAo+PiArwqDCoMKgIGNwdWRhdGEtPnBlcmYgPSBwZXJmOwo+PiArwqDC oMKgIGNwdWRhdGEtPm1vZGUgPSBtb2RlOwo+PiArwqDCoMKgIHBlcmYtPmNwdWRhdGEgPSBjcHVk YXRhOwo+PiArwqDCoMKgIHBlcmYtPnRyYmVfd3JpdGUgPSBwZXJmLT50cmJlX2Jhc2UgKyBQRVJG X0lEWDJPRkYoaGFuZGxlLT5oZWFkLCBwZXJmKTsKPj4gK8KgwqDCoCBwZXJmLT50cmJlX2xpbWl0 ID0gZ2V0X3RyYmVfbGltaXQoaGFuZGxlKTsKPj4gK8KgwqDCoCBpZiAocGVyZi0+dHJiZV9saW1p dCA9PSBwZXJmLT50cmJlX2Jhc2UpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHRyYmVfZGlzYWJsZV9h bmRfZHJhaW5fbG9jYWwoKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiArwqDCoMKg IH0KPj4gK8KgwqDCoCB0cmJlX2VuYWJsZV9odyhwZXJmKTsKPj4gK8KgwqDCoCByZXR1cm4gMDsK Pj4gK30KPj4gKwo+PiArc3RhdGljIGludCBhcm1fdHJiZV9kaXNhYmxlKHN0cnVjdCBjb3Jlc2ln aHRfZGV2aWNlICpjc2RldikKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9kcnZkYXRhICpk cnZkYXRhID0gZGV2X2dldF9kcnZkYXRhKGNzZGV2LT5kZXYucGFyZW50KTsKPj4gK8KgwqDCoCBz dHJ1Y3QgdHJiZV9jcHVkYXRhICpjcHVkYXRhID0gZGV2X2dldF9kcnZkYXRhKCZjc2Rldi0+ZGV2 KTsKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9wZXJmICpwZXJmID0gY3B1ZGF0YS0+cGVyZjsKPj4g Kwo+PiArwqDCoMKgIFdBUk5fT04ocGVyZi0+Y3B1ZGF0YSAhPSBjcHVkYXRhKTsKPj4gK8KgwqDC oCBXQVJOX09OKGNwdWRhdGEtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpOwo+PiArwqDCoMKg IFdBUk5fT04oY3B1ZGF0YS0+bW9kZSAhPSBDU19NT0RFX1BFUkYpOwo+PiArwqDCoMKgIFdBUk5f T04oY3B1ZGF0YS0+ZHJ2ZGF0YSAhPSBkcnZkYXRhKTsKPj4gKwo+PiArwqDCoMKgIHRyYmVfZGlz YWJsZV9hbmRfZHJhaW5fbG9jYWwoKTsKPj4gK8KgwqDCoCBwZXJmLT5jcHVkYXRhID0gTlVMTDsK Pj4gK8KgwqDCoCBjcHVkYXRhLT5wZXJmID0gTlVMTDsKPj4gK8KgwqDCoCBjcHVkYXRhLT5tb2Rl ID0gQ1NfTU9ERV9ESVNBQkxFRDsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiAr c3RhdGljIHZvaWQgdHJiZV9oYW5kbGVfZmF0YWwoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAq aGFuZGxlKQo+PiArewo+PiArwqDCoMKgIHBlcmZfYXV4X291dHB1dF9mbGFnKGhhbmRsZSwgUEVS Rl9BVVhfRkxBR19UUlVOQ0FURUQpOwo+PiArwqDCoMKgIHBlcmZfYXV4X291dHB1dF9lbmQoaGFu ZGxlLCAwKTsKPj4gK8KgwqDCoCB0cmJlX2Rpc2FibGVfYW5kX2RyYWluX2xvY2FsKCk7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHRyYmVfaGFuZGxlX3NwdXJpb3VzKHN0cnVjdCBwZXJmX291 dHB1dF9oYW5kbGUgKmhhbmRsZSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9wZXJmICpw ZXJmID0gZXRtX3BlcmZfc2lua19jb25maWcoaGFuZGxlKTsKPj4gKwo+PiArwqDCoMKgIHBlcmYt PnRyYmVfd3JpdGUgPSBwZXJmLT50cmJlX2Jhc2UgKyBQRVJGX0lEWDJPRkYoaGFuZGxlLT5oZWFk LCBwZXJmKTsKPj4gK8KgwqDCoCBwZXJmLT50cmJlX2xpbWl0ID0gZ2V0X3RyYmVfbGltaXQoaGFu ZGxlKTsKPj4gK8KgwqDCoCBpZiAocGVyZi0+dHJiZV9saW1pdCA9PSBwZXJmLT50cmJlX2Jhc2Up IHsKPj4gK8KgwqDCoMKgwqDCoMKgIHRyYmVfZGlzYWJsZV9hbmRfZHJhaW5fbG9jYWwoKTsKPj4g K8KgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4gK8KgwqDCoCB9Cj4+ICvCoMKgwqAgdHJiZV9lbmFi bGVfaHcocGVyZik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHRyYmVfaGFuZGxlX292ZXJm bG93KHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSkKPj4gK3sKPj4gK8KgwqDCoCBz dHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBoYW5kbGUtPmV2ZW50Owo+PiArwqDCoMKgIHN0cnVj dCB0cmJlX3BlcmYgKnBlcmYgPSBldG1fcGVyZl9zaW5rX2NvbmZpZyhoYW5kbGUpOwo+PiArwqDC oMKgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplOwo+PiArwqDCoMKgIHN0cnVjdCBldG1fZXZl bnRfZGF0YSAqZXZlbnRfZGF0YTsKPj4gKwo+PiArwqDCoMKgIG9mZnNldCA9IGdldF90cmJlX2xp bWl0X3BvaW50ZXIoKSAtIGdldF90cmJlX2Jhc2VfcG9pbnRlcigpOwo+PiArwqDCoMKgIHNpemUg PSBvZmZzZXQgLSBQRVJGX0lEWDJPRkYoaGFuZGxlLT5oZWFkLCBwZXJmKTsKPj4gK8KgwqDCoCBp ZiAocGVyZi0+c25hcHNob3QpCj4+ICvCoMKgwqDCoMKgwqDCoCBoYW5kbGUtPmhlYWQgPSBvZmZz ZXQ7Cj4gCj4gSXMgdGhpcyBjb3JyZWN0ID8gT3Igd2FzIHRoaXMgc3VwcG9zZWQgdG8gbWVhbiA6 Cj4gwqDCoMKgwqDCoMKgwqAgaGFuZGxlLT5oZWFkICs9IG9mZnNldDsKCkhtbSwgbm90IHRvbyBz dXJlIGFib3V0IHRoaXMgYnV0IHRoZSBTUEUgZHJpdmVyIGRvZXMgdGhlIHNhbWUgaW4KYXJtX3Nw ZV9wZXJmX2F1eF9vdXRwdXRfZW5kKCkuCgo+IAo+IAo+PiArwqDCoMKgIHBlcmZfYXV4X291dHB1 dF9lbmQoaGFuZGxlLCBzaXplKTsKPj4gKwo+PiArwqDCoMKgIGV2ZW50X2RhdGEgPSBwZXJmX2F1 eF9vdXRwdXRfYmVnaW4oaGFuZGxlLCBldmVudCk7Cj4+ICvCoMKgwqAgaWYgKCFldmVudF9kYXRh KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBldmVudC0+aHcuc3RhdGUgfD0gUEVSRl9IRVNfU1RPUFBF RDsKPj4gK8KgwqDCoMKgwqDCoMKgIHRyYmVfZGlzYWJsZV9hbmRfZHJhaW5fbG9jYWwoKTsKPj4g K8KgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4gK8KgwqDCoCB9Cj4+ICvCoMKgwqAgcGVyZi0+dHJi ZV93cml0ZSA9IHBlcmYtPnRyYmVfYmFzZTsKPj4gK8KgwqDCoCBwZXJmLT50cmJlX2xpbWl0ID0g Z2V0X3RyYmVfbGltaXQoaGFuZGxlKTsKPj4gK8KgwqDCoCBpZiAocGVyZi0+dHJiZV9saW1pdCA9 PSBwZXJmLT50cmJlX2Jhc2UpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHRyYmVfZGlzYWJsZV9hbmRf ZHJhaW5fbG9jYWwoKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4gK8KgwqDCoCB9Cj4+ ICvCoMKgwqAgKnRoaXNfY3B1X3B0cihwZXJmLT5jcHVkYXRhLT5kcnZkYXRhLT5oYW5kbGUpID0g KmhhbmRsZTsKPj4gK8KgwqDCoCB0cmJlX2VuYWJsZV9odyhwZXJmKTsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGJvb2wgaXNfcGVyZl90cmJlKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRs ZSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9wZXJmICpwZXJmID0gZXRtX3BlcmZfc2lu a19jb25maWcoaGFuZGxlKTsKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9jcHVkYXRhICpjcHVkYXRh ID0gcGVyZi0+Y3B1ZGF0YTsKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9kcnZkYXRhICpkcnZkYXRh ID0gY3B1ZGF0YS0+ZHJ2ZGF0YTsKPiAKPiBDYW4geW91IHRydXN0IHRoZSBjcHVkYXRhIHB0ciBo ZXJlIGFzIHdlIGFyZSBzdGlsbCB2ZXJpZnlpbmcKPiBpZiB0aGlzIHdhcyBsZWdpdGltYXRlID8K Ckl0IHZlcmlmaWVzIHRoZSBsZWdpdGltYWN5IG9mIHRoZSBpbnRlcnJ1cHQgYXMgYmVpbmcgZ2Vu ZXJhdGVkIGZyb20KYW4gYWN0aXZlIHBlcmYgc2Vzc2lvbiBvbiB0aGUgY3B1IHdpdGggc29tZSBz aW1wbGUgc2FuaXR5IGNoZWNrcy4KQnV0IGFsbCBkYXRhIHN0cnVjdHVyZSBsaW5rYWdlIHNob3Vs ZCBiZSBpbnRhY3QuIFRoZSBwZXJmIGhhbmRsZQpvcmlnaW5hdGVzIGZyb20gdGhlIGRydmRhdGEg cGVyY3B1IHN0cnVjdHVyZSB3aGljaCBzaG91bGQgaGF2ZSBhCnRyYmVfcGVyZiBhbmQgZXZlcnl0 aGluZyBmbG93cyBmcm9tIHRoZXJlLgoKPiAKPj4gK8KgwqDCoCBpbnQgY3B1ID0gc21wX3Byb2Nl c3Nvcl9pZCgpOwo+PiArCj4+ICvCoMKgwqAgV0FSTl9PTihwZXJmLT50cmJlX2Jhc2UgIT0gZ2V0 X3RyYmVfYmFzZV9wb2ludGVyKCkpOwo+PiArwqDCoMKgIFdBUk5fT04ocGVyZi0+dHJiZV9saW1p dCAhPSBnZXRfdHJiZV9saW1pdF9wb2ludGVyKCkpOwo+PiArCj4+ICvCoMKgwqAgaWYgKGNwdWRh dGEtPm1vZGUgIT0gQ1NfTU9ERV9QRVJGKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGZhbHNl Owo+PiArCj4+ICvCoMKgwqAgaWYgKGNwdWRhdGEtPmNwdSAhPSBjcHUpCj4+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm4gZmFsc2U7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIWNwdW1hc2tfdGVzdF9jcHUo Y3B1LCAmZHJ2ZGF0YS0+c3VwcG9ydGVkX2NwdXMpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IGZhbHNlOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHRydWU7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyBlbnVtIHRyYmVfZmF1bHRfYWN0aW9uIHRyYmVfZ2V0X2ZhdWx0X2FjdChzdHJ1Y3QgcGVyZl9v dXRwdXRfaGFuZGxlICpoYW5kbGUpCj4+ICt7Cj4+ICvCoMKgwqAgZW51bSB0cmJlX2VjIGVjID0g Z2V0X3RyYmVfZWMoKTsKPj4gK8KgwqDCoCBlbnVtIHRyYmVfYnNjIGJzYyA9IGdldF90cmJlX2Jz YygpOwo+PiArCj4+ICvCoMKgwqAgV0FSTl9PTihpc190cmJlX3J1bm5pbmcoKSk7Cj4+ICvCoMKg wqAgYXNtKFRTQl9DU1lOQyk7Cj4+ICvCoMKgwqAgZHNiKG5zaCk7Cj4+ICvCoMKgwqAgaXNiKCk7 Cj4+ICsKPj4gK8KgwqDCoCBpZiAoaXNfdHJiZV90cmcoKSB8fCBpc190cmJlX2Fib3J0KCkpCj4+ ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gVFJCRV9GQVVMVF9BQ1RfRkFUQUw7Cj4+ICsKPj4gK8Kg wqDCoCBpZiAoKGVjID09IFRSQkVfRUNfU1RBR0UxX0FCT1JUKSB8fCAoZWMgPT0gVFJCRV9FQ19T VEFHRTJfQUJPUlQpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFRSQkVfRkFVTFRfQUNUX0ZB VEFMOwo+PiArCj4+ICvCoMKgwqAgaWYgKGlzX3RyYmVfd3JhcCgpICYmIChlYyA9PSBUUkJFX0VD X09USEVSUykgJiYgKGJzYyA9PSBUUkJFX0JTQ19GSUxMRUQpKSB7Cj4+ICvCoMKgwqDCoMKgwqDC oCBpZiAoZ2V0X3RyYmVfd3JpdGVfcG9pbnRlcigpID09IGdldF90cmJlX2Jhc2VfcG9pbnRlcigp KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gVFJCRV9GQVVMVF9BQ1RfV1JBUDsK Pj4gK8KgwqDCoCB9Cj4+ICvCoMKgwqAgcmV0dXJuIFRSQkVfRkFVTFRfQUNUX1NQVVJJT1VTOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgaXJxcmV0dXJuX3QgYXJtX3RyYmVfaXJxX2hhbmRsZXIoaW50 IGlycSwgdm9pZCAqZGV2KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBwZXJmX291dHB1dF9oYW5k bGUgKmhhbmRsZSA9IGRldjsKPj4gK8KgwqDCoCBlbnVtIHRyYmVfZmF1bHRfYWN0aW9uIGFjdDsK Pj4gKwo+PiArwqDCoMKgIFdBUk5fT04oIWlzX3RyYmVfaXJxKCkpOwo+PiArwqDCoMKgIGNscl90 cmJlX2lycSgpOwo+PiArCj4+ICvCoMKgwqAgaWYgKCFwZXJmX2dldF9hdXgoaGFuZGxlKSkKPj4g K8KgwqDCoMKgwqDCoMKgIHJldHVybiBJUlFfTk9ORTsKPj4gKwo+PiArwqDCoMKgIGlmICghaXNf cGVyZl90cmJlKGhhbmRsZSkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gSVJRX05PTkU7Cj4+ ICsKPj4gK8KgwqDCoCBpcnFfd29ya19ydW4oKTsKPj4gKwo+PiArwqDCoMKgIGFjdCA9IHRyYmVf Z2V0X2ZhdWx0X2FjdChoYW5kbGUpOwo+PiArwqDCoMKgIHN3aXRjaCAoYWN0KSB7Cj4+ICvCoMKg wqAgY2FzZSBUUkJFX0ZBVUxUX0FDVF9XUkFQOgo+PiArwqDCoMKgwqDCoMKgwqAgdHJiZV9oYW5k bGVfb3ZlcmZsb3coaGFuZGxlKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKg IGNhc2UgVFJCRV9GQVVMVF9BQ1RfU1BVUklPVVM6Cj4+ICvCoMKgwqDCoMKgwqDCoCB0cmJlX2hh bmRsZV9zcHVyaW91cyhoYW5kbGUpOwo+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKg wqAgY2FzZSBUUkJFX0ZBVUxUX0FDVF9GQVRBTDoKPj4gK8KgwqDCoMKgwqDCoMKgIHRyYmVfaGFu ZGxlX2ZhdGFsKGhhbmRsZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoCB9 Cj4+ICvCoMKgwqAgcmV0dXJuIElSUV9IQU5ETEVEOwo+PiArfQo+PiArCj4gCj4gCj4+ICtzdGF0 aWMgdm9pZCBhcm1fdHJiZV9wcm9iZV9jb3Jlc2lnaHRfY3B1KHZvaWQgKmluZm8pCj4+ICt7Cj4+ ICvCoMKgwqAgc3RydWN0IHRyYmVfY3B1ZGF0YSAqY3B1ZGF0YSA9IGluZm87Cj4+ICvCoMKgwqAg c3RydWN0IGRldmljZSAqZGV2ID0gJmNwdWRhdGEtPmRydmRhdGEtPnBkZXYtPmRldjsKPj4gK8Kg wqDCoCBzdHJ1Y3QgY29yZXNpZ2h0X2Rlc2MgZGVzYyA9IHsgMCB9Owo+PiArCj4+ICvCoMKgwqAg aWYgKFdBUk5fT04oIWNwdWRhdGEpKQo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBjcHVfY2xlYXI7 Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIWlzX3RyYmVfYXZhaWxhYmxlKCkpIHsKPj4gK8KgwqDCoMKg wqDCoMKgIHByX2VycigiVFJCRSBpcyBub3QgaW1wbGVtZW50ZWQgb24gY3B1ICVkXG4iLCBjcHVk YXRhLT5jcHUpOwo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBjcHVfY2xlYXI7Cj4+ICvCoMKgwqAg fQo+PiArCj4+ICvCoMKgwqAgaWYgKCFpc190cmJlX3Byb2dyYW1tYWJsZSgpKSB7Cj4+ICvCoMKg wqDCoMKgwqDCoCBwcl9lcnIoIlRSQkUgaXMgb3duZWQgaW4gaGlnaGVyIGV4Y2VwdGlvbiBsZXZl bCBvbiBjcHUgJWRcbiIsIGNwdWRhdGEtPmNwdSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGNw dV9jbGVhcjsKPj4gK8KgwqDCoCB9Cj4+ICvCoMKgwqAgZGVzYy5uYW1lID0gZGV2bV9rYXNwcmlu dGYoZGV2LCBHRlBfS0VSTkVMLCAiJXMlZCIsIHRyYmVfbmFtZSwgc21wX3Byb2Nlc3Nvcl9pZCgp KTsKPj4gK8KgwqDCoCBpZiAoSVNfRVJSKGRlc2MubmFtZSkpCj4+ICvCoMKgwqDCoMKgwqDCoCBn b3RvIGNwdV9jbGVhcjsKPj4gKwo+PiArwqDCoMKgIGRlc2MudHlwZSA9IENPUkVTSUdIVF9ERVZf VFlQRV9TSU5LOwo+PiArwqDCoMKgIGRlc2Muc3VidHlwZS5zaW5rX3N1YnR5cGUgPSBDT1JFU0lH SFRfREVWX1NVQlRZUEVfU0lOS19TWVNNRU07Cj4gCj4gTWF5IGJlIHNob3VsZCBhZGQgYSBuZXcg c3VidHlwZSB0byBtYWtlIHRoaXMgaGlnaGVyIHByaW9yaXR5IHRoYW4gdGhlIG5vcm1hbCBFVFIu Cj4gU29tZXRoaW5nIGxpa2UgOgo+IAo+IMKgwqDCoMKgQ09SRVNJR0hUX0RFVl9TVUJUWVBFX1NJ TktfUEVSQ1BVX1NZU01FTQoKU3VyZSwgd2lsbCBkby4KCj4gCj4+ICvCoMKgwqAgZGVzYy5vcHMg PSAmYXJtX3RyYmVfY3Nfb3BzOwo+PiArwqDCoMKgIGRlc2MucGRhdGEgPSBkZXZfZ2V0X3BsYXRk YXRhKGRldik7Cj4+ICvCoMKgwqAgZGVzYy5ncm91cHMgPSBhcm1fdHJiZV9ncm91cHM7Cj4+ICvC oMKgwqAgZGVzYy5kZXYgPSBkZXY7Cj4+ICvCoMKgwqAgY3B1ZGF0YS0+Y3NkZXYgPSBjb3Jlc2ln aHRfcmVnaXN0ZXIoJmRlc2MpOwo+PiArwqDCoMKgIGlmIChJU19FUlIoY3B1ZGF0YS0+Y3NkZXYp KQo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBjcHVfY2xlYXI7Cj4+ICsKPj4gK8KgwqDCoCBkZXZf c2V0X2RydmRhdGEoJmNwdWRhdGEtPmNzZGV2LT5kZXYsIGNwdWRhdGEpOwo+PiArwqDCoMKgIGNw dWRhdGEtPnRyYmVfZGJtID0gZ2V0X3RyYmVfZmxhZ191cGRhdGUoKTsKPj4gK8KgwqDCoCBjcHVk YXRhLT50cmJlX2FsaWduID0gMVVMTCA8PCBnZXRfdHJiZV9hZGRyZXNzX2FsaWduKCk7Cj4+ICvC oMKgwqAgaWYgKGNwdWRhdGEtPnRyYmVfYWxpZ24gPiBTWl8ySykgewo+PiArwqDCoMKgwqDCoMKg wqAgcHJfZXJyKCJVbnN1cHBvcnRlZCBhbGlnbm1lbnQgb24gY3B1ICVkXG4iLCBjcHVkYXRhLT5j cHUpOwo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBjcHVfY2xlYXI7Cj4+ICvCoMKgwqAgfQo+PiAr wqDCoMKgIHJldHVybjsKPj4gK2NwdV9jbGVhcjoKPj4gK8KgwqDCoCBjcHVtYXNrX2NsZWFyX2Nw dShjcHVkYXRhLT5jcHUsICZjcHVkYXRhLT5kcnZkYXRhLT5zdXBwb3J0ZWRfY3B1cyk7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYXJtX3RyYmVfcHJvYmVfY29yZXNpZ2h0KHN0cnVjdCB0cmJl X2RydmRhdGEgKmRydmRhdGEpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IHRyYmVfY3B1ZGF0YSAq Y3B1ZGF0YTsKPj4gK8KgwqDCoCBpbnQgY3B1Owo+PiArCj4+ICvCoMKgwqAgZHJ2ZGF0YS0+Y3B1 ZGF0YSA9IGFsbG9jX3BlcmNwdSh0eXBlb2YoKmRydmRhdGEtPmNwdWRhdGEpKTsKPj4gK8KgwqDC oCBpZiAoSVNfRVJSKGRydmRhdGEtPmNwdWRhdGEpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IFBUUl9FUlIoZHJ2ZGF0YS0+Y3B1ZGF0YSk7Cj4+ICsKPj4gK8KgwqDCoCBmb3JfZWFjaF9jcHUo Y3B1LCAmZHJ2ZGF0YS0+c3VwcG9ydGVkX2NwdXMpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGNwdWRh dGEgPSBwZXJfY3B1X3B0cihkcnZkYXRhLT5jcHVkYXRhLCBjcHUpOwo+PiArwqDCoMKgwqDCoMKg wqAgY3B1ZGF0YS0+Y3B1ID0gY3B1Owo+PiArwqDCoMKgwqDCoMKgwqAgY3B1ZGF0YS0+ZHJ2ZGF0 YSA9IGRydmRhdGE7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUo Y3B1LCBhcm1fdHJiZV9wcm9iZV9jb3Jlc2lnaHRfY3B1LCBjcHVkYXRhLCAxKTsKPiAKPiBXZSBj b3VsZCBiYXRjaCBpdCBhbmQgcnVuIGl0IG9uIGFsbCBDUFVzIGF0IHRoZSBzYW1lIHRpbWUgPyBB bHNvIGl0IHdvdWxkIGJlIGJldHRlciB0bwo+IGxlYXZlIHRoZSBwZXJfY3B1IGFyZWEgZmlsbGVk IGJ5IHRoZSBDUFUgaXRzZWxmLCB0byBhdm9pZCByYWNpbmcuCgpTdXJlLCB3aWxsIHJlLW9yZ2Fu aXplIHRoZSBlbnRpcmUgQ1BVIHByb2JpbmcvcmVtb3ZhbCBhbmQgYWxzbyB0aGUgQ1BVCm9ubGlu ZS9vZmZsaW5lIHBhdGguIFBsYW5uaW5nIHRvIHVzZSBzbXBfY2FsbF9mdW5jdGlvbl9tYW55KCkg aW5zdGVhZApmb3IgYSBzaW11bHRhbmVvdXMgaW5pdC4gCgo+IAo+IAo+PiArwqDCoMKgIH0KPj4g K8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgYXJtX3RyYmVfcmVt b3ZlX2NvcmVzaWdodF9jcHUodm9pZCAqaW5mbykKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJi ZV9kcnZkYXRhICpkcnZkYXRhID0gaW5mbzsKPj4gKwo+PiArwqDCoMKgIGRpc2FibGVfcGVyY3B1 X2lycShkcnZkYXRhLT5pcnEpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGFybV90cmJlX3Jl bW92ZV9jb3Jlc2lnaHQoc3RydWN0IHRyYmVfZHJ2ZGF0YSAqZHJ2ZGF0YSkKPj4gK3sKPj4gK8Kg wqDCoCBzdHJ1Y3QgdHJiZV9jcHVkYXRhICpjcHVkYXRhOwo+PiArwqDCoMKgIGludCBjcHU7Cj4+ ICsKPj4gK8KgwqDCoCBmb3JfZWFjaF9jcHUoY3B1LCAmZHJ2ZGF0YS0+c3VwcG9ydGVkX2NwdXMp IHsKPj4gK8KgwqDCoMKgwqDCoMKgIHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGFybV90 cmJlX3JlbW92ZV9jb3Jlc2lnaHRfY3B1LCBkcnZkYXRhLCAxKTsKPj4gK8KgwqDCoMKgwqDCoMKg IGNwdWRhdGEgPSBwZXJfY3B1X3B0cihkcnZkYXRhLT5jcHVkYXRhLCBjcHUpOwo+PiArwqDCoMKg wqDCoMKgwqAgaWYgKGNwdWRhdGEtPmNzZGV2KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGNvcmVzaWdodF91bnJlZ2lzdGVyKGNwdWRhdGEtPmNzZGV2KTsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgY3B1ZGF0YS0+ZHJ2ZGF0YSA9IE5VTEw7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGNwdWRhdGEtPmNzZGV2ID0gTlVMTDsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPiAKPiBQbGVh c2UgbGVhdmUgdGhpcyB0byB0aGUgQ1BVIHRvIGRvIHRoZSBwYXJ0LgoKU3VyZSwgd2lsbCBkby4K Cj4gCj4+ICvCoMKgwqAgfQo+PiArwqDCoMKgIGZyZWVfcGVyY3B1KGRydmRhdGEtPmNwdWRhdGEp Owo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGFybV90cmJl X2NwdV9zdGFydHVwKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKQo+ PiArewo+PiArwqDCoMKgIHN0cnVjdCB0cmJlX2RydmRhdGEgKmRydmRhdGEgPSBobGlzdF9lbnRy eV9zYWZlKG5vZGUsIHN0cnVjdCB0cmJlX2RydmRhdGEsIGhvdHBsdWdfbm9kZSk7Cj4+ICvCoMKg wqAgc3RydWN0IHRyYmVfY3B1ZGF0YSAqY3B1ZGF0YTsKPj4gKwo+PiArwqDCoMKgIGlmIChjcHVt YXNrX3Rlc3RfY3B1KGNwdSwgJmRydmRhdGEtPnN1cHBvcnRlZF9jcHVzKSkgewo+PiArwqDCoMKg wqDCoMKgwqAgY3B1ZGF0YSA9IHBlcl9jcHVfcHRyKGRydmRhdGEtPmNwdWRhdGEsIGNwdSk7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBpZiAoIWNwdWRhdGEtPmNzZGV2KSB7Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGNwdWRhdGEtPmRydmRhdGEgPSBkcnZkYXRhOwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBhcm1fdHJiZV9wcm9iZV9jb3Jl c2lnaHRfY3B1LCBjcHVkYXRhLCAxKTsKPiAKPiBXaHkgZG8gd2UgbmVlZCBzbXBfY2FsbCBoZXJl ID8gV2UgYXJlIGFscmVhZHkgb24gdGhlIENQVS4KCldlIGRvbnQgbmVlZCwgd2lsbCBkcm9wLgoK PiAKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgIHRyYmVfcmVzZXRfbG9j YWwoKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGVuYWJsZV9wZXJjcHVfaXJxKGRydmRhdGEtPmlycSwg SVJRX1RZUEVfTk9ORSk7Cj4+ICvCoMKgwqAgfQo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgaW50IGFybV90cmJlX2NwdV90ZWFyZG93bih1bnNpZ25lZCBpbnQgY3B1 LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9k cnZkYXRhICpkcnZkYXRhID0gaGxpc3RfZW50cnlfc2FmZShub2RlLCBzdHJ1Y3QgdHJiZV9kcnZk YXRhLCBob3RwbHVnX25vZGUpOwo+PiArwqDCoMKgIHN0cnVjdCB0cmJlX2NwdWRhdGEgKmNwdWRh dGE7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsICZkcnZkYXRhLT5z dXBwb3J0ZWRfY3B1cykpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGNwdWRhdGEgPSBwZXJfY3B1X3B0 cihkcnZkYXRhLT5jcHVkYXRhLCBjcHUpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGNwdWRhdGEt PmNzZGV2KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvcmVzaWdodF91bnJlZ2lzdGVy KGNwdWRhdGEtPmNzZGV2KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3B1ZGF0YS0+ZHJ2 ZGF0YSA9IE5VTEw7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNwdWRhdGEtPmNzZGV2ID0g TlVMTDsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgIGRpc2FibGVfcGVy Y3B1X2lycShkcnZkYXRhLT5pcnEpOwo+PiArwqDCoMKgwqDCoMKgwqAgdHJiZV9yZXNldF9sb2Nh bCgpOwo+PiArwqDCoMKgIH0KPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3Rh dGljIGludCBhcm1fdHJiZV9wcm9iZV9jcHVocChzdHJ1Y3QgdHJiZV9kcnZkYXRhICpkcnZkYXRh KQo+PiArewo+PiArwqDCoMKgIGVudW0gY3B1aHBfc3RhdGUgdHJiZV9vbmxpbmU7Cj4+ICsKPj4g K8KgwqDCoCB0cmJlX29ubGluZSA9IGNwdWhwX3NldHVwX3N0YXRlX211bHRpKENQVUhQX0FQX09O TElORV9EWU4sIERSVk5BTUUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBhcm1fdHJiZV9jcHVfc3RhcnR1cCwgYXJtX3RyYmVfY3B1X3RlYXJkb3duKTsKPj4gK8Kg wqDCoCBpZiAodHJiZV9vbmxpbmUgPCAwKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5W QUw7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoY3B1aHBfc3RhdGVfYWRkX2luc3RhbmNlKHRyYmVfb25s aW5lLCAmZHJ2ZGF0YS0+aG90cGx1Z19ub2RlKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAt RUlOVkFMOwo+PiArCj4+ICvCoMKgwqAgZHJ2ZGF0YS0+dHJiZV9vbmxpbmUgPSB0cmJlX29ubGlu ZTsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgYXJtX3Ry YmVfcmVtb3ZlX2NwdWhwKHN0cnVjdCB0cmJlX2RydmRhdGEgKmRydmRhdGEpCj4+ICt7Cj4+ICvC oMKgwqAgY3B1aHBfcmVtb3ZlX211bHRpX3N0YXRlKGRydmRhdGEtPnRyYmVfb25saW5lKTsKPj4g K30KPj4gKwo+PiArc3RhdGljIGludCBhcm1fdHJiZV9wcm9iZV9pcnEoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Ry dWN0IHRyYmVfZHJ2ZGF0YSAqZHJ2ZGF0YSkKPj4gK3sKPj4gK8KgwqDCoCBkcnZkYXRhLT5pcnEg PSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwo+PiArwqDCoMKgIGlmICghZHJ2ZGF0YS0+aXJx KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBwcl9lcnIoIklSUSBub3QgZm91bmQgZm9yIHRoZSBwbGF0 Zm9ybSBkZXZpY2VcbiIpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTlhJTzsKPj4gK8Kg wqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIWlycV9pc19wZXJjcHUoZHJ2ZGF0YS0+aXJxKSkg ewo+PiArwqDCoMKgwqDCoMKgwqAgcHJfZXJyKCJJUlEgaXMgbm90IGEgUFBJXG4iKTsKPj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKg IGlmIChpcnFfZ2V0X3BlcmNwdV9kZXZpZF9wYXJ0aXRpb24oZHJ2ZGF0YS0+aXJxLCAmZHJ2ZGF0 YS0+c3VwcG9ydGVkX2NwdXMpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ ICsKPj4gK8KgwqDCoCBkcnZkYXRhLT5oYW5kbGUgPSBhbGxvY19wZXJjcHUodHlwZW9mKCpkcnZk YXRhLT5oYW5kbGUpKTsKPj4gK8KgwqDCoCBpZiAoIWRydmRhdGEtPmhhbmRsZSkKPj4gK8KgwqDC oMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+PiArCj4+ICvCoMKgwqAgaWYgKHJlcXVlc3RfcGVy Y3B1X2lycShkcnZkYXRhLT5pcnEsIGFybV90cmJlX2lycV9oYW5kbGVyLCBEUlZOQU1FLCBkcnZk YXRhLT5oYW5kbGUpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBmcmVlX3BlcmNwdShkcnZkYXRhLT5o YW5kbGUpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ICvCoMKgwqAgfQo+ PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBhcm1fdHJiZV9y ZW1vdmVfaXJxKHN0cnVjdCB0cmJlX2RydmRhdGEgKmRydmRhdGEpCj4+ICt7Cj4+ICvCoMKgwqAg ZnJlZV9wZXJjcHVfaXJxKGRydmRhdGEtPmlycSwgZHJ2ZGF0YS0+aGFuZGxlKTsKPj4gK8KgwqDC oCBmcmVlX3BlcmNwdShkcnZkYXRhLT5oYW5kbGUpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IGFybV90cmJlX2RldmljZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+PiAr ewo+PiArwqDCoMKgIHN0cnVjdCBjb3Jlc2lnaHRfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Cj4+ICvC oMKgwqAgc3RydWN0IHRyYmVfZHJ2ZGF0YSAqZHJ2ZGF0YTsKPj4gK8KgwqDCoCBzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+PiArwqDCoMKgIGludCByZXQ7Cj4+ICsKPj4gK8KgwqDC oCBkcnZkYXRhID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkcnZkYXRhKSwgR0ZQX0tFUk5F TCk7Cj4+ICvCoMKgwqAgaWYgKElTX0VSUihkcnZkYXRhKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiAtRU5PTUVNOwo+PiArCj4+ICvCoMKgwqAgcGRhdGEgPSBjb3Jlc2lnaHRfZ2V0X3BsYXRm b3JtX2RhdGEoZGV2KTsKPj4gK8KgwqDCoCBpZiAoSVNfRVJSKHBkYXRhKSkgewo+PiArwqDCoMKg wqDCoMKgwqAga2ZyZWUoZHJ2ZGF0YSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01F TTsKPj4gK8KgwqDCoCB9Cj4gCj4gCj4+ICsKPj4gK8KgwqDCoCBkcnZkYXRhLT5hdGNsayA9IGRl dm1fY2xrX2dldChkZXYsICJhdGNsayIpOwo+PiArwqDCoMKgIGlmICghSVNfRVJSKGRydmRhdGEt PmF0Y2xrKSkgewo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRy dmRhdGEtPmF0Y2xrKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+ICvCoMKgwqAgfQo+IAo+IFBsZWFzZSBkcm9wIHRo ZSBjbG9ja3MsIHdlIGRvbid0IGhhdmUgYW55CgpSaWdodCwgd2lsbCBkcm9wIHRoZSBjbG9jayBh bmQgYWxzbyB0aGUgcG93ZXIgbWFuYWdlbWVudCBzdXBwb3J0CmFsb25nIHdpdGggaXQuCgo+IAo+ PiArwqDCoMKgIGRldl9zZXRfZHJ2ZGF0YShkZXYsIGRydmRhdGEpOwo+PiArwqDCoMKgIGRldi0+ cGxhdGZvcm1fZGF0YSA9IHBkYXRhOwo+PiArwqDCoMKgIGRydmRhdGEtPnBkZXYgPSBwZGV2Owo+ PiArwqDCoMKgIHJldCA9IGFybV90cmJlX3Byb2JlX2lycShwZGV2LCBkcnZkYXRhKTsKPj4gK8Kg wqDCoCBpZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBpcnFfZmFpbGVkOwo+PiArCj4+ ICvCoMKgwqAgcmV0ID0gYXJtX3RyYmVfcHJvYmVfY29yZXNpZ2h0KGRydmRhdGEpOwo+PiArwqDC oMKgIGlmIChyZXQpCj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIHByb2JlX2ZhaWxlZDsKPj4gKwo+ PiArwqDCoMKgIHJldCA9IGFybV90cmJlX3Byb2JlX2NwdWhwKGRydmRhdGEpOwo+PiArwqDCoMKg IGlmIChyZXQpCj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGNwdWhwX2ZhaWxlZDsKPj4gKwo+PiAr wqDCoMKgIHJldHVybiAwOwo+PiArY3B1aHBfZmFpbGVkOgo+PiArwqDCoMKgIGFybV90cmJlX3Jl bW92ZV9jb3Jlc2lnaHQoZHJ2ZGF0YSk7Cj4+ICtwcm9iZV9mYWlsZWQ6Cj4+ICvCoMKgwqAgYXJt X3RyYmVfcmVtb3ZlX2lycShkcnZkYXRhKTsKPj4gK2lycV9mYWlsZWQ6Cj4+ICvCoMKgwqAga2Zy ZWUocGRhdGEpOwo+PiArwqDCoMKgIGtmcmVlKGRydmRhdGEpOwo+PiArwqDCoMKgIHJldHVybiBy ZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYXJtX3RyYmVfZGV2aWNlX3JlbW92ZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBjb3Jlc2ln aHRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOwo+ PiArwqDCoMKgIHN0cnVjdCB0cmJlX2RydmRhdGEgKmRydmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2 ZGF0YShwZGV2KTsKPj4gKwo+PiArwqDCoMKgIGFybV90cmJlX3JlbW92ZV9jb3Jlc2lnaHQoZHJ2 ZGF0YSk7Cj4+ICvCoMKgwqAgYXJtX3RyYmVfcmVtb3ZlX2NwdWhwKGRydmRhdGEpOwo+PiArwqDC oMKgIGFybV90cmJlX3JlbW92ZV9pcnEoZHJ2ZGF0YSk7Cj4+ICvCoMKgwqAga2ZyZWUocGRhdGEp Owo+PiArwqDCoMKgIGtmcmVlKGRydmRhdGEpOwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+ PiArCj4+ICsjaWZkZWYgQ09ORklHX1BNCj4+ICtzdGF0aWMgaW50IGFybV90cmJlX3J1bnRpbWVf c3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IHRyYmVf ZHJ2ZGF0YSAqZHJ2ZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+PiArCj4+ICvCoMKgwqAg aWYgKGRydmRhdGEgJiYgIUlTX0VSUihkcnZkYXRhLT5hdGNsaykpCj4+ICvCoMKgwqDCoMKgwqDC oCBjbGtfZGlzYWJsZV91bnByZXBhcmUoZHJ2ZGF0YS0+YXRjbGspOwo+PiArCj4gCj4gUmVtb3Zl LiBXZSBtYXkgbmVlZCB0byBzYXZlL3Jlc3RvcmUgdGhlIFRSQkUgcHRycywgZGVwZW5kaW5nIG9u IHRoZQo+IFRSQkUuCgpXaWxsIGRyb3AgaXQgZm9yIG5vdy4gQ291bGQgcmV2aXNpdCB0aGlzIGxh dGVyIGFmdGVyIHRoZSBiYXNlCmZ1bmN0aW9uYWxpdHkgaXMgdXAgYW5kIHJ1bm5pbmcuCgo+IAo+ PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGFybV90cmJlX3J1 bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3Qg dHJiZV9kcnZkYXRhICpkcnZkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4+ICsKPj4gK8Kg wqDCoCBpZiAoZHJ2ZGF0YSAmJiAhSVNfRVJSKGRydmRhdGEtPmF0Y2xrKSkKPj4gK8KgwqDCoMKg wqDCoMKgIGNsa19wcmVwYXJlX2VuYWJsZShkcnZkYXRhLT5hdGNsayk7Cj4gCj4gUmVtb3ZlLiBT ZWUgYWJvdmUuCj4gCj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKyNlbmRpZgo+ PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYXJtX3RyYmVfZGV2X3BtX29w cyA9IHsKPj4gK8KgwqDCoCBTRVRfUlVOVElNRV9QTV9PUFMoYXJtX3RyYmVfcnVudGltZV9zdXNw ZW5kLCBhcm1fdHJiZV9ydW50aW1lX3Jlc3VtZSwgTlVMTCkKPj4gK307Cj4+ICsKPj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFybV90cmJlX29mX21hdGNoW10gPSB7Cj4+ICvC oMKgwqAgeyAuY29tcGF0aWJsZSA9ICJhcm0sYXJtLXRyYmUiLMKgwqDCoCAuZGF0YSA9ICh2b2lk ICopMSB9LAo+PiArwqDCoMKgIHt9LAo+PiArfTsKPiAKPiBJIHRoaW5rIGl0IGlzIGJldHRlciB0 byBjYWxsIHRoaXMsIHdlIGhhdmUgdG9vIG1hbnkgYWNyb255bXMgOy0pCj4gCj4gwqDCoMKgwqAi YXJtLHRyYWNlLWJ1ZmZlci1leHRlbnNpb24iCgpTdXJlLCB3aWxsIGNoYW5nZS4KCj4gCj4+ICtN T0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhcm1fdHJiZV9vZl9tYXRjaCk7Cj4gCj4+ICsKPj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIGFybV90cmJlX21hdGNoW10gPSB7 Cj4+ICvCoMKgwqAgeyAiYXJtLHRyYmUiLCAwfSwKPj4gK8KgwqDCoCB7IH0KPj4gK307Cj4+ICtN T0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBhcm1fdHJiZV9tYXRjaCk7Cj4gCj4gUGxlYXNl IHJlbW92ZS4gVGhlIEFDUEkgcGFydCBjYW4gYmUgYWRkZWQgd2hlbiB3ZSBnZXQgdG8gaXQuCgpT dXJlLCB3aWxsIGRyb3AgZm9yIG5vdy4KCj4gCj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZv cm1fZHJpdmVyIGFybV90cmJlX2RyaXZlciA9IHsKPj4gK8KgwqDCoCAuaWRfdGFibGUgPSBhcm1f dHJiZV9tYXRjaCwKPj4gK8KgwqDCoCAuZHJpdmVywqDCoMKgID0gewo+PiArwqDCoMKgwqDCoMKg wqAgLm5hbWUgPSBEUlZOQU1FLAo+PiArwqDCoMKgwqDCoMKgwqAgLm9mX21hdGNoX3RhYmxlID0g b2ZfbWF0Y2hfcHRyKGFybV90cmJlX29mX21hdGNoKSwKPj4gK8KgwqDCoMKgwqDCoMKgIC5wbSA9 ICZhcm1fdHJiZV9kZXZfcG1fb3BzLAo+PiArwqDCoMKgwqDCoMKgwqAgLnN1cHByZXNzX2JpbmRf YXR0cnMgPSB0cnVlLAo+PiArwqDCoMKgIH0sCj4+ICvCoMKgwqAgLnByb2JlwqDCoMKgID0gYXJt X3RyYmVfZGV2aWNlX3Byb2JlLAo+PiArwqDCoMKgIC5yZW1vdmXCoMKgwqAgPSBhcm1fdHJiZV9k ZXZpY2VfcmVtb3ZlLAo+PiArfTsKPj4gK2J1aWx0aW5fcGxhdGZvcm1fZHJpdmVyKGFybV90cmJl X2RyaXZlcikKPiAKPiBQbGVhc2UgbWFrZSB0aGlzIG1vZHVsYXIuCgpXaWxsIGRvLgoKPiAKPiAK Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHd0cmFjaW5nL2NvcmVzaWdodC9jb3Jlc2lnaHQtdHJi ZS5oIGIvZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC10cmJlLmgKPj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uODJmZmJmYwo+PiAtLS0gL2Rldi9u dWxsCj4+ICsrKyBiL2RyaXZlcnMvaHd0cmFjaW5nL2NvcmVzaWdodC9jb3Jlc2lnaHQtdHJiZS5o Cj4+IEBAIC0wLDAgKzEsNTI1IEBACj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCAqLwo+PiArLyoKPj4gKyAqIFRoaXMgY29udGFpbnMgYWxsIHJlcXVpcmVkIGhhcmR3YXJl IHJlbGF0ZWQgaGVscGVyIGZ1bmN0aW9ucyBmb3IKPj4gKyAqIFRyYWNlIEJ1ZmZlciBFeHRlbnNp b24gKFRSQkUpIGRyaXZlciBpbiB0aGUgY29yZXNpZ2h0IGZyYW1ld29yay4KPj4gKyAqCj4+ICsg KiBDb3B5cmlnaHQgKEMpIDIwMjAgQVJNIEx0ZC4KPj4gKyAqCj4+ICsgKiBBdXRob3I6IEFuc2h1 bWFuIEtoYW5kdWFsIDxhbnNodW1hbi5raGFuZHVhbEBhcm0uY29tPgo+PiArICovCj4+ICsjaW5j bHVkZSA8bGludXgvY29yZXNpZ2h0Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4+ ICsjaW5jbHVkZSA8bGludXgvaXJxLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4+ ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZp Y2UuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KPj4gKwo+PiArI2luY2x1ZGUgImNvcmVz aWdodC1ldG0tcGVyZi5oIgo+PiArCj4+ICtzdGF0aWMgaW5saW5lIGJvb2wgaXNfdHJiZV9hdmFp bGFibGUodm9pZCkKPj4gK3sKPj4gK8KgwqDCoCB1NjQgYWE2NGRmcjAgPSByZWFkX3N5c3JlZ19z KFNZU19JRF9BQTY0REZSMF9FTDEpOwo+PiArwqDCoMKgIGludCB0cmJlID0gY3B1aWRfZmVhdHVy ZV9leHRyYWN0X3Vuc2lnbmVkX2ZpZWxkKGFhNjRkZnIwLCBJRF9BQTY0REZSMF9UUkJFX1NISUZU KTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiB0cmJlID49IDBiMDAwMTsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGlubGluZSBib29sIGlzX2V0ZV9hdmFpbGFibGUodm9pZCkKPj4gK3sKPj4gK8KgwqDC oCB1NjQgYWE2NGRmcjAgPSByZWFkX3N5c3JlZ19zKFNZU19JRF9BQTY0REZSMF9FTDEpOwo+PiAr wqDCoMKgIGludCB0cmFjZXZlciA9IGNwdWlkX2ZlYXR1cmVfZXh0cmFjdF91bnNpZ25lZF9maWVs ZChhYTY0ZGZyMCwgSURfQUE2NERGUjBfVFJBQ0VWRVJfU0hJRlQpOwo+PiArCj4+ICvCoMKgwqAg cmV0dXJuICh0cmFjZXZlciAhPSAwYjAwMDApOwo+IAo+IFdoeSBpcyB0aGlzIG5lZWRlZCA/CgpT dXJlLCB3aWxsIGRyb3AuCgo+IAo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIGJvb2wgaXNf dHJiZV9lbmFibGVkKHZvaWQpCj4+ICt7Cj4+ICvCoMKgwqAgdTY0IHRyYmxpbWl0ciA9IHJlYWRf c3lzcmVnX3MoU1lTX1RSQkxJTUlUUl9FTDEpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHRyYmxp bWl0ciAmIFRSQkxJTUlUUl9FTkFCTEU7Cj4+ICt9Cj4+ICsKPj4gK2VudW0gdHJiZV9lYyB7Cj4+ ICvCoMKgwqAgVFJCRV9FQ19PVEhFUlPCoMKgwqDCoMKgwqDCoCA9IDAsCj4+ICvCoMKgwqAgVFJC RV9FQ19TVEFHRTFfQUJPUlTCoMKgwqAgPSAzNiwKPj4gK8KgwqDCoCBUUkJFX0VDX1NUQUdFMl9B Qk9SVMKgwqDCoCA9IDM3LAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0 IHRyYmVfZWNfc3RyW10gPSB7Cj4+ICvCoMKgwqAgW1RSQkVfRUNfT1RIRVJTXcKgwqDCoCA9ICJN YWludGVuYW5jZSBleGNlcHRpb24iLAo+PiArwqDCoMKgIFtUUkJFX0VDX1NUQUdFMV9BQk9SVF3C oMKgwqAgPSAiU3RhZ2UtMSBleGNlcHRpb24iLAo+PiArwqDCoMKgIFtUUkJFX0VDX1NUQUdFMl9B Qk9SVF3CoMKgwqAgPSAiU3RhZ2UtMiBleGNlcHRpb24iLAo+PiArfTsKPj4gKwo+IAo+IFBsZWFz ZSByZW1vdmUgdGhlIGRlZmludGlvbnMgdGhhdCBhcmUgbm90IHVzZWQgYnkgdGhlIGRyaXZlci4K ClN1cmUsIHdpbGwgZG8uCgo+IAo+PiArc3RhdGljIGlubGluZSBlbnVtIHRyYmVfZWMgZ2V0X3Ry YmVfZWModm9pZCkKPj4gK3sKPj4gK8KgwqDCoCB1NjQgdHJic3IgPSByZWFkX3N5c3JlZ19zKFNZ U19UUkJTUl9FTDEpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuICh0cmJzciA+PiBUUkJTUl9FQ19T SElGVCkgJiBUUkJTUl9FQ19NQVNLOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHZvaWQg Y2xyX3RyYmVfZWModm9pZCkKPj4gK3sKPj4gK8KgwqDCoCB1NjQgdHJic3IgPSByZWFkX3N5c3Jl Z19zKFNZU19UUkJTUl9FTDEpOwo+PiArCj4+ICvCoMKgwqAgdHJic3IgJj0gfihUUkJTUl9FQ19N QVNLIDw8IFRSQlNSX0VDX1NISUZUKTsKPj4gK8KgwqDCoCB3cml0ZV9zeXNyZWdfcyh0cmJzciwg U1lTX1RSQlNSX0VMMSk7Cj4+ICt9Cj4+ICsKPj4gK2VudW0gdHJiZV9ic2Mgewo+PiArwqDCoMKg IFRSQkVfQlNDX05PVF9TVE9QUEVEwqDCoMKgID0gMCwKPj4gK8KgwqDCoCBUUkJFX0JTQ19GSUxM RUTCoMKgwqDCoMKgwqDCoCA9IDEsCj4+ICvCoMKgwqAgVFJCRV9CU0NfVFJJR0dFUkVEwqDCoMKg ID0gMiwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0cmJlX2JzY19z dHJbXSA9IHsKPj4gK8KgwqDCoCBbVFJCRV9CU0NfTk9UX1NUT1BQRURdwqDCoMKgID0gIlRSQkUg Y29sbGVjdGlvbiBub3Qgc3RvcHBlZCIsCj4+ICvCoMKgwqAgW1RSQkVfQlNDX0ZJTExFRF3CoMKg wqAgPSAiVFJCRSBmaWxsZWQiLAo+PiArwqDCoMKgIFtUUkJFX0JTQ19UUklHR0VSRURdwqDCoMKg ID0gIlRSQkUgdHJpZ2dlcmVkIiwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgZW51bSB0 cmJlX2JzYyBnZXRfdHJiZV9ic2Modm9pZCkKPj4gK3sKPj4gK8KgwqDCoCB1NjQgdHJic3IgPSBy ZWFkX3N5c3JlZ19zKFNZU19UUkJTUl9FTDEpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuICh0cmJz ciA+PiBUUkJTUl9CU0NfU0hJRlQpICYgVFJCU1JfQlNDX01BU0s7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyBpbmxpbmUgdm9pZCBjbHJfdHJiZV9ic2Modm9pZCkKPj4gK3sKPj4gK8KgwqDCoCB1NjQg dHJic3IgPSByZWFkX3N5c3JlZ19zKFNZU19UUkJTUl9FTDEpOwo+PiArCj4+ICvCoMKgwqAgdHJi c3IgJj0gfihUUkJTUl9CU0NfTUFTSyA8PCBUUkJTUl9CU0NfU0hJRlQpOwo+PiArwqDCoMKgIHdy aXRlX3N5c3JlZ19zKHRyYnNyLCBTWVNfVFJCU1JfRUwxKTsKPj4gK30KPj4gKwo+PiArZW51bSB0 cmJlX2ZzYyB7Cj4+ICvCoMKgwqAgVFJCRV9GU0NfQVNGX0xFVkVMMMKgwqDCoCA9IDAsCj4+ICvC oMKgwqAgVFJCRV9GU0NfQVNGX0xFVkVMMcKgwqDCoCA9IDEsCj4+ICvCoMKgwqAgVFJCRV9GU0Nf QVNGX0xFVkVMMsKgwqDCoCA9IDIsCj4+ICvCoMKgwqAgVFJCRV9GU0NfQVNGX0xFVkVMM8KgwqDC oCA9IDMsCj4+ICvCoMKgwqAgVFJCRV9GU0NfVEZfTEVWRUwwwqDCoMKgID0gNCwKPj4gK8KgwqDC oCBUUkJFX0ZTQ19URl9MRVZFTDHCoMKgwqAgPSA1LAo+PiArwqDCoMKgIFRSQkVfRlNDX1RGX0xF VkVMMsKgwqDCoCA9IDYsCj4+ICvCoMKgwqAgVFJCRV9GU0NfVEZfTEVWRUwzwqDCoMKgID0gNywK Pj4gK8KgwqDCoCBUUkJFX0ZTQ19BRkZfTEVWRUwwwqDCoMKgID0gOCwKPj4gK8KgwqDCoCBUUkJF X0ZTQ19BRkZfTEVWRUwxwqDCoMKgID0gOSwKPj4gK8KgwqDCoCBUUkJFX0ZTQ19BRkZfTEVWRUwy wqDCoMKgID0gMTAsCj4+ICvCoMKgwqAgVFJCRV9GU0NfQUZGX0xFVkVMM8KgwqDCoCA9IDExLAo+ PiArwqDCoMKgIFRSQkVfRlNDX1BGX0xFVkVMMMKgwqDCoCA9IDEyLAo+PiArwqDCoMKgIFRSQkVf RlNDX1BGX0xFVkVMMcKgwqDCoCA9IDEzLAo+PiArwqDCoMKgIFRSQkVfRlNDX1BGX0xFVkVMMsKg wqDCoCA9IDE0LAo+PiArwqDCoMKgIFRSQkVfRlNDX1BGX0xFVkVMM8KgwqDCoCA9IDE1LAo+PiAr wqDCoMKgIFRSQkVfRlNDX1NFQV9XUklURcKgwqDCoCA9IDE2LAo+PiArwqDCoMKgIFRSQkVfRlND X0FTRUFfV1JJVEXCoMKgwqAgPSAxNywKPj4gK8KgwqDCoCBUUkJFX0ZTQ19TRUFfTEVWRUwwwqDC oMKgID0gMjAsCj4+ICvCoMKgwqAgVFJCRV9GU0NfU0VBX0xFVkVMMcKgwqDCoCA9IDIxLAo+PiAr wqDCoMKgIFRSQkVfRlNDX1NFQV9MRVZFTDLCoMKgwqAgPSAyMiwKPj4gK8KgwqDCoCBUUkJFX0ZT Q19TRUFfTEVWRUwzwqDCoMKgID0gMjMsCj4+ICvCoMKgwqAgVFJCRV9GU0NfQUxJR05fRkFVTFTC oMKgwqAgPSAzMywKPj4gK8KgwqDCoCBUUkJFX0ZTQ19UTEJfRkFVTFTCoMKgwqAgPSA0OCwKPj4g K8KgwqDCoCBUUkJFX0ZTQ19BVE9NSUNfRkFVTFTCoMKgwqAgPSA0OSwKPj4gK307Cj4gCj4gUGxl YXNlIHJlbW92ZSBeXl4KClN1cmUsIHdpbGwgZG8uCgo+IAo+PiArCj4+ICtzdGF0aWMgY29uc3Qg Y2hhciAqY29uc3QgdHJiZV9mc2Nfc3RyW10gPSB7Cj4+ICvCoMKgwqAgW1RSQkVfRlNDX0FTRl9M RVZFTDBdwqDCoMKgID0gIkFkZHJlc3Mgc2l6ZSBmYXVsdCAtIGxldmVsIDAiLAo+PiArwqDCoMKg IFtUUkJFX0ZTQ19BU0ZfTEVWRUwxXcKgwqDCoCA9ICJBZGRyZXNzIHNpemUgZmF1bHQgLSBsZXZl bCAxIiwKPj4gK8KgwqDCoCBbVFJCRV9GU0NfQVNGX0xFVkVMMl3CoMKgwqAgPSAiQWRkcmVzcyBz aXplIGZhdWx0IC0gbGV2ZWwgMiIsCj4+ICvCoMKgwqAgW1RSQkVfRlNDX0FTRl9MRVZFTDNdwqDC oMKgID0gIkFkZHJlc3Mgc2l6ZSBmYXVsdCAtIGxldmVsIDMiLAo+PiArwqDCoMKgIFtUUkJFX0ZT Q19URl9MRVZFTDBdwqDCoMKgID0gIlRyYW5zbGF0aW9uIGZhdWx0IC0gbGV2ZWwgMCIsCj4+ICvC oMKgwqAgW1RSQkVfRlNDX1RGX0xFVkVMMV3CoMKgwqAgPSAiVHJhbnNsYXRpb24gZmF1bHQgLSBs ZXZlbCAxIiwKPj4gK8KgwqDCoCBbVFJCRV9GU0NfVEZfTEVWRUwyXcKgwqDCoCA9ICJUcmFuc2xh dGlvbiBmYXVsdCAtIGxldmVsIDIiLAo+PiArwqDCoMKgIFtUUkJFX0ZTQ19URl9MRVZFTDNdwqDC oMKgID0gIlRyYW5zbGF0aW9uIGZhdWx0IC0gbGV2ZWwgMyIsCj4+ICvCoMKgwqAgW1RSQkVfRlND X0FGRl9MRVZFTDBdwqDCoMKgID0gIkFjY2VzcyBmbGFnIGZhdWx0IC0gbGV2ZWwgMCIsCj4+ICvC oMKgwqAgW1RSQkVfRlNDX0FGRl9MRVZFTDFdwqDCoMKgID0gIkFjY2VzcyBmbGFnIGZhdWx0IC0g bGV2ZWwgMSIsCj4+ICvCoMKgwqAgW1RSQkVfRlNDX0FGRl9MRVZFTDJdwqDCoMKgID0gIkFjY2Vz cyBmbGFnIGZhdWx0IC0gbGV2ZWwgMiIsCj4+ICvCoMKgwqAgW1RSQkVfRlNDX0FGRl9MRVZFTDNd wqDCoMKgID0gIkFjY2VzcyBmbGFnIGZhdWx0IC0gbGV2ZWwgMyIsCj4+ICvCoMKgwqAgW1RSQkVf RlNDX1BGX0xFVkVMMF3CoMKgwqAgPSAiUGVybWlzc2lvbiBmYXVsdCAtIGxldmVsIDAiLAo+PiAr wqDCoMKgIFtUUkJFX0ZTQ19QRl9MRVZFTDFdwqDCoMKgID0gIlBlcm1pc3Npb24gZmF1bHQgLSBs ZXZlbCAxIiwKPj4gK8KgwqDCoCBbVFJCRV9GU0NfUEZfTEVWRUwyXcKgwqDCoCA9ICJQZXJtaXNz aW9uIGZhdWx0IC0gbGV2ZWwgMiIsCj4+ICvCoMKgwqAgW1RSQkVfRlNDX1BGX0xFVkVMM13CoMKg wqAgPSAiUGVybWlzc2lvbiBmYXVsdCAtIGxldmVsIDMiLAo+PiArwqDCoMKgIFtUUkJFX0ZTQ19T RUFfV1JJVEVdwqDCoMKgID0gIlN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0IG9uIHdyaXRlIiwK Pj4gK8KgwqDCoCBbVFJCRV9GU0NfQVNFQV9XUklURV3CoMKgwqAgPSAiQXN5bmNocm9ub3VzIGV4 dGVybmFsIGFib3J0IG9uIHdyaXRlIiwKPj4gK8KgwqDCoCBbVFJCRV9GU0NfU0VBX0xFVkVMMF3C oMKgwqAgPSAiU3luY3Job25vdXMgZXh0ZXJuYWwgYWJvcnQgb24gdGFibGUgd2FsayAtIGxldmVs IDAiLAo+PiArwqDCoMKgIFtUUkJFX0ZTQ19TRUFfTEVWRUwxXcKgwqDCoCA9ICJTeW5jcmhvbm91 cyBleHRlcm5hbCBhYm9ydCBvbiB0YWJsZSB3YWxrIC0gbGV2ZWwgMSIsCj4+ICvCoMKgwqAgW1RS QkVfRlNDX1NFQV9MRVZFTDJdwqDCoMKgID0gIlN5bmNyaG9ub3VzIGV4dGVybmFsIGFib3J0IG9u IHRhYmxlIHdhbGsgLSBsZXZlbCAyIiwKPj4gK8KgwqDCoCBbVFJCRV9GU0NfU0VBX0xFVkVMM13C oMKgwqAgPSAiU3luY3Job25vdXMgZXh0ZXJuYWwgYWJvcnQgb24gdGFibGUgd2FsayAtIGxldmVs IDMiLAo+PiArwqDCoMKgIFtUUkJFX0ZTQ19BTElHTl9GQVVMVF3CoMKgwqAgPSAiQWxpZ25tZW50 IGZhdWx0IiwKPj4gK8KgwqDCoCBbVFJCRV9GU0NfVExCX0ZBVUxUXcKgwqDCoCA9ICJUTEIgY29u ZmxpY3QgZmF1bHQiLAo+PiArwqDCoMKgIFtUUkJFX0ZTQ19BVE9NSUNfRkFVTFRdwqDCoMKgID0g IkF0bW9jIGZhdWx0IiwKPj4gK307Cj4+Cj4gCj4gUGxlYXNlIHJlbW92ZSBeXl4KClN1cmUsIHdp bGwgZG8uCgo+IAo+Pgo+IAo+PiArZW51bSB0cmJlX2FkZHJlc3NfbW9kZSB7Cj4+ICvCoMKgwqAg VFJCRV9BRERSRVNTX1ZJUlRVQUwsCj4+ICvCoMKgwqAgVFJCRV9BRERSRVNTX1BIWVNJQ0FMLAo+ PiArfTsKPiAKPiAjZGVmaW5lIHBsZWFzZS4KPiAKPj4gKwo+PiArc3RhdGljIGNvbnN0IGNoYXIg KmNvbnN0IHRyYmVfYWRkcmVzc19tb2RlX3N0cltdID0gewo+PiArwqDCoMKgIFtUUkJFX0FERFJF U1NfVklSVFVBTF3CoMKgwqAgPSAiQWRkcmVzcyBtb2RlIC0gdmlydHVhbCIsCj4+ICvCoMKgwqAg W1RSQkVfQUREUkVTU19QSFlTSUNBTF3CoMKgwqAgPSAiQWRkcmVzcyBtb2RlIC0gcGh5c2ljYWwi LAo+PiArfTsKPiAKPiBEbyB3ZSBuZWVkIHRoaXMgPyBXZSBhbHdheXMgdXNlIHZpcnR1YWwuCj4g Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBpc190cmJlX3ZpcnR1YWxfbW9kZSh2b2lkKQo+ PiArewo+PiArwqDCoMKgIHU2NCB0cmJsaW1pdHIgPSByZWFkX3N5c3JlZ19zKFNZU19UUkJMSU1J VFJfRUwxKTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiAhKHRyYmxpbWl0ciAmIFRSQkxJTUlUUl9O Vk0pOwo+PiArfQo+PiArCj4gCj4gUmVtb3ZlCgpTdXJlLCB3aWxsIGRvLgoKPiAKPj4gK3N0YXRp YyBpbmxpbmUgYm9vbCBpc190cmJlX3BoeXNpY2FsX21vZGUodm9pZCkKPj4gK3sKPj4gK8KgwqDC oCB1NjQgdHJibGltaXRyID0gcmVhZF9zeXNyZWdfcyhTWVNfVFJCTElNSVRSX0VMMSk7Cj4+ICsK Pj4gK8KgwqDCoCByZXR1cm4gdHJibGltaXRyICYgVFJCTElNSVRSX05WTTsKPj4gK30KPiAKPiBS ZW1vdmUKClN1cmUsIHdpbGwgZG8uCgo+IAo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHZvaWQgc2V0 X3RyYmVfdmlydHVhbF9tb2RlKHZvaWQpCj4+ICt7Cj4+ICvCoMKgwqAgdTY0IHRyYmxpbWl0ciA9 IHJlYWRfc3lzcmVnX3MoU1lTX1RSQkxJTUlUUl9FTDEpOwo+PiArCj4+ICvCoMKgwqAgdHJibGlt aXRyICY9IH5UUkJMSU1JVFJfTlZNOwo+PiArwqDCoMKgIHdyaXRlX3N5c3JlZ19zKHRyYmxpbWl0 ciwgU1lTX1RSQkxJTUlUUl9FTDEpOwo+PiArfQo+PiArCj4gCj4+ICtzdGF0aWMgaW5saW5lIHZv aWQgc2V0X3RyYmVfcGh5c2ljYWxfbW9kZSh2b2lkKQo+PiArewo+PiArwqDCoMKgIHU2NCB0cmJs aW1pdHIgPSByZWFkX3N5c3JlZ19zKFNZU19UUkJMSU1JVFJfRUwxKTsKPj4gKwo+PiArwqDCoMKg IHRyYmxpbWl0ciB8PSBUUkJMSU1JVFJfTlZNOwo+PiArwqDCoMKgIHdyaXRlX3N5c3JlZ19zKHRy YmxpbWl0ciwgU1lTX1RSQkxJTUlUUl9FTDEpOwo+PiArfQo+IAo+IFJlbW92ZQoKU3VyZSwgd2ls bCBkby4KCj4gCj4+ICsKPj4gK2VudW0gdHJiZV90cmlnX21vZGUgewo+PiArwqDCoMKgIFRSQkVf VFJJR0dFUl9TVE9QwqDCoMKgID0gMCwKPj4gK8KgwqDCoCBUUkJFX1RSSUdHRVJfSVJRwqDCoMKg ID0gMSwKPj4gK8KgwqDCoCBUUkJFX1RSSUdHRVJfSUdOT1JFwqDCoMKgID0gMywKPj4gK307Cj4+ ICsKPj4gK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0cmJlX3RyaWdfbW9kZV9zdHJbXSA9IHsK Pj4gK8KgwqDCoCBbVFJCRV9UUklHR0VSX1NUT1BdwqDCoMKgID0gIlRyaWdnZXIgbW9kZSAtIHN0 b3AiLAo+PiArwqDCoMKgIFtUUkJFX1RSSUdHRVJfSVJRXcKgwqDCoCA9ICJUcmlnZ2VyIG1vZGUg LSBpcnEiLAo+PiArwqDCoMKgIFtUUkJFX1RSSUdHRVJfSUdOT1JFXcKgwqDCoCA9ICJUcmlnZ2Vy IG1vZGUgLSBpZ25vcmUiLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGlubGluZSBlbnVtIHRyYmVf dHJpZ19tb2RlIGdldF90cmJlX3RyaWdfbW9kZSh2b2lkKQo+PiArewo+PiArwqDCoMKgIHU2NCB0 cmJsaW1pdHIgPSByZWFkX3N5c3JlZ19zKFNZU19UUkJMSU1JVFJfRUwxKTsKPj4gKwo+PiArwqDC oMKgIHJldHVybiAodHJibGltaXRyID4+IFRSQkxJTUlUUl9UUklHX01PREVfU0hJRlQpICYgVFJC TElNSVRSX1RSSUdfTU9ERV9NQVNLOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHZvaWQg c2V0X3RyYmVfdHJpZ19tb2RlKGVudW0gdHJiZV90cmlnX21vZGUgbW9kZSkKPj4gK3sKPj4gK8Kg wqDCoCB1NjQgdHJibGltaXRyID0gcmVhZF9zeXNyZWdfcyhTWVNfVFJCTElNSVRSX0VMMSk7Cj4+ ICsKPj4gK8KgwqDCoCB0cmJsaW1pdHIgJj0gfihUUkJMSU1JVFJfVFJJR19NT0RFX01BU0sgPDwg VFJCTElNSVRSX1RSSUdfTU9ERV9TSElGVCk7Cj4+ICvCoMKgwqAgdHJibGltaXRyIHw9ICgobW9k ZSAmIFRSQkxJTUlUUl9UUklHX01PREVfTUFTSykgPDwgVFJCTElNSVRSX1RSSUdfTU9ERV9TSElG VCk7Cj4+ICvCoMKgwqAgd3JpdGVfc3lzcmVnX3ModHJibGltaXRyLCBTWVNfVFJCTElNSVRSX0VM MSk7Cj4+ICt9Cj4+ICsKPj4gK2VudW0gdHJiZV9maWxsX21vZGUgewo+PiArwqDCoMKgIFRSQkVf RklMTF9TVE9QwqDCoMKgwqDCoMKgwqAgPSAwLAo+PiArwqDCoMKgIFRSQkVfRklMTF9XUkFQwqDC oMKgwqDCoMKgwqAgPSAxLAo+PiArwqDCoMKgIFRSQkVfRklMTF9DSVJDVUxBUsKgwqDCoCA9IDMs Cj4+ICt9Owo+PiArCj4gCj4gUGxlYXNlIHVzZSAjZGVmaW5lCgpUaGVzZSBhcmUgcHJlZGVmaW5l ZCBjb25zdHJhaW5lZCB2YWx1ZXMgd2hpY2gga2luZCBvZiBtYWtlcyB0aGVtCmEgc2V0LiBBbiBl bnVtZXJhdGlvbiBzZWVtcyB0byBiZSBhIGJldHRlciByZXByZXNlbnRhdGlvbi4KCj4gCj4+ICtz dGF0aWMgY29uc3QgY2hhciAqY29uc3QgdHJiZV9maWxsX21vZGVfc3RyW10gPSB7Cj4+ICvCoMKg wqAgW1RSQkVfRklMTF9TVE9QXcKgwqDCoCA9ICJCdWZmZXIgbW9kZSAtIHN0b3AiLAo+PiArwqDC oMKgIFtUUkJFX0ZJTExfV1JBUF3CoMKgwqAgPSAiQnVmZmVyIG1vZGUgLSB3cmFwIiwKPj4gK8Kg wqDCoCBbVFJCRV9GSUxMX0NJUkNVTEFSXcKgwqDCoCA9ICJCdWZmZXIgbW9kZSAtIGNpcmN1bGFy IiwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgZW51bSB0cmJlX2ZpbGxfbW9kZSBnZXRf dHJiZV9maWxsX21vZGUodm9pZCkKPj4gK3sKPj4gK8KgwqDCoCB1NjQgdHJibGltaXRyID0gcmVh ZF9zeXNyZWdfcyhTWVNfVFJCTElNSVRSX0VMMSk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gKHRy YmxpbWl0ciA+PiBUUkJMSU1JVFJfRklMTF9NT0RFX1NISUZUKSAmIFRSQkxJTUlUUl9GSUxMX01P REVfTUFTSzsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSB2b2lkIHNldF90cmJlX2ZpbGxf bW9kZShlbnVtIHRyYmVfZmlsbF9tb2RlIG1vZGUpCj4+ICt7Cj4+ICvCoMKgwqAgdTY0IHRyYmxp bWl0ciA9IHJlYWRfc3lzcmVnX3MoU1lTX1RSQkxJTUlUUl9FTDEpOwo+PiArCj4+ICvCoMKgwqAg dHJibGltaXRyICY9IH4oVFJCTElNSVRSX0ZJTExfTU9ERV9NQVNLIDw8IFRSQkxJTUlUUl9GSUxM X01PREVfU0hJRlQpOwo+PiArwqDCoMKgIHRyYmxpbWl0ciB8PSAoKG1vZGUgJiBUUkJMSU1JVFJf RklMTF9NT0RFX01BU0spIDw8IFRSQkxJTUlUUl9GSUxMX01PREVfU0hJRlQpOwo+PiArwqDCoMKg IHdyaXRlX3N5c3JlZ19zKHRyYmxpbWl0ciwgU1lTX1RSQkxJTUlUUl9FTDEpOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3RyYmVfZGlzYWJsZWQodm9pZCkKPj4gK3sKPj4g K8KgwqDCoCB1NjQgdHJibGltaXRyID0gcmVhZF9zeXNyZWdfcyhTWVNfVFJCTElNSVRSX0VMMSk7 Cj4+ICsKPj4gK8KgwqDCoCB0cmJsaW1pdHIgJj0gflRSQkxJTUlUUl9FTkFCTEU7Cj4+ICvCoMKg wqAgd3JpdGVfc3lzcmVnX3ModHJibGltaXRyLCBTWVNfVFJCTElNSVRSX0VMMSk7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdHJiZV9lbmFibGVkKHZvaWQpCj4+ICt7Cj4+ ICvCoMKgwqAgdTY0IHRyYmxpbWl0ciA9IHJlYWRfc3lzcmVnX3MoU1lTX1RSQkxJTUlUUl9FTDEp Owo+PiArCj4+ICvCoMKgwqAgdHJibGltaXRyIHw9IFRSQkxJTUlUUl9FTkFCTEU7Cj4+ICvCoMKg wqAgd3JpdGVfc3lzcmVnX3ModHJibGltaXRyLCBTWVNfVFJCTElNSVRSX0VMMSk7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBnZXRfdHJiZV9mbGFnX3VwZGF0ZSh2b2lkKQo+PiAr ewo+PiArwqDCoMKgIHU2NCB0cmJpZHIgPSByZWFkX3N5c3JlZ19zKFNZU19UUkJJRFJfRUwxKTsK Pj4gKwo+PiArwqDCoMKgIHJldHVybiB0cmJpZHIgJiBUUkJJRFJfRkxBRzsKPj4gK30KPj4gKwo+ PiArc3RhdGljIGlubGluZSBib29sIGlzX3RyYmVfcHJvZ3JhbW1hYmxlKHZvaWQpCj4+ICt7Cj4+ ICvCoMKgwqAgdTY0IHRyYmlkciA9IHJlYWRfc3lzcmVnX3MoU1lTX1RSQklEUl9FTDEpOwo+PiAr Cj4+ICvCoMKgwqAgcmV0dXJuICEodHJiaWRyICYgVFJCSURSX1BST0cpOwo+PiArfQo+PiArIwo+ PiArZW51bSB0cmJlX2J1ZmZlcl9hbGlnbiB7Cj4+ICvCoMKgwqAgVFJCRV9CVUZGRVJfQllURSwK Pj4gK8KgwqDCoCBUUkJFX0JVRkZFUl9IQUxGX1dPUkQsCj4+ICvCoMKgwqAgVFJCRV9CVUZGRVJf V09SRCwKPj4gK8KgwqDCoCBUUkJFX0JVRkZFUl9ET1VCTEVfV09SRCwKPj4gK8KgwqDCoCBUUkJF X0JVRkZFUl8xNl9CWVRFUywKPj4gK8KgwqDCoCBUUkJFX0JVRkZFUl8zMl9CWVRFUywKPj4gK8Kg wqDCoCBUUkJFX0JVRkZFUl82NF9CWVRFUywKPj4gK8KgwqDCoCBUUkJFX0JVRkZFUl8xMjhfQllU RVMsCj4+ICvCoMKgwqAgVFJCRV9CVUZGRVJfMjU2X0JZVEVTLAo+PiArwqDCoMKgIFRSQkVfQlVG RkVSXzUxMl9CWVRFUywKPj4gK8KgwqDCoCBUUkJFX0JVRkZFUl8xS19CWVRFUywKPj4gK8KgwqDC oCBUUkJFX0JVRkZFUl8yS19CWVRFUywKPj4gK307Cj4+ICsKPiAKPiBSZW1vdmUgXl4KClN1cmUs IHdpbGwgZG8uCgo+IAo+PiArc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHRyYmVfYnVmZmVyX2Fs aWduX3N0cltdID0gewo+PiArwqDCoMKgIFtUUkJFX0JVRkZFUl9CWVRFXcKgwqDCoMKgwqDCoMKg ID0gIkJ5dGUiLAo+PiArwqDCoMKgIFtUUkJFX0JVRkZFUl9IQUxGX1dPUkRdwqDCoMKgwqDCoMKg wqAgPSAiSGFsZiB3b3JkIiwKPj4gK8KgwqDCoCBbVFJCRV9CVUZGRVJfV09SRF3CoMKgwqDCoMKg wqDCoCA9ICJXb3JkIiwKPj4gK8KgwqDCoCBbVFJCRV9CVUZGRVJfRE9VQkxFX1dPUkRdwqDCoMKg ID0gIkRvdWJsZSB3b3JkIiwKPj4gK8KgwqDCoCBbVFJCRV9CVUZGRVJfMTZfQllURVNdwqDCoMKg wqDCoMKgwqAgPSAiMTYgYnl0ZXMiLAo+PiArwqDCoMKgIFtUUkJFX0JVRkZFUl8zMl9CWVRFU13C oMKgwqDCoMKgwqDCoCA9ICIzMiBieXRlcyIsCj4+ICvCoMKgwqAgW1RSQkVfQlVGRkVSXzY0X0JZ VEVTXcKgwqDCoMKgwqDCoMKgID0gIjY0IGJ5dGVzIiwKPj4gK8KgwqDCoCBbVFJCRV9CVUZGRVJf MTI4X0JZVEVTXcKgwqDCoMKgwqDCoMKgID0gIjEyOCBieXRlcyIsCj4+ICvCoMKgwqAgW1RSQkVf QlVGRkVSXzI1Nl9CWVRFU13CoMKgwqDCoMKgwqDCoCA9ICIyNTYgYnl0ZXMiLAo+PiArwqDCoMKg IFtUUkJFX0JVRkZFUl81MTJfQllURVNdwqDCoMKgwqDCoMKgwqAgPSAiNTEyIGJ5dGVzIiwKPj4g K8KgwqDCoCBbVFJCRV9CVUZGRVJfMUtfQllURVNdwqDCoMKgwqDCoMKgwqAgPSAiMUsgYnl0ZXMi LAo+PiArwqDCoMKgIFtUUkJFX0JVRkZFUl8yS19CWVRFU13CoMKgwqDCoMKgwqDCoCA9ICIySyBi eXRlcyIsCj4+ICt9Owo+IAo+IFdlIGRvbid0IG5lZWQgYW55IG9mIHRoaXMuIFdlIGNvdWxkIHNp bXBseSAiPDwiIGFuZCBnZXQgdGhlCj4gc2l6ZS4KCkRyb3BwaW5nIGFsbCB0aGVzZSwgd2Ugd2ls bCBqdXN0IGV4cG9ydCB0aGUgaGV4IHZhbHVlIGluIHRoZSBzeXNmcwpub3QgYSBzdHJpbmcgZnJv bSBoZXJlLgoKPiAKPiAKPj4gKwo+PiArc3RhdGljIGlubGluZSBlbnVtIHRyYmVfYnVmZmVyX2Fs aWduIGdldF90cmJlX2FkZHJlc3NfYWxpZ24odm9pZCkKPj4gK3sKPj4gK8KgwqDCoCB1NjQgdHJi aWRyID0gcmVhZF9zeXNyZWdfcyhTWVNfVFJCSURSX0VMMSk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1 cm4gKHRyYmlkciA+PiBUUkJJRFJfQUxJR05fU0hJRlQpICYgVFJCSURSX0FMSUdOX01BU0s7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfdHJiZV9hZGRyZXNzX21vZGUo dW5zaWduZWQgbG9uZyBhZGRyKQo+PiArewo+PiArwqDCoMKgIGJvb2wgdmlydF9hZGRyID0gdmly dF9hZGRyX3ZhbGlkKGFkZHIpIHx8IGlzX3ZtYWxsb2NfYWRkcigodm9pZCAqKWFkZHIpOwo+PiAr wqDCoMKgIGJvb2wgdmlydF9tb2RlID0gaXNfdHJiZV92aXJ0dWFsX21vZGUoKTsKPj4gKwo+PiAr wqDCoMKgIFdBUk5fT04oYWRkciAmJiAoKHZpcnRfYWRkciAmJiAhdmlydF9tb2RlKSB8fCAoIXZp cnRfYWRkciAmJiB2aXJ0X21vZGUpKSk7Cj4+ICt9Cj4gCj4gSSBhbSBub3Qgc3VyZSBpZiB0aGlz IGlzIHJlYWxseSBoZWxwZnVsLiBZb3UgaGF2ZSB0byB0cnVzdCB0aGUga2VybmVsIHZtYWxsb2Mo KS4KCk9rYXksIGRyb3BwaW5nIGJvdGggYWRkcmVzcyBhc3NlcnRzIGkuZSBtb2RlIGFuZCBhbGln bm1lbnQuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwps aW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJh ZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51 eC1hcm0ta2VybmVsCg==