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=-2.4 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=no 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 2BD91C7618F for ; Tue, 16 Jul 2019 17:09:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id DEB02206C2 for ; Tue, 16 Jul 2019 17:09:24 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="yd5g/CAL" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388161AbfGPRJX (ORCPT ); Tue, 16 Jul 2019 13:09:23 -0400 Received: from fllv0015.ext.ti.com ([198.47.19.141]:44156 "EHLO fllv0015.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725926AbfGPRJX (ORCPT ); Tue, 16 Jul 2019 13:09:23 -0400 Received: from fllv0034.itg.ti.com ([10.64.40.246]) by fllv0015.ext.ti.com (8.15.2/8.15.2) with ESMTP id x6GH7wGu022595; Tue, 16 Jul 2019 12:07:59 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1563296879; bh=VQ/fp5ABUyt0fOaHGKlhXyBUzQD3cI800FDzOaTcw8o=; h=Subject:To:CC:References:From:Date:In-Reply-To; b=yd5g/CALb31GGT87CeoGnogbhZ/u8y5VHXCC2ySvjip0C0JxwGiCfWx5k3o6XuSsq nJ/1uakbglW4rgoUvz+E3GC2qf+LEKFIrzkBmVEiv8RD2yhCwHGLcsJwFGowMwGhXz EC4HfAzbmWLuC5Nwe0BqmE0yyr2DA0Dglgg8Cjqg= Received: from DLEE114.ent.ti.com (dlee114.ent.ti.com [157.170.170.25]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x6GH7w4v032498 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 16 Jul 2019 12:07:58 -0500 Received: from DLEE106.ent.ti.com (157.170.170.36) by DLEE114.ent.ti.com (157.170.170.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Tue, 16 Jul 2019 12:07:58 -0500 Received: from fllv0039.itg.ti.com (10.64.41.19) by DLEE106.ent.ti.com (157.170.170.36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5 via Frontend Transport; Tue, 16 Jul 2019 12:07:58 -0500 Received: from [128.247.58.153] (ileax41-snat.itg.ti.com [10.172.224.153]) by fllv0039.itg.ti.com (8.15.2/8.15.2) with ESMTP id x6GH7wZu122924; Tue, 16 Jul 2019 12:07:58 -0500 Subject: Re: [PATCH 1/6] dt-bindings: irqchip: Add PRUSS interrupt controller bindings To: David Lechner , "Andrew F. Davis" , Marc Zyngier , Rob Herring , Thomas Gleixner , Jason Cooper CC: Tony Lindgren , Roger Quadros , Lokesh Vutla , Grygorii Strashko , Sekhar Nori , Murali Karicheri , , , , References: <20190708035243.12170-1-s-anna@ti.com> <20190708035243.12170-2-s-anna@ti.com> <53868885-a78d-448a-1f2a-03a16251d028@ti.com> From: Suman Anna Message-ID: <2eb76f94-3d01-2620-89a0-207a4084be1b@ti.com> Date: Tue, 16 Jul 2019 12:07:58 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 8bit X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi David, On 7/10/19 12:08 PM, David Lechner wrote: > >>>> +- interrupts           : all the interrupts generated towards the >>>> main host >>>> +                         processor in the SoC. The format depends >>>> on the >>>> +                         interrupt specifier for the particular >>>> SoC's ARM GIC >>>> +                         parent interrupt controller. A shared >>>> interrupt can >>>> +                         be skipped if the desired destination and >>>> usage is by >>>> +                         a different processor/device. >>>> +- interrupt-names      : should use one of the following names for >>>> each valid >>>> +                         interrupt connected to ARM GIC, the name >>>> should match >>>> +                         the corresponding host interrupt number, >>>> +                             "host0", "host1", "host2", "host3", >>>> "host4", >>>> +                             "host5", "host6" or "host7" >>>> +- interrupt-controller : mark this node as an interrupt controller >>>> +- #interrupt-cells     : should be 1. Client users shall use the >>>> PRU System >>>> +                         event number (the interrupt source that >>>> the client >>>> +                         is interested in) as the value of the >>>> interrupts >>>> +                         property in their node >>>> + >>>> +Optional Properties: >>>> +-------------------- >>>> +The following properties are _required_ only for some SoCs. If none >>>> of the below >>>> +properties are defined, it implies that all the host interrupts 2 >>>> through 9 are >>>> +connected exclusively to the ARM GIC. >>>> + >>>> +- ti,irqs-reserved     : an array of 8-bit elements of host >>>> interrupts between >>>> +                         0 and 7 (corresponding to PRUSS INTC >>>> output interrupts >>>> +                         2 through 9) that are not connected to the >>>> ARM GIC. >>> >>> The reason for 0-7 mapping to 2-9 is not instantly clear to someone >>> reading this. If you respin this could you note that reason is >>> interrupts 0 and 1 are always routed back into the PRUSS. >> >> Yeah, this is always going to be somewhat confusing since the driver has >> to deal with all hosts from channel-mapping perspective, but only the 8 >> interrupts at most that reach MPU for handling interrupts. TRM has >> >> Anyway, I have already mentioned the first 2 interrupt routing in the >> first paragraph above. >> >> Thinking more >>> on that, the same is true for interrupt 7 ("host5") on AM437x/66AK2G yet >>> we don't skip that in the naming.. now that we have the reserved IRQ >>> mechanism above, why not leave the one-to-one interrupt to name mapping, >>> but always have at least the first two marked as reserved for all the >>> current devices: >>> >>> ti,irqs-reserved = /bits/ 8 <0 1>; >>> >>> Then any "hostx" listed as reserved need not be present in the host >>> interrupts property array. To me that would solve the "managing >>> interrupts not targeting the Linux running core" problem and keep the >>> names consistent, e.g.: >> >> I had actually used the interrupt-names always starting from "host2" >> through "host9" (names from PRU perspective) previously, and I have >> changed this to start indexing from 0 in this series to address an >> internal review comment from Grygorii and to align with TRM. All the >> TRMs (except for AM572x) actually use the names/signals "host_intr0", >> "host_intr1".."host_intr7" etc for the interrupts going towards MPU. >> Maybe I should actually rename the interrupt-names to be host_intrX >> instead of hostX to avoid confusion and be exactly aligned with the TRM >> names. I will file a bug against AM57xx TRM to align the names with all >> other SoC TRMs. >> >> I am using "output interrupt lines" to imply names w.r.t PRU vs "host >> interrupt" to imply ARM GIC names. >> >> regards >> Suman >> > > FWIW, the AM1808 TRM only uses PRU_EVTOUT0 to PRU_EVTOUT7 and does not > mention "host" in relation to these interrupts. The AM3xxx and AM4xxx > also use similar names (PRU_ICSS_EVTOUT0, PRU_ICSS1_EVTOUT0) although > they do mention that the source is "pr1_host[0] output/events exported > from PRU_ICSS1". (Also, the older processors have AINTC instead of GIC). Indeed, EVTOUT was only used in the Interrupts chapter on AM1808, AM335x and AM437x. These TRMs are only getting very infrequent updates, so I doubt we will have these names synchronized to the other SoCs. The descriptions in PRUSS INTC sections themselves always use the term host interrupts for all host events, but the output signals get re-indexed to 0, which tends to be confusing. > > Maybe to help clarify here we could mention "event" in the docs: > > > +- interrupt-names      : should use one of the following names for each > valid > +                         host event interrupt connected to ARM interrupt > +                         controller,the name should match the > corresponding > +                         host event interrupt number, Yeah, I like your rewording. Will update for the next version. > +                             "host0", "host1", "host2", "host3", "host4", > +                             "host5", "host6" or "host7" I will be updating these names as well to add either a int or intr suffix. > > > > ... > >>>> + >>>> +Example: >>>> +-------- >>>> + >>>> +1.    /* AM33xx PRU-ICSS */ >>>> +    pruss: pruss@0 { > > I don't suppose there is a generic name that could be used here > instead of pruss? It seems like there should be one for remote > processors that aren't DSPs or other specialized processors. > Yeah, there is none. It is the overall PRU subsystem, the individual cores are called PRU. The subsystems are usually referred to as PRUSS, PRU-ICSS and ICSSG (on the newer K3 SoCs), so I simply chose the shorter pruss. regards Suman From mboxrd@z Thu Jan 1 00:00:00 1970 From: Suman Anna Subject: Re: [PATCH 1/6] dt-bindings: irqchip: Add PRUSS interrupt controller bindings Date: Tue, 16 Jul 2019 12:07:58 -0500 Message-ID: <2eb76f94-3d01-2620-89a0-207a4084be1b@ti.com> References: <20190708035243.12170-1-s-anna@ti.com> <20190708035243.12170-2-s-anna@ti.com> <53868885-a78d-448a-1f2a-03a16251d028@ti.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: David Lechner , "Andrew F. Davis" , Marc Zyngier , Rob Herring , Thomas Gleixner , Jason Cooper Cc: devicetree@vger.kernel.org, Grygorii Strashko , Tony Lindgren , Sekhar Nori , linux-kernel@vger.kernel.org, Lokesh Vutla , Murali Karicheri , linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Roger Quadros List-Id: devicetree@vger.kernel.org SGkgRGF2aWQsCgpPbiA3LzEwLzE5IDEyOjA4IFBNLCBEYXZpZCBMZWNobmVyIHdyb3RlOgo+IAo+ Pj4+ICstIGludGVycnVwdHPCoMKgwqDCoMKgwqDCoMKgwqDCoCA6IGFsbCB0aGUgaW50ZXJydXB0 cyBnZW5lcmF0ZWQgdG93YXJkcyB0aGUKPj4+PiBtYWluIGhvc3QKPj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByb2Nlc3NvciBpbiB0aGUgU29D LiBUaGUgZm9ybWF0IGRlcGVuZHMKPj4+PiBvbiB0aGUKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludGVycnVwdCBzcGVjaWZpZXIgZm9yIHRo ZSBwYXJ0aWN1bGFyCj4+Pj4gU29DJ3MgQVJNIEdJQwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGFyZW50IGludGVycnVwdCBjb250cm9sbGVy LiBBIHNoYXJlZAo+Pj4+IGludGVycnVwdCBjYW4KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJlIHNraXBwZWQgaWYgdGhlIGRlc2lyZWQgZGVz dGluYXRpb24gYW5kCj4+Pj4gdXNhZ2UgaXMgYnkKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGEgZGlmZmVyZW50IHByb2Nlc3Nvci9kZXZpY2Uu Cj4+Pj4gKy0gaW50ZXJydXB0LW5hbWVzwqDCoMKgwqDCoCA6IHNob3VsZCB1c2Ugb25lIG9mIHRo ZSBmb2xsb3dpbmcgbmFtZXMgZm9yCj4+Pj4gZWFjaCB2YWxpZAo+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50ZXJydXB0IGNvbm5lY3RlZCB0 byBBUk0gR0lDLCB0aGUgbmFtZQo+Pj4+IHNob3VsZCBtYXRjaAo+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdGhlIGNvcnJlc3BvbmRpbmcgaG9z dCBpbnRlcnJ1cHQgbnVtYmVyLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiaG9zdDAiLCAiaG9zdDEiLCAiaG9zdDIiLCAiaG9z dDMiLAo+Pj4+ICJob3N0NCIsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJob3N0NSIsICJob3N0NiIgb3IgImhvc3Q3Igo+Pj4+ ICstIGludGVycnVwdC1jb250cm9sbGVyIDogbWFyayB0aGlzIG5vZGUgYXMgYW4gaW50ZXJydXB0 IGNvbnRyb2xsZXIKPj4+PiArLSAjaW50ZXJydXB0LWNlbGxzwqDCoMKgwqAgOiBzaG91bGQgYmUg MS4gQ2xpZW50IHVzZXJzIHNoYWxsIHVzZSB0aGUKPj4+PiBQUlUgU3lzdGVtCj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBldmVudCBudW1iZXIg KHRoZSBpbnRlcnJ1cHQgc291cmNlIHRoYXQKPj4+PiB0aGUgY2xpZW50Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpcyBpbnRlcmVzdGVkIGlu KSBhcyB0aGUgdmFsdWUgb2YgdGhlCj4+Pj4gaW50ZXJydXB0cwo+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJvcGVydHkgaW4gdGhlaXIgbm9k ZQo+Pj4+ICsKPj4+PiArT3B0aW9uYWwgUHJvcGVydGllczoKPj4+PiArLS0tLS0tLS0tLS0tLS0t LS0tLS0KPj4+PiArVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGFyZSBfcmVxdWlyZWRfIG9ubHkg Zm9yIHNvbWUgU29Dcy4gSWYgbm9uZQo+Pj4+IG9mIHRoZSBiZWxvdwo+Pj4+ICtwcm9wZXJ0aWVz IGFyZSBkZWZpbmVkLCBpdCBpbXBsaWVzIHRoYXQgYWxsIHRoZSBob3N0IGludGVycnVwdHMgMgo+ Pj4+IHRocm91Z2ggOSBhcmUKPj4+PiArY29ubmVjdGVkIGV4Y2x1c2l2ZWx5IHRvIHRoZSBBUk0g R0lDLgo+Pj4+ICsKPj4+PiArLSB0aSxpcnFzLXJlc2VydmVkwqDCoMKgwqAgOiBhbiBhcnJheSBv ZiA4LWJpdCBlbGVtZW50cyBvZiBob3N0Cj4+Pj4gaW50ZXJydXB0cyBiZXR3ZWVuCj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAwIGFuZCA3IChj b3JyZXNwb25kaW5nIHRvIFBSVVNTIElOVEMKPj4+PiBvdXRwdXQgaW50ZXJydXB0cwo+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMiB0aHJvdWdo IDkpIHRoYXQgYXJlIG5vdCBjb25uZWN0ZWQgdG8gdGhlCj4+Pj4gQVJNIEdJQy4KPj4+Cj4+PiBU aGUgcmVhc29uIGZvciAwLTcgbWFwcGluZyB0byAyLTkgaXMgbm90IGluc3RhbnRseSBjbGVhciB0 byBzb21lb25lCj4+PiByZWFkaW5nIHRoaXMuIElmIHlvdSByZXNwaW4gdGhpcyBjb3VsZCB5b3Ug bm90ZSB0aGF0IHJlYXNvbiBpcwo+Pj4gaW50ZXJydXB0cyAwIGFuZCAxIGFyZSBhbHdheXMgcm91 dGVkIGJhY2sgaW50byB0aGUgUFJVU1MuCj4+Cj4+IFllYWgsIHRoaXMgaXMgYWx3YXlzIGdvaW5n IHRvIGJlIHNvbWV3aGF0IGNvbmZ1c2luZyBzaW5jZSB0aGUgZHJpdmVyIGhhcwo+PiB0byBkZWFs IHdpdGggYWxsIGhvc3RzIGZyb20gY2hhbm5lbC1tYXBwaW5nIHBlcnNwZWN0aXZlLCBidXQgb25s eSB0aGUgOAo+PiBpbnRlcnJ1cHRzIGF0IG1vc3QgdGhhdCByZWFjaCBNUFUgZm9yIGhhbmRsaW5n IGludGVycnVwdHMuIFRSTSBoYXMKPj4KPj4gQW55d2F5LCBJIGhhdmUgYWxyZWFkeSBtZW50aW9u ZWQgdGhlIGZpcnN0IDIgaW50ZXJydXB0IHJvdXRpbmcgaW4gdGhlCj4+IGZpcnN0IHBhcmFncmFw aCBhYm92ZS4KPj4KPj4gVGhpbmtpbmcgbW9yZQo+Pj4gb24gdGhhdCwgdGhlIHNhbWUgaXMgdHJ1 ZSBmb3IgaW50ZXJydXB0IDcgKCJob3N0NSIpIG9uIEFNNDM3eC82NkFLMkcgeWV0Cj4+PiB3ZSBk b24ndCBza2lwIHRoYXQgaW4gdGhlIG5hbWluZy4uIG5vdyB0aGF0IHdlIGhhdmUgdGhlIHJlc2Vy dmVkIElSUQo+Pj4gbWVjaGFuaXNtIGFib3ZlLCB3aHkgbm90IGxlYXZlIHRoZSBvbmUtdG8tb25l IGludGVycnVwdCB0byBuYW1lIG1hcHBpbmcsCj4+PiBidXQgYWx3YXlzIGhhdmUgYXQgbGVhc3Qg dGhlIGZpcnN0IHR3byBtYXJrZWQgYXMgcmVzZXJ2ZWQgZm9yIGFsbCB0aGUKPj4+IGN1cnJlbnQg ZGV2aWNlczoKPj4+Cj4+PiB0aSxpcnFzLXJlc2VydmVkID0gL2JpdHMvIDggPDAgMT47Cj4+Pgo+ Pj4gVGhlbiBhbnkgImhvc3R4IiBsaXN0ZWQgYXMgcmVzZXJ2ZWQgbmVlZCBub3QgYmUgcHJlc2Vu dCBpbiB0aGUgaG9zdAo+Pj4gaW50ZXJydXB0cyBwcm9wZXJ0eSBhcnJheS4gVG8gbWUgdGhhdCB3 b3VsZCBzb2x2ZSB0aGUgIm1hbmFnaW5nCj4+PiBpbnRlcnJ1cHRzIG5vdCB0YXJnZXRpbmcgdGhl IExpbnV4IHJ1bm5pbmcgY29yZSIgcHJvYmxlbSBhbmQga2VlcCB0aGUKPj4+IG5hbWVzIGNvbnNp c3RlbnQsIGUuZy46Cj4+Cj4+IEkgaGFkIGFjdHVhbGx5IHVzZWQgdGhlIGludGVycnVwdC1uYW1l cyBhbHdheXMgc3RhcnRpbmcgZnJvbSAiaG9zdDIiCj4+IHRocm91Z2ggImhvc3Q5IiAobmFtZXMg ZnJvbSBQUlUgcGVyc3BlY3RpdmUpIHByZXZpb3VzbHksIGFuZCBJIGhhdmUKPj4gY2hhbmdlZCB0 aGlzIHRvIHN0YXJ0IGluZGV4aW5nIGZyb20gMCBpbiB0aGlzIHNlcmllcyB0byBhZGRyZXNzIGFu Cj4+IGludGVybmFsIHJldmlldyBjb21tZW50IGZyb20gR3J5Z29yaWkgYW5kIHRvIGFsaWduIHdp dGggVFJNLiBBbGwgdGhlCj4+IFRSTXMgKGV4Y2VwdCBmb3IgQU01NzJ4KSBhY3R1YWxseSB1c2Ug dGhlIG5hbWVzL3NpZ25hbHMgImhvc3RfaW50cjAiLAo+PiAiaG9zdF9pbnRyMSIuLiJob3N0X2lu dHI3IiBldGMgZm9yIHRoZSBpbnRlcnJ1cHRzIGdvaW5nIHRvd2FyZHMgTVBVLgo+PiBNYXliZSBJ IHNob3VsZCBhY3R1YWxseSByZW5hbWUgdGhlIGludGVycnVwdC1uYW1lcyB0byBiZSBob3N0X2lu dHJYCj4+IGluc3RlYWQgb2YgaG9zdFggdG8gYXZvaWQgY29uZnVzaW9uIGFuZCBiZSBleGFjdGx5 IGFsaWduZWQgd2l0aCB0aGUgVFJNCj4+IG5hbWVzLiBJIHdpbGwgZmlsZSBhIGJ1ZyBhZ2FpbnN0 IEFNNTd4eCBUUk0gdG8gYWxpZ24gdGhlIG5hbWVzIHdpdGggYWxsCj4+IG90aGVyIFNvQyBUUk1z Lgo+Pgo+PiBJIGFtIHVzaW5nICJvdXRwdXQgaW50ZXJydXB0IGxpbmVzIiB0byBpbXBseSBuYW1l cyB3LnIudCBQUlUgdnMgImhvc3QKPj4gaW50ZXJydXB0IiB0byBpbXBseSBBUk0gR0lDIG5hbWVz Lgo+Pgo+PiByZWdhcmRzCj4+IFN1bWFuCj4+Cj4gCj4gRldJVywgdGhlIEFNMTgwOCBUUk0gb25s eSB1c2VzIFBSVV9FVlRPVVQwIHRvIFBSVV9FVlRPVVQ3IGFuZCBkb2VzIG5vdAo+IG1lbnRpb24g Imhvc3QiIGluIHJlbGF0aW9uIHRvIHRoZXNlIGludGVycnVwdHMuIFRoZSBBTTN4eHggYW5kIEFN NHh4eAo+IGFsc28gdXNlIHNpbWlsYXIgbmFtZXMgKFBSVV9JQ1NTX0VWVE9VVDAsIFBSVV9JQ1NT MV9FVlRPVVQwKSBhbHRob3VnaAo+IHRoZXkgZG8gbWVudGlvbiB0aGF0IHRoZSBzb3VyY2UgaXMg InByMV9ob3N0WzBdIG91dHB1dC9ldmVudHMgZXhwb3J0ZWQKPiBmcm9tIFBSVV9JQ1NTMSIuIChB bHNvLCB0aGUgb2xkZXIgcHJvY2Vzc29ycyBoYXZlIEFJTlRDIGluc3RlYWQgb2YgR0lDKS4KCklu ZGVlZCwgRVZUT1VUIHdhcyBvbmx5IHVzZWQgaW4gdGhlIEludGVycnVwdHMgY2hhcHRlciBvbiBB TTE4MDgsIEFNMzM1eAphbmQgQU00Mzd4LiBUaGVzZSBUUk1zIGFyZSBvbmx5IGdldHRpbmcgdmVy eSBpbmZyZXF1ZW50IHVwZGF0ZXMsIHNvIEkKZG91YnQgd2Ugd2lsbCBoYXZlIHRoZXNlIG5hbWVz IHN5bmNocm9uaXplZCB0byB0aGUgb3RoZXIgU29Dcy4KClRoZSBkZXNjcmlwdGlvbnMgaW4gUFJV U1MgSU5UQyBzZWN0aW9ucyB0aGVtc2VsdmVzIGFsd2F5cyB1c2UgdGhlIHRlcm0KaG9zdCBpbnRl cnJ1cHRzIGZvciBhbGwgaG9zdCBldmVudHMsIGJ1dCB0aGUgb3V0cHV0IHNpZ25hbHMgZ2V0CnJl LWluZGV4ZWQgdG8gMCwgd2hpY2ggdGVuZHMgdG8gYmUgY29uZnVzaW5nLgoKPiAKPiBNYXliZSB0 byBoZWxwIGNsYXJpZnkgaGVyZSB3ZSBjb3VsZCBtZW50aW9uICJldmVudCIgaW4gdGhlIGRvY3M6 Cj4gCj4gCj4gKy0gaW50ZXJydXB0LW5hbWVzwqDCoMKgwqDCoCA6IHNob3VsZCB1c2Ugb25lIG9m IHRoZSBmb2xsb3dpbmcgbmFtZXMgZm9yIGVhY2gKPiB2YWxpZAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaG9zdCBldmVudCBpbnRlcnJ1cHQgY29u bmVjdGVkIHRvIEFSTSBpbnRlcnJ1cHQKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRyb2xsZXIsdGhlIG5hbWUgc2hvdWxkIG1hdGNoIHRoZQo+ IGNvcnJlc3BvbmRpbmcKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGhvc3QgZXZlbnQgaW50ZXJydXB0IG51bWJlciwKClllYWgsIEkgbGlrZSB5b3Vy IHJld29yZGluZy4gV2lsbCB1cGRhdGUgZm9yIHRoZSBuZXh0IHZlcnNpb24uCgo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiaG9zdDAi LCAiaG9zdDEiLCAiaG9zdDIiLCAiaG9zdDMiLCAiaG9zdDQiLAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiaG9zdDUiLCAiaG9zdDYi IG9yICJob3N0NyIKCkkgd2lsbCBiZSB1cGRhdGluZyB0aGVzZSBuYW1lcyBhcyB3ZWxsIHRvIGFk ZCBlaXRoZXIgYSBpbnQgb3IgaW50ciBzdWZmaXguCgo+IAo+IAo+IAo+IC4uLgo+IAo+Pj4+ICsK Pj4+PiArRXhhbXBsZToKPj4+PiArLS0tLS0tLS0KPj4+PiArCj4+Pj4gKzEuwqDCoMKgIC8qIEFN MzN4eCBQUlUtSUNTUyAqLwo+Pj4+ICvCoMKgwqAgcHJ1c3M6IHBydXNzQDAgewo+IAo+IEkgZG9u J3Qgc3VwcG9zZSB0aGVyZSBpcyBhIGdlbmVyaWMgbmFtZSB0aGF0IGNvdWxkIGJlIHVzZWQgaGVy ZQo+IGluc3RlYWQgb2YgcHJ1c3M/IEl0IHNlZW1zIGxpa2UgdGhlcmUgc2hvdWxkIGJlIG9uZSBm b3IgcmVtb3RlCj4gcHJvY2Vzc29ycyB0aGF0IGFyZW4ndCBEU1BzIG9yIG90aGVyIHNwZWNpYWxp emVkIHByb2Nlc3NvcnMuCj4gCgpZZWFoLCB0aGVyZSBpcyBub25lLiBJdCBpcyB0aGUgb3ZlcmFs bCBQUlUgc3Vic3lzdGVtLCB0aGUgaW5kaXZpZHVhbApjb3JlcyBhcmUgY2FsbGVkIFBSVS4gVGhl IHN1YnN5c3RlbXMgYXJlIHVzdWFsbHkgcmVmZXJyZWQgdG8gYXMgUFJVU1MsClBSVS1JQ1NTIGFu ZCBJQ1NTRyAob24gdGhlIG5ld2VyIEszIFNvQ3MpLCBzbyBJIHNpbXBseSBjaG9zZSB0aGUgc2hv cnRlcgpwcnVzcy4KCnJlZ2FyZHMKU3VtYW4KCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgt YXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3Jn L21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=