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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id ABB40C43217 for ; Thu, 30 Sep 2021 09:30:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A071261882 for ; Thu, 30 Sep 2021 09:30:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1349425AbhI3JcM (ORCPT ); Thu, 30 Sep 2021 05:32:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49728 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1349426AbhI3JcL (ORCPT ); Thu, 30 Sep 2021 05:32:11 -0400 Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ED50EC06176E for ; Thu, 30 Sep 2021 02:30:28 -0700 (PDT) Received: by mail-wm1-x333.google.com with SMTP id g19-20020a1c9d13000000b003075062d4daso3835480wme.0 for ; Thu, 30 Sep 2021 02:30:28 -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=L1wWYyjJzhe8UwegzkD53IzNHXArofbnIugqKQeYYJg=; b=dmMHwau9ooofXtts7xpxovkN7n3gldjxNV3i8c3mKNLzJhGNEvymCRhqneaT9zfiLD 1BW1K30kGGvpH+Wd4L1p3hVHLlVoBhOQXMkixB8XcBrqxxtz8LIDtgfWr3O7GgMyerMX al4TgWdIQRZ0J6JDgaKGNZH6MKW+icGCxzUAZflBpKqAlz0VhwFiydBZWRZuiniZ9CzC E7Om6G6RIu7ZB2nekMjGgSSBWoOscRz4jsnTuVLI9cDkJkFMk9i0rEPdWyC0kQ6btNWt 1Lyu1u7nVVRlEJ16OUOtCyTkuf1XcDoltFyxYqLeL1gOBvA82DiFlE/njdv0HnUq3def LnnQ== 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=L1wWYyjJzhe8UwegzkD53IzNHXArofbnIugqKQeYYJg=; b=W+MP1S/0nCul/XHkau9CD1X1hEyexeQzim6SF+YDLdOKTCJ9xvtzGAX57+2OV2HsG7 jtdINsvnmqzbnotwOlQEIwnLZasfmB9J3qVRsMiPeoz44tAUK23FciM+uEKjYjQh94gi w+tVrt+ZMgR0O/OTP4av59StRITIXz9dN8fqZj6qub1Bb7f9pKdT+hDhLEAih/ATvOPr 6T7iSCft6mCQ6NP7yetKRyhqWm/Ge3tnXJnxXhxQ8OnYUYxohj4+AaYg0RngQ0VQZNWX clXGAHV68by2YjU2lDm9SsiFiBVuyykHBxMvZv2bV60goe8mGtClsLLrPZbyO6Qto68H 9zjw== X-Gm-Message-State: AOAM530kevDr98cTmgIBN8zikHvH1/bo2h8q3zBEDcWaErcbC75j7pHx TQzgQm7hbcAEG918KK0o46N1ow== X-Google-Smtp-Source: ABdhPJxZv4xKNuQG6xEj0/WlogfyyIJfcFsbDyUAqdpN4zgiuDqIf2fT2UAYELfpoV+3QHTwi58KOA== X-Received: by 2002:a1c:7e87:: with SMTP id z129mr4160875wmc.75.1632994227265; Thu, 30 Sep 2021 02:30:27 -0700 (PDT) Received: from google.com ([95.148.6.233]) by smtp.gmail.com with ESMTPSA id h18sm3036659wmq.23.2021.09.30.02.30.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Sep 2021 02:30:26 -0700 (PDT) Date: Thu, 30 Sep 2021 10:30:24 +0100 From: Lee Jones To: Arnd Bergmann Cc: Krzysztof Kozlowski , Will McVicker , Russell King , Catalin Marinas , Will Deacon , Michael Turquette , Stephen Boyd , Sylwester Nawrocki , Tomasz Figa , Chanwoo Choi , Linus Walleij , Alessandro Zummo , Alexandre Belloni , John Stultz , Thomas Gleixner , Geert Uytterhoeven , Saravana Kannan , "Cc: Android Kernel" , Linux ARM , Linux Kernel Mailing List , linux-samsung-soc , linux-clk , "open list:GPIO SUBSYSTEM" , linux-rtc@vger.kernel.org, Olof Johansson Subject: Re: [PATCH v2 00/12] arm64: Kconfig: Update ARCH_EXYNOS select configs Message-ID: References: <20210928235635.1348330-1-willmcvicker@google.com> <7766faf8-2dd1-6525-3b9a-8ba790c29cff@canonical.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: linux-clk@vger.kernel.org On Thu, 30 Sep 2021, Arnd Bergmann wrote: > On Thu, Sep 30, 2021 at 8:15 AM Krzysztof Kozlowski > wrote: > > On 29/09/2021 21:48, Will McVicker wrote: > > > On Wed, Sep 29, 2021 at 6:02 AM Krzysztof Kozlowski wrote: > > >> What is more, it seems you entirely ignored Geert's comments. I pointed > > >> attention to it last time and you just said you will send v2 instead of > > >> joining discussion. > > >> > > >> It's a NAK for this reason - ignoring what Geert brought: you just broke > > >> distro configs for Exynos. > > > > > > First off I did want to chime into the discussion from the previous > > > patchset, but I felt that Lee and Saravana addressed all your concerns > > > regarding the intent and feasibility. You also made it clear what the > > > next steps were that I needed to take. > > > > One of the steps was problem with distros using everything as modules. > > They should not receive these drivers as modules. > > Reminder: these are essential drivers and all Exynos platforms must have > > them as built-in (at least till someone really tests this on multiple > > setups). > > Agreed. I absolutely love the work of the GKI developers to turn more > drivers into loadable modules, but the "correctness-first" principle is > not up for negotiation. If you are uncomfortable with the code or the > amount of testing because you think it breaks something, you should > reject the patches. Moving core platform functionality is fundamentally > hard and it can go wrong in all possible ways where it used to work > by accident because the init order was fixed. > > > >> Please also explain why Exynos is so special that we deviate from the > > >> policy for all SoC that critical SoC-related drivers have to be enabled > > >> (built-in or as module). > > > > > > I am not actually changing ANY default build configurations here and > > > I'm not removing any existing configuration. > > > > You are changing not default, but selectability which is part of the > > enforced configuration to make platforms working. The distros do not > > always choose defaults but rather all as modules. Kernel configuration > > is huge and complex, so by mistake they could now even disable > > potentially essential driver. There is no need to disable for example > > essential clock driver on a supported Exynos platform. > > I'm not overly worried about the defaults. If the drivers work as loadable > modules, I'm happy with them being loadable modules in distros. > If they don't work this way, then the patches are broken and should > not get merged. > > I don't even mind having essential drivers that can be turned off, > since we already have a ton of those (e.g. serial ports on most platforms). > It's up to distros to know which drivers to enable, though having > either reasonable defaults or fail-safe Kconfig dependencies (e.g. > making it impossible to turn off but allowing modules) is clearly > best. > > > > I tried to make it pretty > > > clear in my original patch series commit messages that none of my > > > changes modify the default behavior. The .config is the same with and > > > without my patches. All of these drivers remain enabled as built-in. > > > So if there is a distro that requires all of these drivers to be > > > built-in, then they can continue as is without noticing any > > > difference. IOW, all of these changes are/should be backwards > > > compatible. > > > > I was not referring to default neither to backwards compatibility. > > Please explain why Exynos is special that it does not require essential > > drivers to be selected as built-in. For example why aren't same changes > > done for Renesas? > > > > Is that now a new global approach that all SoC drivers should be allowed > > to be disabled for ARCH_XXX? > > I wouldn't enforce it either way across platforms. I would prefer drivers > to be loadable modules where possible (and tested), rather than > selected by the platform Kconfig. If you want to ensure the exynos > drivers are impossible to turn into a nonworking state, that's up to you. > > > > You said that upstream supports a generic > > > kernel, but I argue that the upstream "generic" arm64 kernel can't be > > > considered generic if it builds in SoC specific drivers that can be > > > modules. > > > > Good point, but since having them as modules was not tested, I consider > > it as theoretical topic. > > I actually disagree strongly with labelling the kernel as "non-generic" > just because it requires platform specific support to be built-in rather than > a loadable module. This has never been possible on any platform > I'm aware of, and likely never will, except for minor variations of > an existing platform. > > Look at x86 as an example: there are less than a dozen SoC platforms > supported and they are incredibly similar hardware-wise, but the kernel > is anything but "generic" in the sense that was mentioned above. > Most of the platform specific drivers in arch/x86/platform and the > corresponding bits in drivers/{irqchip,clocksource,iommu} are always > built-in, and a lot more is hardwired in architecture code as PCI > quirks or conditional on cpuid or dmi firmware checks. > > > >> Even if there was, I think it is good to have dependencies like > > >> ARCH_EXYNOS, as they let us partition the (19000, as Arnd said recently) > > >> Kconfig symbols into better manageable groups. Without these, we cannot > > >> do better than "depends on ARM || ARM64 || COMPILE_TEST". > > > > > > My patch series still keeps the dependencies on ARCH_EXYNOS. I am > > > totally fine with "depends on ARCH_EXYNOS" and totally fine with > > > "default ARCH_EXYNOS". The problem we have is that ARCH_EXYNOS > > > forcefully selects SoC specific drivers to be built-in because it just > > > adds more and more SoC-specific drivers to a generic kernel. > > > > The selected drivers are essential for supported platforms. We don't > > even know what are these unsupported, downstream platforms you want > > customize kernel for. They cannot be audited, cannot be compared. > > > > Therefore I don't agree with calling it a "problem" that we select > > *necessary* drivers for supported platforms. It's by design - supported > > platforms should receive them without ability to remove. > > > > If you want to change it, let me paste from previous discussion: > > > > Affecting upstream platforms just because vendor/downstream does not > > want to mainline some code is unacceptable. Please upstream your drivers > > and DTS. > > Agreed. I understand that it would be convenient for SoC vendors to > never have to upstream their platform code again, and that Android > would benefit from this in the short run. > > From my upstream perspective, this is absolutely a non-goal. If it becomes > easier as a side-effect of making the kernel more modular, that's fine. > The actual goal should be to get more people to contribute upstream so > devices run code that has been reviewed and integrated into new kernels. > > > > I know you are asking for me to only push changes that have proven to > > > work. > > > > Yep, tested. > > I'm generally fine with "obviously correct" ones as well, but it's up to > you to categorize them ;-) Arnd, FWIW, I agree with all of your points. Krzysztof, It sounds like a lack of testing is your main concern. How can I help here? What H/W do I need to be able to fully test this? -- 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 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 822C7C433FE for ; Thu, 30 Sep 2021 09:33:03 +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 3F9946140F for ; Thu, 30 Sep 2021 09:33:03 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 3F9946140F 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=XYxLsIhbQx1jtLkOd3Ng1iNcsnqnZm5Rq/RVm762vxU=; b=HRdleSufLjgzCM sTkWkdbp5KhP/b7xD0l4dZDSmO7TEHnVzq9Y/xVlfWNBsokNhlkpnJ7iEoHjyvRVIC78qDpvRhUIE RAkow1C8BKmlMAvWnwkgDWvQjZMonF8cIX8msKG8Dhmt8C9PY3mVr4ZI9wdu29d7NAoN5PYFP/huV zqbOHMlbuxs/UWdFqJ8C2uFRAyM2V6afm6iMoT/0EPXU2BJ9o/lZElqkDtjYt0CieV+Ujh6rT3YIr mDRaRp4LO62ydaaGLX6hBcuktp/tZcHTYbE1p+Oa+2jqoeQ53e90WpMKNXl0GiNCZ120YcKuOkaeQ fpsK4HSnP8SJwPrHdQ9A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mVsOx-00DZWF-GZ; Thu, 30 Sep 2021 09:30:51 +0000 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mVsOb-00DZQ2-T0 for linux-arm-kernel@lists.infradead.org; Thu, 30 Sep 2021 09:30:31 +0000 Received: by mail-wm1-x32b.google.com with SMTP id c73-20020a1c9a4c000000b0030d040bb895so3820582wme.2 for ; Thu, 30 Sep 2021 02:30:28 -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=L1wWYyjJzhe8UwegzkD53IzNHXArofbnIugqKQeYYJg=; b=dmMHwau9ooofXtts7xpxovkN7n3gldjxNV3i8c3mKNLzJhGNEvymCRhqneaT9zfiLD 1BW1K30kGGvpH+Wd4L1p3hVHLlVoBhOQXMkixB8XcBrqxxtz8LIDtgfWr3O7GgMyerMX al4TgWdIQRZ0J6JDgaKGNZH6MKW+icGCxzUAZflBpKqAlz0VhwFiydBZWRZuiniZ9CzC E7Om6G6RIu7ZB2nekMjGgSSBWoOscRz4jsnTuVLI9cDkJkFMk9i0rEPdWyC0kQ6btNWt 1Lyu1u7nVVRlEJ16OUOtCyTkuf1XcDoltFyxYqLeL1gOBvA82DiFlE/njdv0HnUq3def LnnQ== 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=L1wWYyjJzhe8UwegzkD53IzNHXArofbnIugqKQeYYJg=; b=XtS2KMOFMHiZMwq8oFliZL85sJxHihQzuSThnz9zpJNaBw+lI2rC1peUvflux+GOce QY95x+EwkeuU9Hqjgqh9QYWHxzY2Oko9+hNY8Xwj+fFLVGZ9YzcF43WPPTp7mRbC2aJP g8UBBGlLd1R5jLYvyJ/CzXtTh9XTCkosNZlSx3nyh3vwXBnXTSb+ECTkWAH2fkRLjbiY UWSX1UByGPuL8DwlVWWz1yVGP2WJdZZaCIqrlLEcLD9CRzzDNu44hniFdUxg47v4R6W/ FtHlFJ1yUciJ3bis5g3gwVm5O68HDX6NYOBK0XBPan3CTs/Jh4FsE4EhXzEHxXXuMgJh uuXw== X-Gm-Message-State: AOAM531Pjd3BqERV5f6LMMnj1uCjGOi/89DVQvmZFPZZTz0HpFvtwJec zJ3PbAC6kzMdiOkeDksPO+nyuA== X-Google-Smtp-Source: ABdhPJxZv4xKNuQG6xEj0/WlogfyyIJfcFsbDyUAqdpN4zgiuDqIf2fT2UAYELfpoV+3QHTwi58KOA== X-Received: by 2002:a1c:7e87:: with SMTP id z129mr4160875wmc.75.1632994227265; Thu, 30 Sep 2021 02:30:27 -0700 (PDT) Received: from google.com ([95.148.6.233]) by smtp.gmail.com with ESMTPSA id h18sm3036659wmq.23.2021.09.30.02.30.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Sep 2021 02:30:26 -0700 (PDT) Date: Thu, 30 Sep 2021 10:30:24 +0100 From: Lee Jones To: Arnd Bergmann Cc: Krzysztof Kozlowski , Will McVicker , Russell King , Catalin Marinas , Will Deacon , Michael Turquette , Stephen Boyd , Sylwester Nawrocki , Tomasz Figa , Chanwoo Choi , Linus Walleij , Alessandro Zummo , Alexandre Belloni , John Stultz , Thomas Gleixner , Geert Uytterhoeven , Saravana Kannan , "Cc: Android Kernel" , Linux ARM , Linux Kernel Mailing List , linux-samsung-soc , linux-clk , "open list:GPIO SUBSYSTEM" , linux-rtc@vger.kernel.org, Olof Johansson Subject: Re: [PATCH v2 00/12] arm64: Kconfig: Update ARCH_EXYNOS select configs Message-ID: References: <20210928235635.1348330-1-willmcvicker@google.com> <7766faf8-2dd1-6525-3b9a-8ba790c29cff@canonical.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210930_023029_989083_D734A109 X-CRM114-Status: GOOD ( 69.47 ) 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 T24gVGh1LCAzMCBTZXAgMjAyMSwgQXJuZCBCZXJnbWFubiB3cm90ZToKCj4gT24gVGh1LCBTZXAg MzAsIDIwMjEgYXQgODoxNSBBTSBLcnp5c3p0b2YgS296bG93c2tpCj4gPGtyenlzenRvZi5rb3ps b3dza2lAY2Fub25pY2FsLmNvbT4gd3JvdGU6Cj4gPiBPbiAyOS8wOS8yMDIxIDIxOjQ4LCBXaWxs IE1jVmlja2VyIHdyb3RlOgo+ID4gPiBPbiBXZWQsIFNlcCAyOSwgMjAyMSBhdCA2OjAyIEFNIEty enlzenRvZiBLb3psb3dza2kgPGtyenlzenRvZi5rb3psb3dza2lAY2Fub25pY2FsLmNvbT4gd3Jv dGU6Cj4gPiA+PiBXaGF0IGlzIG1vcmUsIGl0IHNlZW1zIHlvdSBlbnRpcmVseSBpZ25vcmVkIEdl ZXJ0J3MgY29tbWVudHMuIEkgcG9pbnRlZAo+ID4gPj4gYXR0ZW50aW9uIHRvIGl0IGxhc3QgdGlt ZSBhbmQgeW91IGp1c3Qgc2FpZCB5b3Ugd2lsbCBzZW5kIHYyIGluc3RlYWQgb2YKPiA+ID4+IGpv aW5pbmcgZGlzY3Vzc2lvbi4KPiA+ID4+Cj4gPiA+PiBJdCdzIGEgTkFLIGZvciB0aGlzIHJlYXNv biAtIGlnbm9yaW5nIHdoYXQgR2VlcnQgYnJvdWdodDogeW91IGp1c3QgYnJva2UKPiA+ID4+IGRp c3RybyBjb25maWdzIGZvciBFeHlub3MuCj4gPiA+Cj4gPiA+IEZpcnN0IG9mZiBJIGRpZCB3YW50 IHRvIGNoaW1lIGludG8gdGhlIGRpc2N1c3Npb24gZnJvbSB0aGUgcHJldmlvdXMKPiA+ID4gcGF0 Y2hzZXQsIGJ1dCBJIGZlbHQgdGhhdCBMZWUgYW5kIFNhcmF2YW5hIGFkZHJlc3NlZCBhbGwgeW91 ciBjb25jZXJucwo+ID4gPiByZWdhcmRpbmcgdGhlIGludGVudCBhbmQgZmVhc2liaWxpdHkuIFlv dSBhbHNvIG1hZGUgaXQgY2xlYXIgd2hhdCB0aGUKPiA+ID4gbmV4dCBzdGVwcyB3ZXJlIHRoYXQg SSBuZWVkZWQgdG8gdGFrZS4KPiA+Cj4gPiBPbmUgb2YgdGhlIHN0ZXBzIHdhcyBwcm9ibGVtIHdp dGggZGlzdHJvcyB1c2luZyBldmVyeXRoaW5nIGFzIG1vZHVsZXMuCj4gPiBUaGV5IHNob3VsZCBu b3QgcmVjZWl2ZSB0aGVzZSBkcml2ZXJzIGFzIG1vZHVsZXMuCj4gPiBSZW1pbmRlcjogdGhlc2Ug YXJlIGVzc2VudGlhbCBkcml2ZXJzIGFuZCBhbGwgRXh5bm9zIHBsYXRmb3JtcyBtdXN0IGhhdmUK PiA+IHRoZW0gYXMgYnVpbHQtaW4gKGF0IGxlYXN0IHRpbGwgc29tZW9uZSByZWFsbHkgdGVzdHMg dGhpcyBvbiBtdWx0aXBsZQo+ID4gc2V0dXBzKS4KPiAKPiBBZ3JlZWQuIEkgYWJzb2x1dGVseSBs b3ZlIHRoZSB3b3JrIG9mIHRoZSBHS0kgZGV2ZWxvcGVycyB0byB0dXJuIG1vcmUKPiBkcml2ZXJz IGludG8gbG9hZGFibGUgbW9kdWxlcywgYnV0IHRoZSAiY29ycmVjdG5lc3MtZmlyc3QiIHByaW5j aXBsZSBpcwo+IG5vdCB1cCBmb3IgbmVnb3RpYXRpb24uIElmIHlvdSBhcmUgdW5jb21mb3J0YWJs ZSB3aXRoIHRoZSBjb2RlIG9yIHRoZQo+IGFtb3VudCBvZiB0ZXN0aW5nIGJlY2F1c2UgeW91IHRo aW5rIGl0IGJyZWFrcyBzb21ldGhpbmcsIHlvdSBzaG91bGQKPiByZWplY3QgdGhlIHBhdGNoZXMu IE1vdmluZyBjb3JlIHBsYXRmb3JtIGZ1bmN0aW9uYWxpdHkgaXMgZnVuZGFtZW50YWxseQo+IGhh cmQgYW5kIGl0IGNhbiBnbyB3cm9uZyBpbiBhbGwgcG9zc2libGUgd2F5cyB3aGVyZSBpdCB1c2Vk IHRvIHdvcmsKPiBieSBhY2NpZGVudCBiZWNhdXNlIHRoZSBpbml0IG9yZGVyIHdhcyBmaXhlZC4K PiAKPiA+ID4+IFBsZWFzZSBhbHNvIGV4cGxhaW4gd2h5IEV4eW5vcyBpcyBzbyBzcGVjaWFsIHRo YXQgd2UgZGV2aWF0ZSBmcm9tIHRoZQo+ID4gPj4gcG9saWN5IGZvciBhbGwgU29DIHRoYXQgY3Jp dGljYWwgU29DLXJlbGF0ZWQgZHJpdmVycyBoYXZlIHRvIGJlIGVuYWJsZWQKPiA+ID4+IChidWls dC1pbiBvciBhcyBtb2R1bGUpLgo+ID4gPgo+ID4gPiBJIGFtIG5vdCBhY3R1YWxseSBjaGFuZ2lu ZyBBTlkgZGVmYXVsdCBidWlsZCBjb25maWd1cmF0aW9ucyBoZXJlIGFuZAo+ID4gPiBJJ20gbm90 IHJlbW92aW5nIGFueSBleGlzdGluZyBjb25maWd1cmF0aW9uLgo+ID4KPiA+IFlvdSBhcmUgY2hh bmdpbmcgbm90IGRlZmF1bHQsIGJ1dCBzZWxlY3RhYmlsaXR5IHdoaWNoIGlzIHBhcnQgb2YgdGhl Cj4gPiBlbmZvcmNlZCBjb25maWd1cmF0aW9uIHRvIG1ha2UgcGxhdGZvcm1zIHdvcmtpbmcuIFRo ZSBkaXN0cm9zIGRvIG5vdAo+ID4gYWx3YXlzIGNob29zZSBkZWZhdWx0cyBidXQgcmF0aGVyIGFs bCBhcyBtb2R1bGVzLiBLZXJuZWwgY29uZmlndXJhdGlvbgo+ID4gaXMgaHVnZSBhbmQgY29tcGxl eCwgc28gYnkgbWlzdGFrZSB0aGV5IGNvdWxkIG5vdyBldmVuIGRpc2FibGUKPiA+IHBvdGVudGlh bGx5IGVzc2VudGlhbCBkcml2ZXIuIFRoZXJlIGlzIG5vIG5lZWQgdG8gZGlzYWJsZSBmb3IgZXhh bXBsZQo+ID4gZXNzZW50aWFsIGNsb2NrIGRyaXZlciBvbiBhIHN1cHBvcnRlZCBFeHlub3MgcGxh dGZvcm0uCj4gCj4gSSdtIG5vdCBvdmVybHkgd29ycmllZCBhYm91dCB0aGUgZGVmYXVsdHMuIElm IHRoZSBkcml2ZXJzIHdvcmsgYXMgbG9hZGFibGUKPiBtb2R1bGVzLCBJJ20gaGFwcHkgd2l0aCB0 aGVtIGJlaW5nIGxvYWRhYmxlIG1vZHVsZXMgaW4gZGlzdHJvcy4KPiBJZiB0aGV5IGRvbid0IHdv cmsgdGhpcyB3YXksIHRoZW4gdGhlIHBhdGNoZXMgYXJlIGJyb2tlbiBhbmQgc2hvdWxkCj4gbm90 IGdldCBtZXJnZWQuCj4gCj4gSSBkb24ndCBldmVuIG1pbmQgaGF2aW5nIGVzc2VudGlhbCBkcml2 ZXJzIHRoYXQgY2FuIGJlIHR1cm5lZCBvZmYsCj4gc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGEgdG9u IG9mIHRob3NlIChlLmcuIHNlcmlhbCBwb3J0cyBvbiBtb3N0IHBsYXRmb3JtcykuCj4gSXQncyB1 cCB0byBkaXN0cm9zIHRvIGtub3cgd2hpY2ggZHJpdmVycyB0byBlbmFibGUsIHRob3VnaCBoYXZp bmcKPiBlaXRoZXIgcmVhc29uYWJsZSBkZWZhdWx0cyBvciBmYWlsLXNhZmUgS2NvbmZpZyBkZXBl bmRlbmNpZXMgKGUuZy4KPiBtYWtpbmcgaXQgaW1wb3NzaWJsZSB0byB0dXJuIG9mZiBidXQgYWxs b3dpbmcgbW9kdWxlcykgaXMgY2xlYXJseQo+IGJlc3QuCj4gCj4gPiA+IEkgdHJpZWQgdG8gbWFr ZSBpdCBwcmV0dHkKPiA+ID4gY2xlYXIgaW4gbXkgb3JpZ2luYWwgcGF0Y2ggc2VyaWVzIGNvbW1p dCBtZXNzYWdlcyB0aGF0IG5vbmUgb2YgbXkKPiA+ID4gY2hhbmdlcyBtb2RpZnkgdGhlIGRlZmF1 bHQgYmVoYXZpb3IuIFRoZSAuY29uZmlnIGlzIHRoZSBzYW1lIHdpdGggYW5kCj4gPiA+IHdpdGhv dXQgbXkgcGF0Y2hlcy4gQWxsIG9mIHRoZXNlIGRyaXZlcnMgcmVtYWluIGVuYWJsZWQgYXMgYnVp bHQtaW4uCj4gPiA+IFNvIGlmIHRoZXJlIGlzIGEgZGlzdHJvIHRoYXQgcmVxdWlyZXMgYWxsIG9m IHRoZXNlIGRyaXZlcnMgdG8gYmUKPiA+ID4gYnVpbHQtaW4sIHRoZW4gdGhleSBjYW4gY29udGlu dWUgYXMgaXMgd2l0aG91dCBub3RpY2luZyBhbnkKPiA+ID4gZGlmZmVyZW5jZS4gSU9XLCBhbGwg b2YgdGhlc2UgY2hhbmdlcyBhcmUvc2hvdWxkIGJlIGJhY2t3YXJkcwo+ID4gPiBjb21wYXRpYmxl Lgo+ID4KPiA+IEkgd2FzIG5vdCByZWZlcnJpbmcgdG8gZGVmYXVsdCBuZWl0aGVyIHRvIGJhY2t3 YXJkcyBjb21wYXRpYmlsaXR5Lgo+ID4gUGxlYXNlIGV4cGxhaW4gd2h5IEV4eW5vcyBpcyBzcGVj aWFsIHRoYXQgaXQgZG9lcyBub3QgcmVxdWlyZSBlc3NlbnRpYWwKPiA+IGRyaXZlcnMgdG8gYmUg c2VsZWN0ZWQgYXMgYnVpbHQtaW4uIEZvciBleGFtcGxlIHdoeSBhcmVuJ3Qgc2FtZSBjaGFuZ2Vz Cj4gPiBkb25lIGZvciBSZW5lc2FzPwo+ID4KPiA+IElzIHRoYXQgbm93IGEgbmV3IGdsb2JhbCBh cHByb2FjaCB0aGF0IGFsbCBTb0MgZHJpdmVycyBzaG91bGQgYmUgYWxsb3dlZAo+ID4gdG8gYmUg ZGlzYWJsZWQgZm9yIEFSQ0hfWFhYPwo+IAo+IEkgd291bGRuJ3QgZW5mb3JjZSBpdCBlaXRoZXIg d2F5IGFjcm9zcyBwbGF0Zm9ybXMuIEkgd291bGQgcHJlZmVyIGRyaXZlcnMKPiB0byBiZSBsb2Fk YWJsZSBtb2R1bGVzIHdoZXJlIHBvc3NpYmxlIChhbmQgdGVzdGVkKSwgcmF0aGVyIHRoYW4KPiBz ZWxlY3RlZCBieSB0aGUgcGxhdGZvcm0gS2NvbmZpZy4gSWYgeW91IHdhbnQgdG8gZW5zdXJlIHRo ZSBleHlub3MKPiBkcml2ZXJzIGFyZSBpbXBvc3NpYmxlIHRvIHR1cm4gaW50byBhIG5vbndvcmtp bmcgc3RhdGUsIHRoYXQncyB1cCB0byB5b3UuCj4gCj4gPiA+IFlvdSBzYWlkIHRoYXQgdXBzdHJl YW0gc3VwcG9ydHMgYSBnZW5lcmljCj4gPiA+IGtlcm5lbCwgYnV0IEkgYXJndWUgdGhhdCB0aGUg dXBzdHJlYW0gImdlbmVyaWMiIGFybTY0IGtlcm5lbCBjYW4ndCBiZQo+ID4gPiBjb25zaWRlcmVk IGdlbmVyaWMgaWYgaXQgYnVpbGRzIGluIFNvQyBzcGVjaWZpYyBkcml2ZXJzIHRoYXQgY2FuIGJl Cj4gPiA+IG1vZHVsZXMuCj4gPgo+ID4gR29vZCBwb2ludCwgYnV0IHNpbmNlIGhhdmluZyB0aGVt IGFzIG1vZHVsZXMgd2FzIG5vdCB0ZXN0ZWQsIEkgY29uc2lkZXIKPiA+IGl0IGFzIHRoZW9yZXRp Y2FsIHRvcGljLgo+IAo+IEkgYWN0dWFsbHkgZGlzYWdyZWUgc3Ryb25nbHkgd2l0aCBsYWJlbGxp bmcgdGhlIGtlcm5lbCBhcyAibm9uLWdlbmVyaWMiCj4ganVzdCBiZWNhdXNlIGl0IHJlcXVpcmVz IHBsYXRmb3JtIHNwZWNpZmljIHN1cHBvcnQgdG8gYmUgYnVpbHQtaW4gcmF0aGVyIHRoYW4KPiBh IGxvYWRhYmxlIG1vZHVsZS4gVGhpcyBoYXMgbmV2ZXIgYmVlbiBwb3NzaWJsZSBvbiBhbnkgcGxh dGZvcm0KPiBJJ20gYXdhcmUgb2YsIGFuZCBsaWtlbHkgbmV2ZXIgd2lsbCwgZXhjZXB0IGZvciBt aW5vciB2YXJpYXRpb25zIG9mCj4gYW4gZXhpc3RpbmcgcGxhdGZvcm0uCj4gCj4gTG9vayBhdCB4 ODYgYXMgYW4gZXhhbXBsZTogdGhlcmUgYXJlIGxlc3MgdGhhbiBhIGRvemVuIFNvQyBwbGF0Zm9y bXMKPiBzdXBwb3J0ZWQgYW5kIHRoZXkgYXJlIGluY3JlZGlibHkgc2ltaWxhciBoYXJkd2FyZS13 aXNlLCBidXQgdGhlIGtlcm5lbAo+IGlzIGFueXRoaW5nIGJ1dCAiZ2VuZXJpYyIgaW4gdGhlIHNl bnNlIHRoYXQgd2FzIG1lbnRpb25lZCBhYm92ZS4KPiBNb3N0IG9mIHRoZSBwbGF0Zm9ybSBzcGVj aWZpYyBkcml2ZXJzIGluIGFyY2gveDg2L3BsYXRmb3JtIGFuZCB0aGUKPiBjb3JyZXNwb25kaW5n IGJpdHMgaW4gZHJpdmVycy97aXJxY2hpcCxjbG9ja3NvdXJjZSxpb21tdX0gYXJlIGFsd2F5cwo+ IGJ1aWx0LWluLCBhbmQgYSBsb3QgbW9yZSBpcyBoYXJkd2lyZWQgaW4gYXJjaGl0ZWN0dXJlIGNv ZGUgYXMgUENJCj4gcXVpcmtzIG9yIGNvbmRpdGlvbmFsIG9uIGNwdWlkIG9yIGRtaSBmaXJtd2Fy ZSBjaGVja3MuCj4gCj4gPiA+PiBFdmVuIGlmIHRoZXJlIHdhcywgSSB0aGluayBpdCBpcyBnb29k IHRvIGhhdmUgZGVwZW5kZW5jaWVzIGxpa2UKPiA+ID4+IEFSQ0hfRVhZTk9TLCBhcyB0aGV5IGxl dCB1cyBwYXJ0aXRpb24gdGhlICgxOTAwMCwgYXMgQXJuZCBzYWlkIHJlY2VudGx5KQo+ID4gPj4g S2NvbmZpZyBzeW1ib2xzIGludG8gYmV0dGVyIG1hbmFnZWFibGUgZ3JvdXBzLiAgV2l0aG91dCB0 aGVzZSwgd2UgY2Fubm90Cj4gPiA+PiBkbyBiZXR0ZXIgdGhhbiAiZGVwZW5kcyBvbiBBUk0gfHwg QVJNNjQgfHwgQ09NUElMRV9URVNUIi4KPiA+ID4KPiA+ID4gTXkgcGF0Y2ggc2VyaWVzIHN0aWxs IGtlZXBzIHRoZSBkZXBlbmRlbmNpZXMgb24gQVJDSF9FWFlOT1MuIEkgYW0KPiA+ID4gdG90YWxs eSBmaW5lIHdpdGggImRlcGVuZHMgb24gQVJDSF9FWFlOT1MiIGFuZCB0b3RhbGx5IGZpbmUgd2l0 aAo+ID4gPiAiZGVmYXVsdCBBUkNIX0VYWU5PUyIuIFRoZSBwcm9ibGVtIHdlIGhhdmUgaXMgdGhh dCBBUkNIX0VYWU5PUwo+ID4gPiBmb3JjZWZ1bGx5IHNlbGVjdHMgU29DIHNwZWNpZmljIGRyaXZl cnMgdG8gYmUgYnVpbHQtaW4gYmVjYXVzZSBpdCBqdXN0Cj4gPiA+IGFkZHMgbW9yZSBhbmQgbW9y ZSBTb0Mtc3BlY2lmaWMgZHJpdmVycyB0byBhIGdlbmVyaWMga2VybmVsLgo+ID4KPiA+IFRoZSBz ZWxlY3RlZCBkcml2ZXJzIGFyZSBlc3NlbnRpYWwgZm9yIHN1cHBvcnRlZCBwbGF0Zm9ybXMuIFdl IGRvbid0Cj4gPiBldmVuIGtub3cgd2hhdCBhcmUgdGhlc2UgdW5zdXBwb3J0ZWQsIGRvd25zdHJl YW0gcGxhdGZvcm1zIHlvdSB3YW50Cj4gPiBjdXN0b21pemUga2VybmVsIGZvci4gVGhleSBjYW5u b3QgYmUgYXVkaXRlZCwgY2Fubm90IGJlIGNvbXBhcmVkLgo+ID4KPiA+IFRoZXJlZm9yZSBJIGRv bid0IGFncmVlIHdpdGggY2FsbGluZyBpdCBhICJwcm9ibGVtIiB0aGF0IHdlIHNlbGVjdAo+ID4g Km5lY2Vzc2FyeSogZHJpdmVycyBmb3Igc3VwcG9ydGVkIHBsYXRmb3Jtcy4gSXQncyBieSBkZXNp Z24gLSBzdXBwb3J0ZWQKPiA+IHBsYXRmb3JtcyBzaG91bGQgcmVjZWl2ZSB0aGVtIHdpdGhvdXQg YWJpbGl0eSB0byByZW1vdmUuCj4gPgo+ID4gSWYgeW91IHdhbnQgdG8gY2hhbmdlIGl0LCBsZXQg bWUgcGFzdGUgZnJvbSBwcmV2aW91cyBkaXNjdXNzaW9uOgo+ID4KPiA+IEFmZmVjdGluZyB1cHN0 cmVhbSBwbGF0Zm9ybXMganVzdCBiZWNhdXNlIHZlbmRvci9kb3duc3RyZWFtIGRvZXMgbm90Cj4g PiB3YW50IHRvIG1haW5saW5lIHNvbWUgY29kZSBpcyB1bmFjY2VwdGFibGUuIFBsZWFzZSB1cHN0 cmVhbSB5b3VyIGRyaXZlcnMKPiA+IGFuZCBEVFMuCj4gCj4gQWdyZWVkLiBJIHVuZGVyc3RhbmQg dGhhdCBpdCB3b3VsZCBiZSBjb252ZW5pZW50IGZvciBTb0MgdmVuZG9ycyB0bwo+IG5ldmVyIGhh dmUgdG8gdXBzdHJlYW0gdGhlaXIgcGxhdGZvcm0gY29kZSBhZ2FpbiwgYW5kIHRoYXQgQW5kcm9p ZAo+IHdvdWxkIGJlbmVmaXQgZnJvbSB0aGlzIGluIHRoZSBzaG9ydCBydW4uCj4gCj4gRnJvbSBt eSB1cHN0cmVhbSBwZXJzcGVjdGl2ZSwgdGhpcyBpcyBhYnNvbHV0ZWx5IGEgbm9uLWdvYWwuIElm IGl0IGJlY29tZXMKPiBlYXNpZXIgYXMgYSBzaWRlLWVmZmVjdCBvZiBtYWtpbmcgdGhlIGtlcm5l bCBtb3JlIG1vZHVsYXIsIHRoYXQncyBmaW5lLgo+IFRoZSBhY3R1YWwgZ29hbCBzaG91bGQgYmUg dG8gZ2V0IG1vcmUgcGVvcGxlIHRvIGNvbnRyaWJ1dGUgdXBzdHJlYW0gc28KPiBkZXZpY2VzIHJ1 biBjb2RlIHRoYXQgaGFzIGJlZW4gcmV2aWV3ZWQgYW5kIGludGVncmF0ZWQgaW50byBuZXcga2Vy bmVscy4KPiAKPiA+ID4gSSBrbm93IHlvdSBhcmUgYXNraW5nIGZvciBtZSB0byBvbmx5IHB1c2gg Y2hhbmdlcyB0aGF0IGhhdmUgcHJvdmVuIHRvCj4gPiA+IHdvcmsuCj4gPgo+ID4gWWVwLCB0ZXN0 ZWQuCj4gCj4gSSdtIGdlbmVyYWxseSBmaW5lIHdpdGggIm9idmlvdXNseSBjb3JyZWN0IiBvbmVz IGFzIHdlbGwsIGJ1dCBpdCdzIHVwIHRvCj4geW91IHRvIGNhdGVnb3JpemUgdGhlbSA7LSkKCkFy bmQsCgogIEZXSVcsIEkgYWdyZWUgd2l0aCBhbGwgb2YgeW91ciBwb2ludHMuCgpLcnp5c3p0b2Ys CgogIEl0IHNvdW5kcyBsaWtlIGEgbGFjayBvZiB0ZXN0aW5nIGlzIHlvdXIgbWFpbiBjb25jZXJu LgoKICBIb3cgY2FuIEkgaGVscCBoZXJlPyAgV2hhdCBIL1cgZG8gSSBuZWVkIHRvIGJlIGFibGUg dG8gZnVsbHkgdGVzdCB0aGlzPwoKLS0gCkxlZSBKb25lcyBb5p2O55C85pavXQpTZW5pb3IgVGVj aG5pY2FsIExlYWQgLSBEZXZlbG9wZXIgU2VydmljZXMKTGluYXJvLm9yZyDilIIgT3BlbiBzb3Vy Y2Ugc29mdHdhcmUgZm9yIEFybSBTb0NzCkZvbGxvdyBMaW5hcm86IEZhY2Vib29rIHwgVHdpdHRl ciB8IEJsb2cKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5m cmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LWFybS1rZXJuZWwK