Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp6088262iob; Tue, 10 May 2022 10:03:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwWoqss/vKKqAJh3azG1hkm3aTQ4YJinzVTev/2kgICJ2NlBFtUoxJwF2PlvmtixWHWsZ7G X-Received: by 2002:a17:90b:2250:b0:1dc:588d:6d94 with SMTP id hk16-20020a17090b225000b001dc588d6d94mr836144pjb.219.1652202201762; Tue, 10 May 2022 10:03:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1652202201; cv=none; d=google.com; s=arc-20160816; b=eo1rb5brWVtBuvBwImIDLAad68H7e3AMjIaai6fq9d110Ua1iNMEPEZg2x49LEk/e1 p1cl4nZIHSRhH0a955ahocGOdVjqks5SGkZ/GfssaVFb4QdA+sytL1qtAZDsIGIhCWrU RCrplIKBm/qF7lRryMieyHLxbdUqAjw3cormDHaBL7tqffxpSsmAIBvpWGWJtWsx7dXv xv1Gc3spOJ1MX0u9xYvZl+CdSh6RswknR+wFjCBdImssHjZg/fDsOr6lA2CnbHgfmnyF kH86sXarmDSirAm+to/FooMOpcGnTMteh20DMDwBry5Ow9zb+3aIqFPHDih82oq4/hwd EnGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :dkim-signature:dkim-signature; bh=e4fmtazOuTAFdPboboXO+LMGmSfL/vqUBvvL93SRxfw=; b=vplWZ99oNtjTcFDIOfaLId4oCm9+BqWZAf2+TYrD1hupjZHjwq+PnFDDdaCpLVsN7r soSWU9lutCvjpfXsTwl2CwfXf+n8qDOpI8nUIWCfLTgr6u8ttkTXZA4yuLgSRoZ+fHTE wTQ6pT5qrRLv4OAhE3sfKilfOfS8KubfnFxKE3Xt1zUsTEE5t/yoM5KB89PnbHmMRXvU 3eDS9JcKT/IfC1dBNL2RzEYC4ds7zBZALdblBpcxuaqrT/nU+1hjIDIr7JZroEMLnLQw aoPwWbzhC18kxsv/y9lX5nnpyuROgYEbdYrhC23f71WahIZgEInT86hULOS0wUxHFSw/ NyTg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=LjZxb53q; dkim=neutral (no key) header.i=@suse.de header.s=susede2_ed25519 header.b=VzWx4+mG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=suse.de Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id kb10-20020a17090ae7ca00b001dc7161ffcesi3898729pjb.96.2022.05.10.10.03.02; Tue, 10 May 2022 10:03:21 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=LjZxb53q; dkim=neutral (no key) header.i=@suse.de header.s=susede2_ed25519 header.b=VzWx4+mG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=suse.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240391AbiEJLBt (ORCPT + 99 others); Tue, 10 May 2022 07:01:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57684 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240817AbiEJLBK (ORCPT ); Tue, 10 May 2022 07:01:10 -0400 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 92A561AB7B2 for ; Tue, 10 May 2022 03:56:19 -0700 (PDT) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 2562C1F8B4; Tue, 10 May 2022 10:56:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1652180178; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=e4fmtazOuTAFdPboboXO+LMGmSfL/vqUBvvL93SRxfw=; b=LjZxb53qftRvZHgrofmREiXjvllysPka5/dqj3tFOND1GNyEk7hBN+uDwlRGxo5pD3W/bD btI+42kUXj1Zmm29ODjWnhWPKeykp7MbI4Zy1qneDiW9ENTg0x6prYbM8/IdQs7NUj2OM4 Q5bfSCcIEfv3PLDgrAfuF7cUiXVmNQs= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1652180178; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=e4fmtazOuTAFdPboboXO+LMGmSfL/vqUBvvL93SRxfw=; b=VzWx4+mGvTbp8ql+o4xHSYJq2JLfEfsm8KmGqbsIUElh6mA2U7xmUhzWneYP771ROsaBAO Wo5nfE0oLkuzl+Bw== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id CA5C913AC1; Tue, 10 May 2022 10:56:17 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id X9HoL9FEemJvWwAAMHmgww (envelope-from ); Tue, 10 May 2022 10:56:17 +0000 Message-ID: <43be719f-9149-abf0-fc5a-95b8d1c6761d@suse.de> Date: Tue, 10 May 2022 12:56:17 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.0 Subject: Re: [PATCH v4] drm/ast: Create the driver for ASPEED proprietory Display-Port Content-Language: en-US To: Kuo-Hsiang Chou , "dri-devel@lists.freedesktop.org" , "linux-kernel@vger.kernel.org" Cc: "airlied@redhat.com" , "airlied@linux.ie" , "daniel@ffwll.ch" , Arc Sung , Tommy Huang , Hungju Huang , Luke Chen References: <872e0d4b-411a-594f-a194-428986e18c3d@suse.de> <20220428075603.20904-1-kuohsiang_chou@aspeedtech.com> From: Thomas Zimmermann In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------aEJMLD5eyd0lZMXSKHCKKW7F" X-Spam-Status: No, score=-5.3 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NICE_REPLY_A,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------aEJMLD5eyd0lZMXSKHCKKW7F Content-Type: multipart/mixed; boundary="------------vT06bpKU206MwnV2Bm90cz3F"; protected-headers="v1" From: Thomas Zimmermann To: Kuo-Hsiang Chou , "dri-devel@lists.freedesktop.org" , "linux-kernel@vger.kernel.org" Cc: "airlied@redhat.com" , "airlied@linux.ie" , "daniel@ffwll.ch" , Arc Sung , Tommy Huang , Hungju Huang , Luke Chen Message-ID: <43be719f-9149-abf0-fc5a-95b8d1c6761d@suse.de> Subject: Re: [PATCH v4] drm/ast: Create the driver for ASPEED proprietory Display-Port References: <872e0d4b-411a-594f-a194-428986e18c3d@suse.de> <20220428075603.20904-1-kuohsiang_chou@aspeedtech.com> In-Reply-To: --------------vT06bpKU206MwnV2Bm90cz3F Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 SGkNCg0KQW0gMDQuMDUuMjIgdW0gMTA6NDkgc2NocmllYiBLdW8tSHNpYW5nIENob3U6DQo+ IEhpIFRob21hcywNCj4gDQo+IFRoYW5rcyBmb3IgeW91ciBlZmZvcnRzIHRvIHJldmlldyB0 aGlzIHBhdGNoLg0KPiANCj4gTm93LCBJIG9ic2VydmUgYSBjaGFuZ2UgdGhhdCBhZnRlciBE UCB1bnBsdWdnZWQgYW5kIHRoZW4gdGhlIHN5c3RlbSBpcyANCj4gdW5hYmxlIHRvIGdldCBF RElEIGZyb20gRC1zdWIgY29ubmVjdGluZy4NCj4gDQo+IFRoZSByZWFzb24gc2VlbXMgdGhh dCBUWHMgYXJlIG1lcmdlZCBpbnRvIHVuaW9uIHN0cnVjdHVyZSBpbiANCj4gL2RyaXZlcnMv Z3B1L2RybS9hc3QvYXN0X2Rydi5oIA0KPiAgwqAoYTU5YjAyNjQxOWYzMzA0MGQ3ZDI4Yjhl M2IxY2VhNjgxYjljZTdhNyANCj4gPGh0dHBzOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZHJt L2RybS1taXNjL2NvbW1pdC8/aWQ9YTU5YjAyNjQxOWYzMzA0MGQ3ZDI4YjhlM2IxY2VhNjgx YjljZTdhNz4pDQoNCkkgaGF2ZSBwb3N0ZWQgYSBwYXRjaCB0aGF0IGVuYWJsZXMgbXVsdGlw bGUgcGFyYWxsZWwgb3V0cHV0cy4gU2VlDQoNCiANCjxodHRwczovL2xvcmUua2VybmVsLm9y Zy9kcmktZGV2ZWwvMjAyMjA1MTAxMDUwMTAuMjA3MTItMS10emltbWVybWFubkBzdXNlLmRl L1QvI3U+DQoNCklmIHlvdSBoYXZlIHRoZSB0aW1lLCBJJ2QgYXBwcmVjaWF0ZSBpZiB5b3Ug Y291bGQgdGVzdCBpdC4NCg0KQmVzdCByZWdhcmRzDQpUaG9tYXMNCg0KPiANCj4gQW5vdGhl ciwgZG8geW91IG5lZWQgdGhlIGFzdDI2MDAgRVZCIHRvIGVhc2UgdmVyaWZpY2F0aW9uIG9u ICJkcm0vYXN0IiA/DQo+IA0KPiBSZWdhcmRzLA0KPiANCj4gIMKgwqDCoMKgwqDCoMKgIEt1 by1Ic2lhbmcgQ2hvdQ0KPiANCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJv bTogVGhvbWFzIFppbW1lcm1hbm4gW21haWx0bzp0emltbWVybWFubkBzdXNlLmRlXQ0KPiBT ZW50OiBXZWRuZXNkYXksIE1heSAwNCwgMjAyMiAzOjI4IFBNDQo+IFRvOiBLdW8tSHNpYW5n IENob3UgPGt1b2hzaWFuZ19jaG91QGFzcGVlZHRlY2guY29tPjsgDQo+IGRyaS1kZXZlbEBs aXN0cy5mcmVlZGVza3RvcC5vcmc7IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcNCj4g U3ViamVjdDogUmU6IFtQQVRDSCB2NF0gZHJtL2FzdDogQ3JlYXRlIHRoZSBkcml2ZXIgZm9y IEFTUEVFRCANCj4gcHJvcHJpZXRvcnkgRGlzcGxheS1Qb3J0DQo+IA0KPiBIaQ0KPiANCj4g QW0gMjguMDQuMjIgdW0gMDk6NTYgc2NocmllYiBLdW9Ic2lhbmcgQ2hvdToNCj4gDQo+PiBW MToNCj4gDQo+PiAxLiBUaGUgTUNVIEZXIGNvbnRyb2xpbmcgQVNQRUVEIERQIGlzIGxvYWRl ZCBieSBCTUMgYm9vdCBsb2FkZXIuDQo+IA0KPj4gMi4gRHJpdmVyIHN0YXJ0cyBhZnRlciBD UlszOjFdID09IDExMWIgdGhhdCBpbmRpY2F0ZXMgVHggaXMgQVNURFAsDQo+IA0KPj7CoMKg wqDCoCBhbmQgQ1JEMVs1XSBoYXMgYmVlbiBhc3NlcnRlZCBieSBCTVZDIGJvb3QgbG9hZGVy Lg0KPiANCj4+IDMuIEVESUQgaXMgcHJpb3JpdGl6ZWQgYnkgRFAgbW9uaXRvci4NCj4gDQo+ PiA0LiBEUCdzIEVESUQgaGFzIGhpZ2ggcHJpb3JpdHkgdG8gZGVjaWRlIHJlc29sdXRpb24g c3VwcG9ydGluZy4NCj4gDQo+PiANCj4gDQo+PiBWMjoNCj4gDQo+PiBNb2R1bGVzIGRlc2Ny aXB0aW9uOg0KPiANCj4+IDEuIEFTVERQIChBU1BFRUQgRGlzcGxheVBvcnQpIGlzIGNvbnRy b2xsZWQgYnkgZGVkaWNhdGVkDQo+IA0KPj7CoMKgwqDCoCBBU1QtTUNVIChBU1BFRUQgcHJv cHJpYXRhcnkgTUNVKS4NCj4gDQo+PiAyLiBNQ1UgaXMgbG9vcGluZyBpbiBjaGFyZ2VkIG9m IEhQRCwgUmVhZCBFRElELCBMaW5rIFRyYWluaW5nIHdpdGgNCj4gDQo+PsKgwqDCoMKgIERQ IHNpbmsuDQo+IA0KPj4gMy4gQVNURFAgYW5kIEFTVC1NVUMgcmVzaWRlIGluIEJNQyAoQmFz ZWJvYXJkIE1hbmFnZW1lbnQgY29udHJvbGxlcikNCj4gDQo+PsKgwqDCoMKgIGFkZHJlc3Np bmctc3BhY2UuDQo+IA0KPj4gNC4gQVNQRUVEIERSTSBkcml2ZXIgcmVxdWVzdHMgTUNVIHRv IGdldCBIUEQgYW5kIEVESUQgYnkgQ1Itc2NyYXRjaGVkDQo+IA0KPj7CoMKgwqDCoCByZWdp c3Rlci4NCj4gDQo+PiANCj4gDQo+PiBCb290aW5nIHNlcXVlbmNlOg0KPiANCj4+IDEuIENo ZWNrIGlmIFRYIGlzIEFTVERQwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8vIGFzdF9kcF9s YXVuY2goKQ0KPiANCj4+IDIuIENoZWNrIGlmIERQLU1DVSBGVyBoYXMgbG9hZGVkwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAvLyBhc3RfZHBfbGF1bmNoKCkNCj4gDQo+PiAzLiBSZWFkIEVESUTCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgLy8gYXN0X2RwX3JlYWRfZWRpZCgpDQo+IA0KPj4gNC4g UmVzb2x1dGlvbiBzd2l0Y2jCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLy8gYXN0X2RwX1NldE91dHB1 dCgpDQo+IA0KPj4gDQo+IA0KPj4gVjM6DQo+IA0KPj4gMS4gUmVtb3ZlIHVubmVlZGVkIHNl bWljb2xvbi4NCj4gDQo+PiAyLiBBcHBseSB0byBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9w Lm9yZy9kcm0vZHJtLCBpbnN0ZWFkIG9mDQo+IA0KPj7CoMKgwqDCoCBnaXQ6Ly9hbm9uZ2l0 LmZyZWVkZXNrdG9wLm9yZy9kcm0vZHJtLW1pc2MNCj4gDQo+PiAzLiBSZXNvbHZlIGF1dG8g YnVpbGQgdGVzdCBXQVJOSU5HcyBvbiBWMSBwYXRjaC4NCj4gDQo+PiANCj4gDQo+PiBWNDoN Cj4gDQo+PiAxLiBTeW5jIGNvZGUtYmFzZSB3aXRoIGtlcm5lbCA1LjE3X3JjNiAyLiBSZW1v dmUgdGhlIGRlZmluZSBvZg0KPiANCj4+IERQQ29udHJvbFBvd2VyLCBiZWNhdXNlIERQIGNo aXBzIG5lZWQgdG8gYmUNCj4gDQo+PsKgwqDCoMKgIHBvd2VyZWQgb24gdG8gYmUgdXNlZC4N Cj4gDQo+PiAzLiBSZW1vdmUgdGhlIHN3aXRjaGVzIG9mIFBIWSBhbmQgRGlzcGxheSBmcm9t IEVESUQgcHJvY2VkdXJlLg0KPiANCj4+IDQuIFJldmlzZSBpbmNyZWFpbmcgZGVsYXkgdG8g Zml4ZWQgZGVsYXksIGJlY2F1c2UgdGhpcyB2ZXJzaW9uIGtlcm5lbA0KPiANCj4+wqDCoMKg wqAgZG9lc24ndCBkZXRlY3QgbWluaXRvciBjb25zaXN0ZW5udGx5Lg0KPiANCj4+IDUuIENy ZWF0ZSBjbGVhbi11cCBjb2RlIHVzZWQgZm9yIHJlc2V0IG9mIHBvd2VyIHN0YXRlIG9uIGVy cm9ycyB3aXRoDQo+IA0KPj7CoMKgwqDCoCAtRUlPIG1hbm5lci4NCj4gDQo+PiA2LiBSZXZp c2UgdGhlIERQIGRldGVjdGlvbiBieSBUWCB0eXBlIGFuZCBpdHMgRFAtRlcgc3RhdHVzIGR1 cmluZw0KPiANCj4+wqDCoMKgwqAgYm9vdGluZyBhbmQgcmVzdW1lLg0KPiANCj4+IDcuIENv cnJlY3QgdGhlIENhbWVsQ2FzZSBTdHlsZS4NCj4gDQo+PiA4LiBVc2UgcmVnaXN0ZXIgcmVh ZGluZyB3aGlsZSBuZWVkaW5nLCBhbmQgcmVtb3ZlIHRvIGhvbGQgZnVsbA0KPiANCj4+wqDC oMKgwqAgcmVnaXN0ZXIuDQo+IA0KPj4gOS4gSW5zdGVhZCBvZiAndTgnLCByZXZpc2UgdG8g J2Jvb2wnIG9uIHN3d2l0Y2ggb2YgUEhZIGFuZCB2aWRlby4NCj4gDQo+PiAxMC5Db3JyZWN0 IHR5cG8NCj4gDQo+PiAxMS5SZW1vdmUgdGhlIGR1cGxpY2F0ZWQgY29weSBvZiBUWCBkZWZp bml0aW9uLg0KPiANCj4+IDEyLlVzZSBFRElEX0xFTkdUSCBhcyB0aGUgY29uc3RhbnQgb2Yg MTI4Lg0KPiANCj4+IA0KPiANCj4+IFNpZ25lZC1vZmYtYnk6IEt1b0hzaWFuZyBDaG91IDxr dW9oc2lhbmdfY2hvdUBhc3BlZWR0ZWNoLmNvbSA8bWFpbHRvOmt1b2hzaWFuZ19jaG91QGFz cGVlZHRlY2guY29tPj4NCj4gDQo+IFJldmlld2VkLWJ5OiBUaG9tYXMgWmltbWVybWFubiA8 dHppbW1lcm1hbm5Ac3VzZS5kZSANCj4gPG1haWx0bzp0emltbWVybWFubkBzdXNlLmRlPj4N Cj4gDQo+IEkndmUgbWVhbndoaWxlIGFkZGVkIHlvdXIgcGF0Y2ggdG8gZHJtLW1pc2MtbmV4 dC4gSXQgc2hvdWxkIHNob3cgdXAgaW4gDQo+IG9uZSBvZiB0aGUgbmV4dCBrZXJuZWwgcmVs ZWFzZXMuwqAgVGhhbmtzIGEgbG90Lg0KPiANCj4gQmVzdCByZWdhcmRzDQo+IA0KPiBUaG9t YXMNCj4gDQo+PiAtLS0NCj4gDQo+PsKgwqAgZHJpdmVycy9ncHUvZHJtL2FzdC9NYWtlZmls ZcKgwqAgfMKgwqAgMiArLQ0KPiANCj4+wqDCoCBkcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9k cC5jwqDCoCB8IDI4MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gDQo+ PsKgwqAgZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfZHJ2LmjCoCB8IDExNSArKysrKysrKysr KysrKw0KPiANCj4+wqDCoCBkcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9tYWluLmMgfMKgwqAg NSArLQ0KPiANCj4+wqDCoCBkcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9tb2RlLmMgfCAxMjQg KysrKysrKysrKysrKystDQo+IA0KPj7CoMKgIGRyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X3Bv c3QuYyB8wqDCoCA0ICstDQo+IA0KPj7CoMKgIDYgZmlsZXMgY2hhbmdlZCwgNTI0IGluc2Vy dGlvbnMoKyksIDggZGVsZXRpb25zKC0pDQo+IA0KPj7CoMKgIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9kcC5jDQo+IA0KPj4gDQo+IA0KPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hc3QvTWFrZWZpbGUNCj4gDQo+PiBiL2RyaXZlcnMv Z3B1L2RybS9hc3QvTWFrZWZpbGUgaW5kZXggMjFmNzExNjBiLi41YTUzY2U1MWYgMTAwNjQ0 DQo+IA0KPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FzdC9NYWtlZmlsZQ0KPiANCj4+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9hc3QvTWFrZWZpbGUNCj4gDQo+PiBAQCAtMyw2ICszLDYg QEANCj4gDQo+PsKgwqAgIyBNYWtlZmlsZSBmb3IgdGhlIGRybSBkZXZpY2UgZHJpdmVyLsKg IFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZQ0KPiANCj4+wqDCoCAjIERp cmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgKERSSSkgaW4gWEZyZWU4NiA0LjEuMCBh bmQgaGlnaGVyLg0KPiANCj4+IA0KPiANCj4+IC1hc3QteSA6PSBhc3RfZHJ2Lm8gYXN0X2ky Yy5vIGFzdF9tYWluLm8gYXN0X21tLm8gYXN0X21vZGUubw0KPiANCj4+IGFzdF9wb3N0Lm8g YXN0X2RwNTAxLm8NCj4gDQo+PiArYXN0LXkgOj0gYXN0X2Rydi5vIGFzdF9pMmMubyBhc3Rf bWFpbi5vIGFzdF9tbS5vIGFzdF9tb2RlLm8NCj4gDQo+PiArYXN0X3Bvc3QubyBhc3RfZHA1 MDEubyBhc3RfZHAubw0KPiANCj4+IA0KPiANCj4+wqDCoCBvYmotJChDT05GSUdfRFJNX0FT VCkgOj0gYXN0Lm8NCj4gDQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FzdC9h c3RfZHAuYw0KPiANCj4+IGIvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfZHAuYyBuZXcgZmls ZSBtb2RlIDEwMDY0NCBpbmRleA0KPiANCj4+IDAwMDAwMDAwMC4uNDU1MWJjOGEzDQo+IA0K Pj4gLS0tIC9kZXYvbnVsbA0KPiANCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0 X2RwLmMNCj4gDQo+PiBAQCAtMCwwICsxLDI4MiBAQA0KPiANCj4+ICsvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiANCj4+ICsvLyBDb3B5cmlnaHQgKGMpIDIwMjEs IEFTUEVFRCBUZWNobm9sb2d5IEluYy4NCj4gDQo+PiArLy8gQXV0aG9yczogS3VvSHNpYW5n IENob3UgPGt1b2hzaWFuZ19jaG91QGFzcGVlZHRlY2guY29tIDxtYWlsdG86a3VvaHNpYW5n X2Nob3VAYXNwZWVkdGVjaC5jb20+Pg0KPiANCj4+ICsNCj4gDQo+PiArI2luY2x1ZGUgPGxp bnV4L2Zpcm13YXJlLmg+DQo+IA0KPj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPiAN Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPg0KPiANCj4+ICsjaW5jbHVkZSAiYXN0 X2Rydi5oIg0KPiANCj4+ICsNCj4gDQo+PiAraW50IGFzdF9hc3RkcF9yZWFkX2VkaWQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdTggKmVkaWRkYXRhKSB7DQo+IA0KPj4gK8KgwqAgc3Ry dWN0IGFzdF9wcml2YXRlICphc3QgPSB0b19hc3RfcHJpdmF0ZShkZXYpOw0KPiANCj4+ICvC oMKgIHU4IGkgPSAwLCBqID0gMDsNCj4gDQo+PiArDQo+IA0KPj4gK8KgwqAgLyoNCj4gDQo+ PiArwqDCoCAqIENSRDFbYjVdOiBEUCBNQ1UgRlcgaXMgZXhlY3V0aW5nDQo+IA0KPj4gK8Kg wqAgKiBDUkRDW2IwXTogRFAgbGluayBzdWNjZXNzDQo+IA0KPj4gK8KgwqAgKiBDUkRGW2Iw XTogRFAgSFBEDQo+IA0KPj4gK8KgwqAgKiBDUkU1W2IwXTogSG9zdCByZWFkaW5nIEVESUQg cHJvY2VzcyBpcyBkb25lDQo+IA0KPj4gK8KgwqAgKi8NCj4gDQo+PiArwqDCoCBpZiAoIShh c3RfZ2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhEMSwgQVNU RFBfTUNVX0ZXX0VYRUNVVElORykgJiYNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAg YXN0X2dldF9pbmRleF9yZWdfbWFzayhhc3QsIEFTVF9JT19DUlRDX1BPUlQsIDB4REMsIEFT VERQX0xJTktfU1VDQ0VTUykgJiYNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0 X2dldF9pbmRleF9yZWdfbWFzayhhc3QsIEFTVF9JT19DUlRDX1BPUlQsIDB4REYsIEFTVERQ X0hQRCkgJiYNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0X2dldF9pbmRleF9y ZWdfbWFzayhhc3QsIEFTVF9JT19DUlRDX1BPUlQsIDB4RTUsDQo+IA0KPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IEFTVERQX0hPU1RfRURJRF9SRUFEX0RPTkVfTUFTSykpKSB7DQo+IA0KPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgIGdvdG8gZXJyX2FzdGRwX2VkaWRfbm90X3JlYWR5Ow0KPiANCj4+ICvC oMKgIH0NCj4gDQo+PiArDQo+IA0KPj4gK8KgwqAgYXN0X3NldF9pbmRleF9yZWdfbWFzayhh c3QsIEFTVF9JT19DUlRDX1BPUlQsIDB4RTUsICh1OCkgfkFTVERQX0hPU1RfRURJRF9SRUFE X0RPTkVfTUFTSywNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAweDAwKTsNCj4gDQo+PiArDQo+IA0KPj4gK8KgwqAgZm9yIChpID0g MDsgaSA8IDMyOyBpKyspIHsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyoNCj4g DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBDUkU0Wzc6MF06IFJlYWQtUG9pbnRlciBm b3IgRURJRCAoVW5pdDogNGJ5dGVzKTsgdmFsaWQgcmFuZ2U6IDB+NjQNCj4gDQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqAgKi8NCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0 X3NldF9pbmRleF9yZWdfbWFzayhhc3QsIEFTVF9JT19DUlRDX1BPUlQsIDB4RTQsDQo+IA0K Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICh1OCkgfkFTVERQX0VESURfUkVBRF9QT0lOVEVSX01BU0ss ICh1OCkgaSk7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGogPSAwOw0KPiANCj4+ ICsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyoNCj4gDQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqAgKiBDUkQ3W2IwXTogdmFsaWQgZmxhZyBmb3IgRURJRA0KPiANCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoCAqIENSRDZbYjBdOiBtaXJyb3IgcmVhZCBwb2ludGVyIGZv ciBFRElEDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgICovDQo+IA0KPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgIHdoaWxlICgoYXN0X2dldF9pbmRleF9yZWdfbWFzayhhc3QsIEFT VF9JT19DUlRDX1BPUlQsIDB4RDcsDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQVNURFBfRURJRF9WQUxJRF9GTEFHX01B U0spICE9IDB4MDEpIHx8DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAoYXN0X2dldF9pbmRleF9yZWdfbWFzayhhc3QsIEFTVF9JT19DUlRDX1BPUlQs IDB4RDYsDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBU1REUF9F RElEX1JFQURfUE9JTlRFUl9NQVNLKSAhPSBpKSkgew0KPiANCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyoNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICogRGVsYXkgYXJlIGdldHRpbmcgbG9uZ2VyIHdpdGggZWFj aCByZXRyeS4NCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICogMS4gVGhlIERlbGF5cyBhcmUgb2Z0ZW4gMiBsb29wcyB3aGVuIHVzZXJzIHJlcXVlc3Qg IkRpc3BsYXkgU2V0dGluZ3MiDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAqwqDCoMKgIMKgIG9mIHJpZ2h0LWNsaWNrIG9mIG1vdXNlLg0KPiANCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiAyLiBUaGUgRGVsYXlz IGFyZSBvZnRlbiBsb25nZXIgYSBsb3Qgd2hlbiBzeXN0ZW0gcmVzdW1lIGZyb20gUzMvUzQu DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLw0KPiAN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWRlbGF5KGorMSk7 DQo+IA0KPj4gKw0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaWYgKCEoYXN0X2dldF9pbmRleF9yZWdfbWFzayhhc3QsIEFTVF9JT19DUlRDX1BPUlQs IDB4RDEsDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgQVNURFBfTUNVX0ZXX0VYRUNVVElORykgJiYNCj4gDQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3RfZ2V0X2lu ZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhEQywNCj4gDQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBU1REUF9MSU5L X1NVQ0NFU1MpICYmDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0X2dldF9pbmRleF9yZWdfbWFzayhhc3QsIEFTVF9J T19DUlRDX1BPUlQsIDB4REYsIEFTVERQX0hQRCkpKSB7DQo+IA0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBlcnJfYXN0 ZHBfanVtcF9vdXRfbG9vcF9vZl9lZGlkOw0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgfQ0KPiANCj4+ICsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGorKzsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlmIChqID4gMjAwKQ0KPiANCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJyX2FzdGRw X2p1bXBfb3V0X2xvb3Bfb2ZfZWRpZDsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAg fQ0KPiANCj4+ICsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgKihlZGlkZGF0YSkg PSBhc3RfZ2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwNCj4gDQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweEQ4 LCBBU1REUF9FRElEX1JFQURfREFUQV9NQVNLKTsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqAgKihlZGlkZGF0YSArIDEpID0gYXN0X2dldF9pbmRleF9yZWdfbWFzayhhc3QsIEFT VF9JT19DUlRDX1BPUlQsIDB4RDksDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFTVERQX0VESURfUkVB RF9EQVRBX01BU0spOw0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAqKGVkaWRkYXRh ICsgMikgPSBhc3RfZ2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwg MHhEQSwNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQVNURFBfRURJRF9SRUFEX0RBVEFfTUFTSyk7DQo+ IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgICooZWRpZGRhdGEgKyAzKSA9IGFzdF9nZXRf aW5kZXhfcmVnX21hc2soYXN0LCBBU1RfSU9fQ1JUQ19QT1JULCAweERCLA0KPiANCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBBU1REUF9FRElEX1JFQURfREFUQV9NQVNLKTsNCj4gDQo+PiArDQo+IA0KPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChpID09IDMxKSB7DQo+IA0KPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKg0KPiANCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBGb3IgMTI4LWJ5dGVzIEVESURfMS4zLA0KPiAN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiAxLiBBZGQgdGhl IHZhbHVlIG9mIEJ5dGVzLTEyNiB0byBCeXRlcy0xMjcuDQo+IA0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBUaGUg Qnl0ZXMtMTI3IGlzIENoZWNrc3VtLiBTdW0gb2YgYWxsIDEyOGJ5dGVzIHNob3VsZA0KPiAN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKsKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZXF1YWwgMMKgwqDCoCAobW9kIDI1NikuDQo+IA0KPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIDIuIE1vZGlmeSBCeXRlcy0xMjYgdG8g YmUgMC4NCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICrC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIFRoZSBCeXRlcy0xMjYgaW5kaWNhdGVzIHRoZSBOdW1i ZXIgb2YgZXh0ZW5zaW9ucyB0bw0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm9sbG93LiAwIHJlcHJlc2Vu dHMgbm9leHRlbnNpb25zLg0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKi8NCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICooZWRpZGRhdGEgKyAzKSA9ICooZWRpZGRhdGEgKyAzKSArICooZWRpZGRhdGEgKyAy KTsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICooZWRp ZGRhdGEgKyAyKSA9IDA7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4gDQo+ PiArDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGVkaWRkYXRhICs9IDQ7DQo+IA0K Pj4gK8KgwqAgfQ0KPiANCj4+ICsNCj4gDQo+PiArwqDCoCBhc3Rfc2V0X2luZGV4X3JlZ19t YXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhFNSwgKHU4KSB+QVNURFBfSE9TVF9FRElE X1JFQURfRE9ORV9NQVNLLA0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIEFTVERQX0hPU1RfRURJRF9SRUFEX0RPTkUpOw0KPiANCj4+ ICsNCj4gDQo+PiArwqDCoCByZXR1cm4gMDsNCj4gDQo+PiArDQo+IA0KPj4gK2Vycl9hc3Rk cF9qdW1wX291dF9sb29wX29mX2VkaWQ6DQo+IA0KPj4gK8KgwqAgYXN0X3NldF9pbmRleF9y ZWdfbWFzayhhc3QsIEFTVF9JT19DUlRDX1BPUlQsIDB4RTUsDQo+IA0KPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHU4KSB+QVNURFBfSE9T VF9FRElEX1JFQURfRE9ORV9NQVNLLA0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFTVERQX0hPU1RfRURJRF9SRUFEX0RPTkUpOw0K PiANCj4+ICvCoMKgIHJldHVybiAofihqKzI1NikgKyAxKTsNCj4gDQo+PiArDQo+IA0KPj4g K2Vycl9hc3RkcF9lZGlkX25vdF9yZWFkeToNCj4gDQo+PiArwqDCoCBpZiAoIShhc3RfZ2V0 X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhEMSwgQVNURFBfTUNV X0ZXX0VYRUNVVElORykpKQ0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g KH4weEQxICsgMSk7DQo+IA0KPj4gK8KgwqAgaWYgKCEoYXN0X2dldF9pbmRleF9yZWdfbWFz ayhhc3QsIEFTVF9JT19DUlRDX1BPUlQsIDB4REMsIEFTVERQX0xJTktfU1VDQ0VTUykpKQ0K PiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gKH4weERDICsgMSk7DQo+IA0K Pj4gK8KgwqAgaWYgKCEoYXN0X2dldF9pbmRleF9yZWdfbWFzayhhc3QsIEFTVF9JT19DUlRD X1BPUlQsIDB4REYsIEFTVERQX0hQRCkpKQ0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gKH4weERGICsgMSk7DQo+IA0KPj4gK8KgwqAgaWYgKCEoYXN0X2dldF9pbmRl eF9yZWdfbWFzayhhc3QsIEFTVF9JT19DUlRDX1BPUlQsIDB4RTUsIEFTVERQX0hPU1RfRURJ RF9SRUFEX0RPTkVfTUFTSykpKQ0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gKH4weEU1ICsgMSk7DQo+IA0KPj4gKw0KPiANCj4+ICvCoMKgIHJldHVybsKgwqDCoMKg wqAgMDsNCj4gDQo+PiArfQ0KPiANCj4+ICsNCj4gDQo+PiArLyoNCj4gDQo+PiArICogTGF1 bmNoIEFzcGVlZCBEUA0KPiANCj4+ICsgKi8NCj4gDQo+PiArdm9pZCBhc3RfZHBfbGF1bmNo KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHU4IGJQb3dlcikgew0KPiANCj4+ICvCoMKgIHUz MiBpID0gMCwgaiA9IDAsIFdhaXRDb3VudCA9IDE7DQo+IA0KPj4gK8KgwqAgdTggYkRQVFgg PSAwOw0KPiANCj4+ICvCoMKgIHU4IGJEUEV4ZWN1dGUgPSAxOw0KPiANCj4+ICsNCj4gDQo+ PiArwqDCoCBzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCA9IHRvX2FzdF9wcml2YXRlKGRldik7 DQo+IA0KPj4gK8KgwqAgLy8gUzMgY29tZSBiYWNrLCBuZWVkIG1vcmUgdGltZSB0byB3YWl0 IEJNQyByZWFkeS4NCj4gDQo+PiArwqDCoCBpZiAoYlBvd2VyKQ0KPiANCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoCBXYWl0Q291bnQgPSAzMDA7DQo+IA0KPj4gKw0KPiANCj4+ICsNCj4g DQo+PiArwqDCoCAvLyBXYWl0IHRvdGFsIGNvdW50IGJ5IGRpZmZlcmVudCBjb25kaXRpb24u DQo+IA0KPj4gK8KgwqAgZm9yIChqID0gMDsgaiA8IFdhaXRDb3VudDsgaisrKSB7DQo+IA0K Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGJEUFRYID0gYXN0X2dldF9pbmRleF9yZWdfbWFz ayhhc3QsIEFTVF9JT19DUlRDX1BPUlQsIDB4RDEsDQo+IA0KPj4gK1RYX1RZUEVfTUFTSyk7 DQo+IA0KPj4gKw0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYkRQVFgpDQo+ IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsNCj4g DQo+PiArDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIG1zbGVlcCgxMDApOw0KPiAN Cj4+ICvCoMKgIH0NCj4gDQo+PiArDQo+IA0KPj4gK8KgwqAgLy8gMHhFIDogQVNURFAgd2l0 aCBEUE1DVSBGVyBoYW5kbGluZw0KPiANCj4+ICvCoMKgIGlmIChiRFBUWCA9PSBBU1REUF9E UE1DVV9UWCkgew0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAvLyBXYWl0IG9uZSBz ZWNvbmQgdGhlbiB0aW1lb3V0Lg0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBpID0g MDsNCj4gDQo+PiArDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHdoaWxlIChhc3Rf Z2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhEMSwgQ09QUk9D RVNTT1JfTEFVTkNIKSAhPQ0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgQ09QUk9DRVNTT1JfTEFVTkNIKSB7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpKys7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAvLyB3YWl0IDEwMCBtcw0KPiANCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbXNsZWVwKDEwMCk7DQo+IA0KPj4gKw0KPiAN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGkgPj0gMTAp IHsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAvLyBEUCB3b3VsZCBub3QgYmUgcmVhZHkuDQo+IA0KPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYkRQRXhlY3V0 ZSA9IDA7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB9DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4gDQo+ PiArDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChiRFBFeGVjdXRlKQ0KPiAN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0LT50eF9jaGlw X3R5cGUgPSBBU1RfVFhfQVNURFA7DQo+IA0KPj4gKw0KPiANCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoCBhc3Rfc2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwg MHhFNSwNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAodTgpIH5BU1REUF9IT1NUX0VESURfUkVBRF9ET05FX01BU0ssDQo+IA0KPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQVNURFBf SE9TVF9FRElEX1JFQURfRE9ORSk7DQo+IA0KPj4gK8KgwqAgfSBlbHNlDQo+IA0KPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgIGFzdC0+dHhfY2hpcF90eXBlID0gQVNUX1RYX05PTkU7DQo+ IA0KPj4gK30NCj4gDQo+PiArDQo+IA0KPj4gKw0KPiANCj4+ICsNCj4gDQo+PiArdm9pZCBh c3RfZHBfcG93ZXJfb25fb2ZmKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGJvb2wgb24pIHsN Cj4gDQo+PiArwqDCoCBzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCA9IHRvX2FzdF9wcml2YXRl KGRldik7DQo+IA0KPj4gK8KgwqAgLy8gUmVhZCBhbmQgVHVybiBvZmYgRFAgUEhZIHNsZWVw DQo+IA0KPj4gK8KgwqAgdTggYkUzID0gYXN0X2dldF9pbmRleF9yZWdfbWFzayhhc3QsIEFT VF9JT19DUlRDX1BPUlQsIDB4RTMsDQo+IA0KPj4gK0FTVF9EUF9WSURFT19FTkFCTEUpOw0K PiANCj4+ICsNCj4gDQo+PiArwqDCoCAvLyBUdXJuIG9uIERQIFBIWSBzbGVlcA0KPiANCj4+ ICvCoMKgIGlmICghb24pDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGJFMyB8PSBB U1RfRFBfUEhZX1NMRUVQOw0KPiANCj4+ICsNCj4gDQo+PiArwqDCoCAvLyBEUCBQb3dlciBv bi9vZmYNCj4gDQo+PiArwqDCoCBhc3Rfc2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lP X0NSVENfUE9SVCwgMHhFMywgKHU4KQ0KPiANCj4+ICt+QVNUX0RQX1BIWV9TTEVFUCwgYkUz KTsgfQ0KPiANCj4+ICsNCj4gDQo+PiArDQo+IA0KPj4gKw0KPiANCj4+ICt2b2lkIGFzdF9k cF9zZXRfb25fb2ZmKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGJvb2wgb24pIHsNCj4gDQo+ PiArwqDCoCBzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCA9IHRvX2FzdF9wcml2YXRlKGRldik7 DQo+IA0KPj4gK8KgwqAgdTggdmlkZW9fb25fb2ZmID0gb247DQo+IA0KPj4gKw0KPiANCj4+ ICvCoMKgIC8vIFZpZGVvIE9uL09mZg0KPiANCj4+ICvCoMKgIGFzdF9zZXRfaW5kZXhfcmVn X21hc2soYXN0LCBBU1RfSU9fQ1JUQ19QT1JULCAweEUzLCAodTgpDQo+IA0KPj4gK35BU1Rf RFBfVklERU9fRU5BQkxFLCBvbik7DQo+IA0KPj4gKw0KPiANCj4+ICvCoMKgIC8vIElmIERQ IHBsdWcgaW4gYW5kIGxpbmsgc3VjY2Vzc2Z1bCB0aGVuIGNoZWNrIHZpZGVvIG9uIC8gb2Zm IHN0YXR1cw0KPiANCj4+ICvCoMKgIGlmIChhc3RfZ2V0X2luZGV4X3JlZ19tYXNrKGFzdCwg QVNUX0lPX0NSVENfUE9SVCwgMHhEQywgQVNURFBfTElOS19TVUNDRVNTKSAmJg0KPiANCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3RfZ2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNU X0lPX0NSVENfUE9SVCwgMHhERiwgQVNURFBfSFBEKSkgew0KPiANCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoCB2aWRlb19vbl9vZmYgPDw9IDQ7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgIHdoaWxlIChhc3RfZ2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENf UE9SVCwgMHhERiwNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFT VERQX01JUlJPUl9WSURFT19FTkFCTEUpICE9IHZpZGVvX29uX29mZikgew0KPiANCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLy8gd2FpdCAxIG1zDQo+IA0K Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtZGVsYXkoMSk7DQo+ IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4gDQo+PiArwqDCoCB9DQo+IA0KPj4g K30NCj4gDQo+PiArDQo+IA0KPj4gK3ZvaWQgYXN0X2RwX3NldF9tb2RlKHN0cnVjdCBkcm1f Y3J0YyAqY3J0Yywgc3RydWN0DQo+IA0KPj4gK2FzdF92Ymlvc19tb2RlX2luZm8gKnZiaW9z X21vZGUpIHsNCj4gDQo+PiArwqDCoCBzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCA9IHRvX2Fz dF9wcml2YXRlKGNydGMtPmRldik7DQo+IA0KPj4gKw0KPiANCj4+ICvCoMKgIHUzMiB1bFJl ZnJlc2hSYXRlSW5kZXg7DQo+IA0KPj4gK8KgwqAgdTggTW9kZUlkeDsNCj4gDQo+PiArDQo+ IA0KPj4gK8KgwqAgdWxSZWZyZXNoUmF0ZUluZGV4ID0gdmJpb3NfbW9kZS0+ZW5oX3RhYmxl LT5yZWZyZXNoX3JhdGVfaW5kZXggLSAxOw0KPiANCj4+ICsNCj4gDQo+PiArwqDCoCBzd2l0 Y2ggKGNydGMtPm1vZGUuY3J0Y19oZGlzcGxheSkgew0KPiANCj4+ICvCoMKgIGNhc2UgMzIw Og0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBNb2RlSWR4ID0gQVNURFBfMzIweDI0 MF82MDsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+IA0KPj4gK8Kg wqAgY2FzZSA0MDA6DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIE1vZGVJZHggPSBB U1REUF80MDB4MzAwXzYwOw0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsN Cj4gDQo+PiArwqDCoCBjYXNlIDUxMjoNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAg TW9kZUlkeCA9IEFTVERQXzUxMngzODRfNjA7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgIGJyZWFrOw0KPiANCj4+ICvCoMKgIGNhc2UgNjQwOg0KPiANCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoCBNb2RlSWR4ID0gKEFTVERQXzY0MHg0ODBfNjAgKyAodTgpIHVsUmVmcmVz aFJhdGVJbmRleCk7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOw0KPiAN Cj4+ICvCoMKgIGNhc2UgODAwOg0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBNb2Rl SWR4ID0gKEFTVERQXzgwMHg2MDBfNTYgKyAodTgpIHVsUmVmcmVzaFJhdGVJbmRleCk7DQo+ IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOw0KPiANCj4+ICvCoMKgIGNhc2Ug MTAyNDoNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgTW9kZUlkeCA9IChBU1REUF8x MDI0eDc2OF82MCArICh1OCkgdWxSZWZyZXNoUmF0ZUluZGV4KTsNCj4gDQo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+IA0KPj4gK8KgwqAgY2FzZSAxMTUyOg0KPiANCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBNb2RlSWR4ID0gQVNURFBfMTE1Mng4NjRfNzU7DQo+ IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOw0KPiANCj4+ICvCoMKgIGNhc2Ug MTI4MDoNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGNydGMtPm1vZGUuY3J0 Y192ZGlzcGxheSA9PSA4MDApDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBNb2RlSWR4ID0gKEFTVERQXzEyODB4ODAwXzYwX1JCIC0gKHU4KSB1bFJl ZnJlc2hSYXRlSW5kZXgpOw0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbHNlwqDC oMKgwqDCoMKgwqDCoMKgIC8vIDEwMjQNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIE1vZGVJZHggPSAoQVNURFBfMTI4MHgxMDI0XzYwICsgKHU4KSB1 bFJlZnJlc2hSYXRlSW5kZXgpOw0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVh azsNCj4gDQo+PiArwqDCoCBjYXNlIDEzNjA6DQo+IA0KPj4gK8KgwqAgY2FzZSAxMzY2Og0K PiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBNb2RlSWR4ID0gQVNURFBfMTM2Nng3Njhf NjA7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOw0KPiANCj4+ICvCoMKg IGNhc2UgMTQ0MDoNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgTW9kZUlkeCA9IChB U1REUF8xNDQweDkwMF82MF9SQiAtICh1OCkgdWxSZWZyZXNoUmF0ZUluZGV4KTsNCj4gDQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+IA0KPj4gK8KgwqAgY2FzZSAxNjAw Og0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoY3J0Yy0+bW9kZS5jcnRjX3Zk aXNwbGF5ID09IDkwMCkNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIE1vZGVJZHggPSAoQVNURFBfMTYwMHg5MDBfNjBfUkIgLSAodTgpIHVsUmVmcmVz aFJhdGVJbmRleCk7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGVsc2XCoMKgwqDC oMKgwqDCoMKgwqAgLy8xMjAwDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBNb2RlSWR4ID0gQVNURFBfMTYwMHgxMjAwXzYwOw0KPiANCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoCBicmVhazsNCj4gDQo+PiArwqDCoCBjYXNlIDE2ODA6DQo+IA0K Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIE1vZGVJZHggPSAoQVNURFBfMTY4MHgxMDUwXzYw X1JCIC0gKHU4KSB1bFJlZnJlc2hSYXRlSW5kZXgpOw0KPiANCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoCBicmVhazsNCj4gDQo+PiArwqDCoCBjYXNlIDE5MjA6DQo+IA0KPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgIGlmIChjcnRjLT5tb2RlLmNydGNfdmRpc3BsYXkgPT0gMTA4MCkN Cj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE1vZGVJZHgg PSBBU1REUF8xOTIweDEwODBfNjA7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGVs c2XCoMKgwqDCoMKgwqDCoMKgwqAgLy8xMjAwDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBNb2RlSWR4ID0gQVNURFBfMTkyMHgxMjAwXzYwOw0KPiAN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsNCj4gDQo+PiArwqDCoCBkZWZhdWx0 Og0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm47DQo+IA0KPj4gK8KgwqAg fQ0KPiANCj4+ICsNCj4gDQo+PiArwqDCoCAvKg0KPiANCj4+ICvCoMKgICogQ1JFMFs3OjBd OiBNSVNDMCAoKDB4MDA6IDE4LWJwcCkgb3IgKDB4MjA6IDI0LWJwcCkNCj4gDQo+PiArwqDC oCAqIENSRTFbNzowXTogTUlTQzEgKGRlZmF1bHQ6IDB4MDApDQo+IA0KPj4gK8KgwqAgKiBD UkUyWzc6MF06IHZpZGVvIGZvcm1hdCBpbmRleCAoMHgwMCB+IDB4MjAgb3IgMHg0MCB+IDB4 NTApDQo+IA0KPj4gK8KgwqAgKi8NCj4gDQo+PiArwqDCoCBhc3Rfc2V0X2luZGV4X3JlZ19t YXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhFMCwgKHU4KSB+QVNURFBfQ0xFQVJfTUFT SywNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBBU1REUF9NSVNDMF8yNGJwcCk7DQo+IA0KPj4gK8KgwqAgYXN0X3NldF9p bmRleF9yZWdfbWFzayhhc3QsIEFTVF9JT19DUlRDX1BPUlQsIDB4RTEsICh1OCkgfkFTVERQ X0NMRUFSX01BU0ssIEFTVERQX01JU0MxKTsNCj4gDQo+PiArwqDCoCBhc3Rfc2V0X2luZGV4 X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhFMiwgKHU4KQ0KPiANCj4+ICt+ QVNURFBfQ0xFQVJfTUFTSywgTW9kZUlkeCk7IH0NCj4gDQo+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FzdC9hc3RfZHJ2LmgNCj4gDQo+PiBiL2RyaXZlcnMvZ3B1L2RybS9h c3QvYXN0X2Rydi5oIGluZGV4IGExOTMxNWIyZi4uZmYxYWUzMTRiIDEwMDY0NA0KPiANCj4+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X2Rydi5oDQo+IA0KPj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2FzdC9hc3RfZHJ2LmgNCj4gDQo+PiBAQCAtNzAsNiArNzAsNyBAQCBl bnVtIGFzdF90eF9jaGlwIHsNCj4gDQo+PsKgwqAgwqDCoMKgwqDCoMKgwqAgQVNUX1RYX05P TkUsDQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgIEFTVF9UWF9TSUwxNjQsDQo+IA0KPj7C oMKgIMKgwqDCoMKgwqDCoMKgIEFTVF9UWF9EUDUwMSwNCj4gDQo+PiArwqDCoCBBU1RfVFhf QVNURFAsDQo+IA0KPj7CoMKgIH07DQo+IA0KPj4gDQo+IA0KPj7CoMKgICNkZWZpbmUgQVNU X0RSQU1fNTEyTXgxNiAwDQo+IA0KPj4gQEAgLTE4NCw2ICsxODUsMTAgQEAgc3RydWN0IGFz dF9wcml2YXRlIHsNCj4gDQo+PsKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2VuY29kZXIgZW5jb2RlcjsNCj4gDQo+PsKg wqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciBjb25uZWN0b3I7DQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB9IGRwNTAxOw0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oCBzdHJ1Y3Qgew0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3RydWN0IGRybV9lbmNvZGVyIGVuY29kZXI7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uZWN0b3I7 DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIH0gYXN0ZHA7DQo+IA0KPj7CoMKgIMKg wqDCoMKgwqDCoMKgIH0gb3V0cHV0Ow0KPiANCj4+IA0KPiANCj4+wqDCoCDCoMKgwqDCoMKg wqDCoCBib29sIHN1cHBvcnRfd2lkZV9zY3JlZW47DQo+IA0KPj4gQEAgLTM1NywxMCArMzYy LDExMyBAQCBpbnQgYXN0X21vZGVfY29uZmlnX2luaXQoc3RydWN0IGFzdF9wcml2YXRlICph c3QpOw0KPiANCj4+wqDCoCAjZGVmaW5lIEFTVF9EUDUwMV9FRElEX0RBVEHCoMKgwqAgMHhm MDIwDQo+IA0KPj4gDQo+IA0KPj7CoMKgIC8qIERlZmluZSBmb3IgU29jIHNjcmF0Y2hlZCBy ZWcgKi8NCj4gDQo+PiArI2RlZmluZSBDT1BST0NFU1NPUl9MQVVOQ0jCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCg1KQ0KPiANCj4+ICsNCj4gDQo+PiAr LyoNCj4gDQo+PiArICogRGlzcGxheSBUcmFuc21pdHRlciBUeXBlOg0KPiANCj4+ICsgKi8N Cj4gDQo+PiArI2RlZmluZSBUWF9UWVBFX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VOTUFTSygzLCAxKQ0KPiANCj4+ICsj ZGVmaW5lIE5PX1RYwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICgwIDw8IDEpDQo+ IA0KPj4gKyNkZWZpbmUgSVRFNjYxMjFfVkJJT1NfVFjCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICgxIDw8IDEpDQo+IA0KPj4gKyNkZWZpbmUgU0kxNjRfVkJJ T1NfVFjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICgyIDw8IDEpDQo+IA0KPj4gKyNkZWZpbmUgQ0g3MDAzX1ZCSU9TX1RYwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKDMgPDwgMSkNCj4gDQo+PiAr I2RlZmluZSBEUDUwMV9WQklPU19UWMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAoNCA8PCAxKQ0KPiANCj4+ICsjZGVmaW5lIEFOWDk4MDdfVkJJ T1NfVFjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICg1IDw8IDEp DQo+IA0KPj4gKyNkZWZpbmUgVFhfRldfRU1CRURERURfRldfVFjCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgKDYgPDwgMSkNCj4gDQo+PiArI2RlZmluZSBBU1REUF9EUE1DVV9U WMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAoNyA8PCAxKQ0KPiANCj4+ICsNCj4gDQo+PsKgwqAgI2RlZmluZSBBU1RfVlJB TV9JTklUX1NUQVRVU19NQVNLwqDCoMKgwqDCoMKgIEdFTk1BU0soNywgNikNCj4gDQo+PsKg wqAgLy8jZGVmaW5lIEFTVF9WUkFNX0lOSVRfQllfQk1DwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIEJJVCg3KQ0KPiANCj4+wqDCoCAvLyNkZWZpbmUgQVNUX1ZSQU1fSU5JVF9SRUFEWcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoNikNCj4gDQo+PiANCj4gDQo+PiAr LyogRGVmaW5lIGZvciBTb2Mgc2NyYXRjaGVkIHJlZyB1c2VkIG9uIEFTVERQICovDQo+IA0K Pj4gKyNkZWZpbmUgQVNUX0RQX1BIWV9TTEVFUMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgQklUKDQpDQo+IA0KPj4gKyNkZWZpbmUgQVNUX0RQX1ZJREVPX0VO QUJMRcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCgwKQ0KPiANCj4+ICsNCj4gDQo+ PiArI2RlZmluZSBBU1RfRFBfUE9XRVJfT07CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB0cnVlDQo+IA0KPj4gKyNkZWZpbmUgQVNUX0RQX1BPV0VSX09GRsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmYWxzZQ0KPiANCj4+ICsNCj4gDQo+ PiArLyoNCj4gDQo+PiArICogQ1JEMVtiNV06IERQIE1DVSBGVyBpcyBleGVjdXRpbmcNCj4g DQo+PiArICogQ1JEQ1tiMF06IERQIGxpbmsgc3VjY2Vzcw0KPiANCj4+ICsgKiBDUkRGW2Iw XTogRFAgSFBEDQo+IA0KPj4gKyAqIENSRTVbYjBdOiBIb3N0IHJlYWRpbmcgRURJRCBwcm9j ZXNzIGlzIGRvbmXCoCAqLw0KPiANCj4+ICsjZGVmaW5lIEFTVERQX01DVV9GV19FWEVDVVRJ TkfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCg1KQ0KPiAN Cj4+ICsjZGVmaW5lIEFTVERQX0xJTktfU1VDQ0VTU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCgwKQ0KPiANCj4+ICsjZGVmaW5lIEFT VERQX0hQRMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQklUKDApDQo+IA0KPj4gKyNk ZWZpbmUgQVNURFBfSE9TVF9FRElEX1JFQURfRE9ORcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBCSVQoMCkNCj4gDQo+PiArI2RlZmluZSBBU1REUF9IT1NUX0VESURfUkVBRF9E T05FX01BU0vCoMKgwqAgR0VOTUFTSygwLCAwKQ0KPiANCj4+ICsNCj4gDQo+PiArLyoNCj4g DQo+PiArICogQ1JCOFtiMV06IEVuYWJsZSBWU1lOQyBvZmYNCj4gDQo+PiArICogQ1JCOFti MF06IEVuYWJsZSBIU1lOQyBvZmYNCj4gDQo+PiArICovDQo+IA0KPj4gKyNkZWZpbmUgQVNU X0RQTVNfVlNZTkNfT0ZGwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCgxKQ0KPiANCj4+ICsjZGVmaW5lIEFTVF9EUE1T X0hTWU5DX09GRsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBCSVQoMCkNCj4gDQo+PiArDQo+IA0KPj4gKy8qDQo+IA0KPj4g KyAqIENSREZbYjRdOiBNaXJyb3Igb2YgQVNUX0RQX1ZJREVPX0VOQUJMRQ0KPiANCj4+ICsg KiBQcmVjb25kaXRpb246wqAgQS4gfkFTVF9EUF9QSFlfU0xFRVDCoCAmJg0KPiANCj4+ICsg KsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQi4gRFBf SFBEICYmDQo+IA0KPj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBDLiBEUF9MSU5LX1NVQ0NFU1MNCj4gDQo+PiArICovDQo+IA0KPj4gKyNk ZWZpbmUgQVNURFBfTUlSUk9SX1ZJREVPX0VOQUJMRcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBCSVQoNCkNCj4gDQo+PiArDQo+IA0KPj4gKyNkZWZpbmUgQVNURFBfRURJRF9S RUFEX1BPSU5URVJfTUFTS8KgIEdFTk1BU0soNywgMCkNCj4gDQo+PiArI2RlZmluZSBBU1RE UF9FRElEX1ZBTElEX0ZMQUdfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBH RU5NQVNLKDAsIDApDQo+IA0KPj4gKyNkZWZpbmUgQVNURFBfRURJRF9SRUFEX0RBVEFfTUFT S8KgwqDCoMKgwqDCoMKgIEdFTk1BU0soNywgMCkNCj4gDQo+PiArDQo+IA0KPj4gKy8qDQo+ IA0KPj4gKyAqIEFTVERQIHNldG1vZGUgcmVnaXN0ZXJzOg0KPiANCj4+ICsgKiBDUkUwWzc6 MF06IE1JU0MwICgoMHgwMDogMTgtYnBwKSBvciAoMHgyMDogMjQtYnBwKQ0KPiANCj4+ICsg KiBDUkUxWzc6MF06IE1JU0MxIChkZWZhdWx0OiAweDAwKQ0KPiANCj4+ICsgKiBDUkUyWzc6 MF06IHZpZGVvIGZvcm1hdCBpbmRleCAoMHgwMCB+IDB4MjAgb3IgMHg0MCB+IDB4NTApwqAg Ki8NCj4gDQo+PiArI2RlZmluZSBBU1REUF9NSVNDMF8yNGJwcMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoNSkNCj4gDQo+PiArI2RlZmluZSBBU1REUF9NSVND McKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAwDQo+IA0KPj4gKyNkZWZpbmUgQVNURFBfQ0xFQVJfTUFTS8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU5NQVNLKDcsIDApDQo+IA0KPj4gKw0KPiAN Cj4+ICsvKg0KPiANCj4+ICsgKiBBU1REUCByZXNvdWx0aW9uIHRhYmxlOg0KPiANCj4+ICsg KiBFWDrCoCBBU1REUF9BX0JfQzoNCj4gDQo+PiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgQTogUmVzb2x1dGlvbg0KPiANCj4+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBCOiBSZWZyZXNoIFJhdGUNCj4gDQo+PiArICrCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgQzogTWlzYyBpbmZvcm1hdGlvbiwgc3VjaCBhcyBDVlQsIFJlZHVj ZSBCbGFua2VkDQo+IA0KPj4gKyAqLw0KPiANCj4+ICsjZGVmaW5lIEFTVERQXzY0MHg0ODBf NjDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDAwDQo+IA0KPj4gKyNkZWZpbmUgQVNU RFBfNjQweDQ4MF83MsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MDENCj4gDQo+PiAr I2RlZmluZSBBU1REUF82NDB4NDgwXzc1wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgw Mg0KPiANCj4+ICsjZGVmaW5lIEFTVERQXzY0MHg0ODBfODXCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAweDAzDQo+IA0KPj4gKyNkZWZpbmUgQVNURFBfODAweDYwMF81NsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIDB4MDQNCj4gDQo+PiArI2RlZmluZSBBU1REUF84MDB4NjAw XzYwwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgwNQ0KPiANCj4+ICsjZGVmaW5lIEFT VERQXzgwMHg2MDBfNzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDA2DQo+IA0KPj4g KyNkZWZpbmUgQVNURFBfODAweDYwMF83NcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4 MDcNCj4gDQo+PiArI2RlZmluZSBBU1REUF84MDB4NjAwXzg1wqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgMHgwOA0KPiANCj4+ICsjZGVmaW5lIEFTVERQXzEwMjR4NzY4XzYwwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAweDA5DQo+IA0KPj4gKyNkZWZpbmUgQVNURFBfMTAyNHg3Njhf NzDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MEENCj4gDQo+PiArI2RlZmluZSBBU1REUF8x MDI0eDc2OF83NcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgwQg0KPiANCj4+ICsjZGVmaW5l IEFTVERQXzEwMjR4NzY4Xzg1wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDBDDQo+IA0KPj4g KyNkZWZpbmUgQVNURFBfMTI4MHgxMDI0XzYwwqDCoMKgwqDCoMKgwqDCoMKgIDB4MEQNCj4g DQo+PiArI2RlZmluZSBBU1REUF8xMjgweDEwMjRfNzXCoMKgwqDCoMKgwqDCoMKgwqAgMHgw RQ0KPiANCj4+ICsjZGVmaW5lIEFTVERQXzEyODB4MTAyNF84NcKgwqDCoMKgwqDCoMKgwqDC oCAweDBGDQo+IA0KPj4gKyNkZWZpbmUgQVNURFBfMTYwMHgxMjAwXzYwwqDCoMKgwqDCoMKg wqDCoMKgIDB4MTANCj4gDQo+PiArI2RlZmluZSBBU1REUF8zMjB4MjQwXzYwwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgMHgxMQ0KPiANCj4+ICsjZGVmaW5lIEFTVERQXzQwMHgzMDBf NjDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDEyDQo+IA0KPj4gKyNkZWZpbmUgQVNU RFBfNTEyeDM4NF82MMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MTMNCj4gDQo+PiAr I2RlZmluZSBBU1REUF8xOTIweDEyMDBfNjDCoMKgwqDCoMKgwqDCoMKgwqAgMHgxNA0KPiAN Cj4+ICsjZGVmaW5lIEFTVERQXzE5MjB4MTA4MF82MMKgwqDCoMKgwqDCoMKgwqDCoCAweDE1 DQo+IA0KPj4gKyNkZWZpbmUgQVNURFBfMTI4MHg4MDBfNjDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIDB4MTYNCj4gDQo+PiArI2RlZmluZSBBU1REUF8xMjgweDgwMF82MF9SQsKgwqDCoMKg IDB4MTcNCj4gDQo+PiArI2RlZmluZSBBU1REUF8xNDQweDkwMF82MMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgMHgxOA0KPiANCj4+ICsjZGVmaW5lIEFTVERQXzE0NDB4OTAwXzYwX1JCwqDC oMKgwqAgMHgxOQ0KPiANCj4+ICsjZGVmaW5lIEFTVERQXzE2ODB4MTA1MF82MMKgwqDCoMKg wqDCoMKgwqDCoCAweDFBDQo+IA0KPj4gKyNkZWZpbmUgQVNURFBfMTY4MHgxMDUwXzYwX1JC wqDCoCAweDFCDQo+IA0KPj4gKyNkZWZpbmUgQVNURFBfMTYwMHg5MDBfNjDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIDB4MUMNCj4gDQo+PiArI2RlZmluZSBBU1REUF8xNjAweDkwMF82MF9S QsKgwqDCoMKgIDB4MUQNCj4gDQo+PiArI2RlZmluZSBBU1REUF8xMzY2eDc2OF82MMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgMHgxRQ0KPiANCj4+ICsjZGVmaW5lIEFTVERQXzExNTJ4ODY0 Xzc1wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDFGDQo+IA0KPj4gKw0KPiANCj4+wqDCoCBp bnQgYXN0X21tX2luaXQoc3RydWN0IGFzdF9wcml2YXRlICphc3QpOw0KPiANCj4+IA0KPiAN Cj4+wqDCoCAvKiBhc3QgcG9zdCAqLw0KPiANCj4+IEBAIC0zODEsNCArNDg5LDExIEBAIHZv aWQgYXN0X2luaXRfM3JkdHgoc3RydWN0IGRybV9kZXZpY2UgKmRldik7DQo+IA0KPj7CoMKg IC8qIGFzdF9pMmMuYyAqLw0KPiANCj4+IMKgwqBzdHJ1Y3QgYXN0X2kyY19jaGFuICphc3Rf aTJjX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsNCj4gDQo+PiANCj4gDQo+PiAr LyogYXNwZWVkIERQICovDQo+IA0KPj4gK2ludCBhc3RfYXN0ZHBfcmVhZF9lZGlkKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHU4ICplZGlkZGF0YSk7IHZvaWQNCj4gDQo+PiArYXN0X2Rw X2xhdW5jaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1OCBiUG93ZXIpOyB2b2lkDQo+IA0K Pj4gK2FzdF9kcF9wb3dlcl9vbl9vZmYoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBu byk7IHZvaWQNCj4gDQo+PiArYXN0X2RwX3NldF9vbl9vZmYoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgYm9vbCBubyk7IHZvaWQNCj4gDQo+PiArYXN0X2RwX3NldF9tb2RlKHN0cnVjdCBk cm1fY3J0YyAqY3J0Yywgc3RydWN0IGFzdF92Ymlvc19tb2RlX2luZm8NCj4gDQo+PiArKnZi aW9zX21vZGUpOw0KPiANCj4+ICsNCj4gDQo+PsKgwqAgI2VuZGlmDQo+IA0KPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X21haW4uYw0KPiANCj4+IGIvZHJpdmVy cy9ncHUvZHJtL2FzdC9hc3RfbWFpbi5jIGluZGV4IDIyZTllMmQzYy4uMTExM2VlMWNiIDEw MDY0NA0KPiANCj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X21haW4uYw0KPiAN Cj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X21haW4uYw0KPiANCj4+IEBAIC0y MzIsNyArMjMyLDcgQEAgc3RhdGljIGludCBhc3RfZGV0ZWN0X2NoaXAoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgYm9vbCAqbmVlZF9wb3N0KQ0KPiANCj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFzdC0+dHhfY2hpcF90eXBlID0g QVNUX1RYX1NJTDE2NDsNCj4gDQo+PsKgwqAgwqDCoMKgwqDCoMKgwqAgfQ0KPiANCj4+IA0K PiANCj4+IC3CoMKgwqAgaWYgKChhc3QtPmNoaXAgPT0gQVNUMjMwMCkgfHwgKGFzdC0+Y2hp cCA9PSBBU1QyNDAwKSkgew0KPiANCj4+ICvCoMKgIGlmICgoYXN0LT5jaGlwID09IEFTVDIz MDApIHx8IChhc3QtPmNoaXAgPT0gQVNUMjQwMCkgfHwgKGFzdC0+Y2hpcA0KPiANCj4+ICs9 PSBBU1QyNTAwKSkgew0KPiANCj4+wqDCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgLyoNCj4gDQo+PsKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIMKgKiBP biBBU1QyMzAwIGFuZCAyNDAwLCBsb29rIHRoZSBjb25maWd1cmF0aW9uIHNldCBieSB0aGUg U29DIGluDQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCDCoCog dGhlIFNPQyBzY3JhdGNoIHJlZ2lzdGVyICMxIGJpdHMgMTE6OCAoaW50ZXJlc3RpbmdseSBt YXJrZWQgQEANCj4gDQo+PiAtMjU2LDcgKzI1Niw4IEBAIHN0YXRpYyBpbnQgYXN0X2RldGVj dF9jaGlwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGJvb2wgKm5lZWRfcG9zdCkNCj4gDQo+ PsKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNhc2UgMHgwYzoNCj4gDQo+ PsKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBh c3QtPnR4X2NoaXBfdHlwZSA9IEFTVF9UWF9EUDUwMTsNCj4gDQo+PsKgwqAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4gDQo+PiAtwqDCoMKgIH0NCj4gDQo+PiArwqDC oCB9IGVsc2UgaWYgKGFzdC0+Y2hpcCA9PSBBU1QyNjAwKQ0KPiANCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoCBhc3RfZHBfbGF1bmNoKCZhc3QtPmJhc2UsIDApOw0KPiANCj4+IA0KPiAN Cj4+wqDCoCDCoMKgwqDCoMKgwqDCoCAvKiBQcmludCBzdHVmZiBmb3IgZGlhZ25vc3RpYyBw dXJwb3NlcyAqLw0KPiANCj4+wqDCoCDCoMKgwqDCoMKgwqDCoCBzd2l0Y2goYXN0LT50eF9j aGlwX3R5cGUpIHsNCj4gDQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FzdC9h c3RfbW9kZS5jDQo+IA0KPj4gYi9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9tb2RlLmMgaW5k ZXggNDViNTZiMzlhLi40NzI4ODI1YjcgMTAwNjQ0DQo+IA0KPj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2FzdC9hc3RfbW9kZS5jDQo+IA0KPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Fz dC9hc3RfbW9kZS5jDQo+IA0KPj4gQEAgLTk4OCwyMSArOTg4LDQxIEBAIHN0YXRpYyBpbnQg YXN0X2N1cnNvcl9wbGFuZV9pbml0KHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0KQ0KPiANCj4+ wqDCoCBzdGF0aWMgdm9pZCBhc3RfY3J0Y19kcG1zKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywg aW50IG1vZGUpDQo+IA0KPj7CoMKgIHsNCj4gDQo+PsKgwqAgwqDCoMKgwqDCoMKgwqAgc3Ry dWN0IGFzdF9wcml2YXRlICphc3QgPSB0b19hc3RfcHJpdmF0ZShjcnRjLT5kZXYpOw0KPiAN Cj4+ICvCoMKgIHU4IGNoID0gQVNUX0RQTVNfVlNZTkNfT0ZGIHwgQVNUX0RQTVNfSFNZTkNf T0ZGOw0KPiANCj4+IA0KPiANCj4+wqDCoCDCoMKgwqDCoMKgwqDCoCAvKiBUT0RPOiBNYXli ZSBjb250cm9sIGRpc3BsYXkgc2lnbmFsIGdlbmVyYXRpb24gd2l0aA0KPiANCj4+wqDCoCDC oMKgwqDCoMKgwqDCoCDCoCrCoMKgwqDCoMKgwqAgU3luYyBFbmFibGUgKGJpdCBDUjE3Ljcp Lg0KPiANCj4+wqDCoCDCoMKgwqDCoMKgwqDCoCDCoCovDQo+IA0KPj7CoMKgIMKgwqDCoMKg wqDCoMKgIHN3aXRjaCAobW9kZSkgew0KPiANCj4+wqDCoCDCoMKgwqDCoMKgwqDCoCBjYXNl IERSTV9NT0RFX0RQTVNfT046DQo+IA0KPj4gLcKgwqDCoCBjYXNlIERSTV9NT0RFX0RQTVNf U1RBTkRCWToNCj4gDQo+PiAtwqDCoMKgIGNhc2UgRFJNX01PREVfRFBNU19TVVNQRU5EOg0K PiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3Rfc2V0X2luZGV4X3JlZ19tYXNrKGFz dCwgQVNUX0lPX1NFUV9QT1JULMKgIDB4MDEsIDB4ZGYsIDApOw0KPiANCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoCBhc3Rfc2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENf UE9SVCwgMHhiNiwgMHhmYywgMCk7DQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpZiAoYXN0LT50eF9jaGlwX3R5cGUgPT0gQVNUX1RYX0RQNTAxKQ0KPiAN Cj4+wqDCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGFzdF9zZXRfZHA1MDFfdmlkZW9fb3V0cHV0KGNydGMtPmRldiwgMSk7DQo+IA0KPj4gKw0K PiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYXN0LT50eF9jaGlwX3R5cGUgPT0g QVNUX1RYX0FTVERQKSB7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBhc3RfZHBfcG93ZXJfb25fb2ZmKGNydGMtPmRldiwgQVNUX0RQX1BPV0VSX09O KTsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFzdF93 YWl0X2Zvcl92cmV0cmFjZShhc3QpOw0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYXN0X2RwX3NldF9vbl9vZmYoY3J0Yy0+ZGV2LCAxKTsNCj4gDQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQ0KPiANCj4+ICsNCj4gDQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqAgYXN0X2NydGNfbG9hZF9sdXQoYXN0LCBjcnRjKTsNCj4gDQo+PsKgwqAg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOw0KPiANCj4+ICvCoMKgIGNh c2UgRFJNX01PREVfRFBNU19TVEFOREJZOg0KPiANCj4+ICvCoMKgIGNhc2UgRFJNX01PREVf RFBNU19TVVNQRU5EOg0KPiANCj4+wqDCoCDCoMKgwqDCoMKgwqDCoCBjYXNlIERSTV9NT0RF X0RQTVNfT0ZGOg0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBjaCA9IG1vZGU7DQo+ IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYXN0LT50eF9j aGlwX3R5cGUgPT0gQVNUX1RYX0RQNTAxKQ0KPiANCj4+wqDCoCDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFzdF9zZXRfZHA1MDFfdmlkZW9fb3V0 cHV0KGNydGMtPmRldiwgMCk7DQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgIMKgwqDCoMKg wqDCoMKgIGJyZWFrOw0KPiANCj4+ICsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAg aWYgKGFzdC0+dHhfY2hpcF90eXBlID09IEFTVF9UWF9BU1REUCkgew0KPiANCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0X2RwX3NldF9vbl9vZmYoY3J0 Yy0+ZGV2LCAwKTsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGFzdF9kcF9wb3dlcl9vbl9vZmYoY3J0Yy0+ZGV2LCBBU1RfRFBfUE9XRVJfT0ZGKTsN Cj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQ0KPiANCj4+ICsNCj4gDQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqAgYXN0X3NldF9pbmRleF9yZWdfbWFzayhhc3QsIEFTVF9JT19T RVFfUE9SVCzCoCAweDAxLCAweGRmLCAweDIwKTsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqAgYXN0X3NldF9pbmRleF9yZWdfbWFzayhhc3QsIEFTVF9JT19DUlRDX1BPUlQsIDB4 YjYsIDB4ZmMsIGNoKTsNCj4gDQo+PsKgwqAgwqDCoMKgwqDCoMKgwqAgfQ0KPiANCj4+wqDC oCB9DQo+IA0KPj4gDQo+IA0KPj4gQEAgLTEwMjcsNyArMTA0Nyw3IEBAIGFzdF9jcnRjX2hl bHBlcl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY3J0Yw0KPiANCj4+ICpjcnRjLCBjb25zdCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZQ0KPiANCj4+IA0KPiANCj4+wqDCoCDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKChhc3QtPmNoaXAgPT0gQVNUMjEwMCkgfHwgKGFz dC0+Y2hpcCA9PSBBU1QyMjAwKSB8fA0KPiANCj4+wqDCoCDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgwqDCoMKgwqAoYXN0LT5jaGlwID09IEFTVDIzMDApIHx8IChhc3QtPmNo aXAgPT0gQVNUMjQwMCkgfHwNCj4gDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCDCoMKg wqAgKGFzdC0+Y2hpcCA9PSBBU1QyNTAwKSkgew0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoCDCoMKgwqAgKGFzdC0+Y2hpcCA9PSBBU1QyNTAwKSB8fCAoYXN0LT5jaGlwID09IEFT VDI2MDApKSB7DQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgaWYgKChtb2RlLT5oZGlzcGxheSA9PSAxOTIwKSAmJiAobW9kZS0+ dmRpc3BsYXkgPT0gMTA4MCkpDQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBNT0RFX09L Ow0KPiANCj4+IA0KPiANCj4+IEBAIC0xMTEwLDYgKzExMzAsNyBAQCBhc3RfY3J0Y19oZWxw ZXJfYXRvbWljX2ZsdXNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywNCj4gDQo+PsKgwqAgwqDC oMKgwqDCoMKgwqAgc3RydWN0IGFzdF9wcml2YXRlICphc3QgPSB0b19hc3RfcHJpdmF0ZShj cnRjLT5kZXYpOw0KPiANCj4+wqDCoCDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYXN0X2NydGNf c3RhdGUgKmFzdF9jcnRjX3N0YXRlID0gdG9fYXN0X2NydGNfc3RhdGUoY3J0Y19zdGF0ZSk7 DQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBhc3RfY3J0Y19zdGF0ZSAqb2xk X2FzdF9jcnRjX3N0YXRlID0NCj4gDQo+PiB0b19hc3RfY3J0Y19zdGF0ZShvbGRfY3J0Y19z dGF0ZSk7DQo+IA0KPj4gK8KgwqAgc3RydWN0IGFzdF92Ymlvc19tb2RlX2luZm8gKnZiaW9z X21vZGVfaW5mbyA9DQo+IA0KPj4gKyZhc3RfY3J0Y19zdGF0ZS0+dmJpb3NfbW9kZV9pbmZv Ow0KPiANCj4+IA0KPiANCj4+wqDCoCDCoMKgwqDCoMKgwqDCoCAvKg0KPiANCj4+wqDCoCDC oMKgwqDCoMKgwqDCoCDCoCogVGhlIGdhbW1hIExVVCBoYXMgdG8gYmUgcmVsb2FkZWQgYWZ0 ZXIgY2hhbmdpbmcgdGhlIHByaW1hcnkgQEANCj4gDQo+PiAtMTExNyw2ICsxMTM4LDEwIEBA IGFzdF9jcnRjX2hlbHBlcl9hdG9taWNfZmx1c2goc3RydWN0IGRybV9jcnRjICpjcnRjLA0K PiANCj4+wqDCoCDCoMKgwqDCoMKgwqDCoCDCoCovDQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDC oMKgIGlmIChvbGRfYXN0X2NydGNfc3RhdGUtPmZvcm1hdCAhPSBhc3RfY3J0Y19zdGF0ZS0+ Zm9ybWF0KQ0KPiANCj4+wqDCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0 X2NydGNfbG9hZF9sdXQoYXN0LCBjcnRjKTsNCj4gDQo+PiArDQo+IA0KPj4gK8KgwqAgLy9T ZXQgQXNwZWVkIERpc3BsYXktUG9ydA0KPiANCj4+ICvCoMKgIGlmIChhc3QtPnR4X2NoaXBf dHlwZSA9PSBBU1RfVFhfQVNURFApDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGFz dF9kcF9zZXRfbW9kZShjcnRjLCB2Ymlvc19tb2RlX2luZm8pOw0KPiANCj4+wqDCoCB9DQo+ IA0KPj4gDQo+IA0KPj7CoMKgIHN0YXRpYyB2b2lkDQo+IA0KPj4gQEAgLTE1MjcsNiArMTU1 Miw5MyBAQCBzdGF0aWMgaW50IGFzdF9kcDUwMV9vdXRwdXRfaW5pdChzdHJ1Y3QgYXN0X3By aXZhdGUgKmFzdCkNCj4gDQo+PsKgwqAgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7DQo+IA0K Pj7CoMKgIH0NCj4gDQo+PiANCj4gDQo+PiArLyoNCj4gDQo+PiArICogQVNQRUVEIERpc3Bs YXktUG9ydCBDb25uZWN0b3INCj4gDQo+PiArICovDQo+IA0KPj4gKw0KPiANCj4+ICtzdGF0 aWMgaW50IGFzdF9hc3RkcF9jb25uZWN0b3JfaGVscGVyX2dldF9tb2RlcyhzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcg0KPiANCj4+ICsqY29ubmVjdG9yKSB7DQo+IA0KPj4gK8KgwqAgdm9pZCAq ZWRpZDsNCj4gDQo+PiArDQo+IA0KPj4gK8KgwqAgaW50IHN1Y2M7DQo+IA0KPj4gK8KgwqAg aW50IGNvdW50Ow0KPiANCj4+ICsNCj4gDQo+PiArwqDCoCBlZGlkID0ga21hbGxvYyhFRElE X0xFTkdUSCwgR0ZQX0tFUk5FTCk7DQo+IA0KPj4gK8KgwqAgaWYgKCFlZGlkKQ0KPiANCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGVycl9kcm1fY29ubmVjdG9yX3VwZGF0ZV9l ZGlkX3Byb3BlcnR5Ow0KPiANCj4+ICsNCj4gDQo+PiArwqDCoCBzdWNjID0gYXN0X2FzdGRw X3JlYWRfZWRpZChjb25uZWN0b3ItPmRldiwgZWRpZCk7DQo+IA0KPj4gK8KgwqAgaWYgKHN1 Y2MgPCAwKQ0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGVycl9rZnJlZTsN Cj4gDQo+PiArDQo+IA0KPj4gK8KgwqAgZHJtX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9w ZXJ0eShjb25uZWN0b3IsIGVkaWQpOw0KPiANCj4+ICvCoMKgIGNvdW50ID0gZHJtX2FkZF9l ZGlkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7DQo+IA0KPj4gK8KgwqAga2ZyZWUoZWRpZCk7 DQo+IA0KPj4gKw0KPiANCj4+ICvCoMKgIHJldHVybiBjb3VudDsNCj4gDQo+PiArDQo+IA0K Pj4gK2Vycl9rZnJlZToNCj4gDQo+PiArwqDCoCBrZnJlZShlZGlkKTsNCj4gDQo+PiArZXJy X2RybV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHk6DQo+IA0KPj4gK8KgwqAgZHJt X2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsIE5VTEwpOw0KPiAN Cj4+ICvCoMKgIHJldHVybiAwOw0KPiANCj4+ICt9DQo+IA0KPj4gKw0KPiANCj4+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIGFzdF9hc3RkcF9j b25uZWN0b3JfaGVscGVyX2Z1bmNzID0gew0KPiANCj4+ICvCoMKgIC5nZXRfbW9kZXMgPSBh c3RfYXN0ZHBfY29ubmVjdG9yX2hlbHBlcl9nZXRfbW9kZXMsDQo+IA0KPj4gK307DQo+IA0K Pj4gKw0KPiANCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3Mg YXN0X2FzdGRwX2Nvbm5lY3Rvcl9mdW5jcyA9IHsNCj4gDQo+PiArwqDCoCAucmVzZXQgPSBk cm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsDQo+IA0KPj4gK8KgwqAgLmZpbGxf bW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsDQo+IA0K Pj4gK8KgwqAgLmRlc3Ryb3kgPSBkcm1fY29ubmVjdG9yX2NsZWFudXAsDQo+IA0KPj4gK8Kg wqAgLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0 b3JfZHVwbGljYXRlX3N0YXRlLA0KPiANCj4+ICvCoMKgIC5hdG9taWNfZGVzdHJveV9zdGF0 ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLA0KPiANCj4+ ICt9Ow0KPiANCj4+ICsNCj4gDQo+PiArc3RhdGljIGludCBhc3RfYXN0ZHBfY29ubmVjdG9y X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0DQo+IA0KPj4gK2RybV9jb25u ZWN0b3IgKmNvbm5lY3Rvcikgew0KPiANCj4+ICvCoMKgIGludCByZXQ7DQo+IA0KPj4gKw0K PiANCj4+ICvCoMKgIHJldCA9IGRybV9jb25uZWN0b3JfaW5pdChkZXYsIGNvbm5lY3Rvciwg JmFzdF9hc3RkcF9jb25uZWN0b3JfZnVuY3MsDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRFJNX01PREVfQ09OTkVDVE9S X0Rpc3BsYXlQb3J0KTsNCj4gDQo+PiArwqDCoCBpZiAocmV0KQ0KPiANCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Ow0KPiANCj4+ICsNCj4gDQo+PiArwqDCoCBkcm1f Y29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVjdG9yLA0KPiANCj4+ICsmYXN0X2FzdGRwX2Nv bm5lY3Rvcl9oZWxwZXJfZnVuY3MpOw0KPiANCj4+ICsNCj4gDQo+PiArwqDCoCBjb25uZWN0 b3ItPmludGVybGFjZV9hbGxvd2VkID0gMDsNCj4gDQo+PiArwqDCoCBjb25uZWN0b3ItPmRv dWJsZXNjYW5fYWxsb3dlZCA9IDA7DQo+IA0KPj4gKw0KPiANCj4+ICvCoMKgIGNvbm5lY3Rv ci0+cG9sbGVkID0gRFJNX0NPTk5FQ1RPUl9QT0xMX0NPTk5FQ1Q7DQo+IA0KPj4gKw0KPiAN Cj4+ICvCoMKgIHJldHVybiAwOw0KPiANCj4+ICt9DQo+IA0KPj4gKw0KPiANCj4+ICtzdGF0 aWMgaW50IGFzdF9hc3RkcF9vdXRwdXRfaW5pdChzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCkg ew0KPiANCj4+ICvCoMKgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmYXN0LT5iYXNlOw0K PiANCj4+ICvCoMKgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZhc3QtPmNydGM7DQo+IA0K Pj4gK8KgwqAgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gJmFzdC0+b3V0cHV0LmFz dGRwLmVuY29kZXI7DQo+IA0KPj4gK8KgwqAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciA9ICZhc3QtPm91dHB1dC5hc3RkcC5jb25uZWN0b3I7DQo+IA0KPj4gK8KgwqAgaW50 IHJldDsNCj4gDQo+PiArDQo+IA0KPj4gK8KgwqAgcmV0ID0gZHJtX3NpbXBsZV9lbmNvZGVy X2luaXQoZGV2LCBlbmNvZGVyLCBEUk1fTU9ERV9FTkNPREVSX1RNRFMpOw0KPiANCj4+ICvC oMKgIGlmIChyZXQpDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7 DQo+IA0KPj4gK8KgwqAgZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSBkcm1fY3J0Y19tYXNr KGNydGMpOw0KPiANCj4+ICsNCj4gDQo+PiArwqDCoCByZXQgPSBhc3RfYXN0ZHBfY29ubmVj dG9yX2luaXQoZGV2LCBjb25uZWN0b3IpOw0KPiANCj4+ICvCoMKgIGlmIChyZXQpDQo+IA0K Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7DQo+IA0KPj4gKw0KPiANCj4+ ICvCoMKgIHJldCA9IGRybV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubmVjdG9yLCBl bmNvZGVyKTsNCj4gDQo+PiArwqDCoCBpZiAocmV0KQ0KPiANCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gcmV0Ow0KPiANCj4+ICsNCj4gDQo+PiArwqDCoCByZXR1cm4gMDsN Cj4gDQo+PiArfQ0KPiANCj4+ICsNCj4gDQo+PsKgwqAgLyoNCj4gDQo+PsKgwqDCoCAqIE1v ZGUgY29uZmlnDQo+IA0KPj7CoMKgwqAgKi8NCj4gDQo+PiBAQCAtMTU2Myw3ICsxNjc1LDgg QEAgaW50IGFzdF9tb2RlX2NvbmZpZ19pbml0KHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0KQ0K PiANCj4+wqDCoCDCoMKgwqDCoMKgwqDCoCDCoMKgwqDCoGFzdC0+Y2hpcCA9PSBBU1QyMjAw IHx8DQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgIMKgwqDCoMKgYXN0LT5jaGlwID09IEFT VDIzMDAgfHwNCj4gDQo+PsKgwqAgwqDCoMKgwqDCoMKgwqAgwqDCoMKgwqBhc3QtPmNoaXAg PT0gQVNUMjQwMCB8fA0KPiANCj4+IC3CoMKgwqAgwqDCoMKgIGFzdC0+Y2hpcCA9PSBBU1Qy NTAwKSB7DQo+IA0KPj4gK8KgwqAgwqDCoMKgIGFzdC0+Y2hpcCA9PSBBU1QyNTAwIHx8DQo+ IA0KPj4gK8KgwqAgwqDCoMKgIGFzdC0+Y2hpcCA9PSBBU1QyNjAwKSB7DQo+IA0KPj7CoMKg IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXYtPm1vZGVfY29uZmlnLm1heF93 aWR0aCA9IDE5MjA7DQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSAyMDQ4Ow0KPiANCj4+wqDCoCDCoMKg wqDCoMKgwqDCoCB9IGVsc2Ugew0KPiANCj4+IEBAIC0xNTk0LDYgKzE3MDcsOSBAQCBpbnQg YXN0X21vZGVfY29uZmlnX2luaXQoc3RydWN0IGFzdF9wcml2YXRlICphc3QpDQo+IA0KPj7C oMKgIMKgwqDCoMKgwqDCoMKgIGNhc2UgQVNUX1RYX0RQNTAxOg0KPiANCj4+wqDCoCDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gYXN0X2RwNTAxX291dHB1dF9pbml0 KGFzdCk7DQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVh azsNCj4gDQo+PiArwqDCoCBjYXNlIEFTVF9UWF9BU1REUDoNCj4gDQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0ID0gYXN0X2FzdGRwX291dHB1dF9pbml0KGFzdCk7DQo+IA0KPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOw0KPiANCj4+wqDCoCDCoMKgwqDCoMKgwqDC oCB9DQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgIGlmIChyZXQpDQo+IA0KPj7CoMKgIMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Ow0KPiANCj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9wb3N0LmMNCj4gDQo+PiBiL2RyaXZl cnMvZ3B1L2RybS9hc3QvYXN0X3Bvc3QuYyBpbmRleCBiNWQ5MmY2NTIuLjBhYTljZjBmYiAx MDA2NDQNCj4gDQo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9wb3N0LmMNCj4g DQo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9wb3N0LmMNCj4gDQo+PiBAQCAt Mzc5LDcgKzM3OSw5IEBAIHZvaWQgYXN0X3Bvc3RfZ3B1KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpDQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgIGFzdF9lbmFibGVfbW1pbyhkZXYpOw0K PiANCj4+wqDCoCDCoMKgwqDCoMKgwqDCoCBhc3Rfc2V0X2RlZl9leHRfcmVnKGRldik7DQo+ IA0KPj4gDQo+IA0KPj4gLcKgwqDCoCBpZiAoYXN0LT5jb25maWdfbW9kZSA9PSBhc3RfdXNl X3AyYSkgew0KPiANCj4+ICvCoMKgIGlmIChhc3QtPmNoaXAgPT0gQVNUMjYwMCkgew0KPiAN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3RfZHBfbGF1bmNoKGRldiwgMSk7DQo+IA0K Pj4gK8KgwqAgfSBlbHNlIGlmIChhc3QtPmNvbmZpZ19tb2RlID09IGFzdF91c2VfcDJhKSB7 DQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYXN0LT5j aGlwID09IEFTVDI1MDApDQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0X3Bvc3RfY2hpcF8yNTAwKGRldik7DQo+IA0KPj7C oMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbHNlIGlmIChhc3QtPmNoaXAg PT0gQVNUMjMwMCB8fCBhc3QtPmNoaXAgPT0gQVNUMjQwMCkNCj4gDQo+PiANCj4gDQo+PiBi YXNlLWNvbW1pdDogYzU0YjM5YTU2NTIyNzUzOGM1MmVhZDIzNDllYjE3ZDU0YWFkZDZmNw0K PiANCj4+IC0tDQo+IA0KPj4gMi4yNy4wDQo+IA0KPj4gDQo+IA0KPiAtLQ0KPiANCj4gVGhv bWFzIFppbW1lcm1hbm4NCj4gDQo+IEdyYXBoaWNzIERyaXZlciBEZXZlbG9wZXINCj4gDQo+ IFNVU0UgU29mdHdhcmUgU29sdXRpb25zIEdlcm1hbnkgR21iSA0KPiANCj4gTWF4ZmVsZHN0 ci4gNSwgOTA0MDkgTsO8cm5iZXJnLCBHZXJtYW55DQo+IA0KPiAoSFJCIDM2ODA5LCBBRyBO w7xybmJlcmcpDQo+IA0KPiBHZXNjaMOkZnRzZsO8aHJlcjogSXZvIFRvdGV2DQo+IA0KDQot LSANClRob21hcyBaaW1tZXJtYW5uDQpHcmFwaGljcyBEcml2ZXIgRGV2ZWxvcGVyDQpTVVNF IFNvZnR3YXJlIFNvbHV0aW9ucyBHZXJtYW55IEdtYkgNCk1heGZlbGRzdHIuIDUsIDkwNDA5 IE7DvHJuYmVyZywgR2VybWFueQ0KKEhSQiAzNjgwOSwgQUcgTsO8cm5iZXJnKQ0KR2VzY2jD pGZ0c2bDvGhyZXI6IEl2byBUb3Rldg0K --------------vT06bpKU206MwnV2Bm90cz3F-- --------------aEJMLD5eyd0lZMXSKHCKKW7F Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- wsF5BAABCAAjFiEExndm/fpuMUdwYFFolh/E3EQov+AFAmJ6RNEFAwAAAAAACgkQlh/E3EQov+CQ pxAAhoXGJanBNWEU/TwSU+rfgGSOC2xUptUMJgAnyfv6DhkrF2Py3wZsu4wlpAjDmKTW4w8c0zX0 c5DLrPHVoF3pWjSFHmlabd3hSRKs4jmvR0m/B1nO19CcnfUUOdgROagpRwe5G7uK69E4Gn4AXk0V MBGwk3MCsKWY78Qs6tY2+QcxNYO/YSo4l59lfPvLMDXgXdBW0CZ3dHDOc2B225xn70ULiyRzk3ji Kux6XzAcESxSCEDfr8gBiAMmuftLeWDLJchoooj8+Xri9DKATKFZuTZCkSMGwiCiA8gCeA6SivkV 1WRvwK7qItWdyKGUy5NZbRWwjZmMU6RmBMAsXHEbMiloQoe4R/s/hMapWx/gDQu+2w82l6hg8wv6 C8YNbfZc8vFiyvUGxRVGGkibnwMrzkPUR5yVN8iJmj+yMPmxr6rlEeqNZq79RX3Ir/Vp7ViLAH6K gdA8rgcRBqAICvzva6wjhIL3sYRmDf9/j4fVVEPwv1E9IH4Bokd/UmXNnXvYMRYt6f414ExbMpMm hZzQcTsZA9XUBFTPV6RXT8OcyiCNkOLYrwNwyWs2W7WnJ2XMcxGO3cRVIDbQ+lLIoXMDh5cHXe2r XMo6UAF7BpJX/Aup0ybugE70zdVmeJagvBksLUudiua6Eq4GPOg41zTxEwmWxVusaNcLKT8T7B5Q pAc= =/j1M -----END PGP SIGNATURE----- --------------aEJMLD5eyd0lZMXSKHCKKW7F--