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 X-Spam-Level: X-Spam-Status: No, score=-13.0 required=3.0 tests=BAYES_00,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,TVD_SUBJ_WIPE_DEBT, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3C8C3C43219 for ; Wed, 20 Jan 2021 22:12:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1B21E235FF for ; Wed, 20 Jan 2021 22:12:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730315AbhATVt7 convert rfc822-to-8bit (ORCPT ); Wed, 20 Jan 2021 16:49:59 -0500 Received: from mail-ed1-f43.google.com ([209.85.208.43]:45175 "EHLO mail-ed1-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729567AbhATVXy (ORCPT ); Wed, 20 Jan 2021 16:23:54 -0500 Received: by mail-ed1-f43.google.com with SMTP id f1so13356524edr.12 for ; Wed, 20 Jan 2021 13:23:37 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=cbDUMeEtw544lOujMKMEV/4eHaRUypyOCpdnS+J8w0A=; b=Xrd56/VxPCTU1gAyGDJHOviNfw79an/GgRNqor1G6KHr8pQX3dMH7LdInvA7KgALRa aikyy3tb4BLLnavSdGDLX9uCfn7XhrBu5h6pQiu44jGpcUfNVZwS9mVrGpWlzoBvCILc JCCCVaEurJIPUj9IpL8juN75cD0q5tZ0ugueFVMVyd+Kf0rFBI1WrZKXzckoGrcp4Ujg /FPnaMSbiyGBdocN6s+4XlggRDpwJKXwJ5MOeKMvGZG1vEhaQQAtg3E7PPUeanI8eL/v leQY7jfV3ruNBFwdDEzUAz2jWwDf5+El/zR+uG1CCTd2RYLFz6j5bgwcPizSDnlA5aaI 9DfA== X-Gm-Message-State: AOAM531DAW2A9IbPa0rn3SPikHv05wlLitXthilmtJ16T0+1B/TcBDJH aoZhbtRwx9bj9M8Wg1CaPJIWi2pCygDn0wmI8d1kWc3Au0zy0A== X-Google-Smtp-Source: ABdhPJxF/Bim4+TU7hCkQBq4fPNX320E5ib+1vSQmMCLiXo7PnXlgaMUZqFgiGdOCgcauNIp0e2+r0M8SLVctNSTJ5U= X-Received: by 2002:a05:6402:510f:: with SMTP id m15mr8824975edd.267.1611177791518; Wed, 20 Jan 2021 13:23:11 -0800 (PST) MIME-Version: 1.0 References: <20210120133057.2470873-1-arnd@kernel.org> In-Reply-To: <20210120133057.2470873-1-arnd@kernel.org> From: Barry Song Date: Thu, 21 Jan 2021 10:23:00 +1300 Message-ID: Subject: Re: [PATCH] Input: remove sirfsoc power button driver To: Arnd Bergmann Cc: linux-arm-kernel@lists.infradead.org, LKML , Arnd Bergmann Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8BIT Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Arnd Bergmann 于2021年1月21日周四 上午2:31写道: > > From: Arnd Bergmann > > The CSR SiRF prima2/atlas platforms are getting removed, so this driver > is no longer needed. > > Cc: Barry Song > Signed-off-by: Arnd Bergmann Acked-by: Barry Song > --- > drivers/input/misc/Kconfig | 10 -- > drivers/input/misc/Makefile | 1 - > drivers/input/misc/sirfsoc-onkey.c | 207 ----------------------------- > 3 files changed, 218 deletions(-) > delete mode 100644 drivers/input/misc/sirfsoc-onkey.c > > diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig > index ad1b6c90bc4d..f824e3435a8e 100644 > --- a/drivers/input/misc/Kconfig > +++ b/drivers/input/misc/Kconfig > @@ -789,16 +789,6 @@ config INPUT_XEN_KBDDEV_FRONTEND > To compile this driver as a module, choose M here: the > module will be called xen-kbdfront. > > -config INPUT_SIRFSOC_ONKEY > - tristate "CSR SiRFSoC power on/off/suspend key support" > - depends on ARCH_SIRF && OF > - default y > - help > - Say Y here if you want to support for the SiRFSoC power on/off/suspend key > - in Linux, after you press the onkey, system will suspend. > - > - If unsure, say N. > - > config INPUT_IDEAPAD_SLIDEBAR > tristate "IdeaPad Laptop Slidebar" > depends on INPUT > diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile > index 7f202ba8f775..0b5871e1bb76 100644 > --- a/drivers/input/misc/Makefile > +++ b/drivers/input/misc/Makefile > @@ -72,7 +72,6 @@ obj-$(CONFIG_INPUT_GPIO_ROTARY_ENCODER) += rotary_encoder.o > obj-$(CONFIG_INPUT_RK805_PWRKEY) += rk805-pwrkey.o > obj-$(CONFIG_INPUT_SC27XX_VIBRA) += sc27xx-vibra.o > obj-$(CONFIG_INPUT_SGI_BTNS) += sgi_btns.o > -obj-$(CONFIG_INPUT_SIRFSOC_ONKEY) += sirfsoc-onkey.o > obj-$(CONFIG_INPUT_SOC_BUTTON_ARRAY) += soc_button_array.o > obj-$(CONFIG_INPUT_SPARCSPKR) += sparcspkr.o > obj-$(CONFIG_INPUT_STPMIC1_ONKEY) += stpmic1_onkey.o > diff --git a/drivers/input/misc/sirfsoc-onkey.c b/drivers/input/misc/sirfsoc-onkey.c > deleted file mode 100644 > index 7982bf8fb839..000000000000 > --- a/drivers/input/misc/sirfsoc-onkey.c > +++ /dev/null > @@ -1,207 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0-or-later > -/* > - * Power key driver for SiRF PrimaII > - * > - * Copyright (c) 2013 - 2014 Cambridge Silicon Radio Limited, a CSR plc group > - * company. > - */ > - > -#include > -#include > -#include > -#include > -#include > -#include > -#include > -#include > - > -struct sirfsoc_pwrc_drvdata { > - u32 pwrc_base; > - struct input_dev *input; > - struct delayed_work work; > -}; > - > -#define PWRC_ON_KEY_BIT (1 << 0) > - > -#define PWRC_INT_STATUS 0xc > -#define PWRC_INT_MASK 0x10 > -#define PWRC_PIN_STATUS 0x14 > -#define PWRC_KEY_DETECT_UP_TIME 20 /* ms*/ > - > -static int sirfsoc_pwrc_is_on_key_down(struct sirfsoc_pwrc_drvdata *pwrcdrv) > -{ > - u32 state = sirfsoc_rtc_iobrg_readl(pwrcdrv->pwrc_base + > - PWRC_PIN_STATUS); > - return !(state & PWRC_ON_KEY_BIT); /* ON_KEY is active low */ > -} > - > -static void sirfsoc_pwrc_report_event(struct work_struct *work) > -{ > - struct sirfsoc_pwrc_drvdata *pwrcdrv = > - container_of(work, struct sirfsoc_pwrc_drvdata, work.work); > - > - if (sirfsoc_pwrc_is_on_key_down(pwrcdrv)) { > - schedule_delayed_work(&pwrcdrv->work, > - msecs_to_jiffies(PWRC_KEY_DETECT_UP_TIME)); > - } else { > - input_event(pwrcdrv->input, EV_KEY, KEY_POWER, 0); > - input_sync(pwrcdrv->input); > - } > -} > - > -static irqreturn_t sirfsoc_pwrc_isr(int irq, void *dev_id) > -{ > - struct sirfsoc_pwrc_drvdata *pwrcdrv = dev_id; > - u32 int_status; > - > - int_status = sirfsoc_rtc_iobrg_readl(pwrcdrv->pwrc_base + > - PWRC_INT_STATUS); > - sirfsoc_rtc_iobrg_writel(int_status & ~PWRC_ON_KEY_BIT, > - pwrcdrv->pwrc_base + PWRC_INT_STATUS); > - > - input_event(pwrcdrv->input, EV_KEY, KEY_POWER, 1); > - input_sync(pwrcdrv->input); > - schedule_delayed_work(&pwrcdrv->work, > - msecs_to_jiffies(PWRC_KEY_DETECT_UP_TIME)); > - > - return IRQ_HANDLED; > -} > - > -static void sirfsoc_pwrc_toggle_interrupts(struct sirfsoc_pwrc_drvdata *pwrcdrv, > - bool enable) > -{ > - u32 int_mask; > - > - int_mask = sirfsoc_rtc_iobrg_readl(pwrcdrv->pwrc_base + PWRC_INT_MASK); > - if (enable) > - int_mask |= PWRC_ON_KEY_BIT; > - else > - int_mask &= ~PWRC_ON_KEY_BIT; > - sirfsoc_rtc_iobrg_writel(int_mask, pwrcdrv->pwrc_base + PWRC_INT_MASK); > -} > - > -static int sirfsoc_pwrc_open(struct input_dev *input) > -{ > - struct sirfsoc_pwrc_drvdata *pwrcdrv = input_get_drvdata(input); > - > - sirfsoc_pwrc_toggle_interrupts(pwrcdrv, true); > - > - return 0; > -} > - > -static void sirfsoc_pwrc_close(struct input_dev *input) > -{ > - struct sirfsoc_pwrc_drvdata *pwrcdrv = input_get_drvdata(input); > - > - sirfsoc_pwrc_toggle_interrupts(pwrcdrv, false); > - cancel_delayed_work_sync(&pwrcdrv->work); > -} > - > -static const struct of_device_id sirfsoc_pwrc_of_match[] = { > - { .compatible = "sirf,prima2-pwrc" }, > - {}, > -}; > -MODULE_DEVICE_TABLE(of, sirfsoc_pwrc_of_match); > - > -static int sirfsoc_pwrc_probe(struct platform_device *pdev) > -{ > - struct device_node *np = pdev->dev.of_node; > - struct sirfsoc_pwrc_drvdata *pwrcdrv; > - int irq; > - int error; > - > - pwrcdrv = devm_kzalloc(&pdev->dev, sizeof(struct sirfsoc_pwrc_drvdata), > - GFP_KERNEL); > - if (!pwrcdrv) { > - dev_info(&pdev->dev, "Not enough memory for the device data\n"); > - return -ENOMEM; > - } > - > - /* > - * We can't use of_iomap because pwrc is not mapped in memory, > - * the so-called base address is only offset in rtciobrg > - */ > - error = of_property_read_u32(np, "reg", &pwrcdrv->pwrc_base); > - if (error) { > - dev_err(&pdev->dev, > - "unable to find base address of pwrc node in dtb\n"); > - return error; > - } > - > - pwrcdrv->input = devm_input_allocate_device(&pdev->dev); > - if (!pwrcdrv->input) > - return -ENOMEM; > - > - pwrcdrv->input->name = "sirfsoc pwrckey"; > - pwrcdrv->input->phys = "pwrc/input0"; > - pwrcdrv->input->evbit[0] = BIT_MASK(EV_KEY); > - input_set_capability(pwrcdrv->input, EV_KEY, KEY_POWER); > - > - INIT_DELAYED_WORK(&pwrcdrv->work, sirfsoc_pwrc_report_event); > - > - pwrcdrv->input->open = sirfsoc_pwrc_open; > - pwrcdrv->input->close = sirfsoc_pwrc_close; > - > - input_set_drvdata(pwrcdrv->input, pwrcdrv); > - > - /* Make sure the device is quiesced */ > - sirfsoc_pwrc_toggle_interrupts(pwrcdrv, false); > - > - irq = platform_get_irq(pdev, 0); > - error = devm_request_irq(&pdev->dev, irq, > - sirfsoc_pwrc_isr, 0, > - "sirfsoc_pwrc_int", pwrcdrv); > - if (error) { > - dev_err(&pdev->dev, "unable to claim irq %d, error: %d\n", > - irq, error); > - return error; > - } > - > - error = input_register_device(pwrcdrv->input); > - if (error) { > - dev_err(&pdev->dev, > - "unable to register input device, error: %d\n", > - error); > - return error; > - } > - > - dev_set_drvdata(&pdev->dev, pwrcdrv); > - device_init_wakeup(&pdev->dev, 1); > - > - return 0; > -} > - > -static int __maybe_unused sirfsoc_pwrc_resume(struct device *dev) > -{ > - struct sirfsoc_pwrc_drvdata *pwrcdrv = dev_get_drvdata(dev); > - struct input_dev *input = pwrcdrv->input; > - > - /* > - * Do not mask pwrc interrupt as we want pwrc work as a wakeup source > - * if users touch X_ONKEY_B, see arch/arm/mach-prima2/pm.c > - */ > - mutex_lock(&input->mutex); > - if (input_device_enabled(input)) > - sirfsoc_pwrc_toggle_interrupts(pwrcdrv, true); > - mutex_unlock(&input->mutex); > - > - return 0; > -} > - > -static SIMPLE_DEV_PM_OPS(sirfsoc_pwrc_pm_ops, NULL, sirfsoc_pwrc_resume); > - > -static struct platform_driver sirfsoc_pwrc_driver = { > - .probe = sirfsoc_pwrc_probe, > - .driver = { > - .name = "sirfsoc-pwrc", > - .pm = &sirfsoc_pwrc_pm_ops, > - .of_match_table = sirfsoc_pwrc_of_match, > - } > -}; > - > -module_platform_driver(sirfsoc_pwrc_driver); > - > -MODULE_LICENSE("GPL v2"); > -MODULE_AUTHOR("Binghua Duan , Xianglong Du "); > -MODULE_DESCRIPTION("CSR Prima2 PWRC Driver"); > -MODULE_ALIAS("platform:sirfsoc-pwrc"); > -- > 2.29.2 > 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 X-Spam-Level: X-Spam-Status: No, score=-13.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,TVD_SUBJ_WIPE_DEBT,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 36489C433DB for ; Wed, 20 Jan 2021 21:25:35 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DD16C23444 for ; Wed, 20 Jan 2021 21:25:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DD16C23444 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id: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=deKHbbATor4WVP81jAKXgZEjQKRMqJ5ZrbsHNFB1TOE=; b=VTEZACLK6mvzBHu72q08DMGns aM1KnftM+Opso96B69KZdWA6NIfnpZ+3YcRyaI3qpAtDIei27Opi3u6sv8CyVxie6HnD3euRM0Kwe MzxeBYUJM9E2m9CdGXFUrWYGWA17Ukp7DwV4KapXL9vnx1FQMcpDyCwpq+NKm4VAsmOiyiZ21UIzz YjPMYpKMIuABi8EBLHx6dSOm9Bl9dSBO24kXOtDlcT69TlmzeM4KKvLfpwhUHyAiKL+2bsHNDfiG7 H58AuWDJW4rVImCSbFbl71KpY/VlPko+pRhZCaoQpjhVsfnmYLMzPMhJBD+1A3AKz0VfjkafO0jc1 MvxL41WDg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l2Kwh-0006gu-Gv; Wed, 20 Jan 2021 21:23:19 +0000 Received: from mail-ed1-f41.google.com ([209.85.208.41]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1l2Kwa-0006eL-Ul for linux-arm-kernel@lists.infradead.org; Wed, 20 Jan 2021 21:23:14 +0000 Received: by mail-ed1-f41.google.com with SMTP id s11so30085edd.5 for ; Wed, 20 Jan 2021 13:23:12 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=cbDUMeEtw544lOujMKMEV/4eHaRUypyOCpdnS+J8w0A=; b=O531BBgDfDUejPoia72eTlYguOwWWnVqj4cGcvtK3RaCkMzSgqJhFnJrX4Dfi0Efde EQETZ+2Cd/FLj0p4iWTS7BExLYMBlvdjtJ1VMFe6h+PNc9j7Z/OW23DLArelPFaG48If +3keFiehfhVsQ7DIjEUsPAz6+0123BfFto5dPaxif2E8fEWGf/cexFbTPMSzIOYo/exz 3JZ3qlbBMnAYj0B9hQLZC91rHs95z6Vlb7Xw5uK3uupO/qnC1gw+PXOBLrxU7/C0yjDm g+qWnAQy0KytzUpmVH3ZR1PqN4v+YDsJR0BaqMGXgAru0KhnPR4Qonm6GSV7q6CmMtXr 0sTg== X-Gm-Message-State: AOAM5304WiKnCDrmvBFtCWBwBWnQq/6tACc4+7bTc6PUriA+GhQrJLlj XkjdJiLNQgH63OtID83Pbu7izVkJ1YyENYDG0ic= X-Google-Smtp-Source: ABdhPJxF/Bim4+TU7hCkQBq4fPNX320E5ib+1vSQmMCLiXo7PnXlgaMUZqFgiGdOCgcauNIp0e2+r0M8SLVctNSTJ5U= X-Received: by 2002:a05:6402:510f:: with SMTP id m15mr8824975edd.267.1611177791518; Wed, 20 Jan 2021 13:23:11 -0800 (PST) MIME-Version: 1.0 References: <20210120133057.2470873-1-arnd@kernel.org> In-Reply-To: <20210120133057.2470873-1-arnd@kernel.org> From: Barry Song Date: Thu, 21 Jan 2021 10:23:00 +1300 Message-ID: Subject: Re: [PATCH] Input: remove sirfsoc power button driver To: Arnd Bergmann X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210120_162313_024219_7936135A X-CRM114-Status: GOOD ( 25.87 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Arnd Bergmann , LKML , linux-arm-kernel@lists.infradead.org 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 QXJuZCBCZXJnbWFubiA8YXJuZEBrZXJuZWwub3JnPiDkuo4yMDIx5bm0MeaciDIx5pel5ZGo5Zub IOS4iuWNiDI6MzHlhpnpgZPvvJoKPgo+IEZyb206IEFybmQgQmVyZ21hbm4gPGFybmRAYXJuZGIu ZGU+Cj4KPiBUaGUgQ1NSIFNpUkYgcHJpbWEyL2F0bGFzIHBsYXRmb3JtcyBhcmUgZ2V0dGluZyBy ZW1vdmVkLCBzbyB0aGlzIGRyaXZlcgo+IGlzIG5vIGxvbmdlciBuZWVkZWQuCj4KPiBDYzogQmFy cnkgU29uZyA8YmFvaHVhQGtlcm5lbC5vcmc+Cj4gU2lnbmVkLW9mZi1ieTogQXJuZCBCZXJnbWFu biA8YXJuZEBhcm5kYi5kZT4KCkFja2VkLWJ5OiBCYXJyeSBTb25nIDxiYW9odWFAa2VybmVsLm9y Zz4KCj4gLS0tCj4gIGRyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnICAgICAgICAgfCAgMTAgLS0K PiAgZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlICAgICAgICB8ICAgMSAtCj4gIGRyaXZlcnMv aW5wdXQvbWlzYy9zaXJmc29jLW9ua2V5LmMgfCAyMDcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KPiAgMyBmaWxlcyBjaGFuZ2VkLCAyMTggZGVsZXRpb25zKC0pCj4gIGRlbGV0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2lucHV0L21pc2Mvc2lyZnNvYy1vbmtleS5jCj4KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZp Zwo+IGluZGV4IGFkMWI2YzkwYmM0ZC4uZjgyNGUzNDM1YThlIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvaW5wdXQvbWlzYy9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcK PiBAQCAtNzg5LDE2ICs3ODksNiBAQCBjb25maWcgSU5QVVRfWEVOX0tCRERFVl9GUk9OVEVORAo+ ICAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBo ZXJlOiB0aGUKPiAgICAgICAgICAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHhlbi1rYmRmcm9udC4K Pgo+IC1jb25maWcgSU5QVVRfU0lSRlNPQ19PTktFWQo+IC0gICAgICAgdHJpc3RhdGUgIkNTUiBT aVJGU29DIHBvd2VyIG9uL29mZi9zdXNwZW5kIGtleSBzdXBwb3J0Igo+IC0gICAgICAgZGVwZW5k cyBvbiBBUkNIX1NJUkYgJiYgT0YKPiAtICAgICAgIGRlZmF1bHQgeQo+IC0gICAgICAgaGVscAo+ IC0gICAgICAgICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgZm9yIHRoZSBTaVJG U29DIHBvd2VyIG9uL29mZi9zdXNwZW5kIGtleQo+IC0gICAgICAgICBpbiBMaW51eCwgYWZ0ZXIg eW91IHByZXNzIHRoZSBvbmtleSwgc3lzdGVtIHdpbGwgc3VzcGVuZC4KPiAtCj4gLSAgICAgICAg IElmIHVuc3VyZSwgc2F5IE4uCj4gLQo+ICBjb25maWcgSU5QVVRfSURFQVBBRF9TTElERUJBUgo+ ICAgICAgICAgdHJpc3RhdGUgIklkZWFQYWQgTGFwdG9wIFNsaWRlYmFyIgo+ICAgICAgICAgZGVw ZW5kcyBvbiBJTlBVVAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUg Yi9kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUKPiBpbmRleCA3ZjIwMmJhOGY3NzUuLjBiNTg3 MWUxYmI3NiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUKPiArKysg Yi9kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUKPiBAQCAtNzIsNyArNzIsNiBAQCBvYmotJChD T05GSUdfSU5QVVRfR1BJT19ST1RBUllfRU5DT0RFUikgICAgICAgKz0gcm90YXJ5X2VuY29kZXIu bwo+ICBvYmotJChDT05GSUdfSU5QVVRfUks4MDVfUFdSS0VZKSAgICAgICArPSByazgwNS1wd3Jr ZXkubwo+ICBvYmotJChDT05GSUdfSU5QVVRfU0MyN1hYX1ZJQlJBKSAgICAgICArPSBzYzI3eHgt dmlicmEubwo+ICBvYmotJChDT05GSUdfSU5QVVRfU0dJX0JUTlMpICAgICAgICAgICArPSBzZ2lf YnRucy5vCj4gLW9iai0kKENPTkZJR19JTlBVVF9TSVJGU09DX09OS0VZKSAgICAgICs9IHNpcmZz b2Mtb25rZXkubwo+ICBvYmotJChDT05GSUdfSU5QVVRfU09DX0JVVFRPTl9BUlJBWSkgICArPSBz b2NfYnV0dG9uX2FycmF5Lm8KPiAgb2JqLSQoQ09ORklHX0lOUFVUX1NQQVJDU1BLUikgICAgICAg ICAgKz0gc3BhcmNzcGtyLm8KPiAgb2JqLSQoQ09ORklHX0lOUFVUX1NUUE1JQzFfT05LRVkpICAg ICAgKz0gc3RwbWljMV9vbmtleS5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9z aXJmc29jLW9ua2V5LmMgYi9kcml2ZXJzL2lucHV0L21pc2Mvc2lyZnNvYy1vbmtleS5jCj4gZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggNzk4MmJmOGZiODM5Li4wMDAwMDAwMDAwMDAK PiAtLS0gYS9kcml2ZXJzL2lucHV0L21pc2Mvc2lyZnNvYy1vbmtleS5jCj4gKysrIC9kZXYvbnVs bAo+IEBAIC0xLDIwNyArMCwwIEBACj4gLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wLW9yLWxhdGVyCj4gLS8qCj4gLSAqIFBvd2VyIGtleSBkcml2ZXIgZm9yIFNpUkYgUHJpbWFJ SQo+IC0gKgo+IC0gKiBDb3B5cmlnaHQgKGMpIDIwMTMgLSAyMDE0IENhbWJyaWRnZSBTaWxpY29u IFJhZGlvIExpbWl0ZWQsIGEgQ1NSIHBsYyBncm91cAo+IC0gKiBjb21wYW55Lgo+IC0gKi8KPiAt Cj4gLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L2ludGVycnVw dC5oPgo+IC0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L3BsYXRm b3JtX2RldmljZS5oPgo+IC0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KPiAtI2luY2x1ZGUgPGxp bnV4L3J0Yy9zaXJmc29jX3J0Y2lvYnJnLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9vZi5oPgo+IC0j aW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Cj4gLQo+IC1zdHJ1Y3Qgc2lyZnNvY19wd3JjX2Ry dmRhdGEgewo+IC0gICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgcHdyY19iYXNlOwo+IC0g ICAgICAgc3RydWN0IGlucHV0X2RldiAgICAgICAgKmlucHV0Owo+IC0gICAgICAgc3RydWN0IGRl bGF5ZWRfd29yayAgICAgd29yazsKPiAtfTsKPiAtCj4gLSNkZWZpbmUgUFdSQ19PTl9LRVlfQklU ICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKPiAtCj4gLSNkZWZpbmUgUFdSQ19JTlRf U1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgMHhjCj4gLSNkZWZpbmUgUFdSQ19JTlRfTUFT SyAgICAgICAgICAgICAgICAgIDB4MTAKPiAtI2RlZmluZSBQV1JDX1BJTl9TVEFUVVMgICAgICAg ICAgICAgICAgICAgICAgICAweDE0Cj4gLSNkZWZpbmUgUFdSQ19LRVlfREVURUNUX1VQX1RJTUUg ICAgICAgICAgICAgICAgMjAgICAgICAvKiBtcyovCj4gLQo+IC1zdGF0aWMgaW50IHNpcmZzb2Nf cHdyY19pc19vbl9rZXlfZG93bihzdHJ1Y3Qgc2lyZnNvY19wd3JjX2RydmRhdGEgKnB3cmNkcnYp Cj4gLXsKPiAtICAgICAgIHUzMiBzdGF0ZSA9IHNpcmZzb2NfcnRjX2lvYnJnX3JlYWRsKHB3cmNk cnYtPnB3cmNfYmFzZSArCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQV1JDX1BJTl9TVEFUVVMpOwo+IC0gICAgICAgcmV0dXJuICEoc3Rh dGUgJiBQV1JDX09OX0tFWV9CSVQpOyAvKiBPTl9LRVkgaXMgYWN0aXZlIGxvdyAqLwo+IC19Cj4g LQo+IC1zdGF0aWMgdm9pZCBzaXJmc29jX3B3cmNfcmVwb3J0X2V2ZW50KHN0cnVjdCB3b3JrX3N0 cnVjdCAqd29yaykKPiAtewo+IC0gICAgICAgc3RydWN0IHNpcmZzb2NfcHdyY19kcnZkYXRhICpw d3JjZHJ2ID0KPiAtICAgICAgICAgICAgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzaXJm c29jX3B3cmNfZHJ2ZGF0YSwgd29yay53b3JrKTsKPiAtCj4gLSAgICAgICBpZiAoc2lyZnNvY19w d3JjX2lzX29uX2tleV9kb3duKHB3cmNkcnYpKSB7Cj4gLSAgICAgICAgICAgICAgIHNjaGVkdWxl X2RlbGF5ZWRfd29yaygmcHdyY2Rydi0+d29yaywKPiAtICAgICAgICAgICAgICAgICAgICAgICBt c2Vjc190b19qaWZmaWVzKFBXUkNfS0VZX0RFVEVDVF9VUF9USU1FKSk7Cj4gLSAgICAgICB9IGVs c2Ugewo+IC0gICAgICAgICAgICAgICBpbnB1dF9ldmVudChwd3JjZHJ2LT5pbnB1dCwgRVZfS0VZ LCBLRVlfUE9XRVIsIDApOwo+IC0gICAgICAgICAgICAgICBpbnB1dF9zeW5jKHB3cmNkcnYtPmlu cHV0KTsKPiAtICAgICAgIH0KPiAtfQo+IC0KPiAtc3RhdGljIGlycXJldHVybl90IHNpcmZzb2Nf cHdyY19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQo+IC17Cj4gLSAgICAgICBzdHJ1Y3Qgc2ly ZnNvY19wd3JjX2RydmRhdGEgKnB3cmNkcnYgPSBkZXZfaWQ7Cj4gLSAgICAgICB1MzIgaW50X3N0 YXR1czsKPiAtCj4gLSAgICAgICBpbnRfc3RhdHVzID0gc2lyZnNvY19ydGNfaW9icmdfcmVhZGwo cHdyY2Rydi0+cHdyY19iYXNlICsKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBXUkNfSU5UX1NUQVRVUyk7Cj4gLSAgICAgICBzaXJmc29j X3J0Y19pb2JyZ193cml0ZWwoaW50X3N0YXR1cyAmIH5QV1JDX09OX0tFWV9CSVQsCj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdyY2Rydi0+cHdyY19iYXNlICsgUFdSQ19JTlRf U1RBVFVTKTsKPiAtCj4gLSAgICAgICBpbnB1dF9ldmVudChwd3JjZHJ2LT5pbnB1dCwgRVZfS0VZ LCBLRVlfUE9XRVIsIDEpOwo+IC0gICAgICAgaW5wdXRfc3luYyhwd3JjZHJ2LT5pbnB1dCk7Cj4g LSAgICAgICBzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnB3cmNkcnYtPndvcmssCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbXNlY3NfdG9famlmZmllcyhQV1JDX0tFWV9ERVRFQ1RfVVBf VElNRSkpOwo+IC0KPiAtICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKPiAtfQo+IC0KPiAtc3Rh dGljIHZvaWQgc2lyZnNvY19wd3JjX3RvZ2dsZV9pbnRlcnJ1cHRzKHN0cnVjdCBzaXJmc29jX3B3 cmNfZHJ2ZGF0YSAqcHdyY2RydiwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYm9vbCBlbmFibGUpCj4gLXsKPiAtICAgICAgIHUzMiBpbnRfbWFzazsKPiAtCj4g LSAgICAgICBpbnRfbWFzayA9IHNpcmZzb2NfcnRjX2lvYnJnX3JlYWRsKHB3cmNkcnYtPnB3cmNf YmFzZSArIFBXUkNfSU5UX01BU0spOwo+IC0gICAgICAgaWYgKGVuYWJsZSkKPiAtICAgICAgICAg ICAgICAgaW50X21hc2sgfD0gUFdSQ19PTl9LRVlfQklUOwo+IC0gICAgICAgZWxzZQo+IC0gICAg ICAgICAgICAgICBpbnRfbWFzayAmPSB+UFdSQ19PTl9LRVlfQklUOwo+IC0gICAgICAgc2lyZnNv Y19ydGNfaW9icmdfd3JpdGVsKGludF9tYXNrLCBwd3JjZHJ2LT5wd3JjX2Jhc2UgKyBQV1JDX0lO VF9NQVNLKTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBzaXJmc29jX3B3cmNfb3BlbihzdHJ1Y3Qg aW5wdXRfZGV2ICppbnB1dCkKPiAtewo+IC0gICAgICAgc3RydWN0IHNpcmZzb2NfcHdyY19kcnZk YXRhICpwd3JjZHJ2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXQpOwo+IC0KPiAtICAgICAgIHNp cmZzb2NfcHdyY190b2dnbGVfaW50ZXJydXB0cyhwd3JjZHJ2LCB0cnVlKTsKPiAtCj4gLSAgICAg ICByZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgc2lyZnNvY19wd3JjX2Nsb3NlKHN0 cnVjdCBpbnB1dF9kZXYgKmlucHV0KQo+IC17Cj4gLSAgICAgICBzdHJ1Y3Qgc2lyZnNvY19wd3Jj X2RydmRhdGEgKnB3cmNkcnYgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dCk7Cj4gLQo+IC0gICAg ICAgc2lyZnNvY19wd3JjX3RvZ2dsZV9pbnRlcnJ1cHRzKHB3cmNkcnYsIGZhbHNlKTsKPiAtICAg ICAgIGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHdyY2Rydi0+d29yayk7Cj4gLX0KPiAtCj4g LXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNpcmZzb2NfcHdyY19vZl9tYXRjaFtd ID0gewo+IC0gICAgICAgeyAuY29tcGF0aWJsZSA9ICJzaXJmLHByaW1hMi1wd3JjIiB9LAo+IC0g ICAgICAge30sCj4gLX07Cj4gLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHNpcmZzb2NfcHdyY19v Zl9tYXRjaCk7Cj4gLQo+IC1zdGF0aWMgaW50IHNpcmZzb2NfcHdyY19wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQo+IC17Cj4gLSAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5w ID0gcGRldi0+ZGV2Lm9mX25vZGU7Cj4gLSAgICAgICBzdHJ1Y3Qgc2lyZnNvY19wd3JjX2RydmRh dGEgKnB3cmNkcnY7Cj4gLSAgICAgICBpbnQgaXJxOwo+IC0gICAgICAgaW50IGVycm9yOwo+IC0K PiAtICAgICAgIHB3cmNkcnYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVj dCBzaXJmc29jX3B3cmNfZHJ2ZGF0YSksCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdGUF9LRVJORUwpOwo+IC0gICAgICAgaWYgKCFwd3JjZHJ2KSB7Cj4gLSAgICAgICAgICAgICAg IGRldl9pbmZvKCZwZGV2LT5kZXYsICJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgdGhlIGRldmljZSBk YXRhXG4iKTsKPiAtICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gLSAgICAgICB9Cj4g LQo+IC0gICAgICAgLyoKPiAtICAgICAgICAqIFdlIGNhbid0IHVzZSBvZl9pb21hcCBiZWNhdXNl IHB3cmMgaXMgbm90IG1hcHBlZCBpbiBtZW1vcnksCj4gLSAgICAgICAgKiB0aGUgc28tY2FsbGVk IGJhc2UgYWRkcmVzcyBpcyBvbmx5IG9mZnNldCBpbiBydGNpb2JyZwo+IC0gICAgICAgICovCj4g LSAgICAgICBlcnJvciA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAicmVnIiwgJnB3cmNkcnYt PnB3cmNfYmFzZSk7Cj4gLSAgICAgICBpZiAoZXJyb3IpIHsKPiAtICAgICAgICAgICAgICAgZGV2 X2VycigmcGRldi0+ZGV2LAo+IC0gICAgICAgICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gZmlu ZCBiYXNlIGFkZHJlc3Mgb2YgcHdyYyBub2RlIGluIGR0YlxuIik7Cj4gLSAgICAgICAgICAgICAg IHJldHVybiBlcnJvcjsKPiAtICAgICAgIH0KPiAtCj4gLSAgICAgICBwd3JjZHJ2LT5pbnB1dCA9 IGRldm1faW5wdXRfYWxsb2NhdGVfZGV2aWNlKCZwZGV2LT5kZXYpOwo+IC0gICAgICAgaWYgKCFw d3JjZHJ2LT5pbnB1dCkKPiAtICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gLQo+IC0g ICAgICAgcHdyY2Rydi0+aW5wdXQtPm5hbWUgPSAic2lyZnNvYyBwd3Jja2V5IjsKPiAtICAgICAg IHB3cmNkcnYtPmlucHV0LT5waHlzID0gInB3cmMvaW5wdXQwIjsKPiAtICAgICAgIHB3cmNkcnYt PmlucHV0LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSk7Cj4gLSAgICAgICBpbnB1dF9zZXRf Y2FwYWJpbGl0eShwd3JjZHJ2LT5pbnB1dCwgRVZfS0VZLCBLRVlfUE9XRVIpOwo+IC0KPiAtICAg ICAgIElOSVRfREVMQVlFRF9XT1JLKCZwd3JjZHJ2LT53b3JrLCBzaXJmc29jX3B3cmNfcmVwb3J0 X2V2ZW50KTsKPiAtCj4gLSAgICAgICBwd3JjZHJ2LT5pbnB1dC0+b3BlbiA9IHNpcmZzb2NfcHdy Y19vcGVuOwo+IC0gICAgICAgcHdyY2Rydi0+aW5wdXQtPmNsb3NlID0gc2lyZnNvY19wd3JjX2Ns b3NlOwo+IC0KPiAtICAgICAgIGlucHV0X3NldF9kcnZkYXRhKHB3cmNkcnYtPmlucHV0LCBwd3Jj ZHJ2KTsKPiAtCj4gLSAgICAgICAvKiBNYWtlIHN1cmUgdGhlIGRldmljZSBpcyBxdWllc2NlZCAq Lwo+IC0gICAgICAgc2lyZnNvY19wd3JjX3RvZ2dsZV9pbnRlcnJ1cHRzKHB3cmNkcnYsIGZhbHNl KTsKPiAtCj4gLSAgICAgICBpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwo+IC0gICAg ICAgZXJyb3IgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGlycSwKPiAtICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXJmc29jX3B3cmNfaXNyLCAwLAo+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJzaXJmc29jX3B3cmNfaW50IiwgcHdyY2Rydik7Cj4gLSAg ICAgICBpZiAoZXJyb3IpIHsKPiAtICAgICAgICAgICAgICAgZGV2X2VycigmcGRldi0+ZGV2LCAi dW5hYmxlIHRvIGNsYWltIGlycSAlZCwgZXJyb3I6ICVkXG4iLAo+IC0gICAgICAgICAgICAgICAg ICAgICAgIGlycSwgZXJyb3IpOwo+IC0gICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7Cj4gLSAg ICAgICB9Cj4gLQo+IC0gICAgICAgZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UocHdyY2Ry di0+aW5wdXQpOwo+IC0gICAgICAgaWYgKGVycm9yKSB7Cj4gLSAgICAgICAgICAgICAgIGRldl9l cnIoJnBkZXYtPmRldiwKPiAtICAgICAgICAgICAgICAgICAgICAgICAidW5hYmxlIHRvIHJlZ2lz dGVyIGlucHV0IGRldmljZSwgZXJyb3I6ICVkXG4iLAo+IC0gICAgICAgICAgICAgICAgICAgICAg IGVycm9yKTsKPiAtICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yOwo+IC0gICAgICAgfQo+IC0K PiAtICAgICAgIGRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBwd3JjZHJ2KTsKPiAtICAgICAg IGRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKPiAtCj4gLSAgICAgICByZXR1cm4g MDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBfX21heWJlX3VudXNlZCBzaXJmc29jX3B3cmNfcmVz dW1lKHN0cnVjdCBkZXZpY2UgKmRldikKPiAtewo+IC0gICAgICAgc3RydWN0IHNpcmZzb2NfcHdy Y19kcnZkYXRhICpwd3JjZHJ2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gLSAgICAgICBzdHJ1 Y3QgaW5wdXRfZGV2ICppbnB1dCA9IHB3cmNkcnYtPmlucHV0Owo+IC0KPiAtICAgICAgIC8qCj4g LSAgICAgICAgKiBEbyBub3QgbWFzayBwd3JjIGludGVycnVwdCBhcyB3ZSB3YW50IHB3cmMgd29y ayBhcyBhIHdha2V1cCBzb3VyY2UKPiAtICAgICAgICAqIGlmIHVzZXJzIHRvdWNoIFhfT05LRVlf Qiwgc2VlIGFyY2gvYXJtL21hY2gtcHJpbWEyL3BtLmMKPiAtICAgICAgICAqLwo+IC0gICAgICAg bXV0ZXhfbG9jaygmaW5wdXQtPm11dGV4KTsKPiAtICAgICAgIGlmIChpbnB1dF9kZXZpY2VfZW5h YmxlZChpbnB1dCkpCj4gLSAgICAgICAgICAgICAgIHNpcmZzb2NfcHdyY190b2dnbGVfaW50ZXJy dXB0cyhwd3JjZHJ2LCB0cnVlKTsKPiAtICAgICAgIG11dGV4X3VubG9jaygmaW5wdXQtPm11dGV4 KTsKPiAtCj4gLSAgICAgICByZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIFNJTVBMRV9ERVZf UE1fT1BTKHNpcmZzb2NfcHdyY19wbV9vcHMsIE5VTEwsIHNpcmZzb2NfcHdyY19yZXN1bWUpOwo+ IC0KPiAtc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2lyZnNvY19wd3JjX2RyaXZlciA9 IHsKPiAtICAgICAgIC5wcm9iZSAgICAgICAgICA9IHNpcmZzb2NfcHdyY19wcm9iZSwKPiAtICAg ICAgIC5kcml2ZXIgICAgICAgICA9IHsKPiAtICAgICAgICAgICAgICAgLm5hbWUgICA9ICJzaXJm c29jLXB3cmMiLAo+IC0gICAgICAgICAgICAgICAucG0gICAgID0gJnNpcmZzb2NfcHdyY19wbV9v cHMsCj4gLSAgICAgICAgICAgICAgIC5vZl9tYXRjaF90YWJsZSA9IHNpcmZzb2NfcHdyY19vZl9t YXRjaCwKPiAtICAgICAgIH0KPiAtfTsKPiAtCj4gLW1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc2ly ZnNvY19wd3JjX2RyaXZlcik7Cj4gLQo+IC1NT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cj4gLU1P RFVMRV9BVVRIT1IoIkJpbmdodWEgRHVhbiA8QmluZ2h1YS5EdWFuQGNzci5jb20+LCBYaWFuZ2xv bmcgRHUgPFhpYW5nbG9uZy5EdUBjc3IuY29tPiIpOwo+IC1NT0RVTEVfREVTQ1JJUFRJT04oIkNT UiBQcmltYTIgUFdSQyBEcml2ZXIiKTsKPiAtTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzaXJmc29j LXB3cmMiKTsKPiAtLQo+IDIuMjkuMgo+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0t a2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==