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=-5.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FSL_HELO_FAKE,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=no 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 B8EA9C433EF for ; Thu, 23 Sep 2021 14:19:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A2CA460527 for ; Thu, 23 Sep 2021 14:19:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241624AbhIWOUa (ORCPT ); Thu, 23 Sep 2021 10:20:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45684 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241613AbhIWOUY (ORCPT ); Thu, 23 Sep 2021 10:20:24 -0400 Received: from mail-wr1-x42b.google.com (mail-wr1-x42b.google.com [IPv6:2a00:1450:4864:20::42b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2EA6DC061757 for ; Thu, 23 Sep 2021 07:18:53 -0700 (PDT) Received: by mail-wr1-x42b.google.com with SMTP id d6so17566797wrc.11 for ; Thu, 23 Sep 2021 07:18:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=lWN31N47pSgIJgUdRSmzMjOL76R+VFH6kctnLUaWXmg=; b=PV60LmYi6FsftDoBB4JrVLkvcwz+mfC0CUyAL8Yh2RpQCRSSCz04xYCTHE7c+A+lG+ tOK3nqqezmNBrSWOGIAH0nAka/koxA8J9sKj0OnyhRPFZNX2GxUNiGNmEkAAgpZ91a00 jcEQPuhGn4D3KQbwJ2dbwb0L5KdKTA05Sdaa3aA5hlc2/0GK9L2cORawYWR+X6+LjAKB T9UiSCJ2lwVxfON+Ad7esFVGGntuRfZtAMrLyl0Yr5UqqufEUmQEoCNj78hDrWb4OYRx 8znM4Yr2mGIl/fp5D8Q0ErEDV7dDA+MV66PlHkmGAMk9FP7dTERvY+Gx3zSLCakawiNb Tz2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=lWN31N47pSgIJgUdRSmzMjOL76R+VFH6kctnLUaWXmg=; b=08YQn9fsqd6pPGq7MgIVi7hbhepJpfzWyRKrlje5JLfBHqUCySBoPs1Hoo1+Q3tx45 5ZTO0w/et4QazhUY58RAmgL8ve5eKAeai/BqKok1z8YoBabgBs02/2TNhq3tZd13xxTq JI27QN5Gc0z2QdSScN6alCPSCmKIBA//lsYTaoOIZY/4IVeONzzx3S7VsvlzxKyKkeQG wd3ot9guKXOiUUia1e2paasgPgA887FE/bDQAM+2DKngo1bSxjrlzulr3/4jFPyMF5o4 ZI8zuNPlDhMR1TkADdwOuUl6r1jX/WDhfI+6WSogHaJUfdN+nXcgrErrN4bI+I3VbtSL Jy6g== X-Gm-Message-State: AOAM530wxKFK36oHe/pBImR4OqsPaYPWTaGDzCtJYWgwFeSfYgg2jqLP sqEZbyeW89zlH4vLPNr3Tc4WdA== X-Google-Smtp-Source: ABdhPJxsWmEt/VdNJNMR40tDtaz4Yjgl9qWWb63ntwgx9lQD4x2yQuSr/sQhCix2pTnbjHkic8fD1g== X-Received: by 2002:a05:6000:105:: with SMTP id o5mr5354920wrx.413.1632406731493; Thu, 23 Sep 2021 07:18:51 -0700 (PDT) Received: from google.com ([95.148.6.233]) by smtp.gmail.com with ESMTPSA id s15sm5595832wrb.22.2021.09.23.07.18.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Sep 2021 07:18:51 -0700 (PDT) Date: Thu, 23 Sep 2021 15:18:49 +0100 From: Lee Jones To: Krzysztof Kozlowski Cc: Will McVicker , Geert Uytterhoeven , Catalin Marinas , Will Deacon , Sylwester Nawrocki , Tomasz Figa , Chanwoo Choi , Michael Turquette , Stephen Boyd , Android Kernel Team , Linux ARM , Linux Kernel Mailing List , linux-samsung-soc , linux-clk Subject: Re: [PATCH v1 1/4] clk: samsung: change COMMON_CLK_SAMSUNG default config logic Message-ID: References: <20210920190350.3860821-1-willmcvicker@google.com> <20210920190350.3860821-2-willmcvicker@google.com> <2c8a79f7-711a-b075-745f-ea77b82a1117@canonical.com> <001cd621-53d1-fe22-0eaa-d13137827297@canonical.com> <30a1d0f3-a17c-bf87-2519-542063a7a663@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <30a1d0f3-a17c-bf87-2519-542063a7a663@kernel.org> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 23 Sep 2021, Krzysztof Kozlowski wrote: > On 23/09/2021 14:57, Lee Jones wrote: > > On Tue, 21 Sep 2021, Krzysztof Kozlowski wrote: > > > >> On 21/09/2021 19:58, Will McVicker wrote: > >>> On Tue, Sep 21, 2021 at 1:35 AM Krzysztof Kozlowski > >>> wrote: > >>>> > >>>> On 21/09/2021 09:50, Geert Uytterhoeven wrote: > >>>>> On Tue, Sep 21, 2021 at 9:31 AM Krzysztof Kozlowski wrote: > >>>>>> On 20/09/2021 21:03, Will McVicker wrote: > >>>>>>> COMMON_CLK_SAMSUNG is selected by ARCH_EXYNOS which forces this config > >>>>>>> to be built-in when ARCH_EXYNOS is enabled. Switch the logic to use a > >>>>>>> "default y if ARCH_EXYNOS" to provide flexibilty for vendors to disable > >>>>>>> or modularize this driver. > >>>>>> > >>>>>> The clock drivers are essential, you cannot disable them for a generic > >>>>>> kernel supporting ARCH_EXYNOS. Such kernel won't work properly on platforms. > >>>>> > >>>>> Obviously it's not gonna work if the clock driver is not enabled > >>>>> at all. But does it work if you make the clock driver modular, and > >>>>> put it with all other essential driver modules in initramfs? Debugging > >>>>> would be hard, as the serial console driver also relies on clocks > >>>>> and PM Domains etc. > >>>> > >>>> The kernel could boot without clock drivers (default settings from > >>>> bootloader), probe clocks from initramfs and proceed with rootfs from > >>>> eMMC/SD/net. > >>>> > >>>> In theory. > >>>> > >>>> However I have no reports that it ever worked. If there is such working > >>>> upstream configuration, I don't mind here. Just please explain this in > >>>> the commit msg. > >>>> > >>>>> > >>>>> If not, this patch should be NAKed, until it works with a modular > >>>>> clock driver. > >>>>> > >>>>> If yes, perhaps another line should be added (_before_ the other line)? > >>>>> > >>>>> + default m if ARCH_EXYNOS && MODULES > >>>>> default y if ARCH_EXYNOS > >>>>> > >>>>> However, many developers may want MODULES=y, but not want to bother > >>>>> with an initramfs. So perhaps we need a new symbol > >>>>> MINIMUM_GENERIC_KERNEL or so, protected by EXPERT, and make the > >>>>> driver default to m if that is enabled? > >>>> > >>>> Yeah, that's indeed a problem to solve. For most users (and distros) > >>>> building kernel for Exynos this should be built-in by default. > >>>> > >>>> Anyway, the option is non-selectable so it cannot be converted to "m" or > >>>> disabled. And this is claimed in the commit msg: > >>>> "provide flexibilty for vendors to disable or modularize this driver." > >>>> > >>>> The commit does not achieve it. > >>>> > >>>> Best regards, > >>>> Krzysztof > >>> > >>> Thanks for the reviews! As Lee has explained in his replies, the > >>> intent of this series is to provide config flexibility to create a > >>> defconfig that allows us to move out SoC specific drivers in order to > >>> create a generic kernel that can be used across multiple devices with > >>> different SoCs. > >> > >> That's quite generic statement... or let me put it that way - we already > >> have this ability to create a generic kernel supporting different SoCs. > >> Exynos and other ARMv7 and ARMv8 platforms are multiplatform. > >> > >> Task is done. > > > > multi_v7_defconfig and ARMv8's defconfig are bloated monoliths which > > provide limited flexibility. Good for testing and messing around - > > not much good for real products. > > I am not saying about defconfigs. I am saying that ARMv8 platform is > multiplatform so we already solved the problem Will mentioned. :) > > > > >> Please be more specific about use case and describe what exactly in > >> current upstream multiplatform kernel is missing, what is not > >> multiplatform enough. > > > > The use-case is GKI. A realistic middle-ground between fully open > > source and real-world usage of the Linux kernel in a competitive > > technical arena. GKI aims to be as close to Mainline as possible, > > whilst allowing hardware vendors to supply their own software > > containing their perceived competitive edge and/or supporting > > not-yet-released hardware platforms. > > > Therefore the use case is to not contribute anything upstream around > ARCH_EXYNOS but use it in millions of devices downstream with hundreds > of out-of-tree modules. The use case is to make life easy for the vendor > and out-of-tree code, not for the upstream. Instead of promoting > upstreaming, or leaning towards usptream in some balanced way, the use > case is to entirely go to out-of-tree. > > I am not thinking here about edge or not-yet-released platforms but > "ancient" in terms of current SoC business, e.g. 3-5 years old. > > > > > > If you end up over-constraining the ability to configure the kernel in > > useful/meaningful ways, that makes one of the main (best intention) > > aims of GKI, (i.e. to have an upstream first ethos in order to be as > > close to upstream as possible) much more difficult. > > GKI encourages core kernel changes to be upstreamed but it is > effectively the nail in the coffin of upstreaming vendor SoC changes. > There is simply no incentive for less-cooperative vendor to upstream > it's modules (except usual benefits like code quality and user support > which are not important for less-cooperative vendors). > > The kernel should be configured mainly towards mainline platforms. Not > the other way around. This of course does not stop it for supporting > out-of-tree code, but I guess you also know that what's out-of-tree, it > does not exist. :) I'm not sure you've thought the above points through. :) How is that any of this different to Mainline? So long as you have the headers for the kernel you wish to compile against, you can create all the new modules you like in both cases. > > I put in a lot of effort to ensure GKI doesn't end up as just another > > fork of the Linux kernel. So far, so good, but flexibility and > > understanding is key. > > > >>> I'm sorry I added confusion by mentioning > >>> modularization. All of these drivers that I am modifying in this > >>> series can be modularized which is an ongoing effort, but is not > >>> addressed here and I don't believe that modularizing them should be a > >>> requirement before supporting enabling/disabling them. > >> > >> Since the disabling the driver for a kernel supporting Exynos does not > >> make any sense, then making it at least modular unfortunately it is a > >> requirement. > > > > I can go with that. > > > >>> I will update the series with my patch that refactors the Samsung SoC > >>> drivers menuconfig to make these visible as well. > >> > >> I would first recommend to really describe your use case because my > >> questions about this are still unanswered. > > > > Hopefully my replies have helped somewhat. > > > > Happy to discuss further if required. > > > > If all else fails, feel free to ping me on IRC (lag). > > Thanks Lee, you described the use case. In general I like it and support > it, except for what I wrote in the other mail. > > Vendor does not contribute much therefore there is no balance in > upstreaming. Since none of other vendor's platforms are supported, I am > looking only at what is supported. From that perspective - the change > proposed by Will and previous guys, does not have much sense. > > My perspective probably would change a lot if vendor did contribute some > of its non-edge platforms (3-5 years old)... especially that unlike few > community guys (e.g. PostmarketOS), vendor has shit-tons of money and > the hardware manuals. :) But no incentive to upstream code old (dead) platforms that they no longer make money from. We're not talking about kind-hearted individuals here. These are business entities. What is the business incentive to put hundreds of thousands of dollars into something with no RoI? > Instead of pushing this change, please let's give some incentive to the > vendor for upstreaming anything. Again, you're being specific. We would also like/need to make the same kinds of changes to other vendor configurations. One's which do contribute significantly at their own cost. The technical reasoning cannot be different because you do or don't like the way the company operates. Try to detach a little from your feelings during discussions which should be purely technical. -- Lee Jones [李琼斯] Senior Technical Lead - Developer Services Linaro.org │ Open source software for Arm SoCs Follow Linaro: Facebook | Twitter | Blog 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=-5.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,FSL_HELO_FAKE,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=no 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 EB103C433EF for ; Thu, 23 Sep 2021 14:21:57 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id B4D0760F43 for ; Thu, 23 Sep 2021 14:21:57 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org B4D0760F43 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org 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:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=4pq0+Il8KXWt0UsDWAqcVNFNNUWlWAw+XZBjOyDtUL4=; b=eL5QqPt1NXdb9T HbHavvzFydiMlZdAnzWLY9xB2BW9uqH6tpUXwnEZZ0fmCAH9sWg/jd/YLHXr5VQ0Tutgitu3sffWn y+7voU/C3coeJB8j13O96ht7B13VkJNEOgiItBCaLDCSPmXYHsNdppkmxfMN0Tq6R4PehTWCMdcvU aXgpEcMzmgSsUmW31X12gXo5EHDEhn4jRGcSebEtmgJE0zTmncR1t5Hk0upaTsmZ2V62KNpWzasxX 8Ury/M0y3h86nF45auysbWUHelO7RjwokHpveq1nNpYJc+1ARW/LKY8GlTcmsdDaXSiuD7W7ISZX5 kMYE+mMbdGqLbpJHFMiw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mTPYw-00Bob3-Sn; Thu, 23 Sep 2021 14:18:59 +0000 Received: from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mTPYr-00BoZ1-1a for linux-arm-kernel@lists.infradead.org; Thu, 23 Sep 2021 14:18:55 +0000 Received: by mail-wr1-x42b.google.com with SMTP id w17so17587111wrv.10 for ; Thu, 23 Sep 2021 07:18:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=lWN31N47pSgIJgUdRSmzMjOL76R+VFH6kctnLUaWXmg=; b=PV60LmYi6FsftDoBB4JrVLkvcwz+mfC0CUyAL8Yh2RpQCRSSCz04xYCTHE7c+A+lG+ tOK3nqqezmNBrSWOGIAH0nAka/koxA8J9sKj0OnyhRPFZNX2GxUNiGNmEkAAgpZ91a00 jcEQPuhGn4D3KQbwJ2dbwb0L5KdKTA05Sdaa3aA5hlc2/0GK9L2cORawYWR+X6+LjAKB T9UiSCJ2lwVxfON+Ad7esFVGGntuRfZtAMrLyl0Yr5UqqufEUmQEoCNj78hDrWb4OYRx 8znM4Yr2mGIl/fp5D8Q0ErEDV7dDA+MV66PlHkmGAMk9FP7dTERvY+Gx3zSLCakawiNb Tz2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=lWN31N47pSgIJgUdRSmzMjOL76R+VFH6kctnLUaWXmg=; b=SnOqha1zPhIZTMExkS54RVUcZhRhKDVDEQ7xYJa0WIBLNJx08wTMcDYlqEfTIWUP4U beXiDTn0G3etjbyvB9rJUCbpJdyof0oEkKwW1Efbu0I+cIgh3NroBkqKzT4VlrmtqTJ/ pr2cgb5EjOJ+HSQaLcNzP21YBf7jXSrrhJYPk10y61isZ/3doO+49RN4VAyMMG5dqDnR ahNvKA3XQgrEMIYN2yHE8VLeR9hBD2RZ9Ix/tGgkqSB51K1Li7yuOjfSOMvgsuEihUOQ wSXQ1r5nZ0k4zXLvRAfofxbZrYmLFf93E6ZqwuhaOjNPKDN/xteALeYaSmM/9cqiW/DF cbNw== X-Gm-Message-State: AOAM530PtGtCMbNj7ux+qbO3g+h5n6heWbbG7Kdfc4cElO4n+bMKsfRm tWl+hD+moaioYo+QSKeVU6Q33g== X-Google-Smtp-Source: ABdhPJxsWmEt/VdNJNMR40tDtaz4Yjgl9qWWb63ntwgx9lQD4x2yQuSr/sQhCix2pTnbjHkic8fD1g== X-Received: by 2002:a05:6000:105:: with SMTP id o5mr5354920wrx.413.1632406731493; Thu, 23 Sep 2021 07:18:51 -0700 (PDT) Received: from google.com ([95.148.6.233]) by smtp.gmail.com with ESMTPSA id s15sm5595832wrb.22.2021.09.23.07.18.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Sep 2021 07:18:51 -0700 (PDT) Date: Thu, 23 Sep 2021 15:18:49 +0100 From: Lee Jones To: Krzysztof Kozlowski Cc: Will McVicker , Geert Uytterhoeven , Catalin Marinas , Will Deacon , Sylwester Nawrocki , Tomasz Figa , Chanwoo Choi , Michael Turquette , Stephen Boyd , Android Kernel Team , Linux ARM , Linux Kernel Mailing List , linux-samsung-soc , linux-clk Subject: Re: [PATCH v1 1/4] clk: samsung: change COMMON_CLK_SAMSUNG default config logic Message-ID: References: <20210920190350.3860821-1-willmcvicker@google.com> <20210920190350.3860821-2-willmcvicker@google.com> <2c8a79f7-711a-b075-745f-ea77b82a1117@canonical.com> <001cd621-53d1-fe22-0eaa-d13137827297@canonical.com> <30a1d0f3-a17c-bf87-2519-542063a7a663@kernel.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <30a1d0f3-a17c-bf87-2519-542063a7a663@kernel.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210923_071853_150368_1F43E055 X-CRM114-Status: GOOD ( 65.98 ) 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 T24gVGh1LCAyMyBTZXAgMjAyMSwgS3J6eXN6dG9mIEtvemxvd3NraSB3cm90ZToKCj4gT24gMjMv MDkvMjAyMSAxNDo1NywgTGVlIEpvbmVzIHdyb3RlOgo+ID4gT24gVHVlLCAyMSBTZXAgMjAyMSwg S3J6eXN6dG9mIEtvemxvd3NraSB3cm90ZToKPiA+IAo+ID4+IE9uIDIxLzA5LzIwMjEgMTk6NTgs IFdpbGwgTWNWaWNrZXIgd3JvdGU6Cj4gPj4+IE9uIFR1ZSwgU2VwIDIxLCAyMDIxIGF0IDE6MzUg QU0gS3J6eXN6dG9mIEtvemxvd3NraQo+ID4+PiA8a3J6eXN6dG9mLmtvemxvd3NraUBjYW5vbmlj YWwuY29tPiB3cm90ZToKPiA+Pj4+Cj4gPj4+PiBPbiAyMS8wOS8yMDIxIDA5OjUwLCBHZWVydCBV eXR0ZXJob2V2ZW4gd3JvdGU6Cj4gPj4+Pj4gT24gVHVlLCBTZXAgMjEsIDIwMjEgYXQgOTozMSBB TSBLcnp5c3p0b2YgS296bG93c2tpIDxrcnprQGtlcm5lbC5vcmc+IHdyb3RlOgo+ID4+Pj4+PiBP biAyMC8wOS8yMDIxIDIxOjAzLCBXaWxsIE1jVmlja2VyIHdyb3RlOgo+ID4+Pj4+Pj4gQ09NTU9O X0NMS19TQU1TVU5HIGlzIHNlbGVjdGVkIGJ5IEFSQ0hfRVhZTk9TIHdoaWNoIGZvcmNlcyB0aGlz IGNvbmZpZwo+ID4+Pj4+Pj4gdG8gYmUgYnVpbHQtaW4gd2hlbiBBUkNIX0VYWU5PUyBpcyBlbmFi bGVkLiBTd2l0Y2ggdGhlIGxvZ2ljIHRvIHVzZSBhCj4gPj4+Pj4+PiAiZGVmYXVsdCB5IGlmIEFS Q0hfRVhZTk9TIiB0byBwcm92aWRlIGZsZXhpYmlsdHkgZm9yIHZlbmRvcnMgdG8gZGlzYWJsZQo+ ID4+Pj4+Pj4gb3IgbW9kdWxhcml6ZSB0aGlzIGRyaXZlci4KPiA+Pj4+Pj4KPiA+Pj4+Pj4gVGhl IGNsb2NrIGRyaXZlcnMgYXJlIGVzc2VudGlhbCwgeW91IGNhbm5vdCBkaXNhYmxlIHRoZW0gZm9y IGEgZ2VuZXJpYwo+ID4+Pj4+PiBrZXJuZWwgc3VwcG9ydGluZyBBUkNIX0VYWU5PUy4gU3VjaCBr ZXJuZWwgd29uJ3Qgd29yayBwcm9wZXJseSBvbiBwbGF0Zm9ybXMuCj4gPj4+Pj4KPiA+Pj4+PiBP YnZpb3VzbHkgaXQncyBub3QgZ29ubmEgd29yayBpZiB0aGUgY2xvY2sgZHJpdmVyIGlzIG5vdCBl bmFibGVkCj4gPj4+Pj4gYXQgYWxsLiAgQnV0IGRvZXMgaXQgd29yayBpZiB5b3UgbWFrZSB0aGUg Y2xvY2sgZHJpdmVyIG1vZHVsYXIsIGFuZAo+ID4+Pj4+IHB1dCBpdCB3aXRoIGFsbCBvdGhlciBl c3NlbnRpYWwgZHJpdmVyIG1vZHVsZXMgaW4gaW5pdHJhbWZzPyAgRGVidWdnaW5nCj4gPj4+Pj4g d291bGQgYmUgaGFyZCwgYXMgdGhlIHNlcmlhbCBjb25zb2xlIGRyaXZlciBhbHNvIHJlbGllcyBv biBjbG9ja3MKPiA+Pj4+PiBhbmQgUE0gRG9tYWlucyBldGMuCj4gPj4+Pgo+ID4+Pj4gVGhlIGtl cm5lbCBjb3VsZCBib290IHdpdGhvdXQgY2xvY2sgZHJpdmVycyAoZGVmYXVsdCBzZXR0aW5ncyBm cm9tCj4gPj4+PiBib290bG9hZGVyKSwgcHJvYmUgY2xvY2tzIGZyb20gaW5pdHJhbWZzIGFuZCBw cm9jZWVkIHdpdGggcm9vdGZzIGZyb20KPiA+Pj4+IGVNTUMvU0QvbmV0Lgo+ID4+Pj4KPiA+Pj4+ IEluIHRoZW9yeS4KPiA+Pj4+Cj4gPj4+PiBIb3dldmVyIEkgaGF2ZSBubyByZXBvcnRzIHRoYXQg aXQgZXZlciB3b3JrZWQuIElmIHRoZXJlIGlzIHN1Y2ggd29ya2luZwo+ID4+Pj4gdXBzdHJlYW0g Y29uZmlndXJhdGlvbiwgSSBkb24ndCBtaW5kIGhlcmUuIEp1c3QgcGxlYXNlIGV4cGxhaW4gdGhp cyBpbgo+ID4+Pj4gdGhlIGNvbW1pdCBtc2cuCj4gPj4+Pgo+ID4+Pj4+Cj4gPj4+Pj4gSWYgbm90 LCB0aGlzIHBhdGNoIHNob3VsZCBiZSBOQUtlZCwgdW50aWwgaXQgd29ya3Mgd2l0aCBhIG1vZHVs YXIKPiA+Pj4+PiBjbG9jayBkcml2ZXIuCj4gPj4+Pj4KPiA+Pj4+PiBJZiB5ZXMsIHBlcmhhcHMg YW5vdGhlciBsaW5lIHNob3VsZCBiZSBhZGRlZCAoX2JlZm9yZV8gdGhlIG90aGVyIGxpbmUpPwo+ ID4+Pj4+Cj4gPj4+Pj4gICArIGRlZmF1bHQgbSBpZiBBUkNIX0VYWU5PUyAmJiBNT0RVTEVTCj4g Pj4+Pj4gICAgIGRlZmF1bHQgeSBpZiBBUkNIX0VYWU5PUwo+ID4+Pj4+Cj4gPj4+Pj4gSG93ZXZl ciwgbWFueSBkZXZlbG9wZXJzIG1heSB3YW50IE1PRFVMRVM9eSwgYnV0IG5vdCB3YW50IHRvIGJv dGhlcgo+ID4+Pj4+IHdpdGggYW4gaW5pdHJhbWZzLiAgU28gcGVyaGFwcyB3ZSBuZWVkIGEgbmV3 IHN5bWJvbAo+ID4+Pj4+IE1JTklNVU1fR0VORVJJQ19LRVJORUwgb3Igc28sIHByb3RlY3RlZCBi eSBFWFBFUlQsIGFuZCBtYWtlIHRoZQo+ID4+Pj4+IGRyaXZlciBkZWZhdWx0IHRvIG0gaWYgdGhh dCBpcyBlbmFibGVkPwo+ID4+Pj4KPiA+Pj4+IFllYWgsIHRoYXQncyBpbmRlZWQgYSBwcm9ibGVt IHRvIHNvbHZlLiBGb3IgbW9zdCB1c2VycyAoYW5kIGRpc3Ryb3MpCj4gPj4+PiBidWlsZGluZyBr ZXJuZWwgZm9yIEV4eW5vcyB0aGlzIHNob3VsZCBiZSBidWlsdC1pbiBieSBkZWZhdWx0Lgo+ID4+ Pj4KPiA+Pj4+IEFueXdheSwgdGhlIG9wdGlvbiBpcyBub24tc2VsZWN0YWJsZSBzbyBpdCBjYW5u b3QgYmUgY29udmVydGVkIHRvICJtIiBvcgo+ID4+Pj4gZGlzYWJsZWQuIEFuZCB0aGlzIGlzIGNs YWltZWQgaW4gdGhlIGNvbW1pdCBtc2c6Cj4gPj4+PiAicHJvdmlkZSBmbGV4aWJpbHR5IGZvciB2 ZW5kb3JzIHRvIGRpc2FibGUgb3IgbW9kdWxhcml6ZSB0aGlzIGRyaXZlci4iCj4gPj4+Pgo+ID4+ Pj4gVGhlIGNvbW1pdCBkb2VzIG5vdCBhY2hpZXZlIGl0Lgo+ID4+Pj4KPiA+Pj4+IEJlc3QgcmVn YXJkcywKPiA+Pj4+IEtyenlzenRvZgo+ID4+Pgo+ID4+PiBUaGFua3MgZm9yIHRoZSByZXZpZXdz ISBBcyBMZWUgaGFzIGV4cGxhaW5lZCBpbiBoaXMgcmVwbGllcywgdGhlCj4gPj4+IGludGVudCBv ZiB0aGlzIHNlcmllcyBpcyB0byBwcm92aWRlIGNvbmZpZyBmbGV4aWJpbGl0eSB0byBjcmVhdGUg YQo+ID4+PiBkZWZjb25maWcgdGhhdCBhbGxvd3MgdXMgdG8gbW92ZSBvdXQgU29DIHNwZWNpZmlj IGRyaXZlcnMgaW4gb3JkZXIgdG8KPiA+Pj4gY3JlYXRlIGEgZ2VuZXJpYyBrZXJuZWwgdGhhdCBj YW4gYmUgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgZGV2aWNlcyB3aXRoCj4gPj4+IGRpZmZlcmVudCBT b0NzLgo+ID4+Cj4gPj4gVGhhdCdzIHF1aXRlIGdlbmVyaWMgc3RhdGVtZW50Li4uIG9yIGxldCBt ZSBwdXQgaXQgdGhhdCB3YXkgLSB3ZSBhbHJlYWR5Cj4gPj4gaGF2ZSB0aGlzIGFiaWxpdHkgdG8g Y3JlYXRlIGEgZ2VuZXJpYyBrZXJuZWwgc3VwcG9ydGluZyBkaWZmZXJlbnQgU29Dcy4KPiA+PiBF eHlub3MgYW5kIG90aGVyIEFSTXY3IGFuZCBBUk12OCBwbGF0Zm9ybXMgYXJlIG11bHRpcGxhdGZv cm0uCj4gPj4KPiA+PiBUYXNrIGlzIGRvbmUuCj4gPiAKPiA+IG11bHRpX3Y3X2RlZmNvbmZpZyBh bmQgQVJNdjgncyBkZWZjb25maWcgYXJlIGJsb2F0ZWQgbW9ub2xpdGhzIHdoaWNoCj4gPiBwcm92 aWRlIGxpbWl0ZWQgZmxleGliaWxpdHkuICBHb29kIGZvciB0ZXN0aW5nIGFuZCBtZXNzaW5nIGFy b3VuZCAtCj4gPiBub3QgbXVjaCBnb29kIGZvciByZWFsIHByb2R1Y3RzLgo+IAo+IEkgYW0gbm90 IHNheWluZyBhYm91dCBkZWZjb25maWdzLiBJIGFtIHNheWluZyB0aGF0IEFSTXY4IHBsYXRmb3Jt IGlzCj4gbXVsdGlwbGF0Zm9ybSBzbyB3ZSBhbHJlYWR5IHNvbHZlZCB0aGUgcHJvYmxlbSBXaWxs IG1lbnRpb25lZC4gOikKPiAKPiA+IAo+ID4+IFBsZWFzZSBiZSBtb3JlIHNwZWNpZmljIGFib3V0 IHVzZSBjYXNlIGFuZCBkZXNjcmliZSB3aGF0IGV4YWN0bHkgaW4KPiA+PiBjdXJyZW50IHVwc3Ry ZWFtIG11bHRpcGxhdGZvcm0ga2VybmVsIGlzIG1pc3NpbmcsIHdoYXQgaXMgbm90Cj4gPj4gbXVs dGlwbGF0Zm9ybSBlbm91Z2guCj4gPiAKPiA+IFRoZSB1c2UtY2FzZSBpcyBHS0kuICBBIHJlYWxp c3RpYyBtaWRkbGUtZ3JvdW5kIGJldHdlZW4gZnVsbHkgb3Blbgo+ID4gc291cmNlIGFuZCByZWFs LXdvcmxkIHVzYWdlIG9mIHRoZSBMaW51eCBrZXJuZWwgaW4gYSBjb21wZXRpdGl2ZQo+ID4gdGVj aG5pY2FsIGFyZW5hLiAgR0tJIGFpbXMgdG8gYmUgYXMgY2xvc2UgdG8gTWFpbmxpbmUgYXMgcG9z c2libGUsCj4gPiB3aGlsc3QgYWxsb3dpbmcgaGFyZHdhcmUgdmVuZG9ycyB0byBzdXBwbHkgdGhl aXIgb3duIHNvZnR3YXJlCj4gPiBjb250YWluaW5nIHRoZWlyIHBlcmNlaXZlZCBjb21wZXRpdGl2 ZSBlZGdlIGFuZC9vciBzdXBwb3J0aW5nCj4gPiBub3QteWV0LXJlbGVhc2VkIGhhcmR3YXJlIHBs YXRmb3Jtcy4KPiAKPiA8Z3J1bXB5IG1vZGU+Cj4gVGhlcmVmb3JlIHRoZSB1c2UgY2FzZSBpcyB0 byBub3QgY29udHJpYnV0ZSBhbnl0aGluZyB1cHN0cmVhbSBhcm91bmQKPiBBUkNIX0VYWU5PUyBi dXQgdXNlIGl0IGluIG1pbGxpb25zIG9mIGRldmljZXMgZG93bnN0cmVhbSB3aXRoIGh1bmRyZWRz Cj4gb2Ygb3V0LW9mLXRyZWUgbW9kdWxlcy4gVGhlIHVzZSBjYXNlIGlzIHRvIG1ha2UgbGlmZSBl YXN5IGZvciB0aGUgdmVuZG9yCj4gYW5kIG91dC1vZi10cmVlIGNvZGUsIG5vdCBmb3IgdGhlIHVw c3RyZWFtLiBJbnN0ZWFkIG9mIHByb21vdGluZwo+IHVwc3RyZWFtaW5nLCBvciBsZWFuaW5nIHRv d2FyZHMgdXNwdHJlYW0gaW4gc29tZSBiYWxhbmNlZCB3YXksIHRoZSB1c2UKPiBjYXNlIGlzIHRv IGVudGlyZWx5IGdvIHRvIG91dC1vZi10cmVlLgo+IAo+IEkgYW0gbm90IHRoaW5raW5nIGhlcmUg YWJvdXQgZWRnZSBvciBub3QteWV0LXJlbGVhc2VkIHBsYXRmb3JtcyBidXQKPiAiYW5jaWVudCIg aW4gdGVybXMgb2YgY3VycmVudCBTb0MgYnVzaW5lc3MsIGUuZy4gMy01IHllYXJzIG9sZC4KPiA8 L2dydW1weSBtb2RlPgo+IAo+ID4gCj4gPiBJZiB5b3UgZW5kIHVwIG92ZXItY29uc3RyYWluaW5n IHRoZSBhYmlsaXR5IHRvIGNvbmZpZ3VyZSB0aGUga2VybmVsIGluCj4gPiB1c2VmdWwvbWVhbmlu Z2Z1bCB3YXlzLCB0aGF0IG1ha2VzIG9uZSBvZiB0aGUgbWFpbiAoYmVzdCBpbnRlbnRpb24pCj4g PiBhaW1zIG9mIEdLSSwgKGkuZS4gdG8gaGF2ZSBhbiB1cHN0cmVhbSBmaXJzdCBldGhvcyBpbiBv cmRlciB0byBiZSBhcwo+ID4gY2xvc2UgdG8gdXBzdHJlYW0gYXMgcG9zc2libGUpIG11Y2ggbW9y ZSBkaWZmaWN1bHQuCj4gCj4gR0tJIGVuY291cmFnZXMgY29yZSBrZXJuZWwgY2hhbmdlcyB0byBi ZSB1cHN0cmVhbWVkIGJ1dCBpdCBpcwo+IGVmZmVjdGl2ZWx5IHRoZSBuYWlsIGluIHRoZSBjb2Zm aW4gb2YgdXBzdHJlYW1pbmcgdmVuZG9yIFNvQyBjaGFuZ2VzLgo+IFRoZXJlIGlzIHNpbXBseSBu byBpbmNlbnRpdmUgZm9yIGxlc3MtY29vcGVyYXRpdmUgdmVuZG9yIHRvIHVwc3RyZWFtCj4gaXQn cyBtb2R1bGVzIChleGNlcHQgdXN1YWwgYmVuZWZpdHMgbGlrZSBjb2RlIHF1YWxpdHkgYW5kIHVz ZXIgc3VwcG9ydAo+IHdoaWNoIGFyZSBub3QgaW1wb3J0YW50IGZvciBsZXNzLWNvb3BlcmF0aXZl IHZlbmRvcnMpLgo+IAo+IFRoZSBrZXJuZWwgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgbWFpbmx5IHRv d2FyZHMgbWFpbmxpbmUgcGxhdGZvcm1zLiBOb3QKPiB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gVGhp cyBvZiBjb3Vyc2UgZG9lcyBub3Qgc3RvcCBpdCBmb3Igc3VwcG9ydGluZwo+IG91dC1vZi10cmVl IGNvZGUsIGJ1dCBJIGd1ZXNzIHlvdSBhbHNvIGtub3cgdGhhdCB3aGF0J3Mgb3V0LW9mLXRyZWUs IGl0Cj4gZG9lcyBub3QgZXhpc3QuIDopCgpJJ20gbm90IHN1cmUgeW91J3ZlIHRob3VnaHQgdGhl IGFib3ZlIHBvaW50cyB0aHJvdWdoLiA6KQoKSG93IGlzIHRoYXQgYW55IG9mIHRoaXMgZGlmZmVy ZW50IHRvIE1haW5saW5lPwoKU28gbG9uZyBhcyB5b3UgaGF2ZSB0aGUgaGVhZGVycyBmb3IgdGhl IGtlcm5lbCB5b3Ugd2lzaCB0byBjb21waWxlCmFnYWluc3QsIHlvdSBjYW4gY3JlYXRlIGFsbCB0 aGUgbmV3IG1vZHVsZXMgeW91IGxpa2UgaW4gYm90aCBjYXNlcy4KCj4gPiBJIHB1dCBpbiBhIGxv dCBvZiBlZmZvcnQgdG8gZW5zdXJlIEdLSSBkb2Vzbid0IGVuZCB1cCBhcyBqdXN0IGFub3RoZXIK PiA+IGZvcmsgb2YgdGhlIExpbnV4IGtlcm5lbC4gIFNvIGZhciwgc28gZ29vZCwgYnV0IGZsZXhp YmlsaXR5IGFuZAo+ID4gdW5kZXJzdGFuZGluZyBpcyBrZXkuCj4gPiAKPiA+Pj4gSSdtIHNvcnJ5 IEkgYWRkZWQgY29uZnVzaW9uIGJ5IG1lbnRpb25pbmcKPiA+Pj4gbW9kdWxhcml6YXRpb24uIEFs bCBvZiB0aGVzZSBkcml2ZXJzIHRoYXQgSSBhbSBtb2RpZnlpbmcgaW4gdGhpcwo+ID4+PiBzZXJp ZXMgY2FuIGJlIG1vZHVsYXJpemVkIHdoaWNoIGlzIGFuIG9uZ29pbmcgZWZmb3J0LCBidXQgaXMg bm90Cj4gPj4+IGFkZHJlc3NlZCBoZXJlIGFuZCBJIGRvbid0IGJlbGlldmUgdGhhdCBtb2R1bGFy aXppbmcgdGhlbSBzaG91bGQgYmUgYQo+ID4+PiByZXF1aXJlbWVudCBiZWZvcmUgc3VwcG9ydGlu ZyBlbmFibGluZy9kaXNhYmxpbmcgdGhlbS4KPiA+Pgo+ID4+IFNpbmNlIHRoZSBkaXNhYmxpbmcg dGhlIGRyaXZlciBmb3IgYSBrZXJuZWwgc3VwcG9ydGluZyBFeHlub3MgZG9lcyBub3QKPiA+PiBt YWtlIGFueSBzZW5zZSwgdGhlbiBtYWtpbmcgaXQgYXQgbGVhc3QgbW9kdWxhciB1bmZvcnR1bmF0 ZWx5IGl0IGlzIGEKPiA+PiByZXF1aXJlbWVudC4KPiA+IAo+ID4gSSBjYW4gZ28gd2l0aCB0aGF0 Lgo+ID4gCj4gPj4+IEkgd2lsbCB1cGRhdGUgdGhlIHNlcmllcyB3aXRoIG15IHBhdGNoIHRoYXQg cmVmYWN0b3JzIHRoZSBTYW1zdW5nIFNvQwo+ID4+PiBkcml2ZXJzIG1lbnVjb25maWcgdG8gbWFr ZSB0aGVzZSB2aXNpYmxlIGFzIHdlbGwuCj4gPj4KPiA+PiBJIHdvdWxkIGZpcnN0IHJlY29tbWVu ZCB0byByZWFsbHkgZGVzY3JpYmUgeW91ciB1c2UgY2FzZSBiZWNhdXNlIG15Cj4gPj4gcXVlc3Rp b25zIGFib3V0IHRoaXMgYXJlIHN0aWxsIHVuYW5zd2VyZWQuCj4gPiAKPiA+IEhvcGVmdWxseSBt eSByZXBsaWVzIGhhdmUgaGVscGVkIHNvbWV3aGF0Lgo+ID4gCj4gPiBIYXBweSB0byBkaXNjdXNz IGZ1cnRoZXIgaWYgcmVxdWlyZWQuCj4gPiAKPiA+IElmIGFsbCBlbHNlIGZhaWxzLCBmZWVsIGZy ZWUgdG8gcGluZyBtZSBvbiBJUkMgKGxhZykuCj4gCj4gVGhhbmtzIExlZSwgeW91IGRlc2NyaWJl ZCB0aGUgdXNlIGNhc2UuIEluIGdlbmVyYWwgSSBsaWtlIGl0IGFuZCBzdXBwb3J0Cj4gaXQsIGV4 Y2VwdCBmb3Igd2hhdCBJIHdyb3RlIGluIHRoZSBvdGhlciBtYWlsLgo+IAo+IFZlbmRvciBkb2Vz IG5vdCBjb250cmlidXRlIG11Y2ggdGhlcmVmb3JlIHRoZXJlIGlzIG5vIGJhbGFuY2UgaW4KPiB1 cHN0cmVhbWluZy4gU2luY2Ugbm9uZSBvZiBvdGhlciB2ZW5kb3IncyBwbGF0Zm9ybXMgYXJlIHN1 cHBvcnRlZCwgSSBhbQo+IGxvb2tpbmcgb25seSBhdCB3aGF0IGlzIHN1cHBvcnRlZC4gRnJvbSB0 aGF0IHBlcnNwZWN0aXZlIC0gdGhlIGNoYW5nZQo+IHByb3Bvc2VkIGJ5IFdpbGwgYW5kIHByZXZp b3VzIGd1eXMsIGRvZXMgbm90IGhhdmUgbXVjaCBzZW5zZS4KPiAKPiBNeSBwZXJzcGVjdGl2ZSBw cm9iYWJseSB3b3VsZCBjaGFuZ2UgYSBsb3QgaWYgdmVuZG9yIGRpZCBjb250cmlidXRlIHNvbWUK PiBvZiBpdHMgbm9uLWVkZ2UgcGxhdGZvcm1zICgzLTUgeWVhcnMgb2xkKS4uLiBlc3BlY2lhbGx5 IHRoYXQgdW5saWtlIGZldwo+IGNvbW11bml0eSBndXlzIChlLmcuIFBvc3RtYXJrZXRPUyksIHZl bmRvciBoYXMgc2hpdC10b25zIG9mIG1vbmV5IGFuZAo+IHRoZSBoYXJkd2FyZSBtYW51YWxzLiA6 KQoKQnV0IG5vIGluY2VudGl2ZSB0byB1cHN0cmVhbSBjb2RlIG9sZCAoZGVhZCkgcGxhdGZvcm1z IHRoYXQgdGhleSBubwpsb25nZXIgbWFrZSBtb25leSBmcm9tLiAgV2UncmUgbm90IHRhbGtpbmcg YWJvdXQga2luZC1oZWFydGVkCmluZGl2aWR1YWxzIGhlcmUuICBUaGVzZSBhcmUgYnVzaW5lc3Mg ZW50aXRpZXMuCgpXaGF0IGlzIHRoZSBidXNpbmVzcyBpbmNlbnRpdmUgdG8gcHV0IGh1bmRyZWRz IG9mIHRob3VzYW5kcyBvZiBkb2xsYXJzCmludG8gc29tZXRoaW5nIHdpdGggbm8gUm9JPwoKPiBJ bnN0ZWFkIG9mIHB1c2hpbmcgdGhpcyBjaGFuZ2UsIHBsZWFzZSBsZXQncyBnaXZlIHNvbWUgaW5j ZW50aXZlIHRvIHRoZQo+IHZlbmRvciBmb3IgdXBzdHJlYW1pbmcgYW55dGhpbmcuCgpBZ2Fpbiwg eW91J3JlIGJlaW5nIHNwZWNpZmljLiAgV2Ugd291bGQgYWxzbyBsaWtlL25lZWQgdG8gbWFrZSB0 aGUKc2FtZSBraW5kcyBvZiBjaGFuZ2VzIHRvIG90aGVyIHZlbmRvciBjb25maWd1cmF0aW9ucy4g IE9uZSdzIHdoaWNoIGRvCmNvbnRyaWJ1dGUgc2lnbmlmaWNhbnRseSBhdCB0aGVpciBvd24gY29z dC4KClRoZSB0ZWNobmljYWwgcmVhc29uaW5nIGNhbm5vdCBiZSBkaWZmZXJlbnQgYmVjYXVzZSB5 b3UgZG8gb3IgZG9uJ3QKbGlrZSB0aGUgd2F5IHRoZSBjb21wYW55IG9wZXJhdGVzLiAgVHJ5IHRv IGRldGFjaCBhIGxpdHRsZSBmcm9tCnlvdXIgZmVlbGluZ3MgZHVyaW5nIGRpc2N1c3Npb25zIHdo aWNoIHNob3VsZCBiZSBwdXJlbHkgdGVjaG5pY2FsLgoKLS0gCkxlZSBKb25lcyBb5p2O55C85pav XQpTZW5pb3IgVGVjaG5pY2FsIExlYWQgLSBEZXZlbG9wZXIgU2VydmljZXMKTGluYXJvLm9yZyDi lIIgT3BlbiBzb3VyY2Ugc29mdHdhcmUgZm9yIEFybSBTb0NzCkZvbGxvdyBMaW5hcm86IEZhY2Vi b29rIHwgVHdpdHRlciB8IEJsb2cKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJu ZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK