From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 389271F4176 for ; Tue, 13 Oct 2026 13:02:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791896553; cv=none; b=pDhAcht0S61NbL3XD2mJoA7IK8HYcjXQipi7Nbz1vsfU2xfWqQFSeuccJkfyP7dgKlH4zi+eAubiJldfrxoCAxvzzs+V3kQb9+07VGvQjxbkoOpk6RalZKjbzhR0GP3u7y5AWY2OaVqbLAxIt6KnbOPiS8mAvugVe1Tpgm9aCMo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791896553; c=relaxed/simple; bh=cBlSrIRZnw0gBSNqSTKF/G+rbI+ucL8okpkrxiJmWfM=; h=Message-ID:From:Subject:To:Cc:In-Reply-To:References:Content-Type: Date; b=lD0lHhQjEHHObfJXt+/E9dTjIXE65GDfsGz0K/pG+1war+LHUmD27i/i+eWOLiGmTKwKRZPDXUyVMoPLit4rMBXrSqdsEr6C6PCQ4wD6z+IzOY56kjF3xr0FrEhlM9gIFxRqVBXD2Sc0oIu5mJlT9kmXWDSCetHZwhBf2YN3PT4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dNyZjoAD; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="dNyZjoAD" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7144B1F000FF; Tue, 13 Oct 2026 13:02:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1791896551; bh=XJ2kkZ+RvTB0VG/+3wOa1NDgrg0e/cxGLS6EIfDrKl0=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=dNyZjoAD/in71vjBe7A66me2pfaxbPkqCz5x3+X2HGyV/XzafFOe/4clLZSg5Ymz6 GVu3mMl6ddDBDSgBfK7Fr1fG3ug982XyaVHF9h7UBBSZDmO0OgVonYUdltBZYDDGfw Fmu2/icpsh/7Sxb/SD4DAPwqs5d3UIFHascDPI1/yBIp/VT8cV9o+L7BEhKjeO57ye 4BoUwM47Ftwhla/CKI5zG/VaKwDVvr4jHZc79M6C7zBUayWmjIrmaXMve/5QPre5HN rfQpjsKoHelP6prnA4Owk4xpErMWpQP9z1qavOW7NKYCii/zk1JMY0RrFjPqry2aYN +/qBBcPNDObGQ== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v1 4/6] phy: rockchip: Add support for Naneng eDP phy Reply-To: sashiko-reviews@lists.linux.dev To: "Damon Ding" Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-phy@lists.infradead.org, robh@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com In-Reply-To: <20261013124946.1807886-5-damon.ding@rock-chips.com> References: <20261013124946.1807886-1-damon.ding@rock-chips.com> <20261013124946.1807886-5-damon.ding@rock-chips.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Tue, 13 Oct 2026 13:02:31 +0000 Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Thank you for your contribution! Sashiko AI review found 2 potential issue(= s) to consider: - [High] phy: rockchip: Missing set_lanes configuration and UB on unverifie= d dp->lanes - [Medium] Uninitialized variable val used if regmap_read fails -- commit be568cbd60b1a73a69ea7b9233f6bd9cf9a8b067 Author: Damon Ding phy: rockchip: Add support for Naneng eDP phy =20 Add a driver for the Rockchip eDP transmitter PHY with NaNeng IP block, as found on the RK3568 SoC. > diff --git a/drivers/phy/rockchip/phy-rockchip-naneng-edp.c b/drivers/phy= /rockchip/phy-rockchip-naneng-edp.c > new file mode 100644 > index 0000000000000..a407714f639a7 > --- /dev/null > +++ b/drivers/phy/rockchip/phy-rockchip-naneng-edp.c [ ... ] > +static int rockchip_edp_phy_set_rate(struct rockchip_edp_phy *edpphy, > + struct phy_configure_opts_dp *dp) > +{ [ ... ] > + regmap_write(edpphy->grf, EDP_PHY_GRF_CON0, FIELD_PREP_WM16(EDP_PHY_PD_= PLL_MASK, 0)); > + regmap_write(edpphy->grf, EDP_PHY_GRF_CON0, > + FIELD_PREP_WM16(EDP_PHY_TX_PD_MASK, ~GENMASK(dp->lanes - 1, 0))); [Severity: High] If a caller passes a struct where dp->lanes is 0, will this trigger undefin= ed behavior? If dp->lanes is 0, ~GENMASK(dp->lanes - 1, 0) evaluates to GENMASK(UINT_MAX, 0), triggering a negative right-shift count in C. This can occur if a caller invokes phy_configure() with opts->dp.set_rate =3D 1 with= out having first configured the lane count. [ ... ] > +static int rockchip_edp_phy_verify_config(struct rockchip_edp_phy *edpph= y, > + struct phy_configure_opts_dp *dp) > +{ [ ... ] > + if (dp->set_lanes) { > + /* Verify lane count. */ > + switch (dp->lanes) { > + case 1: > + case 2: > + case 4: > + /* valid lane count. */ > + break; > + default: > + return -EINVAL; > + } > + } > + > + /* > + * If changing voltages is required, check swing and pre-emphasis > + * levels, per-lane. > + */ > + if (dp->set_voltages) { > + /* Lane count verified previously. */ > + for (i =3D 0; i < dp->lanes; i++) { > + if (dp->voltage[i] > 3 || dp->pre[i] > 3) > + return -EINVAL; [Severity: High] Is it possible for dp->lanes to be used unvalidated here? The comment says "Lane count verified previously", but the validation of dp->lanes is bypassed if dp->set_lanes is false. If a driver calls phy_configure() with opts->dp.set_voltages =3D 1 and opts->dp.set_lanes =3D= 0, an uninitialized or invalid dp->lanes value could lead to out-of-bounds arr= ay reads. [ ... ] > +static int rockchip_edp_phy_configure(struct phy *phy, union phy_configu= re_opts *opts) > +{ > + struct rockchip_edp_phy *edpphy =3D phy_get_drvdata(phy); > + int ret; > + > + ret =3D rockchip_edp_phy_verify_config(edpphy, &opts->dp); > + if (ret) { > + dev_err(edpphy->dev, "Invalid params for phy configure\n"); > + return ret; > + } > + > + if (opts->dp.set_rate) { > + ret =3D rockchip_edp_phy_set_rate(edpphy, &opts->dp); > + if (ret) { > + dev_err(edpphy->dev, "Failed to set rate\n"); > + return ret; > + } > + } > + > + if (opts->dp.set_voltages) { > + ret =3D rockchip_edp_phy_set_voltages(edpphy, &opts->dp); > + if (ret) { > + dev_err(edpphy->dev, "Failed to set voltages\n"); > + return ret; > + } > + } > + > + return 0; > +} [Severity: High] Is opts->dp.set_lanes intentionally ignored when configuring the PHY? The opts->dp.set_lanes flag isn't handled here, meaning the hardware lane count is never configured. This missing state also causes the uninitialized dp->lanes issues in rockchip_edp_phy_set_rate() and rockchip_edp_phy_set_voltages(). [ ... ] > +static bool rockchip_edp_phy_enabled(struct rockchip_edp_phy *edpphy) > +{ > + u32 val; > + > + regmap_read(edpphy->grf, EDP_PHY_GRF_STATUS0, &val); > + > + return FIELD_GET(PLL_RDY, val); [Severity: Medium] If regmap_read() fails, does this return stack garbage? A failure in regmap_read() leaves val uninitialized. Using the uninitialized stack variable could cause the driver to incorrectly assume the PHY is alre= ady enabled. > +} --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20261013124946.1807= 886-1-damon.ding@rock-chips.com?part=3D4 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 E0815CC6B03 for ; Tue, 13 Oct 2026 13:02:34 +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:Date:References: In-Reply-To:Cc:To:Subject:From:Message-ID:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=O4BAurxWbN+x/sPbMo7QmZxhknPc+kaWVxq/z1MVbSQ=; b=VzBMKL7vBJYmN1 rovOQhSI560KjQZHPEAyhxEy5KcYlGdTlJzpG//Vdl5iWDFjgbJCGSgtmvWLKIjoTPIscfB7EJK52 c/OoRlc38GsKPtVfkz3GHEfw/pGzsvuq2Zr2XeUN850o/7W3BLkviHnyqx+SmNdHq5Y9GLDhOM0Th bunjgJkTsd65NsPJSvcU1OQl44+u10yKdf2PG3XdkTszCPguQa+LWCQ48hArEqlm1KXG40UgdTm5G W5thuEz5F6iCUQnR8oRfjwghJa+Lk5GWa+IqRVFvzBnX36JgQNTxZLUsf0IuO/rHoJ+HEL2nwAl62 UkQQgafeabsrwR12aVHA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1xGc9K-0000000CthB-2PFJ; Tue, 13 Oct 2026 13:02:34 +0000 Received: from tor.source.kernel.org ([172.105.4.254]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1xGc9I-0000000Cth4-3F9C for linux-phy@lists.infradead.org; Tue, 13 Oct 2026 13:02:32 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 3931D602C3; Tue, 13 Oct 2026 13:02:32 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7144B1F000FF; Tue, 13 Oct 2026 13:02:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1791896551; bh=XJ2kkZ+RvTB0VG/+3wOa1NDgrg0e/cxGLS6EIfDrKl0=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=dNyZjoAD/in71vjBe7A66me2pfaxbPkqCz5x3+X2HGyV/XzafFOe/4clLZSg5Ymz6 GVu3mMl6ddDBDSgBfK7Fr1fG3ug982XyaVHF9h7UBBSZDmO0OgVonYUdltBZYDDGfw Fmu2/icpsh/7Sxb/SD4DAPwqs5d3UIFHascDPI1/yBIp/VT8cV9o+L7BEhKjeO57ye 4BoUwM47Ftwhla/CKI5zG/VaKwDVvr4jHZc79M6C7zBUayWmjIrmaXMve/5QPre5HN rfQpjsKoHelP6prnA4Owk4xpErMWpQP9z1qavOW7NKYCii/zk1JMY0RrFjPqry2aYN +/qBBcPNDObGQ== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v1 4/6] phy: rockchip: Add support for Naneng eDP phy To: "Damon Ding" Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-phy@lists.infradead.org, robh@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com In-Reply-To: <20261013124946.1807886-5-damon.ding@rock-chips.com> References: <20261013124946.1807886-1-damon.ding@rock-chips.com> <20261013124946.1807886-5-damon.ding@rock-chips.com> Date: Tue, 13 Oct 2026 13:02:31 +0000 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 MiBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIHBoeTogcm9ja2NoaXA6 IE1pc3Npbmcgc2V0X2xhbmVzIGNvbmZpZ3VyYXRpb24gYW5kIFVCIG9uIHVudmVyaWZpZWQgZHAt PmxhbmVzCi0gW01lZGl1bV0gVW5pbml0aWFsaXplZCB2YXJpYWJsZSB2YWwgdXNlZCBpZiByZWdt YXBfcmVhZCBmYWlscwotLQoKY29tbWl0IGJlNTY4Y2JkNjBiMWE3M2E2OWVhN2I5MjMzZjZiZDlj ZjlhOGIwNjcKQXV0aG9yOiBEYW1vbiBEaW5nIDxkYW1vbi5kaW5nQHJvY2stY2hpcHMuY29tPgoK ICAgIHBoeTogcm9ja2NoaXA6IEFkZCBzdXBwb3J0IGZvciBOYW5lbmcgZURQIHBoeQogICAgCiAg ICBBZGQgYSBkcml2ZXIgZm9yIHRoZSBSb2NrY2hpcCBlRFAgdHJhbnNtaXR0ZXIgUEhZIHdpdGgg TmFOZW5nIElQCiAgICBibG9jaywgYXMgZm91bmQgb24gdGhlIFJLMzU2OCBTb0MuCgo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWVkcC5jIGIv ZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1lZHAuYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwMC4uYTQwNzcxNGY2MzlhNwo+IC0tLSAv ZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5n LWVkcC5jClsgLi4uIF0KPiArc3RhdGljIGludCByb2NrY2hpcF9lZHBfcGh5X3NldF9yYXRlKHN0 cnVjdCByb2NrY2hpcF9lZHBfcGh5ICplZHBwaHksCj4gKwkJCQkgICAgIHN0cnVjdCBwaHlfY29u ZmlndXJlX29wdHNfZHAgKmRwKQo+ICt7ClsgLi4uIF0KPiArCXJlZ21hcF93cml0ZShlZHBwaHkt PmdyZiwgRURQX1BIWV9HUkZfQ09OMCwgRklFTERfUFJFUF9XTTE2KEVEUF9QSFlfUERfUExMX01B U0ssIDApKTsKPiArCXJlZ21hcF93cml0ZShlZHBwaHktPmdyZiwgRURQX1BIWV9HUkZfQ09OMCwK PiArCQkgICAgIEZJRUxEX1BSRVBfV00xNihFRFBfUEhZX1RYX1BEX01BU0ssIH5HRU5NQVNLKGRw LT5sYW5lcyAtIDEsIDApKSk7CgpbU2V2ZXJpdHk6IEhpZ2hdCklmIGEgY2FsbGVyIHBhc3NlcyBh IHN0cnVjdCB3aGVyZSBkcC0+bGFuZXMgaXMgMCwgd2lsbCB0aGlzIHRyaWdnZXIgdW5kZWZpbmVk CmJlaGF2aW9yPwoKSWYgZHAtPmxhbmVzIGlzIDAsIH5HRU5NQVNLKGRwLT5sYW5lcyAtIDEsIDAp IGV2YWx1YXRlcyB0bwpHRU5NQVNLKFVJTlRfTUFYLCAwKSwgdHJpZ2dlcmluZyBhIG5lZ2F0aXZl IHJpZ2h0LXNoaWZ0IGNvdW50IGluIEMuIFRoaXMgY2FuCm9jY3VyIGlmIGEgY2FsbGVyIGludm9r ZXMgcGh5X2NvbmZpZ3VyZSgpIHdpdGggb3B0cy0+ZHAuc2V0X3JhdGUgPSAxIHdpdGhvdXQKaGF2 aW5nIGZpcnN0IGNvbmZpZ3VyZWQgdGhlIGxhbmUgY291bnQuCgpbIC4uLiBdCj4gK3N0YXRpYyBp bnQgcm9ja2NoaXBfZWRwX3BoeV92ZXJpZnlfY29uZmlnKHN0cnVjdCByb2NrY2hpcF9lZHBfcGh5 ICplZHBwaHksCj4gKwkJCQkJICBzdHJ1Y3QgcGh5X2NvbmZpZ3VyZV9vcHRzX2RwICpkcCkKPiAr ewpbIC4uLiBdCj4gKwlpZiAoZHAtPnNldF9sYW5lcykgewo+ICsJCS8qIFZlcmlmeSBsYW5lIGNv dW50LiAqLwo+ICsJCXN3aXRjaCAoZHAtPmxhbmVzKSB7Cj4gKwkJY2FzZSAxOgo+ICsJCWNhc2Ug MjoKPiArCQljYXNlIDQ6Cj4gKwkJCS8qIHZhbGlkIGxhbmUgY291bnQuICovCj4gKwkJCWJyZWFr Owo+ICsJCWRlZmF1bHQ6Cj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCX0KPiArCj4g KwkvKgo+ICsJICogSWYgY2hhbmdpbmcgdm9sdGFnZXMgaXMgcmVxdWlyZWQsIGNoZWNrIHN3aW5n IGFuZCBwcmUtZW1waGFzaXMKPiArCSAqIGxldmVscywgcGVyLWxhbmUuCj4gKwkgKi8KPiArCWlm IChkcC0+c2V0X3ZvbHRhZ2VzKSB7Cj4gKwkJLyogTGFuZSBjb3VudCB2ZXJpZmllZCBwcmV2aW91 c2x5LiAqLwo+ICsJCWZvciAoaSA9IDA7IGkgPCBkcC0+bGFuZXM7IGkrKykgewo+ICsJCQlpZiAo ZHAtPnZvbHRhZ2VbaV0gPiAzIHx8IGRwLT5wcmVbaV0gPiAzKQo+ICsJCQkJcmV0dXJuIC1FSU5W QUw7CgpbU2V2ZXJpdHk6IEhpZ2hdCklzIGl0IHBvc3NpYmxlIGZvciBkcC0+bGFuZXMgdG8gYmUg dXNlZCB1bnZhbGlkYXRlZCBoZXJlPwoKVGhlIGNvbW1lbnQgc2F5cyAiTGFuZSBjb3VudCB2ZXJp ZmllZCBwcmV2aW91c2x5IiwgYnV0IHRoZSB2YWxpZGF0aW9uIG9mCmRwLT5sYW5lcyBpcyBieXBh c3NlZCBpZiBkcC0+c2V0X2xhbmVzIGlzIGZhbHNlLiBJZiBhIGRyaXZlciBjYWxscwpwaHlfY29u ZmlndXJlKCkgd2l0aCBvcHRzLT5kcC5zZXRfdm9sdGFnZXMgPSAxIGFuZCBvcHRzLT5kcC5zZXRf bGFuZXMgPSAwLAphbiB1bmluaXRpYWxpemVkIG9yIGludmFsaWQgZHAtPmxhbmVzIHZhbHVlIGNv dWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhcnJheQpyZWFkcy4KClsgLi4uIF0KPiArc3RhdGlj IGludCByb2NrY2hpcF9lZHBfcGh5X2NvbmZpZ3VyZShzdHJ1Y3QgcGh5ICpwaHksIHVuaW9uIHBo eV9jb25maWd1cmVfb3B0cyAqb3B0cykKPiArewo+ICsJc3RydWN0IHJvY2tjaGlwX2VkcF9waHkg KmVkcHBoeSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQg PSByb2NrY2hpcF9lZHBfcGh5X3ZlcmlmeV9jb25maWcoZWRwcGh5LCAmb3B0cy0+ZHApOwo+ICsJ aWYgKHJldCkgewo+ICsJCWRldl9lcnIoZWRwcGh5LT5kZXYsICJJbnZhbGlkIHBhcmFtcyBmb3Ig cGh5IGNvbmZpZ3VyZVxuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlpZiAob3B0 cy0+ZHAuc2V0X3JhdGUpIHsKPiArCQlyZXQgPSByb2NrY2hpcF9lZHBfcGh5X3NldF9yYXRlKGVk cHBoeSwgJm9wdHMtPmRwKTsKPiArCQlpZiAocmV0KSB7Cj4gKwkJCWRldl9lcnIoZWRwcGh5LT5k ZXYsICJGYWlsZWQgdG8gc2V0IHJhdGVcbiIpOwo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCX0KPiAr CX0KPiArCj4gKwlpZiAob3B0cy0+ZHAuc2V0X3ZvbHRhZ2VzKSB7Cj4gKwkJcmV0ID0gcm9ja2No aXBfZWRwX3BoeV9zZXRfdm9sdGFnZXMoZWRwcGh5LCAmb3B0cy0+ZHApOwo+ICsJCWlmIChyZXQp IHsKPiArCQkJZGV2X2VycihlZHBwaHktPmRldiwgIkZhaWxlZCB0byBzZXQgdm9sdGFnZXNcbiIp Owo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCX0KPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQoK W1NldmVyaXR5OiBIaWdoXQpJcyBvcHRzLT5kcC5zZXRfbGFuZXMgaW50ZW50aW9uYWxseSBpZ25v cmVkIHdoZW4gY29uZmlndXJpbmcgdGhlIFBIWT8KClRoZSBvcHRzLT5kcC5zZXRfbGFuZXMgZmxh ZyBpc24ndCBoYW5kbGVkIGhlcmUsIG1lYW5pbmcgdGhlIGhhcmR3YXJlIGxhbmUKY291bnQgaXMg bmV2ZXIgY29uZmlndXJlZC4gVGhpcyBtaXNzaW5nIHN0YXRlIGFsc28gY2F1c2VzIHRoZSB1bmlu aXRpYWxpemVkCmRwLT5sYW5lcyBpc3N1ZXMgaW4gcm9ja2NoaXBfZWRwX3BoeV9zZXRfcmF0ZSgp IGFuZApyb2NrY2hpcF9lZHBfcGh5X3NldF92b2x0YWdlcygpLgoKWyAuLi4gXQo+ICtzdGF0aWMg Ym9vbCByb2NrY2hpcF9lZHBfcGh5X2VuYWJsZWQoc3RydWN0IHJvY2tjaGlwX2VkcF9waHkgKmVk cHBoeSkKPiArewo+ICsJdTMyIHZhbDsKPiArCj4gKwlyZWdtYXBfcmVhZChlZHBwaHktPmdyZiwg RURQX1BIWV9HUkZfU1RBVFVTMCwgJnZhbCk7Cj4gKwo+ICsJcmV0dXJuIEZJRUxEX0dFVChQTExf UkRZLCB2YWwpOwoKW1NldmVyaXR5OiBNZWRpdW1dCklmIHJlZ21hcF9yZWFkKCkgZmFpbHMsIGRv ZXMgdGhpcyByZXR1cm4gc3RhY2sgZ2FyYmFnZT8KCkEgZmFpbHVyZSBpbiByZWdtYXBfcmVhZCgp IGxlYXZlcyB2YWwgdW5pbml0aWFsaXplZC4gVXNpbmcgdGhlIHVuaW5pdGlhbGl6ZWQKc3RhY2sg dmFyaWFibGUgY291bGQgY2F1c2UgdGhlIGRyaXZlciB0byBpbmNvcnJlY3RseSBhc3N1bWUgdGhl IFBIWSBpcyBhbHJlYWR5CmVuYWJsZWQuCgo+ICt9CgotLSAKU2FzaGlrbyBBSSByZXZpZXcgwrcg aHR0cHM6Ly9zYXNoaWtvLmRldi8jL3BhdGNoc2V0LzIwMjYxMDEzMTI0OTQ2LjE4MDc4ODYtMS1k YW1vbi5kaW5nQHJvY2stY2hpcHMuY29tP3BhcnQ9NAoKLS0gCmxpbnV4LXBoeSBtYWlsaW5nIGxp c3QKbGludXgtcGh5QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cHM6Ly9saXN0cy5pbmZyYWRlYWQu b3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcGh5Cg==