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 954D4C433F5 for ; Tue, 25 Jan 2022 02:20:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1582361AbiAYCTy (ORCPT ); Mon, 24 Jan 2022 21:19:54 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55724 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S3415335AbiAYBpI (ORCPT ); Mon, 24 Jan 2022 20:45:08 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AD930C0A8876 for ; Mon, 24 Jan 2022 17:45:07 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id i10-20020a25540a000000b0061391789216so37717095ybb.2 for ; Mon, 24 Jan 2022 17:45:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:message-id:mime-version:subject:from:to:cc :content-transfer-encoding; bh=oe74CoShjtAShwA7kMPhYzttzX+wC9lwSs6Wtzn+UiI=; b=CiJVitmQbgwpYEz1XHuuG/u51SF4CuxUGZieetjHHWTpKdSdH/LCREqBt63HAdQVir m8BFHx/7skf/xezHoDdHQkvdEMJjWHjAuMx6pTwTZOTYrgXDWti700EDLJ2GU3wIU9VI VulVlvTS2xh2W/BuF/0UCLnXCRTfXLXjLXcbpArphSlsiVuyEsX/pUdbUJIJkxBU74es hoIWR7OeBqTDbS+ubxLPORaMcMlXYCLzWsiWuSgL8XjySH25/y0zUopyXnOZC/g8odKz pp46vvQXnOQGnhsiEQNroMJjKL8XlbkXMMwuqvK9aJ6xUNzB+pY+Y7AhOdrZ8/hqScjg rs8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc :content-transfer-encoding; bh=oe74CoShjtAShwA7kMPhYzttzX+wC9lwSs6Wtzn+UiI=; b=wj+t22TgLgbnUWSdP2pMqrZ95czBgxy7gBsuNn3+fr85hUwyU1U2/bCzErI2tleGIf sFqmfJfcPcMv4nurRzIvXZFdbKiYd10oyrTQhr2eJptP7hgMNbaCf7AR1/StFw5+pjPE T6ooAhbQcqHL3FcZjjADXeUrTKlc5WxQXX1eSaAUmnlcNCphaJoOJsZAIdXKKUxs2OPx zMqVlq89mO73H1TCh6vV/mIdj3rai1zsxvI43vO/gglGsIDwQ/aHdONLKGHOl6Cl8JTM 0J3BC3HhitbibdBbC3oMVj5gDkGlFefMVANTaQJFQ72WlJrNgXQC1Msdppxk0eOFiRkx EXhg== X-Gm-Message-State: AOAM532OJsLEhVYT14UG+1VSoD17+0jbNrdY662sfk5uhu8GYYp+Ae+g gXgdB5+SzrunEXtcDzhxOm+NwyYxx6nYZoV/zJUG2Mc2RvcK/u/XzYuxQUGIzbrvLEChwnq8C1p wixumgsi4a82a09Xox2vkaiIzvpqnNxWZiOF4j+Sq9iDY/6bYl/rCsPgFJGckJHa3XPs= X-Google-Smtp-Source: ABdhPJzxQ5VH8+X1dJPluxeqZp5+21h70mE7AqZs/dsSeEhtcWXiqCC8FuQ+YS81y0Q2KhWNhoIZgpApQQ== X-Received: from nhuck.c.googlers.com ([fda3:e722:ac3:cc00:14:4d90:c0a8:39cc]) (user=nhuck job=sendgmr) by 2002:a81:9347:0:b0:2ca:287c:6c59 with SMTP id 00721157ae682-2ca287c6ea9mr2801297b3.254.1643075106090; Mon, 24 Jan 2022 17:45:06 -0800 (PST) Date: Mon, 24 Jan 2022 19:44:15 -0600 Message-Id: <20220125014422.80552-1-nhuck@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.35.0.rc0.227.g00780c9af4-goog Subject: [RFC PATCH 0/7] crypto: HCTR2 support From: Nathan Huckleberry To: linux-crypto@vger.kernel.org Cc: Herbert Xu , "David S. Miller" , linux-arm-kernel@lists.infradead.org, Paul Crowley , Eric Biggers , Sami Tolvanen , Nathan Huckleberry Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org HCTR2 is a length-preserving encryption mode that is efficient on processors with instructions to accelerate AES and carryless multiplication, e.g. x86 processors with AES-NI and CLMUL, and ARM processors with the ARMv8 Crypto Extensions. HCTR2 is specified in https://ia.cr/2021/1441 =E2=80=9CLength-preserving encryption with HCTR2=E2=80=9D which shows that if AES is secure and HCTR2 = is instantiated with AES, then HCTR2 is secure. Reference code and test vectors are at https://github.com/google/hctr2. As a length-preserving encryption mode, HCTR2 is suitable for applications such as storage encryption where ciphertext expansion is not possible, and thus authenticated encryption cannot be used. Currently, such applications usually use XTS, or in some cases Adiantum. XTS has the disadvantage that it is a narrow-block mode: a bitflip will only change 16 bytes in the resulting ciphertext or plaintext. This reveals more information to an attacker than necessary. HCTR2 is a wide-block mode, so it provides a stronger security property: a bitflip will change the entire message. HCTR2 is somewhat similar to Adiantum, which is also a wide-block mode. However, HCTR2 is designed to take advantage of existing crypto instructions, while Adiantum targets devices without such hardware support. Adiantum is also designed with longer messages in mind, while HCTR2 is designed to be efficient even on short messages. The first intended use of this mode in the kernel is for the encryption of filenames, where for efficiency reasons encryption must be fully deterministic (only one ciphertext for each plaintext) and the existing CBC solution leaks more information than necessary for filenames with common prefixes. HCTR2 uses two passes of an =CE=B5-almost-=E2=88=86-universal hash function= called POLYVAL and one pass of a block cipher mode called XCTR. POLYVAL is a polynomial hash designed for efficiency on modern processors and was originally specified for use in AES-GCM-SIV (RFC 8452). XCTR mode is a variant of CTR mode that is more efficient on little-endian machines. This patchset adds HCTR2 to Linux's crypto API, including generic implementations of XCTR and POLYVAL, hardware accelerated implementations of XCTR and POLYVAL for both x86-64 and ARM64, and a templated implementation of HCTR2. Nathan Huckleberry (7): crypto: xctr - Add XCTR support crypto: polyval - Add POLYVAL support crypto: hctr2 - Add HCTR2 support crypto: x86/aesni-xctr: Add accelerated implementation of XCTR crypto: arm64/aes-xctr: Add accelerated implementation of XCTR crypto: x86/polyval: Add PCLMULQDQ accelerated implementation of POLYVAL crypto: arm64/polyval: Add PMULL accelerated implementation of POLYVAL arch/arm64/crypto/Kconfig | 10 +- arch/arm64/crypto/Makefile | 3 + arch/arm64/crypto/aes-glue.c | 70 +- arch/arm64/crypto/aes-modes.S | 128 ++ arch/arm64/crypto/polyval-ce-core.S | 317 ++++ arch/arm64/crypto/polyval-ce-glue.c | 164 ++ arch/x86/crypto/Makefile | 5 +- arch/x86/crypto/aes_xctrby8_avx-x86_64.S | 529 ++++++ arch/x86/crypto/aesni-intel_asm.S | 70 + arch/x86/crypto/aesni-intel_glue.c | 88 + arch/x86/crypto/polyval-clmulni-intel_asm.S | 319 ++++ arch/x86/crypto/polyval-clmulni-intel_glue.c | 165 ++ crypto/Kconfig | 37 + crypto/Makefile | 3 + crypto/hctr2.c | 475 +++++ crypto/polyval-generic.c | 183 ++ crypto/tcrypt.c | 10 + crypto/testmgr.c | 18 + crypto/testmgr.h | 1617 ++++++++++++++++++ crypto/xctr.c | 202 +++ include/crypto/polyval.h | 22 + include/crypto/xctr.h | 19 + 22 files changed, 4449 insertions(+), 5 deletions(-) create mode 100644 arch/arm64/crypto/polyval-ce-core.S create mode 100644 arch/arm64/crypto/polyval-ce-glue.c create mode 100644 arch/x86/crypto/aes_xctrby8_avx-x86_64.S create mode 100644 arch/x86/crypto/polyval-clmulni-intel_asm.S create mode 100644 arch/x86/crypto/polyval-clmulni-intel_glue.c create mode 100644 crypto/hctr2.c create mode 100644 crypto/polyval-generic.c create mode 100644 crypto/xctr.c create mode 100644 include/crypto/polyval.h create mode 100644 include/crypto/xctr.h --=20 2.35.0.rc0.227.g00780c9af4-goog 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 90BEEC433F5 for ; Tue, 25 Jan 2022 01:46:50 +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:From:Subject:Mime-Version: Message-Id:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: References:List-Owner; bh=tb92+mxY7eZVAT/XTmu5X93jjR4LIE1Jlg6CDzI/blw=; b=W7Y 9pSHX1cQIMcaNqVhJJ6zAWKXi+SXOrZ+DH68VuQTB9VKepHLlsz2c6P1iPvl9BC5ywzzFFvr7pSF0 dU4SK54sDx+imU9cBfdPEXO+D00aLQHpcvPNJqY01psOdxmDPytb1+2FuMm0EgiTUrNO+QnrPHfu6 JrvT6jL1ig16SZBGepyv3hh4Bd0xUrFx3eOUJnwG6Dw+336WiGz9IC7XihUinhC5x/y/Phtuwi2TO 7pi1OzaEpx1Yww8Bulj/c7M/5BAnWCo1aW+u1rGT6PGr9Z1B7Ud27sdREXUjAgU9xKnXZveIhDqlk CZErkhJITE7aHmaoQOIbFIo+C2uKI9A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nCAtU-0066BI-Gy; Tue, 25 Jan 2022 01:45:12 +0000 Received: from mail-yb1-xb4a.google.com ([2607:f8b0:4864:20::b4a]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nCAtQ-0066Af-KX for linux-arm-kernel@lists.infradead.org; Tue, 25 Jan 2022 01:45:10 +0000 Received: by mail-yb1-xb4a.google.com with SMTP id b61-20020a25a243000000b006126ea65191so38368494ybi.19 for ; Mon, 24 Jan 2022 17:45:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:message-id:mime-version:subject:from:to:cc :content-transfer-encoding; bh=oe74CoShjtAShwA7kMPhYzttzX+wC9lwSs6Wtzn+UiI=; b=CiJVitmQbgwpYEz1XHuuG/u51SF4CuxUGZieetjHHWTpKdSdH/LCREqBt63HAdQVir m8BFHx/7skf/xezHoDdHQkvdEMJjWHjAuMx6pTwTZOTYrgXDWti700EDLJ2GU3wIU9VI VulVlvTS2xh2W/BuF/0UCLnXCRTfXLXjLXcbpArphSlsiVuyEsX/pUdbUJIJkxBU74es hoIWR7OeBqTDbS+ubxLPORaMcMlXYCLzWsiWuSgL8XjySH25/y0zUopyXnOZC/g8odKz pp46vvQXnOQGnhsiEQNroMJjKL8XlbkXMMwuqvK9aJ6xUNzB+pY+Y7AhOdrZ8/hqScjg rs8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc :content-transfer-encoding; bh=oe74CoShjtAShwA7kMPhYzttzX+wC9lwSs6Wtzn+UiI=; b=yeteJfUeewCDVBeudCQUyXl23TWYxzGDm4+0IzdwyXO2G2ULgjWKm34keqDObLDa3f Oq72euDl1P52n6regMBYxL66bHukgWnXDt5giHP5rZ2oJNn5uhVTIKfQvp2ukvix0iHZ Vug+FYvpppPBKg/uELD//u6L/0LKdbeL06nRQk9wwhOXbnw9JqiTOI1FSlGJpanmGTlM t8M219m+YpSBAQFVKVIiDIDzpRH9nZqdmAq0QadMQM6ZXZZhank7v5+1goMm/UwQGHV3 nKXQySiezqamL6QPk63GDsPeq+24yGJ5Z/p/Pc2fHk1C/yEjjgzVC/xw8zd7CsLLqbqG ueig== X-Gm-Message-State: AOAM531bcUPfUQa3d8wYFbHbS8tNY6XPfLMUIa7EnxZZEwzqiZ8AkVi2 MEgG8jbTvcdalc3Oo+lAgevX3LCESg== X-Google-Smtp-Source: ABdhPJzxQ5VH8+X1dJPluxeqZp5+21h70mE7AqZs/dsSeEhtcWXiqCC8FuQ+YS81y0Q2KhWNhoIZgpApQQ== X-Received: from nhuck.c.googlers.com ([fda3:e722:ac3:cc00:14:4d90:c0a8:39cc]) (user=nhuck job=sendgmr) by 2002:a81:9347:0:b0:2ca:287c:6c59 with SMTP id 00721157ae682-2ca287c6ea9mr2801297b3.254.1643075106090; Mon, 24 Jan 2022 17:45:06 -0800 (PST) Date: Mon, 24 Jan 2022 19:44:15 -0600 Message-Id: <20220125014422.80552-1-nhuck@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.35.0.rc0.227.g00780c9af4-goog Subject: [RFC PATCH 0/7] crypto: HCTR2 support From: Nathan Huckleberry To: linux-crypto@vger.kernel.org Cc: Herbert Xu , "David S. Miller" , linux-arm-kernel@lists.infradead.org, Paul Crowley , Eric Biggers , Sami Tolvanen , Nathan Huckleberry X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220124_174508_717200_C73E6006 X-CRM114-Status: GOOD ( 16.37 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SENUUjIgaXMgYSBsZW5ndGgtcHJlc2VydmluZyBlbmNyeXB0aW9uIG1vZGUgdGhhdCBpcyBlZmZp Y2llbnQgb24KcHJvY2Vzc29ycyB3aXRoIGluc3RydWN0aW9ucyB0byBhY2NlbGVyYXRlIEFFUyBh bmQgY2FycnlsZXNzCm11bHRpcGxpY2F0aW9uLCBlLmcuIHg4NiBwcm9jZXNzb3JzIHdpdGggQUVT LU5JIGFuZCBDTE1VTCwgYW5kIEFSTQpwcm9jZXNzb3JzIHdpdGggdGhlIEFSTXY4IENyeXB0byBF eHRlbnNpb25zLgoKSENUUjIgaXMgc3BlY2lmaWVkIGluIGh0dHBzOi8vaWEuY3IvMjAyMS8xNDQx IOKAnExlbmd0aC1wcmVzZXJ2aW5nCmVuY3J5cHRpb24gd2l0aCBIQ1RSMuKAnSB3aGljaCBzaG93 cyB0aGF0IGlmIEFFUyBpcyBzZWN1cmUgYW5kIEhDVFIyIGlzCmluc3RhbnRpYXRlZCB3aXRoIEFF UywgdGhlbiBIQ1RSMiBpcyBzZWN1cmUuICBSZWZlcmVuY2UgY29kZSBhbmQgdGVzdAp2ZWN0b3Jz IGFyZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2hjdHIyLgoKQXMgYSBsZW5ndGgtcHJl c2VydmluZyBlbmNyeXB0aW9uIG1vZGUsIEhDVFIyIGlzIHN1aXRhYmxlIGZvciBhcHBsaWNhdGlv bnMKc3VjaCBhcyBzdG9yYWdlIGVuY3J5cHRpb24gd2hlcmUgY2lwaGVydGV4dCBleHBhbnNpb24g aXMgbm90IHBvc3NpYmxlLCBhbmQKdGh1cyBhdXRoZW50aWNhdGVkIGVuY3J5cHRpb24gY2Fubm90 IGJlIHVzZWQuICBDdXJyZW50bHksIHN1Y2gKYXBwbGljYXRpb25zIHVzdWFsbHkgdXNlIFhUUywg b3IgaW4gc29tZSBjYXNlcyBBZGlhbnR1bS4gIFhUUyBoYXMgdGhlCmRpc2FkdmFudGFnZSB0aGF0 IGl0IGlzIGEgbmFycm93LWJsb2NrIG1vZGU6IGEgYml0ZmxpcCB3aWxsIG9ubHkgY2hhbmdlIDE2 CmJ5dGVzIGluIHRoZSByZXN1bHRpbmcgY2lwaGVydGV4dCBvciBwbGFpbnRleHQuICBUaGlzIHJl dmVhbHMgbW9yZQppbmZvcm1hdGlvbiB0byBhbiBhdHRhY2tlciB0aGFuIG5lY2Vzc2FyeS4KCkhD VFIyIGlzIGEgd2lkZS1ibG9jayBtb2RlLCBzbyBpdCBwcm92aWRlcyBhIHN0cm9uZ2VyIHNlY3Vy aXR5IHByb3BlcnR5OiBhCmJpdGZsaXAgd2lsbCBjaGFuZ2UgdGhlIGVudGlyZSBtZXNzYWdlLiAg SENUUjIgaXMgc29tZXdoYXQgc2ltaWxhciB0bwpBZGlhbnR1bSwgd2hpY2ggaXMgYWxzbyBhIHdp ZGUtYmxvY2sgbW9kZS4gIEhvd2V2ZXIsIEhDVFIyIGlzIGRlc2lnbmVkIHRvCnRha2UgYWR2YW50 YWdlIG9mIGV4aXN0aW5nIGNyeXB0byBpbnN0cnVjdGlvbnMsIHdoaWxlIEFkaWFudHVtIHRhcmdl dHMKZGV2aWNlcyB3aXRob3V0IHN1Y2ggaGFyZHdhcmUgc3VwcG9ydC4gIEFkaWFudHVtIGlzIGFs c28gZGVzaWduZWQgd2l0aApsb25nZXIgbWVzc2FnZXMgaW4gbWluZCwgd2hpbGUgSENUUjIgaXMg ZGVzaWduZWQgdG8gYmUgZWZmaWNpZW50IGV2ZW4gb24Kc2hvcnQgbWVzc2FnZXMuCgpUaGUgZmly c3QgaW50ZW5kZWQgdXNlIG9mIHRoaXMgbW9kZSBpbiB0aGUga2VybmVsIGlzIGZvciB0aGUgZW5j cnlwdGlvbiBvZgpmaWxlbmFtZXMsIHdoZXJlIGZvciBlZmZpY2llbmN5IHJlYXNvbnMgZW5jcnlw dGlvbiBtdXN0IGJlIGZ1bGx5CmRldGVybWluaXN0aWMgKG9ubHkgb25lIGNpcGhlcnRleHQgZm9y IGVhY2ggcGxhaW50ZXh0KSBhbmQgdGhlIGV4aXN0aW5nCkNCQyBzb2x1dGlvbiBsZWFrcyBtb3Jl IGluZm9ybWF0aW9uIHRoYW4gbmVjZXNzYXJ5IGZvciBmaWxlbmFtZXMgd2l0aApjb21tb24gcHJl Zml4ZXMuCgpIQ1RSMiB1c2VzIHR3byBwYXNzZXMgb2YgYW4gzrUtYWxtb3N0LeKIhi11bml2ZXJz YWwgaGFzaCBmdW5jdGlvbiBjYWxsZWQKUE9MWVZBTCBhbmQgb25lIHBhc3Mgb2YgYSBibG9jayBj aXBoZXIgbW9kZSBjYWxsZWQgWENUUi4gIFBPTFlWQUwgaXMgYQpwb2x5bm9taWFsIGhhc2ggZGVz aWduZWQgZm9yIGVmZmljaWVuY3kgb24gbW9kZXJuIHByb2Nlc3NvcnMgYW5kIHdhcwpvcmlnaW5h bGx5IHNwZWNpZmllZCBmb3IgdXNlIGluIEFFUy1HQ00tU0lWIChSRkMgODQ1MikuICBYQ1RSIG1v ZGUgaXMgYQp2YXJpYW50IG9mIENUUiBtb2RlIHRoYXQgaXMgbW9yZSBlZmZpY2llbnQgb24gbGl0 dGxlLWVuZGlhbiBtYWNoaW5lcy4KClRoaXMgcGF0Y2hzZXQgYWRkcyBIQ1RSMiB0byBMaW51eCdz IGNyeXB0byBBUEksIGluY2x1ZGluZyBnZW5lcmljCmltcGxlbWVudGF0aW9ucyBvZiBYQ1RSIGFu ZCBQT0xZVkFMLCBoYXJkd2FyZSBhY2NlbGVyYXRlZCBpbXBsZW1lbnRhdGlvbnMKb2YgWENUUiBh bmQgUE9MWVZBTCBmb3IgYm90aCB4ODYtNjQgYW5kIEFSTTY0LCBhbmQgYSB0ZW1wbGF0ZWQKaW1w bGVtZW50YXRpb24gb2YgSENUUjIuCgpOYXRoYW4gSHVja2xlYmVycnkgKDcpOgogIGNyeXB0bzog eGN0ciAtIEFkZCBYQ1RSIHN1cHBvcnQKICBjcnlwdG86IHBvbHl2YWwgLSBBZGQgUE9MWVZBTCBz dXBwb3J0CiAgY3J5cHRvOiBoY3RyMiAtIEFkZCBIQ1RSMiBzdXBwb3J0CiAgY3J5cHRvOiB4ODYv YWVzbmkteGN0cjogQWRkIGFjY2VsZXJhdGVkIGltcGxlbWVudGF0aW9uIG9mIFhDVFIKICBjcnlw dG86IGFybTY0L2Flcy14Y3RyOiBBZGQgYWNjZWxlcmF0ZWQgaW1wbGVtZW50YXRpb24gb2YgWENU UgogIGNyeXB0bzogeDg2L3BvbHl2YWw6IEFkZCBQQ0xNVUxRRFEgYWNjZWxlcmF0ZWQgaW1wbGVt ZW50YXRpb24gb2YKICAgIFBPTFlWQUwKICBjcnlwdG86IGFybTY0L3BvbHl2YWw6IEFkZCBQTVVM TCBhY2NlbGVyYXRlZCBpbXBsZW1lbnRhdGlvbiBvZiBQT0xZVkFMCgogYXJjaC9hcm02NC9jcnlw dG8vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgfCAgIDEwICstCiBhcmNoL2FybTY0L2NyeXB0 by9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgIDMgKwogYXJjaC9hcm02NC9jcnlwdG8v YWVzLWdsdWUuYyAgICAgICAgICAgICAgICAgfCAgIDcwICstCiBhcmNoL2FybTY0L2NyeXB0by9h ZXMtbW9kZXMuUyAgICAgICAgICAgICAgICB8ICAxMjggKysKIGFyY2gvYXJtNjQvY3J5cHRvL3Bv bHl2YWwtY2UtY29yZS5TICAgICAgICAgIHwgIDMxNyArKysrCiBhcmNoL2FybTY0L2NyeXB0by9w b2x5dmFsLWNlLWdsdWUuYyAgICAgICAgICB8ICAxNjQgKysKIGFyY2gveDg2L2NyeXB0by9NYWtl ZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArLQogYXJjaC94ODYvY3J5cHRvL2Flc194 Y3RyYnk4X2F2eC14ODZfNjQuUyAgICAgfCAgNTI5ICsrKysrKwogYXJjaC94ODYvY3J5cHRvL2Fl c25pLWludGVsX2FzbS5TICAgICAgICAgICAgfCAgIDcwICsKIGFyY2gveDg2L2NyeXB0by9hZXNu aS1pbnRlbF9nbHVlLmMgICAgICAgICAgIHwgICA4OCArCiBhcmNoL3g4Ni9jcnlwdG8vcG9seXZh bC1jbG11bG5pLWludGVsX2FzbS5TICB8ICAzMTkgKysrKwogYXJjaC94ODYvY3J5cHRvL3BvbHl2 YWwtY2xtdWxuaS1pbnRlbF9nbHVlLmMgfCAgMTY1ICsrCiBjcnlwdG8vS2NvbmZpZyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzcgKwogY3J5cHRvL01ha2VmaWxlICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsKIGNyeXB0by9oY3RyMi5jICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgIDQ3NSArKysrKwogY3J5cHRvL3BvbHl2YWwtZ2VuZXJpYy5j ICAgICAgICAgICAgICAgICAgICAgfCAgMTgzICsrCiBjcnlwdG8vdGNyeXB0LmMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKwogY3J5cHRvL3Rlc3RtZ3IuYyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDE4ICsKIGNyeXB0by90ZXN0bWdyLmggICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgMTYxNyArKysrKysrKysrKysrKysrKysKIGNyeXB0by94Y3RyLmMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIwMiArKysKIGluY2x1ZGUvY3J5cHRv L3BvbHl2YWwuaCAgICAgICAgICAgICAgICAgICAgIHwgICAyMiArCiBpbmNsdWRlL2NyeXB0by94 Y3RyLmggICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTkgKwogMjIgZmlsZXMgY2hhbmdlZCwg NDQ0OSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGFy Y2gvYXJtNjQvY3J5cHRvL3BvbHl2YWwtY2UtY29yZS5TCiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJj aC9hcm02NC9jcnlwdG8vcG9seXZhbC1jZS1nbHVlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNo L3g4Ni9jcnlwdG8vYWVzX3hjdHJieThfYXZ4LXg4Nl82NC5TCiBjcmVhdGUgbW9kZSAxMDA2NDQg YXJjaC94ODYvY3J5cHRvL3BvbHl2YWwtY2xtdWxuaS1pbnRlbF9hc20uUwogY3JlYXRlIG1vZGUg MTAwNjQ0IGFyY2gveDg2L2NyeXB0by9wb2x5dmFsLWNsbXVsbmktaW50ZWxfZ2x1ZS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgY3J5cHRvL2hjdHIyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjcnlwdG8v cG9seXZhbC1nZW5lcmljLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjcnlwdG8veGN0ci5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9jcnlwdG8vcG9seXZhbC5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgaW5jbHVkZS9jcnlwdG8veGN0ci5oCgotLSAKMi4zNS4wLnJjMC4yMjcuZzAwNzgwYzlhZjQt Z29vZwoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxp bnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFk ZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LWFybS1rZXJuZWwK