From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 673B4E8FDDA for ; Wed, 4 Oct 2023 08:04:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232778AbjJDIEu (ORCPT ); Wed, 4 Oct 2023 04:04:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54352 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241639AbjJDIEt (ORCPT ); Wed, 4 Oct 2023 04:04:49 -0400 Received: from mx1.tq-group.com (mx1.tq-group.com [93.104.207.81]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3C070AC; Wed, 4 Oct 2023 01:04:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tq-group.com; i=@tq-group.com; q=dns/txt; s=key1; t=1696406684; x=1727942684; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=uNd+HACguCoZjwveAU7kMZ/dp20g63cdWpbDWpo8YEo=; b=aL5werJQuCu2LVaK3cwCvJ/FTBAf8lfUgB2cvjTEmOAkytr53UdFgYUT 1g3YQu0WXbWR/3hQGOzeGFNRV4xHRXeJpyTZmn/qm25/uCCZbbv62UFgx m3oMvqc+R1299hL65AKkqJx6wcBjSK2yGdJ445EsN+1K+k9wwx6tviaoT jATxgIqgC+2SI1SCARE0AzW8Rq/T1xjpLo481hPmhzZPh3BUaqUXGCegq 6RHmUAM/uRUs7fRZVSy5bQrhT5lTkAqxX9/R/+iYXEOcGvF+0MUT9SoaX fSuPMrhmbMOckDn++p6uHZho29W8fJDjkG2RexkNq8YZL4tqHkj5bTxqO Q==; X-IronPort-AV: E=Sophos;i="6.03,199,1694728800"; d="scan'208";a="33270753" Received: from vtuxmail01.tq-net.de ([10.115.0.20]) by mx1.tq-group.com with ESMTP; 04 Oct 2023 10:04:41 +0200 Received: from steina-w.localnet (steina-w.tq-net.de [10.123.53.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by vtuxmail01.tq-net.de (Postfix) with ESMTPSA id 57403280075; Wed, 4 Oct 2023 10:04:41 +0200 (CEST) From: Alexander Stein To: Benjamin Bara , Adam Ford Cc: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Michael Turquette , Stephen Boyd , Russell King , Abel Vesa , Peng Fan , Frank Oltmanns , Maxime Ripard , devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, Benjamin Bara , Lucas Stach Subject: Re: [PATCH 00/13] imx8mp: first clock propagation attempt (for LVDS) Date: Wed, 04 Oct 2023 10:04:41 +0200 Message-ID: <12810050.O9o76ZdvQC@steina-w> Organization: TQ-Systems GmbH In-Reply-To: References: <20230918-imx8mp-dtsi-v1-0-1d008b3237c0@skidata.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-clk@vger.kernel.org Hi Adam, Am Dienstag, 3. Oktober 2023, 15:28:05 CEST schrieb Adam Ford: > On Sun, Sep 17, 2023 at 5:40=E2=80=AFPM Benjamin Bara = wrote: > > Hi! > >=20 > > Target of this series is to dynamically set the rate of video_pll1 to > > the required LVDS clock rate(s), which are configured by the panel, and > > the lvds-bridge respectively. > >=20 > > Some background: > > The LVDS panel requires two clocks: the crtc clock and the lvds clock. > > The lvds rate is always 7x the crtc rate. On the imx8mp, these are > > assigned to media_disp2_pix and media_ldb, which are both >=20 > Could the LDB driver be updated to take in the crtc clock as a > parameter, then set the media_ldb to 7x crct clock. I wonder if that > might simplify the task a bit. I'm not sure if you had something different in mind, but I guess this happe= ns=20 already in fsl_ldb_atomic_enable(), although using the mode clock. As this might not always be possible, commit bd43a9844bc6f ("drm: bridge: l= db:=20 Warn if LDB clock does not match requested link frequency") was added to=20 indicate something might be wrong. The main problem here is that both media_ldb and crct clock are not in a=20 parent<->child relationship, but are siblings, configurable individually. Best regards, Alexander > > clk-composite-8m. The rates are set by drm_client_modeset_commit() (and > > later by fsl_ldb_atomic_enable()), and the fsl-ldb driver, first crtc, > > then lvds. The parent is typically assigned to video_pll1, which is a > > clk-pll14xx (pll1443x). > >=20 > > The main problem: > > As the clk-composite-8m currently doesn't support CLK_SET_RATE_PARENT, > > the crtc rate is not propagated to video_pll1, and therefore must be > > assigned in the device-tree manually. > >=20 > > The idea: > > Enable CLK_SET_RATE_PARENT, at least for media_disp2_pix and media_ldb. > > When this is done, ensure that the pll1443x can be re-configured, > > meaning it ensures that an already configured rate (crtc rate) is still > > supported when a second child requires a different rate (lvds rate). As >=20 > I still have concerns that the CLK_SET_RATE_PARENT may break the > media_disp1_pix if media_disp2_pix is changing it. >=20 > I think we should consider adding some sort of configurable flag to > the CCM that lets people choose if CLK_SET_RATE_PARENT should be set > or not in the device tree instead of hard-coding it either on or off. > This would give people the flexibility of stating whether > media_disp1_pix, media_disp2_pix, both or neither could set > CLK_SET_RATE_PARENT. >=20 > I believe the imx8mp-evk can support both LVDS-> HDMI and DSI->HDMI > bridges, and I fear that if they are trying to both set different > clock rates, this may break something and the clocks need to be > selected in advance to give people a bunch of HDMI options as well as > being able to divide down to support the LVDS. >=20 > I think some of the displays could be tied to one of the Audio PLL's, > so I might experiment with splitting the media_disp1_pix and > media_disp2_pix from each other to see how well . >=20 > > the children have divider, the current approach is straight forward by > > calculating the LCM of the required rates. During the rate change of the > > PLL, it must ensure that all children still have the configured rate at > > the end (and maybe also bypass the clock while doing so?). This is done > > by implementing a notifier function for the clk-composite-8m. The tricky > > part is now to find out if the rate change was intentional or not. This > > is done by adding the "change trigger" to the notify data. In our case, > > we now can infer if we aren't the change trigger, we need to keep the > > existing rate after the PLL's rate change. We keep the existing rate by > > modifying the new_rate of the clock's core, as we are quite late in an > > already ongoing clock change process. > >=20 > > Future work: > > The re-configuration of the PLL can definitely be improved for other use > > cases where the children have more fancy inter-dependencies. That's one > > of the main reasons I currently only touched the mentioned clocks. > > Additionally, it might make sense to automatically re-parent if a > > different possible parent suits better. > > For the core part, I thought about extending my "unintentional change > > check" so that the core ensures that the children keep the configured > > rate, which might not be easy as the parent could be allowed to "round", > > but it's not clear (at least to me yet) how much rounding is allowed. I > > found a similar discussion posted here[1], therefore added Frank and > > Maxime. > >=20 > > Thanks & regards, > > Benjamin > >=20 > > [1] > > https://lore.kernel.org/lkml/20230825-pll-mipi_keep_rate-v1-0-35bc43570= 73 > > 0@oltmanns.dev/ > >=20 > > --- > >=20 > > Benjamin Bara (13): > > arm64: dts: imx8mp: lvds_bridge: use root instead of composite > > arm64: dts: imx8mp: re-parent IMX8MP_CLK_MEDIA_MIPI_PHY1_REF > > clk: implement clk_hw_set_rate() > > clk: print debug message if parent change is ignored > > clk: keep track of the trigger of an ongoing clk_set_rate > > clk: keep track if a clock is explicitly configured > > clk: detect unintended rate changes > > clk: divider: stop early if an optimal divider is found > > clk: imx: pll14xx: consider active rate for re-config > > clk: imx: composite-8m: convert compute_dividers to void > > clk: imx: composite-8m: implement CLK_SET_RATE_PARENT > > clk: imx: imx8mp: allow LVDS clocks to set parent rate > > arm64: dts: imx8mp: remove assigned-clock-rate of IMX8MP_VIDEO_PL= L1 > > =20 > > arch/arm64/boot/dts/freescale/imx8mp.dtsi | 14 +-- > > drivers/clk/clk-divider.c | 9 ++ > > drivers/clk/clk.c | 146 > > +++++++++++++++++++++++++++++- drivers/clk/imx/clk-composite-8m.c = =20 > > | 89 +++++++++++++++--- drivers/clk/imx/clk-imx8mp.c | = 4 > > +- > > drivers/clk/imx/clk-pll14xx.c | 20 ++++ > > drivers/clk/imx/clk.h | 4 + > > include/linux/clk-provider.h | 2 + > > include/linux/clk.h | 2 + > > 9 files changed, 261 insertions(+), 29 deletions(-) > >=20 > > --- > > base-commit: e143016b56ecb0fcda5bb6026b0a25fe55274f56 > > change-id: 20230913-imx8mp-dtsi-7c6e25907e0e > >=20 > > Best regards, > > -- > > Benjamin Bara =2D-=20 TQ-Systems GmbH | M=C3=BChlstra=C3=9Fe 2, Gut Delling | 82229 Seefeld, Germ= any Amtsgericht M=C3=BCnchen, HRB 105018 Gesch=C3=A4ftsf=C3=BChrer: Detlef Schneider, R=C3=BCdiger Stahl, Stefan Sch= neider http://www.tq-group.com/ 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 C2A28E8FDDB for ; Wed, 4 Oct 2023 09:15:39 +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:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=b9NEk2vz6LRuMdP7gg03TG9+TD5yGmuIFsI4Rcx9Zl8=; b=NasVxQCK2L4lxO A0UXsYQeSS+EbOKzMCValwgv9xbe5n1Lk2fMMFdqXMe5zSCfAiZ+sopKLbuciGuQS+np5qivKXyWJ y5Y76KiqZtzon2NoMk1cxvscSPXJnjnG45jIUa4xqLRctJdC3ZOHx25ziMrQ14/rCX3vRGNMTJoPX nzgWhdEzqgyDCZBeJZJcdud5fOUJ09R0e1CrwHJ6KUAnvsHRDplc/hLB+wIQtBg1J6aMfAqgFYBGU zmcrpNzwAf+Y935SwmZWtJa+H3MfB/ce/KaruZY9X0KBSV00ri5HHqBISxejqtPw2aQROQee0JoK/ XIYPOD7aW0O5qxyPW+zw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qnxyf-00H0y0-2E; Wed, 04 Oct 2023 09:15:33 +0000 Received: from mx1.tq-group.com ([93.104.207.81]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qnwsA-00GjgJ-25 for linux-arm-kernel@lists.infradead.org; Wed, 04 Oct 2023 08:04:49 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tq-group.com; i=@tq-group.com; q=dns/txt; s=key1; t=1696406686; x=1727942686; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=uNd+HACguCoZjwveAU7kMZ/dp20g63cdWpbDWpo8YEo=; b=FwrgAUPCvPbSwSyxZ2fgETacdrJOAk6ZVEcynT0WpQTbM/PaJM1j0QO4 O7raXXwv+bHu3Q6OPhq3dtv9b6LMwwWKJZ+wFt+bgHB5cBOAM/BscyIFC vrOF93MFNutdUZaB+pLdiAcn/6DfuDQNLbm2u1Qp2SEWFube9M1Bt0uWt hS3AWoQdREpREEQUExtbR3bf4DIhw3cRxu29Hiyos4tD5W9Ky6/EmGIVx qmAvmqvbfveH8Bon87VrlofXNsKGViZ1wXxhZZt9v4kZYrA6mAhsYx9wu 6Ds2HEPH5wsztSF9XL19cSbRNKuTKzeOh8HK7AZVzL9h+wBB06XrkRvCy w==; X-IronPort-AV: E=Sophos;i="6.03,199,1694728800"; d="scan'208";a="33270753" Received: from vtuxmail01.tq-net.de ([10.115.0.20]) by mx1.tq-group.com with ESMTP; 04 Oct 2023 10:04:41 +0200 Received: from steina-w.localnet (steina-w.tq-net.de [10.123.53.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by vtuxmail01.tq-net.de (Postfix) with ESMTPSA id 57403280075; Wed, 4 Oct 2023 10:04:41 +0200 (CEST) From: Alexander Stein To: Benjamin Bara , Adam Ford Cc: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Michael Turquette , Stephen Boyd , Russell King , Abel Vesa , Peng Fan , Frank Oltmanns , Maxime Ripard , devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, Benjamin Bara , Lucas Stach Subject: Re: [PATCH 00/13] imx8mp: first clock propagation attempt (for LVDS) Date: Wed, 04 Oct 2023 10:04:41 +0200 Message-ID: <12810050.O9o76ZdvQC@steina-w> Organization: TQ-Systems GmbH In-Reply-To: References: <20230918-imx8mp-dtsi-v1-0-1d008b3237c0@skidata.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231004_010447_068518_6F8A43FF X-CRM114-Status: GOOD ( 51.04 ) 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 SGkgQWRhbSwKCkFtIERpZW5zdGFnLCAzLiBPa3RvYmVyIDIwMjMsIDE1OjI4OjA1IENFU1Qgc2No cmllYiBBZGFtIEZvcmQ6Cj4gT24gU3VuLCBTZXAgMTcsIDIwMjMgYXQgNTo0MOKAr1BNIEJlbmph bWluIEJhcmEgPGJiYXJhOTNAZ21haWwuY29tPiB3cm90ZToKPiA+IEhpIQo+ID4gCj4gPiBUYXJn ZXQgb2YgdGhpcyBzZXJpZXMgaXMgdG8gZHluYW1pY2FsbHkgc2V0IHRoZSByYXRlIG9mIHZpZGVv X3BsbDEgdG8KPiA+IHRoZSByZXF1aXJlZCBMVkRTIGNsb2NrIHJhdGUocyksIHdoaWNoIGFyZSBj b25maWd1cmVkIGJ5IHRoZSBwYW5lbCwgYW5kCj4gPiB0aGUgbHZkcy1icmlkZ2UgcmVzcGVjdGl2 ZWx5Lgo+ID4gCj4gPiBTb21lIGJhY2tncm91bmQ6Cj4gPiBUaGUgTFZEUyBwYW5lbCByZXF1aXJl cyB0d28gY2xvY2tzOiB0aGUgY3J0YyBjbG9jayBhbmQgdGhlIGx2ZHMgY2xvY2suCj4gPiBUaGUg bHZkcyByYXRlIGlzIGFsd2F5cyA3eCB0aGUgY3J0YyByYXRlLiBPbiB0aGUgaW14OG1wLCB0aGVz ZSBhcmUKPiA+IGFzc2lnbmVkIHRvIG1lZGlhX2Rpc3AyX3BpeCBhbmQgbWVkaWFfbGRiLCB3aGlj aCBhcmUgYm90aAo+IAo+IENvdWxkIHRoZSBMREIgZHJpdmVyIGJlIHVwZGF0ZWQgdG8gdGFrZSBp biB0aGUgY3J0YyBjbG9jayBhcyBhCj4gcGFyYW1ldGVyLCB0aGVuIHNldCB0aGUgbWVkaWFfbGRi IHRvIDd4IGNyY3QgY2xvY2suICBJIHdvbmRlciBpZiB0aGF0Cj4gbWlnaHQgc2ltcGxpZnkgdGhl IHRhc2sgYSBiaXQuCgpJJ20gbm90IHN1cmUgaWYgeW91IGhhZCBzb21ldGhpbmcgZGlmZmVyZW50 IGluIG1pbmQsIGJ1dCBJIGd1ZXNzIHRoaXMgaGFwcGVucyAKYWxyZWFkeSBpbiBmc2xfbGRiX2F0 b21pY19lbmFibGUoKSwgYWx0aG91Z2ggdXNpbmcgdGhlIG1vZGUgY2xvY2suCkFzIHRoaXMgbWln aHQgbm90IGFsd2F5cyBiZSBwb3NzaWJsZSwgY29tbWl0IGJkNDNhOTg0NGJjNmYgKCJkcm06IGJy aWRnZTogbGRiOiAKV2FybiBpZiBMREIgY2xvY2sgZG9lcyBub3QgbWF0Y2ggcmVxdWVzdGVkIGxp bmsgZnJlcXVlbmN5Iikgd2FzIGFkZGVkIHRvIAppbmRpY2F0ZSBzb21ldGhpbmcgbWlnaHQgYmUg d3JvbmcuClRoZSBtYWluIHByb2JsZW0gaGVyZSBpcyB0aGF0IGJvdGggbWVkaWFfbGRiIGFuZCBj cmN0IGNsb2NrIGFyZSBub3QgaW4gYSAKcGFyZW50PC0+Y2hpbGQgcmVsYXRpb25zaGlwLCBidXQg YXJlIHNpYmxpbmdzLCBjb25maWd1cmFibGUgaW5kaXZpZHVhbGx5LgoKQmVzdCByZWdhcmRzLApB bGV4YW5kZXIKCj4gPiBjbGstY29tcG9zaXRlLThtLiBUaGUgcmF0ZXMgYXJlIHNldCBieSBkcm1f Y2xpZW50X21vZGVzZXRfY29tbWl0KCkgKGFuZAo+ID4gbGF0ZXIgYnkgZnNsX2xkYl9hdG9taWNf ZW5hYmxlKCkpLCBhbmQgdGhlIGZzbC1sZGIgZHJpdmVyLCBmaXJzdCBjcnRjLAo+ID4gdGhlbiBs dmRzLiBUaGUgcGFyZW50IGlzIHR5cGljYWxseSBhc3NpZ25lZCB0byB2aWRlb19wbGwxLCB3aGlj aCBpcyBhCj4gPiBjbGstcGxsMTR4eCAocGxsMTQ0M3gpLgo+ID4gCj4gPiBUaGUgbWFpbiBwcm9i bGVtOgo+ID4gQXMgdGhlIGNsay1jb21wb3NpdGUtOG0gY3VycmVudGx5IGRvZXNuJ3Qgc3VwcG9y dCBDTEtfU0VUX1JBVEVfUEFSRU5ULAo+ID4gdGhlIGNydGMgcmF0ZSBpcyBub3QgcHJvcGFnYXRl ZCB0byB2aWRlb19wbGwxLCBhbmQgdGhlcmVmb3JlIG11c3QgYmUKPiA+IGFzc2lnbmVkIGluIHRo ZSBkZXZpY2UtdHJlZSBtYW51YWxseS4KPiA+IAo+ID4gVGhlIGlkZWE6Cj4gPiBFbmFibGUgQ0xL X1NFVF9SQVRFX1BBUkVOVCwgYXQgbGVhc3QgZm9yIG1lZGlhX2Rpc3AyX3BpeCBhbmQgbWVkaWFf bGRiLgo+ID4gV2hlbiB0aGlzIGlzIGRvbmUsIGVuc3VyZSB0aGF0IHRoZSBwbGwxNDQzeCBjYW4g YmUgcmUtY29uZmlndXJlZCwKPiA+IG1lYW5pbmcgaXQgZW5zdXJlcyB0aGF0IGFuIGFscmVhZHkg Y29uZmlndXJlZCByYXRlIChjcnRjIHJhdGUpIGlzIHN0aWxsCj4gPiBzdXBwb3J0ZWQgd2hlbiBh IHNlY29uZCBjaGlsZCByZXF1aXJlcyBhIGRpZmZlcmVudCByYXRlIChsdmRzIHJhdGUpLiBBcwo+ IAo+IEkgc3RpbGwgaGF2ZSBjb25jZXJucyB0aGF0IHRoZSBDTEtfU0VUX1JBVEVfUEFSRU5UIG1h eSBicmVhayB0aGUKPiBtZWRpYV9kaXNwMV9waXggaWYgbWVkaWFfZGlzcDJfcGl4IGlzIGNoYW5n aW5nIGl0Lgo+IAo+IEkgdGhpbmsgd2Ugc2hvdWxkIGNvbnNpZGVyIGFkZGluZyBzb21lIHNvcnQg b2YgY29uZmlndXJhYmxlIGZsYWcgdG8KPiB0aGUgQ0NNIHRoYXQgbGV0cyBwZW9wbGUgY2hvb3Nl ICBpZiBDTEtfU0VUX1JBVEVfUEFSRU5UIHNob3VsZCBiZSBzZXQKPiBvciBub3QgaW4gdGhlIGRl dmljZSB0cmVlIGluc3RlYWQgb2YgaGFyZC1jb2RpbmcgaXQgZWl0aGVyIG9uIG9yIG9mZi4KPiBU aGlzIHdvdWxkIGdpdmUgcGVvcGxlIHRoZSBmbGV4aWJpbGl0eSBvZiBzdGF0aW5nIHdoZXRoZXIK PiBtZWRpYV9kaXNwMV9waXgsIG1lZGlhX2Rpc3AyX3BpeCwgYm90aCBvciBuZWl0aGVyIGNvdWxk IHNldAo+IENMS19TRVRfUkFURV9QQVJFTlQuCj4gCj4gSSBiZWxpZXZlIHRoZSBpbXg4bXAtZXZr IGNhbiBzdXBwb3J0IGJvdGggTFZEUy0+IEhETUkgYW5kIERTSS0+SERNSQo+IGJyaWRnZXMsIGFu ZCBJIGZlYXIgdGhhdCBpZiB0aGV5IGFyZSB0cnlpbmcgdG8gYm90aCBzZXQgZGlmZmVyZW50Cj4g Y2xvY2sgcmF0ZXMsIHRoaXMgbWF5IGJyZWFrIHNvbWV0aGluZyBhbmQgdGhlIGNsb2NrcyBuZWVk IHRvIGJlCj4gc2VsZWN0ZWQgaW4gYWR2YW5jZSB0byBnaXZlIHBlb3BsZSBhIGJ1bmNoIG9mIEhE TUkgb3B0aW9ucyBhcyB3ZWxsIGFzCj4gYmVpbmcgYWJsZSB0byBkaXZpZGUgZG93biB0byBzdXBw b3J0IHRoZSBMVkRTLgo+IAo+IEkgdGhpbmsgc29tZSBvZiB0aGUgZGlzcGxheXMgY291bGQgYmUg dGllZCB0byBvbmUgb2YgdGhlIEF1ZGlvIFBMTCdzLAo+IHNvIEkgbWlnaHQgZXhwZXJpbWVudCB3 aXRoIHNwbGl0dGluZyB0aGUgbWVkaWFfZGlzcDFfcGl4IGFuZAo+IG1lZGlhX2Rpc3AyX3BpeCBm cm9tIGVhY2ggb3RoZXIgdG8gc2VlIGhvdyB3ZWxsIC4KPiAKPiA+IHRoZSBjaGlsZHJlbiBoYXZl IGRpdmlkZXIsIHRoZSBjdXJyZW50IGFwcHJvYWNoIGlzIHN0cmFpZ2h0IGZvcndhcmQgYnkKPiA+ IGNhbGN1bGF0aW5nIHRoZSBMQ00gb2YgdGhlIHJlcXVpcmVkIHJhdGVzLiBEdXJpbmcgdGhlIHJh dGUgY2hhbmdlIG9mIHRoZQo+ID4gUExMLCBpdCBtdXN0IGVuc3VyZSB0aGF0IGFsbCBjaGlsZHJl biBzdGlsbCBoYXZlIHRoZSBjb25maWd1cmVkIHJhdGUgYXQKPiA+IHRoZSBlbmQgKGFuZCBtYXli ZSBhbHNvIGJ5cGFzcyB0aGUgY2xvY2sgd2hpbGUgZG9pbmcgc28/KS4gVGhpcyBpcyBkb25lCj4g PiBieSBpbXBsZW1lbnRpbmcgYSBub3RpZmllciBmdW5jdGlvbiBmb3IgdGhlIGNsay1jb21wb3Np dGUtOG0uIFRoZSB0cmlja3kKPiA+IHBhcnQgaXMgbm93IHRvIGZpbmQgb3V0IGlmIHRoZSByYXRl IGNoYW5nZSB3YXMgaW50ZW50aW9uYWwgb3Igbm90LiBUaGlzCj4gPiBpcyBkb25lIGJ5IGFkZGlu ZyB0aGUgImNoYW5nZSB0cmlnZ2VyIiB0byB0aGUgbm90aWZ5IGRhdGEuIEluIG91ciBjYXNlLAo+ ID4gd2Ugbm93IGNhbiBpbmZlciBpZiB3ZSBhcmVuJ3QgdGhlIGNoYW5nZSB0cmlnZ2VyLCB3ZSBu ZWVkIHRvIGtlZXAgdGhlCj4gPiBleGlzdGluZyByYXRlIGFmdGVyIHRoZSBQTEwncyByYXRlIGNo YW5nZS4gV2Uga2VlcCB0aGUgZXhpc3RpbmcgcmF0ZSBieQo+ID4gbW9kaWZ5aW5nIHRoZSBuZXdf cmF0ZSBvZiB0aGUgY2xvY2sncyBjb3JlLCBhcyB3ZSBhcmUgcXVpdGUgbGF0ZSBpbiBhbgo+ID4g YWxyZWFkeSBvbmdvaW5nIGNsb2NrIGNoYW5nZSBwcm9jZXNzLgo+ID4gCj4gPiBGdXR1cmUgd29y azoKPiA+IFRoZSByZS1jb25maWd1cmF0aW9uIG9mIHRoZSBQTEwgY2FuIGRlZmluaXRlbHkgYmUg aW1wcm92ZWQgZm9yIG90aGVyIHVzZQo+ID4gY2FzZXMgd2hlcmUgdGhlIGNoaWxkcmVuIGhhdmUg bW9yZSBmYW5jeSBpbnRlci1kZXBlbmRlbmNpZXMuIFRoYXQncyBvbmUKPiA+IG9mIHRoZSBtYWlu IHJlYXNvbnMgSSBjdXJyZW50bHkgb25seSB0b3VjaGVkIHRoZSBtZW50aW9uZWQgY2xvY2tzLgo+ ID4gQWRkaXRpb25hbGx5LCBpdCBtaWdodCBtYWtlIHNlbnNlIHRvIGF1dG9tYXRpY2FsbHkgcmUt cGFyZW50IGlmIGEKPiA+IGRpZmZlcmVudCBwb3NzaWJsZSBwYXJlbnQgc3VpdHMgYmV0dGVyLgo+ ID4gRm9yIHRoZSBjb3JlIHBhcnQsIEkgdGhvdWdodCBhYm91dCBleHRlbmRpbmcgbXkgInVuaW50 ZW50aW9uYWwgY2hhbmdlCj4gPiBjaGVjayIgc28gdGhhdCB0aGUgY29yZSBlbnN1cmVzIHRoYXQg dGhlIGNoaWxkcmVuIGtlZXAgdGhlIGNvbmZpZ3VyZWQKPiA+IHJhdGUsIHdoaWNoIG1pZ2h0IG5v dCBiZSBlYXN5IGFzIHRoZSBwYXJlbnQgY291bGQgYmUgYWxsb3dlZCB0byAicm91bmQiLAo+ID4g YnV0IGl0J3Mgbm90IGNsZWFyIChhdCBsZWFzdCB0byBtZSB5ZXQpIGhvdyBtdWNoIHJvdW5kaW5n IGlzIGFsbG93ZWQuIEkKPiA+IGZvdW5kIGEgc2ltaWxhciBkaXNjdXNzaW9uIHBvc3RlZCBoZXJl WzFdLCB0aGVyZWZvcmUgYWRkZWQgRnJhbmsgYW5kCj4gPiBNYXhpbWUuCj4gPiAKPiA+IFRoYW5r cyAmIHJlZ2FyZHMsCj4gPiBCZW5qYW1pbgo+ID4gCj4gPiBbMV0KPiA+IGh0dHBzOi8vbG9yZS5r ZXJuZWwub3JnL2xrbWwvMjAyMzA4MjUtcGxsLW1pcGlfa2VlcF9yYXRlLXYxLTAtMzViYzQzNTcw NzMKPiA+IDBAb2x0bWFubnMuZGV2Lwo+ID4gCj4gPiAtLS0KPiA+IAo+ID4gQmVuamFtaW4gQmFy YSAoMTMpOgo+ID4gICAgICAgYXJtNjQ6IGR0czogaW14OG1wOiBsdmRzX2JyaWRnZTogdXNlIHJv b3QgaW5zdGVhZCBvZiBjb21wb3NpdGUKPiA+ICAgICAgIGFybTY0OiBkdHM6IGlteDhtcDogcmUt cGFyZW50IElNWDhNUF9DTEtfTUVESUFfTUlQSV9QSFkxX1JFRgo+ID4gICAgICAgY2xrOiBpbXBs ZW1lbnQgY2xrX2h3X3NldF9yYXRlKCkKPiA+ICAgICAgIGNsazogcHJpbnQgZGVidWcgbWVzc2Fn ZSBpZiBwYXJlbnQgY2hhbmdlIGlzIGlnbm9yZWQKPiA+ICAgICAgIGNsazoga2VlcCB0cmFjayBv ZiB0aGUgdHJpZ2dlciBvZiBhbiBvbmdvaW5nIGNsa19zZXRfcmF0ZQo+ID4gICAgICAgY2xrOiBr ZWVwIHRyYWNrIGlmIGEgY2xvY2sgaXMgZXhwbGljaXRseSBjb25maWd1cmVkCj4gPiAgICAgICBj bGs6IGRldGVjdCB1bmludGVuZGVkIHJhdGUgY2hhbmdlcwo+ID4gICAgICAgY2xrOiBkaXZpZGVy OiBzdG9wIGVhcmx5IGlmIGFuIG9wdGltYWwgZGl2aWRlciBpcyBmb3VuZAo+ID4gICAgICAgY2xr OiBpbXg6IHBsbDE0eHg6IGNvbnNpZGVyIGFjdGl2ZSByYXRlIGZvciByZS1jb25maWcKPiA+ICAg ICAgIGNsazogaW14OiBjb21wb3NpdGUtOG06IGNvbnZlcnQgY29tcHV0ZV9kaXZpZGVycyB0byB2 b2lkCj4gPiAgICAgICBjbGs6IGlteDogY29tcG9zaXRlLThtOiBpbXBsZW1lbnQgQ0xLX1NFVF9S QVRFX1BBUkVOVAo+ID4gICAgICAgY2xrOiBpbXg6IGlteDhtcDogYWxsb3cgTFZEUyBjbG9ja3Mg dG8gc2V0IHBhcmVudCByYXRlCj4gPiAgICAgICBhcm02NDogZHRzOiBpbXg4bXA6IHJlbW92ZSBh c3NpZ25lZC1jbG9jay1yYXRlIG9mIElNWDhNUF9WSURFT19QTEwxCj4gPiAgCj4gPiAgYXJjaC9h cm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OG1wLmR0c2kgfCAgMTQgKy0tCj4gPiAgZHJpdmVy cy9jbGsvY2xrLWRpdmlkZXIuYyAgICAgICAgICAgICAgICAgfCAgIDkgKysKPiA+ICBkcml2ZXJz L2Nsay9jbGsuYyAgICAgICAgICAgICAgICAgICAgICAgICB8IDE0Ngo+ID4gICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrLSBkcml2ZXJzL2Nsay9pbXgvY2xrLWNvbXBvc2l0ZS04bS5jICAg ICAgIAo+ID4gIHwgIDg5ICsrKysrKysrKysrKysrKy0tLSBkcml2ZXJzL2Nsay9pbXgvY2xrLWlt eDhtcC5jICAgICAgICAgICAgICB8ICAgNAo+ID4gICstCj4gPiAgZHJpdmVycy9jbGsvaW14L2Ns ay1wbGwxNHh4LmMgICAgICAgICAgICAgfCAgMjAgKysrKwo+ID4gIGRyaXZlcnMvY2xrL2lteC9j bGsuaCAgICAgICAgICAgICAgICAgICAgIHwgICA0ICsKPiA+ICBpbmNsdWRlL2xpbnV4L2Nsay1w cm92aWRlci5oICAgICAgICAgICAgICB8ICAgMiArCj4gPiAgaW5jbHVkZS9saW51eC9jbGsuaCAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwo+ID4gIDkgZmlsZXMgY2hhbmdlZCwgMjYxIGlu c2VydGlvbnMoKyksIDI5IGRlbGV0aW9ucygtKQo+ID4gCj4gPiAtLS0KPiA+IGJhc2UtY29tbWl0 OiBlMTQzMDE2YjU2ZWNiMGZjZGE1YmI2MDI2YjBhMjVmZTU1Mjc0ZjU2Cj4gPiBjaGFuZ2UtaWQ6 IDIwMjMwOTEzLWlteDhtcC1kdHNpLTdjNmUyNTkwN2UwZQo+ID4gCj4gPiBCZXN0IHJlZ2FyZHMs Cj4gPiAtLQo+ID4gQmVuamFtaW4gQmFyYSA8YmVuamFtaW4uYmFyYUBza2lkYXRhLmNvbT4KCgot LSAKVFEtU3lzdGVtcyBHbWJIIHwgTcO8aGxzdHJhw59lIDIsIEd1dCBEZWxsaW5nIHwgODIyMjkg U2VlZmVsZCwgR2VybWFueQpBbXRzZ2VyaWNodCBNw7xuY2hlbiwgSFJCIDEwNTAxOApHZXNjaMOk ZnRzZsO8aHJlcjogRGV0bGVmIFNjaG5laWRlciwgUsO8ZGlnZXIgU3RhaGwsIFN0ZWZhbiBTY2hu ZWlkZXIKaHR0cDovL3d3dy50cS1ncm91cC5jb20vCgoKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0Cmxp bnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFk Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK