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 BAB0B419304 for ; Wed, 12 Aug 2026 09:48:29 +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=1786528111; cv=none; b=Zma6Uzd1sOgLjWLtYsQpLGM/vmIJtHTz/ZGIy/u1zvr2oi3m1+dbpHTaauDwDNSJpO26IgCzw8ZtwQvSO8vuDBHVudJ7WsArVzFtKFsvgEaj09U7itJ3+NUJwNCUVZfbmoaq30w/Y3uorEznFLyQwuUIwTRmYrIcKBaYoLq3PXk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786528111; c=relaxed/simple; bh=y6xlGRC2lqZqk8D83mSk/rU24vyLFodpu6zsDAXhDeg=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=vE/c/YbSN6ICM+cgYUvZCQJq0fRRIGdC4/OYVXVoJButvrwSJNL+Xo5XA57IdFLy28JP8i+CajRmu9ag70mEsrAYTwS6lErp5j5RtQc7lSwrUUWJ+BA81wwr1z2GM433krSVC+sLIeRJnmHBWJvt3M3AQIT2b/63I9jOPEW2JDU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=T5QxlxJy; 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="T5QxlxJy" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0A0381F000E9; Wed, 12 Aug 2026 09:48:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786528109; bh=QNPed445OKU+swuR6Q2dtGqI0FJNzenjZy2DnJNDDY4=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=T5QxlxJynCySOKh2IznOjLIOsUZaGHo947ERJqMLfckK6U6GqkLrFJ2MbyC92B7dw RSTY0/65MTCDhRKHfwUoegvomyVB89EpXbbMLYz1buCu/E5EUVfpzh0XgY8sdXB6Kv iEfS5I8EnOfp+VoYqQmmhw0SP4hzUkcfj1jpiB69BpFMVyyn3loW3drZeUn0aQJfh9 4XMDEJTsQtvOj+rqy9lJQJuhlhU8in/9dKATKO3s0hRCt7K/fbBiTouGB4C4bYTb5l V220wEfEUUoXZ3Pqp5CW/e7NumPm53Uzi7V1cYmPUsPc6hWvO51TH1e3b1JVoAJSyi z66NEnpKM01nw== From: sashiko-bot@kernel.org Subject: Re: [PATCH v2 02/14] phy: qcom: Introduce Qualcomm IPQ5332 Super-Speed USB UNIPHY driver Reply-To: sashiko-reviews@lists.linux.dev To: "George Moussalem" Cc: linux-phy@lists.infradead.org, robh@kernel.org, conor+dt@kernel.org, devicetree@vger.kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com In-Reply-To: <20260812-ipq5018-usb3-v2-2-8f355d7ff0ef@outlook.com> References: <20260812-ipq5018-usb3-v2-0-8f355d7ff0ef@outlook.com> <20260812-ipq5018-usb3-v2-2-8f355d7ff0ef@outlook.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Wed, 12 Aug 2026 09:48:28 +0000 Message-Id: <20260812094829.0A0381F000E9@smtp.kernel.org> Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Thank you for your contribution! Sashiko AI review found 3 potential issue(= s) to consider: - [High] Missing `platform_set_drvdata()` in the probe function causes a NU= LL pointer dereference in the remove callback. - [Medium] Probe failure paths fail to restore the TCSR multiplexer to its = default hardware state. - [Medium] The driver fails to `select MFD_SYSCON` in Kconfig, risking a si= lent probe failure. -- --- Patch [2]: [PATCH v2 02/14] phy: qcom: Introduce Qualcomm IPQ5332 Super= -Speed USB UNIPHY driver --- commit 2ff7b4ffaf9a300ab45c516bb3b192d9f0a5c88e Author: Praveenkumar I phy: qcom: Introduce Qualcomm IPQ5332 Super-Speed USB UNIPHY driver Adds Qualcomm 22ull Super-Speed USB UNIPHY driver support which is present in Qualcomm IPQ5018 & IPQ5332 SoCs. This PHY is interfaced with SNPS DWC3 USB and SNPS DWC PCIe. Either one of the interface can use the it and selection is done via mux present in TCSR register. By default, the PHY is configured for PCIe interface and needs this driver to configure the mux for USB. > diff --git a/drivers/phy/qualcomm/Kconfig b/drivers/phy/qualcomm/Kconfig > index 60a0ead127fa9..1ceb04afe1e3a 100644 > --- a/drivers/phy/qualcomm/Kconfig > +++ b/drivers/phy/qualcomm/Kconfig > @@ -158,6 +158,16 @@ config PHY_QCOM_UNIPHY_PCIE_28LP > handles PHY initialization, clock management required after > resetting the hardware and power management. > =20 > +config PHY_QCOM_UNIPHY_USB_22ULL > + tristate "Qualcomm IPQ5332 UNIPHY USB Super-Speed 22ull driver" > + depends on USB && (ARCH_QCOM || COMPILE_TEST) > + select GENERIC_PHY [Severity: Medium] Since this driver uses syscon_regmap_lookup_by_phandle_args(), should it select MFD_SYSCON to ensure the required syscon utilities are compiled in and avoid silent probe failures? > + help > + Enable this to support the Qualcomm USB Super-Speed UNIPHY transceiver [ ... ] > diff --git a/drivers/phy/qualcomm/phy-qcom-uniphy-usb-ss-22ull.c b/driver= s/phy/qualcomm/phy-qcom-uniphy-usb-ss-22ull.c > new file mode 100644 > index 0000000000000..089de7cebef03 > --- /dev/null > +++ b/drivers/phy/qualcomm/phy-qcom-uniphy-usb-ss-22ull.c [ ... ] > +static int qcom_uniphy_usb_probe(struct platform_device *pdev) > +{ [ ... ] > + /* > + * Select the USB position of the phy mux before anything comes out > + * of reset. Selecting it later leaves the SuperSpeed pads muxed away > + * while the controller resets, and the SS link doesn't train and is > + * stuck in Rx.Detect (USB2 is unaffected as it isn't muxed). > + */ > + ret =3D qcom_uniphy_usb_mux_select(uniphy, true); > + if (ret) > + return dev_err_probe(dev, ret, "failed to select USB mux\n"); > + > + uniphy->phy =3D devm_phy_create(dev, NULL, &uniphy_usb_ops); > + if (IS_ERR(uniphy->phy)) { > + ret =3D PTR_ERR(uniphy->phy); > + return dev_err_probe(dev, ret, "failed to create PHY\n"); > + } [Severity: Medium] If devm_phy_create() or phy_pipe_clk_register() fail after the mux has been selected, the function returns directly without restoring the hardware stat= e. Should there be a cleanup action (perhaps via devm_add_action_or_reset()) to restore the multiplexer to its default PCIe state on probe failure? > + > + ret =3D phy_pipe_clk_register(uniphy, uniphy->phy->id); > + if (ret) > + return dev_err_probe(dev, ret, "failed to register pipe clk\n"); > + > + phy_set_drvdata(uniphy->phy, uniphy); [Severity: High] Does this function also need to call platform_set_drvdata(pdev, uniphy)? Currently qcom_uniphy_usb_remove() relies on platform_get_drvdata(pdev), which would return NULL if not set here, and cause a NULL pointer dereferen= ce when passed to qcom_uniphy_usb_mux_select(). > + > + phy_provider =3D devm_of_phy_provider_register(dev, of_phy_simple_xlate= ); > + > + ret =3D PTR_ERR_OR_ZERO(phy_provider); > + > + return ret; > +} --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260812-ipq5018-us= b3-v2-0-8f355d7ff0ef@outlook.com?part=3D2 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 728A3C5AD5A for ; Wed, 12 Aug 2026 09:48:32 +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=UafCcJAJ1K5v6HMr3IopqNc0fb6AQc8I9CNcvIWJRfM=; b=DqkH0DD+PPtpBB rdfKNZ98hnG719cBb4vWVz6dpUMwM6/WEwaPBuJNFOtohUARM6Jxa7TkMNdfXnfUCm1nfCDiwANZQ 7HA7UmdVY7hsxut0GnmgpwmEX4ZXGErdKpNMz5b9FnLR1+f65WvwogMisQ/H/PQVuGc+BEiZe0e9V 3U2oSc0iwaoEVe2o9lE7aH6CBViJEYjRGatrr4axYHbWkB9dscFY5er/B3JGOl11cfw86i/NYwCoP GuXTwPFf5/UfMDU3mF77qwkgZ6+hO0JuKfMCrOwUiofzJEgWshW7zFk5gFmEzNZIKt1l4Lc5TdyPm QcLFy3iREjf9CWFS08vg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wu5ZX-0000000FoDt-3j3Z; Wed, 12 Aug 2026 09:48:32 +0000 Received: from sea.source.kernel.org ([2600:3c0a:e001:78e:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wu5ZV-0000000FoDJ-3LjE for linux-phy@lists.infradead.org; Wed, 12 Aug 2026 09:48:29 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 8E37343D18; Wed, 12 Aug 2026 09:48:29 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0A0381F000E9; Wed, 12 Aug 2026 09:48:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786528109; bh=QNPed445OKU+swuR6Q2dtGqI0FJNzenjZy2DnJNDDY4=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=T5QxlxJynCySOKh2IznOjLIOsUZaGHo947ERJqMLfckK6U6GqkLrFJ2MbyC92B7dw RSTY0/65MTCDhRKHfwUoegvomyVB89EpXbbMLYz1buCu/E5EUVfpzh0XgY8sdXB6Kv iEfS5I8EnOfp+VoYqQmmhw0SP4hzUkcfj1jpiB69BpFMVyyn3loW3drZeUn0aQJfh9 4XMDEJTsQtvOj+rqy9lJQJuhlhU8in/9dKATKO3s0hRCt7K/fbBiTouGB4C4bYTb5l V220wEfEUUoXZ3Pqp5CW/e7NumPm53Uzi7V1cYmPUsPc6hWvO51TH1e3b1JVoAJSyi z66NEnpKM01nw== From: sashiko-bot@kernel.org Subject: Re: [PATCH v2 02/14] phy: qcom: Introduce Qualcomm IPQ5332 Super-Speed USB UNIPHY driver To: "George Moussalem" Cc: linux-phy@lists.infradead.org, robh@kernel.org, conor+dt@kernel.org, devicetree@vger.kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com In-Reply-To: <20260812-ipq5018-usb3-v2-2-8f355d7ff0ef@outlook.com> References: <20260812-ipq5018-usb3-v2-0-8f355d7ff0ef@outlook.com> <20260812-ipq5018-usb3-v2-2-8f355d7ff0ef@outlook.com> Date: Wed, 12 Aug 2026 09:48:28 +0000 Message-Id: <20260812094829.0A0381F000E9@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 MyBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIE1pc3NpbmcgYHBsYXRm b3JtX3NldF9kcnZkYXRhKClgIGluIHRoZSBwcm9iZSBmdW5jdGlvbiBjYXVzZXMgYSBOVUxMIHBv aW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIHJlbW92ZSBjYWxsYmFjay4KLSBbTWVkaXVtXSBQcm9i ZSBmYWlsdXJlIHBhdGhzIGZhaWwgdG8gcmVzdG9yZSB0aGUgVENTUiBtdWx0aXBsZXhlciB0byBp dHMgZGVmYXVsdCBoYXJkd2FyZSBzdGF0ZS4KLSBbTWVkaXVtXSBUaGUgZHJpdmVyIGZhaWxzIHRv IGBzZWxlY3QgTUZEX1NZU0NPTmAgaW4gS2NvbmZpZywgcmlza2luZyBhIHNpbGVudCBwcm9iZSBm YWlsdXJlLgotLQoKLS0tIFBhdGNoIFsyXTogW1BBVENIIHYyIDAyLzE0XSBwaHk6IHFjb206IElu dHJvZHVjZSBRdWFsY29tbSBJUFE1MzMyIFN1cGVyLVNwZWVkIFVTQiBVTklQSFkgZHJpdmVyIC0t LQpjb21taXQgMmZmN2I0ZmZhZjlhMzAwYWI0NWM1MTZiYjNiMTkyZDlmMGE1Yzg4ZQpBdXRob3I6 IFByYXZlZW5rdW1hciBJIDxxdWljX2lwa3VtYXJAcXVpY2luYy5jb20+CgpwaHk6IHFjb206IElu dHJvZHVjZSBRdWFsY29tbSBJUFE1MzMyIFN1cGVyLVNwZWVkIFVTQiBVTklQSFkgZHJpdmVyCgpB ZGRzIFF1YWxjb21tIDIydWxsIFN1cGVyLVNwZWVkIFVTQiBVTklQSFkgZHJpdmVyIHN1cHBvcnQg d2hpY2ggaXMKcHJlc2VudCBpbiBRdWFsY29tbSBJUFE1MDE4ICYgSVBRNTMzMiBTb0NzLgoKVGhp cyBQSFkgaXMgaW50ZXJmYWNlZCB3aXRoIFNOUFMgRFdDMyBVU0IgYW5kIFNOUFMgRFdDIFBDSWUu IEVpdGhlciBvbmUKb2YgdGhlIGludGVyZmFjZSBjYW4gdXNlIHRoZSBpdCBhbmQgc2VsZWN0aW9u IGlzIGRvbmUgdmlhIG11eCBwcmVzZW50IGluClRDU1IgcmVnaXN0ZXIuIEJ5IGRlZmF1bHQsIHRo ZSBQSFkgaXMgY29uZmlndXJlZCBmb3IgUENJZSBpbnRlcmZhY2UgYW5kCm5lZWRzIHRoaXMgZHJp dmVyIHRvIGNvbmZpZ3VyZSB0aGUgbXV4IGZvciBVU0IuCgo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3BoeS9xdWFsY29tbS9LY29uZmlnIGIvZHJpdmVycy9waHkvcXVhbGNvbW0vS2NvbmZpZwo+IGlu ZGV4IDYwYTBlYWQxMjdmYTkuLjFjZWIwNGFmZTFlM2EgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9w aHkvcXVhbGNvbW0vS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvcGh5L3F1YWxjb21tL0tjb25maWcK PiBAQCAtMTU4LDYgKzE1OCwxNiBAQCBjb25maWcgUEhZX1FDT01fVU5JUEhZX1BDSUVfMjhMUAo+ ICAJICBoYW5kbGVzIFBIWSBpbml0aWFsaXphdGlvbiwgY2xvY2sgbWFuYWdlbWVudCByZXF1aXJl ZCBhZnRlcgo+ICAJICByZXNldHRpbmcgdGhlIGhhcmR3YXJlIGFuZCBwb3dlciBtYW5hZ2VtZW50 Lgo+ICAKPiArY29uZmlnIFBIWV9RQ09NX1VOSVBIWV9VU0JfMjJVTEwKPiArCXRyaXN0YXRlICJR dWFsY29tbSBJUFE1MzMyIFVOSVBIWSBVU0IgU3VwZXItU3BlZWQgMjJ1bGwgZHJpdmVyIgo+ICsJ ZGVwZW5kcyBvbiBVU0IgJiYgKEFSQ0hfUUNPTSB8fCBDT01QSUxFX1RFU1QpCj4gKwlzZWxlY3Qg R0VORVJJQ19QSFkKCltTZXZlcml0eTogTWVkaXVtXQpTaW5jZSB0aGlzIGRyaXZlciB1c2VzIHN5 c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGVfYXJncygpLCBzaG91bGQgaXQKc2VsZWN0IE1G RF9TWVNDT04gdG8gZW5zdXJlIHRoZSByZXF1aXJlZCBzeXNjb24gdXRpbGl0aWVzIGFyZSBjb21w aWxlZCBpbgphbmQgYXZvaWQgc2lsZW50IHByb2JlIGZhaWx1cmVzPwoKPiArCWhlbHAKPiArCSAg RW5hYmxlIHRoaXMgdG8gc3VwcG9ydCB0aGUgUXVhbGNvbW0gVVNCIFN1cGVyLVNwZWVkIFVOSVBI WSB0cmFuc2NlaXZlcgoKWyAuLi4gXQoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcXVhbGNv bW0vcGh5LXFjb20tdW5pcGh5LXVzYi1zcy0yMnVsbC5jIGIvZHJpdmVycy9waHkvcXVhbGNvbW0v cGh5LXFjb20tdW5pcGh5LXVzYi1zcy0yMnVsbC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwMDAwMDAwLi4wODlkZTdjZWJlZjAzCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L2RyaXZlcnMvcGh5L3F1YWxjb21tL3BoeS1xY29tLXVuaXBoeS11c2Itc3MtMjJ1bGwuYwoKWyAu Li4gXQoKPiArc3RhdGljIGludCBxY29tX3VuaXBoeV91c2JfcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKPiArewoKWyAuLi4gXQoKPiArCS8qCj4gKwkgKiBTZWxlY3QgdGhlIFVT QiBwb3NpdGlvbiBvZiB0aGUgcGh5IG11eCBiZWZvcmUgYW55dGhpbmcgY29tZXMgb3V0Cj4gKwkg KiBvZiByZXNldC4gU2VsZWN0aW5nIGl0IGxhdGVyIGxlYXZlcyB0aGUgU3VwZXJTcGVlZCBwYWRz IG11eGVkIGF3YXkKPiArCSAqIHdoaWxlIHRoZSBjb250cm9sbGVyIHJlc2V0cywgYW5kIHRoZSBT UyBsaW5rIGRvZXNuJ3QgdHJhaW4gYW5kIGlzCj4gKwkgKiBzdHVjayBpbiBSeC5EZXRlY3QgKFVT QjIgaXMgdW5hZmZlY3RlZCBhcyBpdCBpc24ndCBtdXhlZCkuCj4gKwkgKi8KPiArCXJldCA9IHFj b21fdW5pcGh5X3VzYl9tdXhfc2VsZWN0KHVuaXBoeSwgdHJ1ZSk7Cj4gKwlpZiAocmV0KQo+ICsJ CXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAiZmFpbGVkIHRvIHNlbGVjdCBVU0IgbXV4 XG4iKTsKPiArCj4gKwl1bmlwaHktPnBoeSA9IGRldm1fcGh5X2NyZWF0ZShkZXYsIE5VTEwsICZ1 bmlwaHlfdXNiX29wcyk7Cj4gKwlpZiAoSVNfRVJSKHVuaXBoeS0+cGh5KSkgewo+ICsJCXJldCA9 IFBUUl9FUlIodW5pcGh5LT5waHkpOwo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0 LCAiZmFpbGVkIHRvIGNyZWF0ZSBQSFlcbiIpOwo+ICsJfQoKW1NldmVyaXR5OiBNZWRpdW1dCklm IGRldm1fcGh5X2NyZWF0ZSgpIG9yIHBoeV9waXBlX2Nsa19yZWdpc3RlcigpIGZhaWwgYWZ0ZXIg dGhlIG11eCBoYXMgYmVlbgpzZWxlY3RlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgZGlyZWN0bHkg d2l0aG91dCByZXN0b3JpbmcgdGhlIGhhcmR3YXJlIHN0YXRlLgpTaG91bGQgdGhlcmUgYmUgYSBj bGVhbnVwIGFjdGlvbiAocGVyaGFwcyB2aWEgZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KCkpCnRv IHJlc3RvcmUgdGhlIG11bHRpcGxleGVyIHRvIGl0cyBkZWZhdWx0IFBDSWUgc3RhdGUgb24gcHJv YmUgZmFpbHVyZT8KCj4gKwo+ICsJcmV0ID0gcGh5X3BpcGVfY2xrX3JlZ2lzdGVyKHVuaXBoeSwg dW5pcGh5LT5waHktPmlkKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUo ZGV2LCByZXQsICJmYWlsZWQgdG8gcmVnaXN0ZXIgcGlwZSBjbGtcbiIpOwo+ICsKPiArCXBoeV9z ZXRfZHJ2ZGF0YSh1bmlwaHktPnBoeSwgdW5pcGh5KTsKCltTZXZlcml0eTogSGlnaF0KRG9lcyB0 aGlzIGZ1bmN0aW9uIGFsc28gbmVlZCB0byBjYWxsIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYs IHVuaXBoeSk/CkN1cnJlbnRseSBxY29tX3VuaXBoeV91c2JfcmVtb3ZlKCkgcmVsaWVzIG9uIHBs YXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpLAp3aGljaCB3b3VsZCByZXR1cm4gTlVMTCBpZiBub3Qg c2V0IGhlcmUsIGFuZCBjYXVzZSBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZQp3aGVuIHBhc3Nl ZCB0byBxY29tX3VuaXBoeV91c2JfbXV4X3NlbGVjdCgpLgoKPiArCj4gKwlwaHlfcHJvdmlkZXIg PSBkZXZtX29mX3BoeV9wcm92aWRlcl9yZWdpc3RlcihkZXYsIG9mX3BoeV9zaW1wbGVfeGxhdGUp Owo+ICsKPiArCXJldCA9IFBUUl9FUlJfT1JfWkVSTyhwaHlfcHJvdmlkZXIpOwo+ICsKPiArCXJl dHVybiByZXQ7Cj4gK30KCi0tIApTYXNoaWtvIEFJIHJldmlldyDCtyBodHRwczovL3Nhc2hpa28u ZGV2LyMvcGF0Y2hzZXQvMjAyNjA4MTItaXBxNTAxOC11c2IzLXYyLTAtOGYzNTVkN2ZmMGVmQG91 dGxvb2suY29tP3BhcnQ9MgoKLS0gCmxpbnV4LXBoeSBtYWlsaW5nIGxpc3QKbGludXgtcGh5QGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cHM6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlz dGluZm8vbGludXgtcGh5Cg==