From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5978EC433EF for ; Tue, 4 Jan 2022 06:02:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231655AbiADGCv (ORCPT ); Tue, 4 Jan 2022 01:02:51 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50988 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230181AbiADGCu (ORCPT ); Tue, 4 Jan 2022 01:02:50 -0500 Received: from mail-qt1-x830.google.com (mail-qt1-x830.google.com [IPv6:2607:f8b0:4864:20::830]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 73332C061761 for ; Mon, 3 Jan 2022 22:02:50 -0800 (PST) Received: by mail-qt1-x830.google.com with SMTP id z9so33125407qtj.9 for ; Mon, 03 Jan 2022 22:02:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=R9xOcdJ9jsoPz2tvG+BeAI+ARFs+OK9o9uEdkNZeypM=; b=Etky2OKKurzIIcHnGt0A2/qFXQMp3axtzkSWRepiyszuya4AQMi1dVZZ1SdDC1Y7eX 4K0lrZ/GNN48Z/zlYwwVt3BzxP0dyJWEoALltmp2YwZMik2/MNmL1l5SkY4IGRl729e7 2QKnr5fHd/rv4GWs65i572PFXx5CmIhhWnqKJXalxQ5WUYXHG7V4cMx52i5XWwYo9X0A Rdj121fYMG23EwWxNekW5UJFc26WhriTzidPUzJ19PakIsAMW4apnhB1ktlaviYkySst Fv32nl/DWlLtSeNx7jUu8hmRT9XvFfS7MG3+b0bCx13KHBMafixK9RQwJHTaRQGbTOWr AJ/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=R9xOcdJ9jsoPz2tvG+BeAI+ARFs+OK9o9uEdkNZeypM=; b=2i96No/s7mZEd7nu2LbbJyM6lS8pEFwBMhyB/D7YV4/OqJ3nz3AD4+ksglUZmYUB2A 709HvcdG1DNehEjenaHfDhQxJIcdDyv9475czpK4Dcs4otH+dCWnEP8oGAgwpEWJySVh q3vK027aj+nOolvt9ouB0qQmILl6qEejlJdM99IFijbX4xiWyfKgCySTeyx/pPN5kaBG 4jnQsO91qGM+TqV6aj5795DoOYB8DfsT+kRKmeTP+VF1tis0kdkg6uam5EAdaivFi+Tv /zVrcTln+hHI0RHrSo5CxiXWrOqxSPFotHhnSK2/Gb/G2CFsQRl8KN0iIHQdLx/o5Uzc MIOg== X-Gm-Message-State: AOAM530LEg5ufhJYrLD6xKFbnJ2AzOaz3A19CysD6CF/Oxqg6Ap6mL9c wJI8bj220Sb2ERjvIURa3q/KhMWbHeYfPtnJWZfD9g== X-Google-Smtp-Source: ABdhPJy8+J7d1E6sU57uVMYFz7sfmc5oTAihswSyJAiTVCsoOmHVLQMrndd5Aig7YBNNJb9CA8Bv0AJ7c24kZIkfpSs= X-Received: by 2002:ac8:5842:: with SMTP id h2mr42804080qth.244.1641276169581; Mon, 03 Jan 2022 22:02:49 -0800 (PST) MIME-Version: 1.0 References: <8612e69a10235e67fac8a55864e77a4ab8f771ac.1636362169.git.greentime.hu@sifive.com> In-Reply-To: From: Greentime Hu Date: Tue, 4 Jan 2022 14:02:39 +0800 Message-ID: Subject: Re: [PATCH v9 07/17] riscv: Reset vector register To: Palmer Dabbelt Cc: Paul Walmsley , linux-riscv , Linux Kernel Mailing List , Albert Ou Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Palmer Dabbelt =E6=96=BC 2021=E5=B9=B412=E6=9C=8815=E6= =97=A5 =E9=80=B1=E4=B8=89 =E4=B8=8A=E5=8D=8812:29=E5=AF=AB=E9=81=93=EF=BC= =9A > > On Tue, 09 Nov 2021 01:48:19 PST (-0800), greentime.hu@sifive.com wrote: > > From: Guo Ren > > > > Reset vector registers at boot-time and disable vector instructions > > execution for kernel mode. > > > > Signed-off-by: Guo Ren > > Co-developed-by: Vincent Chen > > Signed-off-by: Vincent Chen > > Co-developed-by: Han-Kuan Chen > > Signed-off-by: Han-Kuan Chen > > Co-developed-by: Greentime Hu > > Signed-off-by: Greentime Hu > > --- > > arch/riscv/kernel/entry.S | 6 +++--- > > arch/riscv/kernel/head.S | 22 ++++++++++++++++++++-- > > 2 files changed, 23 insertions(+), 5 deletions(-) > > > > diff --git a/arch/riscv/kernel/entry.S b/arch/riscv/kernel/entry.S > > index 98f502654edd..ad0fa80ada81 100644 > > --- a/arch/riscv/kernel/entry.S > > +++ b/arch/riscv/kernel/entry.S > > @@ -77,10 +77,10 @@ _save_context: > > * Disable user-mode memory access as it should only be set in th= e > > * actual user copy routines. > > * > > - * Disable the FPU to detect illegal usage of floating point in k= ernel > > - * space. > > + * Disable the FPU/Vector to detect illegal usage of floating poi= nt > > + * or vector in kernel space. > > */ > > - li t0, SR_SUM | SR_FS > > + li t0, SR_SUM | SR_FS | SR_VS > > > > REG_L s0, TASK_TI_USER_SP(tp) > > csrrc s1, CSR_STATUS, t0 > > diff --git a/arch/riscv/kernel/head.S b/arch/riscv/kernel/head.S > > index 52c5ff9804c5..551afe1de85e 100644 > > --- a/arch/riscv/kernel/head.S > > +++ b/arch/riscv/kernel/head.S > > @@ -242,10 +242,10 @@ pmp_done: > > .option pop > > > > /* > > - * Disable FPU to detect illegal usage of > > + * Disable FPU & VECTOR to detect illegal usage of > > * floating point in kernel space > > Presumably that should be "floating point or vector", like the other > one? Thank you, Palmer. I'll update this and I also found another issue in secondary_start_sbi. We should also disable vector there. > > */ > > - li t0, SR_FS > > + li t0, SR_FS | SR_VS > > csrc CSR_STATUS, t0 > > > > #ifdef CONFIG_SMP > > @@ -433,6 +433,24 @@ ENTRY(reset_regs) > > csrw fcsr, 0 > > /* note that the caller must clear SR_FS */ > > #endif /* CONFIG_FPU */ > > + > > +#ifdef CONFIG_VECTOR > > + csrr t0, CSR_MISA > > + li t1, (COMPAT_HWCAP_ISA_V >> 16) > > + slli t1, t1, 16 > > Why? Shouldn't the "li" pseudo handle generating that constant fine? > It generates the expected lui for me. That's right. I'll update the code here to #ifdef CONFIG_VECTOR csrr t0, CSR_MISA li t1, COMPAT_HWCAP_ISA_V and t0, t0, t1 beqz t0, .Lreset_regs_done > > + and t0, t0, t1 > > + beqz t0, .Lreset_regs_done > > + > > + li t1, SR_VS > > + csrs CSR_STATUS, t1 > > + vsetvli t1, x0, e8, m8 > > + vmv.v.i v0, 0 > > + vmv.v.i v8, 0 > > + vmv.v.i v16, 0 > > + vmv.v.i v24, 0 > > I don't see anything resetting vcsr here, which is explicitly required > by ISA manual. > > Otherwise this looks OK to me: I wasn't actually sure this was guaranteed > to hit every bit in the vector register file, but IIUC it does -- VLMAX > has a defined value, VLEN is a constant, and this form of vsetvli is > defined to set vl to VLMAX. Probably worth a comment, though. > /* * Clear vector registers and reset vcsr * VLMAX has a defined value, VLEN is a constant, * and this form of vsetvli is defined to set vl to VLMAX. */ li t1, SR_VS csrs CSR_STATUS, t1 csrs CSR_VCSR, x0 vsetvli t1, x0, e8, m8 vmv.v.i v0, 0 vmv.v.i v8, 0 vmv.v.i v16, 0 vmv.v.i v24, 0 > > + /* note that the caller must clear SR_VS */ > > +#endif /* CONFIG_VECTOR */ > > + > > .Lreset_regs_done: > > ret > > END(reset_regs) > > With those minor bits fixed, > > Reviewed-by: Palmer Dabbelt 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 8A4FBC433EF for ; Tue, 4 Jan 2022 06:03:13 +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=9nTDl27W7KAmHKbOwPjtIK/eGqDgmtUH7FtquwPalaY=; b=ccjP9fe7VvKc98 zsH/SjIA0++FL1y5kw7VwkZ5kgtTtvuCS1BT/J5D+teLm4Xfd9lr1vjIgFrQOUnYv/tlmaUVByc3J R9KSqSVeeDsemwWhiMrGD0tjuTh9F4YrKr7ontc2MqWLY3o/kqSjIztKQRj3DN4gmqY6T4gtIYJ54 cCvGyGhcfHjeXh5fqHhwM9L9y8cb0txGB5vA437ffojj+sddPvkbTJNL4dXNHw8fuxd+ebo/74F1h JN9KaiFRQM2eC/PSWv48g0hS4H2hA+c+kFLf9gKLSRWR8ftjok+zdZJr7h2ATq74X1ZXA4wZ8I07m UQ+Aw1KibGm6yb6c5clA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1n4cuM-00APZL-7W; Tue, 04 Jan 2022 06:02:54 +0000 Received: from mail-qt1-x831.google.com ([2607:f8b0:4864:20::831]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1n4cuJ-00APYg-Ha for linux-riscv@lists.infradead.org; Tue, 04 Jan 2022 06:02:53 +0000 Received: by mail-qt1-x831.google.com with SMTP id l17so33088315qtk.7 for ; Mon, 03 Jan 2022 22:02:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=R9xOcdJ9jsoPz2tvG+BeAI+ARFs+OK9o9uEdkNZeypM=; b=Etky2OKKurzIIcHnGt0A2/qFXQMp3axtzkSWRepiyszuya4AQMi1dVZZ1SdDC1Y7eX 4K0lrZ/GNN48Z/zlYwwVt3BzxP0dyJWEoALltmp2YwZMik2/MNmL1l5SkY4IGRl729e7 2QKnr5fHd/rv4GWs65i572PFXx5CmIhhWnqKJXalxQ5WUYXHG7V4cMx52i5XWwYo9X0A Rdj121fYMG23EwWxNekW5UJFc26WhriTzidPUzJ19PakIsAMW4apnhB1ktlaviYkySst Fv32nl/DWlLtSeNx7jUu8hmRT9XvFfS7MG3+b0bCx13KHBMafixK9RQwJHTaRQGbTOWr AJ/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=R9xOcdJ9jsoPz2tvG+BeAI+ARFs+OK9o9uEdkNZeypM=; b=at6MjkgDwZvCLOBlAwuvdqFoOBNESv2A1WrSb9jaqUKMzP7PeNY0Cex1T/r98yH8pP Vx4+4rS7hUGUk9nWn1WJm35aZH3fX8xZWXl3JdlrrS2ZSTYidXPMAcDwHSCxPBwNOSlv 15oHATUhWd5h9+3cdl1GtvvmHQ6gKL6qvvMpdQOJykdS4A6cUdyi8ZavzZ67iDTVkqLA /xuXmkHd1F4jUXJGbR4aAILWKPBk2OCa0vQOOmeulvXrIc02hd+LPjVZRueLsI95vsvg F16HlfdztLK1mv4a474v6WeLGyORNy1WnMf56pBiMN946IZdAEafjUoGIucwhoILIIMX 2qhA== X-Gm-Message-State: AOAM533NmfaQOUE/FwBV890nuWnQjc1fpgzgN4hzj/Ms3nd6Vk6G8q+f fHF9swDic18N2U0XhocAr7fv85ilsT3j81l35tdVMQ== X-Google-Smtp-Source: ABdhPJy8+J7d1E6sU57uVMYFz7sfmc5oTAihswSyJAiTVCsoOmHVLQMrndd5Aig7YBNNJb9CA8Bv0AJ7c24kZIkfpSs= X-Received: by 2002:ac8:5842:: with SMTP id h2mr42804080qth.244.1641276169581; Mon, 03 Jan 2022 22:02:49 -0800 (PST) MIME-Version: 1.0 References: <8612e69a10235e67fac8a55864e77a4ab8f771ac.1636362169.git.greentime.hu@sifive.com> In-Reply-To: From: Greentime Hu Date: Tue, 4 Jan 2022 14:02:39 +0800 Message-ID: Subject: Re: [PATCH v9 07/17] riscv: Reset vector register To: Palmer Dabbelt Cc: Paul Walmsley , linux-riscv , Linux Kernel Mailing List , Albert Ou X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220103_220251_637435_D33416BD X-CRM114-Status: GOOD ( 24.57 ) 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 UGFsbWVyIERhYmJlbHQgPHBhbG1lckBkYWJiZWx0LmNvbT4g5pa8IDIwMjHlubQxMuaciDE15pel IOmAseS4iSDkuIrljYgxMjoyOeWvq+mBk++8mgo+Cj4gT24gVHVlLCAwOSBOb3YgMjAyMSAwMTo0 ODoxOSBQU1QgKC0wODAwKSwgZ3JlZW50aW1lLmh1QHNpZml2ZS5jb20gd3JvdGU6Cj4gPiBGcm9t OiBHdW8gUmVuIDxndW9yZW5AbGludXguYWxpYmFiYS5jb20+Cj4gPgo+ID4gUmVzZXQgdmVjdG9y IHJlZ2lzdGVycyBhdCBib290LXRpbWUgYW5kIGRpc2FibGUgdmVjdG9yIGluc3RydWN0aW9ucwo+ ID4gZXhlY3V0aW9uIGZvciBrZXJuZWwgbW9kZS4KPiA+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBHdW8g UmVuIDxndW9yZW5AbGludXguYWxpYmFiYS5jb20+Cj4gPiBDby1kZXZlbG9wZWQtYnk6IFZpbmNl bnQgQ2hlbiA8dmluY2VudC5jaGVuQHNpZml2ZS5jb20+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBWaW5j ZW50IENoZW4gPHZpbmNlbnQuY2hlbkBzaWZpdmUuY29tPgo+ID4gQ28tZGV2ZWxvcGVkLWJ5OiBI YW4tS3VhbiBDaGVuIDxoYW5rdWFuLmNoZW5Ac2lmaXZlLmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6 IEhhbi1LdWFuIENoZW4gPGhhbmt1YW4uY2hlbkBzaWZpdmUuY29tPgo+ID4gQ28tZGV2ZWxvcGVk LWJ5OiBHcmVlbnRpbWUgSHUgPGdyZWVudGltZS5odUBzaWZpdmUuY29tPgo+ID4gU2lnbmVkLW9m Zi1ieTogR3JlZW50aW1lIEh1IDxncmVlbnRpbWUuaHVAc2lmaXZlLmNvbT4KPiA+IC0tLQo+ID4g IGFyY2gvcmlzY3Yva2VybmVsL2VudHJ5LlMgfCAgNiArKystLS0KPiA+ICBhcmNoL3Jpc2N2L2tl cm5lbC9oZWFkLlMgIHwgMjIgKysrKysrKysrKysrKysrKysrKystLQo+ID4gIDIgZmlsZXMgY2hh bmdlZCwgMjMgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKPiA+Cj4gPiBkaWZmIC0tZ2l0 IGEvYXJjaC9yaXNjdi9rZXJuZWwvZW50cnkuUyBiL2FyY2gvcmlzY3Yva2VybmVsL2VudHJ5LlMK PiA+IGluZGV4IDk4ZjUwMjY1NGVkZC4uYWQwZmE4MGFkYTgxIDEwMDY0NAo+ID4gLS0tIGEvYXJj aC9yaXNjdi9rZXJuZWwvZW50cnkuUwo+ID4gKysrIGIvYXJjaC9yaXNjdi9rZXJuZWwvZW50cnku Uwo+ID4gQEAgLTc3LDEwICs3NywxMCBAQCBfc2F2ZV9jb250ZXh0Ogo+ID4gICAgICAgICogRGlz YWJsZSB1c2VyLW1vZGUgbWVtb3J5IGFjY2VzcyBhcyBpdCBzaG91bGQgb25seSBiZSBzZXQgaW4g dGhlCj4gPiAgICAgICAgKiBhY3R1YWwgdXNlciBjb3B5IHJvdXRpbmVzLgo+ID4gICAgICAgICoK PiA+IC0gICAgICAqIERpc2FibGUgdGhlIEZQVSB0byBkZXRlY3QgaWxsZWdhbCB1c2FnZSBvZiBm bG9hdGluZyBwb2ludCBpbiBrZXJuZWwKPiA+IC0gICAgICAqIHNwYWNlLgo+ID4gKyAgICAgICog RGlzYWJsZSB0aGUgRlBVL1ZlY3RvciB0byBkZXRlY3QgaWxsZWdhbCB1c2FnZSBvZiBmbG9hdGlu ZyBwb2ludAo+ID4gKyAgICAgICogb3IgdmVjdG9yIGluIGtlcm5lbCBzcGFjZS4KPiA+ICAgICAg ICAqLwo+ID4gLSAgICAgbGkgdDAsIFNSX1NVTSB8IFNSX0ZTCj4gPiArICAgICBsaSB0MCwgU1Jf U1VNIHwgU1JfRlMgfCBTUl9WUwo+ID4KPiA+ICAgICAgIFJFR19MIHMwLCBUQVNLX1RJX1VTRVJf U1AodHApCj4gPiAgICAgICBjc3JyYyBzMSwgQ1NSX1NUQVRVUywgdDAKPiA+IGRpZmYgLS1naXQg YS9hcmNoL3Jpc2N2L2tlcm5lbC9oZWFkLlMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9oZWFkLlMKPiA+ IGluZGV4IDUyYzVmZjk4MDRjNS4uNTUxYWZlMWRlODVlIDEwMDY0NAo+ID4gLS0tIGEvYXJjaC9y aXNjdi9rZXJuZWwvaGVhZC5TCj4gPiArKysgYi9hcmNoL3Jpc2N2L2tlcm5lbC9oZWFkLlMKPiA+ IEBAIC0yNDIsMTAgKzI0MiwxMCBAQCBwbXBfZG9uZToKPiA+ICAub3B0aW9uIHBvcAo+ID4KPiA+ ICAgICAgIC8qCj4gPiAtICAgICAgKiBEaXNhYmxlIEZQVSB0byBkZXRlY3QgaWxsZWdhbCB1c2Fn ZSBvZgo+ID4gKyAgICAgICogRGlzYWJsZSBGUFUgJiBWRUNUT1IgdG8gZGV0ZWN0IGlsbGVnYWwg dXNhZ2Ugb2YKPiA+ICAgICAgICAqIGZsb2F0aW5nIHBvaW50IGluIGtlcm5lbCBzcGFjZQo+Cj4g UHJlc3VtYWJseSB0aGF0IHNob3VsZCBiZSAiZmxvYXRpbmcgcG9pbnQgb3IgdmVjdG9yIiwgbGlr ZSB0aGUgb3RoZXIKPiBvbmU/CgpUaGFuayB5b3UsIFBhbG1lci4gSSdsbCB1cGRhdGUgdGhpcyBh bmQgSSBhbHNvIGZvdW5kIGFub3RoZXIgaXNzdWUgaW4Kc2Vjb25kYXJ5X3N0YXJ0X3NiaS4KV2Ug c2hvdWxkIGFsc28gZGlzYWJsZSB2ZWN0b3IgdGhlcmUuCgo+ID4gICAgICAgICovCj4gPiAtICAg ICBsaSB0MCwgU1JfRlMKPiA+ICsgICAgIGxpIHQwLCBTUl9GUyB8IFNSX1ZTCj4gPiAgICAgICBj c3JjIENTUl9TVEFUVVMsIHQwCj4gPgo+ID4gICNpZmRlZiBDT05GSUdfU01QCj4gPiBAQCAtNDMz LDYgKzQzMywyNCBAQCBFTlRSWShyZXNldF9yZWdzKQo+ID4gICAgICAgY3NydyAgICBmY3NyLCAw Cj4gPiAgICAgICAvKiBub3RlIHRoYXQgdGhlIGNhbGxlciBtdXN0IGNsZWFyIFNSX0ZTICovCj4g PiAgI2VuZGlmIC8qIENPTkZJR19GUFUgKi8KPiA+ICsKPiA+ICsjaWZkZWYgQ09ORklHX1ZFQ1RP Ugo+ID4gKyAgICAgY3NyciAgICB0MCwgQ1NSX01JU0EKPiA+ICsgICAgIGxpICAgICAgdDEsIChD T01QQVRfSFdDQVBfSVNBX1YgPj4gMTYpCj4gPiArICAgICBzbGxpICAgIHQxLCB0MSwgMTYKPgo+ IFdoeT8gIFNob3VsZG4ndCB0aGUgImxpIiBwc2V1ZG8gaGFuZGxlIGdlbmVyYXRpbmcgdGhhdCBj b25zdGFudCBmaW5lPwo+IEl0IGdlbmVyYXRlcyB0aGUgZXhwZWN0ZWQgbHVpIGZvciBtZS4KClRo YXQncyByaWdodC4KSSdsbCB1cGRhdGUgdGhlIGNvZGUgaGVyZSB0bwogI2lmZGVmIENPTkZJR19W RUNUT1IKICAgICAgICBjc3JyICAgIHQwLCBDU1JfTUlTQQogICAgICAgIGxpICAgICAgdDEsIENP TVBBVF9IV0NBUF9JU0FfVgogICAgICAgIGFuZCAgICAgdDAsIHQwLCB0MQogICAgICAgIGJlcXog ICAgdDAsIC5McmVzZXRfcmVnc19kb25lCgoKPiA+ICsgICAgIGFuZCAgICAgdDAsIHQwLCB0MQo+ ID4gKyAgICAgYmVxeiAgICB0MCwgLkxyZXNldF9yZWdzX2RvbmUKPiA+ICsKPiA+ICsgICAgIGxp ICAgICAgdDEsIFNSX1ZTCj4gPiArICAgICBjc3JzICAgIENTUl9TVEFUVVMsIHQxCj4gPiArICAg ICB2c2V0dmxpIHQxLCB4MCwgZTgsIG04Cj4gPiArICAgICB2bXYudi5pIHYwLCAwCj4gPiArICAg ICB2bXYudi5pIHY4LCAwCj4gPiArICAgICB2bXYudi5pIHYxNiwgMAo+ID4gKyAgICAgdm12LnYu aSB2MjQsIDAKPgo+IEkgZG9uJ3Qgc2VlIGFueXRoaW5nIHJlc2V0dGluZyB2Y3NyIGhlcmUsIHdo aWNoIGlzIGV4cGxpY2l0bHkgcmVxdWlyZWQKPiBieSBJU0EgbWFudWFsLgo+Cj4gT3RoZXJ3aXNl IHRoaXMgbG9va3MgT0sgdG8gbWU6IEkgd2Fzbid0IGFjdHVhbGx5IHN1cmUgdGhpcyB3YXMgZ3Vh cmFudGVlZAo+IHRvIGhpdCBldmVyeSBiaXQgaW4gdGhlIHZlY3RvciByZWdpc3RlciBmaWxlLCBi dXQgSUlVQyBpdCBkb2VzIC0tIFZMTUFYCj4gaGFzIGEgZGVmaW5lZCB2YWx1ZSwgVkxFTiBpcyBh IGNvbnN0YW50LCBhbmQgdGhpcyBmb3JtIG9mIHZzZXR2bGkgaXMKPiBkZWZpbmVkIHRvIHNldCB2 bCB0byBWTE1BWC4gIFByb2JhYmx5IHdvcnRoIGEgY29tbWVudCwgdGhvdWdoLgo+CgovKgogKiBD bGVhciB2ZWN0b3IgcmVnaXN0ZXJzIGFuZCByZXNldCB2Y3NyCiAqIFZMTUFYIGhhcyBhIGRlZmlu ZWQgdmFsdWUsIFZMRU4gaXMgYSBjb25zdGFudCwKICogYW5kIHRoaXMgZm9ybSBvZiB2c2V0dmxp IGlzIGRlZmluZWQgdG8gc2V0IHZsIHRvIFZMTUFYLgogKi8KbGkgICAgICB0MSwgU1JfVlMKY3Ny cyAgICBDU1JfU1RBVFVTLCB0MQpjc3JzICAgIENTUl9WQ1NSLCB4MAp2c2V0dmxpIHQxLCB4MCwg ZTgsIG04CnZtdi52LmkgdjAsIDAKdm12LnYuaSB2OCwgMAp2bXYudi5pIHYxNiwgMAp2bXYudi5p IHYyNCwgMAoKCj4gPiArICAgICAvKiBub3RlIHRoYXQgdGhlIGNhbGxlciBtdXN0IGNsZWFyIFNS X1ZTICovCj4gPiArI2VuZGlmIC8qIENPTkZJR19WRUNUT1IgKi8KPiA+ICsKPiA+ICAuTHJlc2V0 X3JlZ3NfZG9uZToKPiA+ICAgICAgIHJldAo+ID4gIEVORChyZXNldF9yZWdzKQo+Cj4gV2l0aCB0 aG9zZSBtaW5vciBiaXRzIGZpeGVkLAo+Cj4gUmV2aWV3ZWQtYnk6IFBhbG1lciBEYWJiZWx0IDxw YWxtZXJAcml2b3NpbmMuY29tPgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KbGludXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3RzLmlu ZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1yaXNjdgo=