From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com [209.85.210.173]) (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 883BB14A82 for ; Thu, 23 May 2024 21:17:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.173 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1716499081; cv=none; b=rnY+12ZE0J0dPjSecBDegxfVrpfrY/XSPyyCzQZ3AZhX5JEuCu5Xjtg2a4o8IF05ytVO6pCWYT/McwUjdj9PrZ2pF8ghFXpWuihOLYPfuox9qjGvm+RgxDJwr9OC6Zya5Uspf9Yp65L4CvOsKVHzdv65wPza6U9ko97brmRXd6k= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1716499081; c=relaxed/simple; bh=Gpqhw/s2i2sLzZlRGqp7IZp6eytfKeTmUvdesErItAg=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=rw9gqehJG4QQoqzDMepnd1b6cjZ9f2JxXfh2jaa09T+97vJOyazwsy1pe7DNu0MeF4ps1ju+VgvGjZ0nzMKgQwfa2gwvY6HHN/VuyFPRuaUVLbmmM08C/7+HpMpYQS8Pgby64fRRVU1aBhyVa24Dms6R/7buIQfx2GKzE9xbiVE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=Al+0OEOX; arc=none smtp.client-ip=209.85.210.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="Al+0OEOX" Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-6f8e98760fcso224819b3a.1 for ; Thu, 23 May 2024 14:17:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1716499079; x=1717103879; darn=vger.kernel.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=PwzV5tVaq2B4FjInYNNPwOPVrbWL6OWL1o9jsQ7m6BM=; b=Al+0OEOX6GH8RUjxGzOY0XowEd72FDBl0mXLDt3ygX/y/Xx4Jeju+F2YNS7CZyROiN si/WJ2YGWizRb/pCgeQFECSkp5HJ0LVc//YwImb3u605GKlP/y+81lrLHPcyxeh63HM7 RRW7ObT4a01W0Icq8wsJ/h//oHGXAS4Np5CVcU4ipK1BuAzyaSWRvYUT5FYkWHbWvqdV +CAoipJur4L20cbPM6VxuIFMRalDFwf9ZPEOs2miqUflpMPfAPVq1NofjCC5rbv6LRTN ZnpALKiz9qlWWC9hRaeKquHQBScyZcTeYDA4oF9VFij6j4gp7YcP/Vdg7pwJIUsAo5UK PqEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716499079; x=1717103879; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=PwzV5tVaq2B4FjInYNNPwOPVrbWL6OWL1o9jsQ7m6BM=; b=Ci1aH5aXokfbeKBAzIN4ORFZ5LhCBFVetbb/0pGDZZBgifignj5kBReBcpguX8K3lw 7FvUoWlrQjiSH6DnuqOxxAN/04JvmdkBL0MoSfhlcLoyhGPM3HEL2nqUjMMI4tM5ZsW0 jo2Ao3EPr6vi6cmaGP3b3jO2E+f3Iriruhil3LOkXmdVmWgzT8bMoMaL0mpd7W2Fng6u HXjpI2sT5pAd6MB71HyVB7G+tOm3KHtdaa6Lo7nRxZH2p9mmL6+ipgixU1duLSrp0yEl iPZ2j+slLU4FmaWRlK45fWajUQJ8+WXoBdvaHK/pv3aa8cpxa9M1EPYnT7/CZGHAMB4R f4GQ== X-Forwarded-Encrypted: i=1; AJvYcCUFb0VMCyLpDy9dPTlWITVMdkzCT7LE/1edzzPcczQOfSNnmIfoewg0Job3TvGNc/IKJFy3fbjP62Cjr1MbS0E1yGP23vLHozym X-Gm-Message-State: AOJu0Yym9kKYqCs5Cn1aIrEOtvF+on538OW9goVdeOMKknRcQ6NUoWLJ 90a5GU3j8qwiTDmHCeFJrSzJB4+DStNJLGH3nnqmEhOYs2Wm1czJbs653cugcEI= X-Google-Smtp-Source: AGHT+IGx0rsWYFEjcfR9pAludyPkzfDLkr55TU0Ix9xIuJv5a2gL44nhGVX/9NJpqJnSBX4lthJzqA== X-Received: by 2002:a05:6a20:5526:b0:1b1:c745:ea2c with SMTP id adf61e73a8af0-1b212e32cb1mr729638637.56.1716499078649; Thu, 23 May 2024 14:17:58 -0700 (PDT) Received: from ghost ([50.145.13.30]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-6f8fd6d2811sm55732b3a.217.2024.05.23.14.17.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 May 2024 14:17:57 -0700 (PDT) Date: Thu, 23 May 2024 14:17:54 -0700 From: Charlie Jenkins To: Andrew Jones Cc: Evan Green , Yangyu Chen , linux-riscv@lists.infradead.org, Elliott Hughes , Jonathan Corbet , Paul Walmsley , Palmer Dabbelt , =?iso-8859-1?Q?Cl=E9ment_L=E9ger?= , Conor Dooley , linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org Subject: Re: [PATCH 2/2] docs: riscv: hwprobe: Clarify misaligned keys are values not bitmasks Message-ID: References: <20240522-d110bb16f54eebb725e943c2@orel> Precedence: bulk X-Mailing-List: linux-doc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20240522-d110bb16f54eebb725e943c2@orel> On Wed, May 22, 2024 at 09:26:08AM +0200, Andrew Jones wrote: > On Tue, May 21, 2024 at 11:36:06AM GMT, Evan Green wrote: > > On Sat, May 18, 2024 at 9:00 AM Yangyu Chen wrote: > > > > > > The original documentation says hwprobe keys are bitmasks, but actually, > > > they are values. This patch clarifies this to avoid confusion. > > > > > > Signed-off-by: Yangyu Chen > > > > Hm, we also have this problem in the code, since > > hwprobe_key_is_bitmask() returns true for KEY_CPUPERF_0. This results > > in wrong information being returned for queries using the WHICH_CPU > > flag. If usermode asked for the set of CPUs that was specifically SLOW > > or EMULATED, the returned cpuset would also include cpus that were > > FAST. I believe all other queries are okay. > > > > The one-liner fix is to just not return true for that key in > > hwprobe_key_is_bitmask(). But that's technically user-visible: if some > > software relied on the buggy behavior of FAST cpus being swept up in > > the query for SLOW or EMULATED cpus, this change would expose that. > > The grownups-eat-their-vegetables thing to do would be to define a new > > key that returns this same value, but doesn't return true in > > hwprobe_key_is_bitmask(). What do people think? > > Even though I actually enjoy eating vegetables, I think it's unlikely > that we need to be so cautious for this. I feel like kernel updates > provide a bit of freedom to change results of hardware query syscalls, > even when run on the same hardware. Particularly the EMULATED query, > which I guess could change with a firmware update. And, even the SLOW > query could change if the probing was modified directly or indirectly. > IOW, applications that use the which-cpus syscall shouldn't freak out > if they don't get the same cpuset after a kernel update, which means > we can drop the FAST cpus from the result. Dropping FAST does not really address the problem here. These keys are being treated as a bitmap when they are in fact just values. Because they are currently treated as bitmaps, it is semantically acceptable to "or" two of the keys together and pass them into hwprobe. Dropping FAST from the input of EMULATED | SLOW will make it appear to work, but it is not reasonable to try to support or'ing of values that are not bitmaps. If a key that maps to a value of 5 is ever introduced, then the input of UNSUPPORTED | EMULATED will also return cpus that map to the new key. If hwprobe recieves a value of 3 for CPUPERF_0 and or'ing is supported, that could either be interpreted that the user is asking for cpus that are EMULATED or SLOW or FAST, or just FAST, or just EMULATED or SLOW. The current implementation defines that only FAST will be returned because or'ing values like this is nonsense. Allowing an input where keys are or'd together should not be supported in CPUPERF_0 since it is what is causing this issue. However, the original intent seems to be to allow an or'ing of keys. The verbosity of using CPUPERF_0 will be greatly increased without the ability to or keys together. If an application wants to know if misaligned accesses are supported, it currently needs 3 separate hwprobe calls, one for each EMULATED, SLOW, and FAST. Changing CPUPERF_0 to be a true bitmap would require changing the values of each of the existing keys which is not an acceptable API change. In my previous email I proposed a new key, which could be something like RISCV_HWPROBE_KEY_CPUPERF_1, that is actually a bitmap. That way a query of EMULATED | SLOW | FAST would be possible in a single hwprobe call, which seems to be the original intent of CPUPERF_0. - Charlie > > Thanks, > drew > > > > > -Evan > > > > > --- > > > Documentation/arch/riscv/hwprobe.rst | 31 ++++++++++++++++------------ > > > 1 file changed, 18 insertions(+), 13 deletions(-) > > > > > > diff --git a/Documentation/arch/riscv/hwprobe.rst b/Documentation/arch/riscv/hwprobe.rst > > > index 239be63f5089..4abfa3f9fe44 100644 > > > --- a/Documentation/arch/riscv/hwprobe.rst > > > +++ b/Documentation/arch/riscv/hwprobe.rst > > > @@ -188,25 +188,30 @@ The following keys are defined: > > > manual starting from commit 95cf1f9 ("Add changes requested by Ved > > > during signoff") > > > > > > -* :c:macro:`RISCV_HWPROBE_KEY_CPUPERF_0`: A bitmask that contains performance > > > +* :c:macro:`RISCV_HWPROBE_KEY_CPUPERF_0`: A value that contains performance > > > information about the selected set of processors. > > > > > > - * :c:macro:`RISCV_HWPROBE_MISALIGNED_UNKNOWN`: The performance of misaligned > > > - scalar accesses is unknown. > > > + * :c:macro:`RISCV_HWPROBE_MISALIGNED_MASK`: The bitmask of the misaligned > > > + access performance field in the value of key `RISCV_HWPROBE_KEY_CPUPERF_0`. > > > > > > - * :c:macro:`RISCV_HWPROBE_MISALIGNED_EMULATED`: Misaligned scalar accesses are > > > - emulated via software, either in or below the kernel. These accesses are > > > - always extremely slow. > > > + The following values (not bitmasks) in this field are defined: > > > > > > - * :c:macro:`RISCV_HWPROBE_MISALIGNED_SLOW`: Misaligned scalar accesses are > > > - slower than equivalent byte accesses. Misaligned accesses may be supported > > > - directly in hardware, or trapped and emulated by software. > > > + * :c:macro:`RISCV_HWPROBE_MISALIGNED_UNKNOWN`: The performance of misaligned > > > + scalar accesses is unknown. > > > > > > - * :c:macro:`RISCV_HWPROBE_MISALIGNED_FAST`: Misaligned scalar accesses are > > > - faster than equivalent byte accesses. > > > + * :c:macro:`RISCV_HWPROBE_MISALIGNED_EMULATED`: Misaligned scalar accesses are > > > + emulated via software, either in or below the kernel. These accesses are > > > + always extremely slow. > > > > > > - * :c:macro:`RISCV_HWPROBE_MISALIGNED_UNSUPPORTED`: Misaligned scalar accesses > > > - are not supported at all and will generate a misaligned address fault. > > > + * :c:macro:`RISCV_HWPROBE_MISALIGNED_SLOW`: Misaligned scalar accesses are > > > + slower than equivalent byte accesses. Misaligned accesses may be supported > > > + directly in hardware, or trapped and emulated by software. > > > + > > > + * :c:macro:`RISCV_HWPROBE_MISALIGNED_FAST`: Misaligned scalar accesses are > > > + faster than equivalent byte accesses. > > > + > > > + * :c:macro:`RISCV_HWPROBE_MISALIGNED_UNSUPPORTED`: Misaligned scalar accesses > > > + are not supported at all and will generate a misaligned address fault. > > > > > > * :c:macro:`RISCV_HWPROBE_KEY_ZICBOZ_BLOCK_SIZE`: An unsigned int which > > > represents the size of the Zicboz block in bytes. > > > -- > > > 2.43.0 > > > 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 4D49BC25B75 for ; Thu, 23 May 2024 21:18:12 +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:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc: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=lE2FUVuNGSOrr1DMdCL9fmETo4EW2+dlGo1dD/hve84=; b=QcKeajIyj8BLHB 93owekeSipHmHCgcse62WYFXyOaYKFG7AOUE7glNFcakb9pUHgYPjyN3u8CkJo0R1P8D6gThTf+7/ PEqJC25+NuL6V4jrHbjczJootvK9iq3Tawxt0RkA++9gn1jggCtpVCcwiqOThbiuwtYXaz1AS8mT5 8E5SKUv0Qc2RWejII7fXR/ua3qgZCpZeZrOM8eBEKH3uFsyH4L3EslrB5laRsp7D2ck2JCgS4Evvn gqGc/aPqqMMdtZHfJuyJIV3NhAYX+TwnpwJpsJwwJHH7wH76obSo1YGWXIl1KvTTk8KLH4q00/hws I6+UzB389X1RbbvPr/Fg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sAFp6-00000007KwB-2xgF; Thu, 23 May 2024 21:18:04 +0000 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sAFp3-00000007KvQ-14KQ for linux-riscv@lists.infradead.org; Thu, 23 May 2024 21:18:03 +0000 Received: by mail-pf1-x42c.google.com with SMTP id d2e1a72fcca58-6f8e819cf60so242861b3a.0 for ; Thu, 23 May 2024 14:17:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1716499079; x=1717103879; darn=lists.infradead.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=PwzV5tVaq2B4FjInYNNPwOPVrbWL6OWL1o9jsQ7m6BM=; b=WC6VrygBN8AVKOBPe/b5TMDiOEZYNhSTWR8QWFNq8PuzMjy0GpYg+9vGZSybucHTwf 4Vhp773aBsvFPN3fhDZS50bqeEHzkgSkIgO+rP4bqotxu9MpaKD2tk4wD0SIiRb6Vda+ X/4PZRp9PNhqnicFwmzIlrm25FMvGt0GNOztmUNVt+gMzxepTYd3EJBXkIpLC+LSGmeX Iic1DrLC5bm0azzO69Wtkav4fIxLk+OezP+k9Gk0H7XvjadOCCPClmJAZqUrxPP8waa2 gB41ZDVCbZhpFrP3rO1cj9OKZWw62bq6i7nZqr6iQJ+7CFAjhSfuPiHHXhEIg0jwrpfD Txuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716499079; x=1717103879; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=PwzV5tVaq2B4FjInYNNPwOPVrbWL6OWL1o9jsQ7m6BM=; b=DNTHaL15le6DWKBS97jcXeOQKOWIukZTTk56rjcwzUGCMFq//PALziAX4k39tsG7+u OZAusMLutlJX5MWteBiE8P10rUOQWllrhW1OqMmI4leB8EiBFfH4AA4KC5gHU4Pl0Wd7 ffDGf5HYzQ4FmmcpcsFWoV2L9lTyL4dOL8sjih91oQjViKcn0P267UyOVPwPU4W6mwTA p7Nwea6HXEj4SerwSuI3HsWkzY5n9wQ44Wvqqw3fD1StzOr5QwY0MS660rhpXOzuv7+s eyxaGVaxhljz7WZBsqbenqsZVAqoN0eAU60Linz9HL0Hvpl7t+ZEbthbI1WfAEoMuiWU 0NYw== X-Forwarded-Encrypted: i=1; AJvYcCV09IfCypEN28BhW0Gx+kxVuxiXQfJh5hQ3qxmuP2T7yqgh8A1ncWq62z9/wXdj7W639JRcCtPMNYFJIKaCUJUyxY0GK8gpKipgXYtRqqwq X-Gm-Message-State: AOJu0Yzs2q5RRjguhIR8LW+Lo8FN+Bun51LJkS+M6v5obM6PzthQSPCM Q6UQHKPD12zN6gQnzplekmYeAi3kKbNN9A+6jk56C/Mzny0ouIraCR/U9ZFYJMz2A0D9e23gCsj 7 X-Google-Smtp-Source: AGHT+IGx0rsWYFEjcfR9pAludyPkzfDLkr55TU0Ix9xIuJv5a2gL44nhGVX/9NJpqJnSBX4lthJzqA== X-Received: by 2002:a05:6a20:5526:b0:1b1:c745:ea2c with SMTP id adf61e73a8af0-1b212e32cb1mr729638637.56.1716499078649; Thu, 23 May 2024 14:17:58 -0700 (PDT) Received: from ghost ([50.145.13.30]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-6f8fd6d2811sm55732b3a.217.2024.05.23.14.17.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 May 2024 14:17:57 -0700 (PDT) Date: Thu, 23 May 2024 14:17:54 -0700 From: Charlie Jenkins To: Andrew Jones Cc: Evan Green , Yangyu Chen , linux-riscv@lists.infradead.org, Elliott Hughes , Jonathan Corbet , Paul Walmsley , Palmer Dabbelt , =?iso-8859-1?Q?Cl=E9ment_L=E9ger?= , Conor Dooley , linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org Subject: Re: [PATCH 2/2] docs: riscv: hwprobe: Clarify misaligned keys are values not bitmasks Message-ID: References: <20240522-d110bb16f54eebb725e943c2@orel> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20240522-d110bb16f54eebb725e943c2@orel> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240523_141801_490661_B8D4C0C9 X-CRM114-Status: GOOD ( 47.59 ) 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 T24gV2VkLCBNYXkgMjIsIDIwMjQgYXQgMDk6MjY6MDhBTSArMDIwMCwgQW5kcmV3IEpvbmVzIHdy b3RlOgo+IE9uIFR1ZSwgTWF5IDIxLCAyMDI0IGF0IDExOjM2OjA2QU0gR01ULCBFdmFuIEdyZWVu IHdyb3RlOgo+ID4gT24gU2F0LCBNYXkgMTgsIDIwMjQgYXQgOTowMOKAr0FNIFlhbmd5dSBDaGVu IDxjeXlAY3l5c2VsZi5uYW1lPiB3cm90ZToKPiA+ID4KPiA+ID4gVGhlIG9yaWdpbmFsIGRvY3Vt ZW50YXRpb24gc2F5cyBod3Byb2JlIGtleXMgYXJlIGJpdG1hc2tzLCBidXQgYWN0dWFsbHksCj4g PiA+IHRoZXkgYXJlIHZhbHVlcy4gVGhpcyBwYXRjaCBjbGFyaWZpZXMgdGhpcyB0byBhdm9pZCBj b25mdXNpb24uCj4gPiA+Cj4gPiA+IFNpZ25lZC1vZmYtYnk6IFlhbmd5dSBDaGVuIDxjeXlAY3l5 c2VsZi5uYW1lPgo+ID4gCj4gPiBIbSwgd2UgYWxzbyBoYXZlIHRoaXMgcHJvYmxlbSBpbiB0aGUg Y29kZSwgc2luY2UKPiA+IGh3cHJvYmVfa2V5X2lzX2JpdG1hc2soKSByZXR1cm5zIHRydWUgZm9y IEtFWV9DUFVQRVJGXzAuIFRoaXMgcmVzdWx0cwo+ID4gaW4gd3JvbmcgaW5mb3JtYXRpb24gYmVp bmcgcmV0dXJuZWQgZm9yIHF1ZXJpZXMgdXNpbmcgdGhlIFdISUNIX0NQVQo+ID4gZmxhZy4gSWYg dXNlcm1vZGUgYXNrZWQgZm9yIHRoZSBzZXQgb2YgQ1BVcyB0aGF0IHdhcyBzcGVjaWZpY2FsbHkg U0xPVwo+ID4gb3IgRU1VTEFURUQsIHRoZSByZXR1cm5lZCBjcHVzZXQgd291bGQgYWxzbyBpbmNs dWRlIGNwdXMgdGhhdCB3ZXJlCj4gPiBGQVNULiBJIGJlbGlldmUgYWxsIG90aGVyIHF1ZXJpZXMg YXJlIG9rYXkuCj4gPiAKPiA+IFRoZSBvbmUtbGluZXIgZml4IGlzIHRvIGp1c3Qgbm90IHJldHVy biB0cnVlIGZvciB0aGF0IGtleSBpbgo+ID4gaHdwcm9iZV9rZXlfaXNfYml0bWFzaygpLiBCdXQg dGhhdCdzIHRlY2huaWNhbGx5IHVzZXItdmlzaWJsZTogaWYgc29tZQo+ID4gc29mdHdhcmUgcmVs aWVkIG9uIHRoZSBidWdneSBiZWhhdmlvciBvZiBGQVNUIGNwdXMgYmVpbmcgc3dlcHQgdXAgaW4K PiA+IHRoZSBxdWVyeSBmb3IgU0xPVyBvciBFTVVMQVRFRCBjcHVzLCB0aGlzIGNoYW5nZSB3b3Vs ZCBleHBvc2UgdGhhdC4KPiA+IFRoZSBncm93bnVwcy1lYXQtdGhlaXItdmVnZXRhYmxlcyB0aGlu ZyB0byBkbyB3b3VsZCBiZSB0byBkZWZpbmUgYSBuZXcKPiA+IGtleSB0aGF0IHJldHVybnMgdGhp cyBzYW1lIHZhbHVlLCBidXQgZG9lc24ndCByZXR1cm4gdHJ1ZSBpbgo+ID4gaHdwcm9iZV9rZXlf aXNfYml0bWFzaygpLiBXaGF0IGRvIHBlb3BsZSB0aGluaz8KPiAKPiBFdmVuIHRob3VnaCBJIGFj dHVhbGx5IGVuam95IGVhdGluZyB2ZWdldGFibGVzLCBJIHRoaW5rIGl0J3MgdW5saWtlbHkKPiB0 aGF0IHdlIG5lZWQgdG8gYmUgc28gY2F1dGlvdXMgZm9yIHRoaXMuIEkgZmVlbCBsaWtlIGtlcm5l bCB1cGRhdGVzCj4gcHJvdmlkZSBhIGJpdCBvZiBmcmVlZG9tIHRvIGNoYW5nZSByZXN1bHRzIG9m IGhhcmR3YXJlIHF1ZXJ5IHN5c2NhbGxzLAo+IGV2ZW4gd2hlbiBydW4gb24gdGhlIHNhbWUgaGFy ZHdhcmUuIFBhcnRpY3VsYXJseSB0aGUgRU1VTEFURUQgcXVlcnksCj4gd2hpY2ggSSBndWVzcyBj b3VsZCBjaGFuZ2Ugd2l0aCBhIGZpcm13YXJlIHVwZGF0ZS4gQW5kLCBldmVuIHRoZSBTTE9XCj4g cXVlcnkgY291bGQgY2hhbmdlIGlmIHRoZSBwcm9iaW5nIHdhcyBtb2RpZmllZCBkaXJlY3RseSBv ciBpbmRpcmVjdGx5Lgo+IElPVywgYXBwbGljYXRpb25zIHRoYXQgdXNlIHRoZSB3aGljaC1jcHVz IHN5c2NhbGwgc2hvdWxkbid0IGZyZWFrIG91dAo+IGlmIHRoZXkgZG9uJ3QgZ2V0IHRoZSBzYW1l IGNwdXNldCBhZnRlciBhIGtlcm5lbCB1cGRhdGUsIHdoaWNoIG1lYW5zCj4gd2UgY2FuIGRyb3Ag dGhlIEZBU1QgY3B1cyBmcm9tIHRoZSByZXN1bHQuCgpEcm9wcGluZyBGQVNUIGRvZXMgbm90IHJl YWxseSBhZGRyZXNzIHRoZSBwcm9ibGVtIGhlcmUuIFRoZXNlIGtleXMgYXJlCmJlaW5nIHRyZWF0 ZWQgYXMgYSBiaXRtYXAgd2hlbiB0aGV5IGFyZSBpbiBmYWN0IGp1c3QgdmFsdWVzLiBCZWNhdXNl CnRoZXkgYXJlIGN1cnJlbnRseSB0cmVhdGVkIGFzIGJpdG1hcHMsIGl0IGlzIHNlbWFudGljYWxs eSBhY2NlcHRhYmxlIHRvCiJvciIgdHdvIG9mIHRoZSBrZXlzIHRvZ2V0aGVyIGFuZCBwYXNzIHRo ZW0gaW50byBod3Byb2JlLiBEcm9wcGluZyBGQVNUCmZyb20gdGhlIGlucHV0IG9mIEVNVUxBVEVE IHwgU0xPVyB3aWxsIG1ha2UgaXQgYXBwZWFyIHRvIHdvcmssIGJ1dCBpdCBpcwpub3QgcmVhc29u YWJsZSB0byB0cnkgdG8gc3VwcG9ydCBvcidpbmcgb2YgdmFsdWVzIHRoYXQgYXJlIG5vdCBiaXRt YXBzLiBJZiBhCmtleSB0aGF0IG1hcHMgdG8gYSB2YWx1ZSBvZiA1IGlzIGV2ZXIgaW50cm9kdWNl ZCwgdGhlbiB0aGUgaW5wdXQgb2YKVU5TVVBQT1JURUQgfCBFTVVMQVRFRCB3aWxsIGFsc28gcmV0 dXJuIGNwdXMgdGhhdCBtYXAgdG8gdGhlIG5ldyBrZXkuCklmIGh3cHJvYmUgcmVjaWV2ZXMgYSB2 YWx1ZSBvZiAzIGZvciBDUFVQRVJGXzAgYW5kIG9yJ2luZyBpcyBzdXBwb3J0ZWQsCnRoYXQgY291 bGQgZWl0aGVyIGJlIGludGVycHJldGVkIHRoYXQgdGhlIHVzZXIgaXMgYXNraW5nIGZvciBjcHVz IHRoYXQgYXJlCkVNVUxBVEVEIG9yIFNMT1cgb3IgRkFTVCwgb3IganVzdCBGQVNULCBvciBqdXN0 IEVNVUxBVEVEIG9yIFNMT1cuIFRoZQpjdXJyZW50IGltcGxlbWVudGF0aW9uIGRlZmluZXMgdGhh dCBvbmx5IEZBU1Qgd2lsbCBiZSByZXR1cm5lZCBiZWNhdXNlCm9yJ2luZyB2YWx1ZXMgbGlrZSB0 aGlzIGlzIG5vbnNlbnNlLgoKQWxsb3dpbmcgYW4gaW5wdXQgd2hlcmUga2V5cyBhcmUgb3InZCB0 b2dldGhlciBzaG91bGQgbm90IGJlIHN1cHBvcnRlZAppbiBDUFVQRVJGXzAgc2luY2UgaXQgaXMg d2hhdCBpcyBjYXVzaW5nIHRoaXMgaXNzdWUuIEhvd2V2ZXIsIHRoZQpvcmlnaW5hbCBpbnRlbnQg c2VlbXMgdG8gYmUgdG8gYWxsb3cgYW4gb3InaW5nIG9mIGtleXMuIFRoZSB2ZXJib3NpdHkgb2YK dXNpbmcgQ1BVUEVSRl8wIHdpbGwgYmUgZ3JlYXRseSBpbmNyZWFzZWQgd2l0aG91dCB0aGUgYWJp bGl0eSB0byBvciBrZXlzCnRvZ2V0aGVyLiBJZiBhbiBhcHBsaWNhdGlvbiB3YW50cyB0byBrbm93 IGlmIG1pc2FsaWduZWQgYWNjZXNzZXMgYXJlCnN1cHBvcnRlZCwgaXQgY3VycmVudGx5IG5lZWRz IDMgc2VwYXJhdGUgaHdwcm9iZSBjYWxscywgb25lIGZvciBlYWNoCkVNVUxBVEVELCBTTE9XLCBh bmQgRkFTVC4gQ2hhbmdpbmcgQ1BVUEVSRl8wIHRvIGJlIGEgdHJ1ZSBiaXRtYXAgd291bGQKcmVx dWlyZSBjaGFuZ2luZyB0aGUgdmFsdWVzIG9mIGVhY2ggb2YgdGhlIGV4aXN0aW5nIGtleXMgd2hp Y2ggaXMgbm90IGFuCmFjY2VwdGFibGUgQVBJIGNoYW5nZS4KCkluIG15IHByZXZpb3VzIGVtYWls IEkgcHJvcG9zZWQgYSBuZXcga2V5LCB3aGljaCBjb3VsZCBiZSBzb21ldGhpbmcgbGlrZQpSSVND Vl9IV1BST0JFX0tFWV9DUFVQRVJGXzEsIHRoYXQgaXMgYWN0dWFsbHkgYSBiaXRtYXAuIFRoYXQg d2F5IGEgcXVlcnkKb2YgRU1VTEFURUQgfCBTTE9XIHwgRkFTVCB3b3VsZCBiZSBwb3NzaWJsZSBp biBhIHNpbmdsZSBod3Byb2JlIGNhbGwsCndoaWNoIHNlZW1zIHRvIGJlIHRoZSBvcmlnaW5hbCBp bnRlbnQgb2YgQ1BVUEVSRl8wLgoKLSBDaGFybGllCgoKPiAKPiBUaGFua3MsCj4gZHJldwo+IAo+ ID4gCj4gPiAtRXZhbgo+ID4gCj4gPiA+IC0tLQo+ID4gPiAgRG9jdW1lbnRhdGlvbi9hcmNoL3Jp c2N2L2h3cHJvYmUucnN0IHwgMzEgKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQo+ID4gPiAg MSBmaWxlIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQo+ID4gPgo+ ID4gPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcmNoL3Jpc2N2L2h3cHJvYmUucnN0IGIv RG9jdW1lbnRhdGlvbi9hcmNoL3Jpc2N2L2h3cHJvYmUucnN0Cj4gPiA+IGluZGV4IDIzOWJlNjNm NTA4OS4uNGFiZmEzZjlmZTQ0IDEwMDY0NAo+ID4gPiAtLS0gYS9Eb2N1bWVudGF0aW9uL2FyY2gv cmlzY3YvaHdwcm9iZS5yc3QKPiA+ID4gKysrIGIvRG9jdW1lbnRhdGlvbi9hcmNoL3Jpc2N2L2h3 cHJvYmUucnN0Cj4gPiA+IEBAIC0xODgsMjUgKzE4OCwzMCBAQCBUaGUgZm9sbG93aW5nIGtleXMg YXJlIGRlZmluZWQ6Cj4gPiA+ICAgICAgICAgbWFudWFsIHN0YXJ0aW5nIGZyb20gY29tbWl0IDk1 Y2YxZjkgKCJBZGQgY2hhbmdlcyByZXF1ZXN0ZWQgYnkgVmVkCj4gPiA+ICAgICAgICAgZHVyaW5n IHNpZ25vZmYiKQo+ID4gPgo+ID4gPiAtKiA6YzptYWNybzpgUklTQ1ZfSFdQUk9CRV9LRVlfQ1BV UEVSRl8wYDogQSBiaXRtYXNrIHRoYXQgY29udGFpbnMgcGVyZm9ybWFuY2UKPiA+ID4gKyogOmM6 bWFjcm86YFJJU0NWX0hXUFJPQkVfS0VZX0NQVVBFUkZfMGA6IEEgdmFsdWUgdGhhdCBjb250YWlu cyBwZXJmb3JtYW5jZQo+ID4gPiAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VsZWN0ZWQgc2V0 IG9mIHByb2Nlc3NvcnMuCj4gPiA+Cj4gPiA+IC0gICogOmM6bWFjcm86YFJJU0NWX0hXUFJPQkVf TUlTQUxJR05FRF9VTktOT1dOYDogVGhlIHBlcmZvcm1hbmNlIG9mIG1pc2FsaWduZWQKPiA+ID4g LSAgICBzY2FsYXIgYWNjZXNzZXMgaXMgdW5rbm93bi4KPiA+ID4gKyAgKiA6YzptYWNybzpgUklT Q1ZfSFdQUk9CRV9NSVNBTElHTkVEX01BU0tgOiBUaGUgYml0bWFzayBvZiB0aGUgbWlzYWxpZ25l ZAo+ID4gPiArICAgIGFjY2VzcyBwZXJmb3JtYW5jZSBmaWVsZCBpbiB0aGUgdmFsdWUgb2Yga2V5 IGBSSVNDVl9IV1BST0JFX0tFWV9DUFVQRVJGXzBgLgo+ID4gPgo+ID4gPiAtICAqIDpjOm1hY3Jv OmBSSVNDVl9IV1BST0JFX01JU0FMSUdORURfRU1VTEFURURgOiBNaXNhbGlnbmVkIHNjYWxhciBh Y2Nlc3NlcyBhcmUKPiA+ID4gLSAgICBlbXVsYXRlZCB2aWEgc29mdHdhcmUsIGVpdGhlciBpbiBv ciBiZWxvdyB0aGUga2VybmVsLiAgVGhlc2UgYWNjZXNzZXMgYXJlCj4gPiA+IC0gICAgYWx3YXlz IGV4dHJlbWVseSBzbG93Lgo+ID4gPiArICAgIFRoZSBmb2xsb3dpbmcgdmFsdWVzIChub3QgYml0 bWFza3MpIGluIHRoaXMgZmllbGQgYXJlIGRlZmluZWQ6Cj4gPiA+Cj4gPiA+IC0gICogOmM6bWFj cm86YFJJU0NWX0hXUFJPQkVfTUlTQUxJR05FRF9TTE9XYDogTWlzYWxpZ25lZCBzY2FsYXIgYWNj ZXNzZXMgYXJlCj4gPiA+IC0gICAgc2xvd2VyIHRoYW4gZXF1aXZhbGVudCBieXRlIGFjY2Vzc2Vz LiAgTWlzYWxpZ25lZCBhY2Nlc3NlcyBtYXkgYmUgc3VwcG9ydGVkCj4gPiA+IC0gICAgZGlyZWN0 bHkgaW4gaGFyZHdhcmUsIG9yIHRyYXBwZWQgYW5kIGVtdWxhdGVkIGJ5IHNvZnR3YXJlLgo+ID4g PiArICAgICogOmM6bWFjcm86YFJJU0NWX0hXUFJPQkVfTUlTQUxJR05FRF9VTktOT1dOYDogVGhl IHBlcmZvcm1hbmNlIG9mIG1pc2FsaWduZWQKPiA+ID4gKyAgICAgIHNjYWxhciBhY2Nlc3NlcyBp cyB1bmtub3duLgo+ID4gPgo+ID4gPiAtICAqIDpjOm1hY3JvOmBSSVNDVl9IV1BST0JFX01JU0FM SUdORURfRkFTVGA6IE1pc2FsaWduZWQgc2NhbGFyIGFjY2Vzc2VzIGFyZQo+ID4gPiAtICAgIGZh c3RlciB0aGFuIGVxdWl2YWxlbnQgYnl0ZSBhY2Nlc3Nlcy4KPiA+ID4gKyAgICAqIDpjOm1hY3Jv OmBSSVNDVl9IV1BST0JFX01JU0FMSUdORURfRU1VTEFURURgOiBNaXNhbGlnbmVkIHNjYWxhciBh Y2Nlc3NlcyBhcmUKPiA+ID4gKyAgICAgIGVtdWxhdGVkIHZpYSBzb2Z0d2FyZSwgZWl0aGVyIGlu IG9yIGJlbG93IHRoZSBrZXJuZWwuICBUaGVzZSBhY2Nlc3NlcyBhcmUKPiA+ID4gKyAgICAgIGFs d2F5cyBleHRyZW1lbHkgc2xvdy4KPiA+ID4KPiA+ID4gLSAgKiA6YzptYWNybzpgUklTQ1ZfSFdQ Uk9CRV9NSVNBTElHTkVEX1VOU1VQUE9SVEVEYDogTWlzYWxpZ25lZCBzY2FsYXIgYWNjZXNzZXMK PiA+ID4gLSAgICBhcmUgbm90IHN1cHBvcnRlZCBhdCBhbGwgYW5kIHdpbGwgZ2VuZXJhdGUgYSBt aXNhbGlnbmVkIGFkZHJlc3MgZmF1bHQuCj4gPiA+ICsgICAgKiA6YzptYWNybzpgUklTQ1ZfSFdQ Uk9CRV9NSVNBTElHTkVEX1NMT1dgOiBNaXNhbGlnbmVkIHNjYWxhciBhY2Nlc3NlcyBhcmUKPiA+ ID4gKyAgICAgIHNsb3dlciB0aGFuIGVxdWl2YWxlbnQgYnl0ZSBhY2Nlc3Nlcy4gIE1pc2FsaWdu ZWQgYWNjZXNzZXMgbWF5IGJlIHN1cHBvcnRlZAo+ID4gPiArICAgICAgZGlyZWN0bHkgaW4gaGFy ZHdhcmUsIG9yIHRyYXBwZWQgYW5kIGVtdWxhdGVkIGJ5IHNvZnR3YXJlLgo+ID4gPiArCj4gPiA+ ICsgICAgKiA6YzptYWNybzpgUklTQ1ZfSFdQUk9CRV9NSVNBTElHTkVEX0ZBU1RgOiBNaXNhbGln bmVkIHNjYWxhciBhY2Nlc3NlcyBhcmUKPiA+ID4gKyAgICAgIGZhc3RlciB0aGFuIGVxdWl2YWxl bnQgYnl0ZSBhY2Nlc3Nlcy4KPiA+ID4gKwo+ID4gPiArICAgICogOmM6bWFjcm86YFJJU0NWX0hX UFJPQkVfTUlTQUxJR05FRF9VTlNVUFBPUlRFRGA6IE1pc2FsaWduZWQgc2NhbGFyIGFjY2Vzc2Vz Cj4gPiA+ICsgICAgICBhcmUgbm90IHN1cHBvcnRlZCBhdCBhbGwgYW5kIHdpbGwgZ2VuZXJhdGUg YSBtaXNhbGlnbmVkIGFkZHJlc3MgZmF1bHQuCj4gPiA+Cj4gPiA+ICAqIDpjOm1hY3JvOmBSSVND Vl9IV1BST0JFX0tFWV9aSUNCT1pfQkxPQ0tfU0laRWA6IEFuIHVuc2lnbmVkIGludCB3aGljaAo+ ID4gPiAgICByZXByZXNlbnRzIHRoZSBzaXplIG9mIHRoZSBaaWNib3ogYmxvY2sgaW4gYnl0ZXMu Cj4gPiA+IC0tCj4gPiA+IDIuNDMuMAo+ID4gPgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KbGludXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2 QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9s aXN0aW5mby9saW51eC1yaXNjdgo=