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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 191BDC624D3 for ; Fri, 4 Sep 2026 13:55:30 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 57FE210E1D9; Fri, 4 Sep 2026 13:55:29 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="JM3LE0kH"; dkim-atps=neutral Received: from tor.source.kernel.org (tor.source.kernel.org [172.105.4.254]) by gabe.freedesktop.org (Postfix) with ESMTPS id 85B1110E1D9 for ; Fri, 4 Sep 2026 13:55:28 +0000 (UTC) Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id C128B601F0; Fri, 4 Sep 2026 13:55:27 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 052AD1F00A3D; Fri, 4 Sep 2026 13:55:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788530127; bh=+cG2WXfZtpJyh0eIqtNB3SnV0tjiddM7ZIcc0YJ1E8A=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=JM3LE0kHUNf6ym2x5h0/bwm3iZHEqIGx04VfJKAkpbceYLHC8md7aQEfevI0B9eHj ctMobEP6iYE9GnjIpbzwii7R90qIRMuf494znuN/DyrPSA/hDoTd8kAYzA8nZFBZXP aJrYE4P6TruEocagjMBxW4y/6TNIXifq4zvnvLVF3FNa7crpE4X0vlMhq62WR5LvCd QuUsJ1/EcoZ7AzGSodAWyBwl+EfZbQARR3gQrfNmYBSx+vzYhBXqf58wzyaopcK6we 1LqVjhefNdf2FQ6PAnxEFzrX2nj3ReGNIsRy1okYSIwUypo9evkIoKP0ceXotSncaZ oPM9eBRVDTjiQ== From: sashiko-bot@kernel.org Subject: Re: [PATCH v3 15/19] phy: Add common Innosilicon HDMI PHY helpers To: "Michal Wilczynski" Cc: olteanv@gmail.com, conor+dt@kernel.org, dri-devel@lists.freedesktop.org, lee@kernel.org, neil.armstrong@linaro.org, linux-clk@vger.kernel.org, robh@kernel.org, mfd@lists.linux.dev, linux-phy@lists.infradead.org, devicetree@vger.kernel.org, vkoul@kernel.org In-Reply-To: <20260904-jh7110-clean-send-v3-15-484f9ae72715@samsung.com> References: <20260904-jh7110-clean-send-v3-0-484f9ae72715@samsung.com> <20260904-jh7110-clean-send-v3-15-484f9ae72715@samsung.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Fri, 04 Sep 2026 13:55:26 +0000 Message-Id: <20260904135527.052AD1F00A3D@smtp.kernel.org> X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Thank you for your contribution! Sashiko AI review found 2 potential issue(= s) to consider: Pre-existing issues: - [High] Kernel panic from division by zero in clock rate recalculation if = regmap_read fails or registers are uninitialized. - [High] Severe 32-bit integer overflows in VCO clock calculations on 32-bi= t architectures, leading to heavily truncated clock rates. -- commit 3a039ecf7fc3d9336647b49a4ed8daf640a4fd42 Author: Michal Wilczynski phy: Add common Innosilicon HDMI PHY helpers This commit extracts shared Innosilicon HDMI PHY logic into a common library. It provides pre-PLL configuration, lookup, and clock rate recalculation helpers for SoC drivers that instantiate this IP. > diff --git a/drivers/phy/phy-inno-hdmi.c b/drivers/phy/phy-inno-hdmi.c > new file mode 100644 > index 0000000000000..77e745a87d22b > --- /dev/null > +++ b/drivers/phy/phy-inno-hdmi.c [ ... ] > +static u8 inno_read(const struct inno_hdmi_phy_pre_pll *pll, unsigned in= t reg) > +{ > + unsigned int val; > + int ret; > + > + ret =3D regmap_read(pll->regmap, inno_reg(pll, reg), &val); > + if (ret) > + return 0; [Severity: High] This isn't a bug introduced by this patch, but does explicitly returning 0 on a regmap read failure set up a deterministic kernel panic downstream? If the registers are uninitialized or the read fails, the returned 0 will propagate to the division operations in inno_hdmi_phy_pre_pll_recalc_rate(). [ ... ] > +unsigned long > +inno_hdmi_phy_pre_pll_recalc_rate(const struct inno_hdmi_phy_pre_pll *pl= l, > + unsigned long parent_rate) > +{ > + u8 nd, no_a, no_b, no_d; > + unsigned long frac, rate; > + u64 vco, vco_rate; > + u16 nf; > + > + nd =3D inno_read(pll, INNO_PRE_PLL_DIV_1) & INNO_PRE_PLL_PRE_DIV_MASK; > + nf =3D (inno_read(pll, INNO_PRE_PLL_DIV_2) & > + INNO_PRE_PLL_FB_DIV_11_8_MASK) << 8; > + nf |=3D inno_read(pll, INNO_PRE_PLL_DIV_3); > + vco =3D parent_rate * nf; [Severity: High] This is a pre-existing issue, but on 32-bit architectures where parent_rate is a 32-bit unsigned long, does this multiplication silently overflow before being assigned to the 64-bit vco variable? The nf variable can be up to 4095, which would severely truncate the result if it exceeds the 32-bit limit. Should parent_rate be cast to u64 here? > + > + if (!(inno_read(pll, INNO_PRE_PLL_DIV_2) & > + INNO_PRE_PLL_FRAC_DIV_DISABLE)) { > + frac =3D inno_read(pll, INNO_PRE_PLL_FRAC_DIV_7_0) | > + (inno_read(pll, INNO_PRE_PLL_FRAC_DIV_15_8) << 8) | > + (inno_read(pll, INNO_PRE_PLL_FRAC_DIV_23_16) << 16); > + vco +=3D DIV_ROUND_CLOSEST(parent_rate * frac, > + BIT(INNO_FRAC_DIV_WIDTH)); [Severity: High] This isn't a bug introduced by this patch, but does the parent_rate * frac multiplication silently overflow 32-bit limits as well? If this calculation is upgraded to 64-bit to avoid the overflow, would it also require switching DIV_ROUND_CLOSEST to DIV_ROUND_CLOSEST_ULL to prevent __udivdi3 link errors on 32-bit systems? > + } > + > + vco_rate =3D vco; > + > + if (inno_read(pll, INNO_PRE_PLL_CONTROL) & INNO_PCLK_VCO_DIV_5_MASK) { > + do_div(vco, nd * 5); [Severity: High] This is a pre-existing issue, but if nd evaluates to 0 from a failed read, will this do_div() trigger a divide by zero exception during probe? > + } else { > + no_a =3D inno_read(pll, INNO_PCLK_DIV_AB) & INNO_PCLK_DIV_A_MASK; > + no_b =3D FIELD_GET(INNO_PCLK_DIV_B_MASK, > + inno_read(pll, INNO_PCLK_DIV_AB)) + 2; > + no_d =3D inno_read(pll, INNO_PCLK_DIV_CD) & INNO_PCLK_DIV_D_MASK; > + > + do_div(vco, nd * (no_a =3D=3D 1 ? no_b : no_a) * no_d * 2); [Severity: High] This is also a pre-existing issue, but similar to the above, if nd, no_a, or no_d evaluate to 0 due to read failures, does this also cause a kernel panic? --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260904-jh7110-cle= an-send-v3-0-484f9ae72715@samsung.com?part=3D15 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 63A17C61DD6 for ; Fri, 4 Sep 2026 13:55:30 +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:MIME-Version:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Message-Id:Date: References:In-Reply-To:Cc:To:Subject:From:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=WTLz2HMTkCRzohoMH3Y4vF0KSeRXI4k7+W8ASIt5vhc=; b=RU8oaTHnf4Y9DF k4zRARJmDnYwTWqu9rLcUXGWO4PADYQrT/Q8CD40QpunPyswOukAfkqwlU91jhu3xQSr3fDYUnUuS f0mAIfb50+rUR2J3LlB5blZTpIlNFOY+eSXypv9lFoNKnsdVdXQDTPPk8cw3MfwUMGnDiqxYQecXP oQJrXdRkVPrcMAJ/IiM3wmnCXqIzP/QH5tA4jjYT6m13jeKMufLCH4EJHGauHk6qL9D/a3FyI7NCX DKm38/wAYAcbIaO/rYLXeMd2H+j4WQLVr801NjAURET2Yf9qQqntTGfoV/BVPevZWECS20WSRp2RM W/Y3YS0OFXgbtCGBn5GQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x2UOA-00000002ITg-0Doi; Fri, 04 Sep 2026 13:55:30 +0000 Received: from tor.source.kernel.org ([2600:3c04:e001:324:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x2UO8-00000002ITS-1L1G for linux-phy@lists.infradead.org; Fri, 04 Sep 2026 13:55:28 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id C128B601F0; Fri, 4 Sep 2026 13:55:27 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 052AD1F00A3D; Fri, 4 Sep 2026 13:55:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788530127; bh=+cG2WXfZtpJyh0eIqtNB3SnV0tjiddM7ZIcc0YJ1E8A=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=JM3LE0kHUNf6ym2x5h0/bwm3iZHEqIGx04VfJKAkpbceYLHC8md7aQEfevI0B9eHj ctMobEP6iYE9GnjIpbzwii7R90qIRMuf494znuN/DyrPSA/hDoTd8kAYzA8nZFBZXP aJrYE4P6TruEocagjMBxW4y/6TNIXifq4zvnvLVF3FNa7crpE4X0vlMhq62WR5LvCd QuUsJ1/EcoZ7AzGSodAWyBwl+EfZbQARR3gQrfNmYBSx+vzYhBXqf58wzyaopcK6we 1LqVjhefNdf2FQ6PAnxEFzrX2nj3ReGNIsRy1okYSIwUypo9evkIoKP0ceXotSncaZ oPM9eBRVDTjiQ== From: sashiko-bot@kernel.org Subject: Re: [PATCH v3 15/19] phy: Add common Innosilicon HDMI PHY helpers To: "Michal Wilczynski" Cc: olteanv@gmail.com, conor+dt@kernel.org, dri-devel@lists.freedesktop.org, lee@kernel.org, neil.armstrong@linaro.org, linux-clk@vger.kernel.org, robh@kernel.org, mfd@lists.linux.dev, linux-phy@lists.infradead.org, devicetree@vger.kernel.org, vkoul@kernel.org In-Reply-To: <20260904-jh7110-clean-send-v3-15-484f9ae72715@samsung.com> References: <20260904-jh7110-clean-send-v3-0-484f9ae72715@samsung.com> <20260904-jh7110-clean-send-v3-15-484f9ae72715@samsung.com> Date: Fri, 04 Sep 2026 13:55:26 +0000 Message-Id: <20260904135527.052AD1F00A3D@smtp.kernel.org> X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg MiBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6CgpQcmUtZXhpc3RpbmcgaXNzdWVzOgot IFtIaWdoXSBLZXJuZWwgcGFuaWMgZnJvbSBkaXZpc2lvbiBieSB6ZXJvIGluIGNsb2NrIHJhdGUg cmVjYWxjdWxhdGlvbiBpZiByZWdtYXBfcmVhZCBmYWlscyBvciByZWdpc3RlcnMgYXJlIHVuaW5p dGlhbGl6ZWQuCi0gW0hpZ2hdIFNldmVyZSAzMi1iaXQgaW50ZWdlciBvdmVyZmxvd3MgaW4gVkNP IGNsb2NrIGNhbGN1bGF0aW9ucyBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcywgbGVhZGluZyB0byBo ZWF2aWx5IHRydW5jYXRlZCBjbG9jayByYXRlcy4KLS0KCmNvbW1pdCAzYTAzOWVjZjdmYzNkOTMz NjY0N2I0OWE0ZWQ4ZGFmNjQwYTRmZDQyCkF1dGhvcjogTWljaGFsIFdpbGN6eW5za2kgPG0ud2ls Y3p5bnNraUBzYW1zdW5nLmNvbT4KCnBoeTogQWRkIGNvbW1vbiBJbm5vc2lsaWNvbiBIRE1JIFBI WSBoZWxwZXJzCgpUaGlzIGNvbW1pdCBleHRyYWN0cyBzaGFyZWQgSW5ub3NpbGljb24gSERNSSBQ SFkgbG9naWMgaW50byBhIGNvbW1vbgpsaWJyYXJ5LiBJdCBwcm92aWRlcyBwcmUtUExMIGNvbmZp Z3VyYXRpb24sIGxvb2t1cCwgYW5kIGNsb2NrIHJhdGUKcmVjYWxjdWxhdGlvbiBoZWxwZXJzIGZv ciBTb0MgZHJpdmVycyB0aGF0IGluc3RhbnRpYXRlIHRoaXMgSVAuCgo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3BoeS9waHktaW5uby1oZG1pLmMgYi9kcml2ZXJzL3BoeS9waHktaW5uby1oZG1pLmMK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMDAuLjc3ZTc0NWE4N2Qy MmIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9waHkvcGh5LWlubm8taGRtaS5jCgpb IC4uLiBdCgo+ICtzdGF0aWMgdTggaW5ub19yZWFkKGNvbnN0IHN0cnVjdCBpbm5vX2hkbWlfcGh5 X3ByZV9wbGwgKnBsbCwgdW5zaWduZWQgaW50IHJlZykKPiArewo+ICsJdW5zaWduZWQgaW50IHZh bDsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gcmVnbWFwX3JlYWQocGxsLT5yZWdtYXAsIGlu bm9fcmVnKHBsbCwgcmVnKSwgJnZhbCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiAwOwoKW1Nl dmVyaXR5OiBIaWdoXQpUaGlzIGlzbid0IGEgYnVnIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwg YnV0IGRvZXMgZXhwbGljaXRseSByZXR1cm5pbmcgMApvbiBhIHJlZ21hcCByZWFkIGZhaWx1cmUg c2V0IHVwIGEgZGV0ZXJtaW5pc3RpYyBrZXJuZWwgcGFuaWMgZG93bnN0cmVhbT8KCklmIHRoZSBy ZWdpc3RlcnMgYXJlIHVuaW5pdGlhbGl6ZWQgb3IgdGhlIHJlYWQgZmFpbHMsIHRoZSByZXR1cm5l ZCAwIHdpbGwKcHJvcGFnYXRlIHRvIHRoZSBkaXZpc2lvbiBvcGVyYXRpb25zIGluIGlubm9faGRt aV9waHlfcHJlX3BsbF9yZWNhbGNfcmF0ZSgpLgoKWyAuLi4gXQoKPiArdW5zaWduZWQgbG9uZwo+ ICtpbm5vX2hkbWlfcGh5X3ByZV9wbGxfcmVjYWxjX3JhdGUoY29uc3Qgc3RydWN0IGlubm9faGRt aV9waHlfcHJlX3BsbCAqcGxsLAo+ICsJCQkJICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQo+ ICt7Cj4gKwl1OCBuZCwgbm9fYSwgbm9fYiwgbm9fZDsKPiArCXVuc2lnbmVkIGxvbmcgZnJhYywg cmF0ZTsKPiArCXU2NCB2Y28sIHZjb19yYXRlOwo+ICsJdTE2IG5mOwo+ICsKPiArCW5kID0gaW5u b19yZWFkKHBsbCwgSU5OT19QUkVfUExMX0RJVl8xKSAmIElOTk9fUFJFX1BMTF9QUkVfRElWX01B U0s7Cj4gKwluZiA9IChpbm5vX3JlYWQocGxsLCBJTk5PX1BSRV9QTExfRElWXzIpICYKPiArCSAg ICAgIElOTk9fUFJFX1BMTF9GQl9ESVZfMTFfOF9NQVNLKSA8PCA4Owo+ICsJbmYgfD0gaW5ub19y ZWFkKHBsbCwgSU5OT19QUkVfUExMX0RJVl8zKTsKPiArCXZjbyA9IHBhcmVudF9yYXRlICogbmY7 CgpbU2V2ZXJpdHk6IEhpZ2hdClRoaXMgaXMgYSBwcmUtZXhpc3RpbmcgaXNzdWUsIGJ1dCBvbiAz Mi1iaXQgYXJjaGl0ZWN0dXJlcyB3aGVyZQpwYXJlbnRfcmF0ZSBpcyBhIDMyLWJpdCB1bnNpZ25l ZCBsb25nLCBkb2VzIHRoaXMgbXVsdGlwbGljYXRpb24gc2lsZW50bHkKb3ZlcmZsb3cgYmVmb3Jl IGJlaW5nIGFzc2lnbmVkIHRvIHRoZSA2NC1iaXQgdmNvIHZhcmlhYmxlPwoKVGhlIG5mIHZhcmlh YmxlIGNhbiBiZSB1cCB0byA0MDk1LCB3aGljaCB3b3VsZCBzZXZlcmVseSB0cnVuY2F0ZSB0aGUK cmVzdWx0IGlmIGl0IGV4Y2VlZHMgdGhlIDMyLWJpdCBsaW1pdC4gU2hvdWxkIHBhcmVudF9yYXRl IGJlIGNhc3QgdG8KdTY0IGhlcmU/Cgo+ICsKPiArCWlmICghKGlubm9fcmVhZChwbGwsIElOTk9f UFJFX1BMTF9ESVZfMikgJgo+ICsJICAgICAgSU5OT19QUkVfUExMX0ZSQUNfRElWX0RJU0FCTEUp KSB7Cj4gKwkJZnJhYyA9IGlubm9fcmVhZChwbGwsIElOTk9fUFJFX1BMTF9GUkFDX0RJVl83XzAp IHwKPiArCQkgICAgICAgKGlubm9fcmVhZChwbGwsIElOTk9fUFJFX1BMTF9GUkFDX0RJVl8xNV84 KSA8PCA4KSB8Cj4gKwkJICAgICAgIChpbm5vX3JlYWQocGxsLCBJTk5PX1BSRV9QTExfRlJBQ19E SVZfMjNfMTYpIDw8IDE2KTsKPiArCQl2Y28gKz0gRElWX1JPVU5EX0NMT1NFU1QocGFyZW50X3Jh dGUgKiBmcmFjLAo+ICsJCQkJCSBCSVQoSU5OT19GUkFDX0RJVl9XSURUSCkpOwoKW1NldmVyaXR5 OiBIaWdoXQpUaGlzIGlzbid0IGEgYnVnIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgYnV0IGRv ZXMgdGhlIHBhcmVudF9yYXRlICogZnJhYwptdWx0aXBsaWNhdGlvbiBzaWxlbnRseSBvdmVyZmxv dyAzMi1iaXQgbGltaXRzIGFzIHdlbGw/CgpJZiB0aGlzIGNhbGN1bGF0aW9uIGlzIHVwZ3JhZGVk IHRvIDY0LWJpdCB0byBhdm9pZCB0aGUgb3ZlcmZsb3csIHdvdWxkIGl0CmFsc28gcmVxdWlyZSBz d2l0Y2hpbmcgRElWX1JPVU5EX0NMT1NFU1QgdG8gRElWX1JPVU5EX0NMT1NFU1RfVUxMIHRvIHBy ZXZlbnQKX191ZGl2ZGkzIGxpbmsgZXJyb3JzIG9uIDMyLWJpdCBzeXN0ZW1zPwoKPiArCX0KPiAr Cj4gKwl2Y29fcmF0ZSA9IHZjbzsKPiArCj4gKwlpZiAoaW5ub19yZWFkKHBsbCwgSU5OT19QUkVf UExMX0NPTlRST0wpICYgSU5OT19QQ0xLX1ZDT19ESVZfNV9NQVNLKSB7Cj4gKwkJZG9fZGl2KHZj bywgbmQgKiA1KTsKCltTZXZlcml0eTogSGlnaF0KVGhpcyBpcyBhIHByZS1leGlzdGluZyBpc3N1 ZSwgYnV0IGlmIG5kIGV2YWx1YXRlcyB0byAwIGZyb20gYSBmYWlsZWQgcmVhZCwKd2lsbCB0aGlz IGRvX2RpdigpIHRyaWdnZXIgYSBkaXZpZGUgYnkgemVybyBleGNlcHRpb24gZHVyaW5nIHByb2Jl PwoKPiArCX0gZWxzZSB7Cj4gKwkJbm9fYSA9IGlubm9fcmVhZChwbGwsIElOTk9fUENMS19ESVZf QUIpICYgSU5OT19QQ0xLX0RJVl9BX01BU0s7Cj4gKwkJbm9fYiA9IEZJRUxEX0dFVChJTk5PX1BD TEtfRElWX0JfTUFTSywKPiArCQkJCSBpbm5vX3JlYWQocGxsLCBJTk5PX1BDTEtfRElWX0FCKSkg KyAyOwo+ICsJCW5vX2QgPSBpbm5vX3JlYWQocGxsLCBJTk5PX1BDTEtfRElWX0NEKSAmIElOTk9f UENMS19ESVZfRF9NQVNLOwo+ICsKPiArCQlkb19kaXYodmNvLCBuZCAqIChub19hID09IDEgPyBu b19iIDogbm9fYSkgKiBub19kICogMik7CgpbU2V2ZXJpdHk6IEhpZ2hdClRoaXMgaXMgYWxzbyBh IHByZS1leGlzdGluZyBpc3N1ZSwgYnV0IHNpbWlsYXIgdG8gdGhlIGFib3ZlLCBpZiBuZCwgbm9f YSwKb3Igbm9fZCBldmFsdWF0ZSB0byAwIGR1ZSB0byByZWFkIGZhaWx1cmVzLCBkb2VzIHRoaXMg YWxzbyBjYXVzZSBhIGtlcm5lbApwYW5pYz8KCi0tIApTYXNoaWtvIEFJIHJldmlldyDCtyBodHRw czovL3Nhc2hpa28uZGV2LyMvcGF0Y2hzZXQvMjAyNjA5MDQtamg3MTEwLWNsZWFuLXNlbmQtdjMt MC00ODRmOWFlNzI3MTVAc2Ftc3VuZy5jb20/cGFydD0xNQoKLS0gCmxpbnV4LXBoeSBtYWlsaW5n IGxpc3QKbGludXgtcGh5QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cHM6Ly9saXN0cy5pbmZyYWRl YWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcGh5Cg==