From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from gloria.sntech.de (gloria.sntech.de [185.11.138.130]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5C69245FFB4; Mon, 21 Sep 2026 21:51:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.11.138.130 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790027515; cv=none; b=cPY9UGfgB+imLqKpFUjr3Fjdj9SY7zDrt4ZXoyQgLHw2TzrAg2bwraz5NuT4AGvwpArvdYAqbBBJOBDi0ruuAnf+x+ovhafAXVeGZjAv4zDm1ynuV7Ts+vNvTTn6b9S0yRD1XX/EmIEKoLU5PN00r0EvjL8eybY9Ggxgia7I0Ck= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790027515; c=relaxed/simple; bh=c95iOoxnskPFfNVJeXatbMnPBZZbvYWjgen2yl/uNUs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=mscfzm1HGmYAisG5B79cXIaoSRA2cs5qS21jJq3rxETsPtgAOCMt3BzNsHgzfa6VIx5CYFIgbstlEHdvRG+OLBuOqP0sSzlSIJbIuW67+xyl+W19IMRmURwZCcgXLL6DtmlT8WCiXqmmk/E2DQ7r/ilnmgDWp+OtwXkH7K5wbF8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=sntech.de; spf=pass smtp.mailfrom=sntech.de; dkim=pass (2048-bit key) header.d=sntech.de header.i=@sntech.de header.b=YTN6YR/z; arc=none smtp.client-ip=185.11.138.130 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=sntech.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sntech.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sntech.de header.i=@sntech.de header.b="YTN6YR/z" 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=j4liZ14THFBbmN0BGtw1acIhCbedsr31KR7f3ynsmuI=; b=YTN6YR/z0jFiPpwVnyatzy/Yga b/ntgapdGubCzkXTkPBHOGR601vbC8lI95G16qLYg3n28RJjTlVIJKfHrZvwI4sHKm4FK/Q+1ukPZ Pi8CK0QzmBjm/fjsyLZo/zwgb8Wk24in9xxFJ8p6FtC5nmb99FmBecxo4nbJMQsFBI4jjXvHsVG8k UY3JXdVfgvZGfAAoTVJzuO/DRYOpjHDFCel/Ea1luhz1+Ii1H2qy5gB7hhwOymTILDedQSGLM8hRE lyJAbMfSYJlcMrhbibSOTdliNr0tlhfbCPbFc5gqMGCFAmTjZg4wEAu9yQdeucwA9d9M0a2SaH71v jEa23Bog==; From: Heiko Stuebner To: tomeu@tomeuvizoso.net, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, ulfh@kernel.org, p.zabel@pengutronix.de, ogabbay@kernel.org, zhangqing@rock-chips.com, Jiaxing Hu Cc: royalnet026@gmail.com, abel.vesa@oss.qualcomm.com, sebastian.reichel@collabora.com, sidong.yang@furiosa.ai, u.kleine-koenig@baylibre.com, chaoyi.chen@rock-chips.com, diederik@cknow-tech.com, alchark@flipper.net, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, iommu@lists.linux.dev, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jiaxing Hu Subject: Re: [PATCH v13 13/14] arm64: dts: rockchip: add NPU (RKNN) nodes to rk3576 Date: Mon, 21 Sep 2026 23:51:33 +0200 Message-ID: <119338490.nniJfEyVGO@phil> In-Reply-To: <20260915104328.45901-14-gahing@gahingwoo.com> References: <20260915104328.45901-1-gahing@gahingwoo.com> <20260915104328.45901-14-gahing@gahingwoo.com> Precedence: bulk X-Mailing-List: iommu@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Hi, Am Dienstag, 15. September 2026, 12:43:27 Mitteleurop=C3=A4ische Sommerzeit= schrieb Jiaxing Hu: > Add the two RKNN cores and their IOMMUs. Both cores are disabled by > default; boards enable what they wire up. >=20 > PD_NPU0 and PD_NPU1 are siblings under PD_NPUTOP and hold one core each, > but the convolution buffer and the DSU sit above them: ACLK_RKNN_CBUF, > HCLK_RKNN_CBUF and CLK_RKNN_DSU0 belong to the block rather than to either > core, and PD_NPUTOP already lists all three. Add them to both core domains > as well, so a core domain switching state has the clocks of the path it > shares running, and give each core domain the BIU reset that the pmdomain > driver now cycles once power is on. >=20 > Each core lists both core domains, its own first, so that a core in use h= as > the whole block powered. Whether a single core can reach the shared path > with the sibling domain off is not something this series establishes; > listing both is the description that has been tested here. The IOMMU in > front of each core lists that core's domain only. >=20 > Label the outer PD_NPU node so a board can attach the NPU rail to the > domain that gates the block. >=20 > Clock the NPU inside the voltage its rail is given. CLK_RKNN_DSU0 clocks > both cores and the CBUF they share, nothing in mainline sets its rate, and > the block comes up at 786.432 MHz. Rockchip's OPP table for this NPU asks > 800 mV of its 800 MHz step at the worst leakage bins, and nothing in > mainline sets the rail either, so a board that follows this DTS runs the > NPU above the step whose voltage it happens to boot with. >=20 > On a ROCK 4D with both cores enabled and vdd_npu_s0 at the 750 mV its PMIC > comes up with, two jobs in flight at once make the second core write sing= le > words of its output wrong: the right value with a bit of the accumulator > set, always the same position in the array. Either core alone is exact. > Four device trees, same board, kernel and userspace, four passes of 5400 > rows each, every row compared with the same multiply done one row at a > time: >=20 > 786 MHz, 750 mV 13 to 20 wrong rows a pass > 594 MHz, 750 mV 0, 0, 0, 0 > 786 MHz, 800 mV 0, 0, 0, 0 > 786 MHz, 850 mV 0, 0, 0, 0 >=20 > 594 MHz is a divider off GPLL and sits between that table's 500 and 600 M= Hz > steps, both of which ask 725 mV at every leakage bin, so it is inside the > voltage a board that describes no NPU rail already provides. >=20 > The trade it buys is a core against a clock, and both halves are measured. > The rate lives in the device tree, so the two clocks cannot share a boot, > which means this comparison is across boots and has to clear the noise of > one. Twenty readings of a single arm inside one boot, nothing changed > between them, span 2.5%; across boots it can only be worse. So the 4.0 to > 4.2% below clears that floor by under a factor of two, and the 26 to 37% > clears it by ten. Five runs an arm, the arms alternating inside a boot, > one warm-up a model discarded, medians of five: >=20 > decode tok/s 594 MHz 786 MHz > Llama-3.2-1B 17.85 18.60 two cores > 11.17 13.77 one core > SmolLM2-135M 41.46 43.12 two cores > 38.26 41.90 one core >=20 > Losing 192 MHz costs 4.0 to 4.2% of decode with both cores running. Losing > a core costs 26 to 37% on the 1B model, at either clock. The rate is the > cheaper of the two by six to nine times. >=20 > The two arms cross-check each other: the clock is worth 23% on ONE core > against 4% on two. With both cores running the bottleneck is no longer the > clock, which is why this configuration can afford to give up 192 MHz. >=20 > A core is worth much less on a small model, 2.8 to 7.7% on 135M, where the > second core's dispatch overhead is not repaid. TTFT moves by under 2% > either way, so none of this says anything about prefill. >=20 > An OPP table with the rail attached is the proper answer, and it wants > driver support this series does not have. please trim that commit message A LOT :-) . You're just adding the nodes for the NPU cores, that does not need a novel-sized commit message. Additionally, please split this into two commits: =2D Adding the resets to the power-domains =2D Adding the nodes for the NPU cores (add pd_npu phandle here too) Thanks a lot 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 910EAC982FC for ; Mon, 21 Sep 2026 21:52:01 +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=VBfASfC+9+MaC2DlUUc05gSN3Nv5wJckIxiWEMqqsF4=; b=N+yXL+pwJs8FFP N7hRDtOC7LlcpiXvgFSDddADGjloUQZX0EHfTi4h94GUb0OF1sP0nPlY8jo55aZqIc1NYfLzqqY9Q Xq00s5ohFMmGsCDvUfADyLOhd9DTNFkyjPJtFkOAz7wACTf8R5MZUEsJ3e4O850V7mm4rMY6nGurm aCIosneN7sK3FZmbNGU0P4sSQPTxfCYJGkjc+meiVuJ1xP1pG/pQ0b5qIc1lqsQ/t8MzDc1OAjtyh eYYiTc8tieIF4IdHCaoZbkpHhUWm0u8OIN0OAwIXt2nU399BHGQFiJre7bbX2GhK8y7fwAG+1IE6Z 6TpzEBCleuVt4D7qqaNg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x8lvZ-00000003VPV-1iML; Mon, 21 Sep 2026 21:51:57 +0000 Received: from casper.infradead.org ([2001:8b0:10b:1236::1]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x8lvX-00000003VPG-3DOU; Mon, 21 Sep 2026 21:51:55 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Type:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender :Reply-To:Content-ID:Content-Description; bh=j4liZ14THFBbmN0BGtw1acIhCbedsr31KR7f3ynsmuI=; b=C/VoKAnYoViJsLPq6M2KfEq/2l yj3Pxhx4N4KTa+gD9o+wnO6sW7Y8smzmG3yJuwnsGIl9NkZLhf0KM1U5Nc1rxBEwvlpqpcA8u6iA1 4mVUNb2aVlUhmcqZDt1jCZBvQkmWhR/4SWduTuhkrWUqY5huztGkCU/X+69KkAlsDC24NKT1y6gbC eV9x5XXP4z+GNNlIJPJXJhNHiWKA0AwGemidSjcZ11RTnPg7/w5caDqVnxULkB0uM+ZWcMSA5/nuF 2KM4vLsO9gHCHTNI5rShUQfpSgOF/E/u7WJKerxRgQo+4ZSpHasM9Mo+UQ8RW8Fof5V44WQ6rf+22 RvEJK6/w==; Received: from gloria.sntech.de ([185.11.138.130]) by casper.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x8lvU-00000005flc-3NGk; Mon, 21 Sep 2026 21:51:54 +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=j4liZ14THFBbmN0BGtw1acIhCbedsr31KR7f3ynsmuI=; b=YTN6YR/z0jFiPpwVnyatzy/Yga b/ntgapdGubCzkXTkPBHOGR601vbC8lI95G16qLYg3n28RJjTlVIJKfHrZvwI4sHKm4FK/Q+1ukPZ Pi8CK0QzmBjm/fjsyLZo/zwgb8Wk24in9xxFJ8p6FtC5nmb99FmBecxo4nbJMQsFBI4jjXvHsVG8k UY3JXdVfgvZGfAAoTVJzuO/DRYOpjHDFCel/Ea1luhz1+Ii1H2qy5gB7hhwOymTILDedQSGLM8hRE lyJAbMfSYJlcMrhbibSOTdliNr0tlhfbCPbFc5gqMGCFAmTjZg4wEAu9yQdeucwA9d9M0a2SaH71v jEa23Bog==; From: Heiko Stuebner To: tomeu@tomeuvizoso.net, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, ulfh@kernel.org, p.zabel@pengutronix.de, ogabbay@kernel.org, zhangqing@rock-chips.com, Jiaxing Hu Cc: royalnet026@gmail.com, abel.vesa@oss.qualcomm.com, sebastian.reichel@collabora.com, sidong.yang@furiosa.ai, u.kleine-koenig@baylibre.com, chaoyi.chen@rock-chips.com, diederik@cknow-tech.com, alchark@flipper.net, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, iommu@lists.linux.dev, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jiaxing Hu Subject: Re: [PATCH v13 13/14] arm64: dts: rockchip: add NPU (RKNN) nodes to rk3576 Date: Mon, 21 Sep 2026 23:51:33 +0200 Message-ID: <119338490.nniJfEyVGO@phil> In-Reply-To: <20260915104328.45901-14-gahing@gahingwoo.com> References: <20260915104328.45901-1-gahing@gahingwoo.com> <20260915104328.45901-14-gahing@gahingwoo.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260921_225152_911034_D5BF802C X-CRM114-Status: GOOD ( 21.59 ) 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 SGksCgpBbSBEaWVuc3RhZywgMTUuIFNlcHRlbWJlciAyMDI2LCAxMjo0MzoyNyBNaXR0ZWxldXJv cMOkaXNjaGUgU29tbWVyemVpdCBzY2hyaWViIEppYXhpbmcgSHU6Cj4gQWRkIHRoZSB0d28gUktO TiBjb3JlcyBhbmQgdGhlaXIgSU9NTVVzLiBCb3RoIGNvcmVzIGFyZSBkaXNhYmxlZCBieQo+IGRl ZmF1bHQ7IGJvYXJkcyBlbmFibGUgd2hhdCB0aGV5IHdpcmUgdXAuCj4gCj4gUERfTlBVMCBhbmQg UERfTlBVMSBhcmUgc2libGluZ3MgdW5kZXIgUERfTlBVVE9QIGFuZCBob2xkIG9uZSBjb3JlIGVh Y2gsCj4gYnV0IHRoZSBjb252b2x1dGlvbiBidWZmZXIgYW5kIHRoZSBEU1Ugc2l0IGFib3ZlIHRo ZW06IEFDTEtfUktOTl9DQlVGLAo+IEhDTEtfUktOTl9DQlVGIGFuZCBDTEtfUktOTl9EU1UwIGJl bG9uZyB0byB0aGUgYmxvY2sgcmF0aGVyIHRoYW4gdG8gZWl0aGVyCj4gY29yZSwgYW5kIFBEX05Q VVRPUCBhbHJlYWR5IGxpc3RzIGFsbCB0aHJlZS4gQWRkIHRoZW0gdG8gYm90aCBjb3JlIGRvbWFp bnMKPiBhcyB3ZWxsLCBzbyBhIGNvcmUgZG9tYWluIHN3aXRjaGluZyBzdGF0ZSBoYXMgdGhlIGNs b2NrcyBvZiB0aGUgcGF0aCBpdAo+IHNoYXJlcyBydW5uaW5nLCBhbmQgZ2l2ZSBlYWNoIGNvcmUg ZG9tYWluIHRoZSBCSVUgcmVzZXQgdGhhdCB0aGUgcG1kb21haW4KPiBkcml2ZXIgbm93IGN5Y2xl cyBvbmNlIHBvd2VyIGlzIG9uLgo+IAo+IEVhY2ggY29yZSBsaXN0cyBib3RoIGNvcmUgZG9tYWlu cywgaXRzIG93biBmaXJzdCwgc28gdGhhdCBhIGNvcmUgaW4gdXNlIGhhcwo+IHRoZSB3aG9sZSBi bG9jayBwb3dlcmVkLiBXaGV0aGVyIGEgc2luZ2xlIGNvcmUgY2FuIHJlYWNoIHRoZSBzaGFyZWQg cGF0aAo+IHdpdGggdGhlIHNpYmxpbmcgZG9tYWluIG9mZiBpcyBub3Qgc29tZXRoaW5nIHRoaXMg c2VyaWVzIGVzdGFibGlzaGVzOwo+IGxpc3RpbmcgYm90aCBpcyB0aGUgZGVzY3JpcHRpb24gdGhh dCBoYXMgYmVlbiB0ZXN0ZWQgaGVyZS4gVGhlIElPTU1VIGluCj4gZnJvbnQgb2YgZWFjaCBjb3Jl IGxpc3RzIHRoYXQgY29yZSdzIGRvbWFpbiBvbmx5Lgo+IAo+IExhYmVsIHRoZSBvdXRlciBQRF9O UFUgbm9kZSBzbyBhIGJvYXJkIGNhbiBhdHRhY2ggdGhlIE5QVSByYWlsIHRvIHRoZQo+IGRvbWFp biB0aGF0IGdhdGVzIHRoZSBibG9jay4KPiAKPiBDbG9jayB0aGUgTlBVIGluc2lkZSB0aGUgdm9s dGFnZSBpdHMgcmFpbCBpcyBnaXZlbi4gQ0xLX1JLTk5fRFNVMCBjbG9ja3MKPiBib3RoIGNvcmVz IGFuZCB0aGUgQ0JVRiB0aGV5IHNoYXJlLCBub3RoaW5nIGluIG1haW5saW5lIHNldHMgaXRzIHJh dGUsIGFuZAo+IHRoZSBibG9jayBjb21lcyB1cCBhdCA3ODYuNDMyIE1Iei4gUm9ja2NoaXAncyBP UFAgdGFibGUgZm9yIHRoaXMgTlBVIGFza3MKPiA4MDAgbVYgb2YgaXRzIDgwMCBNSHogc3RlcCBh dCB0aGUgd29yc3QgbGVha2FnZSBiaW5zLCBhbmQgbm90aGluZyBpbgo+IG1haW5saW5lIHNldHMg dGhlIHJhaWwgZWl0aGVyLCBzbyBhIGJvYXJkIHRoYXQgZm9sbG93cyB0aGlzIERUUyBydW5zIHRo ZQo+IE5QVSBhYm92ZSB0aGUgc3RlcCB3aG9zZSB2b2x0YWdlIGl0IGhhcHBlbnMgdG8gYm9vdCB3 aXRoLgo+IAo+IE9uIGEgUk9DSyA0RCB3aXRoIGJvdGggY29yZXMgZW5hYmxlZCBhbmQgdmRkX25w dV9zMCBhdCB0aGUgNzUwIG1WIGl0cyBQTUlDCj4gY29tZXMgdXAgd2l0aCwgdHdvIGpvYnMgaW4g ZmxpZ2h0IGF0IG9uY2UgbWFrZSB0aGUgc2Vjb25kIGNvcmUgd3JpdGUgc2luZ2xlCj4gd29yZHMg b2YgaXRzIG91dHB1dCB3cm9uZzogdGhlIHJpZ2h0IHZhbHVlIHdpdGggYSBiaXQgb2YgdGhlIGFj Y3VtdWxhdG9yCj4gc2V0LCBhbHdheXMgdGhlIHNhbWUgcG9zaXRpb24gaW4gdGhlIGFycmF5LiBF aXRoZXIgY29yZSBhbG9uZSBpcyBleGFjdC4KPiBGb3VyIGRldmljZSB0cmVlcywgc2FtZSBib2Fy ZCwga2VybmVsIGFuZCB1c2Vyc3BhY2UsIGZvdXIgcGFzc2VzIG9mIDU0MDAKPiByb3dzIGVhY2gs IGV2ZXJ5IHJvdyBjb21wYXJlZCB3aXRoIHRoZSBzYW1lIG11bHRpcGx5IGRvbmUgb25lIHJvdyBh dCBhCj4gdGltZToKPiAKPiAgIDc4NiBNSHosIDc1MCBtViAgICAxMyB0byAyMCB3cm9uZyByb3dz IGEgcGFzcwo+ICAgNTk0IE1IeiwgNzUwIG1WICAgIDAsIDAsIDAsIDAKPiAgIDc4NiBNSHosIDgw MCBtViAgICAwLCAwLCAwLCAwCj4gICA3ODYgTUh6LCA4NTAgbVYgICAgMCwgMCwgMCwgMAo+IAo+ IDU5NCBNSHogaXMgYSBkaXZpZGVyIG9mZiBHUExMIGFuZCBzaXRzIGJldHdlZW4gdGhhdCB0YWJs ZSdzIDUwMCBhbmQgNjAwIE1Iego+IHN0ZXBzLCBib3RoIG9mIHdoaWNoIGFzayA3MjUgbVYgYXQg ZXZlcnkgbGVha2FnZSBiaW4sIHNvIGl0IGlzIGluc2lkZSB0aGUKPiB2b2x0YWdlIGEgYm9hcmQg dGhhdCBkZXNjcmliZXMgbm8gTlBVIHJhaWwgYWxyZWFkeSBwcm92aWRlcy4KPiAKPiBUaGUgdHJh ZGUgaXQgYnV5cyBpcyBhIGNvcmUgYWdhaW5zdCBhIGNsb2NrLCBhbmQgYm90aCBoYWx2ZXMgYXJl IG1lYXN1cmVkLgo+IFRoZSByYXRlIGxpdmVzIGluIHRoZSBkZXZpY2UgdHJlZSwgc28gdGhlIHR3 byBjbG9ja3MgY2Fubm90IHNoYXJlIGEgYm9vdCwKPiB3aGljaCBtZWFucyB0aGlzIGNvbXBhcmlz b24gaXMgYWNyb3NzIGJvb3RzIGFuZCBoYXMgdG8gY2xlYXIgdGhlIG5vaXNlIG9mCj4gb25lLiBU d2VudHkgcmVhZGluZ3Mgb2YgYSBzaW5nbGUgYXJtIGluc2lkZSBvbmUgYm9vdCwgbm90aGluZyBj aGFuZ2VkCj4gYmV0d2VlbiB0aGVtLCBzcGFuIDIuNSU7IGFjcm9zcyBib290cyBpdCBjYW4gb25s eSBiZSB3b3JzZS4gU28gdGhlIDQuMCB0bwo+IDQuMiUgYmVsb3cgY2xlYXJzIHRoYXQgZmxvb3Ig YnkgdW5kZXIgYSBmYWN0b3Igb2YgdHdvLCBhbmQgdGhlIDI2IHRvIDM3JQo+IGNsZWFycyBpdCBi eSB0ZW4uIEZpdmUgcnVucyBhbiBhcm0sIHRoZSBhcm1zIGFsdGVybmF0aW5nIGluc2lkZSBhIGJv b3QsCj4gb25lIHdhcm0tdXAgYSBtb2RlbCBkaXNjYXJkZWQsIG1lZGlhbnMgb2YgZml2ZToKPiAK PiAgIGRlY29kZSB0b2svcyAgICAgIDU5NCBNSHogICA3ODYgTUh6Cj4gICBMbGFtYS0zLjItMUIg ICAgICAgIDE3Ljg1ICAgICAxOC42MCAgIHR3byBjb3Jlcwo+ICAgICAgICAgICAgICAgICAgICAg ICAxMS4xNyAgICAgMTMuNzcgICBvbmUgY29yZQo+ICAgU21vbExNMi0xMzVNICAgICAgICA0MS40 NiAgICAgNDMuMTIgICB0d28gY29yZXMKPiAgICAgICAgICAgICAgICAgICAgICAgMzguMjYgICAg IDQxLjkwICAgb25lIGNvcmUKPiAKPiBMb3NpbmcgMTkyIE1IeiBjb3N0cyA0LjAgdG8gNC4yJSBv ZiBkZWNvZGUgd2l0aCBib3RoIGNvcmVzIHJ1bm5pbmcuIExvc2luZwo+IGEgY29yZSBjb3N0cyAy NiB0byAzNyUgb24gdGhlIDFCIG1vZGVsLCBhdCBlaXRoZXIgY2xvY2suIFRoZSByYXRlIGlzIHRo ZQo+IGNoZWFwZXIgb2YgdGhlIHR3byBieSBzaXggdG8gbmluZSB0aW1lcy4KPiAKPiBUaGUgdHdv IGFybXMgY3Jvc3MtY2hlY2sgZWFjaCBvdGhlcjogdGhlIGNsb2NrIGlzIHdvcnRoIDIzJSBvbiBP TkUgY29yZQo+IGFnYWluc3QgNCUgb24gdHdvLiBXaXRoIGJvdGggY29yZXMgcnVubmluZyB0aGUg Ym90dGxlbmVjayBpcyBubyBsb25nZXIgdGhlCj4gY2xvY2ssIHdoaWNoIGlzIHdoeSB0aGlzIGNv bmZpZ3VyYXRpb24gY2FuIGFmZm9yZCB0byBnaXZlIHVwIDE5MiBNSHouCj4gCj4gQSBjb3JlIGlz IHdvcnRoIG11Y2ggbGVzcyBvbiBhIHNtYWxsIG1vZGVsLCAyLjggdG8gNy43JSBvbiAxMzVNLCB3 aGVyZSB0aGUKPiBzZWNvbmQgY29yZSdzIGRpc3BhdGNoIG92ZXJoZWFkIGlzIG5vdCByZXBhaWQu IFRURlQgbW92ZXMgYnkgdW5kZXIgMiUKPiBlaXRoZXIgd2F5LCBzbyBub25lIG9mIHRoaXMgc2F5 cyBhbnl0aGluZyBhYm91dCBwcmVmaWxsLgo+IAo+IEFuIE9QUCB0YWJsZSB3aXRoIHRoZSByYWls IGF0dGFjaGVkIGlzIHRoZSBwcm9wZXIgYW5zd2VyLCBhbmQgaXQgd2FudHMKPiBkcml2ZXIgc3Vw cG9ydCB0aGlzIHNlcmllcyBkb2VzIG5vdCBoYXZlLgoKcGxlYXNlIHRyaW0gdGhhdCBjb21taXQg bWVzc2FnZSBBIExPVCA6LSkgLgoKWW91J3JlIGp1c3QgYWRkaW5nIHRoZSBub2RlcyBmb3IgdGhl IE5QVSBjb3JlcywgdGhhdCBkb2VzCm5vdCBuZWVkIGEgbm92ZWwtc2l6ZWQgY29tbWl0IG1lc3Nh Z2UuCgoKQWRkaXRpb25hbGx5LCBwbGVhc2Ugc3BsaXQgdGhpcyBpbnRvIHR3byBjb21taXRzOgot IEFkZGluZyB0aGUgcmVzZXRzIHRvIHRoZSBwb3dlci1kb21haW5zCi0gQWRkaW5nIHRoZSBub2Rl cyBmb3IgdGhlIE5QVSBjb3JlcyAoYWRkIHBkX25wdSBwaGFuZGxlIGhlcmUgdG9vKQoKClRoYW5r cyBhIGxvdApIZWlrbwoKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KTGludXgtcm9ja2NoaXAgbWFpbGluZyBsaXN0CkxpbnV4LXJvY2tjaGlwQGxpc3Rz LmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1yb2NrY2hpcAo=