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=-11.3 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SIGNED_OFF_BY,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 9AB88C388F7 for ; Wed, 4 Nov 2020 09:21:38 +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 16B812071A for ; Wed, 4 Nov 2020 09:21:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="uLNy4tZ3" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 16B812071A Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=huawei.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:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=2SrqWKYFOY/V/ClPRWY7u3Jtd0sYmkU8YvyUSEtSwD0=; b=uLNy4tZ3xj40e1rrWg1O1AJoK rainaJTbUEoAlkWNJzq/tHx9DnlxokAZ40ZgFsbs8R7UywoLWTTVW5UxrLazU9wN62yQApGcMEhTX z9BgSvlm3RwALHOaKuh73l+IGHIXnMSB/vOa4eHbAi0dT8G+XKR8hFM1F/rxAWKg48IRmKrwOtkhB uvJXH+fSCKuyTyHm+Px8e0ZtAug8tdWL7SWtYohe9pQ+eKsny8WCnYFm9vBxL0uhkGEkQwbOrCBjo 1Vi0+nMQ/hpWe3hMWYySpHURtBXlF/MyPh6U65JnDXw12YpgFO6mjRTLdNue3CcfGM/zXaRsgH2xr /NyIX2UpA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kaEx4-0007K7-Ce; Wed, 04 Nov 2020 09:19:34 +0000 Received: from szxga06-in.huawei.com ([45.249.212.32]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kaEx0-0007JP-8b for linux-arm-kernel@lists.infradead.org; Wed, 04 Nov 2020 09:19:32 +0000 Received: from DGGEMS404-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga06-in.huawei.com (SkyGuard) with ESMTP id 4CR1Ld2fYPzhgZ9; Wed, 4 Nov 2020 17:19:21 +0800 (CST) Received: from [10.110.54.32] (10.110.54.32) by DGGEMS404-HUB.china.huawei.com (10.3.19.204) with Microsoft SMTP Server id 14.3.487.0; Wed, 4 Nov 2020 17:19:19 +0800 Subject: Re: [PATCH 1/1] arm64: Accelerate Adler32 using arm64 SVE instructions. To: Dave Martin , Ard Biesheuvel References: <20201103121506.1533-1-liqiang64@huawei.com> <20201103121506.1533-2-liqiang64@huawei.com> <20201103180031.GO6882@arm.com> From: Li Qiang Message-ID: <8c62099c-46b5-924f-d044-e442af4aab08@huawei.com> Date: Wed, 4 Nov 2020 17:19:18 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Thunderbird/68.8.1 MIME-Version: 1.0 In-Reply-To: <20201103180031.GO6882@arm.com> X-Originating-IP: [10.110.54.32] X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201104_041930_883540_9094188B X-CRM114-Status: GOOD ( 53.38 ) 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: Alexandre Torgue , Catalin Marinas , Linux Crypto Mailing List , Maxime Coquelin , Will Deacon , "David S. Miller" , Linux ARM , Herbert Xu Content-Type: text/plain; charset="gbk" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgRGF2ZSwKClRoYW5rIHlvdSB2ZXJ5IG11Y2ggZm9yIHlvdXIgcmVwbHkgYW5kIHN1Z2dlc3Rp b25zLiA6KQoK1NogMjAyMC8xMS80IDI6MDAsIERhdmUgTWFydGluINC0tcA6Cj4gT24gVHVlLCBO b3YgMDMsIDIwMjAgYXQgMDM6MzQ6MjdQTSArMDEwMCwgQXJkIEJpZXNoZXV2ZWwgd3JvdGU6Cj4+ ICgrIERhdmUpCj4+Cj4+IEhlbGxvIGxpcWlhbmcsCj4+Cj4+IEZpcnN0IG9mIGFsbCwgSSBkb24n dCB0aGluayBpdCBpcyBzYWZlIGF0IHRoZSBtb21lbnQgdG8gdXNlIFNWRSBpbiB0aGUKPj4ga2Vy bmVsLCBhcyB3ZSBkb24ndCBwcmVzZXJ2ZSBhbGwgc3RhdGUgSUlSQy4gTXkgbWVtb3J5IGlzIGEg Yml0IGhhenksCj4gCj4gSSdtIG5vdCBjb252aW5jZWQgdGhhdCBpdCdzIHNhZmUgcmlnaHQgbm93 LiAgU1ZFIGluIHRoZSBrZXJuZWwgaXMKPiB1bnN1cHBvcnRlZCwgcGFydGx5IGR1ZSB0byBjb3N0 IGFuZCBwYXJ0bHkgZHVlIHRvIHRoZSBsYWNrIG9mIGEKPiBjb21wZWxsaW5nIHVzZSBjYXNlLgo+ IAo+IEkgdGhpbmsgaXQgd291bGQgYmUgcHJlZmVyYWJsZSB0byBzZWUgdGhpcyBhbGdvIGFjY2Vs ZXJhdGVkIGZvciBORU9OCj4gZmlyc3QsIHNpbmNlIGFsbCBBQXJjaDY0IGhhcmR3YXJlIGNhbiBi ZW5lZml0IGZyb20gdGhhdC4KClllcyBpIGFtIHRyeWluZyBpdCBzZXJpb3VzbHkuIDopCgo+IAo+ IEl0J3MgZ29vZCB0byBzZWUgc29tZW9uZSBleHBlcmltZW50aW5nIHdpdGggU1ZFIHRob3VnaCAt LSBzbyBmZWVsCj4gZnJlZSB0byBleHBlcmltZW50IHdpdGggdGhpcyBpbiB1c2Vyc3BhY2UgYW5k IHNlZSB3aGF0IHNvcnQgb2YgYmVuY2htYXJrCj4geW91IGNhbiBhY2hpZXZlLiAgQnV0IHRoZXJl J3Mgbm8gZ3VhcmFudGVlIHRoaXMgY2FuIGJlIG1lcmdlZCBpbiB0aGUKPiBrZXJuZWwgYW55IHRp bWUgc29vbi4gIElmIHRoZXJlJ3MgYSBiaWcgZW5vdWdoIGFkdmFudGFnZSBvdmVyIE5FT04sIHRo ZW4KPiBpdCBiZWNvbWVzIG1vcmUgaW50ZXJlc3RpbmcuCgpPaCB5ZXMsIEkgdGhpbmsgc28gdG9v ISA6KQoKPiAKPiAKPj4gdGhvdWdoLCBzbyBwZXJoYXBzIERhdmUgY2FuIGVsYWJvcmF0ZT8KPiAK PiBIaXN0b3JpY2FsbHkgdGhlcmUgd2FzIGFub3RoZXIgcmVhc29uOiBmb3IgZXZlcnkgbmVzdGVk Cj4ga2VybmVsX25lb25fYmVnaW4oKSwgd2Ugd291bGQgaGF2ZSBwb3RlbnRpYWxseSBuZWVkZWQg dG8gc2F2ZSB0aGUgZW50aXJlCj4gU1ZFIHN0YXRlLCB3aGljaCBpcyBhIHByb2JsZW0gLS0gd2Un ZCBsaWtlbHkgcnVuIG91dCBvZiBrZXJuZWwgc3RhY2ssCj4gcGx1cyBpdCBjb3VsZCBnZXQgY29z dGx5LCBlc3BlY2lhbGx5IGZvciBsYXRlbmN5LiAgU2luY2Ugd2UgcmVmYWN0b3JlZAo+IHRoZSBr ZXJuZWwtbW9kZSBORU9OIHN1cHBvcnQgdG8gcmVtb3ZlIG5lc3Rpbmcgc3VwcG9ydCwgdGhpcyBp cyBub3Qgc28KPiBtdWNoIG9mIGEgcHJvYmxlbS4gIGtlcm5lbF9uZW9uX2JlZ2luKCkgbWF5IGlu Y3VyIGEgc2F2ZSBvZiB0aGUgZnVsbCBTVkUKPiBzdGF0ZSBhbnl3YXksIHNvIGluIHNvbWUgd2F5 cyBpdCB3b3VsZCBiZSBhIGdvb2QgdGhpbmcgaWYgd2UgY291bGQKPiBhY3R1YWxseSBtYWtlIHVz ZSBvZiBhbGwgdGhvc2UgcmVnaXN0ZXJzLgo+IAo+IFNWRSBoYXJkd2FyZSByZW1haW5zIHJhcmUs IHNvIGFzIGEgZ2VuZXJhbCBwb2xpY3kgSSBkb24ndCB0aGluayB3ZQo+IHNob3VsZCBhY2NlcHQg U1ZFIGltcGxlbWVudGF0aW9ucyBvZiBhbnkgYWxnb3JpdGhtIHRoYXQgZG9lcyBub3QKPiBhbHJl YWR5IGhhdmUgYSBORU9OIGltcGxlbWVudGF0aW9uIC0tIHVubGVzcyB0aGUgY29udHJpYnV0b3Ig Y2FuCj4gZXhwbGFpbiB3aHkgbm9ib2R5IHdpdGggbm9uLVNWRSBoYXJkd2FyZSBpcyBnb2luZyB0 byBjYXJlIGFib3V0IHRoZQo+IHBlcmZvcm1hbmNlIG9mIHRoYXQgYWxnby4KPiAKPiAKPj4KPj4g SSdsbCBnaXZlIG15IGZlZWRiYWNrIG9uIHRoZSBjb2RlIGl0c2VsZiBiZWxvdywgYnV0IHBsZWFz ZSBkb24ndAo+PiBjb25zaWRlciB0aGlzIGFuIGFjayBvbiB0aGUgaW50ZW50IG9mIHVzaW5nIFNW RSBpbiB0aGUga2VybmVsLgo+Pgo+PiBDb3VsZCB5b3UgZXhwbGFpbiB3aHkgU1ZFIGlzIHNvIG11 Y2ggYmV0dGVyIHRoYW4gTkVPTiBoZXJlPwo+IAo+PkZyb20gbXkgZW5kLCBJIHRoaW5rIHRoYXQg U1ZFIHByb2JhYmx5IGRvZXNuJ3Qgb2ZmZXIgc3BlY2lhbCBhZHZhbnRhZ2VzCj4gaGVyZSBiZXlv bmQgbGVzcyBtZXNzeSBjb2RlIGFuZCBtb3JlIG51bWJlci1jcnVuY2hpbmcgcGVyIGxvb3AKPiBp dGVyYXRpb24uCj4gCj4gVGhhdCBkb2Vzbid0IG1lYW4gdGhhdCBTVkUgY2FuJ3QgYmVhdCBORU9O LCBidXQgTkVPTiBzaG91bGQgc3RpbGwgb2ZmZXIKPiBhIGJpZyBhZHZhbnRhZ2Ugb3ZlciBzY2Fs YXIgY29kZS4KPiAKPiBTaW5jZSB0aGUgY2FsY3VsYXRpb25zIGFyZSBxdWl0ZSBzaW1wbGUsIGV2 ZW4gdGhlIE5FT04gdmVyc2lvbiBtYXkKPiB0ZW5kIHRvIHNhdHVyYXRlIGxvYWQvc3RvcmUgYmFu ZHdpZHRoIG9uIHNvbWUgaGFyZHdhcmUsIGluIHdoaWNoIGNhc2UKPiB0aGUgYWRkaXRpb25hbCBw ZXJmb3JtYW5jZSBmcm9tIFNWRSBtYXkgYmUgbGltaXRlZC4gIEV4cGVyaW1lbnRhdGlvbgo+IHdv dWxkIGJlIG5lZWRlZCBpbiBvcmRlciB0byBrbm93IGZvciBzdXJlLgoKWWVzLCBJIGZvdW5kIHRo aXMgcHJvYmxlbSB3aGVuIEkgd2FzIHRlc3RpbmcgdGhlIFNWRSB2ZXJzaW9uIGFuZCBORU9OCnZl cnNpb24gb2Ygb3RoZXIgYWxnb3JpdGhtcyAoaGlnaGVyIGRhdGEgdGhyb3VnaHB1dCkuIFRoZSBs b2FkL3N0b3JlCnVuaXQgbGltaXRzIHRoZSBwZXJmb3JtYW5jZSBvZiBTVkUsIHJlc3VsdGluZyBp biBqdXN0IGEgc2xpZ2h0IGltcHJvdmVtZW50CmluIHRoZSBwZXJmb3JtYW5jZSBvZiBTVkUgY29t cGFyZWQgdG8gTkVPTi4KCj4gCj4gCj4gCj4gSSd2ZSBtYWRlIHNvbWUgcmFuZG9tIGNvbW1lbnRz IG9uIHRoZSBjb2RlIGJlbG93IC0tIGJ1dCBteSBrbm93bGVkZ2Ugb2YKPiB0aGUgU1ZFIGluc3Ry dWN0aW9uIHNldCBpcyBhIGxpdHRsZSBydXN0eSwgYW5kIEkgaGF2ZW4ndCB0cmllZCB0bwo+IHVu ZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQgdGhpcyBhbGdvIGlzIHRyeWluZyB0byBkbyEKPiAKPj4K Pj4gT24gVHVlLCAzIE5vdiAyMDIwIGF0IDEzOjE2LCBsMDAzNzQzMzQgPGxpcWlhbmc2NEBodWF3 ZWkuY29tPiB3cm90ZToKPj4+Cj4+PiBGcm9tOiBsaXFpYW5nIDxsaXFpYW5nNjRAaHVhd2VpLmNv bT4KPj4+Cj4+PiAgICAgICAgIEluIHRoZSBsaWJ6IGxpYnJhcnksIHRoZSBjaGVja3N1bSBhbGdv cml0aG0gYWRsZXIzMiB1c3VhbGx5IG9jY3VwaWVzCj4+PiAgICAgICAgIGEgcmVsYXRpdmVseSBo aWdoIGhvdCBzcG90LCBhbmQgdGhlIFNWRSBpbnN0cnVjdGlvbiBzZXQgY2FuIGVhc2lseQo+Pj4g ICAgICAgICBhY2NlbGVyYXRlIGl0LCBzbyB0aGF0IHRoZSBwZXJmb3JtYW5jZSBvZiBsaWJ6IGxp YnJhcnkgd2lsbCBiZQo+Pj4gICAgICAgICBzaWduaWZpY2FudGx5IGltcHJvdmVkLgo+Pj4KPj4+ ICAgICAgICAgV2UgY2FuIGRpdmlkZXMgYnVmIGludG8gYmxvY2tzIGFjY29yZGluZyB0byB0aGUg Yml0IHdpZHRoIG9mIFNWRSwKPj4+ICAgICAgICAgYW5kIHRoZW4gdXNlcyB2ZWN0b3IgcmVnaXN0 ZXJzIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBpbiB1bml0cyBvZiBibG9ja3MKPj4+ICAgICAgICAg dG8gYWNoaWV2ZSB0aGUgcHVycG9zZSBvZiBhY2NlbGVyYXRpb24uCj4+Pgo+Pj4gICAgICAgICBP biBtYWNoaW5lcyB0aGF0IHN1cHBvcnQgQVJNNjQgc3ZlIGluc3RydWN0aW9ucywgdGhpcyBhbGdv cml0aG0gaXMKPj4+ICAgICAgICAgYWJvdXQgM340IHRpbWVzIGZhc3RlciB0aGFuIHRoZSBhbGdv cml0aG0gaW1wbGVtZW50ZWQgaW4gQyBsYW5ndWFnZQo+Pj4gICAgICAgICBpbiBsaWJ6LiBUaGUg d2lkZXIgdGhlIFNWRSBpbnN0cnVjdGlvbiwgdGhlIGJldHRlciB0aGUgYWNjZWxlcmF0aW9uIGVm ZmVjdC4KPj4+Cj4+PiAgICAgICAgIE1lYXN1cmVkIG9uIGEgVGFpc2hhbiAxOTUxIG1hY2hpbmUg dGhhdCBzdXBwb3J0cyAyNTZiaXQgd2lkdGggU1ZFLAo+Pj4gICAgICAgICBiZWxvdyBhcmUgdGhl IHJlc3VsdHMgb2YgbXkgbWVhc3VyZWQgcmFuZG9tIGRhdGEgb2YgMU0gYW5kIDEwTToKPj4+Cj4+ PiAgICAgICAgICAgICAgICAgW3Jvb3RAeHh4IGFkbGVyMzJdIyAuL2JlbmNobWFyayAxMDAwMDAw Cj4+PiAgICAgICAgICAgICAgICAgTGlieiBhbGc6IFRpbWUgdXNlZDogICAgNjA4IHVzLCAxNjQ0 LjcgTWIvcy4KPj4+ICAgICAgICAgICAgICAgICBTVkUgIGFsZzogVGltZSB1c2VkOiAgICAxNjYg dXMsIDYwMjQuMSBNYi9zLgo+Pj4KPj4+ICAgICAgICAgICAgICAgICBbcm9vdEB4eHggYWRsZXIz Ml0jIC4vYmVuY2htYXJrIDEwMDAwMDAwCj4+PiAgICAgICAgICAgICAgICAgTGlieiBhbGc6IFRp bWUgdXNlZDogICA2NDg0IHVzLCAxNTQyLjMgTWIvcy4KPj4+ICAgICAgICAgICAgICAgICBTVkUg IGFsZzogVGltZSB1c2VkOiAgIDIwMzQgdXMsIDQ5MTYuNCBNYi9zLgo+Pj4KPj4+ICAgICAgICAg VGhlIGJsb2NrcyBjYW4gYmUgb2YgYW55IHNpemUsIHNvIHRoZSBhbGdvcml0aG0gY2FuIGF1dG9t YXRpY2FsbHkgYWRhcHQKPj4+ICAgICAgICAgdG8gU1ZFIGhhcmR3YXJlIHdpdGggZGlmZmVyZW50 IGJpdCB3aWR0aHMgd2l0aG91dCBtb2RpZnlpbmcgdGhlIGNvZGUuCj4+Pgo+Pgo+PiBQbGVhc2Ug ZHJvcCB0aGlzIGluZGVudGF0aW9uIGZyb20gdGhlIGNvbW1pdCBsb2cuCj4+Cj4+Pgo+Pj4gU2ln bmVkLW9mZi1ieTogbGlxaWFuZyA8bGlxaWFuZzY0QGh1YXdlaS5jb20+Cj4+PiAtLS0KPj4+ICBh cmNoL2FybTY0L2NyeXB0by9LY29uZmlnICAgICAgICAgICAgfCAgIDUgKysKPj4+ICBhcmNoL2Fy bTY0L2NyeXB0by9NYWtlZmlsZSAgICAgICAgICAgfCAgIDMgKwo+Pj4gIGFyY2gvYXJtNjQvY3J5 cHRvL2FkbGVyMzItc3ZlLWdsdWUuYyB8ICA5MyArKysrKysrKysrKysrKysrKysrKwo+Pj4gIGFy Y2gvYXJtNjQvY3J5cHRvL2FkbGVyMzItc3ZlLlMgICAgICB8IDEyNyArKysrKysrKysrKysrKysr KysrKysrKysrKysKPj4+ICBjcnlwdG8vdGVzdG1nci5jICAgICAgICAgICAgICAgICAgICAgfCAg IDggKy0KPj4+ICBjcnlwdG8vdGVzdG1nci5oICAgICAgICAgICAgICAgICAgICAgfCAgMTMgKysr Cj4+Cj4+IFBsZWFzZSBzcGxpdCBpbnRvIHR3byBwYXRjaGVzLiBBbHNvLCB3aG8gaXMgZ29pbmcg dG8gdXNlIHRoaXMgImFkbGVyMzIiIHNoYXNoPwo+Pgo+Pj4gIDYgZmlsZXMgY2hhbmdlZCwgMjQ4 IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgYXJj aC9hcm02NC9jcnlwdG8vYWRsZXIzMi1zdmUtZ2x1ZS5jCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGFyY2gvYXJtNjQvY3J5cHRvL2FkbGVyMzItc3ZlLlMKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEvYXJj aC9hcm02NC9jcnlwdG8vS2NvbmZpZyBiL2FyY2gvYXJtNjQvY3J5cHRvL0tjb25maWcKPj4+IGlu ZGV4IGI4ZWIwNDUuLmNmZTU4YjkgMTAwNjQ0Cj4+PiAtLS0gYS9hcmNoL2FybTY0L2NyeXB0by9L Y29uZmlnCj4+PiArKysgYi9hcmNoL2FybTY0L2NyeXB0by9LY29uZmlnCj4+PiBAQCAtMTI2LDQg KzEyNiw5IEBAIGNvbmZpZyBDUllQVE9fQUVTX0FSTTY0X0JTCj4+PiAgICAgICAgIHNlbGVjdCBD UllQVE9fTElCX0FFUwo+Pj4gICAgICAgICBzZWxlY3QgQ1JZUFRPX1NJTUQKPj4+Cj4+PiArY29u ZmlnIFNWRV9BRExFUjMyCj4+PiArICAgICAgIHRyaXN0YXRlICJBY2NlbGVyYXRlIEFkbGVyMzIg dXNpbmcgYXJtNjQgU1ZFIGluc3RydWN0aW9ucy4iCj4+PiArICAgICAgIGRlcGVuZHMgb24gQVJN NjRfU1ZFCj4+PiArICAgICAgIHNlbGVjdCBDUllQVE9fSEFTSAo+Pj4gKwo+Pj4gIGVuZGlmCj4+ PiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9jcnlwdG8vTWFrZWZpbGUgYi9hcmNoL2FybTY0L2Ny eXB0by9NYWtlZmlsZQo+Pj4gaW5kZXggZDA5MDFlNi4uNDVmZTY0OSAxMDA2NDQKPj4+IC0tLSBh L2FyY2gvYXJtNjQvY3J5cHRvL01ha2VmaWxlCj4+PiArKysgYi9hcmNoL2FybTY0L2NyeXB0by9N YWtlZmlsZQo+Pj4gQEAgLTYzLDYgKzYzLDkgQEAgYWVzLWFybTY0LXkgOj0gYWVzLWNpcGhlci1j b3JlLm8gYWVzLWNpcGhlci1nbHVlLm8KPj4+ICBvYmotJChDT05GSUdfQ1JZUFRPX0FFU19BUk02 NF9CUykgKz0gYWVzLW5lb24tYnMubwo+Pj4gIGFlcy1uZW9uLWJzLXkgOj0gYWVzLW5lb25icy1j b3JlLm8gYWVzLW5lb25icy1nbHVlLm8KPj4+Cj4+PiArb2JqLSQoQ09ORklHX1NWRV9BRExFUjMy KSArPSBzdmUtYWRsZXIzMi5vCj4+PiArc3ZlLWFkbGVyMzIteSA6PSBhZGxlcjMyLXN2ZS5vIGFk bGVyMzItc3ZlLWdsdWUubwo+Pj4gKwo+Pj4gIENGTEFHU19hZXMtZ2x1ZS1jZS5vICAgOj0gLURV U0VfVjhfQ1JZUFRPX0VYVEVOU0lPTlMKPj4+Cj4+PiAgJChvYmopL2Flcy1nbHVlLSUubzogJChz cmMpL2Flcy1nbHVlLmMgRk9SQ0UKPj4+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2NyeXB0by9h ZGxlcjMyLXN2ZS1nbHVlLmMgYi9hcmNoL2FybTY0L2NyeXB0by9hZGxlcjMyLXN2ZS1nbHVlLmMK Pj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAwLi5jYjc0NTE0Cj4+PiAt LS0gL2Rldi9udWxsCj4+PiArKysgYi9hcmNoL2FybTY0L2NyeXB0by9hZGxlcjMyLXN2ZS1nbHVl LmMKPj4+IEBAIC0wLDAgKzEsOTMgQEAKPj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMC1vbmx5Cj4+PiArLyoKPj4+ICsgKiBBY2NlbGVyYXRlIEFkbGVyMzIgdXNpbmcgYXJt NjQgU1ZFIGluc3RydWN0aW9ucy4KPj4+ICsgKiBBdXRvbWF0aWNhbGx5IHN1cHBvcnQgYWxsIGJp dCB3aWR0aCBvZiBTVkUKPj4+ICsgKiB2ZWN0b3IoMTI4fjIwNDgpLgo+Pj4gKyAqCj4+PiArICog Q29weXJpZ2h0IChDKSAyMDIwIEh1YXdlaSBUZWNobm9sb2dpZXMgQ28uLCBMdGQuCj4+PiArICoK Pj4+ICsgKiBBdXRob3I6IExpIFFpYW5nIDxsaXFpYW5nNjRAaHVhd2VpLmNvbT4KPj4+ICsgKi8K Pj4+ICsjaW5jbHVkZSA8bGludXgvY3B1ZmVhdHVyZS5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9r ZXJuZWwuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4+PiArI2luY2x1ZGUgPGxp bnV4L3p1dGlsLmg+Cj4+PiArCj4+PiArI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+ Cj4+PiArI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9zaW1kLmg+Cj4+PiArCj4+PiArI2luY2x1 ZGUgPGFzbS9uZW9uLmg+Cj4+PiArI2luY2x1ZGUgPGFzbS9zaW1kLmg+Cj4+PiArCj4+PiArLyog U2NhbGFibGUgdmVjdG9yIGV4dGVuc2lvbiBtaW4gc2l6ZSAxMjhiaXQgKi8KPj4+ICsjZGVmaW5l IFNWRV9BRExFUjMyX01JTl9TSVpFIDE2VQo+Pj4gKyNkZWZpbmUgU1ZFX0FETEVSMzJfRElHRVNU X1NJWkUgNAo+Pj4gKyNkZWZpbmUgU1ZFX0FETEVSMzJfQkxPQ0tTSVpFIDEKPj4+ICsKPj4+ICth c21saW5rYWdlIHUzMiBhZGxlcjMyX3N2ZSh1MzIgYWRsZXIsIGNvbnN0IHU4ICpidWYsIHUzMiBs ZW4pOwo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgYWRsZXIzMl9zdmVfaW5pdChzdHJ1Y3Qgc2hhc2hf ZGVzYyAqZGVzYykKPj4+ICt7Cj4+PiArICAgICAgIHUzMiAqYWRsZXIzMiA9IHNoYXNoX2Rlc2Nf Y3R4KGRlc2MpOwo+Pj4gKwo+Pj4gKyAgICAgICAqYWRsZXIzMiA9IDE7Cj4+PiArICAgICAgIHJl dHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IGFkbGVyMzJfc3ZlX3VwZGF0ZShz dHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgY29uc3QgdTggKmRhdGEsCj4+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aCkKPj4KPj4gUGxlYXNlIGlu ZGVudCBmdW5jdGlvbiBwYXJhbWV0ZXJzCj4+Cj4+PiArewo+Pj4gKyAgICAgICB1MzIgKmFkbGVy MzIgPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKPj4+ICsKPj4+ICsgICAgICAgaWYgKGxlbmd0aCA+ PSBTVkVfQURMRVIzMl9NSU5fU0laRSAmJiBjcnlwdG9fc2ltZF91c2FibGUoKSkgewo+Pj4gKyAg ICAgICAgICAgICAgIGtlcm5lbF9uZW9uX2JlZ2luKCk7Cj4+PiArICAgICAgICAgICAgICAgKmFk bGVyMzIgPSBhZGxlcjMyX3N2ZSgqYWRsZXIzMiwgZGF0YSwgbGVuZ3RoKTsKPj4+ICsgICAgICAg ICAgICAgICBrZXJuZWxfbmVvbl9lbmQoKTsKPj4+ICsgICAgICAgfSBlbHNlIHsKPj4+ICsgICAg ICAgICAgICAgICAqYWRsZXIzMiA9IHpsaWJfYWRsZXIzMigqYWRsZXIzMiwgZGF0YSwgbGVuZ3Ro KTsKPj4+ICsgICAgICAgfQo+Pj4gKyAgICAgICByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiAr c3RhdGljIGludCBhZGxlcjMyX3N2ZV9maW5hbChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgdTgg Km91dCkKPj4+ICt7Cj4+PiArICAgICAgIHUzMiAqYWRsZXIzMiA9IHNoYXNoX2Rlc2NfY3R4KGRl c2MpOwo+Pj4gKwo+Pj4gKyAgICAgICAqKHUzMiAqKW91dCA9ICphZGxlcjMyOwo+Pgo+PiBQbGVh c2UgdXNlIHB1dF91bmFsaWduZWQgaGVyZQo+Pgo+Pj4gKyAgICAgICByZXR1cm4gMDsKPj4+ICt9 Cj4+PiArCj4+PiArc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgYWRsZXIzMl9zdmVfYWxnW10gPSB7 ewo+Pj4gKyAgICAgICAuZGlnZXN0c2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBT VkVfQURMRVIzMl9ESUdFU1RfU0laRSwKPj4+ICsgICAgICAgLmRlc2NzaXplICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgID0gU1ZFX0FETEVSMzJfRElHRVNUX1NJWkUsCj4+PiArICAgICAg IC5pbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFkbGVyMzJfc3ZlX2lu aXQsCj4+PiArICAgICAgIC51cGRhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9 IGFkbGVyMzJfc3ZlX3VwZGF0ZSwKPj4+ICsgICAgICAgLmZpbmFsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgID0gYWRsZXIzMl9zdmVfZmluYWwsCj4+PiArCj4+PiArICAgICAgIC5i YXNlLmNyYV9uYW1lICAgICAgICAgICAgICAgICAgPSAiYWRsZXIzMiIsCj4+PiArICAgICAgIC5i YXNlLmNyYV9kcml2ZXJfbmFtZSAgID0gImFkbGVyMzItYXJtNjQtc3ZlIiwKPj4+ICsgICAgICAg LmJhc2UuY3JhX3ByaW9yaXR5ICAgICAgICAgICAgICA9IDIwMCwKPj4+ICsgICAgICAgLmJhc2Uu Y3JhX2Jsb2Nrc2l6ZSAgICAgICAgICAgICA9IFNWRV9BRExFUjMyX0JMT0NLU0laRSwKPj4+ICsg ICAgICAgLmJhc2UuY3JhX21vZHVsZSAgICAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAo+Pgo+ PiBQbGVhc2UgbWFrZSBzdXJlIHRoZSBpbmRlbnRhdGlvbiBpcyBjb3JyZWN0IGhlcmUuCj4+Cj4+ PiArfX07Cj4+PiArCj4+PiArc3RhdGljIGludCBfX2luaXQgYWRsZXIzMl9zdmVfbW9kX2luaXQo dm9pZCkKPj4+ICt7Cj4+PiArICAgICAgIGlmICghY3B1X2hhdmVfbmFtZWRfZmVhdHVyZShTVkUp KQo+Pj4gKyAgICAgICAgICAgICAgIHJldHVybiAwOwo+Pj4gKwo+Pj4gKyAgICAgICByZXR1cm4g Y3J5cHRvX3JlZ2lzdGVyX3NoYXNoKGFkbGVyMzJfc3ZlX2FsZyk7Cj4+PiArfQo+Pj4gKwo+Pj4g K3N0YXRpYyB2b2lkIF9fZXhpdCBhZGxlcjMyX3N2ZV9tb2RfZXhpdCh2b2lkKQo+Pj4gK3sKPj4+ ICsgICAgICAgY3J5cHRvX3VucmVnaXN0ZXJfc2hhc2goYWRsZXIzMl9zdmVfYWxnKTsKPj4+ICt9 Cj4+PiArCj4+PiArbW9kdWxlX2luaXQoYWRsZXIzMl9zdmVfbW9kX2luaXQpOwo+Pj4gK21vZHVs ZV9leGl0KGFkbGVyMzJfc3ZlX21vZF9leGl0KTsKPj4+ICsKPj4+ICtNT0RVTEVfQVVUSE9SKCJM aSBRaWFuZyA8bGlxaWFuZzY0QGh1YXdlaS5jb20+Iik7Cj4+PiArTU9EVUxFX0xJQ0VOU0UoIkdQ TCB2MiIpOwo+Pj4gK01PRFVMRV9BTElBU19DUllQVE8oImFkbGVyMzIiKTsKPj4+ICtNT0RVTEVf QUxJQVNfQ1JZUFRPKCJhZGxlcjMyLWFybTY0LXN2ZSIpOwo+Pj4gZGlmZiAtLWdpdCBhL2FyY2gv YXJtNjQvY3J5cHRvL2FkbGVyMzItc3ZlLlMgYi9hcmNoL2FybTY0L2NyeXB0by9hZGxlcjMyLXN2 ZS5TCj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4gaW5kZXggMDAwMDAwMC4uMzRlZTRiYgo+ Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIvYXJjaC9hcm02NC9jcnlwdG8vYWRsZXIzMi1zdmUu Uwo+Pj4gQEAgLTAsMCArMSwxMjcgQEAKPj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMC1vbmx5ICovCj4+PiArLyoKPj4+ICsgKiBBY2NlbGVyYXRlIEFkbGVyMzIgdXNpbmcg YXJtNjQgU1ZFIGluc3RydWN0aW9ucy4gQXV0b21hdGljYWxseSBzdXBwb3J0IGFsbCBiaXQKPj4+ ICsgKiAgICAgIHdpZHRoIG9mIFNWRSB2ZWN0b3IoMTI4fjIwNDgpLgo+Pj4gKyAqCj4+PiArICog Q29weXJpZ2h0IChDKSAyMDIwIEh1YXdlaSBUZWNobm9sb2dpZXMgQ28uLCBMdGQuCj4+PiArICoK Pj4+ICsgKiBBdXRob3I6IExpIFFpYW5nIDxsaXFpYW5nNjRAaHVhd2VpLmNvbT4KPj4+ICsgKi8K Pj4+ICsKPj4+ICsjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgo+Pj4gKyNpbmNsdWRlIDxhc20v YXNzZW1ibGVyLmg+Cj4+PiArCj4+PiArLmFyY2ggYXJtdjgtYStzdmUKPiAKPiBVc2UgLmFyY2hf ZXh0ZW5zaW9uIHN2ZSBpbnN0ZWFkLgo+IAo+IFRoZSBjb21waWxlciBmcm9udGVuZCBhbHJlYWR5 IHNldHMgLmFyY2ggdG8gdGhlIHRoZSBhcHByb3ByaWF0ZSBiYXNlCj4gYXJjaGl0ZWN0dXJlIGFs cmVhZHk7IHRoYXQgc2hvdWxkbid0IGJlIG92ZXJyaWRkZW4gdW5sZXNzIHRoZXJlIGlzIGEKPiBn b29kIHJlYXNvbi4KPiAKPj4+ICsuZmlsZSAiYWRsZXIzMl9zdmUuUyIKPj4KPj4gRHJvcCB0aGUg LmZpbGUKPj4KPj4gUGxlYXNlIGluZGVudCB0aGUgcmVzdCAxIHRhYgo+Pgo+Pj4gKy50ZXh0Cj4+ PiArLmFsaWduIDYKPj4+ICsKPj4+ICsvL1RoZSBzdXBwb3J0ZWQgc3ZlIHZlY3RvciBsZW5ndGgg cmFuZ2UgaXMgMTI4fjIwNDggYnkgdGhpcyBBZGxlcl9zZXF1ZW5jZQo+Pj4gKy5BZGxlcl9zZXF1 ZW5jZToKPj4KPj4gVGhpcyBzaG91bGQgYmUgaW4gLnJvZGF0YS4gQWxzbywgaWYgeW91IHVzZSAu IG9yIEwgcHJlZml4ZXMsIHVzZSAuTAo+PiBiZWNhdXNlIHRoYXQgaXMgd2hhdCB5b3UgbmVlZCB0 byBtYWtlIHRoZXNlIGxvY2FsIHN5bWJvbHMuCj4+Cj4+Cj4+PiArICAgICAgIC5zaG9ydCAyNTYs MjU1LDI1NCwyNTMsMjUyLDI1MSwyNTAsMjQ5LDI0OCwyNDcsMjQ2LDI0NSwyNDQsMjQzLDI0Miwy NDEKPj4+ICsgICAgICAgLnNob3J0IDI0MCwyMzksMjM4LDIzNywyMzYsMjM1LDIzNCwyMzMsMjMy LDIzMSwyMzAsMjI5LDIyOCwyMjcsMjI2LDIyNQo+Pj4gKyAgICAgICAuc2hvcnQgMjI0LDIyMywy MjIsMjIxLDIyMCwyMTksMjE4LDIxNywyMTYsMjE1LDIxNCwyMTMsMjEyLDIxMSwyMTAsMjA5Cj4+ PiArICAgICAgIC5zaG9ydCAyMDgsMjA3LDIwNiwyMDUsMjA0LDIwMywyMDIsMjAxLDIwMCwxOTks MTk4LDE5NywxOTYsMTk1LDE5NCwxOTMKPj4+ICsgICAgICAgLnNob3J0IDE5MiwxOTEsMTkwLDE4 OSwxODgsMTg3LDE4NiwxODUsMTg0LDE4MywxODIsMTgxLDE4MCwxNzksMTc4LDE3Nwo+Pj4gKyAg ICAgICAuc2hvcnQgMTc2LDE3NSwxNzQsMTczLDE3MiwxNzEsMTcwLDE2OSwxNjgsMTY3LDE2Niwx NjUsMTY0LDE2MywxNjIsMTYxCj4+PiArICAgICAgIC5zaG9ydCAxNjAsMTU5LDE1OCwxNTcsMTU2 LDE1NSwxNTQsMTUzLDE1MiwxNTEsMTUwLDE0OSwxNDgsMTQ3LDE0NiwxNDUKPj4+ICsgICAgICAg LnNob3J0IDE0NCwxNDMsMTQyLDE0MSwxNDAsMTM5LDEzOCwxMzcsMTM2LDEzNSwxMzQsMTMzLDEz MiwxMzEsMTMwLDEyOQo+Pj4gKyAgICAgICAuc2hvcnQgMTI4LDEyNywxMjYsMTI1LDEyNCwxMjMs MTIyLDEyMSwxMjAsMTE5LDExOCwxMTcsMTE2LDExNSwxMTQsMTEzCj4+PiArICAgICAgIC5zaG9y dCAxMTIsMTExLDExMCwxMDksMTA4LDEwNywxMDYsMTA1LDEwNCwxMDMsMTAyLDEwMSwxMDAsIDk5 LCA5OCwgOTcKPj4+ICsgICAgICAgLnNob3J0ICA5NiwgOTUsIDk0LCA5MywgOTIsIDkxLCA5MCwg ODksIDg4LCA4NywgODYsIDg1LCA4NCwgODMsIDgyLCA4MQo+Pj4gKyAgICAgICAuc2hvcnQgIDgw LCA3OSwgNzgsIDc3LCA3NiwgNzUsIDc0LCA3MywgNzIsIDcxLCA3MCwgNjksIDY4LCA2NywgNjYs IDY1Cj4+PiArICAgICAgIC5zaG9ydCAgNjQsIDYzLCA2MiwgNjEsIDYwLCA1OSwgNTgsIDU3LCA1 NiwgNTUsIDU0LCA1MywgNTIsIDUxLCA1MCwgNDkKPj4+ICsgICAgICAgLnNob3J0ICA0OCwgNDcs IDQ2LCA0NSwgNDQsIDQzLCA0MiwgNDEsIDQwLCAzOSwgMzgsIDM3LCAzNiwgMzUsIDM0LCAzMwo+ Pj4gKyAgICAgICAuc2hvcnQgIDMyLCAzMSwgMzAsIDI5LCAyOCwgMjcsIDI2LCAyNSwgMjQsIDIz LCAyMiwgMjEsIDIwLCAxOSwgMTgsIDE3Cj4+PiArICAgICAgIC5zaG9ydCAgMTYsIDE1LCAxNCwg MTMsIDEyLCAxMSwgMTAsICA5LCAgOCwgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEKPj4+ICsK Pj4+ICtTWU1fRlVOQ19TVEFSVChhZGxlcjMyX3N2ZSkKPj4+ICsgICAgICAgYW5kIHcxMCwgdzAs ICMweGZmZmYKPj4+ICsgICAgICAgbHNyIHcxMSwgdzAsICMxNgo+Pj4gKwo+Pgo+PiBQbGVhc2Ug cHV0IHRoZSBpbnN0cnVjdGlvbiBtbmVtb25pY3MgaW4gZGlmZmVyZW50IGNvbHVtbnMgdXNpbmcg dGFicwo+Pgo+Pj4gKyAgICAgICAvLyBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgc3ZlIHZlY3RvciB0 byB4Ni4KPj4+ICsgICAgICAgbW92IHg2LCAjMAo+Pj4gKyAgICAgICBtb3YgeDksICMyNTYKPj4+ ICsgICAgICAgYWRkdmwgeDYsIHg2LCAjMQo+Pj4gKyAgICAgICBhZHIgeDEyLCAuQWRsZXJfc2Vx dWVuY2UKPj4+ICsgICAgICAgcHRydWUgcDEuaAo+Pj4gKwo+Pj4gKyAgICAgICAvLyBHZXQgdGhl IHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSByZXF1aXJlZCBzZXF1ZW5jZS4KPj4+ICsgICAgICAg c3ViIHg5LCB4OSwgeDYKPj4+ICsgICAgICAgbGQxaCB6MjQuaCwgcDEveiwgW3gxMiwgeDksIGxz bCAjMV0gLy8gdGFwczEgdG8gejI0LmgKPj4+ICsgICAgICAgaW5jaCB4OQo+Pj4gKyAgICAgICBs ZDFoIHoyNS5oLCBwMS96LCBbeDEyLCB4OSwgbHNsICMxXSAvLyB0YXBzMiB0byB6MjUuaAo+IAo+ IFRoaXMgc2VlbXMgY3VtYmVyc29tZSwgYW5kIHdpbGwgZXhwbG9kZSBpZiBTVkUgaXMgZXZlciBl eHRlbmRlZCB0bwo+IHN1cHBvcnQgdmVjdG9ycyBsYXJnZXIgdGhhbiAyNTYgYnl0ZXMgKHRob3Vn aCB0aGF0J3MgcHJvYmFibHkgbm90IHZlcnkKPiBsaWtlbHkgYW55IHRpbWUgc29vbikuCj4gCj4g Q2FuIHlvdSBkbyBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nICh1bnRlc3RlZCk/Cj4gCj4g CXB0cnVlCXAwLmgKPiAJaW5kZXgJejAuaCwgIzAsICMxCj4gCW1vdgl6MS5kLCB6MC5kCj4gCWRl Y2gJejAuaAo+IAlkZWNoCXoxLmgsIGFsbCwgbXVsICMyCj4gCW5lZ2gJejAuaCwgcDAvbSwgejAu aAo+IAluZWdoCXoxLmgsIHAwL20sIHoxLmgKPiAKPiAKPj4+ICsgICAgICAgbW92IHg5LCAjMAo+ Pj4gKyAgICAgICAvLyBBIGxpdHRsZSBvZiBieXRlLCBqdW1wZXIgdG8gbm9ybWFsIHByb2MKPj4K Pj4gV2hhdCBkb2VzIHRoaXMgY29tbWVudCBtZWFuPwo+Pgo+Pj4gKyAgICAgICBtb3YgeDE0LCAj Mwo+Pj4gKyAgICAgICBtdWwgeDE1LCB4MTQsIHg2Cj4+PiArICAgICAgIGNtcCB4MiwgeDE1Cj4+ PiArICAgICAgIGIubGUgTG5vcm1hbF9wcm9jCj4+PiArCj4+PiArICAgICAgIHB0cnVlIHAwLmIK Pj4+ICsuYWxpZ24gNgo+Pgo+PiBJZGVudC4KPj4KPj4+ICtMQmlnX2xvb3A6Cj4+Cj4+IFVzZSAu TCBwcmVmaXgKPj4KPj4+ICsgICAgICAgLy8geCBpcyBTVkUgdmVjdG9yIGxlbmd0aCAoYnl0ZSku Cj4+PiArICAgICAgIC8vIEJuID0gQm4tMSArIEFuLTEgKiB4ICsgeCAqIEQxICsgKHgtMSkgKiBE MiArIC4uLiArIDEgKiBEeAo+Pj4gKyAgICAgICAvLyBBbiA9IEFuLTEgKyBEMSArIEQyICsgRDMg KyAuLi4gKyBEeAo+Pj4gKwo+Pj4gKyAgICAgICAubWFjcm8gQURMRVJfQkxPQ0tfWAo+Pgo+PiBQ bGVhc2UgdXNlIGxvd2VyIGNhc2UgZm9yIGFzbSBtYWNyb3MsIHRvIGRpc3Rpbmd1aXNoIHRoZW0g ZnJvbSBDUFAgbWFjcm9zCj4+IEFsc28sIGluZGVudCB0aGUgbmFtZSwgYW5kIG1vdmUgdGhlIG1h Y3JvIG91dCBvZiB0aGUgZnVuY3Rpb24gZm9yIGxlZ2liaWxpdHkuCj4+Cj4+PiArICAgICAgIGxk MWIgejAuYiwgcDAveiwgW3gxLCB4OV0KPj4+ICsgICAgICAgaW5jYiB4OQo+Pj4gKyAgICAgICB1 YWRkdiBkMjAsIHAwLCB6MC5iIC8vIEQxICsgRDIgKyAuLi4gKyBEeAo+Pj4gKyAgICAgICBtb3Yg eDEyLCB2MjAuMmRbMF0KPj4+ICsgICAgICAgbWFkZCB4MTEsIHgxMCwgeDYsIHgxMSAvLyBCbiA9 IEFuLTEgKiB4ICsgQm4tMQo+Pj4gKwo+Pj4gKyAgICAgICB1dW5wa2xvIHoyNi5oLCB6MC5iCj4+ PiArICAgICAgIHV1bnBraGkgejI3LmgsIHowLmIKPiAKPiBJbnN0ZWFkIG9mIGxvYWRpbmcgYW5k IHRoZW4gdW5wYWNraW5nIGVsZW1lbnRzLCBpdCdzIGJlc3QgdG8gZG8gaXQgaW4KPiBvbmUgZ28u ICBJZiB5b3UgaW5jcmVtZW50IHRoZSBiYXNlIGFkZHJlc3MgYXMgeW91IGdvLCB0aGlzIGJlY29t ZXMKPiBzb21ldGhpbmcgbGlrZSAodW50ZXN0ZWQpOgo+IAo+IAlsZDFiCXoyNi5oLCBwMC96LCBb eDFdCj4gCWxkMWIJejI3LmgsIHAwL3osIFt4MSwgIzEsIG11bCB2bF0KPiAJaW5jaAl4MSwgYWxs LCBtdWwgIzIKPiAKPiAoeW91IGNvdWxkIGtlZXAgYSBwcmUtaW5jcmVtZW50ZWQgdmVyc2lvbiBv ZiB4MSBvciB4OSBpbiBzb21lIG90aGVyCj4gcmVnaXN0ZXIgdG8gZWxpbWluYXRlIG9uZSBvZiB0 aGVzZSBpbmNoIGluc3RydWN0aW9ucykuCj4gCj4+PiArICAgICAgIG11bCB6MjYuaCwgcDEvbSwg ejI2LmgsIHoyNC5oIC8vIHggKiBEMSArICh4LTEpICogRDIgKyAuLi4gKyAoeC8yICsgMSkgKiBE KHgvMikKPj4+ICsgICAgICAgbXVsIHoyNy5oLCBwMS9tLCB6MjcuaCwgejI1LmggLy8gKHgvMikg KiBEKHgvMiArIDEpICsgKHgvMiAtIDEpICogRCh4LzIgKyAyKSArIC4uLiArIDEgKiBEeAo+Pj4g Kwo+Pj4gKyAgICAgICB1YWRkdiBkMjEsIHAxLCB6MjYuaAo+Pj4gKyAgICAgICB1YWRkdiBkMjIs IHAxLCB6MjcuaAo+Pj4gKyAgICAgICBtb3YgeDEzLCB2MjEuMmRbMF0KPj4+ICsgICAgICAgbW92 IHgxNCwgdjIyLjJkWzBdCj4+PiArCj4+PiArICAgICAgIGFkZCB4MTEsIHgxMywgeDExCj4+PiAr ICAgICAgIGFkZCB4MTEsIHgxNCwgeDExICAgICAgICAgLy8gQm4gKz0geCAqIEQxICsgKHgtMSkg KiBEMiArIC4uLiArIDEgKiBEeAo+Pj4gKyAgICAgICBhZGQgeDEwLCB4MTIsIHgxMCAgICAgICAg IC8vIEFuICs9IEQxICsgRDIgKyAuLi4gKyBEeAo+IAo+IElmIHlvdSB3YW50IGJlc3QgcGVyZm9y bWFuY2UsIHlvdSBzaG91bGQgZG8gYWNjdW11bGF0aW9ucyBvdXRzaWRlIHRoZQo+IGNvcmUgbG9v cC4gIFZlcnRpY2FsIHJlZHVjdGlvbiBpbnN0cnVjdGlvbnMgc3VjaCBhcyBVQUREViBuZWVkIHRv Cj4gY29sbGVjdCB0aGUgcmVzdWx0cyBvZiBtdWx0aXBsZSBlbGVtZW50LWJ5LWVsZW1lbnQgY2Fs Y3VsYXRpb25zIHdoaWNoCj4gY2FuIG90aGVyd2lzZSBwcm9jZWVkIGluZGVwZW5kZW5seSwgc28g ZG9pbmcgdGhpcyB0b28gb2Z0ZW4gd2lsbCBoZWF2aWx5Cj4gY29uc3RyYWluIHRoZSB3YXlzIGlu IHdoaWNoIHRoZSBoYXJkd2FyZSBjYW4gc2NoZWR1bGUgdGhlIGNhbGN1bGF0aW9ucy4KPiAKPiBJ bnN0ZWFkLCB5b3UgY2FuIGFjY3VtdWxhdGUgY29sdW1uLXdpc2UgcGFydGlhbCBzdW1zIHdpdGgg dmVjdG9yIE1BRAo+IGluc3RydWN0aW9ucyAobWF5YmUgd2l0aCBNT1hQUkZYLCBzaW5jZSBNQUQg aXMgb3ZlcndyaXRlcyBhIHNvdXJjZQo+IG9wZXJhbmQpLgo+IAo+IFRvIGF2b2lkIGZyZXF1ZW50 IG92ZXJmbG93cywgaXQgbWF5IG1ha2Ugc2Vuc2UgdG8gb3BlcmF0ZSBvbiBxdWl0ZSB3aWRlCj4g ZWxlbWVudHMgd2l0aGluIHRoZSBsb29wLCBidXQgeW91IHdpbGwgc3RpbGwgbmVlZCB0byBsaW1p dCB0aGUgbnVtYmVyIG9mCj4gbG9vcCBpbnRlcmF0aW9ucyB0byBlbnN1cmUgdGhhdCBhbiBvdmVy ZmxvdyBjYW5ub3QgaGFwcGVuLgoKSSB3aWxsIGNhcmVmdWxseSByZWFkIGFuZCB0ZXN0IHlvdXIg Y29kZSBzdWdnZXN0aW9ucyBuZXh0LCB0aGFuayB5b3UuCgo+IAo+Pj4gKyAgICAgICAuZW5kbQo+ Pj4gKyAgICAgICBBRExFUl9CTE9DS19YCj4+PiArICAgICAgIEFETEVSX0JMT0NLX1gKPj4+ICsg ICAgICAgQURMRVJfQkxPQ0tfWAo+Pj4gKyAgICAgICAvLyBjYWxjID0gcmVnMCAlIDY1NTIxCj4+ PiArICAgICAgIC5tYWNybyBtb2Q2NTUyMSwgcmVnMCwgcmVnMSwgcmVnMgo+Pj4gKyAgICAgICBt b3Ygd1xyZWcxLCAjMHg4MDcxCj4+PiArICAgICAgIG1vdiB3XHJlZzIsICMweGZmZjEKPj4+ICsg ICAgICAgbW92ayB3XHJlZzEsICMweDgwMDcsIGxzbCAjMTYKPj4+ICsgICAgICAgdW11bGwgeFxy ZWcxLCB3XHJlZzAsIHdccmVnMQo+Pj4gKyAgICAgICBsc3IgeFxyZWcxLCB4XHJlZzEsICM0Nwo+ Pj4gKyAgICAgICBtc3ViIHdccmVnMCwgd1xyZWcxLCB3XHJlZzIsIHdccmVnMAo+Pj4gKyAgICAg ICAuZW5kbQo+Pj4gKwo+Pgo+PiBTYW1lIGFzIGFib3ZlCj4+Cj4+PiArICAgICAgIG1vZDY1NTIx IDEwLCAxNCwgMTIKPj4+ICsgICAgICAgbW9kNjU1MjEgMTEsIDE0LCAxMgo+Pj4gKwo+Pj4gKyAg ICAgICBzdWIgeDIsIHgyLCB4MTUKPj4+ICsgICAgICAgY21wIHgyLCB4MTUKPj4+ICsgICAgICAg Yi5nZSBMQmlnX2xvb3AKPj4+ICsKPj4+ICsuYWxpZ24gNgo+Pgo+PiBJbmRlbnQKPj4KPj4+ICtM bm9ybWFsX3Byb2M6Cj4+Cj4+IC5MCj4+Cj4+Cj4+PiArICAgICAgIGNtcCB4MiwgIzAKPj4+ICsg ICAgICAgYi5lcSBMcmV0Cj4+PiArCj4+PiArICAgICAgIGxkcmIgdzEyLCBbeDEsIHg5XQo+Pj4g KyAgICAgICBhZGQgeDksIHg5LCAjMQo+Pj4gKyAgICAgICBhZGQgeDEwLCB4MTIsIHgxMAo+Pj4g KyAgICAgICBhZGQgeDExLCB4MTAsIHgxMQo+Pj4gKyAgICAgICBzdWIgeDIsIHgyLCAjMQo+IAo+ IEkgaGF2ZW4ndCB0cmllZCB0byB1bmRlcnN0YW5kIHRoaXMgYWxnb3JpdGhtIGluIGRldGFpbCwg YnV0IHRoZXJlIHNob3VsZAo+IHByb2JhYmx5IGJlIG5vIG5lZWQgZm9yIHRoaXMgc3BlY2lhbCBj YXNlIHRvIGhhbmRsZSB0aGUgdHJhaWxpbmcgYnl0ZXMuCj4gCj4gWW91IHNob3VsZCBzZWFyY2gg Zm9yIGV4YW1wbGVzIG9mIHNwZWN1bGF0aXZlIHZlY3Rvcml6YXRpb24gdXNpbmcKPiBXSElMRUxP IGV0Yy4sIHRvIGdldCBhIGJldHRlciBmZWVsIGZvciBob3cgdG8gZG8gdGhpcy4KClllcywgSSBo YXZlIGNvbnNpZGVyZWQgdGhpcyBwcm9ibGVtLCBidXQgSSBoYXZlIG5vdCBmb3VuZCBhIGdvb2Qg d2F5IHRvIGFjaGlldmUgaXQsCmJlY2F1c2UgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIGxvb3AgaXMg cmVhY2hlZCwgdGhlIGRlY3JlYXNpbmcgc2VxdWVuY2UgdXNlZCBmb3IKY2FsY3VsYXRpb24gaXMg ZGV0ZXJtaW5lZC4KCkZvciBleGFtcGxlLCBidWYgaXMgZGl2aWRlZCBpbnRvIDMyLWJ5dGUgYmxv Y2tzLiBUaGlzIHNlcXVlbmNlIHNob3VsZCBiZSAzMiwzMSwuLi4sMiwxLAppZiB0aGVyZSBhcmUg b25seSAxMCBieXRlcyBsZWZ0IGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AsIHRoZW4gdGhpcyBzZXF1 ZW5jZQpzaG91bGQgYmUgMTAsOSw4LC4uLiwyLDEuCgpJZiBJIGp1ZGdlIHdoZXRoZXIgdGhlIGVu ZCBvZiB0aGUgbG9vcCBoYXMgYmVlbiByZWFjaGVkIGluIHRoZSBib2R5IG9mIHRoZSBsb29wLAph bmQgcmVzZXQgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSBzZXF1ZW5jZSBhY2NvcmRpbmcgdG8g dGhlIGxlbmd0aCBvZiB0aGUgdGFpbCwKaXQgZG9lcyBub3Qgc2VlbSB2ZXJ5IGdvb2QuCgo+IAo+ IAo+IFsuLi5dCj4gCj4gQ2hlZXJzCj4gLS0tRGF2ZQo+IC4KPiAKCi0tIApCZXN0IHJlZ2FyZHMs CkxpIFFpYW5nCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmlu ZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1hcm0ta2VybmVsCg==