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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 287E4C433EF for ; Wed, 13 Apr 2022 05:55:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232644AbiDMF50 (ORCPT ); Wed, 13 Apr 2022 01:57:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57580 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232623AbiDMF5V (ORCPT ); Wed, 13 Apr 2022 01:57:21 -0400 Received: from desiato.infradead.org (desiato.infradead.org [IPv6:2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E48EA31914; Tue, 12 Apr 2022 22:54:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:Content-Type :In-Reply-To:From:References:Cc:To:Subject:MIME-Version:Date:Message-ID: Sender:Reply-To:Content-ID:Content-Description; bh=PJpELrfEfQuWZjKbDkypA6zC2kpPZACj1HWhDFACoP0=; b=QxThprG+Na/yFzeP7m3gSXB7A8 IzoB7l2NbMz9OvDC8mIwBmAvP7syGps1+G03nviB3zx/04zO+khkTqlQXhSZBfxmKlEgP/XH5cZHJ NGf5rHJKbZMulufWM2wsGaSgbyCPziPUCiJ56DSWqPxh1oF2/hPgm/kOvXyFZUbtmYnboJ9JhSvr/ S8dW204z9M2bvH0CuXLQi1++c9TQQaNGNTHI7Xx2Dm+RwcyfhW9pVBTw1fW2uhNFjOItNy78fc5oV 4oXy9qMIzjYuv4uL10MRtyeg8x03ORao7Tmreky7S2IlpykSZhWAAYdV1sJFUl8R0AnvKbPm+rrcn 4UYaMRWw==; Received: from [2601:1c0:6280:3f0::aa0b] by desiato.infradead.org with esmtpsa (Exim 4.94.2 #2 (Red Hat Linux)) id 1neVxe-004YiF-N5; Wed, 13 Apr 2022 05:54:40 +0000 Message-ID: <4c6b3445-78b2-090f-c7c9-291d49c45019@infradead.org> Date: Tue, 12 Apr 2022 22:54:30 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.8.0 Subject: Re: [PATCH RESEND 1/1] lib/Kconfig: remove DEBUG_PER_CPU_MAPS dependency for CPUMASK_OFFSTACK Content-Language: en-US To: Libo Chen , gregkh@linuxfoundation.org, masahiroy@kernel.org, tglx@linutronix.de, peterz@infradead.org, mingo@kernel.org, vbabka@suse.cz, akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, linux-kbuild@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-arch@vger.kernel.org References: <20220412231508.32629-1-libo.chen@oracle.com> <20220412231508.32629-2-libo.chen@oracle.com> <157cb46a-d134-2e72-4a65-14e378dd2b8e@oracle.com> <26855467-107d-4ba1-4f32-2afd5918d5b7@infradead.org> From: Randy Dunlap In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Libo, On 4/12/22 19:34, Libo Chen wrote: > > > On 4/12/22 19:13, Randy Dunlap wrote: >> Hi, >> >> On 4/12/22 18:35, Libo Chen wrote: >>> Hi Randy, >>> >>> On 4/12/22 17:18, Randy Dunlap wrote: >>>> Hi-- >>>> >>>> On 4/12/22 16:15, Libo Chen wrote: >>>>> Forcing CPUMASK_OFFSTACK to be conditoned on DEBUG_PER_CPU_MAPS doesn't >>>>> make a lot of sense nowaday. Even the original patch dating back to 2008, >>>>> aab46da0520a ("cpumask: Add CONFIG_CPUMASK_OFFSTACK") didn't give any >>>>> rationale for such dependency. >>>>> >>>>> Nowhere in the code supports the presumption that DEBUG_PER_CPU_MAPS is >>>>> necessary for CONFIG_CPUMASK_OFFSTACK. Make no mistake, it's good to >>>>> have DEBUG_PER_CPU_MAPS for debugging purpose or precaution, but it's >>>>> simply not a hard requirement for CPUMASK_OFFSTACK. Moreover, x86 Kconfig >>>>> already can set CPUMASK_OFFSTACK=y without DEBUG_PER_CPU_MAPS=y. >>>>> There is no reason other architectures cannot given the fact that they >>>>> have even fewer, if any, arch-specific CONFIG_DEBUG_PER_CPU_MAPS code than >>>>> x86. >>>>> >>>>> Signed-off-by: Libo Chen >>>>> --- >>>>>    lib/Kconfig | 2 +- >>>>>    1 file changed, 1 insertion(+), 1 deletion(-) >>>>> >>>>> diff --git a/lib/Kconfig b/lib/Kconfig >>>>> index 087e06b4cdfd..7209039dfb59 100644 >>>>> --- a/lib/Kconfig >>>>> +++ b/lib/Kconfig >>>>> @@ -511,7 +511,7 @@ config CHECK_SIGNATURE >>>>>        bool >>>>>      config CPUMASK_OFFSTACK >>>>> -    bool "Force CPU masks off stack" if DEBUG_PER_CPU_MAPS >>>> This "if" dependency only controls whether the Kconfig symbol's prompt is >>>> displayed (presented) in kconfig tools. Removing it makes the prompt always >>>> be displayed. >>>> >>>> Any architecture could select (should be able to) CPUMASK_OFFSTACK independently >>>> of DEBUG_PER_CPU_MAPS. >>> Do you mean changing arch/xxxx/Kconfig to select CPUMASK_OFFSTACK under some config xxx? That will work but it requires code changes for each architecture. >>> But if you are talking about setting CONFIG_CPUMASK_OFFSTACK=y without CONFIG_DEBUG_PER_CPU_MAPS directly in config file, I have tried, it doesn't work. >> I'm just talking about the Kconfig change below.  Not talking about whatever else >> it might require per architecture. >> >> But you say you have tried that and it doesn't work. What part of it doesn't work? >> The Kconfig part or some code execution? > oh the Kconfig part. For example, make olddefconfig on a config file with CPUMASK_OFFSTACK=y only turns off CPUMASK_OFFSTACK unless I explicitly set DEBUG_PER_CPU_MAPS=y I can enable CPUMASK_OFFSTACK for arm64 without having DEBUG_PER_CPU_MAPS enabled. (with a patch, of course.) It builds OK. I don't know if it will run OK. I think that you are arguing for a patch like this: --- a/lib/Kconfig +++ b/lib/Kconfig @@ -511,7 +511,8 @@ config CHECK_SIGNATURE bool config CPUMASK_OFFSTACK - bool "Force CPU masks off stack" if DEBUG_PER_CPU_MAPS + bool "Force CPU masks off stack" + depends on DEBUG_PER_CPU_MAPS help Use dynamic allocation for cpumask_var_t, instead of putting them on the stack. This is a bit more expensive, but avoids As I said earlier, the "if" on the "bool" line just controls the prompt message. This patch make CPUMASK_OFFSTACK require DEBUG_PER_CPU_MAPS -- which might be overkill. > Libo >> I'll test the Kconfig part of it later (in a few hours). >> >>> Libo >>>> Is there another problem here? >>>> >>>>> +    bool "Force CPU masks off stack" >>>>>        help >>>>>          Use dynamic allocation for cpumask_var_t, instead of putting >>>>>          them on the stack.  This is a bit more expensive, but avoids > -- ~Randy 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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2037BC433EF for ; Wed, 13 Apr 2022 05:56:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=gglT6jLT/lnkaj8bDuLv7TZb/ZwVu0b/zcehbw/TILU=; b=GjWOTubUyOdpir mztOe3otC7oiPw9/BqtJH2g3qnqgtKkZNTM+TjQh4Rmsav0cXusWsLswG1u3YkvY0FvJgaB3sL1/S P1O96n8gc2sRi6dDXCHQBljBDtUBo4oeT2P+NGngvtSEEWPopBIe1TKvv726U/zVKYHt0+zS5xAsx jnkLi0SS0UaNpAcxdHD/HSMIExgHoM+ApIn56cRiJ9oBa187W8outX3ofQ1zOSTVV4hJPDBrpfF8t 3L6bEdh/KCan6xrOo1MdFb3U2eeCUfY8bqU3pX4+2XRduEAm45nlKQeN51Or2M05No8Dqkg6Kkwjy 305u5MBdl2nn3yYfnFRA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1neVxq-00Gv1K-OX; Wed, 13 Apr 2022 05:54:50 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1neVxo-00Gv0p-Rd for linux-arm-kernel@bombadil.infradead.org; Wed, 13 Apr 2022 05:54:48 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:Content-Type :In-Reply-To:From:References:Cc:To:Subject:MIME-Version:Date:Message-ID: Sender:Reply-To:Content-ID:Content-Description; bh=PJpELrfEfQuWZjKbDkypA6zC2kpPZACj1HWhDFACoP0=; b=QxThprG+Na/yFzeP7m3gSXB7A8 IzoB7l2NbMz9OvDC8mIwBmAvP7syGps1+G03nviB3zx/04zO+khkTqlQXhSZBfxmKlEgP/XH5cZHJ NGf5rHJKbZMulufWM2wsGaSgbyCPziPUCiJ56DSWqPxh1oF2/hPgm/kOvXyFZUbtmYnboJ9JhSvr/ S8dW204z9M2bvH0CuXLQi1++c9TQQaNGNTHI7Xx2Dm+RwcyfhW9pVBTw1fW2uhNFjOItNy78fc5oV 4oXy9qMIzjYuv4uL10MRtyeg8x03ORao7Tmreky7S2IlpykSZhWAAYdV1sJFUl8R0AnvKbPm+rrcn 4UYaMRWw==; Received: from [2601:1c0:6280:3f0::aa0b] by desiato.infradead.org with esmtpsa (Exim 4.94.2 #2 (Red Hat Linux)) id 1neVxe-004YiF-N5; Wed, 13 Apr 2022 05:54:40 +0000 Message-ID: <4c6b3445-78b2-090f-c7c9-291d49c45019@infradead.org> Date: Tue, 12 Apr 2022 22:54:30 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.8.0 Subject: Re: [PATCH RESEND 1/1] lib/Kconfig: remove DEBUG_PER_CPU_MAPS dependency for CPUMASK_OFFSTACK Content-Language: en-US To: Libo Chen , gregkh@linuxfoundation.org, masahiroy@kernel.org, tglx@linutronix.de, peterz@infradead.org, mingo@kernel.org, vbabka@suse.cz, akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, linux-kbuild@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-arch@vger.kernel.org References: <20220412231508.32629-1-libo.chen@oracle.com> <20220412231508.32629-2-libo.chen@oracle.com> <157cb46a-d134-2e72-4a65-14e378dd2b8e@oracle.com> <26855467-107d-4ba1-4f32-2afd5918d5b7@infradead.org> From: Randy Dunlap In-Reply-To: X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgTGlibywKCk9uIDQvMTIvMjIgMTk6MzQsIExpYm8gQ2hlbiB3cm90ZToKPiAKPiAKPiBPbiA0 LzEyLzIyIDE5OjEzLCBSYW5keSBEdW5sYXAgd3JvdGU6Cj4+IEhpLAo+Pgo+PiBPbiA0LzEyLzIy IDE4OjM1LCBMaWJvIENoZW4gd3JvdGU6Cj4+PiBIaSBSYW5keSwKPj4+Cj4+PiBPbiA0LzEyLzIy IDE3OjE4LCBSYW5keSBEdW5sYXAgd3JvdGU6Cj4+Pj4gSGktLQo+Pj4+Cj4+Pj4gT24gNC8xMi8y MiAxNjoxNSwgTGlibyBDaGVuIHdyb3RlOgo+Pj4+PiBGb3JjaW5nIENQVU1BU0tfT0ZGU1RBQ0sg dG8gYmUgY29uZGl0b25lZCBvbiBERUJVR19QRVJfQ1BVX01BUFMgZG9lc24ndAo+Pj4+PiBtYWtl IGEgbG90IG9mIHNlbnNlIG5vd2FkYXkuIEV2ZW4gdGhlIG9yaWdpbmFsIHBhdGNoIGRhdGluZyBi YWNrIHRvIDIwMDgsCj4+Pj4+IGFhYjQ2ZGEwNTIwYSAoImNwdW1hc2s6IEFkZCBDT05GSUdfQ1BV TUFTS19PRkZTVEFDSyIpIGRpZG4ndCBnaXZlIGFueQo+Pj4+PiByYXRpb25hbGUgZm9yIHN1Y2gg ZGVwZW5kZW5jeS4KPj4+Pj4KPj4+Pj4gTm93aGVyZSBpbiB0aGUgY29kZSBzdXBwb3J0cyB0aGUg cHJlc3VtcHRpb24gdGhhdCBERUJVR19QRVJfQ1BVX01BUFMgaXMKPj4+Pj4gbmVjZXNzYXJ5IGZv ciBDT05GSUdfQ1BVTUFTS19PRkZTVEFDSy4gTWFrZSBubyBtaXN0YWtlLCBpdCdzIGdvb2QgdG8K Pj4+Pj4gaGF2ZSBERUJVR19QRVJfQ1BVX01BUFMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlIG9yIHBy ZWNhdXRpb24sIGJ1dCBpdCdzCj4+Pj4+IHNpbXBseSBub3QgYSBoYXJkIHJlcXVpcmVtZW50IGZv ciBDUFVNQVNLX09GRlNUQUNLLiBNb3Jlb3ZlciwgeDg2IEtjb25maWcKPj4+Pj4gYWxyZWFkeSBj YW4gc2V0IENQVU1BU0tfT0ZGU1RBQ0s9eSB3aXRob3V0IERFQlVHX1BFUl9DUFVfTUFQUz15Lgo+ Pj4+PiBUaGVyZSBpcyBubyByZWFzb24gb3RoZXIgYXJjaGl0ZWN0dXJlcyBjYW5ub3QgZ2l2ZW4g dGhlIGZhY3QgdGhhdCB0aGV5Cj4+Pj4+IGhhdmUgZXZlbiBmZXdlciwgaWYgYW55LCBhcmNoLXNw ZWNpZmljIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMgY29kZSB0aGFuCj4+Pj4+IHg4Ni4KPj4+ Pj4KPj4+Pj4gU2lnbmVkLW9mZi1ieTogTGlibyBDaGVuIDxsaWJvLmNoZW5Ab3JhY2xlLmNvbT4K Pj4+Pj4gLS0tCj4+Pj4+IMKgwqAgbGliL0tjb25maWcgfCAyICstCj4+Pj4+IMKgwqAgMSBmaWxl IGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCj4+Pj4+Cj4+Pj4+IGRpZmYg LS1naXQgYS9saWIvS2NvbmZpZyBiL2xpYi9LY29uZmlnCj4+Pj4+IGluZGV4IDA4N2UwNmI0Y2Rm ZC4uNzIwOTAzOWRmYjU5IDEwMDY0NAo+Pj4+PiAtLS0gYS9saWIvS2NvbmZpZwo+Pj4+PiArKysg Yi9saWIvS2NvbmZpZwo+Pj4+PiBAQCAtNTExLDcgKzUxMSw3IEBAIGNvbmZpZyBDSEVDS19TSUdO QVRVUkUKPj4+Pj4gwqDCoMKgwqDCoMKgIGJvb2wKPj4+Pj4gwqDCoCDCoCBjb25maWcgQ1BVTUFT S19PRkZTVEFDSwo+Pj4+PiAtwqDCoMKgIGJvb2wgIkZvcmNlIENQVSBtYXNrcyBvZmYgc3RhY2si IGlmIERFQlVHX1BFUl9DUFVfTUFQUwo+Pj4+IFRoaXMgImlmIiBkZXBlbmRlbmN5IG9ubHkgY29u dHJvbHMgd2hldGhlciB0aGUgS2NvbmZpZyBzeW1ib2wncyBwcm9tcHQgaXMKPj4+PiBkaXNwbGF5 ZWQgKHByZXNlbnRlZCkgaW4ga2NvbmZpZyB0b29scy4gUmVtb3ZpbmcgaXQgbWFrZXMgdGhlIHBy b21wdCBhbHdheXMKPj4+PiBiZSBkaXNwbGF5ZWQuCj4+Pj4KPj4+PiBBbnkgYXJjaGl0ZWN0dXJl IGNvdWxkIHNlbGVjdCAoc2hvdWxkIGJlIGFibGUgdG8pIENQVU1BU0tfT0ZGU1RBQ0sgaW5kZXBl bmRlbnRseQo+Pj4+IG9mIERFQlVHX1BFUl9DUFVfTUFQUy4KPj4+IERvIHlvdSBtZWFuIGNoYW5n aW5nIGFyY2gveHh4eC9LY29uZmlnIHRvIHNlbGVjdCBDUFVNQVNLX09GRlNUQUNLIHVuZGVyIHNv bWUgY29uZmlnIHh4eD8gVGhhdCB3aWxsIHdvcmsgYnV0IGl0IHJlcXVpcmVzIGNvZGUgY2hhbmdl cyBmb3IgZWFjaCBhcmNoaXRlY3R1cmUuCj4+PiBCdXQgaWYgeW91IGFyZSB0YWxraW5nIGFib3V0 IHNldHRpbmcgQ09ORklHX0NQVU1BU0tfT0ZGU1RBQ0s9eSB3aXRob3V0IENPTkZJR19ERUJVR19Q RVJfQ1BVX01BUFMgZGlyZWN0bHkgaW4gY29uZmlnIGZpbGUsIEkgaGF2ZSB0cmllZCwgaXQgZG9l c24ndCB3b3JrLgo+PiBJJ20ganVzdCB0YWxraW5nIGFib3V0IHRoZSBLY29uZmlnIGNoYW5nZSBi ZWxvdy7CoCBOb3QgdGFsa2luZyBhYm91dCB3aGF0ZXZlciBlbHNlCj4+IGl0IG1pZ2h0IHJlcXVp cmUgcGVyIGFyY2hpdGVjdHVyZS4KPj4KPj4gQnV0IHlvdSBzYXkgeW91IGhhdmUgdHJpZWQgdGhh dCBhbmQgaXQgZG9lc24ndCB3b3JrLiBXaGF0IHBhcnQgb2YgaXQgZG9lc24ndCB3b3JrPwo+PiBU aGUgS2NvbmZpZyBwYXJ0IG9yIHNvbWUgY29kZSBleGVjdXRpb24/Cj4gb2ggdGhlIEtjb25maWcg cGFydC4gRm9yIGV4YW1wbGUsIG1ha2Ugb2xkZGVmY29uZmlnIG9uIGEgY29uZmlnIGZpbGUgd2l0 aCBDUFVNQVNLX09GRlNUQUNLPXkgb25seSB0dXJucyBvZmYgQ1BVTUFTS19PRkZTVEFDSyB1bmxl c3MgSSBleHBsaWNpdGx5IHNldCBERUJVR19QRVJfQ1BVX01BUFM9eQoKSSBjYW4gZW5hYmxlIENQ VU1BU0tfT0ZGU1RBQ0sgZm9yIGFybTY0IHdpdGhvdXQgaGF2aW5nIERFQlVHX1BFUl9DUFVfTUFQ UyBlbmFibGVkLgood2l0aCBhIHBhdGNoLCBvZiBjb3Vyc2UuKQpJdCBidWlsZHMgT0suIEkgZG9u J3Qga25vdyBpZiBpdCB3aWxsIHJ1biBPSy4KCkkgdGhpbmsgdGhhdCB5b3UgYXJlIGFyZ3Vpbmcg Zm9yIGEgcGF0Y2ggbGlrZSB0aGlzOgoKLS0tIGEvbGliL0tjb25maWcKKysrIGIvbGliL0tjb25m aWcKQEAgLTUxMSw3ICs1MTEsOCBAQCBjb25maWcgQ0hFQ0tfU0lHTkFUVVJFCiAJYm9vbAogCiBj b25maWcgQ1BVTUFTS19PRkZTVEFDSwotCWJvb2wgIkZvcmNlIENQVSBtYXNrcyBvZmYgc3RhY2si IGlmIERFQlVHX1BFUl9DUFVfTUFQUworCWJvb2wgIkZvcmNlIENQVSBtYXNrcyBvZmYgc3RhY2si CisJZGVwZW5kcyBvbiBERUJVR19QRVJfQ1BVX01BUFMKIAloZWxwCiAJICBVc2UgZHluYW1pYyBh bGxvY2F0aW9uIGZvciBjcHVtYXNrX3Zhcl90LCBpbnN0ZWFkIG9mIHB1dHRpbmcKIAkgIHRoZW0g b24gdGhlIHN0YWNrLiAgVGhpcyBpcyBhIGJpdCBtb3JlIGV4cGVuc2l2ZSwgYnV0IGF2b2lkcwoK CkFzIEkgc2FpZCBlYXJsaWVyLCB0aGUgImlmIiBvbiB0aGUgImJvb2wiIGxpbmUganVzdCBjb250 cm9scyB0aGUgcHJvbXB0IG1lc3NhZ2UuClRoaXMgcGF0Y2ggbWFrZSBDUFVNQVNLX09GRlNUQUNL IHJlcXVpcmUgREVCVUdfUEVSX0NQVV9NQVBTIC0tIHdoaWNoIG1pZ2h0IGJlIG92ZXJraWxsLgoK Cj4gTGlibwo+PiBJJ2xsIHRlc3QgdGhlIEtjb25maWcgcGFydCBvZiBpdCBsYXRlciAoaW4gYSBm ZXcgaG91cnMpLgo+Pgo+Pj4gTGlibwo+Pj4+IElzIHRoZXJlIGFub3RoZXIgcHJvYmxlbSBoZXJl Pwo+Pj4+Cj4+Pj4+ICvCoMKgwqAgYm9vbCAiRm9yY2UgQ1BVIG1hc2tzIG9mZiBzdGFjayIKPj4+ Pj4gwqDCoMKgwqDCoMKgIGhlbHAKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCBVc2UgZHluYW1pYyBh bGxvY2F0aW9uIGZvciBjcHVtYXNrX3Zhcl90LCBpbnN0ZWFkIG9mIHB1dHRpbmcKPj4+Pj4gwqDC oMKgwqDCoMKgwqDCoCB0aGVtIG9uIHRoZSBzdGFjay7CoCBUaGlzIGlzIGEgYml0IG1vcmUgZXhw ZW5zaXZlLCBidXQgYXZvaWRzCj4gCgotLSAKflJhbmR5CgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdAps aW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVh ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==