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=-4.7 required=3.0 tests=DKIM_ADSP_ALL,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_PASS,USER_AGENT_NEOMUTT autolearn=ham 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 30A5FC43381 for ; Tue, 19 Mar 2019 10:35:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C97BD20989 for ; Tue, 19 Mar 2019 10:35:07 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=plaes.org header.i=@plaes.org header.b="XYahg6RS" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727666AbfCSKfG (ORCPT ); Tue, 19 Mar 2019 06:35:06 -0400 Received: from plaes.org ([188.166.43.21]:60216 "EHLO plaes.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725862AbfCSKfD (ORCPT ); Tue, 19 Mar 2019 06:35:03 -0400 Received: from plaes.org (localhost [127.0.0.1]) by plaes.org (Postfix) with ESMTPSA id 7F1C140091; Tue, 19 Mar 2019 10:34:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=plaes.org; s=mail; t=1552991699; bh=ULOU71fB4bGoMbQIkKCIMUP28u46cVjyGuQRPWP6gD0=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=XYahg6RS7u2NsuAQGdDruDa9rMXLy9aSDEYsoWitHj4dQSkOzVzJvh+UpdRkOffMU nXryaEUrWU+OKx3zWMVPMnStYNVtuEI7xE+XiEGJBmJM3BwjjFjcCzwQOmi20Vbdd+ DHeJ6thJeb6hxxag6gi+NUsNmG6uDRPhVCHEcG5bVGYQKFucDR5axyukisGv4+kqJa GYPoTxPsNpK5ZDJ1MrEwA43JSZ01AnRQtUAaMN1Ey2h2xc+RuHqKtQgfEn8NWAqSP+ VCewF7j9RRwsU4P0zdND6Qt56Yzy4Q20WtgHmFMLhBAbF1sVHe78T8TGi96oOjL7LV TqpyXyqaLwr1Q== Date: Tue, 19 Mar 2019 10:34:58 +0000 From: Priit Laes To: Jernej =?utf-8?Q?=C5=A0krabec?= Cc: maxime.ripard@bootlin.com, wens@csie.org, robh+dt@kernel.org, mturquette@baylibre.com, sboyd@kernel.org, airlied@linux.ie, architt@codeaurora.org, a.hajda@samsung.com, Laurent.pinchart@ideasonboard.com, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-sunxi@googlegroups.com Subject: Re: [linux-sunxi] [PATCH v3 02/28] clk: sunxi-ng: Adjust MP clock parent rate when allowed Message-ID: <20190319103458.zrznmgz5v65ujbcj@plaes.org> References: <20181104182705.18047-1-jernej.skrabec@siol.net> <20190121083729.7qsmj7drxvmnjoye@plaes.org> <20190121133433.lryqz7ivrj5cxu3g@plaes.org> <1726638.4TPIZlPAWH@jernej-laptop> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1726638.4TPIZlPAWH@jernej-laptop> User-Agent: NeoMutt/20170113 (1.7.2) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jan 21, 2019 at 07:13:07PM +0100, Jernej Škrabec wrote: > Dne ponedeljek, 21. januar 2019 ob 14:34:33 CET je Priit Laes napisal(a): > > On Mon, Jan 21, 2019 at 08:37:29AM +0000, Priit Laes wrote: > > > On Fri, Jan 18, 2019 at 10:51:10PM +0100, Jernej Škrabec wrote: > > > > Dne četrtek, 17. januar 2019 ob 08:24:02 CET je Priit Laes napisal(a): > > > > > On Wed, Jan 16, 2019 at 06:00:32PM +0100, Jernej Škrabec wrote: > > > > > > Dne sreda, 16. januar 2019 ob 13:09:58 CET je Priit Laes napisal(a): > > > > > > > On Thu, Jan 10, 2019 at 06:10:59PM +0100, Jernej Škrabec wrote: > > > > > > > > Dne četrtek, 10. januar 2019 ob 10:15:48 CET je Priit Laes > napisal(a): > > > > > > > > > On Sun, Nov 04, 2018 at 07:26:39PM +0100, Jernej Skrabec > wrote: > > > > > > > > > > Currently MP clocks don't consider adjusting parent rate > > > > > > > > > > even if > > > > > > > > > > they > > > > > > > > > > are allowed to do so. Such behaviour considerably lowers > > > > > > > > > > amount of > > > > > > > > > > possible rates, which is very inconvenient when such clock > > > > > > > > > > is used > > > > > > > > > > for > > > > > > > > > > pixel clock, for example. > > > > > > > > > > > > > > > > > > > > In order to improve the situation, adjusting parent rate is > > > > > > > > > > considered > > > > > > > > > > when allowed. > > > > > > > > > > > > > > > > > > > > This code is inspired by clk_divider_bestdiv() function, > > > > > > > > > > which > > > > > > > > > > does > > > > > > > > > > basically the same thing for different clock type. > > > > > > > > > > > > > > > > > > This patch seems to break the eMMC support on > > > > > > > > > Olinuxino-Lime2-eMMC > > > > > > > > > boards: > > > > > > > > > > > > > > > > > > EXT4-fs (mmcblk1p4): INFO: recovery required on readonly > > > > > > > > > filesystem > > > > > > > > > EXT4-fs (mmcblk1p4): write access will be enabled during > > > > > > > > > recovery > > > > > > > > > sunxi-mmc 1c11000.mmc: data error, sending stop command > > > > > > > > > sunxi-mmc 1c11000.mmc: send stop command failed > > > > > > > > > > > > > > > > I'm not familiar with A20. What is interesting is that emmc > > > > > > > > clocks > > > > > > > > don't > > > > > > > > have CLK_SET_RATE_PARENT flag set, so you shouldn't see any > > > > > > > > difference. > > > > > > > > > > > > > > > > Can you post content of clk_summary with and without this patch? > > > > > > > > > > > > > > In both cases I booted from FEL with rootfs on sdcard and tried to > > > > > > > mount > > > > > > > partition from eMMC to /mnt. With your patch, last step it fails. > > > > > > > > > > > > > > pre-patch working: > > > > > > > pll-ddr-other[768MHz] -> mmc2[512MHz]. (For some reason ahb-mmc2 > > > > > > > is > > > > > > > off?) > > > > > > > > > > > > > > post-patch not working: > > > > > > > pll-periph[600MHz] -> mmc2[500Mhz], (ahb-mmc2 is enabled) > > > > > > > > > > > > > > Also, attached the logs. > > > > > > > > > > > > Thanks. Just one more request. Can you enable debug messages in mmc > > > > > > driver? > > > > > > I'm interested in output of this line: > > > > > > > > > > > > dev_dbg(mmc_dev(mmc), "setting clk to %d, rounded %ld\n", > > > > > > > > > > > > clock, rate); > > > > > > > > > > 1c11000 is eMMC: > > > > > [snip] > > > > > [ 1.961644] sunxi-mmc 1c11000.mmc: setting clk to 400000, rounded > > > > > 400000 > > > > > [ 2.004091] sunxi-mmc 1c11000.mmc: setting clk to 400000, rounded > > > > > 400000 > > > > > [ 2.020296] sunxi-mmc 1c11000.mmc: setting clk to 400000, rounded > > > > > 400000 > > > > > [ 2.039917] sunxi-mmc 1c11000.mmc: setting clk to 400000, rounded > > > > > 400000 > > > > > [ 2.047847] sunxi-mmc 1c11000.mmc: setting clk to 400000, rounded > > > > > 400000 > > > > > [ 2.055053] sunxi-mmc 1c11000.mmc: setting clk to 400000, rounded > > > > > 400000 > > > > > [ 2.065256] sunxi-mmc 1c11000.mmc: setting clk to 400000, rounded > > > > > 400000 > > > > > [ 2.092351] sunxi-mmc 1c11000.mmc: setting clk to 400000, rounded > > > > > 400000 > > > > > [ 2.168725] sunxi-mmc 1c11000.mmc: setting clk to 400000, rounded > > > > > 400000 > > > > > [ 2.189403] sunxi-mmc 1c11000.mmc: setting clk to 52000000, rounded > > > > > 52000000 [ 2.203340] sunxi-mmc 1c11000.mmc: setting clk to > > > > > 52000000, > > > > > rounded 52000000 [ 2.211412] sunxi-mmc 1c11000.mmc: setting clk to > > > > > 52000000, rounded 52000000 [ 4.967865] sunxi-mmc 1c11000.mmc: > > > > > setting > > > > > clk to 52000000, rounded 52000000 [ 8.755345] sunxi-mmc > > > > > 1c11000.mmc: > > > > > setting clk to 52000000, rounded 52000000 [ 9.082510] sunxi-mmc > > > > > 1c11000.mmc: setting clk to 52000000, rounded 52000000 > > > > > > > > > > Here I tried to mount partition from eMMC... > > > > > > > > > > [ 72.167311] sunxi-mmc 1c11000.mmc: setting clk to 52000000, rounded > > > > > 52000000 [ 72.269629] sunxi-mmc 1c11000.mmc: data error, sending > > > > > stop > > > > > command [ 73.268999] sunxi-mmc 1c11000.mmc: send stop command failed > > > > > [/snip] > > > > > > > > > > And clock tree: > > > > > [snip] > > > > > pll-periph-base 3 3 0 1200000000 > > > > > 0 > > > > > > > > > > 0 50000 pll-periph 6 6 0 600000000 > > > > > > > > > > 0 0 50000 mmc2 3 3 0 > > > > > 50000000 > > > > > > > > > > 0 0 50000 mmc2_sample 1 1 0 > > > > > > > > > > 50000000 0 120 50000 mmc2_output 1 1 > > > > > 0 > > > > > > > > > > 50000000 0 60 50000 ahb 18 18 > > > > > 0 300000000 0 0 50000 ahb-mmc2 1 > > > > > 1 > > > > > > > > > > 0 300000000 0 0 50000 [/snip] > > > > > > > > > > And without patch: > > > > > [snip] > > > > > [ 2.003341] sunxi-mmc 1c11000.mmc: XXX: setting clk to 400000, > > > > > rounded > > > > > 400000 [ 2.019479] sunxi-mmc 1c11000.mmc: XXX: setting clk to > > > > > 400000, > > > > > rounded 400000 [ 2.039144] sunxi-mmc 1c11000.mmc: XXX: setting clk > > > > > to > > > > > 400000, rounded 400000 [ 2.047129] sunxi-mmc 1c11000.mmc: XXX: > > > > > setting > > > > > clk to 400000, rounded 400000 [ 2.054324] sunxi-mmc 1c11000.mmc: > > > > > XXX: > > > > > setting clk to 400000, rounded 400000 [ 2.064481] sunxi-mmc > > > > > 1c11000.mmc: > > > > > XXX: setting clk to 400000, rounded 400000 [ 2.091624] sunxi-mmc > > > > > 1c11000.mmc: XXX: setting clk to 400000, rounded 400000 [ 2.168067] > > > > > sunxi-mmc 1c11000.mmc: XXX: setting clk to 400000, rounded 400000 [ > > > > > 2.188239] sunxi-mmc 1c11000.mmc: XXX: setting clk to 52000000, rounded > > > > > 51200000 [ 2.202779] sunxi-mmc 1c11000.mmc: XXX: setting clk to > > > > > 52000000, rounded 51200000 [ 2.210817] sunxi-mmc 1c11000.mmc: XXX: > > > > > setting clk to 52000000, rounded 51200000 [ 5.103358] sunxi-mmc > > > > > 1c11000.mmc: XXX: setting clk to 52000000, rounded 51200000 [ > > > > > 8.950237] > > > > > sunxi-mmc 1c11000.mmc: XXX: setting clk to 52000000, rounded 51200000 > > > > > [ > > > > > 9.376201] sunxi-mmc 1c11000.mmc: XXX: setting clk to 52000000, rounded > > > > > 51200000 [ 113.618387] sunxi-mmc 1c11000.mmc: XXX: setting clk to > > > > > 52000000, rounded 51200000 [ 113.707979] EXT4-fs (mmcblk1p4): > > > > > recovery > > > > > complete > > > > > [ 113.728162] EXT4-fs (mmcblk1p4): mounted filesystem with ordered > > > > > data > > > > > mode. Opts: (null) [/snip] > > > > > > > > > > And clock tree: > > > > > [snip] > > > > > pll-ddr-base 2 2 0 768000000 > > > > > 0 > > > > > > > > > > 0 50000 pll-ddr-other 1 1 0 768000000 > > > > > > > > > > 0 0 50000 mmc2 0 0 0 > > > > > 51200000 > > > > > > > > > > 0 0 50000 mmc2_sample 0 0 0 > > > > > > > > > > 51200000 0 120 50000 mmc2_output 0 0 > > > > > 0 > > > > > > > > > > 51200000 0 72 50000 [/snip] > > > > > > > > It seems to me that clock rate is set properly. It's even better than > > > > before since there is no error between wanted and real clock. I bet > > > > that if you call clk_get_rate() directly behind clk_set_rate() in mmc > > > > driver, you'll get correct value. > > > > > > > > However, it seems that at some point some other peripheral changes it's > > > > parent clock rate, which inadvertely changes emmc2 clock rate too. The > > > > only possible clock which could interfere is sata. Can you disable > > > > driver in you kernel config and try again? > > > > > > OK, tried following things in succession, but SATA disabling does not > > > work: > > > > > > a) Marked all ahci stuff in devicetree as disabled > > > b) Disable CONFIG_AHCI_SUNXI in kernel > > > c) Even disabled SATA stuff in u-boot > > > > But it works, when I allow mmc2 clock to set parent rate: > > Strange, I checked both pre- and post- patch clk_summary you sent me and in > both cases both mmc2 parent clocks have same rate as before. This would need a > more detailed analysis with a lot of debug print, but don't have such board. > > CLK_SET_PARENT rate might be viable solution, but you have to be sure that > any clock using pll-periph as a parent is in expected range. > > On the plus side, if this works, eMMC will work faster due to 8 MHz clock rate > increase :) > > > > > pll-periph-base 3 3 0 312000000 0 > > 0 50000 mbus 1 1 0 78000000 > > 0 0 50000 pll-periph-sata 1 1 0 > > 26000000 0 0 50000 sata 1 1 > > 0 26000000 0 0 50000 pll-periph 5 > > 5 0 156000000 0 0 50000 mmc2 0 > > 0 0 52000000 0 0 50000 mmc2_sample 0 > > 0 0 52000000 0 120 50000 mmc2_output > > 0 0 0 52000000 0 120 50000 mmc0 > > 0 0 0 39000000 0 0 50000 mmc0_sample > > 0 0 0 39000000 0 90 50000 mmc0_output > > 0 0 0 39000000 0 90 50000 > > > > > > Now, what I don't understand is why the `enable count` does not increase :( > > mmc has suspend/resume functionality which might power down mmc when not in > use and thus disable clocks. Try initiate some big transfer from/to eMMC and > check clocks in between. OK, seems like everything magically started working again in 5.1.0-rc1: pll-periph-base 3 3 0 1200000000 0 0 50000 mbus 1 1 0 300000000 0 0 50000 pll-periph-sata 1 1 0 100000000 0 0 50000 sata 1 1 0 100000000 0 0 50000 pll-periph 3 3 0 600000000 0 0 50000 mmc2 0 0 0 50000000 0 0 50000 mmc2_sample 0 0 0 50000000 0 120 50000 mmc2_output 0 0 0 50000000 0 60 50000 > BR, > Jernej > > > > > --- > > diff --git a/drivers/clk/sunxi-ng/ccu-sun4i-a10.c > > b/drivers/clk/sunxi-ng/ccu-sun4i-a10.c index 129ebd2588fd..605e13b4ef90 > > 100644 > > --- a/drivers/clk/sunxi-ng/ccu-sun4i-a10.c > > +++ b/drivers/clk/sunxi-ng/ccu-sun4i-a10.c > > @@ -498,7 +498,7 @@ static SUNXI_CCU_MP_WITH_MUX_GATE(mmc2_clk, "mmc2", > > mod0_default_parents, 0x090, 16, 2, /* P */ > > 24, 2, /* mux */ > > BIT(31), /* gate */ > > - 0); > > + CLK_SET_RATE_PARENT); > > > > /* MMC output and sample clocks are not present on A10 */ > > static SUNXI_CCU_PHASE(mmc2_output_clk, "mmc2_output", "mmc2", > > > > > > Best regards, > > > > Jernej > > > > > -- > You received this message because you are subscribed to the Google Groups "linux-sunxi" group. > To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. From mboxrd@z Thu Jan 1 00:00:00 1970 From: Priit Laes Subject: Re: [PATCH v3 02/28] clk: sunxi-ng: Adjust MP clock parent rate when allowed Date: Tue, 19 Mar 2019 10:34:58 +0000 Message-ID: <20190319103458.zrznmgz5v65ujbcj@plaes.org> References: <20181104182705.18047-1-jernej.skrabec@siol.net> <20190121083729.7qsmj7drxvmnjoye@plaes.org> <20190121133433.lryqz7ivrj5cxu3g@plaes.org> <1726638.4TPIZlPAWH@jernej-laptop> Reply-To: plaes-q/aMd4JkU83YtjvyW6yDsg@public.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Return-path: Sender: linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org Content-Disposition: inline In-Reply-To: <1726638.4TPIZlPAWH@jernej-laptop> List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , To: Jernej =?utf-8?Q?=C5=A0krabec?= Cc: maxime.ripard-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org, wens-jdAy2FN1RRM@public.gmane.org, robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, mturquette-rdvid1DuHRBWk0Htik3J/w@public.gmane.org, sboyd-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, airlied-cv59FeDIM0c@public.gmane.org, architt-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, a.hajda-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org, Laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-clk-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org List-Id: devicetree@vger.kernel.org On Mon, Jan 21, 2019 at 07:13:07PM +0100, Jernej =C5=A0krabec wrote: > Dne ponedeljek, 21. januar 2019 ob 14:34:33 CET je Priit Laes napisal(a): > > On Mon, Jan 21, 2019 at 08:37:29AM +0000, Priit Laes wrote: > > > On Fri, Jan 18, 2019 at 10:51:10PM +0100, Jernej =C5=A0krabec wrote: > > > > Dne =C4=8Detrtek, 17. januar 2019 ob 08:24:02 CET je Priit Laes nap= isal(a): > > > > > On Wed, Jan 16, 2019 at 06:00:32PM +0100, Jernej =C5=A0krabec wro= te: > > > > > > Dne sreda, 16. januar 2019 ob 13:09:58 CET je Priit Laes napisa= l(a): > > > > > > > On Thu, Jan 10, 2019 at 06:10:59PM +0100, Jernej =C5=A0krabec= wrote: > > > > > > > > Dne =C4=8Detrtek, 10. januar 2019 ob 10:15:48 CET je Priit = Laes=20 > napisal(a): > > > > > > > > > On Sun, Nov 04, 2018 at 07:26:39PM +0100, Jernej Skrabec= =20 > wrote: > > > > > > > > > > Currently MP clocks don't consider adjusting parent rat= e > > > > > > > > > > even if > > > > > > > > > > they > > > > > > > > > > are allowed to do so. Such behaviour considerably lower= s > > > > > > > > > > amount of > > > > > > > > > > possible rates, which is very inconvenient when such cl= ock > > > > > > > > > > is used > > > > > > > > > > for > > > > > > > > > > pixel clock, for example. > > > > > > > > > >=20 > > > > > > > > > > In order to improve the situation, adjusting parent rat= e is > > > > > > > > > > considered > > > > > > > > > > when allowed. > > > > > > > > > >=20 > > > > > > > > > > This code is inspired by clk_divider_bestdiv() function= , > > > > > > > > > > which > > > > > > > > > > does > > > > > > > > > > basically the same thing for different clock type. > > > > > > > > >=20 > > > > > > > > > This patch seems to break the eMMC support on > > > > > > > > > Olinuxino-Lime2-eMMC > > > > > > > > > boards: > > > > > > > > >=20 > > > > > > > > > EXT4-fs (mmcblk1p4): INFO: recovery required on readonly > > > > > > > > > filesystem > > > > > > > > > EXT4-fs (mmcblk1p4): write access will be enabled during > > > > > > > > > recovery > > > > > > > > > sunxi-mmc 1c11000.mmc: data error, sending stop command > > > > > > > > > sunxi-mmc 1c11000.mmc: send stop command failed > > > > > > > >=20 > > > > > > > > I'm not familiar with A20. What is interesting is that emmc > > > > > > > > clocks > > > > > > > > don't > > > > > > > > have CLK_SET_RATE_PARENT flag set, so you shouldn't see any > > > > > > > > difference. > > > > > > > >=20 > > > > > > > > Can you post content of clk_summary with and without this p= atch? > > > > > > >=20 > > > > > > > In both cases I booted from FEL with rootfs on sdcard and tri= ed to > > > > > > > mount > > > > > > > partition from eMMC to /mnt. With your patch, last step it fa= ils. > > > > > > >=20 > > > > > > > pre-patch working: > > > > > > > pll-ddr-other[768MHz] -> mmc2[512MHz]. (For some reason ahb-m= mc2 > > > > > > > is > > > > > > > off?) > > > > > > >=20 > > > > > > > post-patch not working: > > > > > > > pll-periph[600MHz] -> mmc2[500Mhz], (ahb-mmc2 is enabled) > > > > > > >=20 > > > > > > > Also, attached the logs. > > > > > >=20 > > > > > > Thanks. Just one more request. Can you enable debug messages in= mmc > > > > > > driver? > > > > > > I'm interested in output of this line: > > > > > >=20 > > > > > > dev_dbg(mmc_dev(mmc), "setting clk to %d, rounded %ld\n", > > > > > >=20 > > > > > > clock, rate); > > > > >=20 > > > > > 1c11000 is eMMC: > > > > > [snip] > > > > > [ 1.961644] sunxi-mmc 1c11000.mmc: setting clk to 400000, roun= ded > > > > > 400000 > > > > > [ 2.004091] sunxi-mmc 1c11000.mmc: setting clk to 400000, roun= ded > > > > > 400000 > > > > > [ 2.020296] sunxi-mmc 1c11000.mmc: setting clk to 400000, roun= ded > > > > > 400000 > > > > > [ 2.039917] sunxi-mmc 1c11000.mmc: setting clk to 400000, roun= ded > > > > > 400000 > > > > > [ 2.047847] sunxi-mmc 1c11000.mmc: setting clk to 400000, roun= ded > > > > > 400000 > > > > > [ 2.055053] sunxi-mmc 1c11000.mmc: setting clk to 400000, roun= ded > > > > > 400000 > > > > > [ 2.065256] sunxi-mmc 1c11000.mmc: setting clk to 400000, roun= ded > > > > > 400000 > > > > > [ 2.092351] sunxi-mmc 1c11000.mmc: setting clk to 400000, roun= ded > > > > > 400000 > > > > > [ 2.168725] sunxi-mmc 1c11000.mmc: setting clk to 400000, roun= ded > > > > > 400000 > > > > > [ 2.189403] sunxi-mmc 1c11000.mmc: setting clk to 52000000, ro= unded > > > > > 52000000 [ 2.203340] sunxi-mmc 1c11000.mmc: setting clk to > > > > > 52000000, > > > > > rounded 52000000 [ 2.211412] sunxi-mmc 1c11000.mmc: setting cl= k to > > > > > 52000000, rounded 52000000 [ 4.967865] sunxi-mmc 1c11000.mmc: > > > > > setting > > > > > clk to 52000000, rounded 52000000 [ 8.755345] sunxi-mmc > > > > > 1c11000.mmc: > > > > > setting clk to 52000000, rounded 52000000 [ 9.082510] sunxi-mm= c > > > > > 1c11000.mmc: setting clk to 52000000, rounded 52000000 > > > > >=20 > > > > > Here I tried to mount partition from eMMC... > > > > >=20 > > > > > [ 72.167311] sunxi-mmc 1c11000.mmc: setting clk to 52000000, ro= unded > > > > > 52000000 [ 72.269629] sunxi-mmc 1c11000.mmc: data error, sendin= g > > > > > stop > > > > > command [ 73.268999] sunxi-mmc 1c11000.mmc: send stop command f= ailed > > > > > [/snip] > > > > >=20 > > > > > And clock tree: > > > > > [snip] > > > > > pll-periph-base 3 3 0 1200000000 = =20 > > > > > 0 > > > > >=20 > > > > > 0 50000 pll-periph 6 6 0 60000= 0000 > > > > > =20 > > > > > 0 0 50000 mmc2 3 3 0 = =20 > > > > > 50000000 > > > > > =20 > > > > > 0 0 50000 mmc2_sample 1 1 0 > > > > >=20 > > > > > 50000000 0 120 50000 mmc2_output 1 1= =20 > > > > > 0 > > > > >=20 > > > > > 50000000 0 60 50000 ahb 18 = 18 > > > > > 0 300000000 0 0 50000 ahb-mmc2 1 = =20 > > > > > 1 > > > > > =20 > > > > > 0 300000000 0 0 50000 [/snip] > > > > >=20 > > > > > And without patch: > > > > > [snip] > > > > > [ 2.003341] sunxi-mmc 1c11000.mmc: XXX: setting clk to 400000, > > > > > rounded > > > > > 400000 [ 2.019479] sunxi-mmc 1c11000.mmc: XXX: setting clk to > > > > > 400000, > > > > > rounded 400000 [ 2.039144] sunxi-mmc 1c11000.mmc: XXX: setting= clk > > > > > to > > > > > 400000, rounded 400000 [ 2.047129] sunxi-mmc 1c11000.mmc: XXX: > > > > > setting > > > > > clk to 400000, rounded 400000 [ 2.054324] sunxi-mmc 1c11000.mm= c: > > > > > XXX: > > > > > setting clk to 400000, rounded 400000 [ 2.064481] sunxi-mmc > > > > > 1c11000.mmc: > > > > > XXX: setting clk to 400000, rounded 400000 [ 2.091624] sunxi-m= mc > > > > > 1c11000.mmc: XXX: setting clk to 400000, rounded 400000 [ 2.16= 8067] > > > > > sunxi-mmc 1c11000.mmc: XXX: setting clk to 400000, rounded 400000= [ > > > > > 2.188239] sunxi-mmc 1c11000.mmc: XXX: setting clk to 52000000, ro= unded > > > > > 51200000 [ 2.202779] sunxi-mmc 1c11000.mmc: XXX: setting clk t= o > > > > > 52000000, rounded 51200000 [ 2.210817] sunxi-mmc 1c11000.mmc: = XXX: > > > > > setting clk to 52000000, rounded 51200000 [ 5.103358] sunxi-mm= c > > > > > 1c11000.mmc: XXX: setting clk to 52000000, rounded 51200000 [ = =20 > > > > > 8.950237] > > > > > sunxi-mmc 1c11000.mmc: XXX: setting clk to 52000000, rounded 5120= 0000 > > > > > [ > > > > > 9.376201] sunxi-mmc 1c11000.mmc: XXX: setting clk to 52000000, ro= unded > > > > > 51200000 [ 113.618387] sunxi-mmc 1c11000.mmc: XXX: setting clk t= o > > > > > 52000000, rounded 51200000 [ 113.707979] EXT4-fs (mmcblk1p4): > > > > > recovery > > > > > complete > > > > > [ 113.728162] EXT4-fs (mmcblk1p4): mounted filesystem with order= ed > > > > > data > > > > > mode. Opts: (null) [/snip] > > > > >=20 > > > > > And clock tree: > > > > > [snip] > > > > > pll-ddr-base 2 2 0 768000000 = =20 > > > > > 0 > > > > >=20 > > > > > 0 50000 pll-ddr-other 1 1 0 76800= 0000 > > > > > =20 > > > > > 0 0 50000 mmc2 0 0 0 = =20 > > > > > 51200000 > > > > > =20 > > > > > 0 0 50000 mmc2_sample 0 0 0 > > > > >=20 > > > > > 51200000 0 120 50000 mmc2_output 0 0= =20 > > > > > 0 > > > > >=20 > > > > > 51200000 0 72 50000 [/snip] > > > >=20 > > > > It seems to me that clock rate is set properly. It's even better th= an > > > > before since there is no error between wanted and real clock. I bet > > > > that if you call clk_get_rate() directly behind clk_set_rate() in m= mc > > > > driver, you'll get correct value. > > > >=20 > > > > However, it seems that at some point some other peripheral changes = it's > > > > parent clock rate, which inadvertely changes emmc2 clock rate too. = The > > > > only possible clock which could interfere is sata. Can you disable > > > > driver in you kernel config and try again? > > >=20 > > > OK, tried following things in succession, but SATA disabling does not > > > work: > > >=20 > > > a) Marked all ahci stuff in devicetree as disabled > > > b) Disable CONFIG_AHCI_SUNXI in kernel > > > c) Even disabled SATA stuff in u-boot > >=20 > > But it works, when I allow mmc2 clock to set parent rate: >=20 > Strange, I checked both pre- and post- patch clk_summary you sent me and = in=20 > both cases both mmc2 parent clocks have same rate as before. This would n= eed a=20 > more detailed analysis with a lot of debug print, but don't have such boa= rd. >=20 > CLK_SET_PARENT rate might be viable solution, but you have to be sure th= at=20 > any clock using pll-periph as a parent is in expected range. >=20 > On the plus side, if this works, eMMC will work faster due to 8 MHz clock= rate=20 > increase :) >=20 > >=20 > > pll-periph-base 3 3 0 312000000 = 0 =20 > > 0 50000 mbus 1 1 0 78000000 = =20 > > 0 0 50000 pll-periph-sata 1 1 0 =20 > > 26000000 0 0 50000 sata 1 1 = =20 > > 0 26000000 0 0 50000 pll-periph 5 = =20 > > 5 0 156000000 0 0 50000 mmc2 = 0 =20 > > 0 0 52000000 0 0 50000 mmc2_sample = 0 > > 0 0 52000000 0 120 50000 mmc2_output = =20 > > 0 0 0 52000000 0 120 50000 mmc0 = =20 > > 0 0 0 39000000 0 0 50000 mmc0_sampl= e =20 > > 0 0 0 39000000 0 90 50000 mmc0_out= put=20 > > 0 0 0 39000000 0 90 50000 > >=20 > >=20 > > Now, what I don't understand is why the `enable count` does not increas= e :( >=20 > mmc has suspend/resume functionality which might power down mmc when not = in=20 > use and thus disable clocks. Try initiate some big transfer from/to eMMC = and=20 > check clocks in between. OK, seems like everything magically started working again in 5.1.0-rc1: pll-periph-base 3 3 0 1200000000 0 0 50000 mbus 1 1 0 300000000 0 0 50000 pll-periph-sata 1 1 0 100000000 0 0 50000 sata 1 1 0 100000000 0 0 50000 pll-periph 3 3 0 600000000 0 0 50000 mmc2 0 0 0 50000000 0 0 50000 mmc2_sample 0 0 0 50000000 0 120 50000 mmc2_output 0 0 0 50000000 0 60 50000 > BR, > Jernej >=20 > >=20 > > --- > > diff --git a/drivers/clk/sunxi-ng/ccu-sun4i-a10.c > > b/drivers/clk/sunxi-ng/ccu-sun4i-a10.c index 129ebd2588fd..605e13b4ef90 > > 100644 > > --- a/drivers/clk/sunxi-ng/ccu-sun4i-a10.c > > +++ b/drivers/clk/sunxi-ng/ccu-sun4i-a10.c > > @@ -498,7 +498,7 @@ static SUNXI_CCU_MP_WITH_MUX_GATE(mmc2_clk, "mmc2", > > mod0_default_parents, 0x090, 16, 2, /* P */ > > 24, 2, /* mux */ > > BIT(31), /* gate */ > > - 0); > > + CLK_SET_RATE_PARENT); > >=20 > > /* MMC output and sample clocks are not present on A10 */ > > static SUNXI_CCU_PHASE(mmc2_output_clk, "mmc2_output", "mmc2", > >=20 > > > > Best regards, > > > > Jernej >=20 >=20 >=20 >=20 > --=20 > You received this message because you are subscribed to the Google Groups= "linux-sunxi" group. > To unsubscribe from this group and stop receiving emails from it, send an= email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > For more options, visit https://groups.google.com/d/optout. --=20 You received this message because you are subscribed to the Google Groups "= linux-sunxi" group. To unsubscribe from this group and stop receiving emails from it, send an e= mail to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/d/optout. 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=-4.9 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_ADSP_ALL, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_PASS,URIBL_BLOCKED,USER_AGENT_NEOMUTT autolearn=ham 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 54508C43381 for ; Tue, 19 Mar 2019 10:35:47 +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 1C444206BA for ; Tue, 19 Mar 2019 10:35:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="gGwsxK9l"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=plaes.org header.i=@plaes.org header.b="XYahg6RS" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1C444206BA Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=plaes.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject: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=IBBQOLH22VLQ/fRWF+XXerJMw+nO//hnLEbk9/27iqQ=; b=gGwsxK9l9ao1Ds /RzIZTK7Wy+xboLxaY+8VJLUu5AO650qXeDjywW2LqmFxEVoOzzujtt8796BEbMpLZIwj/UUdo1na iyd15IIjXAmQbhVxBp5E+2oGXkAx4fRBBsAi6eRzECFzgGI1DulcxDIvBrSPo08CSbQmxl9gIIsOG 24byz2unAkuHMpJsUUtz7wk4S3stCSjea1C0MPWd/WGHJOY0cPYwhhP85nzcsZ8YODUG4sOso9LhP kcGB+9/Q4q4ENBUGcouKD1MhAOWPgxj+mzuVR/YqG4p+/Q18OuDYqbFVBgTHiSpxTolTX4FApogm9 R4xXsrmQnp36vCPY47XQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1h6C5q-00026H-16; Tue, 19 Mar 2019 10:35:38 +0000 Received: from plaes.org ([188.166.43.21]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1h6C5l-00024l-0n for linux-arm-kernel@lists.infradead.org; Tue, 19 Mar 2019 10:35:34 +0000 Received: from plaes.org (localhost [127.0.0.1]) by plaes.org (Postfix) with ESMTPSA id 7F1C140091; Tue, 19 Mar 2019 10:34:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=plaes.org; s=mail; t=1552991699; bh=ULOU71fB4bGoMbQIkKCIMUP28u46cVjyGuQRPWP6gD0=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=XYahg6RS7u2NsuAQGdDruDa9rMXLy9aSDEYsoWitHj4dQSkOzVzJvh+UpdRkOffMU nXryaEUrWU+OKx3zWMVPMnStYNVtuEI7xE+XiEGJBmJM3BwjjFjcCzwQOmi20Vbdd+ DHeJ6thJeb6hxxag6gi+NUsNmG6uDRPhVCHEcG5bVGYQKFucDR5axyukisGv4+kqJa GYPoTxPsNpK5ZDJ1MrEwA43JSZ01AnRQtUAaMN1Ey2h2xc+RuHqKtQgfEn8NWAqSP+ VCewF7j9RRwsU4P0zdND6Qt56Yzy4Q20WtgHmFMLhBAbF1sVHe78T8TGi96oOjL7LV TqpyXyqaLwr1Q== Date: Tue, 19 Mar 2019 10:34:58 +0000 From: Priit Laes To: Jernej =?utf-8?Q?=C5=A0krabec?= Subject: Re: [linux-sunxi] [PATCH v3 02/28] clk: sunxi-ng: Adjust MP clock parent rate when allowed Message-ID: <20190319103458.zrznmgz5v65ujbcj@plaes.org> References: <20181104182705.18047-1-jernej.skrabec@siol.net> <20190121083729.7qsmj7drxvmnjoye@plaes.org> <20190121133433.lryqz7ivrj5cxu3g@plaes.org> <1726638.4TPIZlPAWH@jernej-laptop> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1726638.4TPIZlPAWH@jernej-laptop> User-Agent: NeoMutt/20170113 (1.7.2) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190319_033533_337500_BC56C50A X-CRM114-Status: GOOD ( 40.09 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-arm-kernel@lists.infradead.org, airlied@linux.ie, architt@codeaurora.org, a.hajda@samsung.com, maxime.ripard@bootlin.com, mturquette@baylibre.com, linux-sunxi@googlegroups.com, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, sboyd@kernel.org, wens@csie.org, robh+dt@kernel.org, Laurent.pinchart@ideasonboard.com, linux-clk@vger.kernel.org, devicetree@vger.kernel.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gTW9uLCBKYW4gMjEsIDIwMTkgYXQgMDc6MTM6MDdQTSArMDEwMCwgSmVybmVqIMWga3JhYmVj IHdyb3RlOgo+IERuZSBwb25lZGVsamVrLCAyMS4gamFudWFyIDIwMTkgb2IgMTQ6MzQ6MzMgQ0VU IGplIFByaWl0IExhZXMgbmFwaXNhbChhKToKPiA+IE9uIE1vbiwgSmFuIDIxLCAyMDE5IGF0IDA4 OjM3OjI5QU0gKzAwMDAsIFByaWl0IExhZXMgd3JvdGU6Cj4gPiA+IE9uIEZyaSwgSmFuIDE4LCAy MDE5IGF0IDEwOjUxOjEwUE0gKzAxMDAsIEplcm5laiDFoGtyYWJlYyB3cm90ZToKPiA+ID4gPiBE bmUgxI1ldHJ0ZWssIDE3LiBqYW51YXIgMjAxOSBvYiAwODoyNDowMiBDRVQgamUgUHJpaXQgTGFl cyBuYXBpc2FsKGEpOgo+ID4gPiA+ID4gT24gV2VkLCBKYW4gMTYsIDIwMTkgYXQgMDY6MDA6MzJQ TSArMDEwMCwgSmVybmVqIMWga3JhYmVjIHdyb3RlOgo+ID4gPiA+ID4gPiBEbmUgc3JlZGEsIDE2 LiBqYW51YXIgMjAxOSBvYiAxMzowOTo1OCBDRVQgamUgUHJpaXQgTGFlcyBuYXBpc2FsKGEpOgo+ ID4gPiA+ID4gPiA+IE9uIFRodSwgSmFuIDEwLCAyMDE5IGF0IDA2OjEwOjU5UE0gKzAxMDAsIEpl cm5laiDFoGtyYWJlYyB3cm90ZToKPiA+ID4gPiA+ID4gPiA+IERuZSDEjWV0cnRlaywgMTAuIGph bnVhciAyMDE5IG9iIDEwOjE1OjQ4IENFVCBqZSBQcmlpdCBMYWVzIAo+IG5hcGlzYWwoYSk6Cj4g PiA+ID4gPiA+ID4gPiA+IE9uIFN1biwgTm92IDA0LCAyMDE4IGF0IDA3OjI2OjM5UE0gKzAxMDAs IEplcm5laiBTa3JhYmVjIAo+IHdyb3RlOgo+ID4gPiA+ID4gPiA+ID4gPiA+IEN1cnJlbnRseSBN UCBjbG9ja3MgZG9uJ3QgY29uc2lkZXIgYWRqdXN0aW5nIHBhcmVudCByYXRlCj4gPiA+ID4gPiA+ ID4gPiA+ID4gZXZlbiBpZgo+ID4gPiA+ID4gPiA+ID4gPiA+IHRoZXkKPiA+ID4gPiA+ID4gPiA+ ID4gPiBhcmUgYWxsb3dlZCB0byBkbyBzby4gU3VjaCBiZWhhdmlvdXIgY29uc2lkZXJhYmx5IGxv d2Vycwo+ID4gPiA+ID4gPiA+ID4gPiA+IGFtb3VudCBvZgo+ID4gPiA+ID4gPiA+ID4gPiA+IHBv c3NpYmxlIHJhdGVzLCB3aGljaCBpcyB2ZXJ5IGluY29udmVuaWVudCB3aGVuIHN1Y2ggY2xvY2sK PiA+ID4gPiA+ID4gPiA+ID4gPiBpcyB1c2VkCj4gPiA+ID4gPiA+ID4gPiA+ID4gZm9yCj4gPiA+ ID4gPiA+ID4gPiA+ID4gcGl4ZWwgY2xvY2ssIGZvciBleGFtcGxlLgo+ID4gPiA+ID4gPiA+ID4g PiA+IAo+ID4gPiA+ID4gPiA+ID4gPiA+IEluIG9yZGVyIHRvIGltcHJvdmUgdGhlIHNpdHVhdGlv biwgYWRqdXN0aW5nIHBhcmVudCByYXRlIGlzCj4gPiA+ID4gPiA+ID4gPiA+ID4gY29uc2lkZXJl ZAo+ID4gPiA+ID4gPiA+ID4gPiA+IHdoZW4gYWxsb3dlZC4KPiA+ID4gPiA+ID4gPiA+ID4gPiAK PiA+ID4gPiA+ID4gPiA+ID4gPiBUaGlzIGNvZGUgaXMgaW5zcGlyZWQgYnkgY2xrX2RpdmlkZXJf YmVzdGRpdigpIGZ1bmN0aW9uLAo+ID4gPiA+ID4gPiA+ID4gPiA+IHdoaWNoCj4gPiA+ID4gPiA+ ID4gPiA+ID4gZG9lcwo+ID4gPiA+ID4gPiA+ID4gPiA+IGJhc2ljYWxseSB0aGUgc2FtZSB0aGlu ZyBmb3IgZGlmZmVyZW50IGNsb2NrIHR5cGUuCj4gPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4g PiA+ID4gPiBUaGlzIHBhdGNoIHNlZW1zIHRvIGJyZWFrIHRoZSBlTU1DIHN1cHBvcnQgb24KPiA+ ID4gPiA+ID4gPiA+ID4gT2xpbnV4aW5vLUxpbWUyLWVNTUMKPiA+ID4gPiA+ID4gPiA+ID4gYm9h cmRzOgo+ID4gPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA+ID4gRVhUNC1mcyAobW1jYmxr MXA0KTogSU5GTzogcmVjb3ZlcnkgcmVxdWlyZWQgb24gcmVhZG9ubHkKPiA+ID4gPiA+ID4gPiA+ ID4gZmlsZXN5c3RlbQo+ID4gPiA+ID4gPiA+ID4gPiBFWFQ0LWZzIChtbWNibGsxcDQpOiB3cml0 ZSBhY2Nlc3Mgd2lsbCBiZSBlbmFibGVkIGR1cmluZwo+ID4gPiA+ID4gPiA+ID4gPiByZWNvdmVy eQo+ID4gPiA+ID4gPiA+ID4gPiBzdW54aS1tbWMgMWMxMTAwMC5tbWM6IGRhdGEgZXJyb3IsIHNl bmRpbmcgc3RvcCBjb21tYW5kCj4gPiA+ID4gPiA+ID4gPiA+IHN1bnhpLW1tYyAxYzExMDAwLm1t Yzogc2VuZCBzdG9wIGNvbW1hbmQgZmFpbGVkCj4gPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4g PiA+IEknbSBub3QgZmFtaWxpYXIgd2l0aCBBMjAuIFdoYXQgaXMgaW50ZXJlc3RpbmcgaXMgdGhh dCBlbW1jCj4gPiA+ID4gPiA+ID4gPiBjbG9ja3MKPiA+ID4gPiA+ID4gPiA+IGRvbid0Cj4gPiA+ ID4gPiA+ID4gPiBoYXZlIENMS19TRVRfUkFURV9QQVJFTlQgZmxhZyBzZXQsIHNvIHlvdSBzaG91 bGRuJ3Qgc2VlIGFueQo+ID4gPiA+ID4gPiA+ID4gZGlmZmVyZW5jZS4KPiA+ID4gPiA+ID4gPiA+ IAo+ID4gPiA+ID4gPiA+ID4gQ2FuIHlvdSBwb3N0IGNvbnRlbnQgb2YgY2xrX3N1bW1hcnkgd2l0 aCBhbmQgd2l0aG91dCB0aGlzIHBhdGNoPwo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IElu IGJvdGggY2FzZXMgSSBib290ZWQgZnJvbSBGRUwgd2l0aCByb290ZnMgb24gc2RjYXJkIGFuZCB0 cmllZCB0bwo+ID4gPiA+ID4gPiA+IG1vdW50Cj4gPiA+ID4gPiA+ID4gcGFydGl0aW9uIGZyb20g ZU1NQyB0byAvbW50LiBXaXRoIHlvdXIgcGF0Y2gsIGxhc3Qgc3RlcCBpdCBmYWlscy4KPiA+ID4g PiA+ID4gPiAKPiA+ID4gPiA+ID4gPiBwcmUtcGF0Y2ggd29ya2luZzoKPiA+ID4gPiA+ID4gPiBw bGwtZGRyLW90aGVyWzc2OE1Iel0gLT4gbW1jMls1MTJNSHpdLiAoRm9yIHNvbWUgcmVhc29uIGFo Yi1tbWMyCj4gPiA+ID4gPiA+ID4gaXMKPiA+ID4gPiA+ID4gPiBvZmY/KQo+ID4gPiA+ID4gPiA+ IAo+ID4gPiA+ID4gPiA+IHBvc3QtcGF0Y2ggbm90IHdvcmtpbmc6Cj4gPiA+ID4gPiA+ID4gcGxs LXBlcmlwaFs2MDBNSHpdIC0+ICBtbWMyWzUwME1oel0sIChhaGItbW1jMiBpcyBlbmFibGVkKQo+ ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IEFsc28sIGF0dGFjaGVkIHRoZSBsb2dzLgo+ID4g PiA+ID4gPiAKPiA+ID4gPiA+ID4gVGhhbmtzLiBKdXN0IG9uZSBtb3JlIHJlcXVlc3QuIENhbiB5 b3UgZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIGluIG1tYwo+ID4gPiA+ID4gPiBkcml2ZXI/Cj4gPiA+ ID4gPiA+IEknbSBpbnRlcmVzdGVkIGluIG91dHB1dCBvZiB0aGlzIGxpbmU6Cj4gPiA+ID4gPiA+ IAo+ID4gPiA+ID4gPiBkZXZfZGJnKG1tY19kZXYobW1jKSwgInNldHRpbmcgY2xrIHRvICVkLCBy b3VuZGVkICVsZFxuIiwKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IAkJY2xvY2ssIHJhdGUpOwo+ ID4gPiA+ID4gCj4gPiA+ID4gPiAxYzExMDAwIGlzIGVNTUM6Cj4gPiA+ID4gPiBbc25pcF0KPiA+ ID4gPiA+IFsgICAgMS45NjE2NDRdIHN1bnhpLW1tYyAxYzExMDAwLm1tYzogc2V0dGluZyBjbGsg dG8gNDAwMDAwLCByb3VuZGVkCj4gPiA+ID4gPiA0MDAwMDAKPiA+ID4gPiA+IFsgICAgMi4wMDQw OTFdIHN1bnhpLW1tYyAxYzExMDAwLm1tYzogc2V0dGluZyBjbGsgdG8gNDAwMDAwLCByb3VuZGVk Cj4gPiA+ID4gPiA0MDAwMDAKPiA+ID4gPiA+IFsgICAgMi4wMjAyOTZdIHN1bnhpLW1tYyAxYzEx MDAwLm1tYzogc2V0dGluZyBjbGsgdG8gNDAwMDAwLCByb3VuZGVkCj4gPiA+ID4gPiA0MDAwMDAK PiA+ID4gPiA+IFsgICAgMi4wMzk5MTddIHN1bnhpLW1tYyAxYzExMDAwLm1tYzogc2V0dGluZyBj bGsgdG8gNDAwMDAwLCByb3VuZGVkCj4gPiA+ID4gPiA0MDAwMDAKPiA+ID4gPiA+IFsgICAgMi4w NDc4NDddIHN1bnhpLW1tYyAxYzExMDAwLm1tYzogc2V0dGluZyBjbGsgdG8gNDAwMDAwLCByb3Vu ZGVkCj4gPiA+ID4gPiA0MDAwMDAKPiA+ID4gPiA+IFsgICAgMi4wNTUwNTNdIHN1bnhpLW1tYyAx YzExMDAwLm1tYzogc2V0dGluZyBjbGsgdG8gNDAwMDAwLCByb3VuZGVkCj4gPiA+ID4gPiA0MDAw MDAKPiA+ID4gPiA+IFsgICAgMi4wNjUyNTZdIHN1bnhpLW1tYyAxYzExMDAwLm1tYzogc2V0dGlu ZyBjbGsgdG8gNDAwMDAwLCByb3VuZGVkCj4gPiA+ID4gPiA0MDAwMDAKPiA+ID4gPiA+IFsgICAg Mi4wOTIzNTFdIHN1bnhpLW1tYyAxYzExMDAwLm1tYzogc2V0dGluZyBjbGsgdG8gNDAwMDAwLCBy b3VuZGVkCj4gPiA+ID4gPiA0MDAwMDAKPiA+ID4gPiA+IFsgICAgMi4xNjg3MjVdIHN1bnhpLW1t YyAxYzExMDAwLm1tYzogc2V0dGluZyBjbGsgdG8gNDAwMDAwLCByb3VuZGVkCj4gPiA+ID4gPiA0 MDAwMDAKPiA+ID4gPiA+IFsgICAgMi4xODk0MDNdIHN1bnhpLW1tYyAxYzExMDAwLm1tYzogc2V0 dGluZyBjbGsgdG8gNTIwMDAwMDAsIHJvdW5kZWQKPiA+ID4gPiA+IDUyMDAwMDAwIFsgICAgMi4y MDMzNDBdIHN1bnhpLW1tYyAxYzExMDAwLm1tYzogc2V0dGluZyBjbGsgdG8KPiA+ID4gPiA+IDUy MDAwMDAwLAo+ID4gPiA+ID4gcm91bmRlZCA1MjAwMDAwMCBbICAgIDIuMjExNDEyXSBzdW54aS1t bWMgMWMxMTAwMC5tbWM6IHNldHRpbmcgY2xrIHRvCj4gPiA+ID4gPiA1MjAwMDAwMCwgcm91bmRl ZCA1MjAwMDAwMCBbICAgIDQuOTY3ODY1XSBzdW54aS1tbWMgMWMxMTAwMC5tbWM6Cj4gPiA+ID4g PiBzZXR0aW5nCj4gPiA+ID4gPiBjbGsgdG8gNTIwMDAwMDAsIHJvdW5kZWQgNTIwMDAwMDAgWyAg ICA4Ljc1NTM0NV0gc3VueGktbW1jCj4gPiA+ID4gPiAxYzExMDAwLm1tYzoKPiA+ID4gPiA+IHNl dHRpbmcgY2xrIHRvIDUyMDAwMDAwLCByb3VuZGVkIDUyMDAwMDAwIFsgICAgOS4wODI1MTBdIHN1 bnhpLW1tYwo+ID4gPiA+ID4gMWMxMTAwMC5tbWM6IHNldHRpbmcgY2xrIHRvIDUyMDAwMDAwLCBy b3VuZGVkIDUyMDAwMDAwCj4gPiA+ID4gPiAKPiA+ID4gPiA+IEhlcmUgSSB0cmllZCB0byBtb3Vu dCBwYXJ0aXRpb24gZnJvbSBlTU1DLi4uCj4gPiA+ID4gPiAKPiA+ID4gPiA+IFsgICA3Mi4xNjcz MTFdIHN1bnhpLW1tYyAxYzExMDAwLm1tYzogc2V0dGluZyBjbGsgdG8gNTIwMDAwMDAsIHJvdW5k ZWQKPiA+ID4gPiA+IDUyMDAwMDAwIFsgICA3Mi4yNjk2MjldIHN1bnhpLW1tYyAxYzExMDAwLm1t YzogZGF0YSBlcnJvciwgc2VuZGluZwo+ID4gPiA+ID4gc3RvcAo+ID4gPiA+ID4gY29tbWFuZCBb ICAgNzMuMjY4OTk5XSBzdW54aS1tbWMgMWMxMTAwMC5tbWM6IHNlbmQgc3RvcCBjb21tYW5kIGZh aWxlZAo+ID4gPiA+ID4gWy9zbmlwXQo+ID4gPiA+ID4gCj4gPiA+ID4gPiBBbmQgY2xvY2sgdHJl ZToKPiA+ID4gPiA+IFtzbmlwXQo+ID4gPiA+ID4gcGxsLXBlcmlwaC1iYXNlICAgICAgICAgICAg ICAgIDMgICAgICAgIDMgICAgICAgIDAgIDEyMDAwMDAwMDAgICAgICAgIAo+ID4gPiA+ID4gIDAK PiA+ID4gPiA+IAo+ID4gPiA+ID4gIDAgIDUwMDAwIHBsbC1wZXJpcGggICAgICAgICAgICAgICAg ICA2ICAgICAgICA2ICAgICAgICAwICAgNjAwMDAwMDAwCj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAg ICAwICAgICAwICA1MDAwMCBtbWMyICAgICAgICAgICAgICAgICAgICAgMyAgICAgICAgMyAgICAg ICAgMCAgIAo+ID4gPiA+ID4gICAgNTAwMDAwMDAKPiA+ID4gPiA+ICAgIAo+ID4gPiA+ID4gICAg ICAgICAwICAgICAwICA1MDAwMCBtbWMyX3NhbXBsZSAgICAgICAgICAgMSAgICAgICAgMSAgICAg ICAgMAo+ID4gPiA+ID4gCj4gPiA+ID4gPiA1MDAwMDAwMCAgICAgICAgICAwICAgMTIwICA1MDAw MCBtbWMyX291dHB1dCAgICAgICAgICAgMSAgICAgICAgMSAgICAgCj4gPiA+ID4gPiAgIDAKPiA+ ID4gPiA+IAo+ID4gPiA+ID4gICA1MDAwMDAwMCAgICAgICAgICAwICAgIDYwICA1MDAwMCBhaGIg ICAgICAgICAgICAgICAgICAgICAxOCAgICAgICAxOAo+ID4gPiA+ID4gICAwICAgMzAwMDAwMDAw ICAgICAgICAgIDAgICAgIDAgIDUwMDAwIGFoYi1tbWMyICAgICAgICAgICAgICAxICAgICAgIAo+ ID4gPiA+ID4gICAxCj4gPiA+ID4gPiAgIAo+ID4gPiA+ID4gICAgIDAgICAzMDAwMDAwMDAgICAg ICAgICAgMCAgICAgMCAgNTAwMDAgWy9zbmlwXQo+ID4gPiA+ID4gCj4gPiA+ID4gPiBBbmQgd2l0 aG91dCBwYXRjaDoKPiA+ID4gPiA+IFtzbmlwXQo+ID4gPiA+ID4gWyAgICAyLjAwMzM0MV0gc3Vu eGktbW1jIDFjMTEwMDAubW1jOiBYWFg6IHNldHRpbmcgY2xrIHRvIDQwMDAwMCwKPiA+ID4gPiA+ IHJvdW5kZWQKPiA+ID4gPiA+IDQwMDAwMCBbICAgIDIuMDE5NDc5XSBzdW54aS1tbWMgMWMxMTAw MC5tbWM6IFhYWDogc2V0dGluZyBjbGsgdG8KPiA+ID4gPiA+IDQwMDAwMCwKPiA+ID4gPiA+IHJv dW5kZWQgNDAwMDAwIFsgICAgMi4wMzkxNDRdIHN1bnhpLW1tYyAxYzExMDAwLm1tYzogWFhYOiBz ZXR0aW5nIGNsawo+ID4gPiA+ID4gdG8KPiA+ID4gPiA+IDQwMDAwMCwgcm91bmRlZCA0MDAwMDAg WyAgICAyLjA0NzEyOV0gc3VueGktbW1jIDFjMTEwMDAubW1jOiBYWFg6Cj4gPiA+ID4gPiBzZXR0 aW5nCj4gPiA+ID4gPiBjbGsgdG8gNDAwMDAwLCByb3VuZGVkIDQwMDAwMCBbICAgIDIuMDU0MzI0 XSBzdW54aS1tbWMgMWMxMTAwMC5tbWM6Cj4gPiA+ID4gPiBYWFg6Cj4gPiA+ID4gPiBzZXR0aW5n IGNsayB0byA0MDAwMDAsIHJvdW5kZWQgNDAwMDAwIFsgICAgMi4wNjQ0ODFdIHN1bnhpLW1tYwo+ ID4gPiA+ID4gMWMxMTAwMC5tbWM6Cj4gPiA+ID4gPiBYWFg6IHNldHRpbmcgY2xrIHRvIDQwMDAw MCwgcm91bmRlZCA0MDAwMDAgWyAgICAyLjA5MTYyNF0gc3VueGktbW1jCj4gPiA+ID4gPiAxYzEx MDAwLm1tYzogWFhYOiBzZXR0aW5nIGNsayB0byA0MDAwMDAsIHJvdW5kZWQgNDAwMDAwIFsgICAg Mi4xNjgwNjddCj4gPiA+ID4gPiBzdW54aS1tbWMgMWMxMTAwMC5tbWM6IFhYWDogc2V0dGluZyBj bGsgdG8gNDAwMDAwLCByb3VuZGVkIDQwMDAwMCBbCj4gPiA+ID4gPiAyLjE4ODIzOV0gc3VueGkt bW1jIDFjMTEwMDAubW1jOiBYWFg6IHNldHRpbmcgY2xrIHRvIDUyMDAwMDAwLCByb3VuZGVkCj4g PiA+ID4gPiA1MTIwMDAwMCBbICAgIDIuMjAyNzc5XSBzdW54aS1tbWMgMWMxMTAwMC5tbWM6IFhY WDogc2V0dGluZyBjbGsgdG8KPiA+ID4gPiA+IDUyMDAwMDAwLCByb3VuZGVkIDUxMjAwMDAwIFsg ICAgMi4yMTA4MTddIHN1bnhpLW1tYyAxYzExMDAwLm1tYzogWFhYOgo+ID4gPiA+ID4gc2V0dGlu ZyBjbGsgdG8gNTIwMDAwMDAsIHJvdW5kZWQgNTEyMDAwMDAgWyAgICA1LjEwMzM1OF0gc3VueGkt bW1jCj4gPiA+ID4gPiAxYzExMDAwLm1tYzogWFhYOiBzZXR0aW5nIGNsayB0byA1MjAwMDAwMCwg cm91bmRlZCA1MTIwMDAwMCBbICAgCj4gPiA+ID4gPiA4Ljk1MDIzN10KPiA+ID4gPiA+IHN1bnhp LW1tYyAxYzExMDAwLm1tYzogWFhYOiBzZXR0aW5nIGNsayB0byA1MjAwMDAwMCwgcm91bmRlZCA1 MTIwMDAwMAo+ID4gPiA+ID4gWwo+ID4gPiA+ID4gOS4zNzYyMDFdIHN1bnhpLW1tYyAxYzExMDAw Lm1tYzogWFhYOiBzZXR0aW5nIGNsayB0byA1MjAwMDAwMCwgcm91bmRlZAo+ID4gPiA+ID4gNTEy MDAwMDAgWyAgMTEzLjYxODM4N10gc3VueGktbW1jIDFjMTEwMDAubW1jOiBYWFg6IHNldHRpbmcg Y2xrIHRvCj4gPiA+ID4gPiA1MjAwMDAwMCwgcm91bmRlZCA1MTIwMDAwMCBbICAxMTMuNzA3OTc5 XSBFWFQ0LWZzIChtbWNibGsxcDQpOgo+ID4gPiA+ID4gcmVjb3ZlcnkKPiA+ID4gPiA+IGNvbXBs ZXRlCj4gPiA+ID4gPiBbICAxMTMuNzI4MTYyXSBFWFQ0LWZzIChtbWNibGsxcDQpOiBtb3VudGVk IGZpbGVzeXN0ZW0gd2l0aCBvcmRlcmVkCj4gPiA+ID4gPiBkYXRhCj4gPiA+ID4gPiBtb2RlLiBP cHRzOiAobnVsbCkgWy9zbmlwXQo+ID4gPiA+ID4gCj4gPiA+ID4gPiBBbmQgY2xvY2sgdHJlZToK PiA+ID4gPiA+IFtzbmlwXQo+ID4gPiA+ID4gcGxsLWRkci1iYXNlICAgICAgICAgICAgICAgICAg IDIgICAgICAgIDIgICAgICAgIDAgICA3NjgwMDAwMDAgICAgICAgIAo+ID4gPiA+ID4gIDAKPiA+ ID4gPiA+IAo+ID4gPiA+ID4gIDAgIDUwMDAwIHBsbC1kZHItb3RoZXIgICAgICAgICAgICAgICAx ICAgICAgICAxICAgICAgICAwICAgNzY4MDAwMDAwCj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAgICAw ICAgICAwICA1MDAwMCBtbWMyICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgMCAgICAgICAg MCAgIAo+ID4gPiA+ID4gICAgNTEyMDAwMDAKPiA+ID4gPiA+ICAgIAo+ID4gPiA+ID4gICAgICAg ICAwICAgICAwICA1MDAwMCBtbWMyX3NhbXBsZSAgICAgICAgICAgMCAgICAgICAgMCAgICAgICAg MAo+ID4gPiA+ID4gCj4gPiA+ID4gPiA1MTIwMDAwMCAgICAgICAgICAwICAgMTIwICA1MDAwMCBt bWMyX291dHB1dCAgICAgICAgICAgMCAgICAgICAgMCAgICAgCj4gPiA+ID4gPiAgIDAKPiA+ID4g PiA+IAo+ID4gPiA+ID4gICA1MTIwMDAwMCAgICAgICAgICAwICAgIDcyICA1MDAwMCBbL3NuaXBd Cj4gPiA+ID4gCj4gPiA+ID4gSXQgc2VlbXMgdG8gbWUgdGhhdCBjbG9jayByYXRlIGlzIHNldCBw cm9wZXJseS4gSXQncyBldmVuIGJldHRlciB0aGFuCj4gPiA+ID4gYmVmb3JlIHNpbmNlIHRoZXJl IGlzIG5vIGVycm9yIGJldHdlZW4gd2FudGVkIGFuZCByZWFsIGNsb2NrLiBJIGJldAo+ID4gPiA+ IHRoYXQgaWYgeW91IGNhbGwgY2xrX2dldF9yYXRlKCkgZGlyZWN0bHkgYmVoaW5kIGNsa19zZXRf cmF0ZSgpIGluIG1tYwo+ID4gPiA+IGRyaXZlciwgeW91J2xsIGdldCBjb3JyZWN0IHZhbHVlLgo+ ID4gPiA+IAo+ID4gPiA+IEhvd2V2ZXIsIGl0IHNlZW1zIHRoYXQgYXQgc29tZSBwb2ludCBzb21l IG90aGVyIHBlcmlwaGVyYWwgY2hhbmdlcyBpdCdzCj4gPiA+ID4gcGFyZW50IGNsb2NrIHJhdGUs IHdoaWNoIGluYWR2ZXJ0ZWx5IGNoYW5nZXMgZW1tYzIgY2xvY2sgcmF0ZSB0b28uIFRoZQo+ID4g PiA+IG9ubHkgcG9zc2libGUgY2xvY2sgd2hpY2ggY291bGQgaW50ZXJmZXJlIGlzIHNhdGEuIENh biB5b3UgZGlzYWJsZQo+ID4gPiA+IGRyaXZlciBpbiB5b3Uga2VybmVsIGNvbmZpZyBhbmQgdHJ5 IGFnYWluPwo+ID4gPiAKPiA+ID4gT0ssIHRyaWVkIGZvbGxvd2luZyB0aGluZ3MgaW4gc3VjY2Vz c2lvbiwgYnV0IFNBVEEgZGlzYWJsaW5nIGRvZXMgbm90Cj4gPiA+IHdvcms6Cj4gPiA+IAo+ID4g PiBhKSBNYXJrZWQgYWxsIGFoY2kgc3R1ZmYgaW4gZGV2aWNldHJlZSBhcyBkaXNhYmxlZAo+ID4g PiBiKSBEaXNhYmxlIENPTkZJR19BSENJX1NVTlhJIGluIGtlcm5lbAo+ID4gPiBjKSBFdmVuIGRp c2FibGVkIFNBVEEgc3R1ZmYgaW4gdS1ib290Cj4gPiAKPiA+IEJ1dCBpdCB3b3Jrcywgd2hlbiBJ IGFsbG93IG1tYzIgY2xvY2sgdG8gc2V0IHBhcmVudCByYXRlOgo+IAo+IFN0cmFuZ2UsIEkgY2hl Y2tlZCBib3RoIHByZS0gYW5kIHBvc3QtIHBhdGNoIGNsa19zdW1tYXJ5IHlvdSBzZW50IG1lIGFu ZCBpbiAKPiBib3RoIGNhc2VzIGJvdGggbW1jMiBwYXJlbnQgY2xvY2tzIGhhdmUgc2FtZSByYXRl IGFzIGJlZm9yZS4gVGhpcyB3b3VsZCBuZWVkIGEgCj4gbW9yZSBkZXRhaWxlZCBhbmFseXNpcyB3 aXRoIGEgbG90IG9mIGRlYnVnIHByaW50LCBidXQgZG9uJ3QgaGF2ZSBzdWNoIGJvYXJkLgo+IAo+ IENMS19TRVRfUEFSRU5UIHJhdGUgbWlnaHQgYmUgdmlhYmxlIHNvbHV0aW9uLCBidXQgIHlvdSBo YXZlIHRvIGJlIHN1cmUgdGhhdCAKPiBhbnkgY2xvY2sgdXNpbmcgcGxsLXBlcmlwaCBhcyBhIHBh cmVudCBpcyBpbiBleHBlY3RlZCByYW5nZS4KPiAKPiBPbiB0aGUgcGx1cyBzaWRlLCBpZiB0aGlz IHdvcmtzLCBlTU1DIHdpbGwgd29yayBmYXN0ZXIgZHVlIHRvIDggTUh6IGNsb2NrIHJhdGUgCj4g aW5jcmVhc2UgOikKPiAKPiA+IAo+ID4gcGxsLXBlcmlwaC1iYXNlICAgICAgICAgICAgICAgIDMg ICAgICAgIDMgICAgICAgIDAgICAzMTIwMDAwMDAgICAgICAgICAgMCAgIAo+ID4gIDAgIDUwMDAw IG1idXMgICAgICAgICAgICAgICAgICAgICAgICAxICAgICAgICAxICAgICAgICAwICAgIDc4MDAw MDAwICAgICAgCj4gPiAgICAwICAgICAwICA1MDAwMCBwbGwtcGVyaXBoLXNhdGEgICAgICAgICAg ICAgMSAgICAgICAgMSAgICAgICAgMCAgIAo+ID4gMjYwMDAwMDAgICAgICAgICAgMCAgICAgMCAg NTAwMDAgc2F0YSAgICAgICAgICAgICAgICAgICAgIDEgICAgICAgIDEgICAgICAgCj4gPiAwICAg IDI2MDAwMDAwICAgICAgICAgIDAgICAgIDAgIDUwMDAwIHBsbC1wZXJpcGggICAgICAgICAgICAg ICAgICA1ICAgICAgIAo+ID4gNSAgICAgICAgMCAgIDE1NjAwMDAwMCAgICAgICAgICAwICAgICAw ICA1MDAwMCBtbWMyICAgICAgICAgICAgICAgICAgICAgMCAgCj4gPiAgICAgIDAgICAgICAgIDAg ICAgNTIwMDAwMDAgICAgICAgICAgMCAgICAgMCAgNTAwMDAgbW1jMl9zYW1wbGUgICAgICAgICAg IDAKPiA+ICAgICAgICAwICAgICAgICAwICAgIDUyMDAwMDAwICAgICAgICAgIDAgICAxMjAgIDUw MDAwIG1tYzJfb3V0cHV0ICAgICAgICAgIAo+ID4gMCAgICAgICAgMCAgICAgICAgMCAgICA1MjAw MDAwMCAgICAgICAgICAwICAgMTIwICA1MDAwMCBtbWMwICAgICAgICAgICAgICAgCj4gPiAgICAg IDAgICAgICAgIDAgICAgICAgIDAgICAgMzkwMDAwMDAgICAgICAgICAgMCAgICAgMCAgNTAwMDAg bW1jMF9zYW1wbGUgICAKPiA+ICAgICAgICAwICAgICAgICAwICAgICAgICAwICAgIDM5MDAwMDAw ICAgICAgICAgIDAgICAgOTAgIDUwMDAwIG1tYzBfb3V0cHV0IAo+ID4gICAgICAgICAgMCAgICAg ICAgMCAgICAgICAgMCAgICAzOTAwMDAwMCAgICAgICAgICAwICAgIDkwICA1MDAwMAo+ID4gCj4g PiAKPiA+IE5vdywgd2hhdCBJIGRvbid0IHVuZGVyc3RhbmQgaXMgd2h5IHRoZSBgZW5hYmxlIGNv dW50YCBkb2VzIG5vdCBpbmNyZWFzZSA6KAo+IAo+IG1tYyBoYXMgc3VzcGVuZC9yZXN1bWUgZnVu Y3Rpb25hbGl0eSB3aGljaCBtaWdodCBwb3dlciBkb3duIG1tYyB3aGVuIG5vdCBpbiAKPiB1c2Ug YW5kIHRodXMgZGlzYWJsZSBjbG9ja3MuIFRyeSBpbml0aWF0ZSBzb21lIGJpZyB0cmFuc2ZlciBm cm9tL3RvIGVNTUMgYW5kIAo+IGNoZWNrIGNsb2NrcyBpbiBiZXR3ZWVuLgoKT0ssIHNlZW1zIGxp a2UgZXZlcnl0aGluZyBtYWdpY2FsbHkgc3RhcnRlZCB3b3JraW5nIGFnYWluIGluIDUuMS4wLXJj MToKCnBsbC1wZXJpcGgtYmFzZSAgICAgICAzIDMgMCAgMTIwMDAwMDAwMCAgMCAgICAgMCAgNTAw MDAKICAgbWJ1cyAgICAgICAgICAgICAgIDEgMSAwICAgMzAwMDAwMDAwICAwICAgICAwICA1MDAw MAogICBwbGwtcGVyaXBoLXNhdGEgICAgMSAxIDAgICAxMDAwMDAwMDAgIDAgICAgIDAgIDUwMDAw CiAgICAgIHNhdGEgICAgICAgICAgICAxIDEgMCAgIDEwMDAwMDAwMCAgMCAgICAgMCAgNTAwMDAK ICAgcGxsLXBlcmlwaCAgICAgICAgIDMgMyAwICAgNjAwMDAwMDAwICAwICAgICAwICA1MDAwMAog ICAgICBtbWMyICAgICAgICAgICAgMCAwIDAgICAgNTAwMDAwMDAgIDAgICAgIDAgIDUwMDAwCiAg ICAgICAgIG1tYzJfc2FtcGxlICAwIDAgMCAgICA1MDAwMDAwMCAgMCAgIDEyMCAgNTAwMDAKICAg ICAgICAgbW1jMl9vdXRwdXQgIDAgMCAwICAgIDUwMDAwMDAwICAwICAgIDYwICA1MDAwMAoKPiBC UiwKPiBKZXJuZWoKPiAKPiA+IAo+ID4gLS0tCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsv c3VueGktbmcvY2N1LXN1bjRpLWExMC5jCj4gPiBiL2RyaXZlcnMvY2xrL3N1bnhpLW5nL2NjdS1z dW40aS1hMTAuYyBpbmRleCAxMjllYmQyNTg4ZmQuLjYwNWUxM2I0ZWY5MAo+ID4gMTAwNjQ0Cj4g PiAtLS0gYS9kcml2ZXJzL2Nsay9zdW54aS1uZy9jY3Utc3VuNGktYTEwLmMKPiA+ICsrKyBiL2Ry aXZlcnMvY2xrL3N1bnhpLW5nL2NjdS1zdW40aS1hMTAuYwo+ID4gQEAgLTQ5OCw3ICs0OTgsNyBA QCBzdGF0aWMgU1VOWElfQ0NVX01QX1dJVEhfTVVYX0dBVEUobW1jMl9jbGssICJtbWMyIiwKPiA+ IG1vZDBfZGVmYXVsdF9wYXJlbnRzLCAweDA5MCwgMTYsIDIsICAgICAgICAvKiBQICovCj4gPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQsIDIsICAgICAgICAvKiBtdXggKi8K PiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMzEpLCAgICAgIC8qIGdh dGUgKi8KPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTEtfU0VUX1JBVEVfUEFSRU5UKTsKPiA+IAo+ ID4gIC8qIE1NQyBvdXRwdXQgYW5kIHNhbXBsZSBjbG9ja3MgYXJlIG5vdCBwcmVzZW50IG9uIEEx MCAqLwo+ID4gIHN0YXRpYyBTVU5YSV9DQ1VfUEhBU0UobW1jMl9vdXRwdXRfY2xrLCAibW1jMl9v dXRwdXQiLCAibW1jMiIsCj4gPiAKPiA+ID4gPiBCZXN0IHJlZ2FyZHMsCj4gPiA+ID4gSmVybmVq Cj4gCj4gCj4gCj4gCj4gLS0gCj4gWW91IHJlY2VpdmVkIHRoaXMgbWVzc2FnZSBiZWNhdXNlIHlv dSBhcmUgc3Vic2NyaWJlZCB0byB0aGUgR29vZ2xlIEdyb3VwcyAibGludXgtc3VueGkiIGdyb3Vw Lgo+IFRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBncm91cCBhbmQgc3RvcCByZWNlaXZpbmcgZW1h aWxzIGZyb20gaXQsIHNlbmQgYW4gZW1haWwgdG8gbGludXgtc3VueGkrdW5zdWJzY3JpYmVAZ29v Z2xlZ3JvdXBzLmNvbS4KPiBGb3IgbW9yZSBvcHRpb25zLCB2aXNpdCBodHRwczovL2dyb3Vwcy5n b29nbGUuY29tL2Qvb3B0b3V0LgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5l bEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4v bGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=