From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=100.103.45.18 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1794370955; b=3QcSODBlH1uI3pdcF3J5G1sV9gmJUzgab+ETFRX1X0JbvTOVpFOeLB+i4gVPzDswOzcw QlrcYddOfXlRprb9Azv6YFuTnBV9A4w+r9WRO0vQPdmjtuxswcPgg87puLgcAeBTk6TQA L/RxF+cZoKZ/WCa+JIlqoFqNR7PTqJxQCUb5Ez1abj2E060PArZexmsvgEgavLcr3ruwZ dKTMyPnWYo978wk1ytAnLCU4wbM3ZByMvfEoxspMxrAQY3I7lBCAyQFUx6utiE+A3WIFo Ng+e2YrhNuE6v5InPKOSVHL+UUHD9leR2j09HRHajTBtoaDmtiAHJQhoBPl7wJapoVg== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1794370955; h=Received:DKIM-Signature:Message-ID:From:Subject:Reply-To:To:Cc: In-Reply-To:References:Content-Type:Content-Transfer-Encoding:Date; bh=tGte33G70WlD86NL9KI+4i6b5lHMmJ/9O0wo+2lnvSU=; b=3tQ8Ib+IsoMbch8quNmNXNmHx7Gw9YuXxstMucybzmQcGWkHVJn4yYJqFnS8SBdv3Cia x0X2ByY8OEU1oB68qOodzbARf1w16xk/a0RUk8PcNmFPA6J/08EwrlDNFZYaA7MVbB7wc nbUZ5ql/Q7qoSAoKN9/8ytI2us67hRHqUzbxR1clbNkpymuUSULKK50Qkk/riYyyBTNkL 5biofx4BeIPYmNW/cu5tHMO2olhn4VE8E6H2lKx7J0S9P41I9WcC8IkIh6sY1xJ2e5dIh milkZ4OYTm+gT0GH13NurO/3cniWygcDj+gJL+3XsYSw6TBCwcWJvxUpm8XBQt4dyog== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=kSRM09eR; arc=none smtp.remote-ip=100.103.45.18 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D06A2606A32D for ; Wed, 11 Nov 2026 04:22:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=kSRM09eR Received: by smtp.kernel.org (Postfix) with ESMTPSA id 094911F0093C; Wed, 11 Nov 2026 04:22:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1794370955; bh=tGte33G70WlD86NL9KI+4i6b5lHMmJ/9O0wo+2lnvSU=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=kSRM09eRzWBmIW+bWl4meqV7Eoc5/xP7rWf0aNZzmQxnjbYzAQWkHJnq/cyREiknl qzh7skHWVwRETSJMUlBpRAPS6Jcxtvt1mRRsao4rfB71d+dQ5Cv295wLvhGrxkfa0P xAndvgI1ZHoSjHDPTwPNEai6pYqtYGahK8GhKmJ/vLD/yXSJLSk8N5VD1/4HY1dNUY OCxPoOCIv5V6t6aogBOY8anGk8ybQDEyIBqVynGdLTrc6DwQjALDfQ5of2f52tYEQA kifZfnxhTR6tBjfIlF1/z1A6SxtziBNkZRhGO0MnmzeZS623RwCrcn8NKiQmFkl7Ks 3A9Unpln0+eXg== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v2 6/9] i3c: mipi-i3c-hci: Add support for the AST2700 I3C controller Reply-To: sashiko-reviews@lists.linux.dev To: "Billy Tsai" Cc: linux-i3c@lists.infradead.org, devicetree@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org, Frank.Li@kernel.org, "Alexandre Belloni" In-Reply-To: <20261111-b4-i3c-hci-ast2700-v2-6-4d8fff5c5196@aspeedtech.com> References: <20261111-b4-i3c-hci-ast2700-v2-0-4d8fff5c5196@aspeedtech.com> <20261111-b4-i3c-hci-ast2700-v2-6-4d8fff5c5196@aspeedtech.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Wed, 11 Nov 2026 04:22:34 +0000 X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list Thank you for your contribution! Sashiko AI review found 2 potential issues to consider: - [Medium] i3c: mipi-i3c-hci: NULL deref and missing offset check in hci_extcap_vendor_ASPEED() - [Medium] i3c: mipi-i3c-hci: ACK_L programmed with hcnt instead of lcnt in aspeed_i3c_phy_init() -- commit adcbd5aae214cefb55e76d2928d998852108ffaf Author: Billy Tsai i3c: mipi-i3c-hci: Add support for the AST2700 I3C controller This commit adds vendor capability parsing, resource management, interrupt summary handling, PHY timing setup, and DAA index configuration for the ASPEED AST2700 I3C controller. > diff --git a/drivers/i3c/master/mipi-i3c-hci/aspeed.c b/drivers/i3c/maste= r/mipi-i3c-hci/aspeed.c > new file mode 100644 > index 0000000000000..3aa910e786f8e > --- /dev/null > +++ b/drivers/i3c/master/mipi-i3c-hci/aspeed.c > @@ -0,0 +1,351 @@ [ ... ] > +int hci_extcap_vendor_ASPEED(struct i3c_hci *hci, void __iomem *base) > +{ > + struct aspeed_i3c_vendor_data *vd =3D to_aspeed_vendor_data(hci); > + > + vd->inhouse_regs =3D hci->base_regs + readl(base + 0x04); > + vd->phy_regs =3D hci->base_regs + readl(base + 0x08); > + > + return 0; > +} > + > +bool aspeed_i3c_vendor_cap_found(struct i3c_hci *hci) > +{ > + struct aspeed_i3c_vendor_data *vd =3D to_aspeed_vendor_data(hci); > + > + return vd->inhouse_regs && vd->phy_regs; > +} [Severity: Medium] Can hci_extcap_vendor_ASPEED() dereference a NULL vd pointer or populate non-NULL register pointers from zero offsets? EXT_CAP_VENDOR(ASPEED, 0xc0, 0x08) is registered unconditionally in vendor_ext_caps[], whereas hci->vendor_data is only allocated in i3c_hci_probe() when HCI_QUIRK_VENDOR_RESOURCES is set. If an ASPEED controller is bound without HCI_QUIRK_VENDOR_RESOURCES (for example via the generic "mipi-i3c-hci" compatible), i3c_hci_parse_ext_caps() calls hci_extcap_vendor_ASPEED() with hci->vendor_data =3D=3D NULL and crashes. Similarly, the other four vendor quirks (HCI_QUIRK_VENDOR_BUS_SETUP, HCI_QUIRK_BOARD_PHY_TIMINGS, HCI_QUIRK_VENDOR_INTR_SUMMARY, and HCI_QUIRK_VENDOR_DAA_INDEX) dereference hci->vendor_data without checking that HCI_QUIRK_VENDOR_RESOURCES allocated it or verified aspeed_i3c_vendor_cap_found(). In addition, unlike the section parsers in i3c_hci_init() that check "offset ? hci->base_regs + offset : NULL", hci_extcap_vendor_ASPEED() adds readl(base + 0x04) and readl(base + 0x08) directly to hci->base_regs. A zero offset in either register yields hci->base_regs rather than NULL, so aspeed_i3c_vendor_cap_found() returns true and later vendor or PHY writes overwrite the core HCI registers at hci->base_regs. [ ... ] > + hcnt =3D aspeed_i3c_ns_to_cnt(ASPEED_I3C_PHY_I2C_FM_SCL_H_NS, period_ns= ); > + lcnt =3D aspeed_i3c_ns_to_cnt(ASPEED_I3C_PHY_I2C_FM_SCL_L_NS, period_ns= ); > + aspeed_i3c_phy_write(hci, ASPEED_I3C_PHY_I2C_FM_CTRL1, > + FIELD_PREP(ASPEED_I3C_PHY_I2C_FM_CTRL1_SCL_H, hcnt) | > + FIELD_PREP(ASPEED_I3C_PHY_I2C_PHY_I2C_FM_CTRL1_SCL_L, lcnt)); > + aspeed_i3c_phy_write(hci, ASPEED_I3C_PHY_I2C_FM_CTRL2, > + FIELD_PREP(ASPEED_I3C_PHY_I2C_FM_CTRL2_ACK_H, hcnt) | > + FIELD_PREP(ASPEED_I3C_PHY_I2C_FM_CTRL2_ACK_L, hcnt)); > + > + hcnt =3D aspeed_i3c_ns_to_cnt(ASPEED_I3C_PHY_I2C_FM_HD_DAT_NS, period_n= s); > + lcnt =3D aspeed_i3c_ns_to_cnt(ASPEED_I3C_PHY_I2C_FM_AHD_DAT_NS, period_= ns); > + aspeed_i3c_phy_write(hci, ASPEED_I3C_PHY_I2C_FM_CTRL3, > + FIELD_PREP(ASPEED_I3C_PHY_I2C_FM_CTRL3_HD_DAT, hcnt) | > + FIELD_PREP(ASPEED_I3C_PHY_I2C_FM_CTRL3_AHD_DAT, lcnt)); > + > + hcnt =3D aspeed_i3c_ns_to_cnt(ASPEED_I3C_PHY_I2C_FMP_CAS_NS, period_ns); > + lcnt =3D aspeed_i3c_ns_to_cnt(ASPEED_I3C_PHY_I2C_FMP_SU_STO_NS, period_= ns); > + aspeed_i3c_phy_write(hci, ASPEED_I3C_PHY_I2C_FMP_CTRL0, > + FIELD_PREP(ASPEED_I3C_PHY_I2C_FMP_CTRL0_CAS, hcnt) | > + FIELD_PREP(ASPEED_I3C_PHY_I2C_FMP_CTRL0_SU_STO, lcnt)); > + > + hcnt =3D aspeed_i3c_ns_to_cnt(ASPEED_I3C_PHY_I2C_FMP_SCL_H_NS, period_n= s); > + lcnt =3D aspeed_i3c_ns_to_cnt(ASPEED_I3C_PHY_I2C_FMP_SCL_L_NS, period_n= s); > + aspeed_i3c_phy_write(hci, ASPEED_I3C_PHY_I2C_FMP_CTRL1, > + FIELD_PREP(ASPEED_I3C_PHY_I2C_FMP_CTRL1_SCL_H, hcnt) | > + FIELD_PREP(ASPEED_I3C_PHY_I2C_FMP_CTRL1_SCL_L, lcnt)); > + aspeed_i3c_phy_write(hci, ASPEED_I3C_PHY_I2C_FMP_CTRL2, > + FIELD_PREP(ASPEED_I3C_PHY_I2C_FMP_CTRL2_ACK_H, hcnt) | > + FIELD_PREP(ASPEED_I3C_PHY_I2C_FMP_CTRL2_ACK_L, hcnt)); [Severity: Medium] Should ASPEED_I3C_PHY_I2C_FM_CTRL2_ACK_L and ASPEED_I3C_PHY_I2C_FMP_CTRL2_ACK_L be programmed with lcnt instead of hcnt, matching ASPEED_I3C_PHY_I3C_OD_CTRL2_ACK_L further down? Passing hcnt sets the I2C ACK SCL low period to 1130 ns in Fast Mode (below the 1300 ns I2C minimum tLOW) and 380 ns in Fast Mode Plus (below the 500 ns minimum). --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20261111-b4-i3c-hci= -ast2700-v2-0-4d8fff5c5196@aspeedtech.com?part=3D6 From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 580EA606A321 for ; Wed, 11 Nov 2026 04:22:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=E+640EhI; dkim=fail reason="signature verification failed" (2048-bit key) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=kSRM09eR 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-Unsubscribe-Post:List-Owner; bh=96yUnfBW1wtB3yocB4Fu7SVPZzY6d1AqVGDsVKO0UkE=; b=E+640EhIqcBvQ1OZtKAiKuzq4e FvFSWmGU1RaElvTf8eF7LWbV/NbbIuxcU67GpggJkXd8aJQNY+/fbT9kYb/l4suLUob+F7elI3hE/ nxmVKO5iuaI0W55pHRlbnY8W0PREE+4Bde5sHDaQIgMXhGUM+6jYLDvmZHevIgK1knM9F88EcZkBZ c0tcUayUi6ZmaKmQ3aUSo7X1hJ8JsjDmoQteTzZ6PB5xQ/UrEvzrwrAq1phL719vsfK+SAcdRY1qj nrTDRp3/DZkTc2JX0WPnwcYQCIQW821p4UMuBuaKauywUlJPPVoyoOk8jsXM1RtdHGMMuAkfIHETg h5mt7HCA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xQzr5-00000005bgE-0Nqs; Wed, 11 Nov 2026 04:22:39 +0000 Received: from tor.source.kernel.org ([2600:3c04:e001:324:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xQzr2-00000005bfp-3fzL for linux-i3c@lists.infradead.org; Wed, 11 Nov 2026 04:22:36 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id B2E0A61D11; Wed, 11 Nov 2026 04:22:35 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 094911F0093C; Wed, 11 Nov 2026 04:22:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1794370955; bh=tGte33G70WlD86NL9KI+4i6b5lHMmJ/9O0wo+2lnvSU=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=kSRM09eRzWBmIW+bWl4meqV7Eoc5/xP7rWf0aNZzmQxnjbYzAQWkHJnq/cyREiknl qzh7skHWVwRETSJMUlBpRAPS6Jcxtvt1mRRsao4rfB71d+dQ5Cv295wLvhGrxkfa0P xAndvgI1ZHoSjHDPTwPNEai6pYqtYGahK8GhKmJ/vLD/yXSJLSk8N5VD1/4HY1dNUY OCxPoOCIv5V6t6aogBOY8anGk8ybQDEyIBqVynGdLTrc6DwQjALDfQ5of2f52tYEQA kifZfnxhTR6tBjfIlF1/z1A6SxtziBNkZRhGO0MnmzeZS623RwCrcn8NKiQmFkl7Ks 3A9Unpln0+eXg== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v2 6/9] i3c: mipi-i3c-hci: Add support for the AST2700 I3C controller To: "Billy Tsai" Cc: linux-i3c@lists.infradead.org, devicetree@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org, Frank.Li@kernel.org, "Alexandre Belloni" In-Reply-To: <20261111-b4-i3c-hci-ast2700-v2-6-4d8fff5c5196@aspeedtech.com> References: <20261111-b4-i3c-hci-ast2700-v2-0-4d8fff5c5196@aspeedtech.com> <20261111-b4-i3c-hci-ast2700-v2-6-4d8fff5c5196@aspeedtech.com> Date: Wed, 11 Nov 2026 04:22:34 +0000 X-BeenThere: linux-i3c@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev X-Archived-By: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-i3c" X-Spam-Status: No, score=-8.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=4.0.1 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on aws-us-west-2-korg-listserv-alma10-1 VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg MiBwb3RlbnRpYWwKaXNzdWVzIHRvIGNvbnNpZGVyOgotIFtNZWRpdW1dIGkzYzogbWlwaS1pM2Mt aGNpOiBOVUxMIGRlcmVmIGFuZCBtaXNzaW5nIG9mZnNldCBjaGVjayBpbgogIGhjaV9leHRjYXBf dmVuZG9yX0FTUEVFRCgpCi0gW01lZGl1bV0gaTNjOiBtaXBpLWkzYy1oY2k6IEFDS19MIHByb2dy YW1tZWQgd2l0aCBoY250IGluc3RlYWQgb2YgbGNudAogIGluIGFzcGVlZF9pM2NfcGh5X2luaXQo KQotLQoKY29tbWl0IGFkY2JkNWFhZTIxNGNlZmI1NWU3NmQyOTI4ZDk5ODg1MjEwOGZmYWYKQXV0 aG9yOiBCaWxseSBUc2FpIDxiaWxseV90c2FpQGFzcGVlZHRlY2guY29tPgoKaTNjOiBtaXBpLWkz Yy1oY2k6IEFkZCBzdXBwb3J0IGZvciB0aGUgQVNUMjcwMCBJM0MgY29udHJvbGxlcgoKVGhpcyBj b21taXQgYWRkcyB2ZW5kb3IgY2FwYWJpbGl0eSBwYXJzaW5nLCByZXNvdXJjZSBtYW5hZ2VtZW50 LCBpbnRlcnJ1cHQKc3VtbWFyeSBoYW5kbGluZywgUEhZIHRpbWluZyBzZXR1cCwgYW5kIERBQSBp bmRleCBjb25maWd1cmF0aW9uIGZvciB0aGUKQVNQRUVEIEFTVDI3MDAgSTNDIGNvbnRyb2xsZXIu Cgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1pM2MtaGNpL2FzcGVlZC5j IGIvZHJpdmVycy9pM2MvbWFzdGVyL21pcGktaTNjLWhjaS9hc3BlZWQuYwo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwMC4uM2FhOTEwZTc4NmY4ZQo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9kcml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1pM2MtaGNpL2FzcGVlZC5jCj4g QEAgLTAsMCArMSwzNTEgQEAKClsgLi4uIF0KCj4gK2ludCBoY2lfZXh0Y2FwX3ZlbmRvcl9BU1BF RUQoc3RydWN0IGkzY19oY2kgKmhjaSwgdm9pZCBfX2lvbWVtICpiYXNlKQo+ICt7Cj4gKwlzdHJ1 Y3QgYXNwZWVkX2kzY192ZW5kb3JfZGF0YSAqdmQgPSB0b19hc3BlZWRfdmVuZG9yX2RhdGEoaGNp KTsKPiArCj4gKwl2ZC0+aW5ob3VzZV9yZWdzID0gaGNpLT5iYXNlX3JlZ3MgKyByZWFkbChiYXNl ICsgMHgwNCk7Cj4gKwl2ZC0+cGh5X3JlZ3MgPSBoY2ktPmJhc2VfcmVncyArIHJlYWRsKGJhc2Ug KyAweDA4KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArYm9vbCBhc3BlZWRfaTNjX3Zl bmRvcl9jYXBfZm91bmQoc3RydWN0IGkzY19oY2kgKmhjaSkKPiArewo+ICsJc3RydWN0IGFzcGVl ZF9pM2NfdmVuZG9yX2RhdGEgKnZkID0gdG9fYXNwZWVkX3ZlbmRvcl9kYXRhKGhjaSk7Cj4gKwo+ ICsJcmV0dXJuIHZkLT5pbmhvdXNlX3JlZ3MgJiYgdmQtPnBoeV9yZWdzOwo+ICt9CgpbU2V2ZXJp dHk6IE1lZGl1bV0KQ2FuIGhjaV9leHRjYXBfdmVuZG9yX0FTUEVFRCgpIGRlcmVmZXJlbmNlIGEg TlVMTCB2ZCBwb2ludGVyIG9yIHBvcHVsYXRlCm5vbi1OVUxMIHJlZ2lzdGVyIHBvaW50ZXJzIGZy b20gemVybyBvZmZzZXRzPwoKRVhUX0NBUF9WRU5ET1IoQVNQRUVELCAweGMwLCAweDA4KSBpcyBy ZWdpc3RlcmVkIHVuY29uZGl0aW9uYWxseSBpbgp2ZW5kb3JfZXh0X2NhcHNbXSwgd2hlcmVhcyBo Y2ktPnZlbmRvcl9kYXRhIGlzIG9ubHkgYWxsb2NhdGVkIGluCmkzY19oY2lfcHJvYmUoKSB3aGVu IEhDSV9RVUlSS19WRU5ET1JfUkVTT1VSQ0VTIGlzIHNldC4gIElmIGFuIEFTUEVFRApjb250cm9s bGVyIGlzIGJvdW5kIHdpdGhvdXQgSENJX1FVSVJLX1ZFTkRPUl9SRVNPVVJDRVMgKGZvciBleGFt cGxlIHZpYSB0aGUKZ2VuZXJpYyAibWlwaS1pM2MtaGNpIiBjb21wYXRpYmxlKSwgaTNjX2hjaV9w YXJzZV9leHRfY2FwcygpIGNhbGxzCmhjaV9leHRjYXBfdmVuZG9yX0FTUEVFRCgpIHdpdGggaGNp LT52ZW5kb3JfZGF0YSA9PSBOVUxMIGFuZCBjcmFzaGVzLgpTaW1pbGFybHksIHRoZSBvdGhlciBm b3VyIHZlbmRvciBxdWlya3MgKEhDSV9RVUlSS19WRU5ET1JfQlVTX1NFVFVQLApIQ0lfUVVJUktf Qk9BUkRfUEhZX1RJTUlOR1MsIEhDSV9RVUlSS19WRU5ET1JfSU5UUl9TVU1NQVJZLCBhbmQKSENJ X1FVSVJLX1ZFTkRPUl9EQUFfSU5ERVgpIGRlcmVmZXJlbmNlIGhjaS0+dmVuZG9yX2RhdGEgd2l0 aG91dCBjaGVja2luZwp0aGF0IEhDSV9RVUlSS19WRU5ET1JfUkVTT1VSQ0VTIGFsbG9jYXRlZCBp dCBvciB2ZXJpZmllZAphc3BlZWRfaTNjX3ZlbmRvcl9jYXBfZm91bmQoKS4KCkluIGFkZGl0aW9u LCB1bmxpa2UgdGhlIHNlY3Rpb24gcGFyc2VycyBpbiBpM2NfaGNpX2luaXQoKSB0aGF0IGNoZWNr CiJvZmZzZXQgPyBoY2ktPmJhc2VfcmVncyArIG9mZnNldCA6IE5VTEwiLCBoY2lfZXh0Y2FwX3Zl bmRvcl9BU1BFRUQoKSBhZGRzCnJlYWRsKGJhc2UgKyAweDA0KSBhbmQgcmVhZGwoYmFzZSArIDB4 MDgpIGRpcmVjdGx5IHRvIGhjaS0+YmFzZV9yZWdzLiAgQQp6ZXJvIG9mZnNldCBpbiBlaXRoZXIg cmVnaXN0ZXIgeWllbGRzIGhjaS0+YmFzZV9yZWdzIHJhdGhlciB0aGFuIE5VTEwsIHNvCmFzcGVl ZF9pM2NfdmVuZG9yX2NhcF9mb3VuZCgpIHJldHVybnMgdHJ1ZSBhbmQgbGF0ZXIgdmVuZG9yIG9y IFBIWSB3cml0ZXMKb3ZlcndyaXRlIHRoZSBjb3JlIEhDSSByZWdpc3RlcnMgYXQgaGNpLT5iYXNl X3JlZ3MuCgpbIC4uLiBdCgo+ICsJaGNudCA9IGFzcGVlZF9pM2NfbnNfdG9fY250KEFTUEVFRF9J M0NfUEhZX0kyQ19GTV9TQ0xfSF9OUywgcGVyaW9kX25zKTsKPiArCWxjbnQgPSBhc3BlZWRfaTNj X25zX3RvX2NudChBU1BFRURfSTNDX1BIWV9JMkNfRk1fU0NMX0xfTlMsIHBlcmlvZF9ucyk7Cj4g Kwlhc3BlZWRfaTNjX3BoeV93cml0ZShoY2ksIEFTUEVFRF9JM0NfUEhZX0kyQ19GTV9DVFJMMSwK PiArCQkJICAgICBGSUVMRF9QUkVQKEFTUEVFRF9JM0NfUEhZX0kyQ19GTV9DVFJMMV9TQ0xfSCwg aGNudCkgfAo+ICsJCQkgICAgIEZJRUxEX1BSRVAoQVNQRUVEX0kzQ19QSFlfSTJDX1BIWV9JMkNf Rk1fQ1RSTDFfU0NMX0wsIGxjbnQpKTsKPiArCWFzcGVlZF9pM2NfcGh5X3dyaXRlKGhjaSwgQVNQ RUVEX0kzQ19QSFlfSTJDX0ZNX0NUUkwyLAo+ICsJCQkgICAgIEZJRUxEX1BSRVAoQVNQRUVEX0kz Q19QSFlfSTJDX0ZNX0NUUkwyX0FDS19ILCBoY250KSB8Cj4gKwkJCSAgICAgRklFTERfUFJFUChB U1BFRURfSTNDX1BIWV9JMkNfRk1fQ1RSTDJfQUNLX0wsIGhjbnQpKTsKPiArCj4gKwloY250ID0g YXNwZWVkX2kzY19uc190b19jbnQoQVNQRUVEX0kzQ19QSFlfSTJDX0ZNX0hEX0RBVF9OUywgcGVy aW9kX25zKTsKPiArCWxjbnQgPSBhc3BlZWRfaTNjX25zX3RvX2NudChBU1BFRURfSTNDX1BIWV9J MkNfRk1fQUhEX0RBVF9OUywgcGVyaW9kX25zKTsKPiArCWFzcGVlZF9pM2NfcGh5X3dyaXRlKGhj aSwgQVNQRUVEX0kzQ19QSFlfSTJDX0ZNX0NUUkwzLAo+ICsJCQkgICAgIEZJRUxEX1BSRVAoQVNQ RUVEX0kzQ19QSFlfSTJDX0ZNX0NUUkwzX0hEX0RBVCwgaGNudCkgfAo+ICsJCQkgICAgIEZJRUxE X1BSRVAoQVNQRUVEX0kzQ19QSFlfSTJDX0ZNX0NUUkwzX0FIRF9EQVQsIGxjbnQpKTsKPiArCj4g KwloY250ID0gYXNwZWVkX2kzY19uc190b19jbnQoQVNQRUVEX0kzQ19QSFlfSTJDX0ZNUF9DQVNf TlMsIHBlcmlvZF9ucyk7Cj4gKwlsY250ID0gYXNwZWVkX2kzY19uc190b19jbnQoQVNQRUVEX0kz Q19QSFlfSTJDX0ZNUF9TVV9TVE9fTlMsIHBlcmlvZF9ucyk7Cj4gKwlhc3BlZWRfaTNjX3BoeV93 cml0ZShoY2ksIEFTUEVFRF9JM0NfUEhZX0kyQ19GTVBfQ1RSTDAsCj4gKwkJCSAgICAgRklFTERf UFJFUChBU1BFRURfSTNDX1BIWV9JMkNfRk1QX0NUUkwwX0NBUywgaGNudCkgfAo+ICsJCQkgICAg IEZJRUxEX1BSRVAoQVNQRUVEX0kzQ19QSFlfSTJDX0ZNUF9DVFJMMF9TVV9TVE8sIGxjbnQpKTsK PiArCj4gKwloY250ID0gYXNwZWVkX2kzY19uc190b19jbnQoQVNQRUVEX0kzQ19QSFlfSTJDX0ZN UF9TQ0xfSF9OUywgcGVyaW9kX25zKTsKPiArCWxjbnQgPSBhc3BlZWRfaTNjX25zX3RvX2NudChB U1BFRURfSTNDX1BIWV9JMkNfRk1QX1NDTF9MX05TLCBwZXJpb2RfbnMpOwo+ICsJYXNwZWVkX2kz Y19waHlfd3JpdGUoaGNpLCBBU1BFRURfSTNDX1BIWV9JMkNfRk1QX0NUUkwxLAo+ICsJCQkgICAg IEZJRUxEX1BSRVAoQVNQRUVEX0kzQ19QSFlfSTJDX0ZNUF9DVFJMMV9TQ0xfSCwgaGNudCkgfAo+ ICsJCQkgICAgIEZJRUxEX1BSRVAoQVNQRUVEX0kzQ19QSFlfSTJDX0ZNUF9DVFJMMV9TQ0xfTCwg bGNudCkpOwo+ICsJYXNwZWVkX2kzY19waHlfd3JpdGUoaGNpLCBBU1BFRURfSTNDX1BIWV9JMkNf Rk1QX0NUUkwyLAo+ICsJCQkgICAgIEZJRUxEX1BSRVAoQVNQRUVEX0kzQ19QSFlfSTJDX0ZNUF9D VFJMMl9BQ0tfSCwgaGNudCkgfAo+ICsJCQkgICAgIEZJRUxEX1BSRVAoQVNQRUVEX0kzQ19QSFlf STJDX0ZNUF9DVFJMMl9BQ0tfTCwgaGNudCkpOwoKW1NldmVyaXR5OiBNZWRpdW1dClNob3VsZCBB U1BFRURfSTNDX1BIWV9JMkNfRk1fQ1RSTDJfQUNLX0wgYW5kCkFTUEVFRF9JM0NfUEhZX0kyQ19G TVBfQ1RSTDJfQUNLX0wgYmUgcHJvZ3JhbW1lZCB3aXRoIGxjbnQgaW5zdGVhZCBvZiBoY250LApt YXRjaGluZyBBU1BFRURfSTNDX1BIWV9JM0NfT0RfQ1RSTDJfQUNLX0wgZnVydGhlciBkb3duPyAg UGFzc2luZyBoY250IHNldHMKdGhlIEkyQyBBQ0sgU0NMIGxvdyBwZXJpb2QgdG8gMTEzMCBucyBp biBGYXN0IE1vZGUgKGJlbG93IHRoZSAxMzAwIG5zIEkyQwptaW5pbXVtIHRMT1cpIGFuZCAzODAg bnMgaW4gRmFzdCBNb2RlIFBsdXMgKGJlbG93IHRoZSA1MDAgbnMgbWluaW11bSkuCgotLSAKU2Fz aGlrbyBBSSByZXZpZXcgwrcgaHR0cHM6Ly9zYXNoaWtvLmRldi8jL3BhdGNoc2V0LzIwMjYxMTEx LWI0LWkzYy1oY2ktYXN0MjcwMC12Mi0wLTRkOGZmZjVjNTE5NkBhc3BlZWR0ZWNoLmNvbT9wYXJ0 PTYKCi0tIApsaW51eC1pM2MgbWFpbGluZyBsaXN0CmxpbnV4LWkzY0BsaXN0cy5pbmZyYWRlYWQu b3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtaTNj Cg==