From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.6 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 26AB1C4360C for ; Thu, 10 Oct 2019 17:52:37 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id ED835218AC for ; Thu, 10 Oct 2019 17:52:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1570729957; bh=+t2xAOuHsEiUDUYknW9vPTjDkXnpZU97I1pFhjZC9z8=; h=Date:From:To:Cc:Subject:References:In-Reply-To:List-ID:From; b=p8pJovD10w/LUTpr/iFf72Z/zg/8KQjEFIDC3NAzex8ntBRXVvt2ktrLy6XJLewTL 2IgRkM0jRKjXOPrIOHTWuCf6OXlk5vUSEm2+Ogf57K2Li/BofY4inpgl1IOmV6nZwp aeH5muanBS/C7epiy/t8ceGBRF+qLBitvq2UGCnM= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726550AbfJJRwg (ORCPT ); Thu, 10 Oct 2019 13:52:36 -0400 Received: from mail-ot1-f66.google.com ([209.85.210.66]:45760 "EHLO mail-ot1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726045AbfJJRwg (ORCPT ); Thu, 10 Oct 2019 13:52:36 -0400 Received: by mail-ot1-f66.google.com with SMTP id 41so5631602oti.12; Thu, 10 Oct 2019 10:52:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=a70u+PCa3MzcqnlWdhbAe+7/0fT6s4/X1lJ6W8QPXck=; b=oPi6aNDGk0QshWVKvErKsT5MYNh/OsQJlOuZnIWCX75W02h+mYoVz50tCrCgLL4Dun HDfhQBp1zIDaCim3emQFB6b+zkflFFdsBoLH7fh/SUINENWUGyd5qjpbm7Iuu5gN+/69 QTownpyFOTKgBjYOlHhNe6wG6mYHQsIE5Pt6qqn7Rc7ZpIz4cINg0ioryTRw4/v11HYD yrwLOJx1PNeHvo0Q7/6L6MTk9+das4AexDsqRGGlpX2opFtJVVX1NrtVxJJZqKXu/j7M O/GBiOH+oDJVnSiVqnYRkxKNJXJq0AFpzZy//6plObY4YbqbA2YSG+rFN5/OIq+CIaeI j3ng== X-Gm-Message-State: APjAAAWNJdfbexjnHmMKaXPq7P0ofNCeYZQNeUwyDFTB4PDF4lbhD2HK 6jRO9nruIHHQcsum0TeI0A== X-Google-Smtp-Source: APXvYqzJlgWFbffQpRxfD2QVCR0aGPlmdcthroqPENy7FiUmkPyqWgn2QjkzArY+GAJaw6T/5RBR0A== X-Received: by 2002:a9d:70c3:: with SMTP id w3mr3335655otj.246.1570729954301; Thu, 10 Oct 2019 10:52:34 -0700 (PDT) Received: from localhost (24-155-109-49.dyn.grandenetworks.net. [24.155.109.49]) by smtp.gmail.com with ESMTPSA id y16sm1786414otg.7.2019.10.10.10.52.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Oct 2019 10:52:33 -0700 (PDT) Date: Thu, 10 Oct 2019 12:52:32 -0500 From: Rob Herring To: Peter Ujfalusi Cc: vkoul@kernel.org, nm@ti.com, ssantosh@kernel.org, dan.j.williams@intel.com, dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, grygorii.strashko@ti.com, lokeshvutla@ti.com, t-kristo@ti.com, tony@atomide.com, j-keerthy@ti.com Subject: Re: [PATCH v3 07/14] dt-bindings: dma: ti: Add document for K3 UDMA Message-ID: <20191010175232.GA24556@bogus> References: <20191001061704.2399-1-peter.ujfalusi@ti.com> <20191001061704.2399-8-peter.ujfalusi@ti.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20191001061704.2399-8-peter.ujfalusi@ti.com> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: dmaengine-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: dmaengine@vger.kernel.org On Tue, Oct 01, 2019 at 09:16:57AM +0300, Peter Ujfalusi wrote: > New binding document for > Texas Instruments K3 NAVSS Unified DMA – Peripheral Root Complex (UDMA-P). > > UDMA-P is introduced as part of the K3 architecture and can be found in > AM654 and j721e. > > Signed-off-by: Peter Ujfalusi > --- > .../devicetree/bindings/dma/ti/k3-udma.txt | 185 ++++++++++++++++++ > include/dt-bindings/dma/k3-udma.h | 10 + > 2 files changed, 195 insertions(+) > create mode 100644 Documentation/devicetree/bindings/dma/ti/k3-udma.txt > create mode 100644 include/dt-bindings/dma/k3-udma.h > > diff --git a/Documentation/devicetree/bindings/dma/ti/k3-udma.txt b/Documentation/devicetree/bindings/dma/ti/k3-udma.txt > new file mode 100644 > index 000000000000..3a8816ec9ce0 > --- /dev/null > +++ b/Documentation/devicetree/bindings/dma/ti/k3-udma.txt > @@ -0,0 +1,185 @@ > +* Texas Instruments K3 NAVSS Unified DMA – Peripheral Root Complex (UDMA-P) > + > +The UDMA-P is intended to perform similar (but significantly upgraded) functions > +as the packet-oriented DMA used on previous SoC devices. The UDMA-P module > +supports the transmission and reception of various packet types. The UDMA-P is > +architected to facilitate the segmentation and reassembly of SoC DMA data > +structure compliant packets to/from smaller data blocks that are natively > +compatible with the specific requirements of each connected peripheral. Multiple > +Tx and Rx channels are provided within the DMA which allow multiple segmentation > +or reassembly operations to be ongoing. The DMA controller maintains state > +information for each of the channels which allows packet segmentation and > +reassembly operations to be time division multiplexed between channels in order > +to share the underlying DMA hardware. An external DMA scheduler is used to > +control the ordering and rate at which this multiplexing occurs for Transmit > +operations. The ordering and rate of Receive operations is indirectly controlled > +by the order in which blocks are pushed into the DMA on the Rx PSI-L interface. > + > +The UDMA-P also supports acting as both a UTC and UDMA-C for its internal > +channels. Channels in the UDMA-P can be configured to be either Packet-Based or > +Third-Party channels on a channel by channel basis. > + > +All transfers within NAVSS is done between PSI-L source and destination threads. > +The peripherals serviced by UDMA can be PSI-L native (sa2ul, cpsw, etc) or > +legacy, non PSI-L native peripherals. In the later case a special, small PDMA is > +tasked to act as a bridge between the PSI-L fabric and the legacy peripheral. > + > +PDMAs can be configured via UDMAP peer registers to match with the configuration > +of the legacy peripheral. > + > +Required properties: > +-------------------- > +- compatible: Should be > + "ti,am654-navss-main-udmap" for am654 main NAVSS UDMAP > + "ti,am654-navss-mcu-udmap" for am654 mcu NAVSS UDMAP > + "ti,j721e-navss-main-udmap" for j721e main NAVSS UDMAP > + "ti,j721e-navss-mcu-udmap" for j721e mcu NAVSS UDMAP > +- #dma-cells: Should be set to <3>. > + - The first parameter is a phandle to the remote PSI-L > + endpoint > + - The second parameter is the thread offset within the > + remote thread ID range > + - The third parameter is the channel direction. > +- reg: Memory map of UDMAP > +- reg-names: "gcfg", "rchanrt", "tchanrt" > +- msi-parent: phandle for "ti,sci-inta" interrupt controller > +- ti,ringacc: phandle for the ring accelerator node > +- ti,psil-base: PSI-L thread ID base of the UDMAP channels > +- ti,sci: phandle on TI-SCI compatible System controller node > +- ti,sci-dev-id: TI-SCI device id > +- ti,sci-rm-range-tchan: UDMA tchan resource list in pairs of type and subtype > +- ti,sci-rm-range-rchan: UDMA rchan resource list in pairs of type and subtype > +- ti,sci-rm-range-rflow: UDMA rflow resource list in pairs of type and subtype > + > +For PSI-L thread management the parent NAVSS node must have: > +- ti,sci: phandle on TI-SCI compatible System controller node > +- ti,sci-dev-id: TI-SCI device id of the NAVSS instance > + > +Remote PSI-L endpoint > + > +Required properties: > +-------------------- > +- ti,psil-base: PSI-L thread ID base of the endpoint > + > +Within the PSI-L endpoint node thread configuration subnodes must present with: > +psil-configX naming convention, where X is the thread ID offset. > + > +Configuration node Optional properties: > +-------------------- > +- ti,pdma-statictr-type:In case the remote endpoint (PDMAs) requires StaticTR > + configuration: > + - PSIL_STATIC_TR_XY (1): XY type of StaticTR > + For endpoints without StaticTR the property is not > + needed or to be set PSIL_STATIC_TR_NONE (0). > +- ti,pdma-enable-acc32: Force 32 bit access on peripheral port. Only valid for > + XY type StaticTR, not supported on am654. > + Must be enabled for threads servicing McASP with AFIFO > + bypass mode. > +- ti,pdma-enable-burst: Enable burst access on peripheral port. Only valid for > + XY type StaticTR, not supported on am654. > +- ti,channel-tpl: Channel Throughput level: > + 0 / or not present - normal channel > + 1 - High Throughput channel > + 2 - Ultra High Throughput channel (j721e only) > +- ti,needs-epib: If the endpoint require EPIB to be present in the > + descriptor. > +- ti,psd-size: Size of the Protocol Specific Data section of the > + descriptor. > +- ti,notdpkt: The Teardown Completion Message on the thread must be > + suppressed. > + > +Example: > + > +main_navss: main_navss { > + compatible = "simple-bus"; > + #address-cells = <2>; > + #size-cells = <2>; > + dma-coherent; > + dma-ranges; > + ranges; > + > + ti,sci = <&dmsc>; > + ti,sci-dev-id = <118>; > + > + main_udmap: dma-controller@31150000 { > + compatible = "ti,j721e-navss-main-udmap"; > + reg = <0x0 0x31150000 0x0 0x100>, > + <0x0 0x34000000 0x0 0x100000>, > + <0x0 0x35000000 0x0 0x100000>; > + reg-names = "gcfg", "rchanrt", "tchanrt"; > + #dma-cells = <3>; > + > + ti,ringacc = <&main_ringacc>; > + ti,psil-base = <0x1000>; > + > + interrupt-parent = <&main_udmass_inta>; > + > + ti,sci = <&dmsc>; > + ti,sci-dev-id = <212>; > + > + ti,sci-rm-range-tchan = <0x0d>, /* TX_CHAN */ > + <0x0f>, /* TX_HCHAN */ > + <0x10>; /* TX_UHCHAN */ > + ti,sci-rm-range-rchan = <0x0a>, /* RX_CHAN */ > + <0x0b>, /* RX_HCHAN */ > + <0x0c>; /* RX_UHCHAN */ > + ti,sci-rm-range-rflow = <0x00>; /* GP RFLOW */ > + }; > +}; > + > +psilss@340c000 { > + /* PSILSS1 AASRC */ > + compatible = "ti,j721e-psilss"; > + reg = <0x0 0x0340c000 0x0 0x1000>; > + reg-names = "config"; > + > + pdma_main_mcasp_g0: pdma_main_mcasp_g0 { > + /* PDMA6 (PDMA_MCASP_G0) */ > + ti,psil-base = <0x4400>; > + > + /* psil-config0 */ > + psil-config0 { > + ti,pdma-statictr-type = ; > + ti,pdma-enable-acc32; > + ti,pdma-enable-burst; > + }; > + }; > +}; > + > +mcasp0: mcasp@02B00000 { > +... > + /* tx: PDMA_MAIN_MCASP_G0-0, rx: PDMA_MAIN_MCASP_G0-0 */ > + dmas = <&main_udmap &pdma_main_mcasp_g0 0 UDMA_DIR_TX>, > + <&main_udmap &pdma_main_mcasp_g0 0 UDMA_DIR_RX>; > + dma-names = "tx", "rx"; > +... > +}; > + > +crypto: crypto@4E00000 { > + compatible = "ti,sa2ul-crypto"; > +... > + > + /* tx: crypto_pnp-1, rx: crypto_pnp-1 */ > + dmas = <&main_udmap &crypto 0 UDMA_DIR_TX>, > + <&main_udmap &crypto 0 UDMA_DIR_RX>, > + <&main_udmap &crypto 1 UDMA_DIR_RX>; I asked before if the first cell is the client and you said no. But this shows it clearly is. Or '...' omits a lot more than just some node properties and 'dmas' is not a property in 'crypto' node. Having the consumer phandle here looks like a hack to me and I can't think of ever seeing such a case before. I don't think we want to start now. First, it's redundant. The code parsing 'dmas' already knows what node it is in. I guess this is lost in Linux when the args are passed to main_udmap's translate function, but that's Linux's problem and not a DT problem. I haven't looked at the code, but I'm guessing you want crypto phandle to go read these psil-config nodes. Second, If we ever rev the FDT format to have type information maintained, we could find each phandle and not have to parse #*-cells to walk these properties. > + dma-names = "tx", "rx1", "rx2"; > +... > + psil-config0 { > + ti,needs-epib; > + ti,psd-size = <64>; > + ti,notdpkt; > + }; I still don't like this either. Your choices are: Put into dma cells. Yes, that's not easily expanded as you said, but your bindings shouldn't really be expanding either. Don't put into DT. Not everything has to go into DT. What changes per board/customer? Limit DT data to that. What data is fixed based on the client or SoC? That can reside in the drivers. There's less value in that data being in DT unless it is standard like interrupts, clocks, etc. Maybe the DMA api needs some way for clients to provide the provider with additional configuration information. Or do some combination of the above. Sorry I don't have specific suggestions, but I just see lots of properties and complexity, and I don't really understand the h/w here. Putting the complexity in what is an ABI is generally not a good plan. And I don't have the bandwidth to study and understand the complexities of your h/w (and everyone elses), so just more explanations are not likely to really help. Rob From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.5 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AC211C10F14 for ; Thu, 10 Oct 2019 17:52:40 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 8591921929 for ; Thu, 10 Oct 2019 17:52:40 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="fBMtPt5V" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8591921929 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=psjjfq9lJf/XgyD8h4uoo4k6ONqg77Ge5FkIE5p6f7w=; b=fBMtPt5VAVeuRV CWsX3rXKvZMWE2SnJUQGqoPzU7WzycHK5Vm9F/gSNM1ZL50MqLM4wfz2PtmBTl5c1l3ytCBrahVr0 SCDKRHhCAiqenO7LspzFOPqiUgjzEtJihp7iJ+ctz8nqZd0HhmJDHnAg4mc/dI/e3v8izPU5h0tX8 HuKNq35nFQxuiL0dbS3w3N/Ay/7cT6uWkKt3fxjCjk4oX+9A4x04wAj64V8SALW4HpyrIraOSHn7p 2MftTizdj7rQEM7U6u1YGZvoIHIICRJdQg1CcOxr+l/+uW5JiEnsyu+4UhoViqFxFzOJ1brQJPQ1L gvIz6jYaCgQUBLhm38bQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iIccA-00066l-Mx; Thu, 10 Oct 2019 17:52:38 +0000 Received: from mail-ot1-f65.google.com ([209.85.210.65]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iIcc7-00066L-J9 for linux-arm-kernel@lists.infradead.org; Thu, 10 Oct 2019 17:52:37 +0000 Received: by mail-ot1-f65.google.com with SMTP id g13so5643143otp.8 for ; Thu, 10 Oct 2019 10:52:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=a70u+PCa3MzcqnlWdhbAe+7/0fT6s4/X1lJ6W8QPXck=; b=NwjxvOaNBn1mBP5wATATf6HkJY813OsqnStpIFyF7jix8AJ7vryiRy7Y9zPaQAStta Dx/J+8RXmpBusYVSJZj9WemnqxCB3ujInAjipgSP9+SFurhXPZhHefCirqgqxvL1czoC tg78YBvLK5rZhr4VcQoKaf06Mgne+TQTfsbb1mvjXijtv/PLbMx72gKzArLjqq1r61ov 1lH/UCwU/PKM7NfH1NMrSt7F70g7qk1XSIWi6EU0MjdbJp6paGWX8dkuJHtsS5+FrnCe EdHphYCsXdfzYM7AxjIycgtLewl6DQ19svWNJZ5x1lz1htkVVIbXtVH/duopcQDyxSTS ykgg== X-Gm-Message-State: APjAAAWQPYFoOb9OxaBYVRkQYggfQjStITEkpkobhVrLh9/CAEPVehsA c2jlYYUTgu+X0FqUcegALA== X-Google-Smtp-Source: APXvYqzJlgWFbffQpRxfD2QVCR0aGPlmdcthroqPENy7FiUmkPyqWgn2QjkzArY+GAJaw6T/5RBR0A== X-Received: by 2002:a9d:70c3:: with SMTP id w3mr3335655otj.246.1570729954301; Thu, 10 Oct 2019 10:52:34 -0700 (PDT) Received: from localhost (24-155-109-49.dyn.grandenetworks.net. [24.155.109.49]) by smtp.gmail.com with ESMTPSA id y16sm1786414otg.7.2019.10.10.10.52.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Oct 2019 10:52:33 -0700 (PDT) Date: Thu, 10 Oct 2019 12:52:32 -0500 From: Rob Herring To: Peter Ujfalusi Subject: Re: [PATCH v3 07/14] dt-bindings: dma: ti: Add document for K3 UDMA Message-ID: <20191010175232.GA24556@bogus> References: <20191001061704.2399-1-peter.ujfalusi@ti.com> <20191001061704.2399-8-peter.ujfalusi@ti.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20191001061704.2399-8-peter.ujfalusi@ti.com> User-Agent: Mutt/1.10.1 (2018-07-13) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191010_105235_636105_446C10CB X-CRM114-Status: GOOD ( 29.21 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: nm@ti.com, devicetree@vger.kernel.org, grygorii.strashko@ti.com, lokeshvutla@ti.com, j-keerthy@ti.com, linux-kernel@vger.kernel.org, t-kristo@ti.com, tony@atomide.com, vkoul@kernel.org, ssantosh@kernel.org, dmaengine@vger.kernel.org, dan.j.williams@intel.com, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gVHVlLCBPY3QgMDEsIDIwMTkgYXQgMDk6MTY6NTdBTSArMDMwMCwgUGV0ZXIgVWpmYWx1c2kg d3JvdGU6Cj4gTmV3IGJpbmRpbmcgZG9jdW1lbnQgZm9yCj4gVGV4YXMgSW5zdHJ1bWVudHMgSzMg TkFWU1MgVW5pZmllZCBETUEg4oCTIFBlcmlwaGVyYWwgUm9vdCBDb21wbGV4IChVRE1BLVApLgo+ IAo+IFVETUEtUCBpcyBpbnRyb2R1Y2VkIGFzIHBhcnQgb2YgdGhlIEszIGFyY2hpdGVjdHVyZSBh bmQgY2FuIGJlIGZvdW5kIGluCj4gQU02NTQgYW5kIGo3MjFlLgo+IAo+IFNpZ25lZC1vZmYtYnk6 IFBldGVyIFVqZmFsdXNpIDxwZXRlci51amZhbHVzaUB0aS5jb20+Cj4gLS0tCj4gIC4uLi9kZXZp Y2V0cmVlL2JpbmRpbmdzL2RtYS90aS9rMy11ZG1hLnR4dCAgICB8IDE4NSArKysrKysrKysrKysr KysrKysKPiAgaW5jbHVkZS9kdC1iaW5kaW5ncy9kbWEvazMtdWRtYS5oICAgICAgICAgICAgIHwg IDEwICsKPiAgMiBmaWxlcyBjaGFuZ2VkLCAxOTUgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2RtYS90aS9rMy11ZG1h LnR4dAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kdC1iaW5kaW5ncy9kbWEvazMtdWRt YS5oCj4gCj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9k bWEvdGkvazMtdWRtYS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZG1h L3RpL2szLXVkbWEudHh0Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAw MDAuLjNhODgxNmVjOWNlMAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9Eb2N1bWVudGF0aW9uL2Rl dmljZXRyZWUvYmluZGluZ3MvZG1hL3RpL2szLXVkbWEudHh0Cj4gQEAgLTAsMCArMSwxODUgQEAK PiArKiBUZXhhcyBJbnN0cnVtZW50cyBLMyBOQVZTUyBVbmlmaWVkIERNQSDigJMgUGVyaXBoZXJh bCBSb290IENvbXBsZXggKFVETUEtUCkKPiArCj4gK1RoZSBVRE1BLVAgaXMgaW50ZW5kZWQgdG8g cGVyZm9ybSBzaW1pbGFyIChidXQgc2lnbmlmaWNhbnRseSB1cGdyYWRlZCkgZnVuY3Rpb25zCj4g K2FzIHRoZSBwYWNrZXQtb3JpZW50ZWQgRE1BIHVzZWQgb24gcHJldmlvdXMgU29DIGRldmljZXMu IFRoZSBVRE1BLVAgbW9kdWxlCj4gK3N1cHBvcnRzIHRoZSB0cmFuc21pc3Npb24gYW5kIHJlY2Vw dGlvbiBvZiB2YXJpb3VzIHBhY2tldCB0eXBlcy4gVGhlIFVETUEtUCBpcwo+ICthcmNoaXRlY3Rl ZCB0byBmYWNpbGl0YXRlIHRoZSBzZWdtZW50YXRpb24gYW5kIHJlYXNzZW1ibHkgb2YgU29DIERN QSBkYXRhCj4gK3N0cnVjdHVyZSBjb21wbGlhbnQgcGFja2V0cyB0by9mcm9tIHNtYWxsZXIgZGF0 YSBibG9ja3MgdGhhdCBhcmUgbmF0aXZlbHkKPiArY29tcGF0aWJsZSB3aXRoIHRoZSBzcGVjaWZp YyByZXF1aXJlbWVudHMgb2YgZWFjaCBjb25uZWN0ZWQgcGVyaXBoZXJhbC4gTXVsdGlwbGUKPiAr VHggYW5kIFJ4IGNoYW5uZWxzIGFyZSBwcm92aWRlZCB3aXRoaW4gdGhlIERNQSB3aGljaCBhbGxv dyBtdWx0aXBsZSBzZWdtZW50YXRpb24KPiArb3IgcmVhc3NlbWJseSBvcGVyYXRpb25zIHRvIGJl IG9uZ29pbmcuIFRoZSBETUEgY29udHJvbGxlciBtYWludGFpbnMgc3RhdGUKPiAraW5mb3JtYXRp b24gZm9yIGVhY2ggb2YgdGhlIGNoYW5uZWxzIHdoaWNoIGFsbG93cyBwYWNrZXQgc2VnbWVudGF0 aW9uIGFuZAo+ICtyZWFzc2VtYmx5IG9wZXJhdGlvbnMgdG8gYmUgdGltZSBkaXZpc2lvbiBtdWx0 aXBsZXhlZCBiZXR3ZWVuIGNoYW5uZWxzIGluIG9yZGVyCj4gK3RvIHNoYXJlIHRoZSB1bmRlcmx5 aW5nIERNQSBoYXJkd2FyZS4gQW4gZXh0ZXJuYWwgRE1BIHNjaGVkdWxlciBpcyB1c2VkIHRvCj4g K2NvbnRyb2wgdGhlIG9yZGVyaW5nIGFuZCByYXRlIGF0IHdoaWNoIHRoaXMgbXVsdGlwbGV4aW5n IG9jY3VycyBmb3IgVHJhbnNtaXQKPiArb3BlcmF0aW9ucy4gVGhlIG9yZGVyaW5nIGFuZCByYXRl IG9mIFJlY2VpdmUgb3BlcmF0aW9ucyBpcyBpbmRpcmVjdGx5IGNvbnRyb2xsZWQKPiArYnkgdGhl IG9yZGVyIGluIHdoaWNoIGJsb2NrcyBhcmUgcHVzaGVkIGludG8gdGhlIERNQSBvbiB0aGUgUngg UFNJLUwgaW50ZXJmYWNlLgo+ICsKPiArVGhlIFVETUEtUCBhbHNvIHN1cHBvcnRzIGFjdGluZyBh cyBib3RoIGEgVVRDIGFuZCBVRE1BLUMgZm9yIGl0cyBpbnRlcm5hbAo+ICtjaGFubmVscy4gQ2hh bm5lbHMgaW4gdGhlIFVETUEtUCBjYW4gYmUgY29uZmlndXJlZCB0byBiZSBlaXRoZXIgUGFja2V0 LUJhc2VkIG9yCj4gK1RoaXJkLVBhcnR5IGNoYW5uZWxzIG9uIGEgY2hhbm5lbCBieSBjaGFubmVs IGJhc2lzLgo+ICsKPiArQWxsIHRyYW5zZmVycyB3aXRoaW4gTkFWU1MgaXMgZG9uZSBiZXR3ZWVu IFBTSS1MIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gdGhyZWFkcy4KPiArVGhlIHBlcmlwaGVyYWxz IHNlcnZpY2VkIGJ5IFVETUEgY2FuIGJlIFBTSS1MIG5hdGl2ZSAoc2EydWwsIGNwc3csIGV0Yykg b3IKPiArbGVnYWN5LCBub24gUFNJLUwgbmF0aXZlIHBlcmlwaGVyYWxzLiBJbiB0aGUgbGF0ZXIg Y2FzZSBhIHNwZWNpYWwsIHNtYWxsIFBETUEgaXMKPiArdGFza2VkIHRvIGFjdCBhcyBhIGJyaWRn ZSBiZXR3ZWVuIHRoZSBQU0ktTCBmYWJyaWMgYW5kIHRoZSBsZWdhY3kgcGVyaXBoZXJhbC4KPiAr Cj4gK1BETUFzIGNhbiBiZSBjb25maWd1cmVkIHZpYSBVRE1BUCBwZWVyIHJlZ2lzdGVycyB0byBt YXRjaCB3aXRoIHRoZSBjb25maWd1cmF0aW9uCj4gK29mIHRoZSBsZWdhY3kgcGVyaXBoZXJhbC4K PiArCj4gK1JlcXVpcmVkIHByb3BlcnRpZXM6Cj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gKy0g Y29tcGF0aWJsZToJCVNob3VsZCBiZQo+ICsJCQkidGksYW02NTQtbmF2c3MtbWFpbi11ZG1hcCIg Zm9yIGFtNjU0IG1haW4gTkFWU1MgVURNQVAKPiArCQkJInRpLGFtNjU0LW5hdnNzLW1jdS11ZG1h cCIgZm9yIGFtNjU0IG1jdSBOQVZTUyBVRE1BUAo+ICsJCQkidGksajcyMWUtbmF2c3MtbWFpbi11 ZG1hcCIgZm9yIGo3MjFlIG1haW4gTkFWU1MgVURNQVAKPiArCQkJInRpLGo3MjFlLW5hdnNzLW1j dS11ZG1hcCIgZm9yIGo3MjFlIG1jdSBOQVZTUyBVRE1BUAo+ICstICNkbWEtY2VsbHM6CQlTaG91 bGQgYmUgc2V0IHRvIDwzPi4KPiArCQkJLSBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIGEgcGhhbmRs ZSB0byB0aGUgcmVtb3RlIFBTSS1MCj4gKwkJCSAgZW5kcG9pbnQKPiArCQkJLSBUaGUgc2Vjb25k IHBhcmFtZXRlciBpcyB0aGUgdGhyZWFkIG9mZnNldCB3aXRoaW4gdGhlCj4gKwkJCSAgcmVtb3Rl IHRocmVhZCBJRCByYW5nZQo+ICsJCQktIFRoZSB0aGlyZCBwYXJhbWV0ZXIgaXMgdGhlIGNoYW5u ZWwgZGlyZWN0aW9uLgo+ICstIHJlZzoJCQlNZW1vcnkgbWFwIG9mIFVETUFQCj4gKy0gcmVnLW5h bWVzOgkJImdjZmciLCAicmNoYW5ydCIsICJ0Y2hhbnJ0Igo+ICstIG1zaS1wYXJlbnQ6CQlwaGFu ZGxlIGZvciAidGksc2NpLWludGEiIGludGVycnVwdCBjb250cm9sbGVyCj4gKy0gdGkscmluZ2Fj YzoJCXBoYW5kbGUgZm9yIHRoZSByaW5nIGFjY2VsZXJhdG9yIG5vZGUKPiArLSB0aSxwc2lsLWJh c2U6CQlQU0ktTCB0aHJlYWQgSUQgYmFzZSBvZiB0aGUgVURNQVAgY2hhbm5lbHMKPiArLSB0aSxz Y2k6CQlwaGFuZGxlIG9uIFRJLVNDSSBjb21wYXRpYmxlIFN5c3RlbSBjb250cm9sbGVyIG5vZGUK PiArLSB0aSxzY2ktZGV2LWlkOglUSS1TQ0kgZGV2aWNlIGlkCj4gKy0gdGksc2NpLXJtLXJhbmdl LXRjaGFuOiBVRE1BIHRjaGFuIHJlc291cmNlIGxpc3QgaW4gcGFpcnMgb2YgdHlwZSBhbmQgc3Vi dHlwZQo+ICstIHRpLHNjaS1ybS1yYW5nZS1yY2hhbjogVURNQSByY2hhbiByZXNvdXJjZSBsaXN0 IGluIHBhaXJzIG9mIHR5cGUgYW5kIHN1YnR5cGUKPiArLSB0aSxzY2ktcm0tcmFuZ2UtcmZsb3c6 IFVETUEgcmZsb3cgcmVzb3VyY2UgbGlzdCBpbiBwYWlycyBvZiB0eXBlIGFuZCBzdWJ0eXBlCj4g Kwo+ICtGb3IgUFNJLUwgdGhyZWFkIG1hbmFnZW1lbnQgdGhlIHBhcmVudCBOQVZTUyBub2RlIG11 c3QgaGF2ZToKPiArLSB0aSxzY2k6CQlwaGFuZGxlIG9uIFRJLVNDSSBjb21wYXRpYmxlIFN5c3Rl bSBjb250cm9sbGVyIG5vZGUKPiArLSB0aSxzY2ktZGV2LWlkOglUSS1TQ0kgZGV2aWNlIGlkIG9m IHRoZSBOQVZTUyBpbnN0YW5jZQo+ICsKPiArUmVtb3RlIFBTSS1MIGVuZHBvaW50Cj4gKwo+ICtS ZXF1aXJlZCBwcm9wZXJ0aWVzOgo+ICstLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICstIHRpLHBzaWwt YmFzZToJCVBTSS1MIHRocmVhZCBJRCBiYXNlIG9mIHRoZSBlbmRwb2ludAo+ICsKPiArV2l0aGlu IHRoZSBQU0ktTCBlbmRwb2ludCBub2RlIHRocmVhZCBjb25maWd1cmF0aW9uIHN1Ym5vZGVzIG11 c3QgcHJlc2VudCB3aXRoOgo+ICtwc2lsLWNvbmZpZ1ggbmFtaW5nIGNvbnZlbnRpb24sIHdoZXJl IFggaXMgdGhlIHRocmVhZCBJRCBvZmZzZXQuCj4gKwo+ICtDb25maWd1cmF0aW9uIG5vZGUgT3B0 aW9uYWwgcHJvcGVydGllczoKPiArLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiArLSB0aSxwZG1hLXN0 YXRpY3RyLXR5cGU6SW4gY2FzZSB0aGUgcmVtb3RlIGVuZHBvaW50IChQRE1BcykgcmVxdWlyZXMg U3RhdGljVFIKPiArCQkJY29uZmlndXJhdGlvbjoKPiArCQkJLSBQU0lMX1NUQVRJQ19UUl9YWSAo MSk6IFhZIHR5cGUgb2YgU3RhdGljVFIKPiArCQkJRm9yIGVuZHBvaW50cyB3aXRob3V0IFN0YXRp Y1RSIHRoZSBwcm9wZXJ0eSBpcyBub3QKPiArCQkJbmVlZGVkIG9yIHRvIGJlIHNldCBQU0lMX1NU QVRJQ19UUl9OT05FICgwKS4KPiArLSB0aSxwZG1hLWVuYWJsZS1hY2MzMjoJRm9yY2UgMzIgYml0 IGFjY2VzcyBvbiBwZXJpcGhlcmFsIHBvcnQuIE9ubHkgdmFsaWQgZm9yCj4gKwkJCVhZIHR5cGUg U3RhdGljVFIsIG5vdCBzdXBwb3J0ZWQgb24gYW02NTQuCj4gKwkJCU11c3QgYmUgZW5hYmxlZCBm b3IgdGhyZWFkcyBzZXJ2aWNpbmcgTWNBU1Agd2l0aCBBRklGTwo+ICsJCQlieXBhc3MgbW9kZS4K PiArLSB0aSxwZG1hLWVuYWJsZS1idXJzdDoJRW5hYmxlIGJ1cnN0IGFjY2VzcyBvbiBwZXJpcGhl cmFsIHBvcnQuIE9ubHkgdmFsaWQgZm9yCj4gKwkJCVhZIHR5cGUgU3RhdGljVFIsIG5vdCBzdXBw b3J0ZWQgb24gYW02NTQuCj4gKy0gdGksY2hhbm5lbC10cGw6CUNoYW5uZWwgVGhyb3VnaHB1dCBs ZXZlbDoKPiArCQkJMCAvIG9yIG5vdCBwcmVzZW50IC0gbm9ybWFsIGNoYW5uZWwKPiArCQkJMSAt IEhpZ2ggVGhyb3VnaHB1dCBjaGFubmVsCj4gKwkJCTIgLSBVbHRyYSBIaWdoIFRocm91Z2hwdXQg Y2hhbm5lbCAoajcyMWUgb25seSkKPiArLSB0aSxuZWVkcy1lcGliOglJZiB0aGUgZW5kcG9pbnQg cmVxdWlyZSBFUElCIHRvIGJlIHByZXNlbnQgaW4gdGhlCj4gKwkJCWRlc2NyaXB0b3IuCj4gKy0g dGkscHNkLXNpemU6CQlTaXplIG9mIHRoZSBQcm90b2NvbCBTcGVjaWZpYyBEYXRhIHNlY3Rpb24g b2YgdGhlCj4gKwkJCWRlc2NyaXB0b3IuCj4gKy0gdGksbm90ZHBrdDoJCVRoZSBUZWFyZG93biBD b21wbGV0aW9uIE1lc3NhZ2Ugb24gdGhlIHRocmVhZCBtdXN0IGJlCj4gKwkJCXN1cHByZXNzZWQu Cj4gKwo+ICtFeGFtcGxlOgo+ICsKPiArbWFpbl9uYXZzczogbWFpbl9uYXZzcyB7Cj4gKwljb21w YXRpYmxlID0gInNpbXBsZS1idXMiOwo+ICsJI2FkZHJlc3MtY2VsbHMgPSA8Mj47Cj4gKwkjc2l6 ZS1jZWxscyA9IDwyPjsKPiArCWRtYS1jb2hlcmVudDsKPiArCWRtYS1yYW5nZXM7Cj4gKwlyYW5n ZXM7Cj4gKwo+ICsJdGksc2NpID0gPCZkbXNjPjsKPiArCXRpLHNjaS1kZXYtaWQgPSA8MTE4PjsK PiArCj4gKwltYWluX3VkbWFwOiBkbWEtY29udHJvbGxlckAzMTE1MDAwMCB7Cj4gKwkJY29tcGF0 aWJsZSA9ICJ0aSxqNzIxZS1uYXZzcy1tYWluLXVkbWFwIjsKPiArCQlyZWcgPQk8MHgwIDB4MzEx NTAwMDAgMHgwIDB4MTAwPiwKPiArCQkJPDB4MCAweDM0MDAwMDAwIDB4MCAweDEwMDAwMD4sCj4g KwkJCTwweDAgMHgzNTAwMDAwMCAweDAgMHgxMDAwMDA+Owo+ICsJCXJlZy1uYW1lcyA9ICJnY2Zn IiwgInJjaGFucnQiLCAidGNoYW5ydCI7Cj4gKwkJI2RtYS1jZWxscyA9IDwzPjsKPiArCj4gKwkJ dGkscmluZ2FjYyA9IDwmbWFpbl9yaW5nYWNjPjsKPiArCQl0aSxwc2lsLWJhc2UgPSA8MHgxMDAw PjsKPiArCj4gKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbWFpbl91ZG1hc3NfaW50YT47Cj4gKwo+ ICsJCXRpLHNjaSA9IDwmZG1zYz47Cj4gKwkJdGksc2NpLWRldi1pZCA9IDwyMTI+Owo+ICsKPiAr CQl0aSxzY2ktcm0tcmFuZ2UtdGNoYW4gPSA8MHgwZD4sIC8qIFRYX0NIQU4gKi8KPiArCQkJCQk8 MHgwZj4sIC8qIFRYX0hDSEFOICovCj4gKwkJCQkJPDB4MTA+OyAvKiBUWF9VSENIQU4gKi8KPiAr CQl0aSxzY2ktcm0tcmFuZ2UtcmNoYW4gPSA8MHgwYT4sIC8qIFJYX0NIQU4gKi8KPiArCQkJCQk8 MHgwYj4sIC8qIFJYX0hDSEFOICovCj4gKwkJCQkJPDB4MGM+OyAvKiBSWF9VSENIQU4gKi8KPiAr CQl0aSxzY2ktcm0tcmFuZ2UtcmZsb3cgPSA8MHgwMD47IC8qIEdQIFJGTE9XICovCj4gKwl9Owo+ ICt9Owo+ICsKPiArcHNpbHNzQDM0MGMwMDAgewo+ICsJLyogUFNJTFNTMSBBQVNSQyAqLwo+ICsJ Y29tcGF0aWJsZSA9ICJ0aSxqNzIxZS1wc2lsc3MiOwo+ICsJcmVnID0gPDB4MCAweDAzNDBjMDAw IDB4MCAweDEwMDA+Owo+ICsJcmVnLW5hbWVzID0gImNvbmZpZyI7Cj4gKwo+ICsJcGRtYV9tYWlu X21jYXNwX2cwOiBwZG1hX21haW5fbWNhc3BfZzAgewo+ICsJCS8qIFBETUE2IChQRE1BX01DQVNQ X0cwKSAqLwo+ICsJCXRpLHBzaWwtYmFzZSA9IDwweDQ0MDA+Owo+ICsKPiArCQkvKiBwc2lsLWNv bmZpZzAgKi8KPiArCQlwc2lsLWNvbmZpZzAgewo+ICsJCQl0aSxwZG1hLXN0YXRpY3RyLXR5cGUg PSA8UERNQV9TVEFUSUNfVFJfWFk+Owo+ICsJCQl0aSxwZG1hLWVuYWJsZS1hY2MzMjsKPiArCQkJ dGkscGRtYS1lbmFibGUtYnVyc3Q7Cj4gKwkJfTsKPiArCX07Cj4gK307Cj4gKwo+ICttY2FzcDA6 IG1jYXNwQDAyQjAwMDAwIHsKPiArLi4uCj4gKwkvKiB0eDogUERNQV9NQUlOX01DQVNQX0cwLTAs IHJ4OiBQRE1BX01BSU5fTUNBU1BfRzAtMCAqLwo+ICsJZG1hcyA9IDwmbWFpbl91ZG1hcCAmcGRt YV9tYWluX21jYXNwX2cwIDAgVURNQV9ESVJfVFg+LAo+ICsJICAgICAgIDwmbWFpbl91ZG1hcCAm cGRtYV9tYWluX21jYXNwX2cwIDAgVURNQV9ESVJfUlg+Owo+ICsJZG1hLW5hbWVzID0gInR4Iiwg InJ4IjsKPiArLi4uCj4gK307Cj4gKwo+ICtjcnlwdG86IGNyeXB0b0A0RTAwMDAwIHsKPiArCWNv bXBhdGlibGUgPSAidGksc2EydWwtY3J5cHRvIjsKPiArLi4uCj4gKwo+ICsJLyogdHg6IGNyeXB0 b19wbnAtMSwgcng6IGNyeXB0b19wbnAtMSAqLwo+ICsJZG1hcyA9IDwmbWFpbl91ZG1hcCAmY3J5 cHRvIDAgVURNQV9ESVJfVFg+LAo+ICsJICAgICAgIDwmbWFpbl91ZG1hcCAmY3J5cHRvIDAgVURN QV9ESVJfUlg+LAo+ICsJICAgICAgIDwmbWFpbl91ZG1hcCAmY3J5cHRvIDEgVURNQV9ESVJfUlg+ OwoKSSBhc2tlZCBiZWZvcmUgaWYgdGhlIGZpcnN0IGNlbGwgaXMgdGhlIGNsaWVudCBhbmQgeW91 IHNhaWQgbm8uIEJ1dCB0aGlzIApzaG93cyBpdCBjbGVhcmx5IGlzLiBPciAnLi4uJyBvbWl0cyBh IGxvdCBtb3JlIHRoYW4ganVzdCBzb21lIG5vZGUgCnByb3BlcnRpZXMgYW5kICdkbWFzJyBpcyBu b3QgYSBwcm9wZXJ0eSBpbiAnY3J5cHRvJyBub2RlLgoKSGF2aW5nIHRoZSBjb25zdW1lciBwaGFu ZGxlIGhlcmUgbG9va3MgbGlrZSBhIGhhY2sgdG8gbWUgYW5kIEkgY2FuJ3QgCnRoaW5rIG9mIGV2 ZXIgc2VlaW5nIHN1Y2ggYSBjYXNlIGJlZm9yZS4gSSBkb24ndCB0aGluayB3ZSB3YW50IHRvIHN0 YXJ0IApub3cuIAoKRmlyc3QsIGl0J3MgcmVkdW5kYW50LiBUaGUgY29kZSBwYXJzaW5nICdkbWFz JyBhbHJlYWR5IGtub3dzIHdoYXQgbm9kZSAKaXQgaXMgaW4uIEkgZ3Vlc3MgdGhpcyBpcyBsb3N0 IGluIExpbnV4IHdoZW4gdGhlIGFyZ3MgYXJlIHBhc3NlZCB0byAKbWFpbl91ZG1hcCdzIHRyYW5z bGF0ZSBmdW5jdGlvbiwgYnV0IHRoYXQncyBMaW51eCdzIHByb2JsZW0gYW5kIG5vdCBhIERUIApw cm9ibGVtLiBJIGhhdmVuJ3QgbG9va2VkIGF0IHRoZSBjb2RlLCBidXQgSSdtIGd1ZXNzaW5nIHlv dSB3YW50IGNyeXB0byAKcGhhbmRsZSB0byBnbyByZWFkIHRoZXNlIHBzaWwtY29uZmlnIG5vZGVz LgoKU2Vjb25kLCBJZiB3ZSBldmVyIHJldiB0aGUgRkRUIGZvcm1hdCB0byBoYXZlIHR5cGUgaW5m b3JtYXRpb24gCm1haW50YWluZWQsIHdlIGNvdWxkIGZpbmQgZWFjaCBwaGFuZGxlIGFuZCBub3Qg aGF2ZSB0byBwYXJzZSAjKi1jZWxscyB0byAKd2FsayB0aGVzZSBwcm9wZXJ0aWVzLgoKCj4gKwlk bWEtbmFtZXMgPSAidHgiLCAicngxIiwgInJ4MiI7Cj4gKy4uLgo+ICsJcHNpbC1jb25maWcwIHsK PiArCQl0aSxuZWVkcy1lcGliOwo+ICsJCXRpLHBzZC1zaXplID0gPDY0PjsKPiArCQl0aSxub3Rk cGt0Owo+ICsJfTsKCkkgc3RpbGwgZG9uJ3QgbGlrZSB0aGlzIGVpdGhlci4gWW91ciBjaG9pY2Vz IGFyZToKClB1dCBpbnRvIGRtYSBjZWxscy4gWWVzLCB0aGF0J3Mgbm90IGVhc2lseSBleHBhbmRl ZCBhcyB5b3Ugc2FpZCwgYnV0IAp5b3VyIGJpbmRpbmdzIHNob3VsZG4ndCByZWFsbHkgYmUgZXhw YW5kaW5nIGVpdGhlci4KCkRvbid0IHB1dCBpbnRvIERULiBOb3QgZXZlcnl0aGluZyBoYXMgdG8g Z28gaW50byBEVC4gV2hhdCBjaGFuZ2VzIHBlciAKYm9hcmQvY3VzdG9tZXI/IExpbWl0IERUIGRh dGEgdG8gdGhhdC4gV2hhdCBkYXRhIGlzIGZpeGVkIGJhc2VkIG9uIHRoZSAKY2xpZW50IG9yIFNv Qz8gVGhhdCBjYW4gcmVzaWRlIGluIHRoZSBkcml2ZXJzLiBUaGVyZSdzIGxlc3MgdmFsdWUgaW4g CnRoYXQgZGF0YSBiZWluZyBpbiBEVCB1bmxlc3MgaXQgaXMgc3RhbmRhcmQgbGlrZSBpbnRlcnJ1 cHRzLCBjbG9ja3MsIApldGMuIE1heWJlIHRoZSBETUEgYXBpIG5lZWRzIHNvbWUgd2F5IGZvciBj bGllbnRzIHRvIHByb3ZpZGUgdGhlIApwcm92aWRlciB3aXRoIGFkZGl0aW9uYWwgY29uZmlndXJh dGlvbiBpbmZvcm1hdGlvbi4KCk9yIGRvIHNvbWUgY29tYmluYXRpb24gb2YgdGhlIGFib3ZlLiAK CgpTb3JyeSBJIGRvbid0IGhhdmUgc3BlY2lmaWMgc3VnZ2VzdGlvbnMsIGJ1dCBJIGp1c3Qgc2Vl IGxvdHMgb2YgcHJvcGVydGllcyAKYW5kIGNvbXBsZXhpdHksIGFuZCBJIGRvbid0IHJlYWxseSB1 bmRlcnN0YW5kIHRoZSBoL3cgaGVyZS4gUHV0dGluZyB0aGUgCmNvbXBsZXhpdHkgaW4gd2hhdCBp cyBhbiBBQkkgaXMgZ2VuZXJhbGx5IG5vdCBhIGdvb2QgcGxhbi4gQW5kIEkgZG9uJ3QgCmhhdmUg dGhlIGJhbmR3aWR0aCB0byBzdHVkeSBhbmQgdW5kZXJzdGFuZCB0aGUgY29tcGxleGl0aWVzIG9m IHlvdXIgaC93IAooYW5kIGV2ZXJ5b25lIGVsc2VzKSwgc28ganVzdCBtb3JlIGV4cGxhbmF0aW9u cyBhcmUgbm90IGxpa2VseSB0byByZWFsbHkgCmhlbHAuIAoKUm9iCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcg bGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==