From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lj1-f179.google.com (mail-lj1-f179.google.com [209.85.208.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 17CD0157E89 for ; Thu, 1 Feb 2024 06:39:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.179 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706769576; cv=none; b=dCi+MGWy0qH3lu9804BeQEOvKEqQMGBfR7HmVdjFyb5zNsqx72fJO6mG2CyojcAsVs8rbwzMibsi7wcDKRjEwkoqcPjoR77s79kTYNC4YqRRdVpVILzR56veOfiIMoYnABSVstWUZNc5JOV8AD0S6ECp0rbSqpNQF0ycd5UTeFI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706769576; c=relaxed/simple; bh=WxH0mtA7mCh21BWavUO5W1MErrYfB/5rbm38q3dMut0=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=qB7fbXYs5M08y087RSt/g5ieKGOh4QJrBAU/vbU1kdc1cv6qdLXDPy8LpQOg0boHm9qJpDFPj07LPmNFWy8gEB6uVeDlqe0hdjeVyUEAbCHCfhCgYqmGSt2pVBg/wJVm/7O3vgIEsILqgoz3LwT4AMHwy7cqQH7ekFIg+4w2J5U= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com; spf=pass smtp.mailfrom=sifive.com; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b=MKJ2DuNo; arc=none smtp.client-ip=209.85.208.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sifive.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b="MKJ2DuNo" Received: by mail-lj1-f179.google.com with SMTP id 38308e7fff4ca-2d066b532f0so8565671fa.1 for ; Wed, 31 Jan 2024 22:39:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1706769571; x=1707374371; darn=vger.kernel.org; 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=u390rklLKQ0WVD8yUameMugkoJX/jJeS6FO67rr0O0c=; b=MKJ2DuNoVcvkGCPeie1Zle0G2BfU4LNP0i/r4Hunn20TA6PIuLvFgMFjOaqL6cqnvW PUS6guaW0ddmisydCFjekIcgqYC3tG9fnfvTdxwm92z6653/bkTzUruedisFtW19wfPW QdIJVIVQ91bLh3JEIfG68amoqowSB0NTLBgyUx5AOZ1gfs60aDvyiHkuRIs3fTY5w+my nZlr8SILHO+HgXyilK16D3rvnOkh+baCgE8H7ZZV6Q44ZBL8yAdeYfBBC+vZvsrYMTgV FurS7bCt3m32d0yqab/Na0jJ2f0iMk28Gnt1XA5wCROKWAjEN2tZS2kgCpkcE9gAb/vV YoIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706769571; x=1707374371; 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=u390rklLKQ0WVD8yUameMugkoJX/jJeS6FO67rr0O0c=; b=iM+P0o6eJPddSiElrWXi/BQYMcuoqBLhGrY2u0/DJWbof1LrwTm2HAe1RfEEGnncEj Qywyud9K80rnN6CDn+yH4pLnkL26HpGFZl31PI5ARO74E37hJzjT/Rr/16OBRAcijG4l 8m0mcOiyoaachW8H7xMe6+PgsEKOB6kOAjclDuZPPbJcIOinC/CwYeCzIfeuMB9iz9ub msLMitHYdUcjR0M5fvlsoEgfgSSyYkzWocD1fwNth6Sf7Cnasuek0MUq5+TguMUCCKV8 TyoQ1dnWvjMy/pxwzehBXOCTShnViYICTj0kLC6nnhcvKrneJKzFR902q9cDycORCSR3 JhJg== X-Gm-Message-State: AOJu0YyUSDVlYlt7kZVYrB7X0v9xKuXRwPR64Gw6eS6U30toXeJdW71O 4+aR1R532kNzMNO9h2YXRRcHqhzTBWTRfvXg6B+sFOxdvq33PA9QC+xe/tsiEceMdEz5GLac3J0 Uq4ErJK+aPIx+FTAqbmFPHnWer8GnUcs3jB6n/A== X-Google-Smtp-Source: AGHT+IEtetVr0Wlcmuq2rnXO9AJ+CFFNHI8QTF+LiiiKwZY6fVAHW9G1aYFkoL+WZ9QlClaMXlWDsSW1pp3SEfM9l1M= X-Received: by 2002:a05:651c:1a2c:b0:2d0:75f6:8ed6 with SMTP id by44-20020a05651c1a2c00b002d075f68ed6mr812478ljb.47.1706769570864; Wed, 31 Jan 2024 22:39:30 -0800 (PST) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20240127161753.114685-1-apatel@ventanamicro.com> <20240127161753.114685-23-apatel@ventanamicro.com> In-Reply-To: <20240127161753.114685-23-apatel@ventanamicro.com> From: Andy Chiu Date: Thu, 1 Feb 2024 14:39:19 +0800 Message-ID: Subject: Re: [PATCH v12 22/25] irqchip: Add RISC-V advanced PLIC driver for direct-mode To: Anup Patel Cc: Palmer Dabbelt , Paul Walmsley , Thomas Gleixner , Rob Herring , Krzysztof Kozlowski , Frank Rowand , Conor Dooley , devicetree@vger.kernel.org, Saravana Kannan , Marc Zyngier , Anup Patel , linux-kernel@vger.kernel.org, =?UTF-8?B?QmrDtnJuIFTDtnBlbA==?= , Atish Patra , linux-riscv@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Andrew Jones Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Anup, On Sun, Jan 28, 2024 at 12:24=E2=80=AFAM Anup Patel wrote: > > The RISC-V advanced interrupt architecture (AIA) specification defines > advanced platform-level interrupt controller (APLIC) which has two modes > of operation: 1) Direct mode and 2) MSI mode. > (For more details, refer https://github.com/riscv/riscv-aia) > > In APLIC direct-mode, wired interrupts are forwared to CPUs (or HARTs) > as a local external interrupt. > > We add a platform irqchip driver for the RISC-V APLIC direct-mode to > support RISC-V platforms having only wired interrupts. > > Signed-off-by: Anup Patel > --- > drivers/irqchip/Kconfig | 5 + > drivers/irqchip/Makefile | 1 + > drivers/irqchip/irq-riscv-aplic-direct.c | 343 +++++++++++++++++++++++ > drivers/irqchip/irq-riscv-aplic-main.c | 232 +++++++++++++++ > drivers/irqchip/irq-riscv-aplic-main.h | 45 +++ > include/linux/irqchip/riscv-aplic.h | 119 ++++++++ > 6 files changed, 745 insertions(+) > create mode 100644 drivers/irqchip/irq-riscv-aplic-direct.c > create mode 100644 drivers/irqchip/irq-riscv-aplic-main.c > create mode 100644 drivers/irqchip/irq-riscv-aplic-main.h > create mode 100644 include/linux/irqchip/riscv-aplic.h > > diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig > index 2fc0cb32341a..dbc8811d3764 100644 > --- a/drivers/irqchip/Kconfig > +++ b/drivers/irqchip/Kconfig > @@ -546,6 +546,11 @@ config SIFIVE_PLIC > select IRQ_DOMAIN_HIERARCHY > select GENERIC_IRQ_EFFECTIVE_AFF_MASK if SMP > > +config RISCV_APLIC > + bool > + depends on RISCV > + select IRQ_DOMAIN_HIERARCHY > + > config RISCV_IMSIC > bool > depends on RISCV > diff --git a/drivers/irqchip/Makefile b/drivers/irqchip/Makefile > index abca445a3229..7f8289790ed8 100644 > --- a/drivers/irqchip/Makefile > +++ b/drivers/irqchip/Makefile > @@ -95,6 +95,7 @@ obj-$(CONFIG_QCOM_MPM) +=3D irq-= qcom-mpm.o > obj-$(CONFIG_CSKY_MPINTC) +=3D irq-csky-mpintc.o > obj-$(CONFIG_CSKY_APB_INTC) +=3D irq-csky-apb-intc.o > obj-$(CONFIG_RISCV_INTC) +=3D irq-riscv-intc.o > +obj-$(CONFIG_RISCV_APLIC) +=3D irq-riscv-aplic-main.o irq-r= iscv-aplic-direct.o > obj-$(CONFIG_RISCV_IMSIC) +=3D irq-riscv-imsic-state.o irq-= riscv-imsic-early.o irq-riscv-imsic-platform.o > obj-$(CONFIG_SIFIVE_PLIC) +=3D irq-sifive-plic.o > obj-$(CONFIG_IMX_IRQSTEER) +=3D irq-imx-irqsteer.o > diff --git a/drivers/irqchip/irq-riscv-aplic-direct.c b/drivers/irqchip/i= rq-riscv-aplic-direct.c > new file mode 100644 > index 000000000000..9ed2666bfb5e > --- /dev/null > +++ b/drivers/irqchip/irq-riscv-aplic-direct.c > @@ -0,0 +1,343 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * Copyright (C) 2021 Western Digital Corporation or its affiliates. > + * Copyright (C) 2022 Ventana Micro Systems Inc. > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#include "irq-riscv-aplic-main.h" > + > +#define APLIC_DISABLE_IDELIVERY 0 > +#define APLIC_ENABLE_IDELIVERY 1 > +#define APLIC_DISABLE_ITHRESHOLD 1 > +#define APLIC_ENABLE_ITHRESHOLD 0 > + > +struct aplic_direct { > + struct aplic_priv priv; > + struct irq_domain *irqdomain; > + struct cpumask lmask; > +}; > + > +struct aplic_idc { > + unsigned int hart_index; > + void __iomem *regs; > + struct aplic_direct *direct; > +}; > + > +static unsigned int aplic_direct_parent_irq; > +static DEFINE_PER_CPU(struct aplic_idc, aplic_idcs); > + > +static void aplic_direct_irq_eoi(struct irq_data *d) > +{ > + /* > + * The fasteoi_handler requires irq_eoi() callback hence > + * provide a dummy handler. > + */ > +} > + > +#ifdef CONFIG_SMP > +static int aplic_direct_set_affinity(struct irq_data *d, > + const struct cpumask *mask_val, bool fo= rce) > +{ > + struct aplic_priv *priv =3D irq_data_get_irq_chip_data(d); > + struct aplic_direct *direct =3D > + container_of(priv, struct aplic_direct, priv); > + struct aplic_idc *idc; > + unsigned int cpu, val; > + struct cpumask amask; > + void __iomem *target; > + > + cpumask_and(&amask, &direct->lmask, mask_val); > + > + if (force) > + cpu =3D cpumask_first(&amask); > + else > + cpu =3D cpumask_any_and(&amask, cpu_online_mask); > + > + if (cpu >=3D nr_cpu_ids) > + return -EINVAL; > + > + idc =3D per_cpu_ptr(&aplic_idcs, cpu); > + target =3D priv->regs + APLIC_TARGET_BASE; > + target +=3D (d->hwirq - 1) * sizeof(u32); > + val =3D idc->hart_index & APLIC_TARGET_HART_IDX_MASK; > + val <<=3D APLIC_TARGET_HART_IDX_SHIFT; > + val |=3D APLIC_DEFAULT_PRIORITY; > + writel(val, target); > + > + irq_data_update_effective_affinity(d, cpumask_of(cpu)); > + > + return IRQ_SET_MASK_OK_DONE; > +} > +#endif > + > +static struct irq_chip aplic_direct_chip =3D { > + .name =3D "APLIC-DIRECT", > + .irq_mask =3D aplic_irq_mask, > + .irq_unmask =3D aplic_irq_unmask, > + .irq_set_type =3D aplic_irq_set_type, > + .irq_eoi =3D aplic_direct_irq_eoi, > +#ifdef CONFIG_SMP > + .irq_set_affinity =3D aplic_direct_set_affinity, > +#endif > + .flags =3D IRQCHIP_SET_TYPE_MASKED | > + IRQCHIP_SKIP_SET_WAKE | > + IRQCHIP_MASK_ON_SUSPEND, > +}; > + > +static int aplic_direct_irqdomain_translate(struct irq_domain *d, > + struct irq_fwspec *fwspec, > + unsigned long *hwirq, > + unsigned int *type) > +{ > + struct aplic_priv *priv =3D d->host_data; > + > + return aplic_irqdomain_translate(fwspec, priv->gsi_base, > + hwirq, type); > +} > + > +static int aplic_direct_irqdomain_alloc(struct irq_domain *domain, > + unsigned int virq, unsigned int nr_i= rqs, > + void *arg) > +{ > + int i, ret; > + unsigned int type; > + irq_hw_number_t hwirq; > + struct irq_fwspec *fwspec =3D arg; > + struct aplic_priv *priv =3D domain->host_data; > + struct aplic_direct *direct =3D > + container_of(priv, struct aplic_direct, priv); > + > + ret =3D aplic_irqdomain_translate(fwspec, priv->gsi_base, > + &hwirq, &type); > + if (ret) > + return ret; > + > + for (i =3D 0; i < nr_irqs; i++) { > + irq_domain_set_info(domain, virq + i, hwirq + i, > + &aplic_direct_chip, priv, > + handle_fasteoi_irq, NULL, NULL); > + irq_set_affinity(virq + i, &direct->lmask); > + /* See the reason described in aplic_msi_irqdomain_alloc(= ) */ > + irq_set_status_flags(virq + i, IRQ_DISABLE_UNLAZY); > + } > + > + return 0; > +} > + > +static const struct irq_domain_ops aplic_direct_irqdomain_ops =3D { > + .translate =3D aplic_direct_irqdomain_translate, > + .alloc =3D aplic_direct_irqdomain_alloc, > + .free =3D irq_domain_free_irqs_top, > +}; > + > +/* > + * To handle an APLIC direct interrupts, we just read the CLAIMI registe= r > + * which will return highest priority pending interrupt and clear the > + * pending bit of the interrupt. This process is repeated until CLAIMI > + * register return zero value. > + */ > +static void aplic_direct_handle_irq(struct irq_desc *desc) > +{ > + struct aplic_idc *idc =3D this_cpu_ptr(&aplic_idcs); > + struct irq_chip *chip =3D irq_desc_get_chip(desc); > + struct irq_domain *irqdomain =3D idc->direct->irqdomain; > + irq_hw_number_t hw_irq; > + int irq; > + > + chained_irq_enter(chip, desc); > + > + while ((hw_irq =3D readl(idc->regs + APLIC_IDC_CLAIMI))) { > + hw_irq =3D hw_irq >> APLIC_IDC_TOPI_ID_SHIFT; > + irq =3D irq_find_mapping(irqdomain, hw_irq); > + > + if (unlikely(irq <=3D 0)) > + dev_warn_ratelimited(idc->direct->priv.dev, > + "hw_irq %lu mapping not foun= d\n", > + hw_irq); > + else > + generic_handle_irq(irq); > + } > + > + chained_irq_exit(chip, desc); > +} > + > +static void aplic_idc_set_delivery(struct aplic_idc *idc, bool en) > +{ > + u32 de =3D (en) ? APLIC_ENABLE_IDELIVERY : APLIC_DISABLE_IDELIVER= Y; > + u32 th =3D (en) ? APLIC_ENABLE_ITHRESHOLD : APLIC_DISABLE_ITHRESH= OLD; > + > + /* Priority must be less than threshold for interrupt triggering = */ > + writel(th, idc->regs + APLIC_IDC_ITHRESHOLD); > + > + /* Delivery must be set to 1 for interrupt triggering */ > + writel(de, idc->regs + APLIC_IDC_IDELIVERY); > +} > + > +static int aplic_direct_dying_cpu(unsigned int cpu) > +{ > + if (aplic_direct_parent_irq) > + disable_percpu_irq(aplic_direct_parent_irq); > + > + return 0; > +} > + > +static int aplic_direct_starting_cpu(unsigned int cpu) > +{ > + if (aplic_direct_parent_irq) > + enable_percpu_irq(aplic_direct_parent_irq, > + irq_get_trigger_type(aplic_direct_parent_= irq)); > + > + return 0; > +} > + > +static int aplic_direct_parse_parent_hwirq(struct device *dev, > + u32 index, u32 *parent_hwirq, > + unsigned long *parent_hartid) > +{ > + struct of_phandle_args parent; > + int rc; > + > + /* > + * Currently, only OF fwnode is supported so extend this > + * function for ACPI support. > + */ > + if (!is_of_node(dev->fwnode)) > + return -EINVAL; > + > + rc =3D of_irq_parse_one(to_of_node(dev->fwnode), index, &parent); > + if (rc) > + return rc; > + > + rc =3D riscv_of_parent_hartid(parent.np, parent_hartid); > + if (rc) > + return rc; > + > + *parent_hwirq =3D parent.args[0]; > + return 0; > +} > + > +int aplic_direct_setup(struct device *dev, void __iomem *regs) > +{ > + int i, j, rc, cpu, setup_count =3D 0; > + struct aplic_direct *direct; > + struct aplic_priv *priv; > + struct irq_domain *domain; > + unsigned long hartid; > + struct aplic_idc *idc; > + u32 val, hwirq; > + > + direct =3D kzalloc(sizeof(*direct), GFP_KERNEL); > + if (!direct) > + return -ENOMEM; > + priv =3D &direct->priv; > + > + rc =3D aplic_setup_priv(priv, dev, regs); > + if (rc) { > + dev_err(dev, "failed to create APLIC context\n"); > + kfree(direct); > + return rc; > + } > + > + /* Setup per-CPU IDC and target CPU mask */ > + for (i =3D 0; i < priv->nr_idcs; i++) { > + rc =3D aplic_direct_parse_parent_hwirq(dev, i, &hwirq, &h= artid); > + if (rc) { > + dev_warn(dev, "parent irq for IDC%d not found\n",= i); > + continue; > + } > + > + /* > + * Skip interrupts other than external interrupts for > + * current privilege level. > + */ > + if (hwirq !=3D RV_IRQ_EXT) > + continue; > + > + cpu =3D riscv_hartid_to_cpuid(hartid); > + if (cpu < 0) { > + dev_warn(dev, "invalid cpuid for IDC%d\n", i); > + continue; > + } > + > + cpumask_set_cpu(cpu, &direct->lmask); > + > + idc =3D per_cpu_ptr(&aplic_idcs, cpu); > + idc->hart_index =3D i; > + idc->regs =3D priv->regs + APLIC_IDC_BASE + i * APLIC_IDC= _SIZE; > + idc->direct =3D direct; > + > + aplic_idc_set_delivery(idc, true); > + > + /* > + * Boot cpu might not have APLIC hart_index =3D 0 so chec= k > + * and update target registers of all interrupts. > + */ IIUC, the use of smp_processor_id() has to be protected by turning off preemption. So maybe please consider adding: + preempt_disable(); > + if (cpu =3D=3D smp_processor_id() && idc->hart_index) { > + val =3D idc->hart_index & APLIC_TARGET_HART_IDX_M= ASK; > + val <<=3D APLIC_TARGET_HART_IDX_SHIFT; > + val |=3D APLIC_DEFAULT_PRIORITY; > + for (j =3D 1; j <=3D priv->nr_irqs; j++) > + writel(val, priv->regs + APLIC_TARGET_BAS= E + > + (j - 1) * sizeof(u32)); > + } , and here: + preempt_enable(); Or use get_cpu()/put_cpu() variant to guard the use of processor id. > + > + setup_count++; > + } > + > + /* Find parent domain and register chained handler */ > + domain =3D irq_find_matching_fwnode(riscv_get_intc_hwnode(), > + DOMAIN_BUS_ANY); > + if (!aplic_direct_parent_irq && domain) { > + aplic_direct_parent_irq =3D irq_create_mapping(domain, RV= _IRQ_EXT); > + if (aplic_direct_parent_irq) { > + irq_set_chained_handler(aplic_direct_parent_irq, > + aplic_direct_handle_irq); > + > + /* > + * Setup CPUHP notifier to enable parent > + * interrupt on all CPUs > + */ > + cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, > + "irqchip/riscv/aplic:starting", > + aplic_direct_starting_cpu, > + aplic_direct_dying_cpu); > + } > + } > + > + /* Fail if we were not able to setup IDC for any CPU */ > + if (!setup_count) { > + kfree(direct); > + return -ENODEV; > + } > + > + /* Setup global config and interrupt delivery */ > + aplic_init_hw_global(priv, false); > + > + /* Create irq domain instance for the APLIC */ > + direct->irqdomain =3D irq_domain_create_linear(dev->fwnode, > + priv->nr_irqs + 1, > + &aplic_direct_irqdomai= n_ops, > + priv); > + if (!direct->irqdomain) { > + dev_err(dev, "failed to create direct irq domain\n"); > + kfree(direct); > + return -ENOMEM; > + } > + > + /* Advertise the interrupt controller */ > + dev_info(dev, "%d interrupts directly connected to %d CPUs\n", > + priv->nr_irqs, priv->nr_idcs); > + > + return 0; > +} > diff --git a/drivers/irqchip/irq-riscv-aplic-main.c b/drivers/irqchip/irq= -riscv-aplic-main.c > new file mode 100644 > index 000000000000..87450708a733 > --- /dev/null > +++ b/drivers/irqchip/irq-riscv-aplic-main.c > @@ -0,0 +1,232 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * Copyright (C) 2021 Western Digital Corporation or its affiliates. > + * Copyright (C) 2022 Ventana Micro Systems Inc. > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > + > +#include "irq-riscv-aplic-main.h" > + > +void aplic_irq_unmask(struct irq_data *d) > +{ > + struct aplic_priv *priv =3D irq_data_get_irq_chip_data(d); > + > + writel(d->hwirq, priv->regs + APLIC_SETIENUM); > +} > + > +void aplic_irq_mask(struct irq_data *d) > +{ > + struct aplic_priv *priv =3D irq_data_get_irq_chip_data(d); > + > + writel(d->hwirq, priv->regs + APLIC_CLRIENUM); > +} > + > +int aplic_irq_set_type(struct irq_data *d, unsigned int type) > +{ > + u32 val =3D 0; > + void __iomem *sourcecfg; > + struct aplic_priv *priv =3D irq_data_get_irq_chip_data(d); > + > + switch (type) { > + case IRQ_TYPE_NONE: > + val =3D APLIC_SOURCECFG_SM_INACTIVE; > + break; > + case IRQ_TYPE_LEVEL_LOW: > + val =3D APLIC_SOURCECFG_SM_LEVEL_LOW; > + break; > + case IRQ_TYPE_LEVEL_HIGH: > + val =3D APLIC_SOURCECFG_SM_LEVEL_HIGH; > + break; > + case IRQ_TYPE_EDGE_FALLING: > + val =3D APLIC_SOURCECFG_SM_EDGE_FALL; > + break; > + case IRQ_TYPE_EDGE_RISING: > + val =3D APLIC_SOURCECFG_SM_EDGE_RISE; > + break; > + default: > + return -EINVAL; > + } > + > + sourcecfg =3D priv->regs + APLIC_SOURCECFG_BASE; > + sourcecfg +=3D (d->hwirq - 1) * sizeof(u32); > + writel(val, sourcecfg); > + > + return 0; > +} > + > +int aplic_irqdomain_translate(struct irq_fwspec *fwspec, u32 gsi_base, > + unsigned long *hwirq, unsigned int *type) > +{ > + if (WARN_ON(fwspec->param_count < 2)) > + return -EINVAL; > + if (WARN_ON(!fwspec->param[0])) > + return -EINVAL; > + > + /* For DT, gsi_base is always zero. */ > + *hwirq =3D fwspec->param[0] - gsi_base; > + *type =3D fwspec->param[1] & IRQ_TYPE_SENSE_MASK; > + > + WARN_ON(*type =3D=3D IRQ_TYPE_NONE); > + > + return 0; > +} > + > +void aplic_init_hw_global(struct aplic_priv *priv, bool msi_mode) > +{ > + u32 val; > +#ifdef CONFIG_RISCV_M_MODE > + u32 valH; > + > + if (msi_mode) { > + val =3D priv->msicfg.base_ppn; > + valH =3D ((u64)priv->msicfg.base_ppn >> 32) & > + APLIC_xMSICFGADDRH_BAPPN_MASK; > + valH |=3D (priv->msicfg.lhxw & APLIC_xMSICFGADDRH_LHXW_MA= SK) > + << APLIC_xMSICFGADDRH_LHXW_SHIFT; > + valH |=3D (priv->msicfg.hhxw & APLIC_xMSICFGADDRH_HHXW_MA= SK) > + << APLIC_xMSICFGADDRH_HHXW_SHIFT; > + valH |=3D (priv->msicfg.lhxs & APLIC_xMSICFGADDRH_LHXS_MA= SK) > + << APLIC_xMSICFGADDRH_LHXS_SHIFT; > + valH |=3D (priv->msicfg.hhxs & APLIC_xMSICFGADDRH_HHXS_MA= SK) > + << APLIC_xMSICFGADDRH_HHXS_SHIFT; > + writel(val, priv->regs + APLIC_xMSICFGADDR); > + writel(valH, priv->regs + APLIC_xMSICFGADDRH); > + } > +#endif > + > + /* Setup APLIC domaincfg register */ > + val =3D readl(priv->regs + APLIC_DOMAINCFG); > + val |=3D APLIC_DOMAINCFG_IE; > + if (msi_mode) > + val |=3D APLIC_DOMAINCFG_DM; > + writel(val, priv->regs + APLIC_DOMAINCFG); > + if (readl(priv->regs + APLIC_DOMAINCFG) !=3D val) > + dev_warn(priv->dev, "unable to write 0x%x in domaincfg\n"= , > + val); > +} > + > +static void aplic_init_hw_irqs(struct aplic_priv *priv) > +{ > + int i; > + > + /* Disable all interrupts */ > + for (i =3D 0; i <=3D priv->nr_irqs; i +=3D 32) > + writel(-1U, priv->regs + APLIC_CLRIE_BASE + > + (i / 32) * sizeof(u32)); > + > + /* Set interrupt type and default priority for all interrupts */ > + for (i =3D 1; i <=3D priv->nr_irqs; i++) { > + writel(0, priv->regs + APLIC_SOURCECFG_BASE + > + (i - 1) * sizeof(u32)); > + writel(APLIC_DEFAULT_PRIORITY, > + priv->regs + APLIC_TARGET_BASE + > + (i - 1) * sizeof(u32)); > + } > + > + /* Clear APLIC domaincfg */ > + writel(0, priv->regs + APLIC_DOMAINCFG); > +} > + > +int aplic_setup_priv(struct aplic_priv *priv, struct device *dev, > + void __iomem *regs) > +{ > + struct of_phandle_args parent; > + int rc; > + > + /* > + * Currently, only OF fwnode is supported so extend this > + * function for ACPI support. > + */ > + if (!is_of_node(dev->fwnode)) > + return -EINVAL; > + > + /* Save device pointer and register base */ > + priv->dev =3D dev; > + priv->regs =3D regs; > + > + /* Find out number of interrupt sources */ > + rc =3D of_property_read_u32(to_of_node(dev->fwnode), > + "riscv,num-sources", > + &priv->nr_irqs); > + if (rc) { > + dev_err(dev, "failed to get number of interrupt sources\n= "); > + return rc; > + } > + > + /* > + * Find out number of IDCs based on parent interrupts > + * > + * If "msi-parent" property is present then we ignore the > + * APLIC IDCs which forces the APLIC driver to use MSI mode. > + */ > + if (!of_property_present(to_of_node(dev->fwnode), "msi-parent")) = { > + while (!of_irq_parse_one(to_of_node(dev->fwnode), > + priv->nr_idcs, &parent)) > + priv->nr_idcs++; > + } > + > + /* Setup initial state APLIC interrupts */ > + aplic_init_hw_irqs(priv); > + > + return 0; > +} > + > +static int aplic_probe(struct platform_device *pdev) > +{ > + struct device *dev =3D &pdev->dev; > + bool msi_mode =3D false; > + struct resource *res; > + void __iomem *regs; > + int rc; > + > + /* Map the MMIO registers */ > + res =3D platform_get_resource(pdev, IORESOURCE_MEM, 0); > + if (!res) { > + dev_err(dev, "failed to get MMIO resource\n"); > + return -EINVAL; > + } > + regs =3D devm_ioremap(&pdev->dev, res->start, resource_size(res))= ; > + if (!regs) { > + dev_err(dev, "failed map MMIO registers\n"); > + return -ENOMEM; > + } > + > + /* > + * If msi-parent property is present then setup APLIC MSI > + * mode otherwise setup APLIC direct mode. > + */ > + if (is_of_node(dev->fwnode)) > + msi_mode =3D of_property_present(to_of_node(dev->fwnode), > + "msi-parent"); > + if (msi_mode) > + rc =3D -ENODEV; > + else > + rc =3D aplic_direct_setup(dev, regs); > + if (rc) { > + dev_err(dev, "failed setup APLIC in %s mode\n", > + msi_mode ? "MSI" : "direct"); > + return rc; > + } > + > + return 0; > +} > + > +static const struct of_device_id aplic_match[] =3D { > + { .compatible =3D "riscv,aplic" }, > + {} > +}; > + > +static struct platform_driver aplic_driver =3D { > + .driver =3D { > + .name =3D "riscv-aplic", > + .of_match_table =3D aplic_match, > + }, > + .probe =3D aplic_probe, > +}; > +builtin_platform_driver(aplic_driver); > diff --git a/drivers/irqchip/irq-riscv-aplic-main.h b/drivers/irqchip/irq= -riscv-aplic-main.h > new file mode 100644 > index 000000000000..474a04229334 > --- /dev/null > +++ b/drivers/irqchip/irq-riscv-aplic-main.h > @@ -0,0 +1,45 @@ > +/* SPDX-License-Identifier: GPL-2.0-only */ > +/* > + * Copyright (C) 2021 Western Digital Corporation or its affiliates. > + * Copyright (C) 2022 Ventana Micro Systems Inc. > + */ > + > +#ifndef _IRQ_RISCV_APLIC_MAIN_H > +#define _IRQ_RISCV_APLIC_MAIN_H > + > +#include > +#include > +#include > +#include > +#include > + > +#define APLIC_DEFAULT_PRIORITY 1 > + > +struct aplic_msicfg { > + phys_addr_t base_ppn; > + u32 hhxs; > + u32 hhxw; > + u32 lhxs; > + u32 lhxw; > +}; > + > +struct aplic_priv { > + struct device *dev; > + u32 gsi_base; > + u32 nr_irqs; > + u32 nr_idcs; > + void __iomem *regs; > + struct aplic_msicfg msicfg; > +}; > + > +void aplic_irq_unmask(struct irq_data *d); > +void aplic_irq_mask(struct irq_data *d); > +int aplic_irq_set_type(struct irq_data *d, unsigned int type); > +int aplic_irqdomain_translate(struct irq_fwspec *fwspec, u32 gsi_base, > + unsigned long *hwirq, unsigned int *type); > +void aplic_init_hw_global(struct aplic_priv *priv, bool msi_mode); > +int aplic_setup_priv(struct aplic_priv *priv, struct device *dev, > + void __iomem *regs); > +int aplic_direct_setup(struct device *dev, void __iomem *regs); > + > +#endif > diff --git a/include/linux/irqchip/riscv-aplic.h b/include/linux/irqchip/= riscv-aplic.h > new file mode 100644 > index 000000000000..97e198ea0109 > --- /dev/null > +++ b/include/linux/irqchip/riscv-aplic.h > @@ -0,0 +1,119 @@ > +/* SPDX-License-Identifier: GPL-2.0-only */ > +/* > + * Copyright (C) 2021 Western Digital Corporation or its affiliates. > + * Copyright (C) 2022 Ventana Micro Systems Inc. > + */ > +#ifndef __LINUX_IRQCHIP_RISCV_APLIC_H > +#define __LINUX_IRQCHIP_RISCV_APLIC_H > + > +#include > + > +#define APLIC_MAX_IDC BIT(14) > +#define APLIC_MAX_SOURCE 1024 > + > +#define APLIC_DOMAINCFG 0x0000 > +#define APLIC_DOMAINCFG_RDONLY 0x80000000 > +#define APLIC_DOMAINCFG_IE BIT(8) > +#define APLIC_DOMAINCFG_DM BIT(2) > +#define APLIC_DOMAINCFG_BE BIT(0) > + > +#define APLIC_SOURCECFG_BASE 0x0004 > +#define APLIC_SOURCECFG_D BIT(10) > +#define APLIC_SOURCECFG_CHILDIDX_MASK 0x000003ff > +#define APLIC_SOURCECFG_SM_MASK 0x00000007 > +#define APLIC_SOURCECFG_SM_INACTIVE 0x0 > +#define APLIC_SOURCECFG_SM_DETACH 0x1 > +#define APLIC_SOURCECFG_SM_EDGE_RISE 0x4 > +#define APLIC_SOURCECFG_SM_EDGE_FALL 0x5 > +#define APLIC_SOURCECFG_SM_LEVEL_HIGH 0x6 > +#define APLIC_SOURCECFG_SM_LEVEL_LOW 0x7 > + > +#define APLIC_MMSICFGADDR 0x1bc0 > +#define APLIC_MMSICFGADDRH 0x1bc4 > +#define APLIC_SMSICFGADDR 0x1bc8 > +#define APLIC_SMSICFGADDRH 0x1bcc > + > +#ifdef CONFIG_RISCV_M_MODE > +#define APLIC_xMSICFGADDR APLIC_MMSICFGADDR > +#define APLIC_xMSICFGADDRH APLIC_MMSICFGADDRH > +#else > +#define APLIC_xMSICFGADDR APLIC_SMSICFGADDR > +#define APLIC_xMSICFGADDRH APLIC_SMSICFGADDRH > +#endif > + > +#define APLIC_xMSICFGADDRH_L BIT(31) > +#define APLIC_xMSICFGADDRH_HHXS_MASK 0x1f > +#define APLIC_xMSICFGADDRH_HHXS_SHIFT 24 > +#define APLIC_xMSICFGADDRH_LHXS_MASK 0x7 > +#define APLIC_xMSICFGADDRH_LHXS_SHIFT 20 > +#define APLIC_xMSICFGADDRH_HHXW_MASK 0x7 > +#define APLIC_xMSICFGADDRH_HHXW_SHIFT 16 > +#define APLIC_xMSICFGADDRH_LHXW_MASK 0xf > +#define APLIC_xMSICFGADDRH_LHXW_SHIFT 12 > +#define APLIC_xMSICFGADDRH_BAPPN_MASK 0xfff > + > +#define APLIC_xMSICFGADDR_PPN_SHIFT 12 > + > +#define APLIC_xMSICFGADDR_PPN_HART(__lhxs) \ > + (BIT(__lhxs) - 1) > + > +#define APLIC_xMSICFGADDR_PPN_LHX_MASK(__lhxw) \ > + (BIT(__lhxw) - 1) > +#define APLIC_xMSICFGADDR_PPN_LHX_SHIFT(__lhxs) \ > + ((__lhxs)) > +#define APLIC_xMSICFGADDR_PPN_LHX(__lhxw, __lhxs) \ > + (APLIC_xMSICFGADDR_PPN_LHX_MASK(__lhxw) << \ > + APLIC_xMSICFGADDR_PPN_LHX_SHIFT(__lhxs)) > + > +#define APLIC_xMSICFGADDR_PPN_HHX_MASK(__hhxw) \ > + (BIT(__hhxw) - 1) > +#define APLIC_xMSICFGADDR_PPN_HHX_SHIFT(__hhxs) \ > + ((__hhxs) + APLIC_xMSICFGADDR_PPN_SHIFT) > +#define APLIC_xMSICFGADDR_PPN_HHX(__hhxw, __hhxs) \ > + (APLIC_xMSICFGADDR_PPN_HHX_MASK(__hhxw) << \ > + APLIC_xMSICFGADDR_PPN_HHX_SHIFT(__hhxs)) > + > +#define APLIC_IRQBITS_PER_REG 32 > + > +#define APLIC_SETIP_BASE 0x1c00 > +#define APLIC_SETIPNUM 0x1cdc > + > +#define APLIC_CLRIP_BASE 0x1d00 > +#define APLIC_CLRIPNUM 0x1ddc > + > +#define APLIC_SETIE_BASE 0x1e00 > +#define APLIC_SETIENUM 0x1edc > + > +#define APLIC_CLRIE_BASE 0x1f00 > +#define APLIC_CLRIENUM 0x1fdc > + > +#define APLIC_SETIPNUM_LE 0x2000 > +#define APLIC_SETIPNUM_BE 0x2004 > + > +#define APLIC_GENMSI 0x3000 > + > +#define APLIC_TARGET_BASE 0x3004 > +#define APLIC_TARGET_HART_IDX_SHIFT 18 > +#define APLIC_TARGET_HART_IDX_MASK 0x3fff > +#define APLIC_TARGET_GUEST_IDX_SHIFT 12 > +#define APLIC_TARGET_GUEST_IDX_MASK 0x3f > +#define APLIC_TARGET_IPRIO_MASK 0xff > +#define APLIC_TARGET_EIID_MASK 0x7ff > + > +#define APLIC_IDC_BASE 0x4000 > +#define APLIC_IDC_SIZE 32 > + > +#define APLIC_IDC_IDELIVERY 0x00 > + > +#define APLIC_IDC_IFORCE 0x04 > + > +#define APLIC_IDC_ITHRESHOLD 0x08 > + > +#define APLIC_IDC_TOPI 0x18 > +#define APLIC_IDC_TOPI_ID_SHIFT 16 > +#define APLIC_IDC_TOPI_ID_MASK 0x3ff > +#define APLIC_IDC_TOPI_PRIO_MASK 0xff > + > +#define APLIC_IDC_CLAIMI 0x1c > + > +#endif > -- > 2.34.1 > > > _______________________________________________ > linux-riscv mailing list > linux-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-riscv Thanks, Andy 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 E701BC47DDF for ; Thu, 1 Feb 2024 06:39:44 +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=PoRotkkvpdwzBmtET8U2QrWUWNiVPyuewu8pZkd1Swo=; b=M9/2SxTsfPpjZU DkqmvMYkl+uJ9f3fWFOOs3SbTbsTRRco1IOtOWURYpfgauOGTBdAV96+Lmzn3LHfscitCH2N7z8nK t3IWm2naKufcaCOpmIc6oH0vVDPMD3/Gio6oSZuDFCi4Y6mrKoaCCghS/HajVrvA2sQZW8oeA70jV zEpm77VtiPjRYX4It84NWz07WGhctk9k+qu7/DtE3jjdlSoda+4i6AkVEsaUwW//OHdOR7rbeynx5 XejNc8KCBwsuzWfg3cqr7frpH7kcjmC1DFL0HC2LgXf8y68FtFBLyjL9ATkdKIbbEA9yZuVNqW78L VgqwPEixII3gj7zfpFEQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rVQjb-00000006mvR-0WfW; Thu, 01 Feb 2024 06:39:39 +0000 Received: from mail-lj1-x22d.google.com ([2a00:1450:4864:20::22d]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rVQjW-00000006msu-1uLI for linux-riscv@lists.infradead.org; Thu, 01 Feb 2024 06:39:37 +0000 Received: by mail-lj1-x22d.google.com with SMTP id 38308e7fff4ca-2cf591d22dfso6940631fa.0 for ; Wed, 31 Jan 2024 22:39:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1706769571; x=1707374371; darn=lists.infradead.org; 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=u390rklLKQ0WVD8yUameMugkoJX/jJeS6FO67rr0O0c=; b=nl14iOI2Wm2xG3RJ3h1Uly/domuBvoMp+l09nSNETpzl/yMC62kFfRPwKY1SYjcGcM QVYAJCawKZvFd3acy532lCKJXX6QMpbPR5BtlZK14B37FRip7RBXQ7EBBwPWc6LETIdO ym1TJOKnOzmpXPoIi7RhPz0JJYfO2my0d/btgG1TXsVn5om8BWlXFdLQYcJOIVbe7mox 4LJjy2jDAl4IXsgTw94xxJvelS4RzPkk0u09F9h3JnkNvDo+nANExaooHdasT1Xw9IJ4 ff+VcEtgdJ0IWg/Y1+N+7SegjVTufcA9BfffL4QWuA1RIMKrRHLYDpLhUd1aNQXnD4eu ysuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706769571; x=1707374371; 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=u390rklLKQ0WVD8yUameMugkoJX/jJeS6FO67rr0O0c=; b=UCnCwK88GfhPyaoHsKDhSa0TdodVnoYJhk6Nqa5twhTDBtcQJhHSB7JHkCorWbk/3J x3K0X0YV7ir5uY9uBaMwq3tWjYMXqdssAC3Y3DbHa2sJWrJXXTvOIL3CYdlIup7c4pPT LYSl0kNHgbyqg5kZbGjqgsI7qkxIF7WoXwigC0pFt8hy0hOubgT0P0nrvN3gJmOIYfJD alAztc5jlqANPmnnFlZW6XuXldZE/vDn46ZK2CYgUNIBWb5gNK9jTS7UZGQ0QNxier2k XxHV2YwgTO50yknJ//LNMQWgt+gK8hqh+Qf1uKaywicGnPgBb2bGTVGd0sL4bECjW/+l HOSw== X-Gm-Message-State: AOJu0YyQD2CKVNKE/+vUli0JLqBvAG38mryeOcDiEfhFb3sKFDVBYAT8 7gXHwpYjLIaijGjO5Lue4B1QZWXXbtb0Ejjh2B8fPGAEK5pAw5wJx/yMzKLV7ltpQPIbO6ndCsj Dgitm1u09unzkF0r2FsnDq4UedqilyyT231wd8A== X-Google-Smtp-Source: AGHT+IEtetVr0Wlcmuq2rnXO9AJ+CFFNHI8QTF+LiiiKwZY6fVAHW9G1aYFkoL+WZ9QlClaMXlWDsSW1pp3SEfM9l1M= X-Received: by 2002:a05:651c:1a2c:b0:2d0:75f6:8ed6 with SMTP id by44-20020a05651c1a2c00b002d075f68ed6mr812478ljb.47.1706769570864; Wed, 31 Jan 2024 22:39:30 -0800 (PST) MIME-Version: 1.0 References: <20240127161753.114685-1-apatel@ventanamicro.com> <20240127161753.114685-23-apatel@ventanamicro.com> In-Reply-To: <20240127161753.114685-23-apatel@ventanamicro.com> From: Andy Chiu Date: Thu, 1 Feb 2024 14:39:19 +0800 Message-ID: Subject: Re: [PATCH v12 22/25] irqchip: Add RISC-V advanced PLIC driver for direct-mode To: Anup Patel Cc: Palmer Dabbelt , Paul Walmsley , Thomas Gleixner , Rob Herring , Krzysztof Kozlowski , Frank Rowand , Conor Dooley , devicetree@vger.kernel.org, Saravana Kannan , Marc Zyngier , Anup Patel , linux-kernel@vger.kernel.org, =?UTF-8?B?QmrDtnJuIFTDtnBlbA==?= , Atish Patra , linux-riscv@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Andrew Jones X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240131_223934_578976_6D71F995 X-CRM114-Status: GOOD ( 33.18 ) X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org SGkgQW51cCwKCk9uIFN1biwgSmFuIDI4LCAyMDI0IGF0IDEyOjI04oCvQU0gQW51cCBQYXRlbCA8 YXBhdGVsQHZlbnRhbmFtaWNyby5jb20+IHdyb3RlOgo+Cj4gVGhlIFJJU0MtViBhZHZhbmNlZCBp bnRlcnJ1cHQgYXJjaGl0ZWN0dXJlIChBSUEpIHNwZWNpZmljYXRpb24gZGVmaW5lcwo+IGFkdmFu Y2VkIHBsYXRmb3JtLWxldmVsIGludGVycnVwdCBjb250cm9sbGVyIChBUExJQykgd2hpY2ggaGFz IHR3byBtb2Rlcwo+IG9mIG9wZXJhdGlvbjogMSkgRGlyZWN0IG1vZGUgYW5kIDIpIE1TSSBtb2Rl Lgo+IChGb3IgbW9yZSBkZXRhaWxzLCByZWZlciBodHRwczovL2dpdGh1Yi5jb20vcmlzY3Yvcmlz Y3YtYWlhKQo+Cj4gSW4gQVBMSUMgZGlyZWN0LW1vZGUsIHdpcmVkIGludGVycnVwdHMgYXJlIGZv cndhcmVkIHRvIENQVXMgKG9yIEhBUlRzKQo+IGFzIGEgbG9jYWwgZXh0ZXJuYWwgaW50ZXJydXB0 Lgo+Cj4gV2UgYWRkIGEgcGxhdGZvcm0gaXJxY2hpcCBkcml2ZXIgZm9yIHRoZSBSSVNDLVYgQVBM SUMgZGlyZWN0LW1vZGUgdG8KPiBzdXBwb3J0IFJJU0MtViBwbGF0Zm9ybXMgaGF2aW5nIG9ubHkg d2lyZWQgaW50ZXJydXB0cy4KPgo+IFNpZ25lZC1vZmYtYnk6IEFudXAgUGF0ZWwgPGFwYXRlbEB2 ZW50YW5hbWljcm8uY29tPgo+IC0tLQo+ICBkcml2ZXJzL2lycWNoaXAvS2NvbmZpZyAgICAgICAg ICAgICAgICAgIHwgICA1ICsKPiAgZHJpdmVycy9pcnFjaGlwL01ha2VmaWxlICAgICAgICAgICAg ICAgICB8ICAgMSArCj4gIGRyaXZlcnMvaXJxY2hpcC9pcnEtcmlzY3YtYXBsaWMtZGlyZWN0LmMg fCAzNDMgKysrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9pcnFjaGlwL2lycS1yaXNj di1hcGxpYy1tYWluLmMgICB8IDIzMiArKysrKysrKysrKysrKysKPiAgZHJpdmVycy9pcnFjaGlw L2lycS1yaXNjdi1hcGxpYy1tYWluLmggICB8ICA0NSArKysKPiAgaW5jbHVkZS9saW51eC9pcnFj aGlwL3Jpc2N2LWFwbGljLmggICAgICB8IDExOSArKysrKysrKwo+ICA2IGZpbGVzIGNoYW5nZWQs IDc0NSBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2lycWNoaXAv aXJxLXJpc2N2LWFwbGljLWRpcmVjdC5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2ly cWNoaXAvaXJxLXJpc2N2LWFwbGljLW1haW4uYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9pcnFjaGlwL2lycS1yaXNjdi1hcGxpYy1tYWluLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGlu Y2x1ZGUvbGludXgvaXJxY2hpcC9yaXNjdi1hcGxpYy5oCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9pcnFjaGlwL0tjb25maWcgYi9kcml2ZXJzL2lycWNoaXAvS2NvbmZpZwo+IGluZGV4IDJmYzBj YjMyMzQxYS4uZGJjODgxMWQzNzY0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvaXJxY2hpcC9LY29u ZmlnCj4gKysrIGIvZHJpdmVycy9pcnFjaGlwL0tjb25maWcKPiBAQCAtNTQ2LDYgKzU0NiwxMSBA QCBjb25maWcgU0lGSVZFX1BMSUMKPiAgICAgICAgIHNlbGVjdCBJUlFfRE9NQUlOX0hJRVJBUkNI WQo+ICAgICAgICAgc2VsZWN0IEdFTkVSSUNfSVJRX0VGRkVDVElWRV9BRkZfTUFTSyBpZiBTTVAK Pgo+ICtjb25maWcgUklTQ1ZfQVBMSUMKPiArICAgICAgIGJvb2wKPiArICAgICAgIGRlcGVuZHMg b24gUklTQ1YKPiArICAgICAgIHNlbGVjdCBJUlFfRE9NQUlOX0hJRVJBUkNIWQo+ICsKPiAgY29u ZmlnIFJJU0NWX0lNU0lDCj4gICAgICAgICBib29sCj4gICAgICAgICBkZXBlbmRzIG9uIFJJU0NW Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9NYWtlZmlsZSBiL2RyaXZlcnMvaXJxY2hp cC9NYWtlZmlsZQo+IGluZGV4IGFiY2E0NDVhMzIyOS4uN2Y4Mjg5NzkwZWQ4IDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvaXJxY2hpcC9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvaXJxY2hpcC9NYWtl ZmlsZQo+IEBAIC05NSw2ICs5NSw3IEBAIG9iai0kKENPTkZJR19RQ09NX01QTSkgICAgICAgICAg ICAgICAgICAgICAgICArPSBpcnEtcWNvbS1tcG0ubwo+ICBvYmotJChDT05GSUdfQ1NLWV9NUElO VEMpICAgICAgICAgICAgICArPSBpcnEtY3NreS1tcGludGMubwo+ICBvYmotJChDT05GSUdfQ1NL WV9BUEJfSU5UQykgICAgICAgICAgICArPSBpcnEtY3NreS1hcGItaW50Yy5vCj4gIG9iai0kKENP TkZJR19SSVNDVl9JTlRDKSAgICAgICAgICAgICAgICs9IGlycS1yaXNjdi1pbnRjLm8KPiArb2Jq LSQoQ09ORklHX1JJU0NWX0FQTElDKSAgICAgICAgICAgICAgKz0gaXJxLXJpc2N2LWFwbGljLW1h aW4ubyBpcnEtcmlzY3YtYXBsaWMtZGlyZWN0Lm8KPiAgb2JqLSQoQ09ORklHX1JJU0NWX0lNU0lD KSAgICAgICAgICAgICAgKz0gaXJxLXJpc2N2LWltc2ljLXN0YXRlLm8gaXJxLXJpc2N2LWltc2lj LWVhcmx5Lm8gaXJxLXJpc2N2LWltc2ljLXBsYXRmb3JtLm8KPiAgb2JqLSQoQ09ORklHX1NJRklW RV9QTElDKSAgICAgICAgICAgICAgKz0gaXJxLXNpZml2ZS1wbGljLm8KPiAgb2JqLSQoQ09ORklH X0lNWF9JUlFTVEVFUikgICAgICAgICAgICAgKz0gaXJxLWlteC1pcnFzdGVlci5vCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtcmlzY3YtYXBsaWMtZGlyZWN0LmMgYi9kcml2ZXJz L2lycWNoaXAvaXJxLXJpc2N2LWFwbGljLWRpcmVjdC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwMDAwMDAuLjllZDI2NjZiZmI1ZQo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9kcml2ZXJzL2lycWNoaXAvaXJxLXJpc2N2LWFwbGljLWRpcmVjdC5jCj4gQEAgLTAsMCArMSwz NDMgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICog Q29weXJpZ2h0IChDKSAyMDIxIFdlc3Rlcm4gRGlnaXRhbCBDb3Jwb3JhdGlvbiBvciBpdHMgYWZm aWxpYXRlcy4KPiArICogQ29weXJpZ2h0IChDKSAyMDIyIFZlbnRhbmEgTWljcm8gU3lzdGVtcyBJ bmMuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgo+ICsjaW5jbHVkZSA8 bGludXgvY3B1Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2lycWNoaXAuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvY2hhaW5lZF9pcnEu aD4KPiArI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvcmlzY3YtYXBsaWMuaD4KPiArI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgo+ICsjaW5j bHVkZSA8bGludXgvcHJpbnRrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KPiArCj4gKyNp bmNsdWRlICJpcnEtcmlzY3YtYXBsaWMtbWFpbi5oIgo+ICsKPiArI2RlZmluZSBBUExJQ19ESVNB QkxFX0lERUxJVkVSWSAgICAgICAgICAgICAgICAwCj4gKyNkZWZpbmUgQVBMSUNfRU5BQkxFX0lE RUxJVkVSWSAgICAgICAgIDEKPiArI2RlZmluZSBBUExJQ19ESVNBQkxFX0lUSFJFU0hPTEQgICAg ICAgMQo+ICsjZGVmaW5lIEFQTElDX0VOQUJMRV9JVEhSRVNIT0xEICAgICAgICAgICAgICAgIDAK PiArCj4gK3N0cnVjdCBhcGxpY19kaXJlY3Qgewo+ICsgICAgICAgc3RydWN0IGFwbGljX3ByaXYg ICAgICAgcHJpdjsKPiArICAgICAgIHN0cnVjdCBpcnFfZG9tYWluICAgICAgICppcnFkb21haW47 Cj4gKyAgICAgICBzdHJ1Y3QgY3B1bWFzayAgICAgICAgICBsbWFzazsKPiArfTsKPiArCj4gK3N0 cnVjdCBhcGxpY19pZGMgewo+ICsgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgaGFydF9p bmRleDsKPiArICAgICAgIHZvaWQgX19pb21lbSAgICAgICAgICAgICpyZWdzOwo+ICsgICAgICAg c3RydWN0IGFwbGljX2RpcmVjdCAgICAgKmRpcmVjdDsKPiArfTsKPiArCj4gK3N0YXRpYyB1bnNp Z25lZCBpbnQgYXBsaWNfZGlyZWN0X3BhcmVudF9pcnE7Cj4gK3N0YXRpYyBERUZJTkVfUEVSX0NQ VShzdHJ1Y3QgYXBsaWNfaWRjLCBhcGxpY19pZGNzKTsKPiArCj4gK3N0YXRpYyB2b2lkIGFwbGlj X2RpcmVjdF9pcnFfZW9pKHN0cnVjdCBpcnFfZGF0YSAqZCkKPiArewo+ICsgICAgICAgLyoKPiAr ICAgICAgICAqIFRoZSBmYXN0ZW9pX2hhbmRsZXIgcmVxdWlyZXMgaXJxX2VvaSgpIGNhbGxiYWNr IGhlbmNlCj4gKyAgICAgICAgKiBwcm92aWRlIGEgZHVtbXkgaGFuZGxlci4KPiArICAgICAgICAq Lwo+ICt9Cj4gKwo+ICsjaWZkZWYgQ09ORklHX1NNUAo+ICtzdGF0aWMgaW50IGFwbGljX2RpcmVj dF9zZXRfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFza192YWwsIGJvb2wgZm9yY2Up Cj4gK3sKPiArICAgICAgIHN0cnVjdCBhcGxpY19wcml2ICpwcml2ID0gaXJxX2RhdGFfZ2V0X2ly cV9jaGlwX2RhdGEoZCk7Cj4gKyAgICAgICBzdHJ1Y3QgYXBsaWNfZGlyZWN0ICpkaXJlY3QgPQo+ ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9vZihwcml2LCBzdHJ1Y3QgYXBsaWNf ZGlyZWN0LCBwcml2KTsKPiArICAgICAgIHN0cnVjdCBhcGxpY19pZGMgKmlkYzsKPiArICAgICAg IHVuc2lnbmVkIGludCBjcHUsIHZhbDsKPiArICAgICAgIHN0cnVjdCBjcHVtYXNrIGFtYXNrOwo+ ICsgICAgICAgdm9pZCBfX2lvbWVtICp0YXJnZXQ7Cj4gKwo+ICsgICAgICAgY3B1bWFza19hbmQo JmFtYXNrLCAmZGlyZWN0LT5sbWFzaywgbWFza192YWwpOwo+ICsKPiArICAgICAgIGlmIChmb3Jj ZSkKPiArICAgICAgICAgICAgICAgY3B1ID0gY3B1bWFza19maXJzdCgmYW1hc2spOwo+ICsgICAg ICAgZWxzZQo+ICsgICAgICAgICAgICAgICBjcHUgPSBjcHVtYXNrX2FueV9hbmQoJmFtYXNrLCBj cHVfb25saW5lX21hc2spOwo+ICsKPiArICAgICAgIGlmIChjcHUgPj0gbnJfY3B1X2lkcykKPiAr ICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsgICAgICAgaWRjID0gcGVyX2Nw dV9wdHIoJmFwbGljX2lkY3MsIGNwdSk7Cj4gKyAgICAgICB0YXJnZXQgPSBwcml2LT5yZWdzICsg QVBMSUNfVEFSR0VUX0JBU0U7Cj4gKyAgICAgICB0YXJnZXQgKz0gKGQtPmh3aXJxIC0gMSkgKiBz aXplb2YodTMyKTsKPiArICAgICAgIHZhbCA9IGlkYy0+aGFydF9pbmRleCAmIEFQTElDX1RBUkdF VF9IQVJUX0lEWF9NQVNLOwo+ICsgICAgICAgdmFsIDw8PSBBUExJQ19UQVJHRVRfSEFSVF9JRFhf U0hJRlQ7Cj4gKyAgICAgICB2YWwgfD0gQVBMSUNfREVGQVVMVF9QUklPUklUWTsKPiArICAgICAg IHdyaXRlbCh2YWwsIHRhcmdldCk7Cj4gKwo+ICsgICAgICAgaXJxX2RhdGFfdXBkYXRlX2VmZmVj dGl2ZV9hZmZpbml0eShkLCBjcHVtYXNrX29mKGNwdSkpOwo+ICsKPiArICAgICAgIHJldHVybiBJ UlFfU0VUX01BU0tfT0tfRE9ORTsKPiArfQo+ICsjZW5kaWYKPiArCj4gK3N0YXRpYyBzdHJ1Y3Qg aXJxX2NoaXAgYXBsaWNfZGlyZWN0X2NoaXAgPSB7Cj4gKyAgICAgICAubmFtZSAgICAgICAgICAg PSAiQVBMSUMtRElSRUNUIiwKPiArICAgICAgIC5pcnFfbWFzayAgICAgICA9IGFwbGljX2lycV9t YXNrLAo+ICsgICAgICAgLmlycV91bm1hc2sgICAgID0gYXBsaWNfaXJxX3VubWFzaywKPiArICAg ICAgIC5pcnFfc2V0X3R5cGUgICA9IGFwbGljX2lycV9zZXRfdHlwZSwKPiArICAgICAgIC5pcnFf ZW9pICAgICAgICA9IGFwbGljX2RpcmVjdF9pcnFfZW9pLAo+ICsjaWZkZWYgQ09ORklHX1NNUAo+ ICsgICAgICAgLmlycV9zZXRfYWZmaW5pdHkgPSBhcGxpY19kaXJlY3Rfc2V0X2FmZmluaXR5LAo+ ICsjZW5kaWYKPiArICAgICAgIC5mbGFncyAgICAgICAgICA9IElSUUNISVBfU0VUX1RZUEVfTUFT S0VEIHwKPiArICAgICAgICAgICAgICAgICAgICAgICAgIElSUUNISVBfU0tJUF9TRVRfV0FLRSB8 Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBJUlFDSElQX01BU0tfT05fU1VTUEVORCwKPiAr fTsKPiArCj4gK3N0YXRpYyBpbnQgYXBsaWNfZGlyZWN0X2lycWRvbWFpbl90cmFuc2xhdGUoc3Ry dWN0IGlycV9kb21haW4gKmQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgaXJxX2Z3c3BlYyAqZndzcGVjLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqaHdpcnEsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKnR5cGUpCj4gK3sKPiArICAg ICAgIHN0cnVjdCBhcGxpY19wcml2ICpwcml2ID0gZC0+aG9zdF9kYXRhOwo+ICsKPiArICAgICAg IHJldHVybiBhcGxpY19pcnFkb21haW5fdHJhbnNsYXRlKGZ3c3BlYywgcHJpdi0+Z3NpX2Jhc2Us Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod2lycSwgdHlwZSk7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYXBsaWNfZGlyZWN0X2lycWRvbWFpbl9hbGxvYyhzdHJ1 Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IG5yX2lycXMsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZykKPiArewo+ICsgICAgICAgaW50 IGksIHJldDsKPiArICAgICAgIHVuc2lnbmVkIGludCB0eXBlOwo+ICsgICAgICAgaXJxX2h3X251 bWJlcl90IGh3aXJxOwo+ICsgICAgICAgc3RydWN0IGlycV9md3NwZWMgKmZ3c3BlYyA9IGFyZzsK PiArICAgICAgIHN0cnVjdCBhcGxpY19wcml2ICpwcml2ID0gZG9tYWluLT5ob3N0X2RhdGE7Cj4g KyAgICAgICBzdHJ1Y3QgYXBsaWNfZGlyZWN0ICpkaXJlY3QgPQo+ICsgICAgICAgICAgICAgICAg ICAgICAgIGNvbnRhaW5lcl9vZihwcml2LCBzdHJ1Y3QgYXBsaWNfZGlyZWN0LCBwcml2KTsKPiAr Cj4gKyAgICAgICByZXQgPSBhcGxpY19pcnFkb21haW5fdHJhbnNsYXRlKGZ3c3BlYywgcHJpdi0+ Z3NpX2Jhc2UsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZod2ly cSwgJnR5cGUpOwo+ICsgICAgICAgaWYgKHJldCkKPiArICAgICAgICAgICAgICAgcmV0dXJuIHJl dDsKPiArCj4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKSB7Cj4gKyAgICAg ICAgICAgICAgIGlycV9kb21haW5fc2V0X2luZm8oZG9tYWluLCB2aXJxICsgaSwgaHdpcnEgKyBp LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcGxpY19kaXJlY3RfY2hp cCwgcHJpdiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfZmFz dGVvaV9pcnEsIE5VTEwsIE5VTEwpOwo+ICsgICAgICAgICAgICAgICBpcnFfc2V0X2FmZmluaXR5 KHZpcnEgKyBpLCAmZGlyZWN0LT5sbWFzayk7Cj4gKyAgICAgICAgICAgICAgIC8qIFNlZSB0aGUg cmVhc29uIGRlc2NyaWJlZCBpbiBhcGxpY19tc2lfaXJxZG9tYWluX2FsbG9jKCkgKi8KPiArICAg ICAgICAgICAgICAgaXJxX3NldF9zdGF0dXNfZmxhZ3ModmlycSArIGksIElSUV9ESVNBQkxFX1VO TEFaWSk7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgYXBsaWNfZGlyZWN0X2lycWRvbWFpbl9v cHMgPSB7Cj4gKyAgICAgICAudHJhbnNsYXRlICAgICAgPSBhcGxpY19kaXJlY3RfaXJxZG9tYWlu X3RyYW5zbGF0ZSwKPiArICAgICAgIC5hbGxvYyAgICAgICAgICA9IGFwbGljX2RpcmVjdF9pcnFk b21haW5fYWxsb2MsCj4gKyAgICAgICAuZnJlZSAgICAgICAgICAgPSBpcnFfZG9tYWluX2ZyZWVf aXJxc190b3AsCj4gK307Cj4gKwo+ICsvKgo+ICsgKiBUbyBoYW5kbGUgYW4gQVBMSUMgZGlyZWN0 IGludGVycnVwdHMsIHdlIGp1c3QgcmVhZCB0aGUgQ0xBSU1JIHJlZ2lzdGVyCj4gKyAqIHdoaWNo IHdpbGwgcmV0dXJuIGhpZ2hlc3QgcHJpb3JpdHkgcGVuZGluZyBpbnRlcnJ1cHQgYW5kIGNsZWFy IHRoZQo+ICsgKiBwZW5kaW5nIGJpdCBvZiB0aGUgaW50ZXJydXB0LiBUaGlzIHByb2Nlc3MgaXMg cmVwZWF0ZWQgdW50aWwgQ0xBSU1JCj4gKyAqIHJlZ2lzdGVyIHJldHVybiB6ZXJvIHZhbHVlLgo+ ICsgKi8KPiArc3RhdGljIHZvaWQgYXBsaWNfZGlyZWN0X2hhbmRsZV9pcnEoc3RydWN0IGlycV9k ZXNjICpkZXNjKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgYXBsaWNfaWRjICppZGMgPSB0aGlzX2Nw dV9wdHIoJmFwbGljX2lkY3MpOwo+ICsgICAgICAgc3RydWN0IGlycV9jaGlwICpjaGlwID0gaXJx X2Rlc2NfZ2V0X2NoaXAoZGVzYyk7Cj4gKyAgICAgICBzdHJ1Y3QgaXJxX2RvbWFpbiAqaXJxZG9t YWluID0gaWRjLT5kaXJlY3QtPmlycWRvbWFpbjsKPiArICAgICAgIGlycV9od19udW1iZXJfdCBo d19pcnE7Cj4gKyAgICAgICBpbnQgaXJxOwo+ICsKPiArICAgICAgIGNoYWluZWRfaXJxX2VudGVy KGNoaXAsIGRlc2MpOwo+ICsKPiArICAgICAgIHdoaWxlICgoaHdfaXJxID0gcmVhZGwoaWRjLT5y ZWdzICsgQVBMSUNfSURDX0NMQUlNSSkpKSB7Cj4gKyAgICAgICAgICAgICAgIGh3X2lycSA9IGh3 X2lycSA+PiBBUExJQ19JRENfVE9QSV9JRF9TSElGVDsKPiArICAgICAgICAgICAgICAgaXJxID0g aXJxX2ZpbmRfbWFwcGluZyhpcnFkb21haW4sIGh3X2lycSk7Cj4gKwo+ICsgICAgICAgICAgICAg ICBpZiAodW5saWtlbHkoaXJxIDw9IDApKQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGRldl93 YXJuX3JhdGVsaW1pdGVkKGlkYy0+ZGlyZWN0LT5wcml2LmRldiwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHdfaXJxICVsdSBtYXBwaW5nIG5vdCBmb3Vu ZFxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod19p cnEpOwo+ICsgICAgICAgICAgICAgICBlbHNlCj4gKyAgICAgICAgICAgICAgICAgICAgICAgZ2Vu ZXJpY19oYW5kbGVfaXJxKGlycSk7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgY2hhaW5lZF9p cnFfZXhpdChjaGlwLCBkZXNjKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYXBsaWNfaWRjX3Nl dF9kZWxpdmVyeShzdHJ1Y3QgYXBsaWNfaWRjICppZGMsIGJvb2wgZW4pCj4gK3sKPiArICAgICAg IHUzMiBkZSA9IChlbikgPyBBUExJQ19FTkFCTEVfSURFTElWRVJZIDogQVBMSUNfRElTQUJMRV9J REVMSVZFUlk7Cj4gKyAgICAgICB1MzIgdGggPSAoZW4pID8gQVBMSUNfRU5BQkxFX0lUSFJFU0hP TEQgOiBBUExJQ19ESVNBQkxFX0lUSFJFU0hPTEQ7Cj4gKwo+ICsgICAgICAgLyogUHJpb3JpdHkg bXVzdCBiZSBsZXNzIHRoYW4gdGhyZXNob2xkIGZvciBpbnRlcnJ1cHQgdHJpZ2dlcmluZyAqLwo+ ICsgICAgICAgd3JpdGVsKHRoLCBpZGMtPnJlZ3MgKyBBUExJQ19JRENfSVRIUkVTSE9MRCk7Cj4g Kwo+ICsgICAgICAgLyogRGVsaXZlcnkgbXVzdCBiZSBzZXQgdG8gMSBmb3IgaW50ZXJydXB0IHRy aWdnZXJpbmcgKi8KPiArICAgICAgIHdyaXRlbChkZSwgaWRjLT5yZWdzICsgQVBMSUNfSURDX0lE RUxJVkVSWSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYXBsaWNfZGlyZWN0X2R5aW5nX2NwdSh1 bnNpZ25lZCBpbnQgY3B1KQo+ICt7Cj4gKyAgICAgICBpZiAoYXBsaWNfZGlyZWN0X3BhcmVudF9p cnEpCj4gKyAgICAgICAgICAgICAgIGRpc2FibGVfcGVyY3B1X2lycShhcGxpY19kaXJlY3RfcGFy ZW50X2lycSk7Cj4gKwo+ICsgICAgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg YXBsaWNfZGlyZWN0X3N0YXJ0aW5nX2NwdSh1bnNpZ25lZCBpbnQgY3B1KQo+ICt7Cj4gKyAgICAg ICBpZiAoYXBsaWNfZGlyZWN0X3BhcmVudF9pcnEpCj4gKyAgICAgICAgICAgICAgIGVuYWJsZV9w ZXJjcHVfaXJxKGFwbGljX2RpcmVjdF9wYXJlbnRfaXJxLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaXJxX2dldF90cmlnZ2VyX3R5cGUoYXBsaWNfZGlyZWN0X3BhcmVudF9pcnEp KTsKPiArCj4gKyAgICAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBhcGxpY19k aXJlY3RfcGFyc2VfcGFyZW50X2h3aXJxKHN0cnVjdCBkZXZpY2UgKmRldiwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGluZGV4LCB1MzIgKnBhcmVudF9o d2lycSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgbG9uZyAqcGFyZW50X2hhcnRpZCkKPiArewo+ICsgICAgICAgc3RydWN0IG9mX3BoYW5kbGVf YXJncyBwYXJlbnQ7Cj4gKyAgICAgICBpbnQgcmM7Cj4gKwo+ICsgICAgICAgLyoKPiArICAgICAg ICAqIEN1cnJlbnRseSwgb25seSBPRiBmd25vZGUgaXMgc3VwcG9ydGVkIHNvIGV4dGVuZCB0aGlz Cj4gKyAgICAgICAgKiBmdW5jdGlvbiBmb3IgQUNQSSBzdXBwb3J0Lgo+ICsgICAgICAgICovCj4g KyAgICAgICBpZiAoIWlzX29mX25vZGUoZGV2LT5md25vZGUpKQo+ICsgICAgICAgICAgICAgICBy ZXR1cm4gLUVJTlZBTDsKPiArCj4gKyAgICAgICByYyA9IG9mX2lycV9wYXJzZV9vbmUodG9fb2Zf bm9kZShkZXYtPmZ3bm9kZSksIGluZGV4LCAmcGFyZW50KTsKPiArICAgICAgIGlmIChyYykKPiAr ICAgICAgICAgICAgICAgcmV0dXJuIHJjOwo+ICsKPiArICAgICAgIHJjID0gcmlzY3Zfb2ZfcGFy ZW50X2hhcnRpZChwYXJlbnQubnAsIHBhcmVudF9oYXJ0aWQpOwo+ICsgICAgICAgaWYgKHJjKQo+ ICsgICAgICAgICAgICAgICByZXR1cm4gcmM7Cj4gKwo+ICsgICAgICAgKnBhcmVudF9od2lycSA9 IHBhcmVudC5hcmdzWzBdOwo+ICsgICAgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCBhcGxp Y19kaXJlY3Rfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKnJlZ3MpCj4g K3sKPiArICAgICAgIGludCBpLCBqLCByYywgY3B1LCBzZXR1cF9jb3VudCA9IDA7Cj4gKyAgICAg ICBzdHJ1Y3QgYXBsaWNfZGlyZWN0ICpkaXJlY3Q7Cj4gKyAgICAgICBzdHJ1Y3QgYXBsaWNfcHJp diAqcHJpdjsKPiArICAgICAgIHN0cnVjdCBpcnFfZG9tYWluICpkb21haW47Cj4gKyAgICAgICB1 bnNpZ25lZCBsb25nIGhhcnRpZDsKPiArICAgICAgIHN0cnVjdCBhcGxpY19pZGMgKmlkYzsKPiAr ICAgICAgIHUzMiB2YWwsIGh3aXJxOwo+ICsKPiArICAgICAgIGRpcmVjdCA9IGt6YWxsb2Moc2l6 ZW9mKCpkaXJlY3QpLCBHRlBfS0VSTkVMKTsKPiArICAgICAgIGlmICghZGlyZWN0KQo+ICsgICAg ICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKPiArICAgICAgIHByaXYgPSAmZGlyZWN0LT5wcml2 Owo+ICsKPiArICAgICAgIHJjID0gYXBsaWNfc2V0dXBfcHJpdihwcml2LCBkZXYsIHJlZ3MpOwo+ ICsgICAgICAgaWYgKHJjKSB7Cj4gKyAgICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiZmFpbGVk IHRvIGNyZWF0ZSBBUExJQyBjb250ZXh0XG4iKTsKPiArICAgICAgICAgICAgICAga2ZyZWUoZGly ZWN0KTsKPiArICAgICAgICAgICAgICAgcmV0dXJuIHJjOwo+ICsgICAgICAgfQo+ICsKPiArICAg ICAgIC8qIFNldHVwIHBlci1DUFUgSURDIGFuZCB0YXJnZXQgQ1BVIG1hc2sgKi8KPiArICAgICAg IGZvciAoaSA9IDA7IGkgPCBwcml2LT5ucl9pZGNzOyBpKyspIHsKPiArICAgICAgICAgICAgICAg cmMgPSBhcGxpY19kaXJlY3RfcGFyc2VfcGFyZW50X2h3aXJxKGRldiwgaSwgJmh3aXJxLCAmaGFy dGlkKTsKPiArICAgICAgICAgICAgICAgaWYgKHJjKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAg ICAgZGV2X3dhcm4oZGV2LCAicGFyZW50IGlycSBmb3IgSURDJWQgbm90IGZvdW5kXG4iLCBpKTsK PiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICAgICAgICAgfQo+ ICsKPiArICAgICAgICAgICAgICAgLyoKPiArICAgICAgICAgICAgICAgICogU2tpcCBpbnRlcnJ1 cHRzIG90aGVyIHRoYW4gZXh0ZXJuYWwgaW50ZXJydXB0cyBmb3IKPiArICAgICAgICAgICAgICAg ICogY3VycmVudCBwcml2aWxlZ2UgbGV2ZWwuCj4gKyAgICAgICAgICAgICAgICAqLwo+ICsgICAg ICAgICAgICAgICBpZiAoaHdpcnEgIT0gUlZfSVJRX0VYVCkKPiArICAgICAgICAgICAgICAgICAg ICAgICBjb250aW51ZTsKPiArCj4gKyAgICAgICAgICAgICAgIGNwdSA9IHJpc2N2X2hhcnRpZF90 b19jcHVpZChoYXJ0aWQpOwo+ICsgICAgICAgICAgICAgICBpZiAoY3B1IDwgMCkgewo+ICsgICAg ICAgICAgICAgICAgICAgICAgIGRldl93YXJuKGRldiwgImludmFsaWQgY3B1aWQgZm9yIElEQyVk XG4iLCBpKTsKPiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICAg ICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgY3B1bWFza19zZXRfY3B1KGNwdSwgJmRpcmVj dC0+bG1hc2spOwo+ICsKPiArICAgICAgICAgICAgICAgaWRjID0gcGVyX2NwdV9wdHIoJmFwbGlj X2lkY3MsIGNwdSk7Cj4gKyAgICAgICAgICAgICAgIGlkYy0+aGFydF9pbmRleCA9IGk7Cj4gKyAg ICAgICAgICAgICAgIGlkYy0+cmVncyA9IHByaXYtPnJlZ3MgKyBBUExJQ19JRENfQkFTRSArIGkg KiBBUExJQ19JRENfU0laRTsKPiArICAgICAgICAgICAgICAgaWRjLT5kaXJlY3QgPSBkaXJlY3Q7 Cj4gKwo+ICsgICAgICAgICAgICAgICBhcGxpY19pZGNfc2V0X2RlbGl2ZXJ5KGlkYywgdHJ1ZSk7 Cj4gKwo+ICsgICAgICAgICAgICAgICAvKgo+ICsgICAgICAgICAgICAgICAgKiBCb290IGNwdSBt aWdodCBub3QgaGF2ZSBBUExJQyBoYXJ0X2luZGV4ID0gMCBzbyBjaGVjawo+ICsgICAgICAgICAg ICAgICAgKiBhbmQgdXBkYXRlIHRhcmdldCByZWdpc3RlcnMgb2YgYWxsIGludGVycnVwdHMuCj4g KyAgICAgICAgICAgICAgICAqLwoKSUlVQywgdGhlIHVzZSBvZiBzbXBfcHJvY2Vzc29yX2lkKCkg aGFzIHRvIGJlIHByb3RlY3RlZCBieSB0dXJuaW5nIG9mZgpwcmVlbXB0aW9uLiBTbyBtYXliZSBw bGVhc2UgY29uc2lkZXIgYWRkaW5nOgoKKyBwcmVlbXB0X2Rpc2FibGUoKTsKCj4gKyAgICAgICAg ICAgICAgIGlmIChjcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpICYmIGlkYy0+aGFydF9pbmRleCkg ewo+ICsgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGlkYy0+aGFydF9pbmRleCAmIEFQTElD X1RBUkdFVF9IQVJUX0lEWF9NQVNLOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIHZhbCA8PD0g QVBMSUNfVEFSR0VUX0hBUlRfSURYX1NISUZUOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIHZh bCB8PSBBUExJQ19ERUZBVUxUX1BSSU9SSVRZOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGZv ciAoaiA9IDE7IGogPD0gcHJpdi0+bnJfaXJxczsgaisrKQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgd3JpdGVsKHZhbCwgcHJpdi0+cmVncyArIEFQTElDX1RBUkdFVF9CQVNFICsK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChqIC0gMSkgKiBz aXplb2YodTMyKSk7Cj4gKyAgICAgICAgICAgICAgIH0KCiwgYW5kIGhlcmU6CisgcHJlZW1wdF9l bmFibGUoKTsKCk9yIHVzZSBnZXRfY3B1KCkvcHV0X2NwdSgpICB2YXJpYW50IHRvIGd1YXJkIHRo ZSB1c2Ugb2YgcHJvY2Vzc29yIGlkLgoKPiArCj4gKyAgICAgICAgICAgICAgIHNldHVwX2NvdW50 Kys7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgLyogRmluZCBwYXJlbnQgZG9tYWluIGFuZCBy ZWdpc3RlciBjaGFpbmVkIGhhbmRsZXIgKi8KPiArICAgICAgIGRvbWFpbiA9IGlycV9maW5kX21h dGNoaW5nX2Z3bm9kZShyaXNjdl9nZXRfaW50Y19od25vZGUoKSwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBET01BSU5fQlVTX0FOWSk7Cj4gKyAgICAgICBpZiAo IWFwbGljX2RpcmVjdF9wYXJlbnRfaXJxICYmIGRvbWFpbikgewo+ICsgICAgICAgICAgICAgICBh cGxpY19kaXJlY3RfcGFyZW50X2lycSA9IGlycV9jcmVhdGVfbWFwcGluZyhkb21haW4sIFJWX0lS UV9FWFQpOwo+ICsgICAgICAgICAgICAgICBpZiAoYXBsaWNfZGlyZWN0X3BhcmVudF9pcnEpIHsK PiArICAgICAgICAgICAgICAgICAgICAgICBpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihhcGxpY19k aXJlY3RfcGFyZW50X2lycSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhcGxpY19kaXJlY3RfaGFuZGxlX2lycSk7Cj4gKwo+ICsgICAgICAgICAgICAg ICAgICAgICAgIC8qCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogU2V0dXAgQ1BVSFAgbm90 aWZpZXIgdG8gZW5hYmxlIHBhcmVudAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqIGludGVy cnVwdCBvbiBhbGwgQ1BVcwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqLwo+ICsgICAgICAg ICAgICAgICAgICAgICAgIGNwdWhwX3NldHVwX3N0YXRlKENQVUhQX0FQX09OTElORV9EWU4sCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlycWNoaXAvcmlzY3Yv YXBsaWM6c3RhcnRpbmciLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFwbGljX2RpcmVjdF9zdGFydGluZ19jcHUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYXBsaWNfZGlyZWN0X2R5aW5nX2NwdSk7Cj4gKyAgICAgICAgICAg ICAgIH0KPiArICAgICAgIH0KPiArCj4gKyAgICAgICAvKiBGYWlsIGlmIHdlIHdlcmUgbm90IGFi bGUgdG8gc2V0dXAgSURDIGZvciBhbnkgQ1BVICovCj4gKyAgICAgICBpZiAoIXNldHVwX2NvdW50 KSB7Cj4gKyAgICAgICAgICAgICAgIGtmcmVlKGRpcmVjdCk7Cj4gKyAgICAgICAgICAgICAgIHJl dHVybiAtRU5PREVWOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIC8qIFNldHVwIGdsb2JhbCBj b25maWcgYW5kIGludGVycnVwdCBkZWxpdmVyeSAqLwo+ICsgICAgICAgYXBsaWNfaW5pdF9od19n bG9iYWwocHJpdiwgZmFsc2UpOwo+ICsKPiArICAgICAgIC8qIENyZWF0ZSBpcnEgZG9tYWluIGlu c3RhbmNlIGZvciB0aGUgQVBMSUMgKi8KPiArICAgICAgIGRpcmVjdC0+aXJxZG9tYWluID0gaXJx X2RvbWFpbl9jcmVhdGVfbGluZWFyKGRldi0+Zndub2RlLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm5yX2lycXMgKyAxLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcGxpY19kaXJl Y3RfaXJxZG9tYWluX29wcywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwcml2KTsKPiArICAgICAgIGlmICghZGlyZWN0LT5pcnFkb21haW4pIHsK PiArICAgICAgICAgICAgICAgZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdCBp cnEgZG9tYWluXG4iKTsKPiArICAgICAgICAgICAgICAga2ZyZWUoZGlyZWN0KTsKPiArICAgICAg ICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgLyogQWR2 ZXJ0aXNlIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwo+ICsgICAgICAgZGV2X2luZm8oZGV2 LCAiJWQgaW50ZXJydXB0cyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gJWQgQ1BVc1xuIiwKPiArICAg ICAgICAgICAgICAgIHByaXYtPm5yX2lycXMsIHByaXYtPm5yX2lkY3MpOwo+ICsKPiArICAgICAg IHJldHVybiAwOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtcmlzY3Yt YXBsaWMtbWFpbi5jIGIvZHJpdmVycy9pcnFjaGlwL2lycS1yaXNjdi1hcGxpYy1tYWluLmMKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uODc0NTA3MDhhNzMzCj4g LS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtcmlzY3YtYXBsaWMtbWFp bi5jCj4gQEAgLTAsMCArMSwyMzIgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAKPiArLyoKPiArICogQ29weXJpZ2h0IChDKSAyMDIxIFdlc3Rlcm4gRGlnaXRhbCBDb3Jw b3JhdGlvbiBvciBpdHMgYWZmaWxpYXRlcy4KPiArICogQ29weXJpZ2h0IChDKSAyMDIyIFZlbnRh bmEgTWljcm8gU3lzdGVtcyBJbmMuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L29mLmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3ByaW50ay5o Pgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y bV9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvcmlzY3YtYXBsaWMuaD4KPiAr Cj4gKyNpbmNsdWRlICJpcnEtcmlzY3YtYXBsaWMtbWFpbi5oIgo+ICsKPiArdm9pZCBhcGxpY19p cnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKPiArewo+ICsgICAgICAgc3RydWN0IGFwbGlj X3ByaXYgKnByaXYgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKPiArCj4gKyAgICAg ICB3cml0ZWwoZC0+aHdpcnEsIHByaXYtPnJlZ3MgKyBBUExJQ19TRVRJRU5VTSk7Cj4gK30KPiAr Cj4gK3ZvaWQgYXBsaWNfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKQo+ICt7Cj4gKyAgICAg ICBzdHJ1Y3QgYXBsaWNfcHJpdiAqcHJpdiA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQp Owo+ICsKPiArICAgICAgIHdyaXRlbChkLT5od2lycSwgcHJpdi0+cmVncyArIEFQTElDX0NMUklF TlVNKTsKPiArfQo+ICsKPiAraW50IGFwbGljX2lycV9zZXRfdHlwZShzdHJ1Y3QgaXJxX2RhdGEg KmQsIHVuc2lnbmVkIGludCB0eXBlKQo+ICt7Cj4gKyAgICAgICB1MzIgdmFsID0gMDsKPiArICAg ICAgIHZvaWQgX19pb21lbSAqc291cmNlY2ZnOwo+ICsgICAgICAgc3RydWN0IGFwbGljX3ByaXYg KnByaXYgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKPiArCj4gKyAgICAgICBzd2l0 Y2ggKHR5cGUpIHsKPiArICAgICAgIGNhc2UgSVJRX1RZUEVfTk9ORToKPiArICAgICAgICAgICAg ICAgdmFsID0gQVBMSUNfU09VUkNFQ0ZHX1NNX0lOQUNUSVZFOwo+ICsgICAgICAgICAgICAgICBi cmVhazsKPiArICAgICAgIGNhc2UgSVJRX1RZUEVfTEVWRUxfTE9XOgo+ICsgICAgICAgICAgICAg ICB2YWwgPSBBUExJQ19TT1VSQ0VDRkdfU01fTEVWRUxfTE9XOwo+ICsgICAgICAgICAgICAgICBi cmVhazsKPiArICAgICAgIGNhc2UgSVJRX1RZUEVfTEVWRUxfSElHSDoKPiArICAgICAgICAgICAg ICAgdmFsID0gQVBMSUNfU09VUkNFQ0ZHX1NNX0xFVkVMX0hJR0g7Cj4gKyAgICAgICAgICAgICAg IGJyZWFrOwo+ICsgICAgICAgY2FzZSBJUlFfVFlQRV9FREdFX0ZBTExJTkc6Cj4gKyAgICAgICAg ICAgICAgIHZhbCA9IEFQTElDX1NPVVJDRUNGR19TTV9FREdFX0ZBTEw7Cj4gKyAgICAgICAgICAg ICAgIGJyZWFrOwo+ICsgICAgICAgY2FzZSBJUlFfVFlQRV9FREdFX1JJU0lORzoKPiArICAgICAg ICAgICAgICAgdmFsID0gQVBMSUNfU09VUkNFQ0ZHX1NNX0VER0VfUklTRTsKPiArICAgICAgICAg ICAgICAgYnJlYWs7Cj4gKyAgICAgICBkZWZhdWx0Ogo+ICsgICAgICAgICAgICAgICByZXR1cm4g LUVJTlZBTDsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICBzb3VyY2VjZmcgPSBwcml2LT5yZWdz ICsgQVBMSUNfU09VUkNFQ0ZHX0JBU0U7Cj4gKyAgICAgICBzb3VyY2VjZmcgKz0gKGQtPmh3aXJx IC0gMSkgKiBzaXplb2YodTMyKTsKPiArICAgICAgIHdyaXRlbCh2YWwsIHNvdXJjZWNmZyk7Cj4g Kwo+ICsgICAgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCBhcGxpY19pcnFkb21haW5fdHJh bnNsYXRlKHN0cnVjdCBpcnFfZndzcGVjICpmd3NwZWMsIHUzMiBnc2lfYmFzZSwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpod2lycSwgdW5zaWduZWQgaW50 ICp0eXBlKQo+ICt7Cj4gKyAgICAgICBpZiAoV0FSTl9PTihmd3NwZWMtPnBhcmFtX2NvdW50IDwg MikpCj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ICsgICAgICAgaWYgKFdBUk5f T04oIWZ3c3BlYy0+cGFyYW1bMF0pKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsK PiArCj4gKyAgICAgICAvKiBGb3IgRFQsIGdzaV9iYXNlIGlzIGFsd2F5cyB6ZXJvLiAqLwo+ICsg ICAgICAgKmh3aXJxID0gZndzcGVjLT5wYXJhbVswXSAtIGdzaV9iYXNlOwo+ICsgICAgICAgKnR5 cGUgPSBmd3NwZWMtPnBhcmFtWzFdICYgSVJRX1RZUEVfU0VOU0VfTUFTSzsKPiArCj4gKyAgICAg ICBXQVJOX09OKCp0eXBlID09IElSUV9UWVBFX05PTkUpOwo+ICsKPiArICAgICAgIHJldHVybiAw Owo+ICt9Cj4gKwo+ICt2b2lkIGFwbGljX2luaXRfaHdfZ2xvYmFsKHN0cnVjdCBhcGxpY19wcml2 ICpwcml2LCBib29sIG1zaV9tb2RlKQo+ICt7Cj4gKyAgICAgICB1MzIgdmFsOwo+ICsjaWZkZWYg Q09ORklHX1JJU0NWX01fTU9ERQo+ICsgICAgICAgdTMyIHZhbEg7Cj4gKwo+ICsgICAgICAgaWYg KG1zaV9tb2RlKSB7Cj4gKyAgICAgICAgICAgICAgIHZhbCA9IHByaXYtPm1zaWNmZy5iYXNlX3Bw bjsKPiArICAgICAgICAgICAgICAgdmFsSCA9ICgodTY0KXByaXYtPm1zaWNmZy5iYXNlX3BwbiA+ PiAzMikgJgo+ICsgICAgICAgICAgICAgICAgICAgICAgIEFQTElDX3hNU0lDRkdBRERSSF9CQVBQ Tl9NQVNLOwo+ICsgICAgICAgICAgICAgICB2YWxIIHw9IChwcml2LT5tc2ljZmcubGh4dyAmIEFQ TElDX3hNU0lDRkdBRERSSF9MSFhXX01BU0spCj4gKyAgICAgICAgICAgICAgICAgICAgICAgPDwg QVBMSUNfeE1TSUNGR0FERFJIX0xIWFdfU0hJRlQ7Cj4gKyAgICAgICAgICAgICAgIHZhbEggfD0g KHByaXYtPm1zaWNmZy5oaHh3ICYgQVBMSUNfeE1TSUNGR0FERFJIX0hIWFdfTUFTSykKPiArICAg ICAgICAgICAgICAgICAgICAgICA8PCBBUExJQ194TVNJQ0ZHQUREUkhfSEhYV19TSElGVDsKPiAr ICAgICAgICAgICAgICAgdmFsSCB8PSAocHJpdi0+bXNpY2ZnLmxoeHMgJiBBUExJQ194TVNJQ0ZH QUREUkhfTEhYU19NQVNLKQo+ICsgICAgICAgICAgICAgICAgICAgICAgIDw8IEFQTElDX3hNU0lD RkdBRERSSF9MSFhTX1NISUZUOwo+ICsgICAgICAgICAgICAgICB2YWxIIHw9IChwcml2LT5tc2lj ZmcuaGh4cyAmIEFQTElDX3hNU0lDRkdBRERSSF9ISFhTX01BU0spCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgPDwgQVBMSUNfeE1TSUNGR0FERFJIX0hIWFNfU0hJRlQ7Cj4gKyAgICAgICAgICAg ICAgIHdyaXRlbCh2YWwsIHByaXYtPnJlZ3MgKyBBUExJQ194TVNJQ0ZHQUREUik7Cj4gKyAgICAg ICAgICAgICAgIHdyaXRlbCh2YWxILCBwcml2LT5yZWdzICsgQVBMSUNfeE1TSUNGR0FERFJIKTsK PiArICAgICAgIH0KPiArI2VuZGlmCj4gKwo+ICsgICAgICAgLyogU2V0dXAgQVBMSUMgZG9tYWlu Y2ZnIHJlZ2lzdGVyICovCj4gKyAgICAgICB2YWwgPSByZWFkbChwcml2LT5yZWdzICsgQVBMSUNf RE9NQUlOQ0ZHKTsKPiArICAgICAgIHZhbCB8PSBBUExJQ19ET01BSU5DRkdfSUU7Cj4gKyAgICAg ICBpZiAobXNpX21vZGUpCj4gKyAgICAgICAgICAgICAgIHZhbCB8PSBBUExJQ19ET01BSU5DRkdf RE07Cj4gKyAgICAgICB3cml0ZWwodmFsLCBwcml2LT5yZWdzICsgQVBMSUNfRE9NQUlOQ0ZHKTsK PiArICAgICAgIGlmIChyZWFkbChwcml2LT5yZWdzICsgQVBMSUNfRE9NQUlOQ0ZHKSAhPSB2YWwp Cj4gKyAgICAgICAgICAgICAgIGRldl93YXJuKHByaXYtPmRldiwgInVuYWJsZSB0byB3cml0ZSAw eCV4IGluIGRvbWFpbmNmZ1xuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgdmFsKTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgYXBsaWNfaW5pdF9od19pcnFzKHN0cnVjdCBhcGxpY19wcml2 ICpwcml2KQo+ICt7Cj4gKyAgICAgICBpbnQgaTsKPiArCj4gKyAgICAgICAvKiBEaXNhYmxlIGFs bCBpbnRlcnJ1cHRzICovCj4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDw9IHByaXYtPm5yX2lycXM7 IGkgKz0gMzIpCj4gKyAgICAgICAgICAgICAgIHdyaXRlbCgtMVUsIHByaXYtPnJlZ3MgKyBBUExJ Q19DTFJJRV9CQVNFICsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkgLyAzMikgKiBz aXplb2YodTMyKSk7Cj4gKwo+ICsgICAgICAgLyogU2V0IGludGVycnVwdCB0eXBlIGFuZCBkZWZh dWx0IHByaW9yaXR5IGZvciBhbGwgaW50ZXJydXB0cyAqLwo+ICsgICAgICAgZm9yIChpID0gMTsg aSA8PSBwcml2LT5ucl9pcnFzOyBpKyspIHsKPiArICAgICAgICAgICAgICAgd3JpdGVsKDAsIHBy aXYtPnJlZ3MgKyBBUExJQ19TT1VSQ0VDRkdfQkFTRSArCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAoaSAtIDEpICogc2l6ZW9mKHUzMikpOwo+ICsgICAgICAgICAgICAgICB3cml0ZWwoQVBM SUNfREVGQVVMVF9QUklPUklUWSwKPiArICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnJlZ3Mg KyBBUExJQ19UQVJHRVRfQkFTRSArCj4gKyAgICAgICAgICAgICAgICAgICAgICAoaSAtIDEpICog c2l6ZW9mKHUzMikpOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIC8qIENsZWFyIEFQTElDIGRv bWFpbmNmZyAqLwo+ICsgICAgICAgd3JpdGVsKDAsIHByaXYtPnJlZ3MgKyBBUExJQ19ET01BSU5D RkcpOwo+ICt9Cj4gKwo+ICtpbnQgYXBsaWNfc2V0dXBfcHJpdihzdHJ1Y3QgYXBsaWNfcHJpdiAq cHJpdiwgc3RydWN0IGRldmljZSAqZGV2LAo+ICsgICAgICAgICAgICAgICAgICAgIHZvaWQgX19p b21lbSAqcmVncykKPiArewo+ICsgICAgICAgc3RydWN0IG9mX3BoYW5kbGVfYXJncyBwYXJlbnQ7 Cj4gKyAgICAgICBpbnQgcmM7Cj4gKwo+ICsgICAgICAgLyoKPiArICAgICAgICAqIEN1cnJlbnRs eSwgb25seSBPRiBmd25vZGUgaXMgc3VwcG9ydGVkIHNvIGV4dGVuZCB0aGlzCj4gKyAgICAgICAg KiBmdW5jdGlvbiBmb3IgQUNQSSBzdXBwb3J0Lgo+ICsgICAgICAgICovCj4gKyAgICAgICBpZiAo IWlzX29mX25vZGUoZGV2LT5md25vZGUpKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZB TDsKPiArCj4gKyAgICAgICAvKiBTYXZlIGRldmljZSBwb2ludGVyIGFuZCByZWdpc3RlciBiYXNl ICovCj4gKyAgICAgICBwcml2LT5kZXYgPSBkZXY7Cj4gKyAgICAgICBwcml2LT5yZWdzID0gcmVn czsKPiArCj4gKyAgICAgICAvKiBGaW5kIG91dCBudW1iZXIgb2YgaW50ZXJydXB0IHNvdXJjZXMg Ki8KPiArICAgICAgIHJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIodG9fb2Zfbm9kZShkZXYtPmZ3 bm9kZSksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJp c2N2LG51bS1zb3VyY2VzIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmcHJpdi0+bnJfaXJxcyk7Cj4gKyAgICAgICBpZiAocmMpIHsKPiArICAgICAgICAg ICAgICAgZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IG51bWJlciBvZiBpbnRlcnJ1cHQgc291 cmNlc1xuIik7Cj4gKyAgICAgICAgICAgICAgIHJldHVybiByYzsKPiArICAgICAgIH0KPiArCj4g KyAgICAgICAvKgo+ICsgICAgICAgICogRmluZCBvdXQgbnVtYmVyIG9mIElEQ3MgYmFzZWQgb24g cGFyZW50IGludGVycnVwdHMKPiArICAgICAgICAqCj4gKyAgICAgICAgKiBJZiAibXNpLXBhcmVu dCIgcHJvcGVydHkgaXMgcHJlc2VudCB0aGVuIHdlIGlnbm9yZSB0aGUKPiArICAgICAgICAqIEFQ TElDIElEQ3Mgd2hpY2ggZm9yY2VzIHRoZSBBUExJQyBkcml2ZXIgdG8gdXNlIE1TSSBtb2RlLgo+ ICsgICAgICAgICovCj4gKyAgICAgICBpZiAoIW9mX3Byb3BlcnR5X3ByZXNlbnQodG9fb2Zfbm9k ZShkZXYtPmZ3bm9kZSksICJtc2ktcGFyZW50IikpIHsKPiArICAgICAgICAgICAgICAgd2hpbGUg KCFvZl9pcnFfcGFyc2Vfb25lKHRvX29mX25vZGUoZGV2LT5md25vZGUpLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bnJfaWRjcywgJnBhcmVudCkpCj4g KyAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bnJfaWRjcysrOwo+ICsgICAgICAgfQo+ICsK PiArICAgICAgIC8qIFNldHVwIGluaXRpYWwgc3RhdGUgQVBMSUMgaW50ZXJydXB0cyAqLwo+ICsg ICAgICAgYXBsaWNfaW5pdF9od19pcnFzKHByaXYpOwo+ICsKPiArICAgICAgIHJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFwbGljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCj4gK3sKPiArICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4g KyAgICAgICBib29sIG1zaV9tb2RlID0gZmFsc2U7Cj4gKyAgICAgICBzdHJ1Y3QgcmVzb3VyY2Ug KnJlczsKPiArICAgICAgIHZvaWQgX19pb21lbSAqcmVnczsKPiArICAgICAgIGludCByYzsKPiAr Cj4gKyAgICAgICAvKiBNYXAgdGhlIE1NSU8gcmVnaXN0ZXJzICovCj4gKyAgICAgICByZXMgPSBw bGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwo+ICsgICAgICAg aWYgKCFyZXMpIHsKPiArICAgICAgICAgICAgICAgZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0 IE1NSU8gcmVzb3VyY2VcbiIpOwo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiAr ICAgICAgIH0KPiArICAgICAgIHJlZ3MgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgcmVzLT5z dGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKPiArICAgICAgIGlmICghcmVncykgewo+ICsgICAg ICAgICAgICAgICBkZXZfZXJyKGRldiwgImZhaWxlZCBtYXAgTU1JTyByZWdpc3RlcnNcbiIpOwo+ ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKPiArICAgICAgIH0KPiArCj4gKyAgICAg ICAvKgo+ICsgICAgICAgICogSWYgbXNpLXBhcmVudCBwcm9wZXJ0eSBpcyBwcmVzZW50IHRoZW4g c2V0dXAgQVBMSUMgTVNJCj4gKyAgICAgICAgKiBtb2RlIG90aGVyd2lzZSBzZXR1cCBBUExJQyBk aXJlY3QgbW9kZS4KPiArICAgICAgICAqLwo+ICsgICAgICAgaWYgKGlzX29mX25vZGUoZGV2LT5m d25vZGUpKQo+ICsgICAgICAgICAgICAgICBtc2lfbW9kZSA9IG9mX3Byb3BlcnR5X3ByZXNlbnQo dG9fb2Zfbm9kZShkZXYtPmZ3bm9kZSksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIm1zaS1wYXJlbnQiKTsKPiArICAgICAgIGlmIChtc2lfbW9kZSkK PiArICAgICAgICAgICAgICAgcmMgPSAtRU5PREVWOwo+ICsgICAgICAgZWxzZQo+ICsgICAgICAg ICAgICAgICByYyA9IGFwbGljX2RpcmVjdF9zZXR1cChkZXYsIHJlZ3MpOwo+ICsgICAgICAgaWYg KHJjKSB7Cj4gKyAgICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiZmFpbGVkIHNldHVwIEFQTElD IGluICVzIG1vZGVcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgbXNpX21vZGUgPyAiTVNJ IiA6ICJkaXJlY3QiKTsKPiArICAgICAgICAgICAgICAgcmV0dXJuIHJjOwo+ICsgICAgICAgfQo+ ICsKPiArICAgICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9m X2RldmljZV9pZCBhcGxpY19tYXRjaFtdID0gewo+ICsgICAgICAgeyAuY29tcGF0aWJsZSA9ICJy aXNjdixhcGxpYyIgfSwKPiArICAgICAgIHt9Cj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHBs YXRmb3JtX2RyaXZlciBhcGxpY19kcml2ZXIgPSB7Cj4gKyAgICAgICAuZHJpdmVyID0gewo+ICsg ICAgICAgICAgICAgICAubmFtZSAgICAgICAgICAgPSAicmlzY3YtYXBsaWMiLAo+ICsgICAgICAg ICAgICAgICAub2ZfbWF0Y2hfdGFibGUgPSBhcGxpY19tYXRjaCwKPiArICAgICAgIH0sCj4gKyAg ICAgICAucHJvYmUgPSBhcGxpY19wcm9iZSwKPiArfTsKPiArYnVpbHRpbl9wbGF0Zm9ybV9kcml2 ZXIoYXBsaWNfZHJpdmVyKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1yaXNj di1hcGxpYy1tYWluLmggYi9kcml2ZXJzL2lycWNoaXAvaXJxLXJpc2N2LWFwbGljLW1haW4uaAo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi40NzRhMDQyMjkzMzQK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1yaXNjdi1hcGxpYy1t YWluLmgKPiBAQCAtMCwwICsxLDQ1IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wLW9ubHkgKi8KPiArLyoKPiArICogQ29weXJpZ2h0IChDKSAyMDIxIFdlc3Rlcm4gRGln aXRhbCBDb3Jwb3JhdGlvbiBvciBpdHMgYWZmaWxpYXRlcy4KPiArICogQ29weXJpZ2h0IChDKSAy MDIyIFZlbnRhbmEgTWljcm8gU3lzdGVtcyBJbmMuCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfSVJR X1JJU0NWX0FQTElDX01BSU5fSAo+ICsjZGVmaW5lIF9JUlFfUklTQ1ZfQVBMSUNfTUFJTl9ICj4g Kwo+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pby5oPgo+ ICsjaW5jbHVkZSA8bGludXgvaXJxLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4K PiArI2luY2x1ZGUgPGxpbnV4L2Z3bm9kZS5oPgo+ICsKPiArI2RlZmluZSBBUExJQ19ERUZBVUxU X1BSSU9SSVRZICAgICAgICAgMQo+ICsKPiArc3RydWN0IGFwbGljX21zaWNmZyB7Cj4gKyAgICAg ICBwaHlzX2FkZHJfdCAgICAgICAgICAgICBiYXNlX3BwbjsKPiArICAgICAgIHUzMiAgICAgICAg ICAgICAgICAgICAgIGhoeHM7Cj4gKyAgICAgICB1MzIgICAgICAgICAgICAgICAgICAgICBoaHh3 Owo+ICsgICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgbGh4czsKPiArICAgICAgIHUzMiAg ICAgICAgICAgICAgICAgICAgIGxoeHc7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgYXBsaWNfcHJpdiB7 Cj4gKyAgICAgICBzdHJ1Y3QgZGV2aWNlICAgICAgICAgICAqZGV2Owo+ICsgICAgICAgdTMyICAg ICAgICAgICAgICAgICAgICAgZ3NpX2Jhc2U7Cj4gKyAgICAgICB1MzIgICAgICAgICAgICAgICAg ICAgICBucl9pcnFzOwo+ICsgICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgbnJfaWRjczsK PiArICAgICAgIHZvaWQgX19pb21lbSAgICAgICAgICAgICpyZWdzOwo+ICsgICAgICAgc3RydWN0 IGFwbGljX21zaWNmZyAgICAgbXNpY2ZnOwo+ICt9Owo+ICsKPiArdm9pZCBhcGxpY19pcnFfdW5t YXNrKHN0cnVjdCBpcnFfZGF0YSAqZCk7Cj4gK3ZvaWQgYXBsaWNfaXJxX21hc2soc3RydWN0IGly cV9kYXRhICpkKTsKPiAraW50IGFwbGljX2lycV9zZXRfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQs IHVuc2lnbmVkIGludCB0eXBlKTsKPiAraW50IGFwbGljX2lycWRvbWFpbl90cmFuc2xhdGUoc3Ry dWN0IGlycV9md3NwZWMgKmZ3c3BlYywgdTMyIGdzaV9iYXNlLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKmh3aXJxLCB1bnNpZ25lZCBpbnQgKnR5cGUpOwo+ ICt2b2lkIGFwbGljX2luaXRfaHdfZ2xvYmFsKHN0cnVjdCBhcGxpY19wcml2ICpwcml2LCBib29s IG1zaV9tb2RlKTsKPiAraW50IGFwbGljX3NldHVwX3ByaXYoc3RydWN0IGFwbGljX3ByaXYgKnBy aXYsIHN0cnVjdCBkZXZpY2UgKmRldiwKPiArICAgICAgICAgICAgICAgICAgICB2b2lkIF9faW9t ZW0gKnJlZ3MpOwo+ICtpbnQgYXBsaWNfZGlyZWN0X3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwg dm9pZCBfX2lvbWVtICpyZWdzKTsKPiArCj4gKyNlbmRpZgo+IGRpZmYgLS1naXQgYS9pbmNsdWRl L2xpbnV4L2lycWNoaXAvcmlzY3YtYXBsaWMuaCBiL2luY2x1ZGUvbGludXgvaXJxY2hpcC9yaXNj di1hcGxpYy5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjk3 ZTE5OGVhMDEwOQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9pbmNsdWRlL2xpbnV4L2lycWNoaXAv cmlzY3YtYXBsaWMuaAo+IEBAIC0wLDAgKzEsMTE5IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KPiArLyoKPiArICogQ29weXJpZ2h0IChDKSAyMDIxIFdl c3Rlcm4gRGlnaXRhbCBDb3Jwb3JhdGlvbiBvciBpdHMgYWZmaWxpYXRlcy4KPiArICogQ29weXJp Z2h0IChDKSAyMDIyIFZlbnRhbmEgTWljcm8gU3lzdGVtcyBJbmMuCj4gKyAqLwo+ICsjaWZuZGVm IF9fTElOVVhfSVJRQ0hJUF9SSVNDVl9BUExJQ19ICj4gKyNkZWZpbmUgX19MSU5VWF9JUlFDSElQ X1JJU0NWX0FQTElDX0gKPiArCj4gKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KPiArCj4gKyNk ZWZpbmUgQVBMSUNfTUFYX0lEQyAgICAgICAgICAgICAgICAgIEJJVCgxNCkKPiArI2RlZmluZSBB UExJQ19NQVhfU09VUkNFICAgICAgICAgICAgICAgMTAyNAo+ICsKPiArI2RlZmluZSBBUExJQ19E T01BSU5DRkcgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAKPiArI2RlZmluZSBBUExJQ19E T01BSU5DRkdfUkRPTkxZICAgICAgICAgMHg4MDAwMDAwMAo+ICsjZGVmaW5lIEFQTElDX0RPTUFJ TkNGR19JRSAgICAgICAgICAgICBCSVQoOCkKPiArI2RlZmluZSBBUExJQ19ET01BSU5DRkdfRE0g ICAgICAgICAgICAgQklUKDIpCj4gKyNkZWZpbmUgQVBMSUNfRE9NQUlOQ0ZHX0JFICAgICAgICAg ICAgIEJJVCgwKQo+ICsKPiArI2RlZmluZSBBUExJQ19TT1VSQ0VDRkdfQkFTRSAgICAgICAgICAg MHgwMDA0Cj4gKyNkZWZpbmUgQVBMSUNfU09VUkNFQ0ZHX0QgICAgICAgICAgICAgIEJJVCgxMCkK PiArI2RlZmluZSBBUExJQ19TT1VSQ0VDRkdfQ0hJTERJRFhfTUFTSyAgMHgwMDAwMDNmZgo+ICsj ZGVmaW5lIEFQTElDX1NPVVJDRUNGR19TTV9NQVNLICAgICAgICAweDAwMDAwMDA3Cj4gKyNkZWZp bmUgQVBMSUNfU09VUkNFQ0ZHX1NNX0lOQUNUSVZFICAgIDB4MAo+ICsjZGVmaW5lIEFQTElDX1NP VVJDRUNGR19TTV9ERVRBQ0ggICAgICAweDEKPiArI2RlZmluZSBBUExJQ19TT1VSQ0VDRkdfU01f RURHRV9SSVNFICAgMHg0Cj4gKyNkZWZpbmUgQVBMSUNfU09VUkNFQ0ZHX1NNX0VER0VfRkFMTCAg IDB4NQo+ICsjZGVmaW5lIEFQTElDX1NPVVJDRUNGR19TTV9MRVZFTF9ISUdIICAweDYKPiArI2Rl ZmluZSBBUExJQ19TT1VSQ0VDRkdfU01fTEVWRUxfTE9XICAgMHg3Cj4gKwo+ICsjZGVmaW5lIEFQ TElDX01NU0lDRkdBRERSICAgICAgICAgICAgICAweDFiYzAKPiArI2RlZmluZSBBUExJQ19NTVNJ Q0ZHQUREUkggICAgICAgICAgICAgMHgxYmM0Cj4gKyNkZWZpbmUgQVBMSUNfU01TSUNGR0FERFIg ICAgICAgICAgICAgIDB4MWJjOAo+ICsjZGVmaW5lIEFQTElDX1NNU0lDRkdBRERSSCAgICAgICAg ICAgICAweDFiY2MKPiArCj4gKyNpZmRlZiBDT05GSUdfUklTQ1ZfTV9NT0RFCj4gKyNkZWZpbmUg QVBMSUNfeE1TSUNGR0FERFIgICAgICAgICAgICAgIEFQTElDX01NU0lDRkdBRERSCj4gKyNkZWZp bmUgQVBMSUNfeE1TSUNGR0FERFJIICAgICAgICAgICAgIEFQTElDX01NU0lDRkdBRERSSAo+ICsj ZWxzZQo+ICsjZGVmaW5lIEFQTElDX3hNU0lDRkdBRERSICAgICAgICAgICAgICBBUExJQ19TTVNJ Q0ZHQUREUgo+ICsjZGVmaW5lIEFQTElDX3hNU0lDRkdBRERSSCAgICAgICAgICAgICBBUExJQ19T TVNJQ0ZHQUREUkgKPiArI2VuZGlmCj4gKwo+ICsjZGVmaW5lIEFQTElDX3hNU0lDRkdBRERSSF9M ICAgICAgICAgICBCSVQoMzEpCj4gKyNkZWZpbmUgQVBMSUNfeE1TSUNGR0FERFJIX0hIWFNfTUFT SyAgIDB4MWYKPiArI2RlZmluZSBBUExJQ194TVNJQ0ZHQUREUkhfSEhYU19TSElGVCAgMjQKPiAr I2RlZmluZSBBUExJQ194TVNJQ0ZHQUREUkhfTEhYU19NQVNLICAgMHg3Cj4gKyNkZWZpbmUgQVBM SUNfeE1TSUNGR0FERFJIX0xIWFNfU0hJRlQgIDIwCj4gKyNkZWZpbmUgQVBMSUNfeE1TSUNGR0FE RFJIX0hIWFdfTUFTSyAgIDB4Nwo+ICsjZGVmaW5lIEFQTElDX3hNU0lDRkdBRERSSF9ISFhXX1NI SUZUICAxNgo+ICsjZGVmaW5lIEFQTElDX3hNU0lDRkdBRERSSF9MSFhXX01BU0sgICAweGYKPiAr I2RlZmluZSBBUExJQ194TVNJQ0ZHQUREUkhfTEhYV19TSElGVCAgMTIKPiArI2RlZmluZSBBUExJ Q194TVNJQ0ZHQUREUkhfQkFQUE5fTUFTSyAgMHhmZmYKPiArCj4gKyNkZWZpbmUgQVBMSUNfeE1T SUNGR0FERFJfUFBOX1NISUZUICAgIDEyCj4gKwo+ICsjZGVmaW5lIEFQTElDX3hNU0lDRkdBRERS X1BQTl9IQVJUKF9fbGh4cykgXAo+ICsgICAgICAgKEJJVChfX2xoeHMpIC0gMSkKPiArCj4gKyNk ZWZpbmUgQVBMSUNfeE1TSUNGR0FERFJfUFBOX0xIWF9NQVNLKF9fbGh4dykgXAo+ICsgICAgICAg KEJJVChfX2xoeHcpIC0gMSkKPiArI2RlZmluZSBBUExJQ194TVNJQ0ZHQUREUl9QUE5fTEhYX1NI SUZUKF9fbGh4cykgXAo+ICsgICAgICAgKChfX2xoeHMpKQo+ICsjZGVmaW5lIEFQTElDX3hNU0lD RkdBRERSX1BQTl9MSFgoX19saHh3LCBfX2xoeHMpIFwKPiArICAgICAgIChBUExJQ194TVNJQ0ZH QUREUl9QUE5fTEhYX01BU0soX19saHh3KSA8PCBcCj4gKyAgICAgICAgQVBMSUNfeE1TSUNGR0FE RFJfUFBOX0xIWF9TSElGVChfX2xoeHMpKQo+ICsKPiArI2RlZmluZSBBUExJQ194TVNJQ0ZHQURE Ul9QUE5fSEhYX01BU0soX19oaHh3KSBcCj4gKyAgICAgICAoQklUKF9faGh4dykgLSAxKQo+ICsj ZGVmaW5lIEFQTElDX3hNU0lDRkdBRERSX1BQTl9ISFhfU0hJRlQoX19oaHhzKSBcCj4gKyAgICAg ICAoKF9faGh4cykgKyBBUExJQ194TVNJQ0ZHQUREUl9QUE5fU0hJRlQpCj4gKyNkZWZpbmUgQVBM SUNfeE1TSUNGR0FERFJfUFBOX0hIWChfX2hoeHcsIF9faGh4cykgXAo+ICsgICAgICAgKEFQTElD X3hNU0lDRkdBRERSX1BQTl9ISFhfTUFTSyhfX2hoeHcpIDw8IFwKPiArICAgICAgICBBUExJQ194 TVNJQ0ZHQUREUl9QUE5fSEhYX1NISUZUKF9faGh4cykpCj4gKwo+ICsjZGVmaW5lIEFQTElDX0lS UUJJVFNfUEVSX1JFRyAgICAgICAgICAzMgo+ICsKPiArI2RlZmluZSBBUExJQ19TRVRJUF9CQVNF ICAgICAgICAgICAgICAgMHgxYzAwCj4gKyNkZWZpbmUgQVBMSUNfU0VUSVBOVU0gICAgICAgICAg ICAgICAgIDB4MWNkYwo+ICsKPiArI2RlZmluZSBBUExJQ19DTFJJUF9CQVNFICAgICAgICAgICAg ICAgMHgxZDAwCj4gKyNkZWZpbmUgQVBMSUNfQ0xSSVBOVU0gICAgICAgICAgICAgICAgIDB4MWRk Ywo+ICsKPiArI2RlZmluZSBBUExJQ19TRVRJRV9CQVNFICAgICAgICAgICAgICAgMHgxZTAwCj4g KyNkZWZpbmUgQVBMSUNfU0VUSUVOVU0gICAgICAgICAgICAgICAgIDB4MWVkYwo+ICsKPiArI2Rl ZmluZSBBUExJQ19DTFJJRV9CQVNFICAgICAgICAgICAgICAgMHgxZjAwCj4gKyNkZWZpbmUgQVBM SUNfQ0xSSUVOVU0gICAgICAgICAgICAgICAgIDB4MWZkYwo+ICsKPiArI2RlZmluZSBBUExJQ19T RVRJUE5VTV9MRSAgICAgICAgICAgICAgMHgyMDAwCj4gKyNkZWZpbmUgQVBMSUNfU0VUSVBOVU1f QkUgICAgICAgICAgICAgIDB4MjAwNAo+ICsKPiArI2RlZmluZSBBUExJQ19HRU5NU0kgICAgICAg ICAgICAgICAgICAgMHgzMDAwCj4gKwo+ICsjZGVmaW5lIEFQTElDX1RBUkdFVF9CQVNFICAgICAg ICAgICAgICAweDMwMDQKPiArI2RlZmluZSBBUExJQ19UQVJHRVRfSEFSVF9JRFhfU0hJRlQgICAg MTgKPiArI2RlZmluZSBBUExJQ19UQVJHRVRfSEFSVF9JRFhfTUFTSyAgICAgMHgzZmZmCj4gKyNk ZWZpbmUgQVBMSUNfVEFSR0VUX0dVRVNUX0lEWF9TSElGVCAgIDEyCj4gKyNkZWZpbmUgQVBMSUNf VEFSR0VUX0dVRVNUX0lEWF9NQVNLICAgIDB4M2YKPiArI2RlZmluZSBBUExJQ19UQVJHRVRfSVBS SU9fTUFTSyAgICAgICAgMHhmZgo+ICsjZGVmaW5lIEFQTElDX1RBUkdFVF9FSUlEX01BU0sgMHg3 ZmYKPiArCj4gKyNkZWZpbmUgQVBMSUNfSURDX0JBU0UgICAgICAgICAgICAgICAgIDB4NDAwMAo+ ICsjZGVmaW5lIEFQTElDX0lEQ19TSVpFICAgICAgICAgICAgICAgICAzMgo+ICsKPiArI2RlZmlu ZSBBUExJQ19JRENfSURFTElWRVJZICAgICAgICAgICAgMHgwMAo+ICsKPiArI2RlZmluZSBBUExJ Q19JRENfSUZPUkNFICAgICAgICAgICAgICAgMHgwNAo+ICsKPiArI2RlZmluZSBBUExJQ19JRENf SVRIUkVTSE9MRCAgICAgICAgICAgMHgwOAo+ICsKPiArI2RlZmluZSBBUExJQ19JRENfVE9QSSAg ICAgICAgICAgICAgICAgMHgxOAo+ICsjZGVmaW5lIEFQTElDX0lEQ19UT1BJX0lEX1NISUZUICAg ICAgICAxNgo+ICsjZGVmaW5lIEFQTElDX0lEQ19UT1BJX0lEX01BU0sgMHgzZmYKPiArI2RlZmlu ZSBBUExJQ19JRENfVE9QSV9QUklPX01BU0sgICAgICAgMHhmZgo+ICsKPiArI2RlZmluZSBBUExJ Q19JRENfQ0xBSU1JICAgICAgICAgICAgICAgMHgxYwo+ICsKPiArI2VuZGlmCj4gLS0KPiAyLjM0 LjEKPgo+Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K PiBsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKPiBsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQu b3JnCj4gaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1y aXNjdgoKVGhhbmtzLApBbmR5CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKbGludXgtcmlzY3ZAbGlzdHMuaW5m cmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LXJpc2N2Cg== 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 2774EC47DDF for ; Thu, 1 Feb 2024 06:39:57 +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=Hm79TDmKktE8UdmP9NRLyp6nU5L3Nd0bd7aneY7qWow=; b=Iud9aA4GPTbdqp X7VXo7YFnQU++DP1gQRLsvfm20s9dXrrz9gyXxM7G8lXDuLEmSr+/VjzdhxGMWQMPKBGo4WYGmYRP m6NYSdzr33vgDQhRm51HX21pdVfX+9R8j0pMdKK1ycirUY1+MzEoYUKIj663rASMRBT8sTxw0rIn4 CjgVDqLNbZcNIZSRNVnt9JHKGc8RttWwmmyfcNTt1H40rbeRY3g6fQQFXjnH3ODJ/WyXuZ+cKjj8s OBHXxxja/zSte8pl4tnAGV9OFvvZwH/5i3UGQbI2cevkfbC6RxZ3XziIJO7o8+CKsrWui0JHVlGYG nvgiATdOgJBJOq5HffFw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rVQja-00000006mvF-26Nt; Thu, 01 Feb 2024 06:39:38 +0000 Received: from mail-lj1-x22a.google.com ([2a00:1450:4864:20::22a]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rVQjW-00000006msy-24lz for linux-arm-kernel@lists.infradead.org; Thu, 01 Feb 2024 06:39:37 +0000 Received: by mail-lj1-x22a.google.com with SMTP id 38308e7fff4ca-2d051fb89fbso8482061fa.2 for ; Wed, 31 Jan 2024 22:39:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1706769571; x=1707374371; darn=lists.infradead.org; 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=u390rklLKQ0WVD8yUameMugkoJX/jJeS6FO67rr0O0c=; b=nl14iOI2Wm2xG3RJ3h1Uly/domuBvoMp+l09nSNETpzl/yMC62kFfRPwKY1SYjcGcM QVYAJCawKZvFd3acy532lCKJXX6QMpbPR5BtlZK14B37FRip7RBXQ7EBBwPWc6LETIdO ym1TJOKnOzmpXPoIi7RhPz0JJYfO2my0d/btgG1TXsVn5om8BWlXFdLQYcJOIVbe7mox 4LJjy2jDAl4IXsgTw94xxJvelS4RzPkk0u09F9h3JnkNvDo+nANExaooHdasT1Xw9IJ4 ff+VcEtgdJ0IWg/Y1+N+7SegjVTufcA9BfffL4QWuA1RIMKrRHLYDpLhUd1aNQXnD4eu ysuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706769571; x=1707374371; 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=u390rklLKQ0WVD8yUameMugkoJX/jJeS6FO67rr0O0c=; b=QdZxTkt+W75tmKsJdd8cr2reVRBLaK2Oyclc/7wCozyEhvKkKweyCKiN7R158CPmbT v3u+jxgKrbyyxMbSoFa0iqiFGy1Jh9wPwPdYBrPLuPpEsF49jU3rbXbNMIWh8mSoqLOy obU2DE4gZX8EouZsoh/R73ZIx4uAx//iBunnYJvpDQpxOnOiMxvHjMTUTtnqTCsrBAEx ZNeP3qbt4XTJWabQ+vhs8PBaKd5dPiJNRlrqEv6WxdLg60PqNranj/IKIrQiIm/j4hX9 GIwYXznIteQeOmMSlJHR2W4FFWyxvCsxRQg3pqvv1d/FF3WZP4Wx8cYAjZpmy1NsU7Eg nBRw== X-Gm-Message-State: AOJu0Yzx84DQdIk9d7z78UdCcdU/0E11QkByPoYwHK1/kVltc5/3bTym l8mc9cg4o1ALEURefKHgtzIypX3tz87OsW1CQWgzFHHEs0dYMIAtpQctwuQASN2K24xj2PZ8sHe VS0xBDzgLM2q80CzbVc8r0neX+wvKdBXRU//KnQ== X-Google-Smtp-Source: AGHT+IEtetVr0Wlcmuq2rnXO9AJ+CFFNHI8QTF+LiiiKwZY6fVAHW9G1aYFkoL+WZ9QlClaMXlWDsSW1pp3SEfM9l1M= X-Received: by 2002:a05:651c:1a2c:b0:2d0:75f6:8ed6 with SMTP id by44-20020a05651c1a2c00b002d075f68ed6mr812478ljb.47.1706769570864; Wed, 31 Jan 2024 22:39:30 -0800 (PST) MIME-Version: 1.0 References: <20240127161753.114685-1-apatel@ventanamicro.com> <20240127161753.114685-23-apatel@ventanamicro.com> In-Reply-To: <20240127161753.114685-23-apatel@ventanamicro.com> From: Andy Chiu Date: Thu, 1 Feb 2024 14:39:19 +0800 Message-ID: Subject: Re: [PATCH v12 22/25] irqchip: Add RISC-V advanced PLIC driver for direct-mode To: Anup Patel Cc: Palmer Dabbelt , Paul Walmsley , Thomas Gleixner , Rob Herring , Krzysztof Kozlowski , Frank Rowand , Conor Dooley , devicetree@vger.kernel.org, Saravana Kannan , Marc Zyngier , Anup Patel , linux-kernel@vger.kernel.org, =?UTF-8?B?QmrDtnJuIFTDtnBlbA==?= , Atish Patra , linux-riscv@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Andrew Jones X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240131_223934_576781_FA657567 X-CRM114-Status: GOOD ( 34.68 ) 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 SGkgQW51cCwKCk9uIFN1biwgSmFuIDI4LCAyMDI0IGF0IDEyOjI04oCvQU0gQW51cCBQYXRlbCA8 YXBhdGVsQHZlbnRhbmFtaWNyby5jb20+IHdyb3RlOgo+Cj4gVGhlIFJJU0MtViBhZHZhbmNlZCBp bnRlcnJ1cHQgYXJjaGl0ZWN0dXJlIChBSUEpIHNwZWNpZmljYXRpb24gZGVmaW5lcwo+IGFkdmFu Y2VkIHBsYXRmb3JtLWxldmVsIGludGVycnVwdCBjb250cm9sbGVyIChBUExJQykgd2hpY2ggaGFz IHR3byBtb2Rlcwo+IG9mIG9wZXJhdGlvbjogMSkgRGlyZWN0IG1vZGUgYW5kIDIpIE1TSSBtb2Rl Lgo+IChGb3IgbW9yZSBkZXRhaWxzLCByZWZlciBodHRwczovL2dpdGh1Yi5jb20vcmlzY3Yvcmlz Y3YtYWlhKQo+Cj4gSW4gQVBMSUMgZGlyZWN0LW1vZGUsIHdpcmVkIGludGVycnVwdHMgYXJlIGZv cndhcmVkIHRvIENQVXMgKG9yIEhBUlRzKQo+IGFzIGEgbG9jYWwgZXh0ZXJuYWwgaW50ZXJydXB0 Lgo+Cj4gV2UgYWRkIGEgcGxhdGZvcm0gaXJxY2hpcCBkcml2ZXIgZm9yIHRoZSBSSVNDLVYgQVBM SUMgZGlyZWN0LW1vZGUgdG8KPiBzdXBwb3J0IFJJU0MtViBwbGF0Zm9ybXMgaGF2aW5nIG9ubHkg d2lyZWQgaW50ZXJydXB0cy4KPgo+IFNpZ25lZC1vZmYtYnk6IEFudXAgUGF0ZWwgPGFwYXRlbEB2 ZW50YW5hbWljcm8uY29tPgo+IC0tLQo+ICBkcml2ZXJzL2lycWNoaXAvS2NvbmZpZyAgICAgICAg ICAgICAgICAgIHwgICA1ICsKPiAgZHJpdmVycy9pcnFjaGlwL01ha2VmaWxlICAgICAgICAgICAg ICAgICB8ICAgMSArCj4gIGRyaXZlcnMvaXJxY2hpcC9pcnEtcmlzY3YtYXBsaWMtZGlyZWN0LmMg fCAzNDMgKysrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9pcnFjaGlwL2lycS1yaXNj di1hcGxpYy1tYWluLmMgICB8IDIzMiArKysrKysrKysrKysrKysKPiAgZHJpdmVycy9pcnFjaGlw L2lycS1yaXNjdi1hcGxpYy1tYWluLmggICB8ICA0NSArKysKPiAgaW5jbHVkZS9saW51eC9pcnFj aGlwL3Jpc2N2LWFwbGljLmggICAgICB8IDExOSArKysrKysrKwo+ICA2IGZpbGVzIGNoYW5nZWQs IDc0NSBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2lycWNoaXAv aXJxLXJpc2N2LWFwbGljLWRpcmVjdC5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2ly cWNoaXAvaXJxLXJpc2N2LWFwbGljLW1haW4uYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9pcnFjaGlwL2lycS1yaXNjdi1hcGxpYy1tYWluLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGlu Y2x1ZGUvbGludXgvaXJxY2hpcC9yaXNjdi1hcGxpYy5oCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9pcnFjaGlwL0tjb25maWcgYi9kcml2ZXJzL2lycWNoaXAvS2NvbmZpZwo+IGluZGV4IDJmYzBj YjMyMzQxYS4uZGJjODgxMWQzNzY0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvaXJxY2hpcC9LY29u ZmlnCj4gKysrIGIvZHJpdmVycy9pcnFjaGlwL0tjb25maWcKPiBAQCAtNTQ2LDYgKzU0NiwxMSBA QCBjb25maWcgU0lGSVZFX1BMSUMKPiAgICAgICAgIHNlbGVjdCBJUlFfRE9NQUlOX0hJRVJBUkNI WQo+ICAgICAgICAgc2VsZWN0IEdFTkVSSUNfSVJRX0VGRkVDVElWRV9BRkZfTUFTSyBpZiBTTVAK Pgo+ICtjb25maWcgUklTQ1ZfQVBMSUMKPiArICAgICAgIGJvb2wKPiArICAgICAgIGRlcGVuZHMg b24gUklTQ1YKPiArICAgICAgIHNlbGVjdCBJUlFfRE9NQUlOX0hJRVJBUkNIWQo+ICsKPiAgY29u ZmlnIFJJU0NWX0lNU0lDCj4gICAgICAgICBib29sCj4gICAgICAgICBkZXBlbmRzIG9uIFJJU0NW Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9NYWtlZmlsZSBiL2RyaXZlcnMvaXJxY2hp cC9NYWtlZmlsZQo+IGluZGV4IGFiY2E0NDVhMzIyOS4uN2Y4Mjg5NzkwZWQ4IDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvaXJxY2hpcC9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvaXJxY2hpcC9NYWtl ZmlsZQo+IEBAIC05NSw2ICs5NSw3IEBAIG9iai0kKENPTkZJR19RQ09NX01QTSkgICAgICAgICAg ICAgICAgICAgICAgICArPSBpcnEtcWNvbS1tcG0ubwo+ICBvYmotJChDT05GSUdfQ1NLWV9NUElO VEMpICAgICAgICAgICAgICArPSBpcnEtY3NreS1tcGludGMubwo+ICBvYmotJChDT05GSUdfQ1NL WV9BUEJfSU5UQykgICAgICAgICAgICArPSBpcnEtY3NreS1hcGItaW50Yy5vCj4gIG9iai0kKENP TkZJR19SSVNDVl9JTlRDKSAgICAgICAgICAgICAgICs9IGlycS1yaXNjdi1pbnRjLm8KPiArb2Jq LSQoQ09ORklHX1JJU0NWX0FQTElDKSAgICAgICAgICAgICAgKz0gaXJxLXJpc2N2LWFwbGljLW1h aW4ubyBpcnEtcmlzY3YtYXBsaWMtZGlyZWN0Lm8KPiAgb2JqLSQoQ09ORklHX1JJU0NWX0lNU0lD KSAgICAgICAgICAgICAgKz0gaXJxLXJpc2N2LWltc2ljLXN0YXRlLm8gaXJxLXJpc2N2LWltc2lj LWVhcmx5Lm8gaXJxLXJpc2N2LWltc2ljLXBsYXRmb3JtLm8KPiAgb2JqLSQoQ09ORklHX1NJRklW RV9QTElDKSAgICAgICAgICAgICAgKz0gaXJxLXNpZml2ZS1wbGljLm8KPiAgb2JqLSQoQ09ORklH X0lNWF9JUlFTVEVFUikgICAgICAgICAgICAgKz0gaXJxLWlteC1pcnFzdGVlci5vCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtcmlzY3YtYXBsaWMtZGlyZWN0LmMgYi9kcml2ZXJz L2lycWNoaXAvaXJxLXJpc2N2LWFwbGljLWRpcmVjdC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwMDAwMDAuLjllZDI2NjZiZmI1ZQo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9kcml2ZXJzL2lycWNoaXAvaXJxLXJpc2N2LWFwbGljLWRpcmVjdC5jCj4gQEAgLTAsMCArMSwz NDMgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICog Q29weXJpZ2h0IChDKSAyMDIxIFdlc3Rlcm4gRGlnaXRhbCBDb3Jwb3JhdGlvbiBvciBpdHMgYWZm aWxpYXRlcy4KPiArICogQ29weXJpZ2h0IChDKSAyMDIyIFZlbnRhbmEgTWljcm8gU3lzdGVtcyBJ bmMuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgo+ICsjaW5jbHVkZSA8 bGludXgvY3B1Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2lycWNoaXAuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvY2hhaW5lZF9pcnEu aD4KPiArI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvcmlzY3YtYXBsaWMuaD4KPiArI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgo+ICsjaW5j bHVkZSA8bGludXgvcHJpbnRrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KPiArCj4gKyNp bmNsdWRlICJpcnEtcmlzY3YtYXBsaWMtbWFpbi5oIgo+ICsKPiArI2RlZmluZSBBUExJQ19ESVNB QkxFX0lERUxJVkVSWSAgICAgICAgICAgICAgICAwCj4gKyNkZWZpbmUgQVBMSUNfRU5BQkxFX0lE RUxJVkVSWSAgICAgICAgIDEKPiArI2RlZmluZSBBUExJQ19ESVNBQkxFX0lUSFJFU0hPTEQgICAg ICAgMQo+ICsjZGVmaW5lIEFQTElDX0VOQUJMRV9JVEhSRVNIT0xEICAgICAgICAgICAgICAgIDAK PiArCj4gK3N0cnVjdCBhcGxpY19kaXJlY3Qgewo+ICsgICAgICAgc3RydWN0IGFwbGljX3ByaXYg ICAgICAgcHJpdjsKPiArICAgICAgIHN0cnVjdCBpcnFfZG9tYWluICAgICAgICppcnFkb21haW47 Cj4gKyAgICAgICBzdHJ1Y3QgY3B1bWFzayAgICAgICAgICBsbWFzazsKPiArfTsKPiArCj4gK3N0 cnVjdCBhcGxpY19pZGMgewo+ICsgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgaGFydF9p bmRleDsKPiArICAgICAgIHZvaWQgX19pb21lbSAgICAgICAgICAgICpyZWdzOwo+ICsgICAgICAg c3RydWN0IGFwbGljX2RpcmVjdCAgICAgKmRpcmVjdDsKPiArfTsKPiArCj4gK3N0YXRpYyB1bnNp Z25lZCBpbnQgYXBsaWNfZGlyZWN0X3BhcmVudF9pcnE7Cj4gK3N0YXRpYyBERUZJTkVfUEVSX0NQ VShzdHJ1Y3QgYXBsaWNfaWRjLCBhcGxpY19pZGNzKTsKPiArCj4gK3N0YXRpYyB2b2lkIGFwbGlj X2RpcmVjdF9pcnFfZW9pKHN0cnVjdCBpcnFfZGF0YSAqZCkKPiArewo+ICsgICAgICAgLyoKPiAr ICAgICAgICAqIFRoZSBmYXN0ZW9pX2hhbmRsZXIgcmVxdWlyZXMgaXJxX2VvaSgpIGNhbGxiYWNr IGhlbmNlCj4gKyAgICAgICAgKiBwcm92aWRlIGEgZHVtbXkgaGFuZGxlci4KPiArICAgICAgICAq Lwo+ICt9Cj4gKwo+ICsjaWZkZWYgQ09ORklHX1NNUAo+ICtzdGF0aWMgaW50IGFwbGljX2RpcmVj dF9zZXRfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFza192YWwsIGJvb2wgZm9yY2Up Cj4gK3sKPiArICAgICAgIHN0cnVjdCBhcGxpY19wcml2ICpwcml2ID0gaXJxX2RhdGFfZ2V0X2ly cV9jaGlwX2RhdGEoZCk7Cj4gKyAgICAgICBzdHJ1Y3QgYXBsaWNfZGlyZWN0ICpkaXJlY3QgPQo+ ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9vZihwcml2LCBzdHJ1Y3QgYXBsaWNf ZGlyZWN0LCBwcml2KTsKPiArICAgICAgIHN0cnVjdCBhcGxpY19pZGMgKmlkYzsKPiArICAgICAg IHVuc2lnbmVkIGludCBjcHUsIHZhbDsKPiArICAgICAgIHN0cnVjdCBjcHVtYXNrIGFtYXNrOwo+ ICsgICAgICAgdm9pZCBfX2lvbWVtICp0YXJnZXQ7Cj4gKwo+ICsgICAgICAgY3B1bWFza19hbmQo JmFtYXNrLCAmZGlyZWN0LT5sbWFzaywgbWFza192YWwpOwo+ICsKPiArICAgICAgIGlmIChmb3Jj ZSkKPiArICAgICAgICAgICAgICAgY3B1ID0gY3B1bWFza19maXJzdCgmYW1hc2spOwo+ICsgICAg ICAgZWxzZQo+ICsgICAgICAgICAgICAgICBjcHUgPSBjcHVtYXNrX2FueV9hbmQoJmFtYXNrLCBj cHVfb25saW5lX21hc2spOwo+ICsKPiArICAgICAgIGlmIChjcHUgPj0gbnJfY3B1X2lkcykKPiAr ICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsgICAgICAgaWRjID0gcGVyX2Nw dV9wdHIoJmFwbGljX2lkY3MsIGNwdSk7Cj4gKyAgICAgICB0YXJnZXQgPSBwcml2LT5yZWdzICsg QVBMSUNfVEFSR0VUX0JBU0U7Cj4gKyAgICAgICB0YXJnZXQgKz0gKGQtPmh3aXJxIC0gMSkgKiBz aXplb2YodTMyKTsKPiArICAgICAgIHZhbCA9IGlkYy0+aGFydF9pbmRleCAmIEFQTElDX1RBUkdF VF9IQVJUX0lEWF9NQVNLOwo+ICsgICAgICAgdmFsIDw8PSBBUExJQ19UQVJHRVRfSEFSVF9JRFhf U0hJRlQ7Cj4gKyAgICAgICB2YWwgfD0gQVBMSUNfREVGQVVMVF9QUklPUklUWTsKPiArICAgICAg IHdyaXRlbCh2YWwsIHRhcmdldCk7Cj4gKwo+ICsgICAgICAgaXJxX2RhdGFfdXBkYXRlX2VmZmVj dGl2ZV9hZmZpbml0eShkLCBjcHVtYXNrX29mKGNwdSkpOwo+ICsKPiArICAgICAgIHJldHVybiBJ UlFfU0VUX01BU0tfT0tfRE9ORTsKPiArfQo+ICsjZW5kaWYKPiArCj4gK3N0YXRpYyBzdHJ1Y3Qg aXJxX2NoaXAgYXBsaWNfZGlyZWN0X2NoaXAgPSB7Cj4gKyAgICAgICAubmFtZSAgICAgICAgICAg PSAiQVBMSUMtRElSRUNUIiwKPiArICAgICAgIC5pcnFfbWFzayAgICAgICA9IGFwbGljX2lycV9t YXNrLAo+ICsgICAgICAgLmlycV91bm1hc2sgICAgID0gYXBsaWNfaXJxX3VubWFzaywKPiArICAg ICAgIC5pcnFfc2V0X3R5cGUgICA9IGFwbGljX2lycV9zZXRfdHlwZSwKPiArICAgICAgIC5pcnFf ZW9pICAgICAgICA9IGFwbGljX2RpcmVjdF9pcnFfZW9pLAo+ICsjaWZkZWYgQ09ORklHX1NNUAo+ ICsgICAgICAgLmlycV9zZXRfYWZmaW5pdHkgPSBhcGxpY19kaXJlY3Rfc2V0X2FmZmluaXR5LAo+ ICsjZW5kaWYKPiArICAgICAgIC5mbGFncyAgICAgICAgICA9IElSUUNISVBfU0VUX1RZUEVfTUFT S0VEIHwKPiArICAgICAgICAgICAgICAgICAgICAgICAgIElSUUNISVBfU0tJUF9TRVRfV0FLRSB8 Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBJUlFDSElQX01BU0tfT05fU1VTUEVORCwKPiAr fTsKPiArCj4gK3N0YXRpYyBpbnQgYXBsaWNfZGlyZWN0X2lycWRvbWFpbl90cmFuc2xhdGUoc3Ry dWN0IGlycV9kb21haW4gKmQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgaXJxX2Z3c3BlYyAqZndzcGVjLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqaHdpcnEsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKnR5cGUpCj4gK3sKPiArICAg ICAgIHN0cnVjdCBhcGxpY19wcml2ICpwcml2ID0gZC0+aG9zdF9kYXRhOwo+ICsKPiArICAgICAg IHJldHVybiBhcGxpY19pcnFkb21haW5fdHJhbnNsYXRlKGZ3c3BlYywgcHJpdi0+Z3NpX2Jhc2Us Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod2lycSwgdHlwZSk7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYXBsaWNfZGlyZWN0X2lycWRvbWFpbl9hbGxvYyhzdHJ1 Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IG5yX2lycXMsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZykKPiArewo+ICsgICAgICAgaW50 IGksIHJldDsKPiArICAgICAgIHVuc2lnbmVkIGludCB0eXBlOwo+ICsgICAgICAgaXJxX2h3X251 bWJlcl90IGh3aXJxOwo+ICsgICAgICAgc3RydWN0IGlycV9md3NwZWMgKmZ3c3BlYyA9IGFyZzsK PiArICAgICAgIHN0cnVjdCBhcGxpY19wcml2ICpwcml2ID0gZG9tYWluLT5ob3N0X2RhdGE7Cj4g KyAgICAgICBzdHJ1Y3QgYXBsaWNfZGlyZWN0ICpkaXJlY3QgPQo+ICsgICAgICAgICAgICAgICAg ICAgICAgIGNvbnRhaW5lcl9vZihwcml2LCBzdHJ1Y3QgYXBsaWNfZGlyZWN0LCBwcml2KTsKPiAr Cj4gKyAgICAgICByZXQgPSBhcGxpY19pcnFkb21haW5fdHJhbnNsYXRlKGZ3c3BlYywgcHJpdi0+ Z3NpX2Jhc2UsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZod2ly cSwgJnR5cGUpOwo+ICsgICAgICAgaWYgKHJldCkKPiArICAgICAgICAgICAgICAgcmV0dXJuIHJl dDsKPiArCj4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKSB7Cj4gKyAgICAg ICAgICAgICAgIGlycV9kb21haW5fc2V0X2luZm8oZG9tYWluLCB2aXJxICsgaSwgaHdpcnEgKyBp LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcGxpY19kaXJlY3RfY2hp cCwgcHJpdiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfZmFz dGVvaV9pcnEsIE5VTEwsIE5VTEwpOwo+ICsgICAgICAgICAgICAgICBpcnFfc2V0X2FmZmluaXR5 KHZpcnEgKyBpLCAmZGlyZWN0LT5sbWFzayk7Cj4gKyAgICAgICAgICAgICAgIC8qIFNlZSB0aGUg cmVhc29uIGRlc2NyaWJlZCBpbiBhcGxpY19tc2lfaXJxZG9tYWluX2FsbG9jKCkgKi8KPiArICAg ICAgICAgICAgICAgaXJxX3NldF9zdGF0dXNfZmxhZ3ModmlycSArIGksIElSUV9ESVNBQkxFX1VO TEFaWSk7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgYXBsaWNfZGlyZWN0X2lycWRvbWFpbl9v cHMgPSB7Cj4gKyAgICAgICAudHJhbnNsYXRlICAgICAgPSBhcGxpY19kaXJlY3RfaXJxZG9tYWlu X3RyYW5zbGF0ZSwKPiArICAgICAgIC5hbGxvYyAgICAgICAgICA9IGFwbGljX2RpcmVjdF9pcnFk b21haW5fYWxsb2MsCj4gKyAgICAgICAuZnJlZSAgICAgICAgICAgPSBpcnFfZG9tYWluX2ZyZWVf aXJxc190b3AsCj4gK307Cj4gKwo+ICsvKgo+ICsgKiBUbyBoYW5kbGUgYW4gQVBMSUMgZGlyZWN0 IGludGVycnVwdHMsIHdlIGp1c3QgcmVhZCB0aGUgQ0xBSU1JIHJlZ2lzdGVyCj4gKyAqIHdoaWNo IHdpbGwgcmV0dXJuIGhpZ2hlc3QgcHJpb3JpdHkgcGVuZGluZyBpbnRlcnJ1cHQgYW5kIGNsZWFy IHRoZQo+ICsgKiBwZW5kaW5nIGJpdCBvZiB0aGUgaW50ZXJydXB0LiBUaGlzIHByb2Nlc3MgaXMg cmVwZWF0ZWQgdW50aWwgQ0xBSU1JCj4gKyAqIHJlZ2lzdGVyIHJldHVybiB6ZXJvIHZhbHVlLgo+ ICsgKi8KPiArc3RhdGljIHZvaWQgYXBsaWNfZGlyZWN0X2hhbmRsZV9pcnEoc3RydWN0IGlycV9k ZXNjICpkZXNjKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgYXBsaWNfaWRjICppZGMgPSB0aGlzX2Nw dV9wdHIoJmFwbGljX2lkY3MpOwo+ICsgICAgICAgc3RydWN0IGlycV9jaGlwICpjaGlwID0gaXJx X2Rlc2NfZ2V0X2NoaXAoZGVzYyk7Cj4gKyAgICAgICBzdHJ1Y3QgaXJxX2RvbWFpbiAqaXJxZG9t YWluID0gaWRjLT5kaXJlY3QtPmlycWRvbWFpbjsKPiArICAgICAgIGlycV9od19udW1iZXJfdCBo d19pcnE7Cj4gKyAgICAgICBpbnQgaXJxOwo+ICsKPiArICAgICAgIGNoYWluZWRfaXJxX2VudGVy KGNoaXAsIGRlc2MpOwo+ICsKPiArICAgICAgIHdoaWxlICgoaHdfaXJxID0gcmVhZGwoaWRjLT5y ZWdzICsgQVBMSUNfSURDX0NMQUlNSSkpKSB7Cj4gKyAgICAgICAgICAgICAgIGh3X2lycSA9IGh3 X2lycSA+PiBBUExJQ19JRENfVE9QSV9JRF9TSElGVDsKPiArICAgICAgICAgICAgICAgaXJxID0g aXJxX2ZpbmRfbWFwcGluZyhpcnFkb21haW4sIGh3X2lycSk7Cj4gKwo+ICsgICAgICAgICAgICAg ICBpZiAodW5saWtlbHkoaXJxIDw9IDApKQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGRldl93 YXJuX3JhdGVsaW1pdGVkKGlkYy0+ZGlyZWN0LT5wcml2LmRldiwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHdfaXJxICVsdSBtYXBwaW5nIG5vdCBmb3Vu ZFxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod19p cnEpOwo+ICsgICAgICAgICAgICAgICBlbHNlCj4gKyAgICAgICAgICAgICAgICAgICAgICAgZ2Vu ZXJpY19oYW5kbGVfaXJxKGlycSk7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgY2hhaW5lZF9p cnFfZXhpdChjaGlwLCBkZXNjKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYXBsaWNfaWRjX3Nl dF9kZWxpdmVyeShzdHJ1Y3QgYXBsaWNfaWRjICppZGMsIGJvb2wgZW4pCj4gK3sKPiArICAgICAg IHUzMiBkZSA9IChlbikgPyBBUExJQ19FTkFCTEVfSURFTElWRVJZIDogQVBMSUNfRElTQUJMRV9J REVMSVZFUlk7Cj4gKyAgICAgICB1MzIgdGggPSAoZW4pID8gQVBMSUNfRU5BQkxFX0lUSFJFU0hP TEQgOiBBUExJQ19ESVNBQkxFX0lUSFJFU0hPTEQ7Cj4gKwo+ICsgICAgICAgLyogUHJpb3JpdHkg bXVzdCBiZSBsZXNzIHRoYW4gdGhyZXNob2xkIGZvciBpbnRlcnJ1cHQgdHJpZ2dlcmluZyAqLwo+ ICsgICAgICAgd3JpdGVsKHRoLCBpZGMtPnJlZ3MgKyBBUExJQ19JRENfSVRIUkVTSE9MRCk7Cj4g Kwo+ICsgICAgICAgLyogRGVsaXZlcnkgbXVzdCBiZSBzZXQgdG8gMSBmb3IgaW50ZXJydXB0IHRy aWdnZXJpbmcgKi8KPiArICAgICAgIHdyaXRlbChkZSwgaWRjLT5yZWdzICsgQVBMSUNfSURDX0lE RUxJVkVSWSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYXBsaWNfZGlyZWN0X2R5aW5nX2NwdSh1 bnNpZ25lZCBpbnQgY3B1KQo+ICt7Cj4gKyAgICAgICBpZiAoYXBsaWNfZGlyZWN0X3BhcmVudF9p cnEpCj4gKyAgICAgICAgICAgICAgIGRpc2FibGVfcGVyY3B1X2lycShhcGxpY19kaXJlY3RfcGFy ZW50X2lycSk7Cj4gKwo+ICsgICAgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg YXBsaWNfZGlyZWN0X3N0YXJ0aW5nX2NwdSh1bnNpZ25lZCBpbnQgY3B1KQo+ICt7Cj4gKyAgICAg ICBpZiAoYXBsaWNfZGlyZWN0X3BhcmVudF9pcnEpCj4gKyAgICAgICAgICAgICAgIGVuYWJsZV9w ZXJjcHVfaXJxKGFwbGljX2RpcmVjdF9wYXJlbnRfaXJxLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaXJxX2dldF90cmlnZ2VyX3R5cGUoYXBsaWNfZGlyZWN0X3BhcmVudF9pcnEp KTsKPiArCj4gKyAgICAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBhcGxpY19k aXJlY3RfcGFyc2VfcGFyZW50X2h3aXJxKHN0cnVjdCBkZXZpY2UgKmRldiwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGluZGV4LCB1MzIgKnBhcmVudF9o d2lycSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgbG9uZyAqcGFyZW50X2hhcnRpZCkKPiArewo+ICsgICAgICAgc3RydWN0IG9mX3BoYW5kbGVf YXJncyBwYXJlbnQ7Cj4gKyAgICAgICBpbnQgcmM7Cj4gKwo+ICsgICAgICAgLyoKPiArICAgICAg ICAqIEN1cnJlbnRseSwgb25seSBPRiBmd25vZGUgaXMgc3VwcG9ydGVkIHNvIGV4dGVuZCB0aGlz Cj4gKyAgICAgICAgKiBmdW5jdGlvbiBmb3IgQUNQSSBzdXBwb3J0Lgo+ICsgICAgICAgICovCj4g KyAgICAgICBpZiAoIWlzX29mX25vZGUoZGV2LT5md25vZGUpKQo+ICsgICAgICAgICAgICAgICBy ZXR1cm4gLUVJTlZBTDsKPiArCj4gKyAgICAgICByYyA9IG9mX2lycV9wYXJzZV9vbmUodG9fb2Zf bm9kZShkZXYtPmZ3bm9kZSksIGluZGV4LCAmcGFyZW50KTsKPiArICAgICAgIGlmIChyYykKPiAr ICAgICAgICAgICAgICAgcmV0dXJuIHJjOwo+ICsKPiArICAgICAgIHJjID0gcmlzY3Zfb2ZfcGFy ZW50X2hhcnRpZChwYXJlbnQubnAsIHBhcmVudF9oYXJ0aWQpOwo+ICsgICAgICAgaWYgKHJjKQo+ ICsgICAgICAgICAgICAgICByZXR1cm4gcmM7Cj4gKwo+ICsgICAgICAgKnBhcmVudF9od2lycSA9 IHBhcmVudC5hcmdzWzBdOwo+ICsgICAgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCBhcGxp Y19kaXJlY3Rfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKnJlZ3MpCj4g K3sKPiArICAgICAgIGludCBpLCBqLCByYywgY3B1LCBzZXR1cF9jb3VudCA9IDA7Cj4gKyAgICAg ICBzdHJ1Y3QgYXBsaWNfZGlyZWN0ICpkaXJlY3Q7Cj4gKyAgICAgICBzdHJ1Y3QgYXBsaWNfcHJp diAqcHJpdjsKPiArICAgICAgIHN0cnVjdCBpcnFfZG9tYWluICpkb21haW47Cj4gKyAgICAgICB1 bnNpZ25lZCBsb25nIGhhcnRpZDsKPiArICAgICAgIHN0cnVjdCBhcGxpY19pZGMgKmlkYzsKPiAr ICAgICAgIHUzMiB2YWwsIGh3aXJxOwo+ICsKPiArICAgICAgIGRpcmVjdCA9IGt6YWxsb2Moc2l6 ZW9mKCpkaXJlY3QpLCBHRlBfS0VSTkVMKTsKPiArICAgICAgIGlmICghZGlyZWN0KQo+ICsgICAg ICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKPiArICAgICAgIHByaXYgPSAmZGlyZWN0LT5wcml2 Owo+ICsKPiArICAgICAgIHJjID0gYXBsaWNfc2V0dXBfcHJpdihwcml2LCBkZXYsIHJlZ3MpOwo+ ICsgICAgICAgaWYgKHJjKSB7Cj4gKyAgICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiZmFpbGVk IHRvIGNyZWF0ZSBBUExJQyBjb250ZXh0XG4iKTsKPiArICAgICAgICAgICAgICAga2ZyZWUoZGly ZWN0KTsKPiArICAgICAgICAgICAgICAgcmV0dXJuIHJjOwo+ICsgICAgICAgfQo+ICsKPiArICAg ICAgIC8qIFNldHVwIHBlci1DUFUgSURDIGFuZCB0YXJnZXQgQ1BVIG1hc2sgKi8KPiArICAgICAg IGZvciAoaSA9IDA7IGkgPCBwcml2LT5ucl9pZGNzOyBpKyspIHsKPiArICAgICAgICAgICAgICAg cmMgPSBhcGxpY19kaXJlY3RfcGFyc2VfcGFyZW50X2h3aXJxKGRldiwgaSwgJmh3aXJxLCAmaGFy dGlkKTsKPiArICAgICAgICAgICAgICAgaWYgKHJjKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAg ICAgZGV2X3dhcm4oZGV2LCAicGFyZW50IGlycSBmb3IgSURDJWQgbm90IGZvdW5kXG4iLCBpKTsK PiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICAgICAgICAgfQo+ ICsKPiArICAgICAgICAgICAgICAgLyoKPiArICAgICAgICAgICAgICAgICogU2tpcCBpbnRlcnJ1 cHRzIG90aGVyIHRoYW4gZXh0ZXJuYWwgaW50ZXJydXB0cyBmb3IKPiArICAgICAgICAgICAgICAg ICogY3VycmVudCBwcml2aWxlZ2UgbGV2ZWwuCj4gKyAgICAgICAgICAgICAgICAqLwo+ICsgICAg ICAgICAgICAgICBpZiAoaHdpcnEgIT0gUlZfSVJRX0VYVCkKPiArICAgICAgICAgICAgICAgICAg ICAgICBjb250aW51ZTsKPiArCj4gKyAgICAgICAgICAgICAgIGNwdSA9IHJpc2N2X2hhcnRpZF90 b19jcHVpZChoYXJ0aWQpOwo+ICsgICAgICAgICAgICAgICBpZiAoY3B1IDwgMCkgewo+ICsgICAg ICAgICAgICAgICAgICAgICAgIGRldl93YXJuKGRldiwgImludmFsaWQgY3B1aWQgZm9yIElEQyVk XG4iLCBpKTsKPiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICAg ICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgY3B1bWFza19zZXRfY3B1KGNwdSwgJmRpcmVj dC0+bG1hc2spOwo+ICsKPiArICAgICAgICAgICAgICAgaWRjID0gcGVyX2NwdV9wdHIoJmFwbGlj X2lkY3MsIGNwdSk7Cj4gKyAgICAgICAgICAgICAgIGlkYy0+aGFydF9pbmRleCA9IGk7Cj4gKyAg ICAgICAgICAgICAgIGlkYy0+cmVncyA9IHByaXYtPnJlZ3MgKyBBUExJQ19JRENfQkFTRSArIGkg KiBBUExJQ19JRENfU0laRTsKPiArICAgICAgICAgICAgICAgaWRjLT5kaXJlY3QgPSBkaXJlY3Q7 Cj4gKwo+ICsgICAgICAgICAgICAgICBhcGxpY19pZGNfc2V0X2RlbGl2ZXJ5KGlkYywgdHJ1ZSk7 Cj4gKwo+ICsgICAgICAgICAgICAgICAvKgo+ICsgICAgICAgICAgICAgICAgKiBCb290IGNwdSBt aWdodCBub3QgaGF2ZSBBUExJQyBoYXJ0X2luZGV4ID0gMCBzbyBjaGVjawo+ICsgICAgICAgICAg ICAgICAgKiBhbmQgdXBkYXRlIHRhcmdldCByZWdpc3RlcnMgb2YgYWxsIGludGVycnVwdHMuCj4g KyAgICAgICAgICAgICAgICAqLwoKSUlVQywgdGhlIHVzZSBvZiBzbXBfcHJvY2Vzc29yX2lkKCkg aGFzIHRvIGJlIHByb3RlY3RlZCBieSB0dXJuaW5nIG9mZgpwcmVlbXB0aW9uLiBTbyBtYXliZSBw bGVhc2UgY29uc2lkZXIgYWRkaW5nOgoKKyBwcmVlbXB0X2Rpc2FibGUoKTsKCj4gKyAgICAgICAg ICAgICAgIGlmIChjcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpICYmIGlkYy0+aGFydF9pbmRleCkg ewo+ICsgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGlkYy0+aGFydF9pbmRleCAmIEFQTElD X1RBUkdFVF9IQVJUX0lEWF9NQVNLOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIHZhbCA8PD0g QVBMSUNfVEFSR0VUX0hBUlRfSURYX1NISUZUOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIHZh bCB8PSBBUExJQ19ERUZBVUxUX1BSSU9SSVRZOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGZv ciAoaiA9IDE7IGogPD0gcHJpdi0+bnJfaXJxczsgaisrKQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgd3JpdGVsKHZhbCwgcHJpdi0+cmVncyArIEFQTElDX1RBUkdFVF9CQVNFICsK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChqIC0gMSkgKiBz aXplb2YodTMyKSk7Cj4gKyAgICAgICAgICAgICAgIH0KCiwgYW5kIGhlcmU6CisgcHJlZW1wdF9l bmFibGUoKTsKCk9yIHVzZSBnZXRfY3B1KCkvcHV0X2NwdSgpICB2YXJpYW50IHRvIGd1YXJkIHRo ZSB1c2Ugb2YgcHJvY2Vzc29yIGlkLgoKPiArCj4gKyAgICAgICAgICAgICAgIHNldHVwX2NvdW50 Kys7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgLyogRmluZCBwYXJlbnQgZG9tYWluIGFuZCBy ZWdpc3RlciBjaGFpbmVkIGhhbmRsZXIgKi8KPiArICAgICAgIGRvbWFpbiA9IGlycV9maW5kX21h dGNoaW5nX2Z3bm9kZShyaXNjdl9nZXRfaW50Y19od25vZGUoKSwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBET01BSU5fQlVTX0FOWSk7Cj4gKyAgICAgICBpZiAo IWFwbGljX2RpcmVjdF9wYXJlbnRfaXJxICYmIGRvbWFpbikgewo+ICsgICAgICAgICAgICAgICBh cGxpY19kaXJlY3RfcGFyZW50X2lycSA9IGlycV9jcmVhdGVfbWFwcGluZyhkb21haW4sIFJWX0lS UV9FWFQpOwo+ICsgICAgICAgICAgICAgICBpZiAoYXBsaWNfZGlyZWN0X3BhcmVudF9pcnEpIHsK PiArICAgICAgICAgICAgICAgICAgICAgICBpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihhcGxpY19k aXJlY3RfcGFyZW50X2lycSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhcGxpY19kaXJlY3RfaGFuZGxlX2lycSk7Cj4gKwo+ICsgICAgICAgICAgICAg ICAgICAgICAgIC8qCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogU2V0dXAgQ1BVSFAgbm90 aWZpZXIgdG8gZW5hYmxlIHBhcmVudAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqIGludGVy cnVwdCBvbiBhbGwgQ1BVcwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqLwo+ICsgICAgICAg ICAgICAgICAgICAgICAgIGNwdWhwX3NldHVwX3N0YXRlKENQVUhQX0FQX09OTElORV9EWU4sCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlycWNoaXAvcmlzY3Yv YXBsaWM6c3RhcnRpbmciLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFwbGljX2RpcmVjdF9zdGFydGluZ19jcHUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYXBsaWNfZGlyZWN0X2R5aW5nX2NwdSk7Cj4gKyAgICAgICAgICAg ICAgIH0KPiArICAgICAgIH0KPiArCj4gKyAgICAgICAvKiBGYWlsIGlmIHdlIHdlcmUgbm90IGFi bGUgdG8gc2V0dXAgSURDIGZvciBhbnkgQ1BVICovCj4gKyAgICAgICBpZiAoIXNldHVwX2NvdW50 KSB7Cj4gKyAgICAgICAgICAgICAgIGtmcmVlKGRpcmVjdCk7Cj4gKyAgICAgICAgICAgICAgIHJl dHVybiAtRU5PREVWOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIC8qIFNldHVwIGdsb2JhbCBj b25maWcgYW5kIGludGVycnVwdCBkZWxpdmVyeSAqLwo+ICsgICAgICAgYXBsaWNfaW5pdF9od19n bG9iYWwocHJpdiwgZmFsc2UpOwo+ICsKPiArICAgICAgIC8qIENyZWF0ZSBpcnEgZG9tYWluIGlu c3RhbmNlIGZvciB0aGUgQVBMSUMgKi8KPiArICAgICAgIGRpcmVjdC0+aXJxZG9tYWluID0gaXJx X2RvbWFpbl9jcmVhdGVfbGluZWFyKGRldi0+Zndub2RlLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm5yX2lycXMgKyAxLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcGxpY19kaXJl Y3RfaXJxZG9tYWluX29wcywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwcml2KTsKPiArICAgICAgIGlmICghZGlyZWN0LT5pcnFkb21haW4pIHsK PiArICAgICAgICAgICAgICAgZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdCBp cnEgZG9tYWluXG4iKTsKPiArICAgICAgICAgICAgICAga2ZyZWUoZGlyZWN0KTsKPiArICAgICAg ICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgLyogQWR2 ZXJ0aXNlIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwo+ICsgICAgICAgZGV2X2luZm8oZGV2 LCAiJWQgaW50ZXJydXB0cyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gJWQgQ1BVc1xuIiwKPiArICAg ICAgICAgICAgICAgIHByaXYtPm5yX2lycXMsIHByaXYtPm5yX2lkY3MpOwo+ICsKPiArICAgICAg IHJldHVybiAwOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtcmlzY3Yt YXBsaWMtbWFpbi5jIGIvZHJpdmVycy9pcnFjaGlwL2lycS1yaXNjdi1hcGxpYy1tYWluLmMKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uODc0NTA3MDhhNzMzCj4g LS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtcmlzY3YtYXBsaWMtbWFp bi5jCj4gQEAgLTAsMCArMSwyMzIgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAKPiArLyoKPiArICogQ29weXJpZ2h0IChDKSAyMDIxIFdlc3Rlcm4gRGlnaXRhbCBDb3Jw b3JhdGlvbiBvciBpdHMgYWZmaWxpYXRlcy4KPiArICogQ29weXJpZ2h0IChDKSAyMDIyIFZlbnRh bmEgTWljcm8gU3lzdGVtcyBJbmMuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L29mLmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3ByaW50ay5o Pgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y bV9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvcmlzY3YtYXBsaWMuaD4KPiAr Cj4gKyNpbmNsdWRlICJpcnEtcmlzY3YtYXBsaWMtbWFpbi5oIgo+ICsKPiArdm9pZCBhcGxpY19p cnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKPiArewo+ICsgICAgICAgc3RydWN0IGFwbGlj X3ByaXYgKnByaXYgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKPiArCj4gKyAgICAg ICB3cml0ZWwoZC0+aHdpcnEsIHByaXYtPnJlZ3MgKyBBUExJQ19TRVRJRU5VTSk7Cj4gK30KPiAr Cj4gK3ZvaWQgYXBsaWNfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKQo+ICt7Cj4gKyAgICAg ICBzdHJ1Y3QgYXBsaWNfcHJpdiAqcHJpdiA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQp Owo+ICsKPiArICAgICAgIHdyaXRlbChkLT5od2lycSwgcHJpdi0+cmVncyArIEFQTElDX0NMUklF TlVNKTsKPiArfQo+ICsKPiAraW50IGFwbGljX2lycV9zZXRfdHlwZShzdHJ1Y3QgaXJxX2RhdGEg KmQsIHVuc2lnbmVkIGludCB0eXBlKQo+ICt7Cj4gKyAgICAgICB1MzIgdmFsID0gMDsKPiArICAg ICAgIHZvaWQgX19pb21lbSAqc291cmNlY2ZnOwo+ICsgICAgICAgc3RydWN0IGFwbGljX3ByaXYg KnByaXYgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKPiArCj4gKyAgICAgICBzd2l0 Y2ggKHR5cGUpIHsKPiArICAgICAgIGNhc2UgSVJRX1RZUEVfTk9ORToKPiArICAgICAgICAgICAg ICAgdmFsID0gQVBMSUNfU09VUkNFQ0ZHX1NNX0lOQUNUSVZFOwo+ICsgICAgICAgICAgICAgICBi cmVhazsKPiArICAgICAgIGNhc2UgSVJRX1RZUEVfTEVWRUxfTE9XOgo+ICsgICAgICAgICAgICAg ICB2YWwgPSBBUExJQ19TT1VSQ0VDRkdfU01fTEVWRUxfTE9XOwo+ICsgICAgICAgICAgICAgICBi cmVhazsKPiArICAgICAgIGNhc2UgSVJRX1RZUEVfTEVWRUxfSElHSDoKPiArICAgICAgICAgICAg ICAgdmFsID0gQVBMSUNfU09VUkNFQ0ZHX1NNX0xFVkVMX0hJR0g7Cj4gKyAgICAgICAgICAgICAg IGJyZWFrOwo+ICsgICAgICAgY2FzZSBJUlFfVFlQRV9FREdFX0ZBTExJTkc6Cj4gKyAgICAgICAg ICAgICAgIHZhbCA9IEFQTElDX1NPVVJDRUNGR19TTV9FREdFX0ZBTEw7Cj4gKyAgICAgICAgICAg ICAgIGJyZWFrOwo+ICsgICAgICAgY2FzZSBJUlFfVFlQRV9FREdFX1JJU0lORzoKPiArICAgICAg ICAgICAgICAgdmFsID0gQVBMSUNfU09VUkNFQ0ZHX1NNX0VER0VfUklTRTsKPiArICAgICAgICAg ICAgICAgYnJlYWs7Cj4gKyAgICAgICBkZWZhdWx0Ogo+ICsgICAgICAgICAgICAgICByZXR1cm4g LUVJTlZBTDsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICBzb3VyY2VjZmcgPSBwcml2LT5yZWdz ICsgQVBMSUNfU09VUkNFQ0ZHX0JBU0U7Cj4gKyAgICAgICBzb3VyY2VjZmcgKz0gKGQtPmh3aXJx IC0gMSkgKiBzaXplb2YodTMyKTsKPiArICAgICAgIHdyaXRlbCh2YWwsIHNvdXJjZWNmZyk7Cj4g Kwo+ICsgICAgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCBhcGxpY19pcnFkb21haW5fdHJh bnNsYXRlKHN0cnVjdCBpcnFfZndzcGVjICpmd3NwZWMsIHUzMiBnc2lfYmFzZSwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpod2lycSwgdW5zaWduZWQgaW50 ICp0eXBlKQo+ICt7Cj4gKyAgICAgICBpZiAoV0FSTl9PTihmd3NwZWMtPnBhcmFtX2NvdW50IDwg MikpCj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ICsgICAgICAgaWYgKFdBUk5f T04oIWZ3c3BlYy0+cGFyYW1bMF0pKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsK PiArCj4gKyAgICAgICAvKiBGb3IgRFQsIGdzaV9iYXNlIGlzIGFsd2F5cyB6ZXJvLiAqLwo+ICsg ICAgICAgKmh3aXJxID0gZndzcGVjLT5wYXJhbVswXSAtIGdzaV9iYXNlOwo+ICsgICAgICAgKnR5 cGUgPSBmd3NwZWMtPnBhcmFtWzFdICYgSVJRX1RZUEVfU0VOU0VfTUFTSzsKPiArCj4gKyAgICAg ICBXQVJOX09OKCp0eXBlID09IElSUV9UWVBFX05PTkUpOwo+ICsKPiArICAgICAgIHJldHVybiAw Owo+ICt9Cj4gKwo+ICt2b2lkIGFwbGljX2luaXRfaHdfZ2xvYmFsKHN0cnVjdCBhcGxpY19wcml2 ICpwcml2LCBib29sIG1zaV9tb2RlKQo+ICt7Cj4gKyAgICAgICB1MzIgdmFsOwo+ICsjaWZkZWYg Q09ORklHX1JJU0NWX01fTU9ERQo+ICsgICAgICAgdTMyIHZhbEg7Cj4gKwo+ICsgICAgICAgaWYg KG1zaV9tb2RlKSB7Cj4gKyAgICAgICAgICAgICAgIHZhbCA9IHByaXYtPm1zaWNmZy5iYXNlX3Bw bjsKPiArICAgICAgICAgICAgICAgdmFsSCA9ICgodTY0KXByaXYtPm1zaWNmZy5iYXNlX3BwbiA+ PiAzMikgJgo+ICsgICAgICAgICAgICAgICAgICAgICAgIEFQTElDX3hNU0lDRkdBRERSSF9CQVBQ Tl9NQVNLOwo+ICsgICAgICAgICAgICAgICB2YWxIIHw9IChwcml2LT5tc2ljZmcubGh4dyAmIEFQ TElDX3hNU0lDRkdBRERSSF9MSFhXX01BU0spCj4gKyAgICAgICAgICAgICAgICAgICAgICAgPDwg QVBMSUNfeE1TSUNGR0FERFJIX0xIWFdfU0hJRlQ7Cj4gKyAgICAgICAgICAgICAgIHZhbEggfD0g KHByaXYtPm1zaWNmZy5oaHh3ICYgQVBMSUNfeE1TSUNGR0FERFJIX0hIWFdfTUFTSykKPiArICAg ICAgICAgICAgICAgICAgICAgICA8PCBBUExJQ194TVNJQ0ZHQUREUkhfSEhYV19TSElGVDsKPiAr ICAgICAgICAgICAgICAgdmFsSCB8PSAocHJpdi0+bXNpY2ZnLmxoeHMgJiBBUExJQ194TVNJQ0ZH QUREUkhfTEhYU19NQVNLKQo+ICsgICAgICAgICAgICAgICAgICAgICAgIDw8IEFQTElDX3hNU0lD RkdBRERSSF9MSFhTX1NISUZUOwo+ICsgICAgICAgICAgICAgICB2YWxIIHw9IChwcml2LT5tc2lj ZmcuaGh4cyAmIEFQTElDX3hNU0lDRkdBRERSSF9ISFhTX01BU0spCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgPDwgQVBMSUNfeE1TSUNGR0FERFJIX0hIWFNfU0hJRlQ7Cj4gKyAgICAgICAgICAg ICAgIHdyaXRlbCh2YWwsIHByaXYtPnJlZ3MgKyBBUExJQ194TVNJQ0ZHQUREUik7Cj4gKyAgICAg ICAgICAgICAgIHdyaXRlbCh2YWxILCBwcml2LT5yZWdzICsgQVBMSUNfeE1TSUNGR0FERFJIKTsK PiArICAgICAgIH0KPiArI2VuZGlmCj4gKwo+ICsgICAgICAgLyogU2V0dXAgQVBMSUMgZG9tYWlu Y2ZnIHJlZ2lzdGVyICovCj4gKyAgICAgICB2YWwgPSByZWFkbChwcml2LT5yZWdzICsgQVBMSUNf RE9NQUlOQ0ZHKTsKPiArICAgICAgIHZhbCB8PSBBUExJQ19ET01BSU5DRkdfSUU7Cj4gKyAgICAg ICBpZiAobXNpX21vZGUpCj4gKyAgICAgICAgICAgICAgIHZhbCB8PSBBUExJQ19ET01BSU5DRkdf RE07Cj4gKyAgICAgICB3cml0ZWwodmFsLCBwcml2LT5yZWdzICsgQVBMSUNfRE9NQUlOQ0ZHKTsK PiArICAgICAgIGlmIChyZWFkbChwcml2LT5yZWdzICsgQVBMSUNfRE9NQUlOQ0ZHKSAhPSB2YWwp Cj4gKyAgICAgICAgICAgICAgIGRldl93YXJuKHByaXYtPmRldiwgInVuYWJsZSB0byB3cml0ZSAw eCV4IGluIGRvbWFpbmNmZ1xuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgdmFsKTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgYXBsaWNfaW5pdF9od19pcnFzKHN0cnVjdCBhcGxpY19wcml2 ICpwcml2KQo+ICt7Cj4gKyAgICAgICBpbnQgaTsKPiArCj4gKyAgICAgICAvKiBEaXNhYmxlIGFs bCBpbnRlcnJ1cHRzICovCj4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDw9IHByaXYtPm5yX2lycXM7 IGkgKz0gMzIpCj4gKyAgICAgICAgICAgICAgIHdyaXRlbCgtMVUsIHByaXYtPnJlZ3MgKyBBUExJ Q19DTFJJRV9CQVNFICsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkgLyAzMikgKiBz aXplb2YodTMyKSk7Cj4gKwo+ICsgICAgICAgLyogU2V0IGludGVycnVwdCB0eXBlIGFuZCBkZWZh dWx0IHByaW9yaXR5IGZvciBhbGwgaW50ZXJydXB0cyAqLwo+ICsgICAgICAgZm9yIChpID0gMTsg aSA8PSBwcml2LT5ucl9pcnFzOyBpKyspIHsKPiArICAgICAgICAgICAgICAgd3JpdGVsKDAsIHBy aXYtPnJlZ3MgKyBBUExJQ19TT1VSQ0VDRkdfQkFTRSArCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAoaSAtIDEpICogc2l6ZW9mKHUzMikpOwo+ICsgICAgICAgICAgICAgICB3cml0ZWwoQVBM SUNfREVGQVVMVF9QUklPUklUWSwKPiArICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnJlZ3Mg KyBBUExJQ19UQVJHRVRfQkFTRSArCj4gKyAgICAgICAgICAgICAgICAgICAgICAoaSAtIDEpICog c2l6ZW9mKHUzMikpOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIC8qIENsZWFyIEFQTElDIGRv bWFpbmNmZyAqLwo+ICsgICAgICAgd3JpdGVsKDAsIHByaXYtPnJlZ3MgKyBBUExJQ19ET01BSU5D RkcpOwo+ICt9Cj4gKwo+ICtpbnQgYXBsaWNfc2V0dXBfcHJpdihzdHJ1Y3QgYXBsaWNfcHJpdiAq cHJpdiwgc3RydWN0IGRldmljZSAqZGV2LAo+ICsgICAgICAgICAgICAgICAgICAgIHZvaWQgX19p b21lbSAqcmVncykKPiArewo+ICsgICAgICAgc3RydWN0IG9mX3BoYW5kbGVfYXJncyBwYXJlbnQ7 Cj4gKyAgICAgICBpbnQgcmM7Cj4gKwo+ICsgICAgICAgLyoKPiArICAgICAgICAqIEN1cnJlbnRs eSwgb25seSBPRiBmd25vZGUgaXMgc3VwcG9ydGVkIHNvIGV4dGVuZCB0aGlzCj4gKyAgICAgICAg KiBmdW5jdGlvbiBmb3IgQUNQSSBzdXBwb3J0Lgo+ICsgICAgICAgICovCj4gKyAgICAgICBpZiAo IWlzX29mX25vZGUoZGV2LT5md25vZGUpKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZB TDsKPiArCj4gKyAgICAgICAvKiBTYXZlIGRldmljZSBwb2ludGVyIGFuZCByZWdpc3RlciBiYXNl ICovCj4gKyAgICAgICBwcml2LT5kZXYgPSBkZXY7Cj4gKyAgICAgICBwcml2LT5yZWdzID0gcmVn czsKPiArCj4gKyAgICAgICAvKiBGaW5kIG91dCBudW1iZXIgb2YgaW50ZXJydXB0IHNvdXJjZXMg Ki8KPiArICAgICAgIHJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIodG9fb2Zfbm9kZShkZXYtPmZ3 bm9kZSksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJp c2N2LG51bS1zb3VyY2VzIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmcHJpdi0+bnJfaXJxcyk7Cj4gKyAgICAgICBpZiAocmMpIHsKPiArICAgICAgICAg ICAgICAgZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IG51bWJlciBvZiBpbnRlcnJ1cHQgc291 cmNlc1xuIik7Cj4gKyAgICAgICAgICAgICAgIHJldHVybiByYzsKPiArICAgICAgIH0KPiArCj4g KyAgICAgICAvKgo+ICsgICAgICAgICogRmluZCBvdXQgbnVtYmVyIG9mIElEQ3MgYmFzZWQgb24g cGFyZW50IGludGVycnVwdHMKPiArICAgICAgICAqCj4gKyAgICAgICAgKiBJZiAibXNpLXBhcmVu dCIgcHJvcGVydHkgaXMgcHJlc2VudCB0aGVuIHdlIGlnbm9yZSB0aGUKPiArICAgICAgICAqIEFQ TElDIElEQ3Mgd2hpY2ggZm9yY2VzIHRoZSBBUExJQyBkcml2ZXIgdG8gdXNlIE1TSSBtb2RlLgo+ ICsgICAgICAgICovCj4gKyAgICAgICBpZiAoIW9mX3Byb3BlcnR5X3ByZXNlbnQodG9fb2Zfbm9k ZShkZXYtPmZ3bm9kZSksICJtc2ktcGFyZW50IikpIHsKPiArICAgICAgICAgICAgICAgd2hpbGUg KCFvZl9pcnFfcGFyc2Vfb25lKHRvX29mX25vZGUoZGV2LT5md25vZGUpLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bnJfaWRjcywgJnBhcmVudCkpCj4g KyAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bnJfaWRjcysrOwo+ICsgICAgICAgfQo+ICsK PiArICAgICAgIC8qIFNldHVwIGluaXRpYWwgc3RhdGUgQVBMSUMgaW50ZXJydXB0cyAqLwo+ICsg ICAgICAgYXBsaWNfaW5pdF9od19pcnFzKHByaXYpOwo+ICsKPiArICAgICAgIHJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFwbGljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCj4gK3sKPiArICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4g KyAgICAgICBib29sIG1zaV9tb2RlID0gZmFsc2U7Cj4gKyAgICAgICBzdHJ1Y3QgcmVzb3VyY2Ug KnJlczsKPiArICAgICAgIHZvaWQgX19pb21lbSAqcmVnczsKPiArICAgICAgIGludCByYzsKPiAr Cj4gKyAgICAgICAvKiBNYXAgdGhlIE1NSU8gcmVnaXN0ZXJzICovCj4gKyAgICAgICByZXMgPSBw bGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwo+ICsgICAgICAg aWYgKCFyZXMpIHsKPiArICAgICAgICAgICAgICAgZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0 IE1NSU8gcmVzb3VyY2VcbiIpOwo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiAr ICAgICAgIH0KPiArICAgICAgIHJlZ3MgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgcmVzLT5z dGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKPiArICAgICAgIGlmICghcmVncykgewo+ICsgICAg ICAgICAgICAgICBkZXZfZXJyKGRldiwgImZhaWxlZCBtYXAgTU1JTyByZWdpc3RlcnNcbiIpOwo+ ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKPiArICAgICAgIH0KPiArCj4gKyAgICAg ICAvKgo+ICsgICAgICAgICogSWYgbXNpLXBhcmVudCBwcm9wZXJ0eSBpcyBwcmVzZW50IHRoZW4g c2V0dXAgQVBMSUMgTVNJCj4gKyAgICAgICAgKiBtb2RlIG90aGVyd2lzZSBzZXR1cCBBUExJQyBk aXJlY3QgbW9kZS4KPiArICAgICAgICAqLwo+ICsgICAgICAgaWYgKGlzX29mX25vZGUoZGV2LT5m d25vZGUpKQo+ICsgICAgICAgICAgICAgICBtc2lfbW9kZSA9IG9mX3Byb3BlcnR5X3ByZXNlbnQo dG9fb2Zfbm9kZShkZXYtPmZ3bm9kZSksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIm1zaS1wYXJlbnQiKTsKPiArICAgICAgIGlmIChtc2lfbW9kZSkK PiArICAgICAgICAgICAgICAgcmMgPSAtRU5PREVWOwo+ICsgICAgICAgZWxzZQo+ICsgICAgICAg ICAgICAgICByYyA9IGFwbGljX2RpcmVjdF9zZXR1cChkZXYsIHJlZ3MpOwo+ICsgICAgICAgaWYg KHJjKSB7Cj4gKyAgICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiZmFpbGVkIHNldHVwIEFQTElD IGluICVzIG1vZGVcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgbXNpX21vZGUgPyAiTVNJ IiA6ICJkaXJlY3QiKTsKPiArICAgICAgICAgICAgICAgcmV0dXJuIHJjOwo+ICsgICAgICAgfQo+ ICsKPiArICAgICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9m X2RldmljZV9pZCBhcGxpY19tYXRjaFtdID0gewo+ICsgICAgICAgeyAuY29tcGF0aWJsZSA9ICJy aXNjdixhcGxpYyIgfSwKPiArICAgICAgIHt9Cj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHBs YXRmb3JtX2RyaXZlciBhcGxpY19kcml2ZXIgPSB7Cj4gKyAgICAgICAuZHJpdmVyID0gewo+ICsg ICAgICAgICAgICAgICAubmFtZSAgICAgICAgICAgPSAicmlzY3YtYXBsaWMiLAo+ICsgICAgICAg ICAgICAgICAub2ZfbWF0Y2hfdGFibGUgPSBhcGxpY19tYXRjaCwKPiArICAgICAgIH0sCj4gKyAg ICAgICAucHJvYmUgPSBhcGxpY19wcm9iZSwKPiArfTsKPiArYnVpbHRpbl9wbGF0Zm9ybV9kcml2 ZXIoYXBsaWNfZHJpdmVyKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1yaXNj di1hcGxpYy1tYWluLmggYi9kcml2ZXJzL2lycWNoaXAvaXJxLXJpc2N2LWFwbGljLW1haW4uaAo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi40NzRhMDQyMjkzMzQK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1yaXNjdi1hcGxpYy1t YWluLmgKPiBAQCAtMCwwICsxLDQ1IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wLW9ubHkgKi8KPiArLyoKPiArICogQ29weXJpZ2h0IChDKSAyMDIxIFdlc3Rlcm4gRGln aXRhbCBDb3Jwb3JhdGlvbiBvciBpdHMgYWZmaWxpYXRlcy4KPiArICogQ29weXJpZ2h0IChDKSAy MDIyIFZlbnRhbmEgTWljcm8gU3lzdGVtcyBJbmMuCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfSVJR X1JJU0NWX0FQTElDX01BSU5fSAo+ICsjZGVmaW5lIF9JUlFfUklTQ1ZfQVBMSUNfTUFJTl9ICj4g Kwo+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pby5oPgo+ ICsjaW5jbHVkZSA8bGludXgvaXJxLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4K PiArI2luY2x1ZGUgPGxpbnV4L2Z3bm9kZS5oPgo+ICsKPiArI2RlZmluZSBBUExJQ19ERUZBVUxU X1BSSU9SSVRZICAgICAgICAgMQo+ICsKPiArc3RydWN0IGFwbGljX21zaWNmZyB7Cj4gKyAgICAg ICBwaHlzX2FkZHJfdCAgICAgICAgICAgICBiYXNlX3BwbjsKPiArICAgICAgIHUzMiAgICAgICAg ICAgICAgICAgICAgIGhoeHM7Cj4gKyAgICAgICB1MzIgICAgICAgICAgICAgICAgICAgICBoaHh3 Owo+ICsgICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgbGh4czsKPiArICAgICAgIHUzMiAg ICAgICAgICAgICAgICAgICAgIGxoeHc7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgYXBsaWNfcHJpdiB7 Cj4gKyAgICAgICBzdHJ1Y3QgZGV2aWNlICAgICAgICAgICAqZGV2Owo+ICsgICAgICAgdTMyICAg ICAgICAgICAgICAgICAgICAgZ3NpX2Jhc2U7Cj4gKyAgICAgICB1MzIgICAgICAgICAgICAgICAg ICAgICBucl9pcnFzOwo+ICsgICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgbnJfaWRjczsK PiArICAgICAgIHZvaWQgX19pb21lbSAgICAgICAgICAgICpyZWdzOwo+ICsgICAgICAgc3RydWN0 IGFwbGljX21zaWNmZyAgICAgbXNpY2ZnOwo+ICt9Owo+ICsKPiArdm9pZCBhcGxpY19pcnFfdW5t YXNrKHN0cnVjdCBpcnFfZGF0YSAqZCk7Cj4gK3ZvaWQgYXBsaWNfaXJxX21hc2soc3RydWN0IGly cV9kYXRhICpkKTsKPiAraW50IGFwbGljX2lycV9zZXRfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQs IHVuc2lnbmVkIGludCB0eXBlKTsKPiAraW50IGFwbGljX2lycWRvbWFpbl90cmFuc2xhdGUoc3Ry dWN0IGlycV9md3NwZWMgKmZ3c3BlYywgdTMyIGdzaV9iYXNlLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKmh3aXJxLCB1bnNpZ25lZCBpbnQgKnR5cGUpOwo+ ICt2b2lkIGFwbGljX2luaXRfaHdfZ2xvYmFsKHN0cnVjdCBhcGxpY19wcml2ICpwcml2LCBib29s IG1zaV9tb2RlKTsKPiAraW50IGFwbGljX3NldHVwX3ByaXYoc3RydWN0IGFwbGljX3ByaXYgKnBy aXYsIHN0cnVjdCBkZXZpY2UgKmRldiwKPiArICAgICAgICAgICAgICAgICAgICB2b2lkIF9faW9t ZW0gKnJlZ3MpOwo+ICtpbnQgYXBsaWNfZGlyZWN0X3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwg dm9pZCBfX2lvbWVtICpyZWdzKTsKPiArCj4gKyNlbmRpZgo+IGRpZmYgLS1naXQgYS9pbmNsdWRl L2xpbnV4L2lycWNoaXAvcmlzY3YtYXBsaWMuaCBiL2luY2x1ZGUvbGludXgvaXJxY2hpcC9yaXNj di1hcGxpYy5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjk3 ZTE5OGVhMDEwOQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9pbmNsdWRlL2xpbnV4L2lycWNoaXAv cmlzY3YtYXBsaWMuaAo+IEBAIC0wLDAgKzEsMTE5IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KPiArLyoKPiArICogQ29weXJpZ2h0IChDKSAyMDIxIFdl c3Rlcm4gRGlnaXRhbCBDb3Jwb3JhdGlvbiBvciBpdHMgYWZmaWxpYXRlcy4KPiArICogQ29weXJp Z2h0IChDKSAyMDIyIFZlbnRhbmEgTWljcm8gU3lzdGVtcyBJbmMuCj4gKyAqLwo+ICsjaWZuZGVm IF9fTElOVVhfSVJRQ0hJUF9SSVNDVl9BUExJQ19ICj4gKyNkZWZpbmUgX19MSU5VWF9JUlFDSElQ X1JJU0NWX0FQTElDX0gKPiArCj4gKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KPiArCj4gKyNk ZWZpbmUgQVBMSUNfTUFYX0lEQyAgICAgICAgICAgICAgICAgIEJJVCgxNCkKPiArI2RlZmluZSBB UExJQ19NQVhfU09VUkNFICAgICAgICAgICAgICAgMTAyNAo+ICsKPiArI2RlZmluZSBBUExJQ19E T01BSU5DRkcgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAKPiArI2RlZmluZSBBUExJQ19E T01BSU5DRkdfUkRPTkxZICAgICAgICAgMHg4MDAwMDAwMAo+ICsjZGVmaW5lIEFQTElDX0RPTUFJ TkNGR19JRSAgICAgICAgICAgICBCSVQoOCkKPiArI2RlZmluZSBBUExJQ19ET01BSU5DRkdfRE0g ICAgICAgICAgICAgQklUKDIpCj4gKyNkZWZpbmUgQVBMSUNfRE9NQUlOQ0ZHX0JFICAgICAgICAg ICAgIEJJVCgwKQo+ICsKPiArI2RlZmluZSBBUExJQ19TT1VSQ0VDRkdfQkFTRSAgICAgICAgICAg MHgwMDA0Cj4gKyNkZWZpbmUgQVBMSUNfU09VUkNFQ0ZHX0QgICAgICAgICAgICAgIEJJVCgxMCkK PiArI2RlZmluZSBBUExJQ19TT1VSQ0VDRkdfQ0hJTERJRFhfTUFTSyAgMHgwMDAwMDNmZgo+ICsj ZGVmaW5lIEFQTElDX1NPVVJDRUNGR19TTV9NQVNLICAgICAgICAweDAwMDAwMDA3Cj4gKyNkZWZp bmUgQVBMSUNfU09VUkNFQ0ZHX1NNX0lOQUNUSVZFICAgIDB4MAo+ICsjZGVmaW5lIEFQTElDX1NP VVJDRUNGR19TTV9ERVRBQ0ggICAgICAweDEKPiArI2RlZmluZSBBUExJQ19TT1VSQ0VDRkdfU01f RURHRV9SSVNFICAgMHg0Cj4gKyNkZWZpbmUgQVBMSUNfU09VUkNFQ0ZHX1NNX0VER0VfRkFMTCAg IDB4NQo+ICsjZGVmaW5lIEFQTElDX1NPVVJDRUNGR19TTV9MRVZFTF9ISUdIICAweDYKPiArI2Rl ZmluZSBBUExJQ19TT1VSQ0VDRkdfU01fTEVWRUxfTE9XICAgMHg3Cj4gKwo+ICsjZGVmaW5lIEFQ TElDX01NU0lDRkdBRERSICAgICAgICAgICAgICAweDFiYzAKPiArI2RlZmluZSBBUExJQ19NTVNJ Q0ZHQUREUkggICAgICAgICAgICAgMHgxYmM0Cj4gKyNkZWZpbmUgQVBMSUNfU01TSUNGR0FERFIg ICAgICAgICAgICAgIDB4MWJjOAo+ICsjZGVmaW5lIEFQTElDX1NNU0lDRkdBRERSSCAgICAgICAg ICAgICAweDFiY2MKPiArCj4gKyNpZmRlZiBDT05GSUdfUklTQ1ZfTV9NT0RFCj4gKyNkZWZpbmUg QVBMSUNfeE1TSUNGR0FERFIgICAgICAgICAgICAgIEFQTElDX01NU0lDRkdBRERSCj4gKyNkZWZp bmUgQVBMSUNfeE1TSUNGR0FERFJIICAgICAgICAgICAgIEFQTElDX01NU0lDRkdBRERSSAo+ICsj ZWxzZQo+ICsjZGVmaW5lIEFQTElDX3hNU0lDRkdBRERSICAgICAgICAgICAgICBBUExJQ19TTVNJ Q0ZHQUREUgo+ICsjZGVmaW5lIEFQTElDX3hNU0lDRkdBRERSSCAgICAgICAgICAgICBBUExJQ19T TVNJQ0ZHQUREUkgKPiArI2VuZGlmCj4gKwo+ICsjZGVmaW5lIEFQTElDX3hNU0lDRkdBRERSSF9M ICAgICAgICAgICBCSVQoMzEpCj4gKyNkZWZpbmUgQVBMSUNfeE1TSUNGR0FERFJIX0hIWFNfTUFT SyAgIDB4MWYKPiArI2RlZmluZSBBUExJQ194TVNJQ0ZHQUREUkhfSEhYU19TSElGVCAgMjQKPiAr I2RlZmluZSBBUExJQ194TVNJQ0ZHQUREUkhfTEhYU19NQVNLICAgMHg3Cj4gKyNkZWZpbmUgQVBM SUNfeE1TSUNGR0FERFJIX0xIWFNfU0hJRlQgIDIwCj4gKyNkZWZpbmUgQVBMSUNfeE1TSUNGR0FE RFJIX0hIWFdfTUFTSyAgIDB4Nwo+ICsjZGVmaW5lIEFQTElDX3hNU0lDRkdBRERSSF9ISFhXX1NI SUZUICAxNgo+ICsjZGVmaW5lIEFQTElDX3hNU0lDRkdBRERSSF9MSFhXX01BU0sgICAweGYKPiAr I2RlZmluZSBBUExJQ194TVNJQ0ZHQUREUkhfTEhYV19TSElGVCAgMTIKPiArI2RlZmluZSBBUExJ Q194TVNJQ0ZHQUREUkhfQkFQUE5fTUFTSyAgMHhmZmYKPiArCj4gKyNkZWZpbmUgQVBMSUNfeE1T SUNGR0FERFJfUFBOX1NISUZUICAgIDEyCj4gKwo+ICsjZGVmaW5lIEFQTElDX3hNU0lDRkdBRERS X1BQTl9IQVJUKF9fbGh4cykgXAo+ICsgICAgICAgKEJJVChfX2xoeHMpIC0gMSkKPiArCj4gKyNk ZWZpbmUgQVBMSUNfeE1TSUNGR0FERFJfUFBOX0xIWF9NQVNLKF9fbGh4dykgXAo+ICsgICAgICAg KEJJVChfX2xoeHcpIC0gMSkKPiArI2RlZmluZSBBUExJQ194TVNJQ0ZHQUREUl9QUE5fTEhYX1NI SUZUKF9fbGh4cykgXAo+ICsgICAgICAgKChfX2xoeHMpKQo+ICsjZGVmaW5lIEFQTElDX3hNU0lD RkdBRERSX1BQTl9MSFgoX19saHh3LCBfX2xoeHMpIFwKPiArICAgICAgIChBUExJQ194TVNJQ0ZH QUREUl9QUE5fTEhYX01BU0soX19saHh3KSA8PCBcCj4gKyAgICAgICAgQVBMSUNfeE1TSUNGR0FE RFJfUFBOX0xIWF9TSElGVChfX2xoeHMpKQo+ICsKPiArI2RlZmluZSBBUExJQ194TVNJQ0ZHQURE Ul9QUE5fSEhYX01BU0soX19oaHh3KSBcCj4gKyAgICAgICAoQklUKF9faGh4dykgLSAxKQo+ICsj ZGVmaW5lIEFQTElDX3hNU0lDRkdBRERSX1BQTl9ISFhfU0hJRlQoX19oaHhzKSBcCj4gKyAgICAg ICAoKF9faGh4cykgKyBBUExJQ194TVNJQ0ZHQUREUl9QUE5fU0hJRlQpCj4gKyNkZWZpbmUgQVBM SUNfeE1TSUNGR0FERFJfUFBOX0hIWChfX2hoeHcsIF9faGh4cykgXAo+ICsgICAgICAgKEFQTElD X3hNU0lDRkdBRERSX1BQTl9ISFhfTUFTSyhfX2hoeHcpIDw8IFwKPiArICAgICAgICBBUExJQ194 TVNJQ0ZHQUREUl9QUE5fSEhYX1NISUZUKF9faGh4cykpCj4gKwo+ICsjZGVmaW5lIEFQTElDX0lS UUJJVFNfUEVSX1JFRyAgICAgICAgICAzMgo+ICsKPiArI2RlZmluZSBBUExJQ19TRVRJUF9CQVNF ICAgICAgICAgICAgICAgMHgxYzAwCj4gKyNkZWZpbmUgQVBMSUNfU0VUSVBOVU0gICAgICAgICAg ICAgICAgIDB4MWNkYwo+ICsKPiArI2RlZmluZSBBUExJQ19DTFJJUF9CQVNFICAgICAgICAgICAg ICAgMHgxZDAwCj4gKyNkZWZpbmUgQVBMSUNfQ0xSSVBOVU0gICAgICAgICAgICAgICAgIDB4MWRk Ywo+ICsKPiArI2RlZmluZSBBUExJQ19TRVRJRV9CQVNFICAgICAgICAgICAgICAgMHgxZTAwCj4g KyNkZWZpbmUgQVBMSUNfU0VUSUVOVU0gICAgICAgICAgICAgICAgIDB4MWVkYwo+ICsKPiArI2Rl ZmluZSBBUExJQ19DTFJJRV9CQVNFICAgICAgICAgICAgICAgMHgxZjAwCj4gKyNkZWZpbmUgQVBM SUNfQ0xSSUVOVU0gICAgICAgICAgICAgICAgIDB4MWZkYwo+ICsKPiArI2RlZmluZSBBUExJQ19T RVRJUE5VTV9MRSAgICAgICAgICAgICAgMHgyMDAwCj4gKyNkZWZpbmUgQVBMSUNfU0VUSVBOVU1f QkUgICAgICAgICAgICAgIDB4MjAwNAo+ICsKPiArI2RlZmluZSBBUExJQ19HRU5NU0kgICAgICAg ICAgICAgICAgICAgMHgzMDAwCj4gKwo+ICsjZGVmaW5lIEFQTElDX1RBUkdFVF9CQVNFICAgICAg ICAgICAgICAweDMwMDQKPiArI2RlZmluZSBBUExJQ19UQVJHRVRfSEFSVF9JRFhfU0hJRlQgICAg MTgKPiArI2RlZmluZSBBUExJQ19UQVJHRVRfSEFSVF9JRFhfTUFTSyAgICAgMHgzZmZmCj4gKyNk ZWZpbmUgQVBMSUNfVEFSR0VUX0dVRVNUX0lEWF9TSElGVCAgIDEyCj4gKyNkZWZpbmUgQVBMSUNf VEFSR0VUX0dVRVNUX0lEWF9NQVNLICAgIDB4M2YKPiArI2RlZmluZSBBUExJQ19UQVJHRVRfSVBS SU9fTUFTSyAgICAgICAgMHhmZgo+ICsjZGVmaW5lIEFQTElDX1RBUkdFVF9FSUlEX01BU0sgMHg3 ZmYKPiArCj4gKyNkZWZpbmUgQVBMSUNfSURDX0JBU0UgICAgICAgICAgICAgICAgIDB4NDAwMAo+ ICsjZGVmaW5lIEFQTElDX0lEQ19TSVpFICAgICAgICAgICAgICAgICAzMgo+ICsKPiArI2RlZmlu ZSBBUExJQ19JRENfSURFTElWRVJZICAgICAgICAgICAgMHgwMAo+ICsKPiArI2RlZmluZSBBUExJ Q19JRENfSUZPUkNFICAgICAgICAgICAgICAgMHgwNAo+ICsKPiArI2RlZmluZSBBUExJQ19JRENf SVRIUkVTSE9MRCAgICAgICAgICAgMHgwOAo+ICsKPiArI2RlZmluZSBBUExJQ19JRENfVE9QSSAg ICAgICAgICAgICAgICAgMHgxOAo+ICsjZGVmaW5lIEFQTElDX0lEQ19UT1BJX0lEX1NISUZUICAg ICAgICAxNgo+ICsjZGVmaW5lIEFQTElDX0lEQ19UT1BJX0lEX01BU0sgMHgzZmYKPiArI2RlZmlu ZSBBUExJQ19JRENfVE9QSV9QUklPX01BU0sgICAgICAgMHhmZgo+ICsKPiArI2RlZmluZSBBUExJ Q19JRENfQ0xBSU1JICAgICAgICAgICAgICAgMHgxYwo+ICsKPiArI2VuZGlmCj4gLS0KPiAyLjM0 LjEKPgo+Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K PiBsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKPiBsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQu b3JnCj4gaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1y aXNjdgoKVGhhbmtzLApBbmR5CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVs QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9s aXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==