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 D0999CCF9F8 for ; Sat, 1 Nov 2025 11:45:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Type: Content-Transfer-Encoding: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=PHVYSvdDYI0ifXKzRw7b8rWjTZ1yx6Imu7EM6kr3mrU=; b=z7qnMSbgFUjOw3LLbX36dPzNVh qRXxrTS7+01f31CM18bIPSfUIzUzqA53edwVnijAE1n8yXZmF4yeGvU9xmcX8BqNXmRi68C9tp9dK ugtVG5eE9KjELOQMyn+flvMKQhWFvS8qb4ytAXduI9CBgj0FkhvlOByxBsykyVEWhs7rmzwDZypkE IZWJqnfFiaYOxYiMTRyZvNOvETVxTnTyYfJNg4HLVkn105oJPV1+ezJHLC5ZwwmYyKq7ZvJYh24gH rxp07Vj8sPIDULH/6oouVsjBtNM2XWEKb9eXPkZxVL/mUtgpkqPxXjWdfiBXJL5bW9+wlmBohXMwr UaEEtFqQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1vFA2Z-00000007JIm-1ZtX; Sat, 01 Nov 2025 11:45:03 +0000 Received: from gloria.sntech.de ([185.11.138.130]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1vFA2X-00000007JI5-1y6S; Sat, 01 Nov 2025 11:45:02 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sntech.de; s=gloria202408; h=Content-Type:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Reply-To; bh=PHVYSvdDYI0ifXKzRw7b8rWjTZ1yx6Imu7EM6kr3mrU=; b=F9EcTBASWM5qh/zDz2Za0DKHJv O86Tv5obC46pwjRdwxGXFTKR4PRNCzkPOkXPSnqWov/3dIxsIxD3Ne0RjmQzOn0YG5aAkU3hFoL4g +s+WRlofAnWqd/jtEX59Us1aepVBVm2xn/WwE+qLd5oUHbVJjWXwdXWvVmywqjAXM7DJGN55ERaWK ek3ieHeDNY1kQSmWmFNZZTLr6kiWLGzqpxVmOjvJjL/CWDZDHP1owMZ6CwrvOLr8Nxh+wdd0rAeyu yCkTa1xbnBENaEsSEpr7zWK1X5Tn51bI3PZMKji1nQ1FpOIhiRfPgPeFX3BGaw9AcTUdIwyK3/A3G FK1eTZ3g==; Received: from i53875b80.versanet.de ([83.135.91.128] helo=phil.localnet) by gloria.sntech.de with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vFA2Q-0008ME-Vd; Sat, 01 Nov 2025 12:44:55 +0100 From: Heiko Stuebner To: Alexey Charkov , Dragan Simic Cc: sigmaris@gmail.com, conor+dt@kernel.org, devicetree@vger.kernel.org, krzk+dt@kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, robh@kernel.org Subject: Re: [PATCH] arm64: dts: rockchip: pwm-fan overlay for NanoPC-T6 Date: Sat, 01 Nov 2025 12:44:54 +0100 Message-ID: <2246326.irdbgypaU6@phil> In-Reply-To: <2cfeeb0c-f7e0-b101-62c4-3b6eae40a30b@manjaro.org> References: <2cfeeb0c-f7e0-b101-62c4-3b6eae40a30b@manjaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20251101_044501_536406_5C2CB679 X-CRM114-Status: GOOD ( 55.22 ) 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: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Am Montag, 27. Oktober 2025, 22:15:05 Mitteleurop=C3=A4ische Normalzeit sch= rieb Dragan Simic: > Hello Alexey, >=20 > On Monday, October 27, 2025 21:56 CET, Alexey Charkov = wrote: > > On Tue, Oct 28, 2025 at 12:02=E2=80=AFAM Dragan Simic wrote: > > > On Mon, Oct 27, 2025 at 7:08=E2=80=AFPM Hugh Cole-Baker wrote: > > > > On 27/10/2025 09:14, Alexey Charkov wrote: > > > > > > > >> Is there any downside to enabling this unconditionally in the board > > > >> .dts? > > > > > > > > Only that it goes against the principle that the DT should describe= the > > > > hardware; the board .dts would describe a cooling device that doesn= 't > > > > actually exist on the base board. > > > > > > Having a separate DT overlay is perfectly fine if we want to > > > describe a board absolutely correctly: if the fan actually isn't > > > present, the operating system shouldn't be made to think it is > > > there, especially if there's no fan RPM feedback, which is the > > > case on almost all Rockchip boards that support a fan. > > > > > > Preventing the kernel from managing a non-existent fan might even > > > save some CPU cycles, ending up producing a bit less heat, which > > > can only help in passively cooled setups. > >=20 > > Sounds like an overcomplication without real benefit. It's one thing > > with overlays for functionality that can be software-incompatible > > depending on whether an external attachment is connected or depending > > on the type of attachment connected. Here we are looking at a plain > > 2-pin fan which cannot be software incompatible to anything really > > (it's not like one could repurpose the fan connector for anything > > meaningful if a fan is not in use, and noone gets hurt if a PWM output > > is left running without load). > >=20 > > The CPU cycles spent parsing a slightly larger DTB at boot are likely > > comparable to those spent activating a PWM output needlessly upon > > hitting the active cooling trip point, and both are negligible for any > > practical purpose. >=20 > Hmm, right, I forgot for a moment that the PWM output is generated > by dedicated hardware, so not many CPU cycles would be wasted. >=20 > BTW, with a fan PWM signal generated by a soft-GPIO output, much > more CPU cycles would've been saved by omitting the fan definition > if it isn't present, but that isn't the case here. >=20 > > > However, the practice so far has been to describe the fans in the > > > main board dts files, if the board provides fan support, regardless > > > of the fan being present in a particular board setup or not. > > > > > > > I guess then in theory, an OS might allow the SoC to reach undesira= bly high > > > > temperatures if it's relying on the nonexistent fan to cool it down= =2E But I > > > > don't think this would be an issue on Linux, at least, in practice. > > > > > > We're safe, a thermal runaway isn't going to happen when the fan is > > > defined in a board DT but actually isn't present. Thermal CPU and > > > GPU throttling will prevent the overheating from happening. > > > > > > >> Overlays require more user configuration, and not all > > > >> bootloaders support them directly (e.g. systemd-boot users would > > > >> struggle). Compiling with overlays enabled also makes .dtb's a lot > > > >> larger due to added symbols information. > > > > > > > > Nowadays (on Debian at least) using overlays is pretty easy, I'm us= ing the > > > > u-boot-menu package in Debian, I just copy the overlay(s) to /boot/= dtbo/ and > > > > it detects them automatically and adds them to extlinux.conf for u-= boot to > > > > apply. > > > > > > > > Couldn't systemd-boot users just use rk3588-nanopc-t6-(lts-)with-fa= n.dtb as > > > > their single DT to load, if it doesn't support applying overlays an= d they > > > > want to use the fan addon? > >=20 > > Sure, but it's a manual configuration step, where otherwise the kernel > > would just default to the correct dtb for the board that the firmware > > told it about. The fan is not discoverable, so the firmware won't ever > > offer the "-with-fan" variant, meaning users would need to supply it > > manually in every instance. >=20 > FWIW, the most user-friendly SBC family in the world, Raspberry > Pi, :) requires manual enabling of the fan on Raspberry Pi 4. > I haven't researched what's the background for that, perhaps the > need to keep the GPIO expansion header completely unoccupied by > default, because the fan attaches to the GPIO header, instead of > to some dedicated fan connector. >=20 > > > Yes, that's an option. However, that in general doesn't resolve > > > the issues arising from systemd-boot users wanting to apply more > > > than a single DT overlay. > > > > > > > FWIW, I haven't noticed any problems with having a larger .dtb (usi= ng mainline > > > > U-Boot to load it) and several other RK3588 boards are also compile= d with > > > > symbols enabled already, and I haven't seen any issues reported wit= h them. > > > > > > After thinking a bit about it, I'd support the extraction of fan > > > definitions into separate DT overlays. As I wrote above already, > > > not managing the non-existent fan might actually help a bit with > > > passively cooled board setups, which is a good enough reason for > > > me to support separate DT overlays. > >=20 > > Practical benefits sound far fetched here, while forcing users to > > manually configure something that would have otherwise just worked. > > Let's see what Heiko thinks. Personally, I'm more on the less complication side. I.e. if there is an actual fan-connector on the board we should describe it as such. Overlays I see for things where you attach hats to generic pin headers to create specific functionality on top of a generic interface. But if the board itself has an actual fan header, it should be described as such. Because that then _is_ the standard use of that. Heiko 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 DD6A6CCF9F8 for ; Sat, 1 Nov 2025 11:45:18 +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=AJn1PyAbV1tWtzj6fx8MvGtwkKB/gCk+zk3scDb5k1M=; b=Wh1nObZUzJp/1/ AGLbX/ncXg5OgGeMbsqfppnpn0e53iEGsgzvtiH25SnL0bpcDy2ehYgLtVQWYfD1tZSZxDPB49c4S 9ZHGDLBCnGWX3k2ZsPC5lPkfV4FbkZNIyUXoJ1Rp1qUgunnuhi/aBTtdRtMpMjbff6pKqkkpV1R7X pe6lmf0X4gCfbAEDwUqB/2vErw1Q17Pj+9y5sXCrc8TAuGABfw/dnLvC1N9f3e6T8BMGhd2s8MfME NDINGkeXIAo2Oy1QlYCIAPw1hTaG495AVu2JMt7M3cpEQXqitXYEzeBXlq3gsirPP296CXGILFL0Q eZcYQxlB+JU7OTp4mo8Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1vFA2Z-00000007JJ2-3oMk; Sat, 01 Nov 2025 11:45:03 +0000 Received: from gloria.sntech.de ([185.11.138.130]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1vFA2X-00000007JI5-1y6S; Sat, 01 Nov 2025 11:45:02 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sntech.de; s=gloria202408; h=Content-Type:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Reply-To; bh=PHVYSvdDYI0ifXKzRw7b8rWjTZ1yx6Imu7EM6kr3mrU=; b=F9EcTBASWM5qh/zDz2Za0DKHJv O86Tv5obC46pwjRdwxGXFTKR4PRNCzkPOkXPSnqWov/3dIxsIxD3Ne0RjmQzOn0YG5aAkU3hFoL4g +s+WRlofAnWqd/jtEX59Us1aepVBVm2xn/WwE+qLd5oUHbVJjWXwdXWvVmywqjAXM7DJGN55ERaWK ek3ieHeDNY1kQSmWmFNZZTLr6kiWLGzqpxVmOjvJjL/CWDZDHP1owMZ6CwrvOLr8Nxh+wdd0rAeyu yCkTa1xbnBENaEsSEpr7zWK1X5Tn51bI3PZMKji1nQ1FpOIhiRfPgPeFX3BGaw9AcTUdIwyK3/A3G FK1eTZ3g==; Received: from i53875b80.versanet.de ([83.135.91.128] helo=phil.localnet) by gloria.sntech.de with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vFA2Q-0008ME-Vd; Sat, 01 Nov 2025 12:44:55 +0100 From: Heiko Stuebner To: Alexey Charkov , Dragan Simic Cc: sigmaris@gmail.com, conor+dt@kernel.org, devicetree@vger.kernel.org, krzk+dt@kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, robh@kernel.org Subject: Re: [PATCH] arm64: dts: rockchip: pwm-fan overlay for NanoPC-T6 Date: Sat, 01 Nov 2025 12:44:54 +0100 Message-ID: <2246326.irdbgypaU6@phil> In-Reply-To: <2cfeeb0c-f7e0-b101-62c4-3b6eae40a30b@manjaro.org> References: <2cfeeb0c-f7e0-b101-62c4-3b6eae40a30b@manjaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20251101_044501_536406_5C2CB679 X-CRM114-Status: GOOD ( 55.22 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org QW0gTW9udGFnLCAyNy4gT2t0b2JlciAyMDI1LCAyMjoxNTowNSBNaXR0ZWxldXJvcMOkaXNjaGUg Tm9ybWFsemVpdCBzY2hyaWViIERyYWdhbiBTaW1pYzoKPiBIZWxsbyBBbGV4ZXksCj4gCj4gT24g TW9uZGF5LCBPY3RvYmVyIDI3LCAyMDI1IDIxOjU2IENFVCwgQWxleGV5IENoYXJrb3YgPGFsY2hh cmtAZ21haWwuY29tPiB3cm90ZToKPiA+IE9uIFR1ZSwgT2N0IDI4LCAyMDI1IGF0IDEyOjAy4oCv QU0gRHJhZ2FuIFNpbWljIDxkc2ltaWNAbWFuamFyby5vcmc+IHdyb3RlOgo+ID4gPiBPbiBNb24s IE9jdCAyNywgMjAyNSBhdCA3OjA44oCvUE0gSHVnaCBDb2xlLUJha2VyIDxzaWdtYXJpc0BnbWFp bC5jb20+IHdyb3RlOgo+ID4gPiA+IE9uIDI3LzEwLzIwMjUgMDk6MTQsIEFsZXhleSBDaGFya292 IHdyb3RlOgo+ID4gPiA+Cj4gPiA+ID4+IElzIHRoZXJlIGFueSBkb3duc2lkZSB0byBlbmFibGlu ZyB0aGlzIHVuY29uZGl0aW9uYWxseSBpbiB0aGUgYm9hcmQKPiA+ID4gPj4gLmR0cz8KPiA+ID4g Pgo+ID4gPiA+IE9ubHkgdGhhdCBpdCBnb2VzIGFnYWluc3QgdGhlIHByaW5jaXBsZSB0aGF0IHRo ZSBEVCBzaG91bGQgZGVzY3JpYmUgdGhlCj4gPiA+ID4gaGFyZHdhcmU7IHRoZSBib2FyZCAuZHRz IHdvdWxkIGRlc2NyaWJlIGEgY29vbGluZyBkZXZpY2UgdGhhdCBkb2Vzbid0Cj4gPiA+ID4gYWN0 dWFsbHkgZXhpc3Qgb24gdGhlIGJhc2UgYm9hcmQuCj4gPiA+Cj4gPiA+IEhhdmluZyBhIHNlcGFy YXRlIERUIG92ZXJsYXkgaXMgcGVyZmVjdGx5IGZpbmUgaWYgd2Ugd2FudCB0bwo+ID4gPiBkZXNj cmliZSBhIGJvYXJkIGFic29sdXRlbHkgY29ycmVjdGx5OiBpZiB0aGUgZmFuIGFjdHVhbGx5IGlz bid0Cj4gPiA+IHByZXNlbnQsIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHNob3VsZG4ndCBiZSBtYWRl IHRvIHRoaW5rIGl0IGlzCj4gPiA+IHRoZXJlLCBlc3BlY2lhbGx5IGlmIHRoZXJlJ3Mgbm8gZmFu IFJQTSBmZWVkYmFjaywgd2hpY2ggaXMgdGhlCj4gPiA+IGNhc2Ugb24gYWxtb3N0IGFsbCBSb2Nr Y2hpcCBib2FyZHMgdGhhdCBzdXBwb3J0IGEgZmFuLgo+ID4gPgo+ID4gPiBQcmV2ZW50aW5nIHRo ZSBrZXJuZWwgZnJvbSBtYW5hZ2luZyBhIG5vbi1leGlzdGVudCBmYW4gbWlnaHQgZXZlbgo+ID4g PiBzYXZlIHNvbWUgQ1BVIGN5Y2xlcywgZW5kaW5nIHVwIHByb2R1Y2luZyBhIGJpdCBsZXNzIGhl YXQsIHdoaWNoCj4gPiA+IGNhbiBvbmx5IGhlbHAgaW4gcGFzc2l2ZWx5IGNvb2xlZCBzZXR1cHMu Cj4gPiAKPiA+IFNvdW5kcyBsaWtlIGFuIG92ZXJjb21wbGljYXRpb24gd2l0aG91dCByZWFsIGJl bmVmaXQuIEl0J3Mgb25lIHRoaW5nCj4gPiB3aXRoIG92ZXJsYXlzIGZvciBmdW5jdGlvbmFsaXR5 IHRoYXQgY2FuIGJlIHNvZnR3YXJlLWluY29tcGF0aWJsZQo+ID4gZGVwZW5kaW5nIG9uIHdoZXRo ZXIgYW4gZXh0ZXJuYWwgYXR0YWNobWVudCBpcyBjb25uZWN0ZWQgb3IgZGVwZW5kaW5nCj4gPiBv biB0aGUgdHlwZSBvZiBhdHRhY2htZW50IGNvbm5lY3RlZC4gSGVyZSB3ZSBhcmUgbG9va2luZyBh dCBhIHBsYWluCj4gPiAyLXBpbiBmYW4gd2hpY2ggY2Fubm90IGJlIHNvZnR3YXJlIGluY29tcGF0 aWJsZSB0byBhbnl0aGluZyByZWFsbHkKPiA+IChpdCdzIG5vdCBsaWtlIG9uZSBjb3VsZCByZXB1 cnBvc2UgdGhlIGZhbiBjb25uZWN0b3IgZm9yIGFueXRoaW5nCj4gPiBtZWFuaW5nZnVsIGlmIGEg ZmFuIGlzIG5vdCBpbiB1c2UsIGFuZCBub29uZSBnZXRzIGh1cnQgaWYgYSBQV00gb3V0cHV0Cj4g PiBpcyBsZWZ0IHJ1bm5pbmcgd2l0aG91dCBsb2FkKS4KPiA+IAo+ID4gVGhlIENQVSBjeWNsZXMg c3BlbnQgcGFyc2luZyBhIHNsaWdodGx5IGxhcmdlciBEVEIgYXQgYm9vdCBhcmUgbGlrZWx5Cj4g PiBjb21wYXJhYmxlIHRvIHRob3NlIHNwZW50IGFjdGl2YXRpbmcgYSBQV00gb3V0cHV0IG5lZWRs ZXNzbHkgdXBvbgo+ID4gaGl0dGluZyB0aGUgYWN0aXZlIGNvb2xpbmcgdHJpcCBwb2ludCwgYW5k IGJvdGggYXJlIG5lZ2xpZ2libGUgZm9yIGFueQo+ID4gcHJhY3RpY2FsIHB1cnBvc2UuCj4gCj4g SG1tLCByaWdodCwgSSBmb3Jnb3QgZm9yIGEgbW9tZW50IHRoYXQgdGhlIFBXTSBvdXRwdXQgaXMg Z2VuZXJhdGVkCj4gYnkgZGVkaWNhdGVkIGhhcmR3YXJlLCBzbyBub3QgbWFueSBDUFUgY3ljbGVz IHdvdWxkIGJlIHdhc3RlZC4KPiAKPiBCVFcsIHdpdGggYSBmYW4gUFdNIHNpZ25hbCBnZW5lcmF0 ZWQgYnkgYSBzb2Z0LUdQSU8gb3V0cHV0LCBtdWNoCj4gbW9yZSBDUFUgY3ljbGVzIHdvdWxkJ3Zl IGJlZW4gc2F2ZWQgYnkgb21pdHRpbmcgdGhlIGZhbiBkZWZpbml0aW9uCj4gaWYgaXQgaXNuJ3Qg cHJlc2VudCwgYnV0IHRoYXQgaXNuJ3QgdGhlIGNhc2UgaGVyZS4KPiAKPiA+ID4gSG93ZXZlciwg dGhlIHByYWN0aWNlIHNvIGZhciBoYXMgYmVlbiB0byBkZXNjcmliZSB0aGUgZmFucyBpbiB0aGUK PiA+ID4gbWFpbiBib2FyZCBkdHMgZmlsZXMsIGlmIHRoZSBib2FyZCBwcm92aWRlcyBmYW4gc3Vw cG9ydCwgcmVnYXJkbGVzcwo+ID4gPiBvZiB0aGUgZmFuIGJlaW5nIHByZXNlbnQgaW4gYSBwYXJ0 aWN1bGFyIGJvYXJkIHNldHVwIG9yIG5vdC4KPiA+ID4KPiA+ID4gPiBJIGd1ZXNzIHRoZW4gaW4g dGhlb3J5LCBhbiBPUyBtaWdodCBhbGxvdyB0aGUgU29DIHRvIHJlYWNoIHVuZGVzaXJhYmx5IGhp Z2gKPiA+ID4gPiB0ZW1wZXJhdHVyZXMgaWYgaXQncyByZWx5aW5nIG9uIHRoZSBub25leGlzdGVu dCBmYW4gdG8gY29vbCBpdCBkb3duLiBCdXQgSQo+ID4gPiA+IGRvbid0IHRoaW5rIHRoaXMgd291 bGQgYmUgYW4gaXNzdWUgb24gTGludXgsIGF0IGxlYXN0LCBpbiBwcmFjdGljZS4KPiA+ID4KPiA+ ID4gV2UncmUgc2FmZSwgYSB0aGVybWFsIHJ1bmF3YXkgaXNuJ3QgZ29pbmcgdG8gaGFwcGVuIHdo ZW4gdGhlIGZhbiBpcwo+ID4gPiBkZWZpbmVkIGluIGEgYm9hcmQgRFQgYnV0IGFjdHVhbGx5IGlz bid0IHByZXNlbnQuICBUaGVybWFsIENQVSBhbmQKPiA+ID4gR1BVIHRocm90dGxpbmcgd2lsbCBw cmV2ZW50IHRoZSBvdmVyaGVhdGluZyBmcm9tIGhhcHBlbmluZy4KPiA+ID4KPiA+ID4gPj4gT3Zl cmxheXMgcmVxdWlyZSBtb3JlIHVzZXIgY29uZmlndXJhdGlvbiwgYW5kIG5vdCBhbGwKPiA+ID4g Pj4gYm9vdGxvYWRlcnMgc3VwcG9ydCB0aGVtIGRpcmVjdGx5IChlLmcuIHN5c3RlbWQtYm9vdCB1 c2VycyB3b3VsZAo+ID4gPiA+PiBzdHJ1Z2dsZSkuIENvbXBpbGluZyB3aXRoIG92ZXJsYXlzIGVu YWJsZWQgYWxzbyBtYWtlcyAuZHRiJ3MgYSBsb3QKPiA+ID4gPj4gbGFyZ2VyIGR1ZSB0byBhZGRl ZCBzeW1ib2xzIGluZm9ybWF0aW9uLgo+ID4gPiA+Cj4gPiA+ID4gTm93YWRheXMgKG9uIERlYmlh biBhdCBsZWFzdCkgdXNpbmcgb3ZlcmxheXMgaXMgcHJldHR5IGVhc3ksIEknbSB1c2luZyB0aGUK PiA+ID4gPiB1LWJvb3QtbWVudSBwYWNrYWdlIGluIERlYmlhbiwgSSBqdXN0IGNvcHkgdGhlIG92 ZXJsYXkocykgdG8gL2Jvb3QvZHRiby8gYW5kCj4gPiA+ID4gaXQgZGV0ZWN0cyB0aGVtIGF1dG9t YXRpY2FsbHkgYW5kIGFkZHMgdGhlbSB0byBleHRsaW51eC5jb25mIGZvciB1LWJvb3QgdG8KPiA+ ID4gPiBhcHBseS4KPiA+ID4gPgo+ID4gPiA+IENvdWxkbid0IHN5c3RlbWQtYm9vdCB1c2VycyBq dXN0IHVzZSByazM1ODgtbmFub3BjLXQ2LShsdHMtKXdpdGgtZmFuLmR0YiBhcwo+ID4gPiA+IHRo ZWlyIHNpbmdsZSBEVCB0byBsb2FkLCBpZiBpdCBkb2Vzbid0IHN1cHBvcnQgYXBwbHlpbmcgb3Zl cmxheXMgYW5kIHRoZXkKPiA+ID4gPiB3YW50IHRvIHVzZSB0aGUgZmFuIGFkZG9uPwo+ID4gCj4g PiBTdXJlLCBidXQgaXQncyBhIG1hbnVhbCBjb25maWd1cmF0aW9uIHN0ZXAsIHdoZXJlIG90aGVy d2lzZSB0aGUga2VybmVsCj4gPiB3b3VsZCBqdXN0IGRlZmF1bHQgdG8gdGhlIGNvcnJlY3QgZHRi IGZvciB0aGUgYm9hcmQgdGhhdCB0aGUgZmlybXdhcmUKPiA+IHRvbGQgaXQgYWJvdXQuIFRoZSBm YW4gaXMgbm90IGRpc2NvdmVyYWJsZSwgc28gdGhlIGZpcm13YXJlIHdvbid0IGV2ZXIKPiA+IG9m ZmVyIHRoZSAiLXdpdGgtZmFuIiB2YXJpYW50LCBtZWFuaW5nIHVzZXJzIHdvdWxkIG5lZWQgdG8g c3VwcGx5IGl0Cj4gPiBtYW51YWxseSBpbiBldmVyeSBpbnN0YW5jZS4KPiAKPiBGV0lXLCB0aGUg bW9zdCB1c2VyLWZyaWVuZGx5IFNCQyBmYW1pbHkgaW4gdGhlIHdvcmxkLCBSYXNwYmVycnkKPiBQ aSwgOikgcmVxdWlyZXMgbWFudWFsIGVuYWJsaW5nIG9mIHRoZSBmYW4gb24gUmFzcGJlcnJ5IFBp IDQuCj4gSSBoYXZlbid0IHJlc2VhcmNoZWQgd2hhdCdzIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGF0 LCBwZXJoYXBzIHRoZQo+IG5lZWQgdG8ga2VlcCB0aGUgR1BJTyBleHBhbnNpb24gaGVhZGVyIGNv bXBsZXRlbHkgdW5vY2N1cGllZCBieQo+IGRlZmF1bHQsIGJlY2F1c2UgdGhlIGZhbiBhdHRhY2hl cyB0byB0aGUgR1BJTyBoZWFkZXIsIGluc3RlYWQgb2YKPiB0byBzb21lIGRlZGljYXRlZCBmYW4g Y29ubmVjdG9yLgo+IAo+ID4gPiBZZXMsIHRoYXQncyBhbiBvcHRpb24uICBIb3dldmVyLCB0aGF0 IGluIGdlbmVyYWwgZG9lc24ndCByZXNvbHZlCj4gPiA+IHRoZSBpc3N1ZXMgYXJpc2luZyBmcm9t IHN5c3RlbWQtYm9vdCB1c2VycyB3YW50aW5nIHRvIGFwcGx5IG1vcmUKPiA+ID4gdGhhbiBhIHNp bmdsZSBEVCBvdmVybGF5Lgo+ID4gPgo+ID4gPiA+IEZXSVcsIEkgaGF2ZW4ndCBub3RpY2VkIGFu eSBwcm9ibGVtcyB3aXRoIGhhdmluZyBhIGxhcmdlciAuZHRiICh1c2luZyBtYWlubGluZQo+ID4g PiA+IFUtQm9vdCB0byBsb2FkIGl0KSBhbmQgc2V2ZXJhbCBvdGhlciBSSzM1ODggYm9hcmRzIGFy ZSBhbHNvIGNvbXBpbGVkIHdpdGgKPiA+ID4gPiBzeW1ib2xzIGVuYWJsZWQgYWxyZWFkeSwgYW5k IEkgaGF2ZW4ndCBzZWVuIGFueSBpc3N1ZXMgcmVwb3J0ZWQgd2l0aCB0aGVtLgo+ID4gPgo+ID4g PiBBZnRlciB0aGlua2luZyBhIGJpdCBhYm91dCBpdCwgSSdkIHN1cHBvcnQgdGhlIGV4dHJhY3Rp b24gb2YgZmFuCj4gPiA+IGRlZmluaXRpb25zIGludG8gc2VwYXJhdGUgRFQgb3ZlcmxheXMuICBB cyBJIHdyb3RlIGFib3ZlIGFscmVhZHksCj4gPiA+IG5vdCBtYW5hZ2luZyB0aGUgbm9uLWV4aXN0 ZW50IGZhbiBtaWdodCBhY3R1YWxseSBoZWxwIGEgYml0IHdpdGgKPiA+ID4gcGFzc2l2ZWx5IGNv b2xlZCBib2FyZCBzZXR1cHMsIHdoaWNoIGlzIGEgZ29vZCBlbm91Z2ggcmVhc29uIGZvcgo+ID4g PiBtZSB0byBzdXBwb3J0IHNlcGFyYXRlIERUIG92ZXJsYXlzLgo+ID4gCj4gPiBQcmFjdGljYWwg YmVuZWZpdHMgc291bmQgZmFyIGZldGNoZWQgaGVyZSwgd2hpbGUgZm9yY2luZyB1c2VycyB0bwo+ ID4gbWFudWFsbHkgY29uZmlndXJlIHNvbWV0aGluZyB0aGF0IHdvdWxkIGhhdmUgb3RoZXJ3aXNl IGp1c3Qgd29ya2VkLgo+ID4gTGV0J3Mgc2VlIHdoYXQgSGVpa28gdGhpbmtzLgoKUGVyc29uYWxs eSwgSSdtIG1vcmUgb24gdGhlIGxlc3MgY29tcGxpY2F0aW9uIHNpZGUuCgpJLmUuIGlmIHRoZXJl IGlzIGFuIGFjdHVhbCBmYW4tY29ubmVjdG9yIG9uIHRoZSBib2FyZCB3ZSBzaG91bGQgZGVzY3Jp YmUKaXQgYXMgc3VjaC4KCk92ZXJsYXlzIEkgc2VlIGZvciB0aGluZ3Mgd2hlcmUgeW91IGF0dGFj aCBoYXRzIHRvIGdlbmVyaWMgcGluIGhlYWRlcnMKdG8gY3JlYXRlIHNwZWNpZmljIGZ1bmN0aW9u YWxpdHkgb24gdG9wIG9mIGEgZ2VuZXJpYyBpbnRlcmZhY2UuCgpCdXQgaWYgdGhlIGJvYXJkIGl0 c2VsZiBoYXMgYW4gYWN0dWFsIGZhbiBoZWFkZXIsIGl0IHNob3VsZCBiZSBkZXNjcmliZWQKYXMg c3VjaC4gQmVjYXVzZSB0aGF0IHRoZW4gX2lzXyB0aGUgc3RhbmRhcmQgdXNlIG9mIHRoYXQuCgoK SGVpa28KCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K TGludXgtcm9ja2NoaXAgbWFpbGluZyBsaXN0CkxpbnV4LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVh ZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1y b2NrY2hpcAo=