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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9C010C636D4 for ; Mon, 6 Feb 2023 20:09:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229960AbjBFUJK (ORCPT ); Mon, 6 Feb 2023 15:09:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47368 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229963AbjBFUJI (ORCPT ); Mon, 6 Feb 2023 15:09:08 -0500 Received: from mail-pj1-x102e.google.com (mail-pj1-x102e.google.com [IPv6:2607:f8b0:4864:20::102e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C53D71DBBE for ; Mon, 6 Feb 2023 12:09:05 -0800 (PST) Received: by mail-pj1-x102e.google.com with SMTP id d6-20020a17090ae28600b00230aa72904fso4379888pjz.5 for ; Mon, 06 Feb 2023 12:09:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=g8zQ21lgm/+hysyLZDWkcJECUGjBC4CaZ4mgsX1s5q0=; b=O9Ya8X/CYW79qvsDBwCU4QasH/GJVsFJdbauSxy3ALcMP6Td/e++Sr2/Kk6Y/0Bi8A HExajCOknNGEaSGBqbSIS45SYN+jvrVOYSflvwXC3/9Qjgfb0vkmu/mC3BtSnmYO9Azo YPq/Mke+7pPZKPUQgwb8ALjXPF1KrfIvJzJ39kARqaWQOILz2ekiU1kAmdv7kLwwoYFq Swvoy0nXykBQyGQaOv/e5ca1b3v6nwtm5i0x5rsR/qHbJEI7HvDPoGHOVfAIrnCwXGAV Ve4YLBD8wxoPxTg47Ch0cATZ7vPGTBikjD33kVkmh+AQic7pGD32UqcBXm345/EvJKI8 8QpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=g8zQ21lgm/+hysyLZDWkcJECUGjBC4CaZ4mgsX1s5q0=; b=scg6su9sJwrJCsGpiAZUQObDZg+1RkFrUX1KVSo9Qjp7lJSzEXc7NSayyyZGFAFFr2 LnOSEc3GwGB+wyagwhfu96X4lB5OMF6VyNdAqpL8lZanFY7dl/nbrb2MZXM3Bi6/BO+2 xpWpXA3LAmg98dHktdSXj9oQbHTRl/mPVGRosz8HMPFmQB5DWJqsvVst49eUCzBku12i LtzmfnP/Qx4IS6gIFATNjDverkZdvWzM4LehSuIV4RuQf3SEWLxw3LUVCECeTZqa5+Q3 kVCVyuJkQ+zrau/A+znbZ/rIozAIS8Wf6yUtgvpilSJfSeKFuYPtP8EphY0D8aV5xy6J T83w== X-Gm-Message-State: AO0yUKWN+k9/qv36RwCcnU4W122DrPe7BhGbVKkQ6auB7KOJzwxHW89g r82EgSgjoEieS5er9aSt52SOqDH9/WY95HOqCNXoIw== X-Google-Smtp-Source: AK7set/KBPOtO+P54MX/LciN9urMG1z25fzyBFed50xf4hc+H6GtlXs0JkU2MZxc6mAROsbMMvV71vF/eDS3vFQiFbE= X-Received: by 2002:a17:90a:187:b0:22c:ad5e:e1e3 with SMTP id 7-20020a17090a018700b0022cad5ee1e3mr3608581pjc.141.1675714144798; Mon, 06 Feb 2023 12:09:04 -0800 (PST) MIME-Version: 1.0 References: <20230127001141.407071-1-saravanak@google.com> <20230130085542.38546-1-naresh.kamboju@linaro.org> <20230131101813.goaoy32qvrowvyyb@bogus> <20230206103912.7db5ed72@xps-13> In-Reply-To: <20230206103912.7db5ed72@xps-13> From: Saravana Kannan Date: Mon, 6 Feb 2023 12:08:28 -0800 Message-ID: Subject: Re: [PATCH v2 00/11] fw_devlink improvements To: Miquel Raynal Cc: Maxim Kiselev , Sudeep Holla , Naresh Kamboju , abel.vesa@linaro.org, alexander.stein@ew.tq-group.com, andriy.shevchenko@linux.intel.com, brgl@bgdev.pl, colin.foster@in-advantage.com, cristian.marussi@arm.com, devicetree@vger.kernel.org, dianders@chromium.org, djrscally@gmail.com, dmitry.baryshkov@linaro.org, festevam@gmail.com, fido_max@inbox.ru, frowand.list@gmail.com, geert+renesas@glider.be, geert@linux-m68k.org, gregkh@linuxfoundation.org, heikki.krogerus@linux.intel.com, jpb@kernel.org, jstultz@google.com, kernel-team@android.com, kernel@pengutronix.de, lenb@kernel.org, linus.walleij@linaro.org, linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-gpio@vger.kernel.org, linux-imx@nxp.com, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux@roeck-us.net, lkft@linaro.org, luca.weiss@fairphone.com, magnus.damm@gmail.com, martin.kepplinger@puri.sm, maz@kernel.org, rafael@kernel.org, robh+dt@kernel.org, s.hauer@pengutronix.de, sakari.ailus@linux.intel.com, shawnguo@kernel.org, tglx@linutronix.de, tony@atomide.com, Srinivas Kandagatla Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org On Mon, Feb 6, 2023 at 1:39 AM Miquel Raynal wr= ote: > > Hi Saravana, > > + Srinivas, nvmem maintainer > > saravanak@google.com wrote on Sun, 5 Feb 2023 17:32:57 -0800: > > > On Fri, Feb 3, 2023 at 1:39 AM Maxim Kiselev wr= ote: > > > > > > =D0=BF=D1=82, 3 =D1=84=D0=B5=D0=B2=D1=80. 2023 =D0=B3. =D0=B2 09:07, = Saravana Kannan : > > > > > > > > On Thu, Feb 2, 2023 at 9:36 AM Maxim Kiselev wrote: > > > > > > > > > > Hi Saravana, > > > > > > > > > > > Can you try the patch at the end of this email under these > > > > > > configurations and tell me which ones fail vs pass? I don't nee= d logs > > > > > > > > > > I did these tests and here is the results: > > > > > > > > Did you hand edit the In-Reply-To: in the header? Because in the > > > > thread you are reply to the wrong email, but the context in your em= ail > > > > seems to be from the right email. > > > > > > > > For example, see how your reply isn't under the email you are reply= ing > > > > to in this thread overview: > > > > https://lore.kernel.org/lkml/20230127001141.407071-1-saravanak@goog= le.com/#r > > > > > > > > > 1. On top of this series - Not works > > > > > 2. Without this series - Works > > > > > 3. On top of the series with the fwnode_dev_initialized() deleted= - Not works > > > > > 4. Without this series, with the fwnode_dev_initialized() deleted= - Works > > > > > > > > > > So your nvmem/core.c patch helps only when it is applied without = the series. > > > > > But despite the fact that this helps to avoid getting stuck at pr= obing > > > > > my ethernet device, there is still regression. > > > > > > > > > > When the ethernet module is loaded it takes a lot of time to drop= dependency > > > > > from the nvmem-cell with mac address. > > > > > > > > > > Please look at the kernel logs below. > > > > > > > > The kernel logs below really aren't that useful for me in their > > > > current state. See more below. > > > > > > > > ---8<---- --->8---- > > > > > > > > > P.S. Your nvmem patch definitely helps to avoid a device probe st= uck > > > > > but look like it is not best way to solve a problem which we disc= ussed > > > > > in the MTD thread. > > > > > > > > > > P.P.S. Also I don't know why your nvmem-cell patch doesn't help w= hen it was > > > > > applied on top of this series. Maybe I missed something. > > > > > > > > Yeah, I'm not too sure if the test was done correctly. You also did= n't > > > > answer my question about the dts from my earlier email. > > > > https://lore.kernel.org/lkml/CAGETcx8FpmbaRm2CCwqt3BRBpgbogwP5gNB+i= A5OEtuxWVTNLA@mail.gmail.com/#t > > > > > > > > So, can you please retest config 1 with all pr_debug and dev_dbg in > > > > drivers/core/base.c changed to the _info variants? And then share t= he > > > > kernel log from the beginning of boot? Maybe attach it to the email= so > > > > it doesn't get word wrapped by your email client. And please point = me > > > > to the .dts that corresponds to your board. Without that, I can't > > > > debug much. > > > > > > > > Thanks, > > > > Saravana > > > > > > > Did you hand edit the In-Reply-To: in the header? Because in the > > > > thread you are reply to the wrong email, but the context in your em= ail > > > > seems to be from the right email. > > > > > > Sorry for that, it seems like I accidently deleted it. > > > > > > > So, can you please retest config 1 with all pr_debug and dev_dbg in > > > > drivers/core/base.c changed to the _info variants? And then share t= he > > > > kernel log from the beginning of boot? Maybe attach it to the email= so > > > > it doesn't get word wrapped by your email client. And please point = me > > > > to the .dts that corresponds to your board. Without that, I can't > > > > debug much. > > > > > > Ok, I retested config 1 with all _debug logs changed to the _info. I > > > added the kernel log and the dts file to the attachment of this email= . > > > > Ah, so your device is not supported/present upstream? Even though it's > > not upstream, I'll help fix this because it should fix what I believe > > are unreported issues in upstream. > > > > Ok I know why configs 1 - 4 behaved the way they did and why my test > > patch didn't help. > > > > After staring at mtd/nvmem code for a few hours I think mtd/nvmem > > interaction is kind of a mess. > > nvmem is a recent subsystem but mtd carries a lot of legacy stuff we > cannot really re-wire without breaking users, so nvmem on top of mtd > of course inherit from the fragile designs in place. Thanks for the context. Yeah, I figured. That's why I explicitly limited my comment to "interaction". Although, I'd love to see the MTD parsers all be converted to proper drivers that probe. MTD is essentially repeating the driver matching logic. I think it can be cleaned up to move to proper drivers and still not break backward compatibility. Not saying it'll be trivial, but it should be possible. Ironically MTD uses mtd_class but has real drivers that work on the device (compared to nvmem_bus below). > > mtd core creates "partition" platform > > devices (including for nvmem-cells) that are probed by drivers in > > drivers/nvmem. However, there's no driver for "nvmem-cells" partition > > platform device. However, the nvmem core creates nvmem_device when > > nvmem_register() is called by MTD or these partition platform devices > > created by MTD. But these nvmem_devices are added to a nvmem_bus but > > the bus has no means to even register a driver (it should really be a > > nvmem_class and not nvmem_bus). > > Srinivas, do you think we could change this? Yeah, this part gets a bit tricky. It depends on whether the sysfs files for nvmem devices is considered an ABI. Changing from bus to class would change the sysfs path for nvmem devices from: /sys/class/nvmem to /sys/bus/nvmem > > And the nvmem_device sometimes points > > to the DT node of the MTD device or sometimes the partition platform > > devices or maybe no DT node at all. > > I guess this comes from the fact that this is not strongly defined in > mtd and depends on the situation (not mentioning 20 years of history > there as well). "mtd" is a bit inconsistent on what it means. Older > designs mixed: controllers, ECC engines when relevant and memories; > while these three components are completely separated. Hence > sometimes the mtd device ends up being the top level controller, > sometimes it's just one partition... > > But I'm surprised not all of them point to a DT node. Could you show us > an example? Because that might likely be unexpected (or perhaps I am > missing something). Well, the logic that sets the DT node for nvmem_device is like so: if (config->of_node) nvmem->dev.of_node =3D config->of_node; else if (!config->no_of_node) nvmem->dev.of_node =3D config->dev->of_node; So there's definitely a path (where both if's could be false) where the DT node will not get set. I don't know if that path is possible with the existing users of nvmem_register(), but it's definitely possible. > > So it's a mess of multiple devices pointing to the same DT node with > > no clear way to identify which ones will point to a DT node and which > > ones will probe and which ones won't. In the future, we shouldn't > > allow adding new compatible strings for partitions for which we don't > > plan on adding nvmem drivers. > > > > Can you give the patch at the end of the email a shot? It should fix > > the issue with this series and without this series. It just avoids > > this whole mess by not creating useless platform device for > > nvmem-cells compatible DT nodes. > > Thanks a lot for your help. No problem. I want fw_devlink to work for everyone. > > > > Thanks, > > Saravana > > > > diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c > > index d442fa94c872..88a213f4d651 100644 > > --- a/drivers/mtd/mtdpart.c > > +++ b/drivers/mtd/mtdpart.c > > @@ -577,6 +577,7 @@ static int mtd_part_of_parse(struct mtd_info *maste= r, > > { > > struct mtd_part_parser *parser; > > struct device_node *np; > > + struct device_node *child; > > struct property *prop; > > struct device *dev; > > const char *compat; > > @@ -594,6 +595,10 @@ static int mtd_part_of_parse(struct mtd_info *mast= er, > > else > > np =3D of_get_child_by_name(np, "partitions"); > > > > + for_each_child_of_node(np, child) > > + if (of_device_is_compatible(child, "nvmem-cells")) > > + of_node_set_flag(child, OF_POPULATED); > > What about a comment explaining why we need that in the final patch > (with a comment)? Otherwise it's a little bit obscure. This wasn't meant to be reviewed :) Just a quick patch to make sure I'm going down the right path. Once Maxim confirms I was going to roll this into a proper patch. But point noted. Will add a comment. Thanks, Saravana 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 F15E2C636D3 for ; Mon, 6 Feb 2023 20:10:08 +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:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=tTV5K15L3z+nRGKYg7vke3kqsH1FvS92KFTwtZMphRA=; b=z9mb7/405I8HAs Ih5DeCHc4IZmjJ16I3PJul1wzq8/FHMPzReLo2FP4p2zD+2umS5LvqZYHRgL8J1bI+B19f67FVhBT z3sO/3NTD5C0Y5WJKo3i7hYr+hV6/1Fw3r+fOWU5vtGxgihShvy9qRSP8WIQOH8BxZg3WX6R16HRy YVkuE1Lk6zIg0ilu3U0zOsUWoIoJwto3+Ks1RL0qs8tg61qJnmI2NKrkD8fwy7JAGlSIYtW6Wc6Yc laT8ibEY9OYXNU54pUzunAbiX74KDsimjUWulmXqO8BNhyDWH5q9qWurwlquTYubXCNllnR191l9K VGa49BaeCGdXEdNj8idw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pP7nb-009ntG-6d; Mon, 06 Feb 2023 20:09:11 +0000 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pP7nX-009nsX-AN for linux-arm-kernel@lists.infradead.org; Mon, 06 Feb 2023 20:09:09 +0000 Received: by mail-pl1-x633.google.com with SMTP id w5so3361713plg.8 for ; Mon, 06 Feb 2023 12:09:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=g8zQ21lgm/+hysyLZDWkcJECUGjBC4CaZ4mgsX1s5q0=; b=O9Ya8X/CYW79qvsDBwCU4QasH/GJVsFJdbauSxy3ALcMP6Td/e++Sr2/Kk6Y/0Bi8A HExajCOknNGEaSGBqbSIS45SYN+jvrVOYSflvwXC3/9Qjgfb0vkmu/mC3BtSnmYO9Azo YPq/Mke+7pPZKPUQgwb8ALjXPF1KrfIvJzJ39kARqaWQOILz2ekiU1kAmdv7kLwwoYFq Swvoy0nXykBQyGQaOv/e5ca1b3v6nwtm5i0x5rsR/qHbJEI7HvDPoGHOVfAIrnCwXGAV Ve4YLBD8wxoPxTg47Ch0cATZ7vPGTBikjD33kVkmh+AQic7pGD32UqcBXm345/EvJKI8 8QpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=g8zQ21lgm/+hysyLZDWkcJECUGjBC4CaZ4mgsX1s5q0=; b=4/rn23xp1gt7JjVoTTjLevXZes0thZh69m782r4BD+97i3uyYEVvlOijFyHnRwl7tN bHtOrg0Gksr5s/YoEsdcXUByB/4exlyelKvLg7KmL1Y3rwYvKWZdnnFfY3ld4my2qZuW SoGVl0b8K4NScj2FhaW6VcuedAUOR5Smt4z99QI980sqXv6+KoKEHLOqAl+GvgX9bNEt 14SxEmxhigTjtRPbRCbgnAxWFxurY6EuZTzWNEjHoe6SV283grKqJuRb3ReuONNfIysT XUGjewqP6JNj0/Wlf/4oY1/v+8FrAjZ2aSRgpkUu+dr3TJc4QUPBhPXJYky/9STf0wOt QvaA== X-Gm-Message-State: AO0yUKWDs4gT8wA6Hr7ReoAv5+K2GbDwlxDElC/TPP2iua4dSs4hEOnd GyhN7a43vt47h9vVwaINCHtK9rPrDBroeyoGPvYeOQ== X-Google-Smtp-Source: AK7set/KBPOtO+P54MX/LciN9urMG1z25fzyBFed50xf4hc+H6GtlXs0JkU2MZxc6mAROsbMMvV71vF/eDS3vFQiFbE= X-Received: by 2002:a17:90a:187:b0:22c:ad5e:e1e3 with SMTP id 7-20020a17090a018700b0022cad5ee1e3mr3608581pjc.141.1675714144798; Mon, 06 Feb 2023 12:09:04 -0800 (PST) MIME-Version: 1.0 References: <20230127001141.407071-1-saravanak@google.com> <20230130085542.38546-1-naresh.kamboju@linaro.org> <20230131101813.goaoy32qvrowvyyb@bogus> <20230206103912.7db5ed72@xps-13> In-Reply-To: <20230206103912.7db5ed72@xps-13> From: Saravana Kannan Date: Mon, 6 Feb 2023 12:08:28 -0800 Message-ID: Subject: Re: [PATCH v2 00/11] fw_devlink improvements To: Miquel Raynal Cc: Maxim Kiselev , Sudeep Holla , Naresh Kamboju , abel.vesa@linaro.org, alexander.stein@ew.tq-group.com, andriy.shevchenko@linux.intel.com, brgl@bgdev.pl, colin.foster@in-advantage.com, cristian.marussi@arm.com, devicetree@vger.kernel.org, dianders@chromium.org, djrscally@gmail.com, dmitry.baryshkov@linaro.org, festevam@gmail.com, fido_max@inbox.ru, frowand.list@gmail.com, geert+renesas@glider.be, geert@linux-m68k.org, gregkh@linuxfoundation.org, heikki.krogerus@linux.intel.com, jpb@kernel.org, jstultz@google.com, kernel-team@android.com, kernel@pengutronix.de, lenb@kernel.org, linus.walleij@linaro.org, linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-gpio@vger.kernel.org, linux-imx@nxp.com, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux@roeck-us.net, lkft@linaro.org, luca.weiss@fairphone.com, magnus.damm@gmail.com, martin.kepplinger@puri.sm, maz@kernel.org, rafael@kernel.org, robh+dt@kernel.org, s.hauer@pengutronix.de, sakari.ailus@linux.intel.com, shawnguo@kernel.org, tglx@linutronix.de, tony@atomide.com, Srinivas Kandagatla X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230206_120907_383701_DB016C7C X-CRM114-Status: GOOD ( 71.46 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gTW9uLCBGZWIgNiwgMjAyMyBhdCAxOjM5IEFNIE1pcXVlbCBSYXluYWwgPG1pcXVlbC5yYXlu YWxAYm9vdGxpbi5jb20+IHdyb3RlOgo+Cj4gSGkgU2FyYXZhbmEsCj4KPiArIFNyaW5pdmFzLCBu dm1lbSBtYWludGFpbmVyCj4KPiBzYXJhdmFuYWtAZ29vZ2xlLmNvbSB3cm90ZSBvbiBTdW4sIDUg RmViIDIwMjMgMTc6MzI6NTcgLTA4MDA6Cj4KPiA+IE9uIEZyaSwgRmViIDMsIDIwMjMgYXQgMToz OSBBTSBNYXhpbSBLaXNlbGV2IDxiaWd1bmNsZW1heEBnbWFpbC5jb20+IHdyb3RlOgo+ID4gPgo+ ID4gPiDQv9GCLCAzINGE0LXQstGALiAyMDIzINCzLiDQsiAwOTowNywgU2FyYXZhbmEgS2FubmFu IDxzYXJhdmFuYWtAZ29vZ2xlLmNvbT46Cj4gPiA+ID4KPiA+ID4gPiBPbiBUaHUsIEZlYiAyLCAy MDIzIGF0IDk6MzYgQU0gTWF4aW0gS2lzZWxldiA8YmlndW5jbGVtYXhAZ21haWwuY29tPiB3cm90 ZToKPiA+ID4gPiA+Cj4gPiA+ID4gPiBIaSBTYXJhdmFuYSwKPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ IENhbiB5b3UgdHJ5IHRoZSBwYXRjaCBhdCB0aGUgZW5kIG9mIHRoaXMgZW1haWwgdW5kZXIgdGhl c2UKPiA+ID4gPiA+ID4gY29uZmlndXJhdGlvbnMgYW5kIHRlbGwgbWUgd2hpY2ggb25lcyBmYWls IHZzIHBhc3M/IEkgZG9uJ3QgbmVlZCBsb2dzCj4gPiA+ID4gPgo+ID4gPiA+ID4gSSBkaWQgdGhl c2UgdGVzdHMgYW5kIGhlcmUgaXMgdGhlIHJlc3VsdHM6Cj4gPiA+ID4KPiA+ID4gPiBEaWQgeW91 IGhhbmQgZWRpdCB0aGUgSW4tUmVwbHktVG86IGluIHRoZSBoZWFkZXI/IEJlY2F1c2UgaW4gdGhl Cj4gPiA+ID4gdGhyZWFkIHlvdSBhcmUgcmVwbHkgdG8gdGhlIHdyb25nIGVtYWlsLCBidXQgdGhl IGNvbnRleHQgaW4geW91ciBlbWFpbAo+ID4gPiA+IHNlZW1zIHRvIGJlIGZyb20gdGhlIHJpZ2h0 IGVtYWlsLgo+ID4gPiA+Cj4gPiA+ID4gRm9yIGV4YW1wbGUsIHNlZSBob3cgeW91ciByZXBseSBp c24ndCB1bmRlciB0aGUgZW1haWwgeW91IGFyZSByZXBseWluZwo+ID4gPiA+IHRvIGluIHRoaXMg dGhyZWFkIG92ZXJ2aWV3Ogo+ID4gPiA+IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xrbWwvMjAy MzAxMjcwMDExNDEuNDA3MDcxLTEtc2FyYXZhbmFrQGdvb2dsZS5jb20vI3IKPiA+ID4gPgo+ID4g PiA+ID4gMS4gT24gdG9wIG9mIHRoaXMgc2VyaWVzIC0gTm90IHdvcmtzCj4gPiA+ID4gPiAyLiBX aXRob3V0IHRoaXMgc2VyaWVzICAgIC0gV29ya3MKPiA+ID4gPiA+IDMuIE9uIHRvcCBvZiB0aGUg c2VyaWVzIHdpdGggdGhlIGZ3bm9kZV9kZXZfaW5pdGlhbGl6ZWQoKSBkZWxldGVkIC0gTm90IHdv cmtzCj4gPiA+ID4gPiA0LiBXaXRob3V0IHRoaXMgc2VyaWVzLCB3aXRoIHRoZSBmd25vZGVfZGV2 X2luaXRpYWxpemVkKCkgZGVsZXRlZCAgLSBXb3Jrcwo+ID4gPiA+ID4KPiA+ID4gPiA+IFNvIHlv dXIgbnZtZW0vY29yZS5jIHBhdGNoIGhlbHBzIG9ubHkgd2hlbiBpdCBpcyBhcHBsaWVkIHdpdGhv dXQgdGhlIHNlcmllcy4KPiA+ID4gPiA+IEJ1dCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgdGhpcyBo ZWxwcyB0byBhdm9pZCBnZXR0aW5nIHN0dWNrIGF0IHByb2JpbmcKPiA+ID4gPiA+IG15IGV0aGVy bmV0IGRldmljZSwgdGhlcmUgaXMgc3RpbGwgcmVncmVzc2lvbi4KPiA+ID4gPiA+Cj4gPiA+ID4g PiBXaGVuIHRoZSBldGhlcm5ldCBtb2R1bGUgaXMgbG9hZGVkIGl0IHRha2VzIGEgbG90IG9mIHRp bWUgdG8gZHJvcCBkZXBlbmRlbmN5Cj4gPiA+ID4gPiBmcm9tIHRoZSBudm1lbS1jZWxsIHdpdGgg bWFjIGFkZHJlc3MuCj4gPiA+ID4gPgo+ID4gPiA+ID4gUGxlYXNlIGxvb2sgYXQgdGhlIGtlcm5l bCBsb2dzIGJlbG93Lgo+ID4gPiA+Cj4gPiA+ID4gVGhlIGtlcm5lbCBsb2dzIGJlbG93IHJlYWxs eSBhcmVuJ3QgdGhhdCB1c2VmdWwgZm9yIG1lIGluIHRoZWlyCj4gPiA+ID4gY3VycmVudCBzdGF0 ZS4gU2VlIG1vcmUgYmVsb3cuCj4gPiA+ID4KPiA+ID4gPiAtLS04PC0tLS0gPHNuaXA+IC0tLT44 LS0tLQo+ID4gPiA+Cj4gPiA+ID4gPiBQLlMuIFlvdXIgbnZtZW0gcGF0Y2ggZGVmaW5pdGVseSBo ZWxwcyB0byBhdm9pZCBhIGRldmljZSBwcm9iZSBzdHVjawo+ID4gPiA+ID4gYnV0IGxvb2sgbGlr ZSBpdCBpcyBub3QgYmVzdCB3YXkgdG8gc29sdmUgYSBwcm9ibGVtIHdoaWNoIHdlIGRpc2N1c3Nl ZAo+ID4gPiA+ID4gaW4gdGhlIE1URCB0aHJlYWQuCj4gPiA+ID4gPgo+ID4gPiA+ID4gUC5QLlMu IEFsc28gSSBkb24ndCBrbm93IHdoeSB5b3VyIG52bWVtLWNlbGwgcGF0Y2ggZG9lc24ndCBoZWxw IHdoZW4gaXQgd2FzCj4gPiA+ID4gPiBhcHBsaWVkIG9uIHRvcCBvZiB0aGlzIHNlcmllcy4gTWF5 YmUgSSBtaXNzZWQgc29tZXRoaW5nLgo+ID4gPiA+Cj4gPiA+ID4gWWVhaCwgSSdtIG5vdCB0b28g c3VyZSBpZiB0aGUgdGVzdCB3YXMgZG9uZSBjb3JyZWN0bHkuIFlvdSBhbHNvIGRpZG4ndAo+ID4g PiA+IGFuc3dlciBteSBxdWVzdGlvbiBhYm91dCB0aGUgZHRzIGZyb20gbXkgZWFybGllciBlbWFp bC4KPiA+ID4gPiBodHRwczovL2xvcmUua2VybmVsLm9yZy9sa21sL0NBR0VUY3g4RnBtYmFSbTJD Q3dxdDNCUkJwZ2JvZ3dQNWdOQitpQTVPRXR1eFdWVE5MQUBtYWlsLmdtYWlsLmNvbS8jdAo+ID4g PiA+Cj4gPiA+ID4gU28sIGNhbiB5b3UgcGxlYXNlIHJldGVzdCBjb25maWcgMSB3aXRoIGFsbCBw cl9kZWJ1ZyBhbmQgZGV2X2RiZyBpbgo+ID4gPiA+IGRyaXZlcnMvY29yZS9iYXNlLmMgY2hhbmdl ZCB0byB0aGUgX2luZm8gdmFyaWFudHM/IEFuZCB0aGVuIHNoYXJlIHRoZQo+ID4gPiA+IGtlcm5l bCBsb2cgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGJvb3Q/IE1heWJlIGF0dGFjaCBpdCB0byB0aGUg ZW1haWwgc28KPiA+ID4gPiBpdCBkb2Vzbid0IGdldCB3b3JkIHdyYXBwZWQgYnkgeW91ciBlbWFp bCBjbGllbnQuIEFuZCBwbGVhc2UgcG9pbnQgbWUKPiA+ID4gPiB0byB0aGUgLmR0cyB0aGF0IGNv cnJlc3BvbmRzIHRvIHlvdXIgYm9hcmQuIFdpdGhvdXQgdGhhdCwgSSBjYW4ndAo+ID4gPiA+IGRl YnVnIG11Y2guCj4gPiA+ID4KPiA+ID4gPiBUaGFua3MsCj4gPiA+ID4gU2FyYXZhbmEKPiA+ID4K PiA+ID4gPiBEaWQgeW91IGhhbmQgZWRpdCB0aGUgSW4tUmVwbHktVG86IGluIHRoZSBoZWFkZXI/ IEJlY2F1c2UgaW4gdGhlCj4gPiA+ID4gdGhyZWFkIHlvdSBhcmUgcmVwbHkgdG8gdGhlIHdyb25n IGVtYWlsLCBidXQgdGhlIGNvbnRleHQgaW4geW91ciBlbWFpbAo+ID4gPiA+IHNlZW1zIHRvIGJl IGZyb20gdGhlIHJpZ2h0IGVtYWlsLgo+ID4gPgo+ID4gPiBTb3JyeSBmb3IgdGhhdCwgaXQgc2Vl bXMgbGlrZSBJIGFjY2lkZW50bHkgZGVsZXRlZCBpdC4KPiA+ID4KPiA+ID4gPiBTbywgY2FuIHlv dSBwbGVhc2UgcmV0ZXN0IGNvbmZpZyAxIHdpdGggYWxsIHByX2RlYnVnIGFuZCBkZXZfZGJnIGlu Cj4gPiA+ID4gZHJpdmVycy9jb3JlL2Jhc2UuYyBjaGFuZ2VkIHRvIHRoZSBfaW5mbyB2YXJpYW50 cz8gQW5kIHRoZW4gc2hhcmUgdGhlCj4gPiA+ID4ga2VybmVsIGxvZyBmcm9tIHRoZSBiZWdpbm5p bmcgb2YgYm9vdD8gTWF5YmUgYXR0YWNoIGl0IHRvIHRoZSBlbWFpbCBzbwo+ID4gPiA+IGl0IGRv ZXNuJ3QgZ2V0IHdvcmQgd3JhcHBlZCBieSB5b3VyIGVtYWlsIGNsaWVudC4gQW5kIHBsZWFzZSBw b2ludCBtZQo+ID4gPiA+IHRvIHRoZSAuZHRzIHRoYXQgY29ycmVzcG9uZHMgdG8geW91ciBib2Fy ZC4gV2l0aG91dCB0aGF0LCBJIGNhbid0Cj4gPiA+ID4gZGVidWcgbXVjaC4KPiA+ID4KPiA+ID4g T2ssIEkgcmV0ZXN0ZWQgY29uZmlnIDEgd2l0aCBhbGwgX2RlYnVnIGxvZ3MgY2hhbmdlZCB0byB0 aGUgX2luZm8uIEkKPiA+ID4gYWRkZWQgdGhlIGtlcm5lbCBsb2cgYW5kIHRoZSBkdHMgZmlsZSB0 byB0aGUgYXR0YWNobWVudCBvZiB0aGlzIGVtYWlsLgo+ID4KPiA+IEFoLCBzbyB5b3VyIGRldmlj ZSBpcyBub3Qgc3VwcG9ydGVkL3ByZXNlbnQgdXBzdHJlYW0/IEV2ZW4gdGhvdWdoIGl0J3MKPiA+ IG5vdCB1cHN0cmVhbSwgSSdsbCBoZWxwIGZpeCB0aGlzIGJlY2F1c2UgaXQgc2hvdWxkIGZpeCB3 aGF0IEkgYmVsaWV2ZQo+ID4gYXJlIHVucmVwb3J0ZWQgaXNzdWVzIGluIHVwc3RyZWFtLgo+ID4K PiA+IE9rIEkga25vdyB3aHkgY29uZmlncyAxIC0gNCBiZWhhdmVkIHRoZSB3YXkgdGhleSBkaWQg YW5kIHdoeSBteSB0ZXN0Cj4gPiBwYXRjaCBkaWRuJ3QgaGVscC4KPiA+Cj4gPiBBZnRlciBzdGFy aW5nIGF0IG10ZC9udm1lbSBjb2RlIGZvciBhIGZldyBob3VycyBJIHRoaW5rIG10ZC9udm1lbQo+ ID4gaW50ZXJhY3Rpb24gaXMga2luZCBvZiBhIG1lc3MuCj4KPiBudm1lbSBpcyBhIHJlY2VudCBz dWJzeXN0ZW0gYnV0IG10ZCBjYXJyaWVzIGEgbG90IG9mIGxlZ2FjeSBzdHVmZiB3ZQo+IGNhbm5v dCByZWFsbHkgcmUtd2lyZSB3aXRob3V0IGJyZWFraW5nIHVzZXJzLCBzbyBudm1lbSBvbiB0b3Ag b2YgbXRkCj4gb2YgY291cnNlIGluaGVyaXQgZnJvbSB0aGUgZnJhZ2lsZSBkZXNpZ25zIGluIHBs YWNlLgoKVGhhbmtzIGZvciB0aGUgY29udGV4dC4gWWVhaCwgSSBmaWd1cmVkLiBUaGF0J3Mgd2h5 IEkgZXhwbGljaXRseQpsaW1pdGVkIG15IGNvbW1lbnQgdG8gImludGVyYWN0aW9uIi4gQWx0aG91 Z2gsIEknZCBsb3ZlIHRvIHNlZSB0aGUgTVRECnBhcnNlcnMgYWxsIGJlIGNvbnZlcnRlZCB0byBw cm9wZXIgZHJpdmVycyB0aGF0IHByb2JlLiBNVEQgaXMKZXNzZW50aWFsbHkgcmVwZWF0aW5nIHRo ZSBkcml2ZXIgbWF0Y2hpbmcgbG9naWMuIEkgdGhpbmsgaXQgY2FuIGJlCmNsZWFuZWQgdXAgdG8g bW92ZSB0byBwcm9wZXIgZHJpdmVycyBhbmQgc3RpbGwgbm90IGJyZWFrIGJhY2t3YXJkCmNvbXBh dGliaWxpdHkuIE5vdCBzYXlpbmcgaXQnbGwgYmUgdHJpdmlhbCwgYnV0IGl0IHNob3VsZCBiZSBw b3NzaWJsZS4KSXJvbmljYWxseSBNVEQgdXNlcyBtdGRfY2xhc3MgYnV0IGhhcyByZWFsIGRyaXZl cnMgdGhhdCB3b3JrIG9uIHRoZQpkZXZpY2UgKGNvbXBhcmVkIHRvIG52bWVtX2J1cyBiZWxvdyku Cgo+ID4gbXRkIGNvcmUgY3JlYXRlcyAicGFydGl0aW9uIiBwbGF0Zm9ybQo+ID4gZGV2aWNlcyAo aW5jbHVkaW5nIGZvciBudm1lbS1jZWxscykgdGhhdCBhcmUgcHJvYmVkIGJ5IGRyaXZlcnMgaW4K PiA+IGRyaXZlcnMvbnZtZW0uIEhvd2V2ZXIsIHRoZXJlJ3Mgbm8gZHJpdmVyIGZvciAibnZtZW0t Y2VsbHMiIHBhcnRpdGlvbgo+ID4gcGxhdGZvcm0gZGV2aWNlLiBIb3dldmVyLCB0aGUgbnZtZW0g Y29yZSBjcmVhdGVzIG52bWVtX2RldmljZSB3aGVuCj4gPiBudm1lbV9yZWdpc3RlcigpIGlzIGNh bGxlZCBieSBNVEQgb3IgdGhlc2UgcGFydGl0aW9uIHBsYXRmb3JtIGRldmljZXMKPiA+IGNyZWF0 ZWQgYnkgTVRELiBCdXQgdGhlc2UgbnZtZW1fZGV2aWNlcyBhcmUgYWRkZWQgdG8gYSBudm1lbV9i dXMgYnV0Cj4gPiB0aGUgYnVzIGhhcyBubyBtZWFucyB0byBldmVuIHJlZ2lzdGVyIGEgZHJpdmVy IChpdCBzaG91bGQgcmVhbGx5IGJlIGEKPiA+IG52bWVtX2NsYXNzIGFuZCBub3QgbnZtZW1fYnVz KS4KPgo+IFNyaW5pdmFzLCBkbyB5b3UgdGhpbmsgd2UgY291bGQgY2hhbmdlIHRoaXM/CgpZZWFo LCB0aGlzIHBhcnQgZ2V0cyBhIGJpdCB0cmlja3kuIEl0IGRlcGVuZHMgb24gd2hldGhlciB0aGUg c3lzZnMKZmlsZXMgZm9yIG52bWVtIGRldmljZXMgaXMgY29uc2lkZXJlZCBhbiBBQkkuIENoYW5n aW5nIGZyb20gYnVzIHRvCmNsYXNzIHdvdWxkIGNoYW5nZSB0aGUgc3lzZnMgcGF0aCBmb3IgbnZt ZW0gZGV2aWNlcyBmcm9tOgovc3lzL2NsYXNzL252bWVtIHRvIC9zeXMvYnVzL252bWVtCgo+ID4g QW5kIHRoZSBudm1lbV9kZXZpY2Ugc29tZXRpbWVzIHBvaW50cwo+ID4gdG8gdGhlIERUIG5vZGUg b2YgdGhlIE1URCBkZXZpY2Ugb3Igc29tZXRpbWVzIHRoZSBwYXJ0aXRpb24gcGxhdGZvcm0KPiA+ IGRldmljZXMgb3IgbWF5YmUgbm8gRFQgbm9kZSBhdCBhbGwuCj4KPiBJIGd1ZXNzIHRoaXMgY29t ZXMgZnJvbSB0aGUgZmFjdCB0aGF0IHRoaXMgaXMgbm90IHN0cm9uZ2x5IGRlZmluZWQgaW4KPiBt dGQgYW5kIGRlcGVuZHMgb24gdGhlIHNpdHVhdGlvbiAobm90IG1lbnRpb25pbmcgMjAgeWVhcnMg b2YgaGlzdG9yeQo+IHRoZXJlIGFzIHdlbGwpLiAibXRkIiBpcyBhIGJpdCBpbmNvbnNpc3RlbnQg b24gd2hhdCBpdCBtZWFucy4gT2xkZXIKPiBkZXNpZ25zIG1peGVkOiBjb250cm9sbGVycywgRUND IGVuZ2luZXMgd2hlbiByZWxldmFudCBhbmQgbWVtb3JpZXM7Cj4gd2hpbGUgdGhlc2UgdGhyZWUg Y29tcG9uZW50cyBhcmUgY29tcGxldGVseSBzZXBhcmF0ZWQuIEhlbmNlCj4gc29tZXRpbWVzIHRo ZSBtdGQgZGV2aWNlIGVuZHMgdXAgYmVpbmcgdGhlIHRvcCBsZXZlbCBjb250cm9sbGVyLAo+IHNv bWV0aW1lcyBpdCdzIGp1c3Qgb25lIHBhcnRpdGlvbi4uLgo+Cj4gQnV0IEknbSBzdXJwcmlzZWQg bm90IGFsbCBvZiB0aGVtIHBvaW50IHRvIGEgRFQgbm9kZS4gQ291bGQgeW91IHNob3cgdXMKPiBh biBleGFtcGxlPyBCZWNhdXNlIHRoYXQgbWlnaHQgbGlrZWx5IGJlIHVuZXhwZWN0ZWQgKG9yIHBl cmhhcHMgSSBhbQo+IG1pc3Npbmcgc29tZXRoaW5nKS4KCldlbGwsIHRoZSBsb2dpYyB0aGF0IHNl dHMgdGhlIERUIG5vZGUgZm9yIG52bWVtX2RldmljZSBpcyBsaWtlIHNvOgoKICAgICAgICBpZiAo Y29uZmlnLT5vZl9ub2RlKQogICAgICAgICAgICAgICAgbnZtZW0tPmRldi5vZl9ub2RlID0gY29u ZmlnLT5vZl9ub2RlOwogICAgICAgIGVsc2UgaWYgKCFjb25maWctPm5vX29mX25vZGUpCiAgICAg ICAgICAgICAgICBudm1lbS0+ZGV2Lm9mX25vZGUgPSBjb25maWctPmRldi0+b2Zfbm9kZTsKClNv IHRoZXJlJ3MgZGVmaW5pdGVseSBhIHBhdGggKHdoZXJlIGJvdGggaWYncyBjb3VsZCBiZSBmYWxz ZSkgd2hlcmUKdGhlIERUIG5vZGUgd2lsbCBub3QgZ2V0IHNldC4gSSBkb24ndCBrbm93IGlmIHRo YXQgcGF0aCBpcyBwb3NzaWJsZQp3aXRoIHRoZSBleGlzdGluZyB1c2VycyBvZiBudm1lbV9yZWdp c3RlcigpLCBidXQgaXQncyBkZWZpbml0ZWx5CnBvc3NpYmxlLgoKPiA+IFNvIGl0J3MgYSBtZXNz IG9mIG11bHRpcGxlIGRldmljZXMgcG9pbnRpbmcgdG8gdGhlIHNhbWUgRFQgbm9kZSB3aXRoCj4g PiBubyBjbGVhciB3YXkgdG8gaWRlbnRpZnkgd2hpY2ggb25lcyB3aWxsIHBvaW50IHRvIGEgRFQg bm9kZSBhbmQgd2hpY2gKPiA+IG9uZXMgd2lsbCBwcm9iZSBhbmQgd2hpY2ggb25lcyB3b24ndC4g SW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxkbid0Cj4gPiBhbGxvdyBhZGRpbmcgbmV3IGNvbXBhdGli bGUgc3RyaW5ncyBmb3IgcGFydGl0aW9ucyBmb3Igd2hpY2ggd2UgZG9uJ3QKPiA+IHBsYW4gb24g YWRkaW5nIG52bWVtIGRyaXZlcnMuCj4gPgo+ID4gQ2FuIHlvdSBnaXZlIHRoZSBwYXRjaCBhdCB0 aGUgZW5kIG9mIHRoZSBlbWFpbCBhIHNob3Q/IEl0IHNob3VsZCBmaXgKPiA+IHRoZSBpc3N1ZSB3 aXRoIHRoaXMgc2VyaWVzIGFuZCB3aXRob3V0IHRoaXMgc2VyaWVzLiBJdCBqdXN0IGF2b2lkcwo+ ID4gdGhpcyB3aG9sZSBtZXNzIGJ5IG5vdCBjcmVhdGluZyB1c2VsZXNzIHBsYXRmb3JtIGRldmlj ZSBmb3IKPiA+IG52bWVtLWNlbGxzIGNvbXBhdGlibGUgRFQgbm9kZXMuCj4KPiBUaGFua3MgYSBs b3QgZm9yIHlvdXIgaGVscC4KCk5vIHByb2JsZW0uIEkgd2FudCBmd19kZXZsaW5rIHRvIHdvcmsg Zm9yIGV2ZXJ5b25lLgoKPiA+Cj4gPiBUaGFua3MsCj4gPiBTYXJhdmFuYQo+ID4KPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL210ZC9tdGRwYXJ0LmMgYi9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKPiA+ IGluZGV4IGQ0NDJmYTk0Yzg3Mi4uODhhMjEzZjRkNjUxIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVy cy9tdGQvbXRkcGFydC5jCj4gPiArKysgYi9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKPiA+IEBAIC01 NzcsNiArNTc3LDcgQEAgc3RhdGljIGludCBtdGRfcGFydF9vZl9wYXJzZShzdHJ1Y3QgbXRkX2lu Zm8gKm1hc3RlciwKPiA+ICB7Cj4gPiAgICAgICAgIHN0cnVjdCBtdGRfcGFydF9wYXJzZXIgKnBh cnNlcjsKPiA+ICAgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucDsKPiA+ICsgICAgICAgc3Ry dWN0IGRldmljZV9ub2RlICpjaGlsZDsKPiA+ICAgICAgICAgc3RydWN0IHByb3BlcnR5ICpwcm9w Owo+ID4gICAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gPiAgICAgICAgIGNvbnN0IGNoYXIg KmNvbXBhdDsKPiA+IEBAIC01OTQsNiArNTk1LDEwIEBAIHN0YXRpYyBpbnQgbXRkX3BhcnRfb2Zf cGFyc2Uoc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsCj4gPiAgICAgICAgIGVsc2UKPiA+ICAgICAg ICAgICAgICAgICBucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCAicGFydGl0aW9ucyIpOwo+ ID4KPiA+ICsgICAgICAgZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpCj4gPiArICAg ICAgICAgICAgICAgaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGNoaWxkLCAibnZtZW0tY2Vs bHMiKSkKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIG9mX25vZGVfc2V0X2ZsYWcoY2hpbGQs IE9GX1BPUFVMQVRFRCk7Cj4KPiBXaGF0IGFib3V0IGEgY29tbWVudCBleHBsYWluaW5nIHdoeSB3 ZSBuZWVkIHRoYXQgaW4gdGhlIGZpbmFsIHBhdGNoCj4gKHdpdGggYSBjb21tZW50KT8gT3RoZXJ3 aXNlIGl0J3MgYSBsaXR0bGUgYml0IG9ic2N1cmUuCgpUaGlzIHdhc24ndCBtZWFudCB0byBiZSBy ZXZpZXdlZCA6KSBKdXN0IGEgcXVpY2sgcGF0Y2ggdG8gbWFrZSBzdXJlCkknbSBnb2luZyBkb3du IHRoZSByaWdodCBwYXRoLiBPbmNlIE1heGltIGNvbmZpcm1zIEkgd2FzIGdvaW5nIHRvIHJvbGwK dGhpcyBpbnRvIGEgcHJvcGVyIHBhdGNoLgoKQnV0IHBvaW50IG5vdGVkLiBXaWxsIGFkZCBhIGNv bW1lbnQuCgpUaGFua3MsClNhcmF2YW5hCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0t a2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==