From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qv1-f47.google.com (mail-qv1-f47.google.com [209.85.219.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BE8261FD3 for ; Sun, 5 Mar 2023 09:26:56 +0000 (UTC) Received: by mail-qv1-f47.google.com with SMTP id nf5so4698550qvb.5 for ; Sun, 05 Mar 2023 01:26:56 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678008415; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mqH/fUNw1v+IeKE/kiXgUEg5Js8jhAM4t/LI9qQb7pQ=; b=0/+1fH7K1cQikAm22+gd4H6SThAy3XyaOFRT/jHR8cjM2iJLFOOtvhX3es6yLOQb6w taH3pGqUYbrlwFPV3WZm7MDxIAi7lGjN0p5Z89r/zyQBYcBqqMzCpjd2UINCsCMT1zsM CE8VvKms/47BiBaIRtzv4ZpK2UrHEHe5K2xHb18wx/PpEgzuT0wWF9X3vP/iUqjwL7v8 MrwYQwVHv+QXqgrFVNOpPDCjjfb175QVWxEmCTXFUirEOdDnP1H0JHbTkm1A6tqTDxRf GbGkUhht/BzxS6zbNYDriK2/YV45yy1mC9NOartdyvquLhj7qcCsHbCzn3w8xCl7cI1J J3nQ== X-Gm-Message-State: AO0yUKUITh/xtu4ti0JR1hQdsT9J45pMue4VuIRSzoLc4waMKxGgUejE Cn/+jAZkDWLCyp6dYzYnUgARefcEoB34kA== X-Google-Smtp-Source: AK7set/vubFSCtBkS6cQ1jdi4GqDkvtBMivQVHk9ztLBAqEHmNqTB0OUKpPErupQb7rW6zlwbfpjyQ== X-Received: by 2002:a05:6214:410:b0:56e:98a1:fff1 with SMTP id z16-20020a056214041000b0056e98a1fff1mr12059540qvx.7.1678008415292; Sun, 05 Mar 2023 01:26:55 -0800 (PST) Received: from mail-yb1-f174.google.com (mail-yb1-f174.google.com. [209.85.219.174]) by smtp.gmail.com with ESMTPSA id i3-20020a378603000000b007068b49b8absm5162650qkd.62.2023.03.05.01.26.53 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 05 Mar 2023 01:26:54 -0800 (PST) Received: by mail-yb1-f174.google.com with SMTP id i6so5440579ybu.8 for ; Sun, 05 Mar 2023 01:26:53 -0800 (PST) X-Received: by 2002:a5b:c42:0:b0:a43:52fe:c36f with SMTP id d2-20020a5b0c42000000b00a4352fec36fmr3381016ybr.7.1678008413630; Sun, 05 Mar 2023 01:26:53 -0800 (PST) Precedence: bulk X-Mailing-List: patches@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20230302013822.1808711-1-sboyd@kernel.org> <3759b28cca7ab751296d4dd83f2dcc51.sboyd@kernel.org> In-Reply-To: From: Geert Uytterhoeven Date: Sun, 5 Mar 2023 10:26:41 +0100 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 0/8] clk: Add kunit tests for fixed rate and parent data To: Frank Rowand Cc: Stephen Boyd , David Gow , Rob Herring , Michael Turquette , linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, patches@lists.linux.dev, Brendan Higgins , Greg Kroah-Hartman , "Rafael J . Wysocki" , Richard Weinberger , Anton Ivanov , Johannes Berg , Vincent Whitchurch , Christian Marangi , Krzysztof Kozlowski , devicetree@vger.kernel.org, linux-um@lists.infradead.org, linux-kselftest@vger.kernel.org, kunit-dev@googlegroups.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Frank, On Sun, Mar 5, 2023 at 4:33=E2=80=AFAM Frank Rowand wrote: > On 3/2/23 13:47, Geert Uytterhoeven wrote: > > On Thu, Mar 2, 2023 at 8:28=E2=80=AFPM Stephen Boyd = wrote: > >> Quoting Rob Herring (2023-03-02 09:32:09) > >>> On Thu, Mar 2, 2023 at 2:14=E2=80=AFAM David Gow wrote: > >>>> On Thu, 2 Mar 2023 at 09:38, Stephen Boyd wrote: > >>>>> This patch series adds unit tests for the clk fixed rate basic type= and > >>>>> the clk registration functions that use struct clk_parent_data. To = get > >>>>> there, we add support for loading a DTB into the UML kernel that's > >>>>> running the unit tests along with probing platform drivers to bind = to > >>>>> device nodes specified in DT. > >>>>> > >>>>> With this series, we're able to exercise some of the code in the co= mmon > >>>>> clk framework that uses devicetree lookups to find parents and the = fixed > >>>>> rate clk code that scans devicetree directly and creates clks. Plea= se > >>>>> review. > >>>>> > >>>> > >>>> Thanks Stephen -- this is really neat! > >>>> > >>>> This works well here, and I love all of the tests for the > >>>> KUnit/device-tree integration as well. > >>>> > >>>> I'm still looking through the details of it (alas, I've mostly lived > >>>> in x86-land, so my device-tree knowledge is, uh, spotty to say the > >>>> least), but apart from possibly renaming some things or similarly > >>>> minor tweaks, I've not got any real suggestions thus far. > >>>> > >>>> I do wonder whether we'll want, on the KUnit side, to have some way = of > >>>> supporting KUnit device trees on non-UML architecctures (e.g., if we > >>>> need to test something architecture-specific, or on a big-endian > >>>> platform, etc), but I think that's a question for the future, rather > >>>> than something that affects this series. > >>> > >>> I'll say that's a requirement. We should be able to structure the > >>> tests to not interfere with the running system's DT. The DT unittest > >>> does that. > >> > >> That could be another choice in the unit test choice menu. > >> CONFIG_OF_KUNIT_NOT_UML that injects some built-in DTB overlay on an > >> architecture that wants to run tests. > > > > As long as you use compatible values that don't exist elsewhere, > > and don't overwrite anything, you can load your kunit test overlays > > on any running system that has DT support. > > > >>> As a side topic, Is anyone looking at getting UML to work on arm64? > >>> It's surprising how much x86 stuff there is which is I guess one > >>> reason it hasn't happened. > >> > >> I've no idea but it would be nice indeed. > > > > I believe that's non-trivial. At least for arm32 (I didn't have any arm= 64 > > systems last time I asked the experts). > > > >>>> Similarly, I wonder if there's something we could do with device tre= e > >>>> overlays, in order to make it possible for tests to swap nodes in an= d > >>>> out for testing. > >>> > >>> Yes, that's how the DT unittest works. But it is pretty much one big > >>> overlay (ignoring the overlay tests). It could probably be more > >>> modular where it is apply overlay, test, remove overlay, repeat. > >> > >> I didn't want to rely on the overlay code to inject DT nodes. Having > >> tests written for the fake KUnit machine is simple. It closely matches > >> how clk code probes the DTB and how nodes are created and populated on > >> the platform bus as devices. CLK_OF_DECLARE() would need the overlay t= o > >> be applied early too, which doesn't happen otherwise as far as I know. > > > > Don't all generic clock drivers also create a platform driver? > > At least drivers/clk/clk-fixed-factor.c does. > > > >> But perhaps this design is too much of an end-to-end test and not a un= it > >> test? In the spirit of unit testing we shouldn't care about how the no= de > >> is added to the live devicetree, just that there is a devicetree at al= l. > >> > >> Supporting overlays to more easily test combinations sounds like a goo= d > >> idea. Probably some kunit_*() prefixed functions could be used to > >> apply a test managed overlay and automatically remove it when the test > >> is over would work. The clk registration tests could use this API to > >> inject an overlay and then manually call the of_platform_populate() > >> function to create the platform device(s). The overlay could be built = in > >> drivers/clk/ too and then probably some macroish function can find the > >> blob and apply it. > > > > No need to manually call of_platform_populate() to create the > > platform devices. That is taken care of automatically when applying > > an overlay. > > > >> Is there some way to delete the platform devices that we populate from > >> the overlay? I'd like the tests to be hermetic. > > > Removing the overlay will delete the platform devices. > > I _think_ that is incorrect. Do you have a pointer to the overlay code t= hat > deletes the device? (If I remember correctly, the overlay remove code do= es not > even check whether the device exists and whether a driver is bound to it = -- but > this is on my todo list to look into.) https://elixir.bootlin.com/linux/latest/source/drivers/of/platform.c#L769 > > All of that works if you have your own code to apply a DT overlay. > > The recent fw_devlinks patches did cause some regressions, cfr. > > https://lore.kernel.org/all/CAMuHMdXEnSD4rRJ-o90x4OprUacN_rJgyo8x6=3D9F= 9rZ+-KzjOg@mail.gmail.com Gr{oetje,eeting}s, Geert --=20 Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k= .org In personal conversations with technical people, I call myself a hacker. Bu= t when I'm talking to journalists I just say "programmer" or something like t= hat. -- Linus Torvalds 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 C55F9C6FA8E for ; Sun, 5 Mar 2023 09:27: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:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=mmCQo0VkWfNmxqtWO0e/VVXPmpOCyoGCH2fSTZb63vg=; b=B9Qvzs4WhcsIAK mePKlPxZqCRBd+T0djfvacOgAldeoUhySGtYlhhbrihc/O/H47GPWlrh7B8/TQT/0XWDBnFSV9jU1 LvrOsYYGaxQBOTdP61kSFQ/KCrTTpLhO50ds/TXFQO7y1rIXCmGQJAs0BBJ9RdoXU2oWBTX7XJcCc U/Symv9uEK4jdGMb35CO4TM/K9j2fSk3Jr4JF2kBR3VP5hXFvtFUVrvgksd+M+9biOlhdM+Zicn4p 9nafNOakAkipH8m7qQ65r/qB8D0sLY7YXNQQHUt7abPilQedfMwRJp/D4iZmm8mErwj653BCm4+7G 86Ph5KmjkUFxdgdyvqyA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pYkdw-00A1Dx-RZ; Sun, 05 Mar 2023 09:27:00 +0000 Received: from mail-qt1-f169.google.com ([209.85.160.169]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pYkdt-00A1DY-6d for linux-um@lists.infradead.org; Sun, 05 Mar 2023 09:26:59 +0000 Received: by mail-qt1-f169.google.com with SMTP id c3so7549103qtc.8 for ; Sun, 05 Mar 2023 01:26:56 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678008415; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mqH/fUNw1v+IeKE/kiXgUEg5Js8jhAM4t/LI9qQb7pQ=; b=ssHJ6LV2SFsGcfFkpxM7dHr+IB4+I778Oqupi/RwUDenn2YBFCJadg7ifNoa41awB5 P22rkUfCL6hijTTlw0JedpdWRpibeojy97eC/bydvsQL4zfUGJhvowX2QN4V7RoGJiCg HTKLKpJTnMHiIV4VAthgnksWYfIZfmD8UzoTdefs+lsViq2cJcLYrdGEdt/GAUJb22jO d4+l/ncc9S2AoZhPyYD8b4CRuNV8lWVvm93uwMIYuw5Ox7Sk8YGxqgfPm61OJZkrdnCc GEbowbuc5iaDqfUOTJsBuZ2OQLW4fK4U343zUU6wkrPI/q9Iz0OHoUQd3KPg13eO7vg4 HuQg== X-Gm-Message-State: AO0yUKWAlFzCJtIDWe9AutiisK4rLTA54cFbEWdwen1AmJYz+fOnSw/W 6E6GUh/bGaa1xBHG/S+L/mn9gVw74fRqcw== X-Google-Smtp-Source: AK7set/MNdS5Ikk+E/DlGcXJg0vmeulE0HLCqC6cLz1n6q7AgaaaiC1vwPwgxvfMr7RtRjaE4Dx1HQ== X-Received: by 2002:ac8:57c4:0:b0:3bf:c7ac:37e4 with SMTP id w4-20020ac857c4000000b003bfc7ac37e4mr14280439qta.53.1678008414983; Sun, 05 Mar 2023 01:26:54 -0800 (PST) Received: from mail-yb1-f174.google.com (mail-yb1-f174.google.com. [209.85.219.174]) by smtp.gmail.com with ESMTPSA id f13-20020ac87f0d000000b003b9b48cdbe8sm1755844qtk.58.2023.03.05.01.26.53 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 05 Mar 2023 01:26:54 -0800 (PST) Received: by mail-yb1-f174.google.com with SMTP id x199so5451511ybg.5 for ; Sun, 05 Mar 2023 01:26:53 -0800 (PST) X-Received: by 2002:a5b:c42:0:b0:a43:52fe:c36f with SMTP id d2-20020a5b0c42000000b00a4352fec36fmr3381016ybr.7.1678008413630; Sun, 05 Mar 2023 01:26:53 -0800 (PST) MIME-Version: 1.0 References: <20230302013822.1808711-1-sboyd@kernel.org> <3759b28cca7ab751296d4dd83f2dcc51.sboyd@kernel.org> In-Reply-To: From: Geert Uytterhoeven Date: Sun, 5 Mar 2023 10:26:41 +0100 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 0/8] clk: Add kunit tests for fixed rate and parent data To: Frank Rowand Cc: Stephen Boyd , David Gow , Rob Herring , Michael Turquette , linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, patches@lists.linux.dev, Brendan Higgins , Greg Kroah-Hartman , "Rafael J . Wysocki" , Richard Weinberger , Anton Ivanov , Johannes Berg , Vincent Whitchurch , Christian Marangi , Krzysztof Kozlowski , devicetree@vger.kernel.org, linux-um@lists.infradead.org, linux-kselftest@vger.kernel.org, kunit-dev@googlegroups.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230305_012657_270778_A38B3431 X-CRM114-Status: GOOD ( 59.50 ) X-BeenThere: linux-um@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-um" Errors-To: linux-um-bounces+linux-um=archiver.kernel.org@lists.infradead.org SGkgRnJhbmssCgpPbiBTdW4sIE1hciA1LCAyMDIzIGF0IDQ6MzPigK9BTSBGcmFuayBSb3dhbmQg PGZyb3dhbmQubGlzdEBnbWFpbC5jb20+IHdyb3RlOgo+IE9uIDMvMi8yMyAxMzo0NywgR2VlcnQg VXl0dGVyaG9ldmVuIHdyb3RlOgo+ID4gT24gVGh1LCBNYXIgMiwgMjAyMyBhdCA4OjI44oCvUE0g U3RlcGhlbiBCb3lkIDxzYm95ZEBrZXJuZWwub3JnPiB3cm90ZToKPiA+PiBRdW90aW5nIFJvYiBI ZXJyaW5nICgyMDIzLTAzLTAyIDA5OjMyOjA5KQo+ID4+PiBPbiBUaHUsIE1hciAyLCAyMDIzIGF0 IDI6MTTigK9BTSBEYXZpZCBHb3cgPGRhdmlkZ293QGdvb2dsZS5jb20+IHdyb3RlOgo+ID4+Pj4g T24gVGh1LCAyIE1hciAyMDIzIGF0IDA5OjM4LCBTdGVwaGVuIEJveWQgPHNib3lkQGtlcm5lbC5v cmc+IHdyb3RlOgo+ID4+Pj4+IFRoaXMgcGF0Y2ggc2VyaWVzIGFkZHMgdW5pdCB0ZXN0cyBmb3Ig dGhlIGNsayBmaXhlZCByYXRlIGJhc2ljIHR5cGUgYW5kCj4gPj4+Pj4gdGhlIGNsayByZWdpc3Ry YXRpb24gZnVuY3Rpb25zIHRoYXQgdXNlIHN0cnVjdCBjbGtfcGFyZW50X2RhdGEuIFRvIGdldAo+ ID4+Pj4+IHRoZXJlLCB3ZSBhZGQgc3VwcG9ydCBmb3IgbG9hZGluZyBhIERUQiBpbnRvIHRoZSBV TUwga2VybmVsIHRoYXQncwo+ID4+Pj4+IHJ1bm5pbmcgdGhlIHVuaXQgdGVzdHMgYWxvbmcgd2l0 aCBwcm9iaW5nIHBsYXRmb3JtIGRyaXZlcnMgdG8gYmluZCB0bwo+ID4+Pj4+IGRldmljZSBub2Rl cyBzcGVjaWZpZWQgaW4gRFQuCj4gPj4+Pj4KPiA+Pj4+PiBXaXRoIHRoaXMgc2VyaWVzLCB3ZSdy ZSBhYmxlIHRvIGV4ZXJjaXNlIHNvbWUgb2YgdGhlIGNvZGUgaW4gdGhlIGNvbW1vbgo+ID4+Pj4+ IGNsayBmcmFtZXdvcmsgdGhhdCB1c2VzIGRldmljZXRyZWUgbG9va3VwcyB0byBmaW5kIHBhcmVu dHMgYW5kIHRoZSBmaXhlZAo+ID4+Pj4+IHJhdGUgY2xrIGNvZGUgdGhhdCBzY2FucyBkZXZpY2V0 cmVlIGRpcmVjdGx5IGFuZCBjcmVhdGVzIGNsa3MuIFBsZWFzZQo+ID4+Pj4+IHJldmlldy4KPiA+ Pj4+Pgo+ID4+Pj4KPiA+Pj4+IFRoYW5rcyBTdGVwaGVuIC0tIHRoaXMgaXMgcmVhbGx5IG5lYXQh Cj4gPj4+Pgo+ID4+Pj4gVGhpcyB3b3JrcyB3ZWxsIGhlcmUsIGFuZCBJIGxvdmUgYWxsIG9mIHRo ZSB0ZXN0cyBmb3IgdGhlCj4gPj4+PiBLVW5pdC9kZXZpY2UtdHJlZSBpbnRlZ3JhdGlvbiBhcyB3 ZWxsLgo+ID4+Pj4KPiA+Pj4+IEknbSBzdGlsbCBsb29raW5nIHRocm91Z2ggdGhlIGRldGFpbHMg b2YgaXQgKGFsYXMsIEkndmUgbW9zdGx5IGxpdmVkCj4gPj4+PiBpbiB4ODYtbGFuZCwgc28gbXkg ZGV2aWNlLXRyZWUga25vd2xlZGdlIGlzLCB1aCwgc3BvdHR5IHRvIHNheSB0aGUKPiA+Pj4+IGxl YXN0KSwgYnV0IGFwYXJ0IGZyb20gcG9zc2libHkgcmVuYW1pbmcgc29tZSB0aGluZ3Mgb3Igc2lt aWxhcmx5Cj4gPj4+PiBtaW5vciB0d2Vha3MsIEkndmUgbm90IGdvdCBhbnkgcmVhbCBzdWdnZXN0 aW9ucyB0aHVzIGZhci4KPiA+Pj4+Cj4gPj4+PiBJIGRvIHdvbmRlciB3aGV0aGVyIHdlJ2xsIHdh bnQsIG9uIHRoZSBLVW5pdCBzaWRlLCB0byBoYXZlIHNvbWUgd2F5IG9mCj4gPj4+PiBzdXBwb3J0 aW5nIEtVbml0IGRldmljZSB0cmVlcyBvbiBub24tVU1MIGFyY2hpdGVjY3R1cmVzIChlLmcuLCBp ZiB3ZQo+ID4+Pj4gbmVlZCB0byB0ZXN0IHNvbWV0aGluZyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMs IG9yIG9uIGEgYmlnLWVuZGlhbgo+ID4+Pj4gcGxhdGZvcm0sIGV0YyksIGJ1dCBJIHRoaW5rIHRo YXQncyBhIHF1ZXN0aW9uIGZvciB0aGUgZnV0dXJlLCByYXRoZXIKPiA+Pj4+IHRoYW4gc29tZXRo aW5nIHRoYXQgYWZmZWN0cyB0aGlzIHNlcmllcy4KPiA+Pj4KPiA+Pj4gSSdsbCBzYXkgdGhhdCdz IGEgcmVxdWlyZW1lbnQuIFdlIHNob3VsZCBiZSBhYmxlIHRvIHN0cnVjdHVyZSB0aGUKPiA+Pj4g dGVzdHMgdG8gbm90IGludGVyZmVyZSB3aXRoIHRoZSBydW5uaW5nIHN5c3RlbSdzIERULiBUaGUg RFQgdW5pdHRlc3QKPiA+Pj4gZG9lcyB0aGF0Lgo+ID4+Cj4gPj4gVGhhdCBjb3VsZCBiZSBhbm90 aGVyIGNob2ljZSBpbiB0aGUgdW5pdCB0ZXN0IGNob2ljZSBtZW51Lgo+ID4+IENPTkZJR19PRl9L VU5JVF9OT1RfVU1MIHRoYXQgaW5qZWN0cyBzb21lIGJ1aWx0LWluIERUQiBvdmVybGF5IG9uIGFu Cj4gPj4gYXJjaGl0ZWN0dXJlIHRoYXQgd2FudHMgdG8gcnVuIHRlc3RzLgo+ID4KPiA+IEFzIGxv bmcgYXMgeW91IHVzZSBjb21wYXRpYmxlIHZhbHVlcyB0aGF0IGRvbid0IGV4aXN0IGVsc2V3aGVy ZSwKPiA+IGFuZCBkb24ndCBvdmVyd3JpdGUgYW55dGhpbmcsIHlvdSBjYW4gbG9hZCB5b3VyIGt1 bml0IHRlc3Qgb3ZlcmxheXMKPiA+IG9uIGFueSBydW5uaW5nIHN5c3RlbSB0aGF0IGhhcyBEVCBz dXBwb3J0Lgo+ID4KPiA+Pj4gQXMgYSBzaWRlIHRvcGljLCBJcyBhbnlvbmUgbG9va2luZyBhdCBn ZXR0aW5nIFVNTCB0byB3b3JrIG9uIGFybTY0Pwo+ID4+PiBJdCdzIHN1cnByaXNpbmcgaG93IG11 Y2ggeDg2IHN0dWZmIHRoZXJlIGlzIHdoaWNoIGlzIEkgZ3Vlc3Mgb25lCj4gPj4+IHJlYXNvbiBp dCBoYXNuJ3QgaGFwcGVuZWQuCj4gPj4KPiA+PiBJJ3ZlIG5vIGlkZWEgYnV0IGl0IHdvdWxkIGJl IG5pY2UgaW5kZWVkLgo+ID4KPiA+IEkgYmVsaWV2ZSB0aGF0J3Mgbm9uLXRyaXZpYWwuIEF0IGxl YXN0IGZvciBhcm0zMiAoSSBkaWRuJ3QgaGF2ZSBhbnkgYXJtNjQKPiA+IHN5c3RlbXMgbGFzdCB0 aW1lIEkgYXNrZWQgdGhlIGV4cGVydHMpLgo+ID4KPiA+Pj4+IFNpbWlsYXJseSwgSSB3b25kZXIg aWYgdGhlcmUncyBzb21ldGhpbmcgd2UgY291bGQgZG8gd2l0aCBkZXZpY2UgdHJlZQo+ID4+Pj4g b3ZlcmxheXMsIGluIG9yZGVyIHRvIG1ha2UgaXQgcG9zc2libGUgZm9yIHRlc3RzIHRvIHN3YXAg bm9kZXMgaW4gYW5kCj4gPj4+PiBvdXQgZm9yIHRlc3RpbmcuCj4gPj4+Cj4gPj4+IFllcywgdGhh dCdzIGhvdyB0aGUgRFQgdW5pdHRlc3Qgd29ya3MuIEJ1dCBpdCBpcyBwcmV0dHkgbXVjaCBvbmUg YmlnCj4gPj4+IG92ZXJsYXkgKGlnbm9yaW5nIHRoZSBvdmVybGF5IHRlc3RzKS4gSXQgY291bGQg cHJvYmFibHkgYmUgbW9yZQo+ID4+PiBtb2R1bGFyIHdoZXJlIGl0IGlzIGFwcGx5IG92ZXJsYXks IHRlc3QsIHJlbW92ZSBvdmVybGF5LCByZXBlYXQuCj4gPj4KPiA+PiBJIGRpZG4ndCB3YW50IHRv IHJlbHkgb24gdGhlIG92ZXJsYXkgY29kZSB0byBpbmplY3QgRFQgbm9kZXMuIEhhdmluZwo+ID4+ IHRlc3RzIHdyaXR0ZW4gZm9yIHRoZSBmYWtlIEtVbml0IG1hY2hpbmUgaXMgc2ltcGxlLiBJdCBj bG9zZWx5IG1hdGNoZXMKPiA+PiBob3cgY2xrIGNvZGUgcHJvYmVzIHRoZSBEVEIgYW5kIGhvdyBu b2RlcyBhcmUgY3JlYXRlZCBhbmQgcG9wdWxhdGVkIG9uCj4gPj4gdGhlIHBsYXRmb3JtIGJ1cyBh cyBkZXZpY2VzLiBDTEtfT0ZfREVDTEFSRSgpIHdvdWxkIG5lZWQgdGhlIG92ZXJsYXkgdG8KPiA+ PiBiZSBhcHBsaWVkIGVhcmx5IHRvbywgd2hpY2ggZG9lc24ndCBoYXBwZW4gb3RoZXJ3aXNlIGFz IGZhciBhcyBJIGtub3cuCj4gPgo+ID4gRG9uJ3QgYWxsIGdlbmVyaWMgY2xvY2sgZHJpdmVycyBh bHNvIGNyZWF0ZSBhIHBsYXRmb3JtIGRyaXZlcj8KPiA+IEF0IGxlYXN0IGRyaXZlcnMvY2xrL2Ns ay1maXhlZC1mYWN0b3IuYyBkb2VzLgo+ID4KPiA+PiBCdXQgcGVyaGFwcyB0aGlzIGRlc2lnbiBp cyB0b28gbXVjaCBvZiBhbiBlbmQtdG8tZW5kIHRlc3QgYW5kIG5vdCBhIHVuaXQKPiA+PiB0ZXN0 PyBJbiB0aGUgc3Bpcml0IG9mIHVuaXQgdGVzdGluZyB3ZSBzaG91bGRuJ3QgY2FyZSBhYm91dCBo b3cgdGhlIG5vZGUKPiA+PiBpcyBhZGRlZCB0byB0aGUgbGl2ZSBkZXZpY2V0cmVlLCBqdXN0IHRo YXQgdGhlcmUgaXMgYSBkZXZpY2V0cmVlIGF0IGFsbC4KPiA+Pgo+ID4+IFN1cHBvcnRpbmcgb3Zl cmxheXMgdG8gbW9yZSBlYXNpbHkgdGVzdCBjb21iaW5hdGlvbnMgc291bmRzIGxpa2UgYSBnb29k Cj4gPj4gaWRlYS4gUHJvYmFibHkgc29tZSBrdW5pdF8qKCkgcHJlZml4ZWQgZnVuY3Rpb25zIGNv dWxkIGJlIHVzZWQgdG8KPiA+PiBhcHBseSBhIHRlc3QgbWFuYWdlZCBvdmVybGF5IGFuZCBhdXRv bWF0aWNhbGx5IHJlbW92ZSBpdCB3aGVuIHRoZSB0ZXN0Cj4gPj4gaXMgb3ZlciB3b3VsZCB3b3Jr LiBUaGUgY2xrIHJlZ2lzdHJhdGlvbiB0ZXN0cyBjb3VsZCB1c2UgdGhpcyBBUEkgdG8KPiA+PiBp bmplY3QgYW4gb3ZlcmxheSBhbmQgdGhlbiBtYW51YWxseSBjYWxsIHRoZSBvZl9wbGF0Zm9ybV9w b3B1bGF0ZSgpCj4gPj4gZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBwbGF0Zm9ybSBkZXZpY2Uocyku IFRoZSBvdmVybGF5IGNvdWxkIGJlIGJ1aWx0IGluCj4gPj4gZHJpdmVycy9jbGsvIHRvbyBhbmQg dGhlbiBwcm9iYWJseSBzb21lIG1hY3JvaXNoIGZ1bmN0aW9uIGNhbiBmaW5kIHRoZQo+ID4+IGJs b2IgYW5kIGFwcGx5IGl0Lgo+ID4KPiA+IE5vIG5lZWQgdG8gbWFudWFsbHkgY2FsbCBvZl9wbGF0 Zm9ybV9wb3B1bGF0ZSgpIHRvIGNyZWF0ZSB0aGUKPiA+IHBsYXRmb3JtIGRldmljZXMuIFRoYXQg aXMgdGFrZW4gY2FyZSBvZiBhdXRvbWF0aWNhbGx5IHdoZW4gYXBwbHlpbmcKPiA+IGFuIG92ZXJs YXkuCj4gPgo+ID4+IElzIHRoZXJlIHNvbWUgd2F5IHRvIGRlbGV0ZSB0aGUgcGxhdGZvcm0gZGV2 aWNlcyB0aGF0IHdlIHBvcHVsYXRlIGZyb20KPiA+PiB0aGUgb3ZlcmxheT8gSSdkIGxpa2UgdGhl IHRlc3RzIHRvIGJlIGhlcm1ldGljLgo+Cj4gPiBSZW1vdmluZyB0aGUgb3ZlcmxheSB3aWxsIGRl bGV0ZSB0aGUgcGxhdGZvcm0gZGV2aWNlcy4KPgo+IEkgX3RoaW5rXyB0aGF0IGlzIGluY29ycmVj dC4gIERvIHlvdSBoYXZlIGEgcG9pbnRlciB0byB0aGUgb3ZlcmxheSBjb2RlIHRoYXQKPiBkZWxl dGVzIHRoZSBkZXZpY2U/ICAoSWYgSSByZW1lbWJlciBjb3JyZWN0bHksIHRoZSBvdmVybGF5IHJl bW92ZSBjb2RlIGRvZXMgbm90Cj4gZXZlbiBjaGVjayB3aGV0aGVyIHRoZSBkZXZpY2UgZXhpc3Rz IGFuZCB3aGV0aGVyIGEgZHJpdmVyIGlzIGJvdW5kIHRvIGl0IC0tIGJ1dAo+IHRoaXMgaXMgb24g bXkgdG9kbyBsaXN0IHRvIGxvb2sgaW50by4pCgpodHRwczovL2VsaXhpci5ib290bGluLmNvbS9s aW51eC9sYXRlc3Qvc291cmNlL2RyaXZlcnMvb2YvcGxhdGZvcm0uYyNMNzY5Cgo+ID4gQWxsIG9m IHRoYXQgd29ya3MgaWYgeW91IGhhdmUgeW91ciBvd24gY29kZSB0byBhcHBseSBhIERUIG92ZXJs YXkuCj4gPiBUaGUgcmVjZW50IGZ3X2RldmxpbmtzIHBhdGNoZXMgZGlkIGNhdXNlIHNvbWUgcmVn cmVzc2lvbnMsIGNmci4KPiA+IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2FsbC9DQU11SE1kWEVu U0Q0clJKLW85MHg0T3ByVWFjTl9ySmd5bzh4Nj05RjlyWistS3pqT2dAbWFpbC5nbWFpbC5jb20K Ckdye29ldGplLGVldGluZ31zLAoKICAgICAgICAgICAgICAgICAgICAgICAgR2VlcnQKCi0tIApH ZWVydCBVeXR0ZXJob2V2ZW4gLS0gVGhlcmUncyBsb3RzIG9mIExpbnV4IGJleW9uZCBpYTMyIC0t IGdlZXJ0QGxpbnV4LW02OGsub3JnCgpJbiBwZXJzb25hbCBjb252ZXJzYXRpb25zIHdpdGggdGVj aG5pY2FsIHBlb3BsZSwgSSBjYWxsIG15c2VsZiBhIGhhY2tlci4gQnV0CndoZW4gSSdtIHRhbGtp bmcgdG8gam91cm5hbGlzdHMgSSBqdXN0IHNheSAicHJvZ3JhbW1lciIgb3Igc29tZXRoaW5nIGxp a2UgdGhhdC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBMaW51cyBUb3J2YWxk cwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgt dW0gbWFpbGluZyBsaXN0CmxpbnV4LXVtQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC11bQo=