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 F3825C433FE for ; Tue, 25 Jan 2022 02:20:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2367701AbiAYCUU (ORCPT ); Mon, 24 Jan 2022 21:20:20 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55786 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S3415339AbiAYBpY (ORCPT ); Mon, 24 Jan 2022 20:45:24 -0500 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C24C6C0A8876 for ; Mon, 24 Jan 2022 17:45:23 -0800 (PST) Received: by mail-yb1-xb49.google.com with SMTP id o131-20020a25d789000000b00614957c60dfso23658091ybg.15 for ; Mon, 24 Jan 2022 17:45:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc:content-transfer-encoding; bh=mvGoHX8iHgEqi3Y0qxZTcI8lZ5QnIKH49VTxvgNkW5U=; b=ghsq5czC6pAvboIx7A5+KrJos8M75omNdKshMGJnnakCqVqRG7LWbr4zcj1s4l6pUf 0iicsNgg9h/VMgw/3O0hdFE0HWGDhwG1RBzZZIR59VlJNVRSr91+6gxKL7wXW1YMCCfn wzN+h37qqxsop7EQrh9Zf+aITGj7/QMbLnp7rOveFijG1ga16pBGLDIUY5P0zPPAvPHn NY8TrNr/OsSzTJRTrds2R71Yao/N+X/0fkLjjmafvLujskq6KwHcK++w/4HxJxlyjwIe 1wNkdRNIUhgzFd/V+VEGHf3uFIgN/i1kxtlnLPV3nsy3UkAI1ivH1j/lFUeyOgwBaM94 +Svg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc:content-transfer-encoding; bh=mvGoHX8iHgEqi3Y0qxZTcI8lZ5QnIKH49VTxvgNkW5U=; b=hPRbcEc5pzFKuT0qGjzfY/vMIKotMz6AGtAjRAGoZoSTh3Mc4wpP77gE/Q5pShkTwm Vz83yaGwf4AZIMXITPzLDx05KB5Kd2HY7uYgORClLTtMpl3D0PiZVQefx6zLHZXnE44j lSJvF1fDSP9ADuuBmsAqjS0RMEVwDvAzLDM+7BkmX6PhvOrjkvSrZRf8z1ueXe3q6YDv SAWLRd+TdzmGUaLXF740a/k43NPbC/1qiScIejIaescGW+ztYvEuL4jnOtISgxUpVFls Lf2b9lwsAB55/Ojo/GZCAnpxMQuIl9PZbpYG96c1Sc9Y20QBehpifuKlfFwj6U+MonIJ x80A== X-Gm-Message-State: AOAM532kI4gCBVZp2702C8TQnass6bTRY3onr8FK2exo2LnvqDd1PJhe 5u6VQK7cgWsHbz3GkOFHlPgBZakMTyZXFRtS8rDImsFIPuTLXqJojEkGEkZh1WHNr4PvuOZnylU xK/gpGbf9MrRJUzk9EkiWuEezZefRSAMaQs1bYmYQvdtYO00FXny3e5LpjYkcERt12lc= X-Google-Smtp-Source: ABdhPJzJTB5HTpnUM7/57NwBREvd9UJjf9ZwEJVsWdZInij/cDXdcRZiOzD+3vQZ3jR2Dja6RrUDjPvzbg== X-Received: from nhuck.c.googlers.com ([fda3:e722:ac3:cc00:14:4d90:c0a8:39cc]) (user=nhuck job=sendgmr) by 2002:a25:e548:: with SMTP id c69mr26496796ybh.516.1643075122931; Mon, 24 Jan 2022 17:45:22 -0800 (PST) Date: Mon, 24 Jan 2022 19:44:18 -0600 In-Reply-To: <20220125014422.80552-1-nhuck@google.com> Message-Id: <20220125014422.80552-4-nhuck@google.com> Mime-Version: 1.0 References: <20220125014422.80552-1-nhuck@google.com> X-Mailer: git-send-email 2.35.0.rc0.227.g00780c9af4-goog Subject: [RFC PATCH 3/7] crypto: hctr2 - Add 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 Add support for HCTR2 as a template. 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. 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. HCTR2 requires POLYVAL and XCTR as components. More information on HCTR2 can be found here: Length-preserving encryption with HCTR2: https://eprint.iacr.org/2021/1441.pdf Signed-off-by: Nathan Huckleberry --- crypto/Kconfig | 11 + crypto/Makefile | 1 + crypto/hctr2.c | 475 ++++++++++++++++++++++++++++ crypto/tcrypt.c | 5 + crypto/testmgr.c | 6 + crypto/testmgr.h | 787 +++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 1285 insertions(+) create mode 100644 crypto/hctr2.c diff --git a/crypto/Kconfig b/crypto/Kconfig index 051060cd5e21..3cdb6c351062 100644 --- a/crypto/Kconfig +++ b/crypto/Kconfig @@ -524,6 +524,17 @@ config CRYPTO_ADIANTUM =20 If unsure, say N. =20 +config CRYPTO_HCTR2 + tristate "HCTR2 support" + select CRYPTO_XCTR + select CRYPTO_POLYVAL + select CRYPTO_MANAGER + help + 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. + config CRYPTO_ESSIV tristate "ESSIV support for block encryption" select CRYPTO_AUTHENC diff --git a/crypto/Makefile b/crypto/Makefile index 561f901a91d4..2dca9dbdede6 100644 --- a/crypto/Makefile +++ b/crypto/Makefile @@ -94,6 +94,7 @@ obj-$(CONFIG_CRYPTO_LRW) +=3D lrw.o obj-$(CONFIG_CRYPTO_XTS) +=3D xts.o obj-$(CONFIG_CRYPTO_CTR) +=3D ctr.o obj-$(CONFIG_CRYPTO_XCTR) +=3D xctr.o +obj-$(CONFIG_CRYPTO_HCTR2) +=3D hctr2.o obj-$(CONFIG_CRYPTO_KEYWRAP) +=3D keywrap.o obj-$(CONFIG_CRYPTO_ADIANTUM) +=3D adiantum.o obj-$(CONFIG_CRYPTO_NHPOLY1305) +=3D nhpoly1305.o diff --git a/crypto/hctr2.c b/crypto/hctr2.c new file mode 100644 index 000000000000..af43f81b68f3 --- /dev/null +++ b/crypto/hctr2.c @@ -0,0 +1,475 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * HCTR2 length-preserving encryption mode + * + * Copyright 2021 Google LLC + */ + + +/* + * 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. + * + * Length-preserving encryption with HCTR2 + * (https://eprint.iacr.org/2021/1441.pdf) + * + * HCTR2 has a strict set of requirements for the hash function. For this + * purpose we only allow POLYVAL. To avoid misuse, XCTR is required as + * specified in the HCTR2 paper, though theoretically there is a larger cl= ass + * of algorithms that could be used. + */ + +#include +#include +#include +#include +#include +#include + +#define BLOCKCIPHER_BLOCK_SIZE 16 + +/* + * The specification allows variable-length tweaks, but Linux's crypto API + * currently only allows algorithms to support a single length. The "natu= ral" + * tweak length for HCTR2 is 16, since that fits into one POLYVAL block fo= r + * the best performance. But longer tweaks are useful for fscrypt, to avo= id + * needing to derive per-file keys. So instead we use two blocks, or 32 b= ytes. + */ +#define TWEAK_SIZE 32 + +struct hctr2_instance_ctx { + struct crypto_cipher_spawn blockcipher_spawn; + struct crypto_skcipher_spawn streamcipher_spawn; + struct crypto_shash_spawn hash_spawn; +}; + +struct hctr2_tfm_ctx { + struct crypto_cipher *blockcipher; + struct crypto_skcipher *streamcipher; + struct crypto_shash *hash; + u8 L[BLOCKCIPHER_BLOCK_SIZE]; +}; + +struct hctr2_request_ctx { + u8 first_block[BLOCKCIPHER_BLOCK_SIZE]; + struct scatterlist *bulk_part_dst; + struct scatterlist *bulk_part_src; + struct scatterlist sg_src[2]; + struct scatterlist sg_dst[2]; + /* Sub-requests, must be last */ + union { + struct shash_desc hash_desc; + struct skcipher_request streamcipher_req; + } u; +}; + +static int hctr2_setkey(struct crypto_skcipher *tfm, const u8 *key, + unsigned int keylen) +{ + struct hctr2_tfm_ctx *tctx =3D crypto_skcipher_ctx(tfm); + u8 hbar[BLOCKCIPHER_BLOCK_SIZE]; + int err; + + crypto_cipher_clear_flags(tctx->blockcipher, CRYPTO_TFM_REQ_MASK); + crypto_cipher_set_flags(tctx->blockcipher, + crypto_skcipher_get_flags(tfm) & + CRYPTO_TFM_REQ_MASK); + err =3D crypto_cipher_setkey(tctx->blockcipher, key, keylen); + if (err) + return err; + + crypto_skcipher_clear_flags(tctx->streamcipher, CRYPTO_TFM_REQ_MASK); + crypto_skcipher_set_flags(tctx->streamcipher, + crypto_skcipher_get_flags(tfm) & + CRYPTO_TFM_REQ_MASK); + err =3D crypto_skcipher_setkey(tctx->streamcipher, key, keylen); + if (err) + return err; + + memset(tctx->L, 0, sizeof(tctx->L)); + memset(hbar, 0, sizeof(hbar)); + tctx->L[0] =3D 0x01; + crypto_cipher_encrypt_one(tctx->blockcipher, tctx->L, tctx->L); + crypto_cipher_encrypt_one(tctx->blockcipher, hbar, hbar); + + crypto_shash_clear_flags(tctx->hash, CRYPTO_TFM_REQ_MASK); + crypto_shash_set_flags(tctx->hash, crypto_skcipher_get_flags(tfm) & + CRYPTO_TFM_REQ_MASK); + err =3D crypto_shash_setkey(tctx->hash, hbar, BLOCKCIPHER_BLOCK_SIZE); + return err; +} + +static int hctr2_hash_tweak(struct skcipher_request *req, u8 *iv) +{ + u64 tweak_length_part[2]; + struct crypto_skcipher *tfm =3D crypto_skcipher_reqtfm(req); + const struct hctr2_tfm_ctx *tctx =3D crypto_skcipher_ctx(tfm); + struct hctr2_request_ctx *rctx =3D skcipher_request_ctx(req); + struct shash_desc *hash_desc =3D &rctx->u.hash_desc; + int err; + + memset(tweak_length_part, 0, sizeof(tweak_length_part)); + if (req->cryptlen % POLYVAL_BLOCK_SIZE =3D=3D 0) + tweak_length_part[0] =3D cpu_to_le64(TWEAK_SIZE * 8 * 2 + 2); + else + tweak_length_part[0] =3D cpu_to_le64(TWEAK_SIZE * 8 * 2 + 3); + + hash_desc->tfm =3D tctx->hash; + err =3D crypto_shash_init(hash_desc); + if (err) + return err; + + err =3D crypto_shash_update(hash_desc, (u8 *)tweak_length_part, sizeof(tw= eak_length_part)); + if (err) + return err; + err =3D crypto_shash_update(hash_desc, iv, TWEAK_SIZE); + return err; +} + +static int hctr2_hash_message(struct skcipher_request *req, + struct scatterlist *sgl, + u8 digest[POLYVAL_DIGEST_SIZE]) +{ + u8 padding[BLOCKCIPHER_BLOCK_SIZE]; + struct hctr2_request_ctx *rctx =3D skcipher_request_ctx(req); + struct shash_desc *hash_desc =3D &rctx->u.hash_desc; + const unsigned int bulk_len =3D req->cryptlen - BLOCKCIPHER_BLOCK_SIZE; + struct sg_mapping_iter miter; + unsigned int remainder =3D bulk_len % BLOCKCIPHER_BLOCK_SIZE; + int err; + + sg_miter_start(&miter, sgl, sg_nents(sgl), + SG_MITER_FROM_SG | SG_MITER_ATOMIC); + while (sg_miter_next(&miter)) { + err =3D crypto_shash_update(hash_desc, miter.addr, miter.length); + if (err) + break; + } + sg_miter_stop(&miter); + if (err) + return err; + + if (remainder) { + memset(padding, 0, BLOCKCIPHER_BLOCK_SIZE); + padding[0] =3D 0x01; + err =3D crypto_shash_update(hash_desc, padding, BLOCKCIPHER_BLOCK_SIZE -= remainder); + if (err) + return err; + } + return crypto_shash_final(hash_desc, digest); +} + +static int hctr2_finish(struct skcipher_request *req) +{ + struct hctr2_request_ctx *rctx =3D skcipher_request_ctx(req); + u8 digest[POLYVAL_DIGEST_SIZE]; + int err; + + err =3D hctr2_hash_tweak(req, req->iv); + if (err) + return err; + err =3D hctr2_hash_message(req, rctx->bulk_part_dst, digest); + if (err) + return err; + crypto_xor(rctx->first_block, digest, BLOCKCIPHER_BLOCK_SIZE); + + scatterwalk_map_and_copy(rctx->first_block, req->dst, + 0, BLOCKCIPHER_BLOCK_SIZE, 1); + return 0; +} + +static void hctr2_streamcipher_done(struct crypto_async_request *areq, + int err) +{ + struct skcipher_request *req =3D areq->data; + + if (!err) + err =3D hctr2_finish(req); + + skcipher_request_complete(req, err); +} + +static int hctr2_crypt(struct skcipher_request *req, bool enc) +{ + struct crypto_skcipher *tfm =3D crypto_skcipher_reqtfm(req); + const struct hctr2_tfm_ctx *tctx =3D crypto_skcipher_ctx(tfm); + struct hctr2_request_ctx *rctx =3D skcipher_request_ctx(req); + u8 digest[POLYVAL_DIGEST_SIZE]; + int bulk_len =3D req->cryptlen - BLOCKCIPHER_BLOCK_SIZE; + int err; + + // Requests must be at least one block + if (req->cryptlen < BLOCKCIPHER_BLOCK_SIZE) + return -EINVAL; + + scatterwalk_map_and_copy(rctx->first_block, req->src, + 0, BLOCKCIPHER_BLOCK_SIZE, 0); + rctx->bulk_part_src =3D scatterwalk_ffwd(rctx->sg_src, req->src, BLOCKCIP= HER_BLOCK_SIZE); + rctx->bulk_part_dst =3D scatterwalk_ffwd(rctx->sg_dst, req->dst, BLOCKCIP= HER_BLOCK_SIZE); + + err =3D hctr2_hash_tweak(req, req->iv); + if (err) + return err; + err =3D hctr2_hash_message(req, rctx->bulk_part_src, digest); + if (err) + return err; + crypto_xor(digest, rctx->first_block, BLOCKCIPHER_BLOCK_SIZE); + + if (enc) + crypto_cipher_encrypt_one(tctx->blockcipher, rctx->first_block, digest); + else + crypto_cipher_decrypt_one(tctx->blockcipher, rctx->first_block, digest); + + crypto_xor(digest, rctx->first_block, BLOCKCIPHER_BLOCK_SIZE); + crypto_xor(digest, tctx->L, BLOCKCIPHER_BLOCK_SIZE); + + skcipher_request_set_tfm(&rctx->u.streamcipher_req, tctx->streamcipher); + skcipher_request_set_crypt(&rctx->u.streamcipher_req, rctx->bulk_part_src= , + rctx->bulk_part_dst, bulk_len, digest); + skcipher_request_set_callback(&rctx->u.streamcipher_req, + req->base.flags, + hctr2_streamcipher_done, req); + return crypto_skcipher_encrypt(&rctx->u.streamcipher_req) ?: + hctr2_finish(req); +} + +static int hctr2_encrypt(struct skcipher_request *req) +{ + return hctr2_crypt(req, true); +} + +static int hctr2_decrypt(struct skcipher_request *req) +{ + return hctr2_crypt(req, false); +} + +static int hctr2_init_tfm(struct crypto_skcipher *tfm) +{ + struct skcipher_instance *inst =3D skcipher_alg_instance(tfm); + struct hctr2_instance_ctx *ictx =3D skcipher_instance_ctx(inst); + struct hctr2_tfm_ctx *tctx =3D crypto_skcipher_ctx(tfm); + struct crypto_skcipher *streamcipher; + struct crypto_cipher *blockcipher; + struct crypto_shash *hash; + unsigned int subreq_size; + int err; + + streamcipher =3D crypto_spawn_skcipher(&ictx->streamcipher_spawn); + if (IS_ERR(streamcipher)) + return PTR_ERR(streamcipher); + + blockcipher =3D crypto_spawn_cipher(&ictx->blockcipher_spawn); + if (IS_ERR(blockcipher)) { + err =3D PTR_ERR(blockcipher); + goto err_free_streamcipher; + } + + hash =3D crypto_spawn_shash(&ictx->hash_spawn); + if (IS_ERR(hash)) { + err =3D PTR_ERR(hash); + goto err_free_blockcipher; + } + + tctx->streamcipher =3D streamcipher; + tctx->blockcipher =3D blockcipher; + tctx->hash =3D hash; + + BUILD_BUG_ON(offsetofend(struct hctr2_request_ctx, u) !=3D + sizeof(struct hctr2_request_ctx)); + subreq_size =3D max(sizeof_field(struct hctr2_request_ctx, u.hash_desc) + + crypto_shash_descsize(hash), sizeof_field(struct + hctr2_request_ctx, u.streamcipher_req) + + crypto_skcipher_reqsize(streamcipher)); + + crypto_skcipher_set_reqsize(tfm, offsetof(struct hctr2_request_ctx, u) + + subreq_size); + return 0; + +err_free_blockcipher: + crypto_free_cipher(blockcipher); +err_free_streamcipher: + crypto_free_skcipher(streamcipher); + return err; +} + +static void hctr2_exit_tfm(struct crypto_skcipher *tfm) +{ + struct hctr2_tfm_ctx *tctx =3D crypto_skcipher_ctx(tfm); + + crypto_free_cipher(tctx->blockcipher); + crypto_free_skcipher(tctx->streamcipher); + crypto_free_shash(tctx->hash); +} + +static void hctr2_free_instance(struct skcipher_instance *inst) +{ + struct hctr2_instance_ctx *ictx =3D skcipher_instance_ctx(inst); + + crypto_drop_cipher(&ictx->blockcipher_spawn); + crypto_drop_skcipher(&ictx->streamcipher_spawn); + crypto_drop_shash(&ictx->hash_spawn); + kfree(inst); +} + +/* + * Check for a supported set of inner algorithms. + * See the comment at the beginning of this file. + */ +static bool hctr2_supported_algorithms(struct skcipher_alg *streamcipher_a= lg, + struct crypto_alg *blockcipher_alg, + struct shash_alg *hash_alg) +{ + if (strncmp(streamcipher_alg->base.cra_name, "xctr(", 4) !=3D 0) + return false; + + if (blockcipher_alg->cra_blocksize !=3D BLOCKCIPHER_BLOCK_SIZE) + return false; + + if (strcmp(hash_alg->base.cra_name, "polyval") !=3D 0) + return false; + + return true; +} + +static int hctr2_create_common(struct crypto_template *tmpl, + struct rtattr **tb, + const char *blockcipher_name, + const char *streamcipher_name, + const char *polyval_name) +{ + u32 mask; + struct skcipher_instance *inst; + struct hctr2_instance_ctx *ictx; + struct skcipher_alg *streamcipher_alg; + struct crypto_alg *blockcipher_alg; + struct shash_alg *hash_alg; + int err; + + err =3D crypto_check_attr_type(tb, CRYPTO_ALG_TYPE_SKCIPHER, &mask); + if (err) + return err; + + inst =3D kzalloc(sizeof(*inst) + sizeof(*ictx), GFP_KERNEL); + if (!inst) + return -ENOMEM; + ictx =3D skcipher_instance_ctx(inst); + + /* Stream cipher, xctr(block_cipher) */ + err =3D crypto_grab_skcipher(&ictx->streamcipher_spawn, + skcipher_crypto_instance(inst), + streamcipher_name, 0, mask); + if (err) + goto err_free_inst; + streamcipher_alg =3D crypto_spawn_skcipher_alg(&ictx->streamcipher_spawn)= ; + + /* Block cipher, e.g. "aes" */ + err =3D crypto_grab_cipher(&ictx->blockcipher_spawn, + skcipher_crypto_instance(inst), + blockcipher_name, 0, mask); + if (err) + goto err_free_inst; + blockcipher_alg =3D crypto_spawn_cipher_alg(&ictx->blockcipher_spawn); + + /* Polyval =CE=B5-=E2=88=86U hash function */ + err =3D crypto_grab_shash(&ictx->hash_spawn, + skcipher_crypto_instance(inst), + polyval_name, 0, mask); + if (err) + goto err_free_inst; + hash_alg =3D crypto_spawn_shash_alg(&ictx->hash_spawn); + + /* Check the set of algorithms */ + if (!hctr2_supported_algorithms(streamcipher_alg, blockcipher_alg, + hash_alg)) { + pr_warn("Unsupported HCTR2 instantiation: (%s,%s,%s)\n", + streamcipher_alg->base.cra_name, + blockcipher_alg->cra_name, hash_alg->base.cra_name); + err =3D -EINVAL; + goto err_free_inst; + } + + /* Instance fields */ + + err =3D -ENAMETOOLONG; + if (snprintf(inst->alg.base.cra_name, CRYPTO_MAX_ALG_NAME, + "hctr2(%s)", blockcipher_alg->cra_name) >=3D CRYPTO_MAX_ALG_NAME) + goto err_free_inst; + if (snprintf(inst->alg.base.cra_driver_name, CRYPTO_MAX_ALG_NAME, + "hctr2(%s,%s,%s)", + blockcipher_alg->cra_driver_name, + streamcipher_alg->base.cra_driver_name, + hash_alg->base.cra_driver_name) >=3D CRYPTO_MAX_ALG_NAME) + goto err_free_inst; + + inst->alg.base.cra_blocksize =3D BLOCKCIPHER_BLOCK_SIZE; + inst->alg.base.cra_ctxsize =3D sizeof(struct hctr2_tfm_ctx); + inst->alg.base.cra_alignmask =3D streamcipher_alg->base.cra_alignmask | + hash_alg->base.cra_alignmask; + /* + * The hash function is called twice, so it is weighted higher than the + * streamcipher and blockcipher. + */ + inst->alg.base.cra_priority =3D (2 * streamcipher_alg->base.cra_priority = + + 4 * hash_alg->base.cra_priority + + blockcipher_alg->cra_priority) / 7; + + inst->alg.setkey =3D hctr2_setkey; + inst->alg.encrypt =3D hctr2_encrypt; + inst->alg.decrypt =3D hctr2_decrypt; + inst->alg.init =3D hctr2_init_tfm; + inst->alg.exit =3D hctr2_exit_tfm; + inst->alg.min_keysize =3D crypto_skcipher_alg_min_keysize(streamcipher_al= g); + inst->alg.max_keysize =3D crypto_skcipher_alg_max_keysize(streamcipher_al= g); + inst->alg.ivsize =3D TWEAK_SIZE; + + inst->free =3D hctr2_free_instance; + + err =3D skcipher_register_instance(tmpl, inst); + if (err) { +err_free_inst: + hctr2_free_instance(inst); + } + return err; +} + +static int hctr2_create(struct crypto_template *tmpl, struct rtattr **tb) +{ + const char *blockcipher_name; + char streamcipher_name[CRYPTO_MAX_ALG_NAME]; + + blockcipher_name =3D crypto_attr_alg_name(tb[1]); + if (IS_ERR(blockcipher_name)) + return PTR_ERR(blockcipher_name); + + if (snprintf(streamcipher_name, CRYPTO_MAX_ALG_NAME, "xctr(%s)", + blockcipher_name) >=3D CRYPTO_MAX_ALG_NAME) + return -ENAMETOOLONG; + return hctr2_create_common(tmpl, tb, blockcipher_name, streamcipher_name,= "polyval"); +} + +/* hctr2(blockcipher_name [, xctr(blockcipher_name)] [, polyval_name]) */ +static struct crypto_template hctr2_tmpl =3D { + .name =3D "hctr2", + .create =3D hctr2_create, + .module =3D THIS_MODULE, +}; + +static int __init hctr2_module_init(void) +{ + return crypto_register_template(&hctr2_tmpl); +} + +static void __exit hctr2_module_exit(void) +{ + crypto_unregister_template(&hctr2_tmpl); +} + +subsys_initcall(hctr2_module_init); +module_exit(hctr2_module_exit); + +MODULE_DESCRIPTION("HCTR2 length-preserving encryption mode"); +MODULE_LICENSE("GPL v2"); +MODULE_ALIAS_CRYPTO("hctr2"); +MODULE_IMPORT_NS(CRYPTO_INTERNAL); diff --git a/crypto/tcrypt.c b/crypto/tcrypt.c index b358a5141218..5af2e859830a 100644 --- a/crypto/tcrypt.c +++ b/crypto/tcrypt.c @@ -2385,6 +2385,11 @@ static int do_test(const char *alg, u32 type, u32 ma= sk, int m, u32 num_mb) 16, 16, aead_speed_template_19, num_mb); break; =20 + case 226: + test_cipher_speed("hctr2(aes)", ENCRYPT, sec, NULL, + 0, speed_template_32); + break; + case 300: if (alg) { test_hash_speed(alg, sec, generic_hash_speed_template); diff --git a/crypto/testmgr.c b/crypto/testmgr.c index a3a24aa07492..fa8f33210358 100644 --- a/crypto/testmgr.c +++ b/crypto/testmgr.c @@ -4994,6 +4994,12 @@ static const struct alg_test_desc alg_test_descs[] = =3D { .suite =3D { .hash =3D __VECS(ghash_tv_template) } + }, { + .alg =3D "hctr2(aes)", + .test =3D alg_test_skcipher, + .suite =3D { + .cipher =3D __VECS(aes_hctr2_tv_template) + } }, { .alg =3D "hmac(md5)", .test =3D alg_test_hash, diff --git a/crypto/testmgr.h b/crypto/testmgr.h index da3736e51982..87e4df6f8ea9 100644 --- a/crypto/testmgr.h +++ b/crypto/testmgr.h @@ -33630,4 +33630,791 @@ static const struct hash_testvec polyval_tv_templ= ate[] =3D { }, }; =20 +/* + * Test vectors generated using https://github.com/google/hctr2 + */ +static const struct cipher_testvec aes_hctr2_tv_template[] =3D { + { + .key =3D "\xe1\x15\x66\x3c\x8d\xc6\x3a\xff" + "\xef\x41\xd7\x47\xa2\xcc\x8a\xba", + .iv =3D "\xc3\xbe\x2a\xcb\xb5\x39\x86\xf1" + "\x91\xad\x6c\xf4\xde\x74\x45\x63" + "\x5c\x7a\xd5\xcc\x8b\x76\xef\x0e" + "\xcf\x2c\x60\x69\x37\xfd\x07\x96", + .ptext =3D "\x65\x75\xae\xd3\xe2\xbc\x43\x5c" + "\xb3\x1a\xd8\x05\xc3\xd0\x56\x29", + .ctext =3D "\x11\x91\xea\x74\x58\xcc\xd5\xa2" + "\xd0\x55\x9e\x3d\xfe\x7f\xc8\xfe", + .klen =3D 16, + .len =3D 16, + }, + { + .key =3D "\x50\xcc\x28\x5c\xaf\x62\xa2\x4e" + "\x02\xf0\xc0\x5e\xc1\x29\x80\xca", + .iv =3D "\x64\xa5\xd5\xf9\xf4\x68\x26\xea" + "\xce\xbb\x6c\xdd\xa5\xef\x39\xb5" + "\x5c\x93\xdf\x1b\x93\x21\xbe\x49" + "\xff\x9e\x86\x4f\x7c\x4d\x51\x15", + .ptext =3D "\x34\xc1\x08\x3e\x9c\x28\x0a\xcf" + "\x33\xdb\x3f\x0d\x05\x27\xa4\xed", + .ctext =3D "\x7c\xae\xbb\x37\x4a\x55\x94\x5b" + "\xc6\x6f\x8f\x9f\x68\x5f\xc7\x62", + .klen =3D 16, + .len =3D 16, + }, + { + .key =3D "\xda\xce\x30\x85\xe7\x06\xe6\x02" + "\x8f\x02\xbf\x9a\x82\x6e\x54\xde", + .iv =3D "\xf6\x7a\x28\xce\xfb\x6c\xb3\xc5" + "\x47\x81\x58\x69\x07\xe5\x22\xdb" + "\x66\x93\xd7\xe9\xbd\x5c\x7f\xf0" + "\x8a\x0b\x07\x09\xbb\xf1\x48\xc4", + .ptext =3D "\x01\xcd\xa4\x47\x8e\x4e\xbc\x7d" + "\xfd\xd8\xe9\xaa\xc7\x37\x25\x3d" + "\x56", + .ctext =3D "\xf3\xb2\x9e\xde\x96\x5d\xf0\xf6" + "\xb6\x43\x57\xc5\x53\xe8\xf9\x05" + "\x87", + .klen =3D 16, + .len =3D 17, + }, + { + .key =3D "\xe1\x22\xee\x5b\x3c\x92\x0e\x52" + "\xd7\x95\x88\xa3\x79\x6c\xf8\xd9", + .iv =3D "\xb8\xd1\xe7\x32\x36\x96\xd6\x44" + "\x9c\x36\xad\x31\x5c\xaa\xf0\x17" + "\x33\x2f\x29\x04\x31\xf5\x46\xc1" + "\x2f\x1b\xfa\xa1\xbd\x86\xc4\xd3", + .ptext =3D "\x87\xd7\xb8\x2d\x12\x62\xed\x41" + "\x30\x7e\xd4\x0c\xfd\xb9\x6d\x8e" + "\x30", + .ctext =3D "\xb6\x6a\x0c\x71\x96\x22\xb9\x40" + "\xa2\x04\x56\x14\x22\xae\xaa\x94" + "\x26", + .klen =3D 16, + .len =3D 17, + }, + { + .key =3D "\xf6\x2b\xab\xec\x04\x4a\x47\xa6" + "\x37\xf0\x50\x3d\x56\xe5\x61\xac", + .iv =3D "\xb7\x6d\x55\x7d\xe2\xf0\x10\x93" + "\x07\x1e\x5a\x9d\xc3\x59\x6f\x98" + "\x11\xde\xdb\x3a\x03\xf4\x0e\xcc" + "\x15\xa4\x1c\xdf\x3c\x55\x89\x27", + .ptext =3D "\xbe\xc6\x74\x4b\xb9\xa1\x43\x86" + "\xc2\x4a\x65\x00\xbf\x43\xe4\x84" + "\x6d\xae\x0a\x3c\xec\x6b\x3d\x43" + "\xcf\x49\x36\x88\x14\x3d\x3c\xfc" + "\xfb\xc1\x58\x1f\x39\x81\x88\xeb" + "\x4e\xa1\xe2\x59\xad\x47\xa3\x61", + .ctext =3D "\x80\x25\x8e\x11\xed\x58\x21\x6f" + "\x34\xe3\xa1\xb8\xc0\x99\x6a\x50" + "\xe0\x18\x23\x4f\x1b\x00\x68\x39" + "\x75\x34\x95\xfb\x9e\xb4\x18\x89" + "\x53\x12\x2c\xe2\xee\x59\x32\xa6" + "\xc5\x3f\xd1\x37\xbc\x12\x40\xbd", + .klen =3D 16, + .len =3D 48, + }, + { + .key =3D "\x39\x4e\x4d\x5c\xd6\x63\xaf\x4b" + "\xcf\xc3\x2c\x53\x8e\x3d\x7b\x3d", + .iv =3D "\x1d\x4a\x01\xa0\x88\xac\xdf\x2c" + "\x34\x88\x13\xef\xa4\xe7\xe5\x2e" + "\x44\xf8\xdc\xff\x74\xd4\x8a\x81" + "\x26\xfe\x50\x57\xca\x0b\x93\x54", + .ptext =3D "\x55\x76\x17\x29\xc6\xd2\xbd\x9c" + "\xf4\xde\x9b\x8e\x71\xf7\xe4\xfd" + "\x60\xc0\xca\xbc\x8a\x70\x31\x9b" + "\x2d\xfd\x92\x51\x31\x4d\x3e\x1b" + "\xdf\x66\x46\xba\x28\x1f\x08\xc1" + "\x1b\xd0\x8a\x5c\x8e\xe1\xcf\x79", + .ctext =3D "\x34\x1f\x14\x61\x16\xd8\xf0\x73" + "\x38\xe7\x5f\xc8\x64\x70\x28\x93" + "\x9b\xb3\x1c\xfe\x62\xbf\x8e\x3c" + "\xf5\x17\x2d\xfc\x0d\x3b\x61\xf7" + "\x30\x25\x4d\x5b\x0c\x84\x5f\x86" + "\x94\xa1\xbe\xa5\x6d\xa9\x10\x78", + .klen =3D 16, + .len =3D 48, + }, + { + .key =3D "\x3e\x08\x5d\x64\x6c\x98\xec\xec" + "\x70\x0e\x0d\xa1\x41\x20\x99\x82", + .iv =3D "\x11\xb7\x77\x91\x0d\x99\xd9\x8d" + "\x35\x3a\xf7\x14\x6b\x09\x37\xe5" + "\xad\x51\xf6\xc3\x96\x4b\x64\x56" + "\xa8\xbd\x81\xcc\xbe\x94\xaf\xe4", + .ptext =3D "\xff\x8d\xb9\xc0\xe3\x69\xb3\xb2" + "\x8b\x11\x26\xb3\x11\xec\xfb\xb9" + "\x9c\xc1\x71\xd6\xe3\x26\x0e\xe0" + "\x68\x40\x60\xb9\x3a\x63\x56\x8a" + "\x9e\xc1\xf0\x10\xb1\x64\x32\x70" + "\xf8\xcd\xc6\xc4\x49\x4c\xe1\xce" + "\xf3\xe1\x03\xf8\x35\xae\xe0\x5e" + "\xef\x5f\xbc\x41\x75\x26\x13\xcc" + "\x37\x85\xdf\xc0\x5d\xa6\x47\x98" + "\xf1\x97\x52\x58\x04\xe6\xb5\x01" + "\xc0\xb8\x17\x6d\x74\xbd\x9a\xdf" + "\xa4\x37\x94\x86\xb0\x13\x83\x28" + "\xc9\xa2\x07\x3f\xb5\xb2\x72\x40" + "\x0e\x60\xdf\x57\x07\xb7\x2c\x66" + "\x10\x3f\x8d\xdd\x30\x0a\x47\xd5" + "\xe8\x9d\xfb\xa1\xaf\x53\xd7\x05" + "\xc7\xd2\xba\xe7\x2c\xa0\xbf\xb8" + "\xd1\x93\xe7\x41\x82\xa3\x41\x3a" + "\xaf\x12\xd6\xf8\x34\xda\x92\x46" + "\xad\xa2\x2f\xf6\x7e\x46\x96\xd8" + "\x03\xf3\x49\x64\xde\xd8\x06\x8b" + "\xa0\xbc\x63\x35\x38\xb6\x6b\xda" + "\x5b\x50\x3f\x13\xa5\x84\x1b\x1b" + "\x66\x89\x95\xb7\xc2\x16\x3c\xe9" + "\x24\xb0\x8c\x6f\x49\xef\xf7\x28" + "\x6a\x24\xfd\xbe\x25\xe2\xb4\x90" + "\x77\x44\x08\xb8\xda\xd2\xde\x2c" + "\xa0\x57\x45\x57\x29\x47\x6b\x89" + "\x4a\xf6\xa7\x2a\xc3\x9e\x7b\xc8" + "\xfd\x9f\x89\xab\xee\x6d\xa3\xb4" + "\x23\x90\x7a\xe9\x89\xa0\xc7\xb3" + "\x17\x41\x87\x91\xfc\x97\x42", + .ctext =3D "\xfc\x9b\x96\x66\xc4\x82\x2a\x4a" + "\xb1\x24\xba\xc7\x78\x5f\x79\xc1" + "\x57\x2e\x47\x29\x4d\x7b\xd2\x9a" + "\xbd\xc6\xc1\x26\x7b\x8e\x3f\x5d" + "\xd4\xb4\x9f\x6a\x02\x24\x4a\xad" + "\x0c\x00\x1b\xdf\x92\xc5\x8a\xe1" + "\x77\x79\xcc\xd5\x20\xbf\x83\xf4" + "\x4b\xad\x11\xbf\xdb\x47\x65\x70" + "\x43\xf3\x65\xdf\xb7\xdc\xb2\xb9" + "\xaa\x3f\xb3\xdf\x79\x69\x0d\xa0" + "\x86\x1c\xba\x48\x0b\x01\xc1\x88" + "\xdf\x03\xb1\x06\x3c\x1d\x56\xa1" + "\x8e\x98\xc1\xa6\x95\xa2\x5b\x72" + "\x76\x59\xd2\x26\x25\xcd\xef\x7c" + "\xc9\x60\xea\x43\xd1\x12\x8a\x8a" + "\x63\x12\x78\xcb\x2f\x88\x1e\x88" + "\x78\x59\xde\xba\x4d\x2c\x78\x61" + "\x75\x37\x54\xfd\x80\xc7\x5e\x98" + "\xcf\x14\x62\x8e\xfb\x72\xee\x4d" + "\x9f\xaf\x8b\x09\xe5\x21\x0a\x91" + "\x8f\x88\x87\xd5\xb1\x84\xab\x18" + "\x08\x57\xed\x72\x35\xa6\x0e\xc6" + "\xff\xcb\xfe\x2c\x48\x39\x14\x44" + "\xba\x59\x32\x3a\x2d\xc4\x5f\xcb" + "\xbe\x68\x8e\x7b\xee\x21\xa4\x32" + "\x11\xa0\x99\xfd\x90\xde\x59\x43" + "\xeb\xed\xd5\x87\x68\x46\xc6\xde" + "\x0b\x07\x17\x59\x6a\xab\xca\x15" + "\x65\x02\x01\xb6\x71\x8c\x3b\xaa" + "\x18\x3b\x30\xae\x38\x5b\x2c\x74" + "\xd4\xee\x4a\xfc\xf7\x1b\x09\xd4" + "\xda\x8b\x1d\x5d\x6f\x21\x6c", + .klen =3D 16, + .len =3D 255, + }, + { + .key =3D "\x9f\xd3\xd5\x1a\x0e\xba\x32\x0a" + "\x1d\xa5\xd1\x14\x16\x58\xcd\xdd", + .iv =3D "\x10\x52\x8d\x53\x3f\x54\x11\x01" + "\x19\x3b\xd8\xa5\xe8\x38\x77\x3e" + "\xd4\x58\xff\x0a\x13\xd2\x09\xe4" + "\x77\x38\x28\x46\xf9\x16\xd3\xfc", + .ptext =3D "\x5d\x3f\x4a\xa1\x16\x9a\x3c\xdf" + "\xd8\x21\x51\xdc\xb7\x3c\x12\xda" + "\xd1\xe1\xba\x38\xf1\xc1\x9c\x84" + "\xc7\x48\xe1\xd5\xed\x84\x3b\xcd" + "\xc7\x1b\xe1\x5d\x1b\xa5\x79\x3c" + "\xe3\x7e\xab\xf7\xac\x71\x49\x1d" + "\x25\x2b\x8f\x40\xe8\x89\x45\x67" + "\x39\x33\xd3\x27\xd5\xff\x16\xb5" + "\x46\x0f\x37\x05\x14\x87\xa7\xc2" + "\x35\x7f\x66\x98\x48\x5c\x1a\x05" + "\x6c\x0a\xd8\xe4\x28\x1e\x99\x6e" + "\x84\x6c\x13\x07\xc8\x23\xcd\x22" + "\x80\xb8\xc7\x9e\xbe\xcb\xed\x0b" + "\xfa\x9d\xf5\x4b\x4f\x0c\x6e\x4e" + "\x1b\xec\x8c\xb1\x9b\x64\xaa\x65" + "\x5e\x91\x45\xda\x87\x14\x89\x43" + "\x61\xb8\xc7\x68\xc6\xe0\x53\x0a" + "\x71\xef\xac\xc2\xb2\x41\xd9\x4e" + "\x41\xf8\xb3\xee\x2f\x59\xff\x05" + "\x91\x77\x34\xe1\xb2\x1c\x46\x95" + "\xf2\xea\x2a\x15\x70\x97\xa3\x7f" + "\xc3\x68\x23\x73\xd4\x86\xf7\xe0" + "\xc6\x6a\xbd\x70\x63\x0a\x5e\xe2" + "\xba\xe6\x7c\x18\x71\xc4\x1d\x07" + "\x40\xb0\x18\xd7\x52\xc1\x9e\x4e" + "\x8a\x3a\x75\xc3\xf5\xf1\xf9\x8e" + "\x00\x0e\x4f\x7f\x17\x16\x38\x73" + "\xf6\x91\x29\x2a\xcb\xf8\xee\x1a" + "\xf8\x09\x75\x0a\xaf\xb1\x47\x7c" + "\xcf\xca\xd3\xbd\x28\x8b\xa6\xe5" + "\x33\xd1\x63\xea\x89\x1d\xa3\x63" + "\x9d\x1f\xb2\xc6\x02\x50\x1b", + .ctext =3D "\xd3\x8c\xee\xa6\x45\x11\xaf\x8a" + "\x21\x75\x1f\x84\x1d\x6f\x3f\xbe" + "\xc6\x07\xdd\x64\x6c\x99\x9b\x8b" + "\xfa\xef\x41\xf2\xe1\x04\xe2\x0a" + "\x12\x88\x96\x98\x74\xd4\x6c\x5d" + "\x6b\xf4\x8b\xfc\x87\x5f\x4b\x70" + "\x29\x07\x13\x49\xad\x52\x3e\xa7" + "\x88\x20\x8a\xdd\x5d\xe9\x2d\x86" + "\x5c\x1e\x33\x82\x07\xe9\x04\xa4" + "\x72\xbd\xa8\xb3\x67\x2e\xc0\x80" + "\xea\x9d\x44\x55\x36\xca\xb6\xb4" + "\x0d\x5e\xaf\x87\x63\x45\x65\xd8" + "\x90\x58\xc3\xec\x27\x5a\x7f\x25" + "\x1b\x14\x08\x2b\xed\x14\xe2\x80" + "\x53\xc2\xed\xbf\x88\xf3\x74\x8d" + "\x79\x99\x9e\x7f\x18\x2b\x1f\x70" + "\x09\x46\x88\x41\x1b\xce\xc5\x69" + "\xd8\xc8\x83\xfa\x32\xd8\xb7\xab" + "\x87\xae\xda\x36\xc1\x75\xba\xf5" + "\xd3\x22\xcc\x0a\x20\x62\x37\xfd" + "\xc1\xe1\x6c\xc6\xac\x4b\x1e\x34" + "\x4f\xbe\x09\xea\xb1\xd3\x30\xa6" + "\xf1\xd8\x51\x0f\x83\xf7\x36\x83" + "\x17\x23\x25\x6c\xb4\x5f\x4f\x76" + "\xde\x0a\x09\x54\xf3\xd2\xca\x52" + "\xc2\xec\x6a\x9c\x0a\xa0\x59\x8e" + "\xbe\x09\x02\x83\xcf\x4e\xe3\x59" + "\x6d\xff\x45\x49\x1f\xa7\x32\x67" + "\x1d\xb4\xdf\x60\xb9\x30\xd4\x64" + "\xfc\x47\xf7\xe7\xfa\x94\x23\x60" + "\xd5\x47\xe4\x4e\x61\x45\x7e\x48" + "\xd3\xad\xad\x97\x61\x1c\x32", + .klen =3D 16, + .len =3D 255, + }, + { + .key =3D "\xea\x2f\x51\x6f\x31\xe9\x2f\x7b" + "\x68\xc8\x1a\xd5\xfa\x9c\xe1\x40" + "\x95\xe9\x47\xcb\xa1\x9a\xf7\xee", + .iv =3D "\xe6\x77\x52\x55\x9c\xa7\xc1\x91" + "\x02\xa7\x32\x87\x76\x91\x72\x2e" + "\xf3\xa4\x84\x33\xe8\xa5\xa3\x57" + "\x42\x5d\xd5\x6c\xaa\xf1\xfd\x53", + .ptext =3D "\x22\xd0\xff\xba\xad\x43\xaf\x63" + "\x0e\xb1\x0c\x60\x0f\x64\x92\x5a", + .ctext =3D "\x21\x85\xb9\xb8\xdf\x5e\x8b\x70" + "\xfe\x79\xc0\x5d\x9d\x89\x30\xdc", + .klen =3D 24, + .len =3D 16, + }, + { + .key =3D "\x44\x18\xc4\xb2\x25\xe5\xa6\x90" + "\x7a\x12\x8c\x35\x6a\x98\x44\x3c" + "\x4b\x67\x18\x24\x34\xce\x30\x7e", + .iv =3D "\x8e\xf9\x6d\xf5\x52\x06\xb5\x07" + "\xd1\x13\xfe\x36\x87\xee\x6e\x13" + "\xea\xde\x54\xaf\x49\xc6\x4f\xce" + "\xe1\x86\x8e\xcd\x22\x12\xde\x39", + .ptext =3D "\x34\x14\x8d\x92\xa6\x83\xd5\x87" + "\x89\xfd\xf7\xb1\x8f\x93\x0b\x1c", + .ctext =3D "\x4f\xdd\xc7\x22\x85\x33\x9d\x34" + "\xc8\x9b\x88\xfd\x8f\x40\xab\x42", + .klen =3D 24, + .len =3D 16, + }, + { + .key =3D "\x24\xf6\xe1\x62\xe5\xaf\x99\xda" + "\x84\xec\x41\xb0\xa3\x0b\xd5\xa8" + "\xa0\x3e\x7b\xa6\xdd\x6c\x8f\xa8", + .iv =3D "\x7f\x80\x24\x62\x32\xdd\xab\x66" + "\xf2\x87\x29\x24\xec\xd2\x4b\x9f" + "\x0c\x33\x52\xd9\xe0\xcc\x6e\xe4" + "\x90\x85\x43\x97\xc4\x62\x14\x33", + .ptext =3D "\xef\x58\xe7\x7f\xa9\xd9\xb8\xd7" + "\xa2\x91\x97\x07\x27\x9e\xba\xe8" + "\xaa", + .ctext =3D "\xd7\xc3\x81\x91\xf2\x40\x17\x73" + "\x3e\x3b\x1c\x2a\x8e\x11\x9c\x17" + "\xf1", + .klen =3D 24, + .len =3D 17, + }, + { + .key =3D "\xa6\xc2\x58\x49\x28\x50\x8c\x88" + "\x84\x9c\xb1\x70\x18\x99\x9c\x0d" + "\x08\x60\x4f\xb1\xcf\x90\x66\x72", + .iv =3D "\x80\x14\x7f\x97\x64\x17\x55\xef" + "\x4b\x1b\xce\x2b\x09\x20\x5a\xed" + "\x96\xdc\xa6\x6e\xb0\x59\x54\x00" + "\x1d\x26\x3d\x96\xc2\x3e\x73\x05", + .ptext =3D "\x49\x8b\x90\x34\x41\x63\xc6\x9a" + "\x07\xe0\x9d\x86\x77\x54\x63\x6d" + "\x6a", + .ctext =3D "\xcb\x94\xfa\xc3\xeb\xf8\x37\xfe" + "\x15\x76\x03\xd9\x67\xe4\x90\x28" + "\x0c", + .klen =3D 24, + .len =3D 17, + }, + { + .key =3D "\xbf\xaf\xd7\x67\x8c\x47\xcf\x21" + "\x8a\xa5\xdd\x32\x25\x47\xbe\x4f" + "\xf1\x3a\x0b\xa6\xaa\x2d\xcf\x09", + .iv =3D "\xd9\xe8\xf0\x92\x4e\xfc\x1d\xf2" + "\x81\x37\x7c\x8f\xf1\x59\x09\x20" + "\xf4\x46\x51\x86\x4f\x54\x8b\x32" + "\x58\xd1\x99\x8b\x8c\x03\xeb\x5d", + .ptext =3D "\xcd\x64\x90\xf9\x7c\xe5\x0e\x5a" + "\x75\xe7\x8e\x39\x86\xec\x20\x43" + "\x8a\x49\x09\x15\x47\xf4\x3c\x89" + "\x21\xeb\xcf\x4e\xcf\x91\xb5\x40" + "\xcd\xe5\x4d\x5c\x6f\xf2\xd2\x80" + "\xfa\xab\xb3\x76\x9f\x7f\x84\x0a", + .ctext =3D "\x44\x98\x64\x15\xb7\x0b\x80\xa3" + "\xb9\xca\x23\xff\x3b\x0b\x68\x74" + "\xbb\x3e\x20\x19\x9f\x28\x71\x2a" + "\x48\x3c\x7c\xe2\xef\xb5\x10\xac" + "\x82\x9f\xcd\x08\x8f\x6b\x16\x6f" + "\xc3\xbb\x07\xfb\x3c\xb0\x1b\x27", + .klen =3D 24, + .len =3D 48, + }, + { + .key =3D "\xbe\xbb\x77\x46\x06\x9c\xf4\x4d" + "\x37\x9a\xe6\x3f\x27\xa7\x3b\x6e" + "\x7a\x36\xb8\xb3\xff\xba\x51\xcc", + .iv =3D "\x06\xbc\x8f\x66\x6a\xbe\xed\x5e" + "\x51\xf2\x72\x11\x3a\x56\x85\x21" + "\x44\xfe\xec\x47\x2b\x09\xb8\x6f" + "\x08\x85\x2a\x93\xa3\xc3\xab\x5e", + .ptext =3D "\xc7\x74\x42\xf1\xea\xc5\x37\x2d" + "\xc2\xa0\xf6\xd5\x5a\x9a\xbb\xa0" + "\xb2\xfd\x54\x8e\x98\xa0\xea\xc7" + "\x79\x09\x65\x63\xa0\x2e\x82\x4e" + "\x49\x9c\x39\x67\xd0\x0d\x80\x3e" + "\x1a\x86\x84\x2b\x20\x23\xdf\xa7", + .ctext =3D "\x5f\xa3\x11\xca\x93\xfa\x24\x3a" + "\x24\xb6\xcf\x1e\x76\xbc\xab\xc4" + "\xf3\x24\xa0\x27\xac\x90\xec\xe9" + "\x73\x28\x7d\x35\x67\xfe\x2e\xa8" + "\x89\x77\xac\xeb\xc3\x68\x36\xf4" + "\x8f\x80\x2c\xf1\x80\xef\x49\x49", + .klen =3D 24, + .len =3D 48, + }, + { + .key =3D "\x76\xe4\x8f\xf0\x60\x7b\xe4\x0d" + "\xb9\x06\xfa\x90\x38\x55\x0a\x98" + "\xaa\x7d\x97\xfe\x8d\x77\x39\x9f", + .iv =3D "\xf7\x2c\x39\x70\xa4\x28\x66\x45" + "\xea\x62\x1b\xdd\xb0\xfa\x6c\x50" + "\xcf\xf7\x4a\x57\xdf\x1e\xa4\xf0" + "\x0f\xf6\x8a\x71\x15\xcf\xa0\x29", + .ptext =3D "\x9c\x15\x7c\xc0\x70\x49\x65\xac" + "\x95\x67\x37\x40\x8b\x0e\x9d\xa9" + "\x66\x0a\x5e\x32\x58\xa1\x40\x8d" + "\x46\xa2\xbd\x4f\x5a\xb1\x5f\xd5" + "\x9d\x8e\x55\x18\x7e\x43\x43\xa9" + "\x55\x1a\x3f\x50\x51\x7a\xc9\x1b" + "\x2f\xd8\x36\x35\x41\xf3\x3d\x42" + "\x7e\x3e\xd5\x94\x6b\xa7\xa0\xc6" + "\x02\x35\xba\x59\x7a\xc3\xda\xca" + "\xa3\x73\x18\x6a\x57\x2f\xbd\xe8" + "\xc8\x3a\x6c\x07\x0e\xea\x6c\x17" + "\x4f\x3a\xcc\xc3\x70\x89\x99\x23" + "\x78\x38\xd7\x60\x51\x5a\xe5\xec" + "\x19\x98\x5b\x78\x9f\xb8\xb9\x00" + "\x7c\xf8\xab\x23\x59\xf0\x71\xcf" + "\x7f\x06\x11\x55\x85\x94\xe5\x50" + "\x0d\x01\x93\xcb\xde\x58\x90\x00" + "\xc5\x34\x7e\xda\x26\xbf\x58\x15" + "\x80\x33\x34\x56\x86\xaa\xc8\x6e" + "\x2b\x47\x98\xb6\xc9\x1c\xa4\xb6" + "\xac\xf1\x76\xfe\x33\x57\x2d\xad" + "\x42\x15\x34\xba\x71\x96\xfe\x0e" + "\xba\xee\x68\x36\x3a\xe0\xe7\xc7" + "\x3e\x6d\x54\xda\x77\x04\x26\x2c" + "\xc1\x45\x16\xd9\xdd\x89\xd3\xf1" + "\xcc\xfc\x19\x44\x6c\x99\xb2\x44" + "\x1f\x89\x34\x21\xb1\x8d\x02\x5c" + "\x76\x1e\x27\x84\xf9\xd4\xa3\x03" + "\x1d\x26\xc1\x39\xb6\x67\x6c\xad" + "\xb5\x69\x6b\x54\x65\xf6\x9c\xcf" + "\xaf\x00\x12\x87\x21\x2f\x68\xcb" + "\xd2\x76\xc1\x43\xce\x24\xc2", + .ctext =3D "\x40\xff\x83\x8e\xef\x98\xa1\xcb" + "\x57\x3f\xb6\xf3\x26\x99\x96\xe2" + "\xd0\x68\x80\x32\x2c\x58\x9a\xd6" + "\x24\xd0\x21\x17\xc0\x6e\x44\xb6" + "\xa7\xa0\xdd\xde\xce\x18\x5a\x17" + "\xf2\xc1\x98\xab\x61\xcd\x70\x0a" + "\x4d\xef\x9f\xa6\x9d\x8b\x45\x81" + "\x23\x90\x65\xe0\x45\x2c\x74\xc5" + "\x7d\xe8\x43\xec\x5a\xfa\x54\x64" + "\x6f\xfc\x4b\x6c\x83\xec\x1d\xbc" + "\x39\x19\x2f\xa7\xe6\x46\x5a\x4e" + "\x17\x6d\x0b\xf2\x7a\x14\x0c\x50" + "\x8e\x83\x00\xb7\xbb\x65\x77\xfd" + "\x72\xb3\xea\xe4\xde\x54\xd6\xc0" + "\x8c\x02\xb2\xdb\xc3\xe6\x46\xd5" + "\xfb\xb4\x03\x29\xdc\xa4\x64\xe3" + "\xe8\x20\xb5\x4d\x81\x44\x20\xc8" + "\x29\x41\xce\x05\x3a\xd6\xe3\x0e" + "\x0b\xea\xdf\x50\xea\x91\xaa\x9b" + "\xc4\x9c\x09\x4a\x42\xfa\xef\x38" + "\x3b\xdf\xfb\x5b\x95\xa2\x9a\xbd" + "\x10\x55\x61\x4a\xee\x8b\xda\x1f" + "\x23\x69\xce\x6e\x92\x64\x3e\x32" + "\x4d\x80\x23\xf1\x43\xd7\x01\x54" + "\x6f\x18\x4c\x53\x91\xd5\xaa\xeb" + "\x17\x73\x92\x7f\x10\x7b\x57\x02" + "\x8e\x6f\xce\x63\x83\x6b\x12\xba" + "\xbc\x23\xcb\x95\x3a\x1f\x16\xe5" + "\x21\xf7\x52\x17\x43\x28\x52\xaf" + "\x2e\x6f\x7f\x36\xe6\x0c\x31\x90" + "\x57\xf7\x5f\x7c\x06\x3e\x47\x5f" + "\xb8\xc4\x2a\xeb\xd7\x91\xf1", + .klen =3D 24, + .len =3D 255, + }, + { + .key =3D "\x87\x2b\xdd\x36\x2a\x76\x60\xce" + "\xfb\x54\xa7\x5a\x3f\x40\xcd\x10" + "\xc8\x88\x0e\xd8\x83\x31\xd5\x5e", + .iv =3D "\x3b\x6c\x32\xde\x9c\x02\xb6\xa1" + "\x13\xfe\x8d\x4a\x8d\xf8\x15\x8d" + "\x0b\x2c\x14\x1c\x44\xd4\x1f\x7e" + "\xcc\x33\xf0\x03\xa3\x41\x3e\x6d", + .ptext =3D "\x6a\x0c\x6b\x8b\x44\x75\x77\x0b" + "\x7d\x9f\xca\x35\x27\x36\xbf\xe3" + "\xc2\x09\x3e\x6e\x42\xd4\x81\xc2" + "\x4a\xd5\xa3\x00\x5d\x2b\x97\x0a" + "\xe0\xd9\x8b\x10\x79\x74\xf4\x5f" + "\xef\xf0\xc7\x3b\xbc\xbe\x69\xe4" + "\x0f\xb8\xa2\x39\x15\x70\x3a\xa6" + "\x20\x86\x8b\x3c\x6e\xca\xfc\x36" + "\xea\x32\x5f\xa6\x17\x2b\xd3\x24" + "\x65\x69\x9c\x13\x5c\x56\xb6\x14" + "\x3a\x8f\x21\x40\xde\x23\x6f\x8b" + "\x2f\xa8\xa4\x81\x91\xb6\xbe\x7c" + "\x12\x25\x7c\x87\xb8\x74\x6a\xa7" + "\x8d\xa5\xb9\x8c\xb4\xa9\xd2\x6a" + "\xb2\xb3\x6e\x8b\x40\x9f\xf2\x38" + "\xd8\x26\xf1\xfa\x6f\xb9\x29\xfe" + "\x0f\xc1\x4d\x90\xf8\x49\xe1\x72" + "\x70\x63\x35\xdc\xfe\xb4\x72\x06" + "\xae\x7e\xbe\x36\x23\xa2\x4a\x03" + "\x6c\xa8\xa0\x7a\x5c\x44\x60\xc4" + "\x2b\x50\xa1\x19\xa4\x35\xfc\x00" + "\xd1\x0a\x8f\x9c\x54\x5b\xdc\x53" + "\x68\x7b\x7b\x1e\xd0\x8e\xd0\x93" + "\x8f\xaf\xf5\xa2\x40\xe1\x15\x33" + "\x49\x41\xaa\x57\xf3\x13\x1b\xa5" + "\x8a\xab\x01\x2b\x28\xec\x63\x81" + "\x34\x77\xf1\x3f\xc2\x47\x09\x31" + "\xc2\x80\x1c\xa9\x16\x6b\xa5\x0a" + "\x1c\xbe\x23\x0c\x41\x63\xd6\x92" + "\x7f\x3a\x74\x71\x86\x5e\x30\xc1" + "\xc5\xee\x5b\x41\x9a\xed\x43\xab" + "\x10\x40\xc4\xe6\xf3\xaa\xc2", + .ctext =3D "\x45\x61\x53\x5c\x56\x08\xc2\x78" + "\x01\x23\x8d\x9d\x8e\xeb\xca\xcd" + "\xf5\x1f\x01\x3f\xba\x9d\xea\x87" + "\xca\x23\xc5\xa8\xb2\x92\x87\x0d" + "\x62\x8c\x72\x9c\xe8\xa5\x3f\x75" + "\xda\xa4\xd5\x92\x6f\xae\x4e\xeb" + "\xfd\x21\xe6\xa9\x7e\xbf\xed\x85" + "\xbd\x8c\x88\x18\xa8\x79\xd0\x09" + "\x5b\x6b\x96\x32\x63\x1a\x6e\x27" + "\x72\xa3\x7a\xc4\x48\xf3\xed\x04" + "\x5d\xc7\x01\x23\x7c\x36\x57\x57" + "\xf4\x45\xf6\xf6\xc7\x9a\xb2\x2f" + "\x88\x79\xac\xaf\xfd\x52\xa7\x96" + "\x83\x65\x5d\x6b\xa2\x3b\x2b\x17" + "\x6c\xa7\xe3\x03\x2e\x6b\xa5\x80" + "\x32\x0b\x7c\x86\x38\x64\x24\x64" + "\x51\x61\xca\xa8\xdc\x67\x6a\x17" + "\x96\xc8\xbd\xd0\x0f\x99\x78\x75" + "\xbb\x81\xc8\x35\xc1\x5c\x48\x66" + "\x75\x8a\xed\x44\x57\x10\xc9\xd8" + "\x85\x91\xaf\x2b\xdd\xc0\xfc\x7f" + "\x19\x9d\x22\x8f\x94\xe7\xb0\x86" + "\x34\x17\xd3\xe1\x10\x2a\x30\x3a" + "\x4d\x5b\xab\x99\xf5\xf8\x21\x78" + "\x9d\x1b\xba\x1f\xb9\x18\x20\xfa" + "\x12\x09\x65\xb0\x2c\xf0\x0c\x11" + "\x4d\x91\xb0\xa0\x24\xb0\xf8\x61" + "\xe0\x65\xc1\x21\x72\x98\xbc\x29" + "\x92\x85\x2c\xfc\xa1\x0c\xa0\x04" + "\x6d\x21\x3d\x40\x62\xda\x55\x71" + "\xee\xa1\x1e\x5e\xc3\x42\x0b\xa0" + "\x4b\xe5\xbd\x95\xa9\xdf\x70", + .klen =3D 24, + .len =3D 255, + }, + { + .key =3D "\x9e\xeb\xb2\x49\x3c\x1c\xf5\xf4" + "\x6a\x99\xc2\xc4\xdf\xb1\xf4\xdd" + "\x75\x20\x57\xea\x2c\x4f\xcd\xb2" + "\xa5\x3d\x7b\x49\x1e\xab\xfd\x0f", + .iv =3D "\xdf\x63\xd4\xab\xd2\x49\xf3\xd8" + "\x33\x81\x37\x60\x7d\xfa\x73\x08" + "\xd8\x49\x6d\x80\xe8\x2f\x62\x54" + "\xeb\x0e\xa9\x39\x5b\x45\x7f\x8a", + .ptext =3D "\x67\xc9\xf2\x30\x84\x41\x8e\x43" + "\xfb\xf3\xb3\x3e\x79\x36\x7f\xe8", + .ctext =3D "\x27\x38\x78\x47\x16\xd9\x71\x35" + "\x2e\x7e\xdd\x7e\x43\x3c\xb8\x40", + .klen =3D 32, + .len =3D 16, + }, + { + .key =3D "\x50\x4a\xc8\x94\x01\x13\xd3\x0c" + "\xd9\xaa\xf3\x4c\xf8\x3f\x2c\x39" + "\x9e\xec\xc6\xa8\x97\xf2\x8e\x73" + "\x94\xb8\x4c\x40\x03\x28\xaf\xc2", + .iv =3D "\x9e\xaa\x0b\x7f\x12\x2a\xe3\xdf" + "\x05\x03\x93\x1b\xda\xc8\xd7\x98" + "\x8a\xf9\xdf\x63\xb1\xcd\x15\xaa" + "\x02\x8e\x41\xa0\x75\x1d\x17\x0e", + .ptext =3D "\xe2\x8a\x35\xa7\x10\x0d\x65\x6e" + "\xad\x77\xce\x07\xbb\x67\x83\x03", + .ctext =3D "\x81\xc1\x1c\x06\x73\xcb\xc1\xe6" + "\xed\x1f\x5b\xf0\x7d\x8b\x12\xf8", + .klen =3D 32, + .len =3D 16, + }, + { + .key =3D "\x93\xfa\x7e\xe2\x0e\x67\xc4\x39" + "\xe7\xca\x47\x95\x68\x9d\x5e\x5a" + "\x7c\x26\x19\xab\xc6\xca\x6a\x4c" + "\x45\xa6\x96\x42\xae\x6c\xff\xe7", + .iv =3D "\xea\x82\x47\x95\x3b\x22\xa1\x3a" + "\x6a\xca\x24\x4c\x50\x7e\x23\xcd" + "\x0e\x50\xe5\x41\xb6\x65\x29\xd8" + "\x30\x23\x00\xd2\x54\xa7\xd6\x56", + .ptext =3D "\xdb\x1f\x1f\xec\xad\x83\x6e\x5d" + "\x19\xa5\xf6\x3b\xb4\x93\x5a\x57" + "\x6f", + .ctext =3D "\xf1\x46\x6e\x9d\xb3\x01\xf0\x6b" + "\xc2\xac\x57\x88\x48\x6d\x40\x72" + "\x68", + .klen =3D 32, + .len =3D 17, + }, + { + .key =3D "\xbe\xa5\x63\xe5\x3d\xa6\xdd\x83" + "\x12\x4e\x52\x3e\xb7\x47\x13\xc0" + "\x98\x57\x14\x8c\xe9\xbe\x0d\xb4" + "\xa7\x82\x0e\x99\x82\x94\x0f\x60", + .iv =3D "\x36\xdf\x56\x4d\xcf\x6a\xd2\xf4" + "\x35\x92\x3d\xd2\x31\x24\xf8\xa6" + "\x27\x27\xe4\x55\xe2\xe0\xc3\xb5" + "\xe7\x40\x31\xae\x98\xab\xab\x93", + .ptext =3D "\xf4\x54\x01\xb5\x11\xe3\xed\x8d" + "\xa4\xf0\xf7\x3f\xc8\x4b\xac\x7a" + "\xb9", + .ctext =3D "\xa7\xb5\xa4\xaa\x6b\x56\xdb\x79" + "\x30\xa1\x6e\xfe\xa2\x60\xcb\xb3" + "\x10", + .klen =3D 32, + .len =3D 17, + }, + { + .key =3D "\x03\x65\x03\x6e\x4d\xe6\xe8\x4e" + "\x8b\xbe\x22\x19\x48\x31\xee\xd9" + "\xa0\x91\x21\xbe\x62\x89\xde\x78" + "\xd9\xb0\x36\xa3\x3c\xce\x43\xd5", + .iv =3D "\xa9\xc3\x4b\xe7\x0f\xfc\x6d\xbf" + "\x56\x27\x21\x1c\xfc\xd6\x04\x10" + "\x5f\x43\xe2\x30\x35\x29\x6c\x10" + "\x90\xf1\xbf\x61\xed\x0f\x8a\x91", + .ptext =3D "\x07\xaa\x02\x26\xb4\x98\x11\x5e" + "\x33\x41\x21\x51\x51\x63\x2c\x72" + "\x00\xab\x32\xa7\x1c\xc8\x3c\x9c" + "\x25\x0e\x8b\x9a\xdf\x85\xed\x2d" + "\xf4\xf2\xbc\x55\xca\x92\x6d\x22" + "\xfd\x22\x3b\x42\x4c\x0b\x74\xec", + .ctext =3D "\x7b\xb1\x43\x6d\xd8\x72\x6c\xf6" + "\x67\x6a\x00\xc4\xf1\xf0\xf5\xa4" + "\xfc\x60\x91\xab\x46\x0b\x15\xfc" + "\xd7\xc1\x28\x15\xa1\xfc\xf7\x68" + "\x8e\xcc\x27\x62\x00\x64\x56\x72" + "\xa6\x17\xd7\x3f\x67\x80\x10\x58", + .klen =3D 32, + .len =3D 48, + }, + { + .key =3D "\x93\x14\x30\x98\x95\xda\xad\xeb" + "\xb8\x22\xb5\x98\x57\x7c\xfa\x14" + "\x88\x8a\x70\x76\x09\x7d\x03\xb7" + "\xf9\x1d\x5d\x30\x1f\x24\xb2\xce", + .iv =3D "\x47\xb7\x08\xb9\xc1\xf5\x12\x57" + "\x68\x4d\x74\x71\xc3\x0b\x05\xc5" + "\x8d\x00\x48\x9d\x3a\xfc\x85\x05" + "\x49\x82\x96\x95\x09\x1a\x17\x27", + .ptext =3D "\x3f\xf5\x2c\x26\x53\x6c\xdc\x88" + "\x5e\xf3\x2e\x0d\x22\xe4\xef\x4e" + "\xad\xaf\xe5\xf7\x5c\xd3\x84\x0e" + "\xe1\xbb\x19\x0a\xcf\x1e\xb6\xf3" + "\x53\xf3\x25\xa2\x66\x7a\xd2\x97" + "\x58\x39\x7a\xd6\x4b\x7f\x31\x76", + .ctext =3D "\x75\x16\xb1\x9a\xa9\x9d\x12\x78" + "\x5a\xd1\x36\xc5\x11\x4c\x1a\xc5" + "\x9b\x21\x12\x0b\xef\x13\xbc\xd0" + "\x31\x03\xcc\xd9\xf5\x59\x23\xb6" + "\x70\xaf\xc2\x84\x57\x5c\xad\xc7" + "\x89\x6a\xf4\x39\x14\x7e\x0d\x0d", + .klen =3D 32, + .len =3D 48, + }, + { + .key =3D "\x36\x45\x11\xa2\x98\x5f\x96\x7c" + "\xc6\xb4\x94\x31\x0a\x67\x09\x32" + "\x6c\x6f\x6f\x00\xf0\x17\xcb\xac" + "\xa5\xa9\x47\x9e\x2e\x85\x2f\xfa", + .iv =3D "\x28\x88\xaa\x9b\x59\x3b\x1e\x97" + "\x82\xe5\x5c\x9e\x6d\x14\x11\x19" + "\x6e\x38\x8f\xd5\x40\x2b\xca\xf9" + "\x7b\x4c\xe4\xa3\xd0\xd2\x8a\x13", + .ptext =3D "\x95\xd2\xf7\x71\x1b\xca\xa5\x86" + "\xd9\x48\x01\x93\x2f\x79\x55\x29" + "\x71\x13\x15\x0e\xe6\x12\xbc\x4d" + "\x8a\x31\xe3\x40\x2a\xc6\x5e\x0d" + "\x68\xbb\x4a\x62\x8d\xc7\x45\x77" + "\xd2\xb8\xc7\x1d\xf1\xd2\x5d\x97" + "\xcf\xac\x52\xe5\x32\x77\xb6\xda" + "\x30\x85\xcf\x2b\x98\xe9\xaa\x34" + "\x62\xb5\x23\x9e\xb7\xa6\xd4\xe0" + "\xb4\x58\x18\x8c\x4d\xde\x4d\x01" + "\x83\x89\x24\xca\xfb\x11\xd4\x82" + "\x30\x7a\x81\x35\xa0\xb4\xd4\xb6" + "\x84\xea\x47\x91\x8c\x19\x86\x25" + "\xa6\x06\x8d\x78\xe6\xed\x87\xeb" + "\xda\xea\x73\x7c\xbf\x66\xb8\x72" + "\xe3\x0a\xb8\x0c\xcb\x1a\x73\xf1" + "\xa7\xca\x0a\xde\x57\x2b\xbd\x2b" + "\xeb\x8b\x24\x38\x22\xd3\x0e\x1f" + "\x17\xa0\x84\x98\x31\x77\xfd\x34" + "\x6a\x4e\x3d\x84\x4c\x0e\xfb\xed" + "\xc8\x2a\x51\xfa\xd8\x73\x21\x8a" + "\xdb\xb5\xfe\x1f\xee\xc4\xe8\x65" + "\x54\x84\xdd\x96\x6d\xfd\xd3\x31" + "\x77\x36\x52\x6b\x80\x4f\x9e\xb4" + "\xa2\x55\xbf\x66\x41\x49\x4e\x87" + "\xa7\x0c\xca\xe7\xa5\xc5\xf6\x6f" + "\x27\x56\xe2\x48\x22\xdd\x5f\x59" + "\x3c\xf1\x9f\x83\xe5\x2d\xfb\x71" + "\xad\xd1\xae\x1b\x20\x5c\x47\xb7" + "\x3b\xd3\x14\xce\x81\x42\xb1\x0a" + "\xf0\x49\xfa\xc2\xe7\x86\xbf\xcd" + "\xb0\x95\x9f\x8f\x79\x41\x54", + .ctext =3D "\xf6\x57\x51\xc4\x25\x61\x2d\xfa" + "\xd6\xd9\x3f\x9a\x81\x51\xdd\x8e" + "\x3d\xe7\xaa\x2d\xb1\xda\xc8\xa6" + "\x9d\xaa\x3c\xab\x62\xf2\x80\xc3" + "\x2c\xe7\x58\x72\x1d\x44\xc5\x28" + "\x7f\xb4\xf9\xbc\x9c\xb2\xab\x8e" + "\xfa\xd1\x4d\x72\xd9\x79\xf5\xa0" + "\x24\x3e\x90\x25\x31\x14\x38\x45" + "\x59\xc8\xf6\xe2\xc6\xf6\xc1\xa7" + "\xb2\xf8\xa7\xa9\x2b\x6f\x12\x3a" + "\xb0\x81\xa4\x08\x57\x59\xb1\x56" + "\x4c\x8f\x18\x55\x33\x5f\xd6\x6a" + "\xc6\xa0\x4b\xd6\x6b\x64\x3e\x9e" + "\xfd\x66\x16\xe2\xdb\xeb\x5f\xb3" + "\x50\x50\x3e\xde\x8d\x72\x76\x01" + "\xbe\xcc\xc9\x52\x09\x2d\x8d\xe7" + "\xd6\xc3\x66\xdb\x36\x08\xd1\x77" + "\xc8\x73\x46\x26\x24\x29\xbf\x68" + "\x2d\x2a\x99\x43\x56\x55\xe4\x93" + "\xaf\xae\x4d\xe7\x55\x4a\xc0\x45" + "\x26\xeb\x3b\x12\x90\x7c\xdc\xd1" + "\xd5\x6f\x0a\xd0\xa9\xd7\x4b\x89" + "\x0b\x07\xd8\x86\xad\xa1\xc4\x69" + "\x1f\x5e\x8b\xc4\x9e\x91\x41\x25" + "\x56\x98\x69\x78\x3a\x9e\xae\x91" + "\xd8\xd9\xfa\xfb\xff\x81\x25\x09" + "\xfc\xed\x2d\x87\xbc\x04\x62\x97" + "\x35\xe1\x26\xc2\x46\x1c\xcf\xd7" + "\x14\xed\x02\x09\xa5\xb2\xb6\xaa" + "\x27\x4e\x61\xb3\x71\x6b\x47\x16" + "\xb7\xe8\xd4\xaf\x52\xeb\x6a\x6b" + "\xdb\x4c\x65\x21\x9e\x1c\x36", + .klen =3D 32, + .len =3D 255, + }, + { + .key =3D "\x56\x33\x37\x21\xc4\xea\x8b\x88" + "\x67\x5e\xee\xb8\x0b\x6c\x04\x43" + "\x17\xc5\x2b\x8a\x37\x17\x8b\x37" + "\x60\x57\x3f\xa7\x82\xcd\xb9\x09", + .iv =3D "\x88\xee\x9b\x35\x21\x2d\x41\xa1" + "\x16\x0d\x7f\xdf\x57\xc9\xb9\xc3" + "\xf6\x30\x53\xbf\x89\x46\xe6\x87" + "\x60\xc8\x5e\x59\xdd\x8a\x7b\xfe", + .ptext =3D "\x49\xe2\x0a\x4f\x7a\x60\x75\x9b" + "\x95\x98\x2c\xe7\x4f\xb4\x58\xb9" + "\x24\x54\x46\x34\xdf\x58\x31\xe7" + "\x23\xc6\xa2\x60\x4a\xd2\x59\xb6" + "\xeb\x3e\xc2\xf8\xe5\x14\x3c\x6d" + "\x4b\x72\xcb\x5f\xcb\xa7\x47\xb9" + "\x7a\x49\xfc\xf1\xad\x92\x76\x55" + "\xac\x59\xdc\x3a\xc6\x8b\x7c\xdb" + "\x06\xcd\xea\x6a\x34\x51\xb7\xb2" + "\xe5\x39\x3c\x87\x00\x90\xc2\xbb" + "\xb2\xa5\x2c\x58\xc2\x9b\xe3\x77" + "\x95\x82\x50\xcb\x23\xdc\x18\xd8" + "\x4e\xbb\x13\x5d\x35\x3d\x9a\xda" + "\xe4\x75\xa1\x75\x17\x59\x8c\x6a" + "\xb2\x76\x7e\xd4\x45\x31\x0a\x45" + "\x2e\x60\x83\x3d\xdc\x8d\x43\x20" + "\x58\x24\xb2\x9d\xd5\x59\x64\x32" + "\x4e\x6f\xb9\x9c\xde\x77\x4d\x65" + "\xdf\xc0\x7a\xeb\x40\x80\xe8\xe5" + "\xc7\xc1\x77\x3b\xae\x2b\x85\xce" + "\x56\xfa\x43\x41\x96\x23\x8e\xab" + "\xd3\xc8\x65\xef\x0b\xfe\x42\x4c" + "\x3a\x8a\x54\x55\xab\xa3\xf9\x62" + "\x9f\x8e\xbe\x33\x9a\xfe\x6b\x52" + "\xd4\x4c\x93\x84\x7c\x7e\xb1\x5e" + "\x32\xaf\x6e\x21\x44\xd2\x6b\x56" + "\xcd\x2c\x9d\x03\x3b\x50\x1f\x0a" + "\xc3\x98\xff\x3a\x1d\x36\x7e\x6d" + "\xcf\xbc\xe7\xe8\xfc\x24\x55\xfd" + "\x72\x3d\xa7\x3f\x09\xa7\x38\xe6" + "\x57\x8d\xc4\x74\x7f\xd3\x26\x75" + "\xda\xfa\x29\x35\xc1\x31\x82", + .ctext =3D "\x02\x23\x74\x02\x56\xf4\x7b\xc8" + "\x55\x61\xa0\x6b\x68\xff\xde\x87" + "\x9d\x66\x77\x86\x98\x63\xab\xd5" + "\xd6\xf4\x7e\x3b\xf4\xae\x97\x13" + "\x79\xc0\x96\x75\x87\x33\x2a\x0e" + "\xc2\x1a\x13\x90\x5f\x6e\x93\xed" + "\x54\xfe\xee\x05\x48\xae\x20\x2d" + "\xa9\x2b\x98\xa3\xc8\xaf\x17\x6b" + "\x82\x4a\x9a\x7f\xf0\xce\xd9\x26" + "\x16\x28\xeb\xf4\x4b\xab\x7d\x6e" + "\x96\x27\xd2\x90\xbb\x8d\x98\xdc" + "\xb8\x6f\x7a\x98\x67\xef\x1c\xfb" + "\xd0\x23\x1a\x2f\xc9\x58\x4e\xc6" + "\x38\x03\x53\x61\x8e\xff\x55\x46" + "\x47\xe8\x1f\x9d\x66\x95\x9b\x7f" + "\x26\xac\xf2\x61\xa4\x05\x15\xcb" + "\x62\xb6\x6b\x7c\x57\x95\x9d\x25" + "\x9e\x83\xb1\x88\x50\x39\xb5\x34" + "\x8a\x04\x2b\x76\x1b\xb8\x8c\x57" + "\x26\x21\x99\x2e\x93\xc8\x9b\xb2" + "\x31\xe1\xe3\x27\xde\xc8\xf2\xc5" + "\x01\x7a\x45\x38\x6f\xe7\xa0\x9d" + "\x8c\x41\x99\xec\x3d\xb6\xaf\x66" + "\x76\xac\xc8\x78\xb0\xdf\xcf\xce" + "\xa1\x29\x46\x6f\xe3\x35\x4a\x67" + "\x59\x27\x14\xcc\x04\xdb\xb3\x03" + "\xb7\x2d\x8d\xf9\x75\x9e\x59\x42" + "\xe3\xa4\xf8\xf4\x82\x27\xa3\xa9" + "\x79\xac\x6b\x8a\xd8\xdb\x29\x73" + "\x02\xbb\x6f\x85\x00\x92\xea\x59" + "\x30\x1b\x19\xf3\xab\x6e\x99\x9a" + "\xf2\x23\x27\xc6\x59\x5a\x9c", + .klen =3D 32, + .len =3D 255, + }, + +}; + #endif /* _CRYPTO_TESTMGR_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 EA3DFC433EF for ; Tue, 25 Jan 2022 01:47:46 +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:References: Mime-Version:Message-Id:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=wSXDrCUE8fshYp5OwuL8w45wzDiU2llg7aENDqmQUxM=; b=HIUFTn4aIoNHI0wEKONF6L6wYU F+dXmYT3GHo8Hp8aiEiRv4cpzBfMwC69/di8BZJH9c+RDg8cmmIR5p6W4Jk85Co+WCUx7vV8I2hp1 j5sDlFfeMxjopn4Ioql9bYLaSyTB9mBYel15u35ErFd0jr7hdKVM5kL1VaVaN9AmZxJjCnIfBGUd7 QV3zxzkfJUVQqwOwOyi+fN8t4LCS5rQM0ZRyfFfrwsNdgX144r64gpE+MHgOLQUDtyYk+dwqN6yI1 4WGZmbpDODSglqhyw/Qv2NQ0kB2u/x5N6tUdeJFExy8BFGVQxT9QiDQNoCslv/FfYbXKXA/N1c3id PfitZZwQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nCAu9-0066Ky-2o; Tue, 25 Jan 2022 01:45:53 +0000 Received: from mail-yb1-xb49.google.com ([2607:f8b0:4864:20::b49]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nCAth-0066DO-4A for linux-arm-kernel@lists.infradead.org; Tue, 25 Jan 2022 01:45:31 +0000 Received: by mail-yb1-xb49.google.com with SMTP id n2-20020a255902000000b0060f9d75eafeso38693770ybb.1 for ; Mon, 24 Jan 2022 17:45:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc:content-transfer-encoding; bh=mvGoHX8iHgEqi3Y0qxZTcI8lZ5QnIKH49VTxvgNkW5U=; b=ghsq5czC6pAvboIx7A5+KrJos8M75omNdKshMGJnnakCqVqRG7LWbr4zcj1s4l6pUf 0iicsNgg9h/VMgw/3O0hdFE0HWGDhwG1RBzZZIR59VlJNVRSr91+6gxKL7wXW1YMCCfn wzN+h37qqxsop7EQrh9Zf+aITGj7/QMbLnp7rOveFijG1ga16pBGLDIUY5P0zPPAvPHn NY8TrNr/OsSzTJRTrds2R71Yao/N+X/0fkLjjmafvLujskq6KwHcK++w/4HxJxlyjwIe 1wNkdRNIUhgzFd/V+VEGHf3uFIgN/i1kxtlnLPV3nsy3UkAI1ivH1j/lFUeyOgwBaM94 +Svg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc:content-transfer-encoding; bh=mvGoHX8iHgEqi3Y0qxZTcI8lZ5QnIKH49VTxvgNkW5U=; b=cnPZr6CGpq5hoTIn3gd3rVI7rTaXKacRTqd/xD78akxsgr+Hu8QSroZdhON50ni31e VLmoHI2h9qp/euKGm/ZFmc5gZVDHW5loRG2IcshIzxXemzXthJh1BxVIV+Y0QeIkObMk uqJms5uI04i4qmZ/If4xgWZo4LAQWOP8NzrWqt+H590mGwro9nfKyc2zhBIj50RGcgmG XszKUhlLlhL6ni2yTZVk7k4jSre+MDTvpZheU/+VLdzoru/8NFNY+52xfwP4ycKtxH3t fZguMikOKHyconpRb262BqzRcIPWpyxlEPPtVc+411Wsy2J5GEafw+ATVZaN+Ss909RQ 1jrg== X-Gm-Message-State: AOAM5339HjSEHl2SbAaN9WcyA8rVFNUZm8AhPz6G0WMLPgCMb6GeiY0s JXHacWlr2yYNafdW0J+Ahn4zNuNKgA== X-Google-Smtp-Source: ABdhPJzJTB5HTpnUM7/57NwBREvd9UJjf9ZwEJVsWdZInij/cDXdcRZiOzD+3vQZ3jR2Dja6RrUDjPvzbg== X-Received: from nhuck.c.googlers.com ([fda3:e722:ac3:cc00:14:4d90:c0a8:39cc]) (user=nhuck job=sendgmr) by 2002:a25:e548:: with SMTP id c69mr26496796ybh.516.1643075122931; Mon, 24 Jan 2022 17:45:22 -0800 (PST) Date: Mon, 24 Jan 2022 19:44:18 -0600 In-Reply-To: <20220125014422.80552-1-nhuck@google.com> Message-Id: <20220125014422.80552-4-nhuck@google.com> Mime-Version: 1.0 References: <20220125014422.80552-1-nhuck@google.com> X-Mailer: git-send-email 2.35.0.rc0.227.g00780c9af4-goog Subject: [RFC PATCH 3/7] crypto: hctr2 - Add 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_174525_280094_2D4B22D9 X-CRM114-Status: GOOD ( 25.30 ) 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 QWRkIHN1cHBvcnQgZm9yIEhDVFIyIGFzIGEgdGVtcGxhdGUuICBIQ1RSMiBpcyBhIGxlbmd0aC1w cmVzZXJ2aW5nCmVuY3J5cHRpb24gbW9kZSB0aGF0IGlzIGVmZmljaWVudCBvbiBwcm9jZXNzb3Jz IHdpdGggaW5zdHJ1Y3Rpb25zIHRvCmFjY2VsZXJhdGUgQUVTIGFuZCBjYXJyeWxlc3MgbXVsdGlw bGljYXRpb24sIGUuZy4geDg2IHByb2Nlc3NvcnMgd2l0aApBRVMtTkkgYW5kIENMTVVMLCBhbmQg QVJNIHByb2Nlc3NvcnMgd2l0aCB0aGUgQVJNdjggQ3J5cHRvIEV4dGVuc2lvbnMuCgpBcyBhIGxl bmd0aC1wcmVzZXJ2aW5nIGVuY3J5cHRpb24gbW9kZSwgSENUUjIgaXMgc3VpdGFibGUgZm9yCmFw cGxpY2F0aW9ucyBzdWNoIGFzIHN0b3JhZ2UgZW5jcnlwdGlvbiB3aGVyZSBjaXBoZXJ0ZXh0IGV4 cGFuc2lvbiBpcwpub3QgcG9zc2libGUsIGFuZCB0aHVzIGF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlv biBjYW5ub3QgYmUgdXNlZC4KQ3VycmVudGx5LCBzdWNoIGFwcGxpY2F0aW9ucyB1c3VhbGx5IHVz ZSBYVFMsIG9yIGluIHNvbWUgY2FzZXMgQWRpYW50dW0uClhUUyBoYXMgdGhlIGRpc2FkdmFudGFn ZSB0aGF0IGl0IGlzIGEgbmFycm93LWJsb2NrIG1vZGU6IGEgYml0ZmxpcCB3aWxsCm9ubHkgY2hh bmdlIDE2IGJ5dGVzIGluIHRoZSByZXN1bHRpbmcgY2lwaGVydGV4dCBvciBwbGFpbnRleHQuICBU aGlzCnJldmVhbHMgbW9yZSBpbmZvcm1hdGlvbiB0byBhbiBhdHRhY2tlciB0aGFuIG5lY2Vzc2Fy eS4KCkhDVFIyIGlzIGEgd2lkZS1ibG9jayBtb2RlLCBzbyBpdCBwcm92aWRlcyBhIHN0cm9uZ2Vy IHNlY3VyaXR5IHByb3BlcnR5OgphIGJpdGZsaXAgd2lsbCBjaGFuZ2UgdGhlIGVudGlyZSBtZXNz YWdlLiAgSENUUjIgaXMgc29tZXdoYXQgc2ltaWxhciB0bwpBZGlhbnR1bSwgd2hpY2ggaXMgYWxz byBhIHdpZGUtYmxvY2sgbW9kZS4gIEhvd2V2ZXIsIEhDVFIyIGlzIGRlc2lnbmVkCnRvIHRha2Ug YWR2YW50YWdlIG9mIGV4aXN0aW5nIGNyeXB0byBpbnN0cnVjdGlvbnMsIHdoaWxlIEFkaWFudHVt CnRhcmdldHMgZGV2aWNlcyB3aXRob3V0IHN1Y2ggaGFyZHdhcmUgc3VwcG9ydC4gIEFkaWFudHVt IGlzIGFsc28KZGVzaWduZWQgd2l0aCBsb25nZXIgbWVzc2FnZXMgaW4gbWluZCwgd2hpbGUgSENU UjIgaXMgZGVzaWduZWQgdG8gYmUKZWZmaWNpZW50IGV2ZW4gb24gc2hvcnQgbWVzc2FnZXMuCgpI Q1RSMiByZXF1aXJlcyBQT0xZVkFMIGFuZCBYQ1RSIGFzIGNvbXBvbmVudHMuICBNb3JlIGluZm9y bWF0aW9uIG9uCkhDVFIyIGNhbiBiZSBmb3VuZCBoZXJlOiBMZW5ndGgtcHJlc2VydmluZyBlbmNy eXB0aW9uIHdpdGggSENUUjI6Cmh0dHBzOi8vZXByaW50LmlhY3Iub3JnLzIwMjEvMTQ0MS5wZGYK ClNpZ25lZC1vZmYtYnk6IE5hdGhhbiBIdWNrbGViZXJyeSA8bmh1Y2tAZ29vZ2xlLmNvbT4KLS0t CiBjcnlwdG8vS2NvbmZpZyAgIHwgIDExICsKIGNyeXB0by9NYWtlZmlsZSAgfCAgIDEgKwogY3J5 cHRvL2hjdHIyLmMgICB8IDQ3NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBjcnlwdG8v dGNyeXB0LmMgIHwgICA1ICsKIGNyeXB0by90ZXN0bWdyLmMgfCAgIDYgKwogY3J5cHRvL3Rlc3Rt Z3IuaCB8IDc4NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogNiBmaWxlcyBjaGFuZ2VkLCAxMjg1IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBjcnlwdG8vaGN0cjIuYwoKZGlmZiAtLWdpdCBhL2NyeXB0by9LY29uZmlnIGIvY3J5cHRvL0tj b25maWcKaW5kZXggMDUxMDYwY2Q1ZTIxLi4zY2RiNmMzNTEwNjIgMTAwNjQ0Ci0tLSBhL2NyeXB0 by9LY29uZmlnCisrKyBiL2NyeXB0by9LY29uZmlnCkBAIC01MjQsNiArNTI0LDE3IEBAIGNvbmZp ZyBDUllQVE9fQURJQU5UVU0KIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIENSWVBU T19IQ1RSMgorCXRyaXN0YXRlICJIQ1RSMiBzdXBwb3J0IgorCXNlbGVjdCBDUllQVE9fWENUUgor CXNlbGVjdCBDUllQVE9fUE9MWVZBTAorCXNlbGVjdCBDUllQVE9fTUFOQUdFUgorCWhlbHAKKwkg IEhDVFIyIGlzIGEgbGVuZ3RoLXByZXNlcnZpbmcgZW5jcnlwdGlvbiBtb2RlIHRoYXQgaXMgZWZm aWNpZW50IG9uCisJICBwcm9jZXNzb3JzIHdpdGggaW5zdHJ1Y3Rpb25zIHRvIGFjY2VsZXJhdGUg QUVTIGFuZCBjYXJyeWxlc3MKKwkgIG11bHRpcGxpY2F0aW9uLCBlLmcuIHg4NiBwcm9jZXNzb3Jz IHdpdGggQUVTLU5JIGFuZCBDTE1VTCwgYW5kIEFSTQorCSAgcHJvY2Vzc29ycyB3aXRoIHRoZSBB Uk12OCBjcnlwdG8gZXh0ZW5zaW9ucy4KKwogY29uZmlnIENSWVBUT19FU1NJVgogCXRyaXN0YXRl ICJFU1NJViBzdXBwb3J0IGZvciBibG9jayBlbmNyeXB0aW9uIgogCXNlbGVjdCBDUllQVE9fQVVU SEVOQwpkaWZmIC0tZ2l0IGEvY3J5cHRvL01ha2VmaWxlIGIvY3J5cHRvL01ha2VmaWxlCmluZGV4 IDU2MWY5MDFhOTFkNC4uMmRjYTlkYmRlZGU2IDEwMDY0NAotLS0gYS9jcnlwdG8vTWFrZWZpbGUK KysrIGIvY3J5cHRvL01ha2VmaWxlCkBAIC05NCw2ICs5NCw3IEBAIG9iai0kKENPTkZJR19DUllQ VE9fTFJXKSArPSBscncubwogb2JqLSQoQ09ORklHX0NSWVBUT19YVFMpICs9IHh0cy5vCiBvYmot JChDT05GSUdfQ1JZUFRPX0NUUikgKz0gY3RyLm8KIG9iai0kKENPTkZJR19DUllQVE9fWENUUikg Kz0geGN0ci5vCitvYmotJChDT05GSUdfQ1JZUFRPX0hDVFIyKSArPSBoY3RyMi5vCiBvYmotJChD T05GSUdfQ1JZUFRPX0tFWVdSQVApICs9IGtleXdyYXAubwogb2JqLSQoQ09ORklHX0NSWVBUT19B RElBTlRVTSkgKz0gYWRpYW50dW0ubwogb2JqLSQoQ09ORklHX0NSWVBUT19OSFBPTFkxMzA1KSAr PSBuaHBvbHkxMzA1Lm8KZGlmZiAtLWdpdCBhL2NyeXB0by9oY3RyMi5jIGIvY3J5cHRvL2hjdHIy LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hZjQzZjgxYjY4ZjMK LS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vaGN0cjIuYwpAQCAtMCwwICsxLDQ3NSBAQAorLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBIQ1RSMiBsZW5ndGgtcHJl c2VydmluZyBlbmNyeXB0aW9uIG1vZGUKKyAqCisgKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExD CisgKi8KKworCisvKgorICogSENUUjIgaXMgYSBsZW5ndGgtcHJlc2VydmluZyBlbmNyeXB0aW9u IG1vZGUgdGhhdCBpcyBlZmZpY2llbnQgb24KKyAqIHByb2Nlc3NvcnMgd2l0aCBpbnN0cnVjdGlv bnMgdG8gYWNjZWxlcmF0ZSBhZXMgYW5kIGNhcnJ5bGVzcworICogbXVsdGlwbGljYXRpb24sIGUu Zy4geDg2IHByb2Nlc3NvcnMgd2l0aCBBRVMtTkkgYW5kIENMTVVMLCBhbmQgQVJNCisgKiBwcm9j ZXNzb3JzIHdpdGggdGhlIEFSTXY4IGNyeXB0byBleHRlbnNpb25zLgorICoKKyAqIExlbmd0aC1w cmVzZXJ2aW5nIGVuY3J5cHRpb24gd2l0aCBIQ1RSMgorICoJKGh0dHBzOi8vZXByaW50LmlhY3Iu b3JnLzIwMjEvMTQ0MS5wZGYpCisgKgorICoJSENUUjIgaGFzIGEgc3RyaWN0IHNldCBvZiByZXF1 aXJlbWVudHMgZm9yIHRoZSBoYXNoIGZ1bmN0aW9uLiBGb3IgdGhpcworICoJcHVycG9zZSB3ZSBv bmx5IGFsbG93IFBPTFlWQUwuIFRvIGF2b2lkIG1pc3VzZSwgWENUUiBpcyByZXF1aXJlZCBhcwor ICoJc3BlY2lmaWVkIGluIHRoZSBIQ1RSMiBwYXBlciwgdGhvdWdoIHRoZW9yZXRpY2FsbHkgdGhl cmUgaXMgYSBsYXJnZXIgY2xhc3MKKyAqCW9mIGFsZ29yaXRobXMgdGhhdCBjb3VsZCBiZSB1c2Vk LgorICovCisKKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvY2lwaGVyLmg+CisjaW5jbHVkZSA8 Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvc2tjaXBo ZXIuaD4KKyNpbmNsdWRlIDxjcnlwdG8vcG9seXZhbC5oPgorI2luY2x1ZGUgPGNyeXB0by9zY2F0 dGVyd2Fsay5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjZGVmaW5lIEJMT0NLQ0lQ SEVSX0JMT0NLX1NJWkUJCTE2CisKKy8qCisgKiBUaGUgc3BlY2lmaWNhdGlvbiBhbGxvd3MgdmFy aWFibGUtbGVuZ3RoIHR3ZWFrcywgYnV0IExpbnV4J3MgY3J5cHRvIEFQSQorICogY3VycmVudGx5 IG9ubHkgYWxsb3dzIGFsZ29yaXRobXMgdG8gc3VwcG9ydCBhIHNpbmdsZSBsZW5ndGguICBUaGUg Im5hdHVyYWwiCisgKiB0d2VhayBsZW5ndGggZm9yIEhDVFIyIGlzIDE2LCBzaW5jZSB0aGF0IGZp dHMgaW50byBvbmUgUE9MWVZBTCBibG9jayBmb3IKKyAqIHRoZSBiZXN0IHBlcmZvcm1hbmNlLiAg QnV0IGxvbmdlciB0d2Vha3MgYXJlIHVzZWZ1bCBmb3IgZnNjcnlwdCwgdG8gYXZvaWQKKyAqIG5l ZWRpbmcgdG8gZGVyaXZlIHBlci1maWxlIGtleXMuICBTbyBpbnN0ZWFkIHdlIHVzZSB0d28gYmxv Y2tzLCBvciAzMiBieXRlcy4KKyAqLworI2RlZmluZSBUV0VBS19TSVpFCQkzMgorCitzdHJ1Y3Qg aGN0cjJfaW5zdGFuY2VfY3R4IHsKKwlzdHJ1Y3QgY3J5cHRvX2NpcGhlcl9zcGF3biBibG9ja2Np cGhlcl9zcGF3bjsKKwlzdHJ1Y3QgY3J5cHRvX3NrY2lwaGVyX3NwYXduIHN0cmVhbWNpcGhlcl9z cGF3bjsKKwlzdHJ1Y3QgY3J5cHRvX3NoYXNoX3NwYXduIGhhc2hfc3Bhd247Cit9OworCitzdHJ1 Y3QgaGN0cjJfdGZtX2N0eCB7CisJc3RydWN0IGNyeXB0b19jaXBoZXIgKmJsb2NrY2lwaGVyOwor CXN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnN0cmVhbWNpcGhlcjsKKwlzdHJ1Y3QgY3J5cHRvX3No YXNoICpoYXNoOworCXU4IExbQkxPQ0tDSVBIRVJfQkxPQ0tfU0laRV07Cit9OworCitzdHJ1Y3Qg aGN0cjJfcmVxdWVzdF9jdHggeworCXU4IGZpcnN0X2Jsb2NrW0JMT0NLQ0lQSEVSX0JMT0NLX1NJ WkVdOworCXN0cnVjdCBzY2F0dGVybGlzdCAqYnVsa19wYXJ0X2RzdDsKKwlzdHJ1Y3Qgc2NhdHRl cmxpc3QgKmJ1bGtfcGFydF9zcmM7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnX3NyY1syXTsKKwlz dHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dfZHN0WzJdOworCS8qIFN1Yi1yZXF1ZXN0cywgbXVzdCBiZSBs YXN0ICovCisJdW5pb24geworCQlzdHJ1Y3Qgc2hhc2hfZGVzYyBoYXNoX2Rlc2M7CisJCXN0cnVj dCBza2NpcGhlcl9yZXF1ZXN0IHN0cmVhbWNpcGhlcl9yZXE7CisJfSB1OworfTsKKworc3RhdGlj IGludCBoY3RyMl9zZXRrZXkoc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtLCBjb25zdCB1OCAq a2V5LAorCQkJdW5zaWduZWQgaW50IGtleWxlbikKK3sKKwlzdHJ1Y3QgaGN0cjJfdGZtX2N0eCAq dGN0eCA9IGNyeXB0b19za2NpcGhlcl9jdHgodGZtKTsKKwl1OCBoYmFyW0JMT0NLQ0lQSEVSX0JM T0NLX1NJWkVdOworCWludCBlcnI7CisKKwljcnlwdG9fY2lwaGVyX2NsZWFyX2ZsYWdzKHRjdHgt PmJsb2NrY2lwaGVyLCBDUllQVE9fVEZNX1JFUV9NQVNLKTsKKwljcnlwdG9fY2lwaGVyX3NldF9m bGFncyh0Y3R4LT5ibG9ja2NpcGhlciwKKwkJCQljcnlwdG9fc2tjaXBoZXJfZ2V0X2ZsYWdzKHRm bSkgJgorCQkJCUNSWVBUT19URk1fUkVRX01BU0spOworCWVyciA9IGNyeXB0b19jaXBoZXJfc2V0 a2V5KHRjdHgtPmJsb2NrY2lwaGVyLCBrZXksIGtleWxlbik7CisJaWYgKGVycikKKwkJcmV0dXJu IGVycjsKKworCWNyeXB0b19za2NpcGhlcl9jbGVhcl9mbGFncyh0Y3R4LT5zdHJlYW1jaXBoZXIs IENSWVBUT19URk1fUkVRX01BU0spOworCWNyeXB0b19za2NpcGhlcl9zZXRfZmxhZ3ModGN0eC0+ c3RyZWFtY2lwaGVyLAorCQkJCSAgY3J5cHRvX3NrY2lwaGVyX2dldF9mbGFncyh0Zm0pICYKKwkJ CQkgIENSWVBUT19URk1fUkVRX01BU0spOworCWVyciA9IGNyeXB0b19za2NpcGhlcl9zZXRrZXko dGN0eC0+c3RyZWFtY2lwaGVyLCBrZXksIGtleWxlbik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVy cjsKKworCW1lbXNldCh0Y3R4LT5MLCAwLCBzaXplb2YodGN0eC0+TCkpOworCW1lbXNldChoYmFy LCAwLCBzaXplb2YoaGJhcikpOworCXRjdHgtPkxbMF0gPSAweDAxOworCWNyeXB0b19jaXBoZXJf ZW5jcnlwdF9vbmUodGN0eC0+YmxvY2tjaXBoZXIsIHRjdHgtPkwsIHRjdHgtPkwpOworCWNyeXB0 b19jaXBoZXJfZW5jcnlwdF9vbmUodGN0eC0+YmxvY2tjaXBoZXIsIGhiYXIsIGhiYXIpOworCisJ Y3J5cHRvX3NoYXNoX2NsZWFyX2ZsYWdzKHRjdHgtPmhhc2gsIENSWVBUT19URk1fUkVRX01BU0sp OworCWNyeXB0b19zaGFzaF9zZXRfZmxhZ3ModGN0eC0+aGFzaCwgY3J5cHRvX3NrY2lwaGVyX2dl dF9mbGFncyh0Zm0pICYKKwkJCSAgICAgICBDUllQVE9fVEZNX1JFUV9NQVNLKTsKKwllcnIgPSBj cnlwdG9fc2hhc2hfc2V0a2V5KHRjdHgtPmhhc2gsIGhiYXIsIEJMT0NLQ0lQSEVSX0JMT0NLX1NJ WkUpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaGN0cjJfaGFzaF90d2VhayhzdHJ1 Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxLCB1OCAqaXYpCit7CisJdTY0IHR3ZWFrX2xlbmd0aF9w YXJ0WzJdOworCXN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnRmbSA9IGNyeXB0b19za2NpcGhlcl9y ZXF0Zm0ocmVxKTsKKwljb25zdCBzdHJ1Y3QgaGN0cjJfdGZtX2N0eCAqdGN0eCA9IGNyeXB0b19z a2NpcGhlcl9jdHgodGZtKTsKKwlzdHJ1Y3QgaGN0cjJfcmVxdWVzdF9jdHggKnJjdHggPSBza2Np cGhlcl9yZXF1ZXN0X2N0eChyZXEpOworCXN0cnVjdCBzaGFzaF9kZXNjICpoYXNoX2Rlc2MgPSAm cmN0eC0+dS5oYXNoX2Rlc2M7CisJaW50IGVycjsKKworCW1lbXNldCh0d2Vha19sZW5ndGhfcGFy dCwgMCwgc2l6ZW9mKHR3ZWFrX2xlbmd0aF9wYXJ0KSk7CisJaWYgKHJlcS0+Y3J5cHRsZW4gJSBQ T0xZVkFMX0JMT0NLX1NJWkUgPT0gMCkKKwkJdHdlYWtfbGVuZ3RoX3BhcnRbMF0gPSBjcHVfdG9f bGU2NChUV0VBS19TSVpFICogOCAqIDIgKyAyKTsKKwllbHNlCisJCXR3ZWFrX2xlbmd0aF9wYXJ0 WzBdID0gY3B1X3RvX2xlNjQoVFdFQUtfU0laRSAqIDggKiAyICsgMyk7CisKKwloYXNoX2Rlc2Mt PnRmbSA9IHRjdHgtPmhhc2g7CisJZXJyID0gY3J5cHRvX3NoYXNoX2luaXQoaGFzaF9kZXNjKTsK KwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gY3J5cHRvX3NoYXNoX3VwZGF0ZSho YXNoX2Rlc2MsICh1OCAqKXR3ZWFrX2xlbmd0aF9wYXJ0LCBzaXplb2YodHdlYWtfbGVuZ3RoX3Bh cnQpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWVyciA9IGNyeXB0b19zaGFzaF91cGRh dGUoaGFzaF9kZXNjLCBpdiwgVFdFQUtfU0laRSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGlj IGludCBoY3RyMl9oYXNoX21lc3NhZ2Uoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSwKKwkJ CSAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAorCQkJICAgICAgdTggZGlnZXN0W1BPTFlW QUxfRElHRVNUX1NJWkVdKQoreworCXU4IHBhZGRpbmdbQkxPQ0tDSVBIRVJfQkxPQ0tfU0laRV07 CisJc3RydWN0IGhjdHIyX3JlcXVlc3RfY3R4ICpyY3R4ID0gc2tjaXBoZXJfcmVxdWVzdF9jdHgo cmVxKTsKKwlzdHJ1Y3Qgc2hhc2hfZGVzYyAqaGFzaF9kZXNjID0gJnJjdHgtPnUuaGFzaF9kZXNj OworCWNvbnN0IHVuc2lnbmVkIGludCBidWxrX2xlbiA9IHJlcS0+Y3J5cHRsZW4gLSBCTE9DS0NJ UEhFUl9CTE9DS19TSVpFOworCXN0cnVjdCBzZ19tYXBwaW5nX2l0ZXIgbWl0ZXI7CisJdW5zaWdu ZWQgaW50IHJlbWFpbmRlciA9IGJ1bGtfbGVuICUgQkxPQ0tDSVBIRVJfQkxPQ0tfU0laRTsKKwlp bnQgZXJyOworCisJc2dfbWl0ZXJfc3RhcnQoJm1pdGVyLCBzZ2wsIHNnX25lbnRzKHNnbCksCisJ CSAgICAgICBTR19NSVRFUl9GUk9NX1NHIHwgU0dfTUlURVJfQVRPTUlDKTsKKwl3aGlsZSAoc2df bWl0ZXJfbmV4dCgmbWl0ZXIpKSB7CisJCWVyciA9IGNyeXB0b19zaGFzaF91cGRhdGUoaGFzaF9k ZXNjLCBtaXRlci5hZGRyLCBtaXRlci5sZW5ndGgpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJ fQorCXNnX21pdGVyX3N0b3AoJm1pdGVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJ aWYgKHJlbWFpbmRlcikgeworCQltZW1zZXQocGFkZGluZywgMCwgQkxPQ0tDSVBIRVJfQkxPQ0tf U0laRSk7CisJCXBhZGRpbmdbMF0gPSAweDAxOworCQllcnIgPSBjcnlwdG9fc2hhc2hfdXBkYXRl KGhhc2hfZGVzYywgcGFkZGluZywgQkxPQ0tDSVBIRVJfQkxPQ0tfU0laRSAtIHJlbWFpbmRlcik7 CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gY3J5cHRvX3NoYXNoX2Zp bmFsKGhhc2hfZGVzYywgZGlnZXN0KTsKK30KKworc3RhdGljIGludCBoY3RyMl9maW5pc2goc3Ry dWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgaGN0cjJfcmVxdWVzdF9jdHgg KnJjdHggPSBza2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpOworCXU4IGRpZ2VzdFtQT0xZVkFMX0RJ R0VTVF9TSVpFXTsKKwlpbnQgZXJyOworCisJZXJyID0gaGN0cjJfaGFzaF90d2VhayhyZXEsIHJl cS0+aXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZXJyID0gaGN0cjJfaGFzaF9tZXNz YWdlKHJlcSwgcmN0eC0+YnVsa19wYXJ0X2RzdCwgZGlnZXN0KTsKKwlpZiAoZXJyKQorCQlyZXR1 cm4gZXJyOworCWNyeXB0b194b3IocmN0eC0+Zmlyc3RfYmxvY2ssIGRpZ2VzdCwgQkxPQ0tDSVBI RVJfQkxPQ0tfU0laRSk7CisKKwlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkocmN0eC0+Zmlyc3Rf YmxvY2ssIHJlcS0+ZHN0LAorCQkJCSAwLCBCTE9DS0NJUEhFUl9CTE9DS19TSVpFLCAxKTsKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGN0cjJfc3RyZWFtY2lwaGVyX2RvbmUoc3RydWN0 IGNyeXB0b19hc3luY19yZXF1ZXN0ICphcmVxLAorCQkJCSAgICBpbnQgZXJyKQoreworCXN0cnVj dCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEgPSBhcmVxLT5kYXRhOworCisJaWYgKCFlcnIpCisJCWVy ciA9IGhjdHIyX2ZpbmlzaChyZXEpOworCisJc2tjaXBoZXJfcmVxdWVzdF9jb21wbGV0ZShyZXEs IGVycik7Cit9CisKK3N0YXRpYyBpbnQgaGN0cjJfY3J5cHQoc3RydWN0IHNrY2lwaGVyX3JlcXVl c3QgKnJlcSwgYm9vbCBlbmMpCit7CisJc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtID0gY3J5 cHRvX3NrY2lwaGVyX3JlcXRmbShyZXEpOworCWNvbnN0IHN0cnVjdCBoY3RyMl90Zm1fY3R4ICp0 Y3R4ID0gY3J5cHRvX3NrY2lwaGVyX2N0eCh0Zm0pOworCXN0cnVjdCBoY3RyMl9yZXF1ZXN0X2N0 eCAqcmN0eCA9IHNrY2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7CisJdTggZGlnZXN0W1BPTFlWQUxf RElHRVNUX1NJWkVdOworCWludCBidWxrX2xlbiA9IHJlcS0+Y3J5cHRsZW4gLSBCTE9DS0NJUEhF Ul9CTE9DS19TSVpFOworCWludCBlcnI7CisKKwkvLyBSZXF1ZXN0cyBtdXN0IGJlIGF0IGxlYXN0 IG9uZSBibG9jaworCWlmIChyZXEtPmNyeXB0bGVuIDwgQkxPQ0tDSVBIRVJfQkxPQ0tfU0laRSkK KwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkocmN0eC0+Zmly c3RfYmxvY2ssIHJlcS0+c3JjLAorCQkJCSAwLCBCTE9DS0NJUEhFUl9CTE9DS19TSVpFLCAwKTsK KwlyY3R4LT5idWxrX3BhcnRfc3JjID0gc2NhdHRlcndhbGtfZmZ3ZChyY3R4LT5zZ19zcmMsIHJl cS0+c3JjLCBCTE9DS0NJUEhFUl9CTE9DS19TSVpFKTsKKwlyY3R4LT5idWxrX3BhcnRfZHN0ID0g c2NhdHRlcndhbGtfZmZ3ZChyY3R4LT5zZ19kc3QsIHJlcS0+ZHN0LCBCTE9DS0NJUEhFUl9CTE9D S19TSVpFKTsKKworCWVyciA9IGhjdHIyX2hhc2hfdHdlYWsocmVxLCByZXEtPml2KTsKKwlpZiAo ZXJyKQorCQlyZXR1cm4gZXJyOworCWVyciA9IGhjdHIyX2hhc2hfbWVzc2FnZShyZXEsIHJjdHgt PmJ1bGtfcGFydF9zcmMsIGRpZ2VzdCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwljcnlw dG9feG9yKGRpZ2VzdCwgcmN0eC0+Zmlyc3RfYmxvY2ssIEJMT0NLQ0lQSEVSX0JMT0NLX1NJWkUp OworCisJaWYgKGVuYykKKwkJY3J5cHRvX2NpcGhlcl9lbmNyeXB0X29uZSh0Y3R4LT5ibG9ja2Np cGhlciwgcmN0eC0+Zmlyc3RfYmxvY2ssIGRpZ2VzdCk7CisJZWxzZQorCQljcnlwdG9fY2lwaGVy X2RlY3J5cHRfb25lKHRjdHgtPmJsb2NrY2lwaGVyLCByY3R4LT5maXJzdF9ibG9jaywgZGlnZXN0 KTsKKworCWNyeXB0b194b3IoZGlnZXN0LCByY3R4LT5maXJzdF9ibG9jaywgQkxPQ0tDSVBIRVJf QkxPQ0tfU0laRSk7CisJY3J5cHRvX3hvcihkaWdlc3QsIHRjdHgtPkwsIEJMT0NLQ0lQSEVSX0JM T0NLX1NJWkUpOworCisJc2tjaXBoZXJfcmVxdWVzdF9zZXRfdGZtKCZyY3R4LT51LnN0cmVhbWNp cGhlcl9yZXEsIHRjdHgtPnN0cmVhbWNpcGhlcik7CisJc2tjaXBoZXJfcmVxdWVzdF9zZXRfY3J5 cHQoJnJjdHgtPnUuc3RyZWFtY2lwaGVyX3JlcSwgcmN0eC0+YnVsa19wYXJ0X3NyYywKKwkJCQkg ICByY3R4LT5idWxrX3BhcnRfZHN0LCBidWxrX2xlbiwgZGlnZXN0KTsKKwlza2NpcGhlcl9yZXF1 ZXN0X3NldF9jYWxsYmFjaygmcmN0eC0+dS5zdHJlYW1jaXBoZXJfcmVxLAorCQkJCSAgICAgIHJl cS0+YmFzZS5mbGFncywKKwkJCQkgICAgICBoY3RyMl9zdHJlYW1jaXBoZXJfZG9uZSwgcmVxKTsK KwlyZXR1cm4gY3J5cHRvX3NrY2lwaGVyX2VuY3J5cHQoJnJjdHgtPnUuc3RyZWFtY2lwaGVyX3Jl cSkgPzoKKwkJaGN0cjJfZmluaXNoKHJlcSk7Cit9CisKK3N0YXRpYyBpbnQgaGN0cjJfZW5jcnlw dChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKQoreworCXJldHVybiBoY3RyMl9jcnlwdChy ZXEsIHRydWUpOworfQorCitzdGF0aWMgaW50IGhjdHIyX2RlY3J5cHQoc3RydWN0IHNrY2lwaGVy X3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gaGN0cjJfY3J5cHQocmVxLCBmYWxzZSk7Cit9CisK K3N0YXRpYyBpbnQgaGN0cjJfaW5pdF90Zm0oc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtKQor eworCXN0cnVjdCBza2NpcGhlcl9pbnN0YW5jZSAqaW5zdCA9IHNrY2lwaGVyX2FsZ19pbnN0YW5j ZSh0Zm0pOworCXN0cnVjdCBoY3RyMl9pbnN0YW5jZV9jdHggKmljdHggPSBza2NpcGhlcl9pbnN0 YW5jZV9jdHgoaW5zdCk7CisJc3RydWN0IGhjdHIyX3RmbV9jdHggKnRjdHggPSBjcnlwdG9fc2tj aXBoZXJfY3R4KHRmbSk7CisJc3RydWN0IGNyeXB0b19za2NpcGhlciAqc3RyZWFtY2lwaGVyOwor CXN0cnVjdCBjcnlwdG9fY2lwaGVyICpibG9ja2NpcGhlcjsKKwlzdHJ1Y3QgY3J5cHRvX3NoYXNo ICpoYXNoOworCXVuc2lnbmVkIGludCBzdWJyZXFfc2l6ZTsKKwlpbnQgZXJyOworCisJc3RyZWFt Y2lwaGVyID0gY3J5cHRvX3NwYXduX3NrY2lwaGVyKCZpY3R4LT5zdHJlYW1jaXBoZXJfc3Bhd24p OworCWlmIChJU19FUlIoc3RyZWFtY2lwaGVyKSkKKwkJcmV0dXJuIFBUUl9FUlIoc3RyZWFtY2lw aGVyKTsKKworCWJsb2NrY2lwaGVyID0gY3J5cHRvX3NwYXduX2NpcGhlcigmaWN0eC0+YmxvY2tj aXBoZXJfc3Bhd24pOworCWlmIChJU19FUlIoYmxvY2tjaXBoZXIpKSB7CisJCWVyciA9IFBUUl9F UlIoYmxvY2tjaXBoZXIpOworCQlnb3RvIGVycl9mcmVlX3N0cmVhbWNpcGhlcjsKKwl9CisKKwlo YXNoID0gY3J5cHRvX3NwYXduX3NoYXNoKCZpY3R4LT5oYXNoX3NwYXduKTsKKwlpZiAoSVNfRVJS KGhhc2gpKSB7CisJCWVyciA9IFBUUl9FUlIoaGFzaCk7CisJCWdvdG8gZXJyX2ZyZWVfYmxvY2tj aXBoZXI7CisJfQorCisJdGN0eC0+c3RyZWFtY2lwaGVyID0gc3RyZWFtY2lwaGVyOworCXRjdHgt PmJsb2NrY2lwaGVyID0gYmxvY2tjaXBoZXI7CisJdGN0eC0+aGFzaCA9IGhhc2g7CisKKwlCVUlM RF9CVUdfT04ob2Zmc2V0b2ZlbmQoc3RydWN0IGhjdHIyX3JlcXVlc3RfY3R4LCB1KSAhPQorCQkJ CSBzaXplb2Yoc3RydWN0IGhjdHIyX3JlcXVlc3RfY3R4KSk7CisJc3VicmVxX3NpemUgPSBtYXgo c2l6ZW9mX2ZpZWxkKHN0cnVjdCBoY3RyMl9yZXF1ZXN0X2N0eCwgdS5oYXNoX2Rlc2MpICsKKwkJ CSAgY3J5cHRvX3NoYXNoX2Rlc2NzaXplKGhhc2gpLCBzaXplb2ZfZmllbGQoc3RydWN0CisJCQkg IGhjdHIyX3JlcXVlc3RfY3R4LCB1LnN0cmVhbWNpcGhlcl9yZXEpICsKKwkJCSAgY3J5cHRvX3Nr Y2lwaGVyX3JlcXNpemUoc3RyZWFtY2lwaGVyKSk7CisKKwljcnlwdG9fc2tjaXBoZXJfc2V0X3Jl cXNpemUodGZtLCBvZmZzZXRvZihzdHJ1Y3QgaGN0cjJfcmVxdWVzdF9jdHgsIHUpICsKKwkJCQkg ICAgc3VicmVxX3NpemUpOworCXJldHVybiAwOworCitlcnJfZnJlZV9ibG9ja2NpcGhlcjoKKwlj cnlwdG9fZnJlZV9jaXBoZXIoYmxvY2tjaXBoZXIpOworZXJyX2ZyZWVfc3RyZWFtY2lwaGVyOgor CWNyeXB0b19mcmVlX3NrY2lwaGVyKHN0cmVhbWNpcGhlcik7CisJcmV0dXJuIGVycjsKK30KKwor c3RhdGljIHZvaWQgaGN0cjJfZXhpdF90Zm0oc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtKQor eworCXN0cnVjdCBoY3RyMl90Zm1fY3R4ICp0Y3R4ID0gY3J5cHRvX3NrY2lwaGVyX2N0eCh0Zm0p OworCisJY3J5cHRvX2ZyZWVfY2lwaGVyKHRjdHgtPmJsb2NrY2lwaGVyKTsKKwljcnlwdG9fZnJl ZV9za2NpcGhlcih0Y3R4LT5zdHJlYW1jaXBoZXIpOworCWNyeXB0b19mcmVlX3NoYXNoKHRjdHgt Pmhhc2gpOworfQorCitzdGF0aWMgdm9pZCBoY3RyMl9mcmVlX2luc3RhbmNlKHN0cnVjdCBza2Np cGhlcl9pbnN0YW5jZSAqaW5zdCkKK3sKKwlzdHJ1Y3QgaGN0cjJfaW5zdGFuY2VfY3R4ICppY3R4 ID0gc2tjaXBoZXJfaW5zdGFuY2VfY3R4KGluc3QpOworCisJY3J5cHRvX2Ryb3BfY2lwaGVyKCZp Y3R4LT5ibG9ja2NpcGhlcl9zcGF3bik7CisJY3J5cHRvX2Ryb3Bfc2tjaXBoZXIoJmljdHgtPnN0 cmVhbWNpcGhlcl9zcGF3bik7CisJY3J5cHRvX2Ryb3Bfc2hhc2goJmljdHgtPmhhc2hfc3Bhd24p OworCWtmcmVlKGluc3QpOworfQorCisvKgorICogQ2hlY2sgZm9yIGEgc3VwcG9ydGVkIHNldCBv ZiBpbm5lciBhbGdvcml0aG1zLgorICogU2VlIHRoZSBjb21tZW50IGF0IHRoZSBiZWdpbm5pbmcg b2YgdGhpcyBmaWxlLgorICovCitzdGF0aWMgYm9vbCBoY3RyMl9zdXBwb3J0ZWRfYWxnb3JpdGht cyhzdHJ1Y3Qgc2tjaXBoZXJfYWxnICpzdHJlYW1jaXBoZXJfYWxnLAorCQkJCSAgICAgICBzdHJ1 Y3QgY3J5cHRvX2FsZyAqYmxvY2tjaXBoZXJfYWxnLAorCQkJCSAgICAgICBzdHJ1Y3Qgc2hhc2hf YWxnICpoYXNoX2FsZykKK3sKKwlpZiAoc3RybmNtcChzdHJlYW1jaXBoZXJfYWxnLT5iYXNlLmNy YV9uYW1lLCAieGN0cigiLCA0KSAhPSAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoYmxvY2tj aXBoZXJfYWxnLT5jcmFfYmxvY2tzaXplICE9IEJMT0NLQ0lQSEVSX0JMT0NLX1NJWkUpCisJCXJl dHVybiBmYWxzZTsKKworCWlmIChzdHJjbXAoaGFzaF9hbGctPmJhc2UuY3JhX25hbWUsICJwb2x5 dmFsIikgIT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp YyBpbnQgaGN0cjJfY3JlYXRlX2NvbW1vbihzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlICp0bXBsLAor CQkJICAgICAgIHN0cnVjdCBydGF0dHIgKip0YiwKKwkJCSAgICAgICBjb25zdCBjaGFyICpibG9j a2NpcGhlcl9uYW1lLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnN0cmVhbWNpcGhlcl9uYW1lLAor CQkJICAgICAgIGNvbnN0IGNoYXIgKnBvbHl2YWxfbmFtZSkKK3sKKwl1MzIgbWFzazsKKwlzdHJ1 Y3Qgc2tjaXBoZXJfaW5zdGFuY2UgKmluc3Q7CisJc3RydWN0IGhjdHIyX2luc3RhbmNlX2N0eCAq aWN0eDsKKwlzdHJ1Y3Qgc2tjaXBoZXJfYWxnICpzdHJlYW1jaXBoZXJfYWxnOworCXN0cnVjdCBj cnlwdG9fYWxnICpibG9ja2NpcGhlcl9hbGc7CisJc3RydWN0IHNoYXNoX2FsZyAqaGFzaF9hbGc7 CisJaW50IGVycjsKKworCWVyciA9IGNyeXB0b19jaGVja19hdHRyX3R5cGUodGIsIENSWVBUT19B TEdfVFlQRV9TS0NJUEhFUiwgJm1hc2spOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlp bnN0ID0ga3phbGxvYyhzaXplb2YoKmluc3QpICsgc2l6ZW9mKCppY3R4KSwgR0ZQX0tFUk5FTCk7 CisJaWYgKCFpbnN0KQorCQlyZXR1cm4gLUVOT01FTTsKKwlpY3R4ID0gc2tjaXBoZXJfaW5zdGFu Y2VfY3R4KGluc3QpOworCisJLyogU3RyZWFtIGNpcGhlciwgeGN0cihibG9ja19jaXBoZXIpICov CisJZXJyID0gY3J5cHRvX2dyYWJfc2tjaXBoZXIoJmljdHgtPnN0cmVhbWNpcGhlcl9zcGF3biwK KwkJCQkgICBza2NpcGhlcl9jcnlwdG9faW5zdGFuY2UoaW5zdCksCisJCQkJICAgc3RyZWFtY2lw aGVyX25hbWUsIDAsIG1hc2spOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWVfaW5zdDsKKwlz dHJlYW1jaXBoZXJfYWxnID0gY3J5cHRvX3NwYXduX3NrY2lwaGVyX2FsZygmaWN0eC0+c3RyZWFt Y2lwaGVyX3NwYXduKTsKKworCS8qIEJsb2NrIGNpcGhlciwgZS5nLiAiYWVzIiAqLworCWVyciA9 IGNyeXB0b19ncmFiX2NpcGhlcigmaWN0eC0+YmxvY2tjaXBoZXJfc3Bhd24sCisJCQkJIHNrY2lw aGVyX2NyeXB0b19pbnN0YW5jZShpbnN0KSwKKwkJCQkgYmxvY2tjaXBoZXJfbmFtZSwgMCwgbWFz ayk7CisJaWYgKGVycikKKwkJZ290byBlcnJfZnJlZV9pbnN0OworCWJsb2NrY2lwaGVyX2FsZyA9 IGNyeXB0b19zcGF3bl9jaXBoZXJfYWxnKCZpY3R4LT5ibG9ja2NpcGhlcl9zcGF3bik7CisKKwkv KiBQb2x5dmFsIM61LeKIhlUgaGFzaCBmdW5jdGlvbiAqLworCWVyciA9IGNyeXB0b19ncmFiX3No YXNoKCZpY3R4LT5oYXNoX3NwYXduLAorCQkJCXNrY2lwaGVyX2NyeXB0b19pbnN0YW5jZShpbnN0 KSwKKwkJCQlwb2x5dmFsX25hbWUsIDAsIG1hc2spOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2Zy ZWVfaW5zdDsKKwloYXNoX2FsZyA9IGNyeXB0b19zcGF3bl9zaGFzaF9hbGcoJmljdHgtPmhhc2hf c3Bhd24pOworCisJLyogQ2hlY2sgdGhlIHNldCBvZiBhbGdvcml0aG1zICovCisJaWYgKCFoY3Ry Ml9zdXBwb3J0ZWRfYWxnb3JpdGhtcyhzdHJlYW1jaXBoZXJfYWxnLCBibG9ja2NpcGhlcl9hbGcs CisJCQkJCWhhc2hfYWxnKSkgeworCQlwcl93YXJuKCJVbnN1cHBvcnRlZCBIQ1RSMiBpbnN0YW50 aWF0aW9uOiAoJXMsJXMsJXMpXG4iLAorCQkJc3RyZWFtY2lwaGVyX2FsZy0+YmFzZS5jcmFfbmFt ZSwKKwkJCWJsb2NrY2lwaGVyX2FsZy0+Y3JhX25hbWUsIGhhc2hfYWxnLT5iYXNlLmNyYV9uYW1l KTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfZnJlZV9pbnN0OworCX0KKworCS8qIElu c3RhbmNlIGZpZWxkcyAqLworCisJZXJyID0gLUVOQU1FVE9PTE9ORzsKKwlpZiAoc25wcmludGYo aW5zdC0+YWxnLmJhc2UuY3JhX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUsCisJCQkJICJoY3Ry MiglcykiLCBibG9ja2NpcGhlcl9hbGctPmNyYV9uYW1lKSA+PSBDUllQVE9fTUFYX0FMR19OQU1F KQorCQlnb3RvIGVycl9mcmVlX2luc3Q7CisJaWYgKHNucHJpbnRmKGluc3QtPmFsZy5iYXNlLmNy YV9kcml2ZXJfbmFtZSwgQ1JZUFRPX01BWF9BTEdfTkFNRSwKKwkJICAgICAiaGN0cjIoJXMsJXMs JXMpIiwKKwkJICAgICBibG9ja2NpcGhlcl9hbGctPmNyYV9kcml2ZXJfbmFtZSwKKwkJICAgICBz dHJlYW1jaXBoZXJfYWxnLT5iYXNlLmNyYV9kcml2ZXJfbmFtZSwKKwkJICAgICBoYXNoX2FsZy0+ YmFzZS5jcmFfZHJpdmVyX25hbWUpID49IENSWVBUT19NQVhfQUxHX05BTUUpCisJCWdvdG8gZXJy X2ZyZWVfaW5zdDsKKworCWluc3QtPmFsZy5iYXNlLmNyYV9ibG9ja3NpemUgPSBCTE9DS0NJUEhF Ul9CTE9DS19TSVpFOworCWluc3QtPmFsZy5iYXNlLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVj dCBoY3RyMl90Zm1fY3R4KTsKKwlpbnN0LT5hbGcuYmFzZS5jcmFfYWxpZ25tYXNrID0gc3RyZWFt Y2lwaGVyX2FsZy0+YmFzZS5jcmFfYWxpZ25tYXNrIHwKKwkJCQkgICAgICAgaGFzaF9hbGctPmJh c2UuY3JhX2FsaWdubWFzazsKKwkvKgorCSAqIFRoZSBoYXNoIGZ1bmN0aW9uIGlzIGNhbGxlZCB0 d2ljZSwgc28gaXQgaXMgd2VpZ2h0ZWQgaGlnaGVyIHRoYW4gdGhlCisJICogc3RyZWFtY2lwaGVy IGFuZCBibG9ja2NpcGhlci4KKwkgKi8KKwlpbnN0LT5hbGcuYmFzZS5jcmFfcHJpb3JpdHkgPSAo MiAqIHN0cmVhbWNpcGhlcl9hbGctPmJhc2UuY3JhX3ByaW9yaXR5ICsKKwkJCQkgICAgICAgNCAq IGhhc2hfYWxnLT5iYXNlLmNyYV9wcmlvcml0eSArCisJCQkJICAgICAgIGJsb2NrY2lwaGVyX2Fs Zy0+Y3JhX3ByaW9yaXR5KSAvIDc7CisKKwlpbnN0LT5hbGcuc2V0a2V5ID0gaGN0cjJfc2V0a2V5 OworCWluc3QtPmFsZy5lbmNyeXB0ID0gaGN0cjJfZW5jcnlwdDsKKwlpbnN0LT5hbGcuZGVjcnlw dCA9IGhjdHIyX2RlY3J5cHQ7CisJaW5zdC0+YWxnLmluaXQgPSBoY3RyMl9pbml0X3RmbTsKKwlp bnN0LT5hbGcuZXhpdCA9IGhjdHIyX2V4aXRfdGZtOworCWluc3QtPmFsZy5taW5fa2V5c2l6ZSA9 IGNyeXB0b19za2NpcGhlcl9hbGdfbWluX2tleXNpemUoc3RyZWFtY2lwaGVyX2FsZyk7CisJaW5z dC0+YWxnLm1heF9rZXlzaXplID0gY3J5cHRvX3NrY2lwaGVyX2FsZ19tYXhfa2V5c2l6ZShzdHJl YW1jaXBoZXJfYWxnKTsKKwlpbnN0LT5hbGcuaXZzaXplID0gVFdFQUtfU0laRTsKKworCWluc3Qt PmZyZWUgPSBoY3RyMl9mcmVlX2luc3RhbmNlOworCisJZXJyID0gc2tjaXBoZXJfcmVnaXN0ZXJf aW5zdGFuY2UodG1wbCwgaW5zdCk7CisJaWYgKGVycikgeworZXJyX2ZyZWVfaW5zdDoKKwkJaGN0 cjJfZnJlZV9pbnN0YW5jZShpbnN0KTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlu dCBoY3RyMl9jcmVhdGUoc3RydWN0IGNyeXB0b190ZW1wbGF0ZSAqdG1wbCwgc3RydWN0IHJ0YXR0 ciAqKnRiKQoreworCWNvbnN0IGNoYXIgKmJsb2NrY2lwaGVyX25hbWU7CisJY2hhciBzdHJlYW1j aXBoZXJfbmFtZVtDUllQVE9fTUFYX0FMR19OQU1FXTsKKworCWJsb2NrY2lwaGVyX25hbWUgPSBj cnlwdG9fYXR0cl9hbGdfbmFtZSh0YlsxXSk7CisJaWYgKElTX0VSUihibG9ja2NpcGhlcl9uYW1l KSkKKwkJcmV0dXJuIFBUUl9FUlIoYmxvY2tjaXBoZXJfbmFtZSk7CisKKwlpZiAoc25wcmludGYo c3RyZWFtY2lwaGVyX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUsICJ4Y3RyKCVzKSIsCisJCSAg ICBibG9ja2NpcGhlcl9uYW1lKSA+PSBDUllQVE9fTUFYX0FMR19OQU1FKQorCQlyZXR1cm4gLUVO QU1FVE9PTE9ORzsKKwlyZXR1cm4gaGN0cjJfY3JlYXRlX2NvbW1vbih0bXBsLCB0YiwgYmxvY2tj aXBoZXJfbmFtZSwgc3RyZWFtY2lwaGVyX25hbWUsICJwb2x5dmFsIik7Cit9CisKKy8qIGhjdHIy KGJsb2NrY2lwaGVyX25hbWUgWywgeGN0cihibG9ja2NpcGhlcl9uYW1lKV0gWywgcG9seXZhbF9u YW1lXSkgKi8KK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlIGhjdHIyX3RtcGwgPSB7CisJ Lm5hbWUgPSAiaGN0cjIiLAorCS5jcmVhdGUgPSBoY3RyMl9jcmVhdGUsCisJLm1vZHVsZSA9IFRI SVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaGN0cjJfbW9kdWxlX2luaXQodm9p ZCkKK3sKKwlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX3RlbXBsYXRlKCZoY3RyMl90bXBsKTsKK30K Kworc3RhdGljIHZvaWQgX19leGl0IGhjdHIyX21vZHVsZV9leGl0KHZvaWQpCit7CisJY3J5cHRv X3VucmVnaXN0ZXJfdGVtcGxhdGUoJmhjdHIyX3RtcGwpOworfQorCitzdWJzeXNfaW5pdGNhbGwo aGN0cjJfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoaGN0cjJfbW9kdWxlX2V4aXQpOworCitN T0RVTEVfREVTQ1JJUFRJT04oIkhDVFIyIGxlbmd0aC1wcmVzZXJ2aW5nIGVuY3J5cHRpb24gbW9k ZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTX0NSWVBUTygiaGN0 cjIiKTsKK01PRFVMRV9JTVBPUlRfTlMoQ1JZUFRPX0lOVEVSTkFMKTsKZGlmZiAtLWdpdCBhL2Ny eXB0by90Y3J5cHQuYyBiL2NyeXB0by90Y3J5cHQuYwppbmRleCBiMzU4YTUxNDEyMTguLjVhZjJl ODU5ODMwYSAxMDA2NDQKLS0tIGEvY3J5cHRvL3RjcnlwdC5jCisrKyBiL2NyeXB0by90Y3J5cHQu YwpAQCAtMjM4NSw2ICsyMzg1LDExIEBAIHN0YXRpYyBpbnQgZG9fdGVzdChjb25zdCBjaGFyICph bGcsIHUzMiB0eXBlLCB1MzIgbWFzaywgaW50IG0sIHUzMiBudW1fbWIpCiAJCQkJICAgMTYsIDE2 LCBhZWFkX3NwZWVkX3RlbXBsYXRlXzE5LCBudW1fbWIpOwogCQlicmVhazsKIAorCWNhc2UgMjI2 OgorCQl0ZXN0X2NpcGhlcl9zcGVlZCgiaGN0cjIoYWVzKSIsIEVOQ1JZUFQsIHNlYywgTlVMTCwK KwkJCQkgIDAsIHNwZWVkX3RlbXBsYXRlXzMyKTsKKwkJYnJlYWs7CisKIAljYXNlIDMwMDoKIAkJ aWYgKGFsZykgewogCQkJdGVzdF9oYXNoX3NwZWVkKGFsZywgc2VjLCBnZW5lcmljX2hhc2hfc3Bl ZWRfdGVtcGxhdGUpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3Rlc3RtZ3IuYyBiL2NyeXB0by90ZXN0 bWdyLmMKaW5kZXggYTNhMjRhYTA3NDkyLi5mYThmMzMyMTAzNTggMTAwNjQ0Ci0tLSBhL2NyeXB0 by90ZXN0bWdyLmMKKysrIGIvY3J5cHRvL3Rlc3RtZ3IuYwpAQCAtNDk5NCw2ICs0OTk0LDEyIEBA IHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWxnX3Rlc3RfZGVzYyBhbGdfdGVzdF9kZXNjc1tdID0gewog CQkuc3VpdGUgPSB7CiAJCQkuaGFzaCA9IF9fVkVDUyhnaGFzaF90dl90ZW1wbGF0ZSkKIAkJfQor CX0sIHsKKwkJLmFsZyA9ICJoY3RyMihhZXMpIiwKKwkJLnRlc3QgPSBhbGdfdGVzdF9za2NpcGhl ciwKKwkJLnN1aXRlID0geworCQkJLmNpcGhlciA9IF9fVkVDUyhhZXNfaGN0cjJfdHZfdGVtcGxh dGUpCisJCX0KIAl9LCB7CiAJCS5hbGcgPSAiaG1hYyhtZDUpIiwKIAkJLnRlc3QgPSBhbGdfdGVz dF9oYXNoLApkaWZmIC0tZ2l0IGEvY3J5cHRvL3Rlc3RtZ3IuaCBiL2NyeXB0by90ZXN0bWdyLmgK aW5kZXggZGEzNzM2ZTUxOTgyLi44N2U0ZGY2ZjhlYTkgMTAwNjQ0Ci0tLSBhL2NyeXB0by90ZXN0 bWdyLmgKKysrIGIvY3J5cHRvL3Rlc3RtZ3IuaApAQCAtMzM2MzAsNCArMzM2MzAsNzkxIEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgaGFzaF90ZXN0dmVjIHBvbHl2YWxfdHZfdGVtcGxhdGVbXSA9IHsK IAl9LAogfTsKIAorLyoKKyAqIFRlc3QgdmVjdG9ycyBnZW5lcmF0ZWQgdXNpbmcgaHR0cHM6Ly9n aXRodWIuY29tL2dvb2dsZS9oY3RyMgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNpcGhlcl90 ZXN0dmVjIGFlc19oY3RyMl90dl90ZW1wbGF0ZVtdID0geworCXsKKwkJLmtleQk9ICJceGUxXHgx NVx4NjZceDNjXHg4ZFx4YzZceDNhXHhmZiIKKwkJCSAgIlx4ZWZceDQxXHhkN1x4NDdceGEyXHhj Y1x4OGFceGJhIiwKKwkJLml2CT0gIlx4YzNceGJlXHgyYVx4Y2JceGI1XHgzOVx4ODZceGYxIgor CQkJICAiXHg5MVx4YWRceDZjXHhmNFx4ZGVceDc0XHg0NVx4NjMiCisJCQkgICJceDVjXHg3YVx4 ZDVceGNjXHg4Ylx4NzZceGVmXHgwZSIKKwkJCSAgIlx4Y2ZceDJjXHg2MFx4NjlceDM3XHhmZFx4 MDdceDk2IiwKKwkJLnB0ZXh0CT0gIlx4NjVceDc1XHhhZVx4ZDNceGUyXHhiY1x4NDNceDVjIgor CQkJICAiXHhiM1x4MWFceGQ4XHgwNVx4YzNceGQwXHg1Nlx4MjkiLAorCQkuY3RleHQJPSAiXHgx MVx4OTFceGVhXHg3NFx4NThceGNjXHhkNVx4YTIiCisJCQkgICJceGQwXHg1NVx4OWVceDNkXHhm ZVx4N2ZceGM4XHhmZSIsCisJCS5rbGVuCT0gMTYsCisJCS5sZW4JPSAxNiwKKwl9LAorCXsKKwkJ LmtleQk9ICJceDUwXHhjY1x4MjhceDVjXHhhZlx4NjJceGEyXHg0ZSIKKwkJCSAgIlx4MDJceGYw XHhjMFx4NWVceGMxXHgyOVx4ODBceGNhIiwKKwkJLml2CT0gIlx4NjRceGE1XHhkNVx4ZjlceGY0 XHg2OFx4MjZceGVhIgorCQkJICAiXHhjZVx4YmJceDZjXHhkZFx4YTVceGVmXHgzOVx4YjUiCisJ CQkgICJceDVjXHg5M1x4ZGZceDFiXHg5M1x4MjFceGJlXHg0OSIKKwkJCSAgIlx4ZmZceDllXHg4 Nlx4NGZceDdjXHg0ZFx4NTFceDE1IiwKKwkJLnB0ZXh0CT0gIlx4MzRceGMxXHgwOFx4M2VceDlj XHgyOFx4MGFceGNmIgorCQkJICAiXHgzM1x4ZGJceDNmXHgwZFx4MDVceDI3XHhhNFx4ZWQiLAor CQkuY3RleHQJPSAiXHg3Y1x4YWVceGJiXHgzN1x4NGFceDU1XHg5NFx4NWIiCisJCQkgICJceGM2 XHg2Zlx4OGZceDlmXHg2OFx4NWZceGM3XHg2MiIsCisJCS5rbGVuCT0gMTYsCisJCS5sZW4JPSAx NiwKKwl9LAorCXsKKwkJLmtleQk9ICJceGRhXHhjZVx4MzBceDg1XHhlN1x4MDZceGU2XHgwMiIK KwkJCSAgIlx4OGZceDAyXHhiZlx4OWFceDgyXHg2ZVx4NTRceGRlIiwKKwkJLml2CT0gIlx4ZjZc eDdhXHgyOFx4Y2VceGZiXHg2Y1x4YjNceGM1IgorCQkJICAiXHg0N1x4ODFceDU4XHg2OVx4MDdc eGU1XHgyMlx4ZGIiCisJCQkgICJceDY2XHg5M1x4ZDdceGU5XHhiZFx4NWNceDdmXHhmMCIKKwkJ CSAgIlx4OGFceDBiXHgwN1x4MDlceGJiXHhmMVx4NDhceGM0IiwKKwkJLnB0ZXh0CT0gIlx4MDFc eGNkXHhhNFx4NDdceDhlXHg0ZVx4YmNceDdkIgorCQkJICAiXHhmZFx4ZDhceGU5XHhhYVx4Yzdc eDM3XHgyNVx4M2QiCisJCQkgICJceDU2IiwKKwkJLmN0ZXh0CT0gIlx4ZjNceGIyXHg5ZVx4ZGVc eDk2XHg1ZFx4ZjBceGY2IgorCQkJICAiXHhiNlx4NDNceDU3XHhjNVx4NTNceGU4XHhmOVx4MDUi CisJCQkgICJceDg3IiwKKwkJLmtsZW4JPSAxNiwKKwkJLmxlbgk9IDE3LAorCX0sCisJeworCQku a2V5CT0gIlx4ZTFceDIyXHhlZVx4NWJceDNjXHg5Mlx4MGVceDUyIgorCQkJICAiXHhkN1x4OTVc eDg4XHhhM1x4NzlceDZjXHhmOFx4ZDkiLAorCQkuaXYJPSAiXHhiOFx4ZDFceGU3XHgzMlx4MzZc eDk2XHhkNlx4NDQiCisJCQkgICJceDljXHgzNlx4YWRceDMxXHg1Y1x4YWFceGYwXHgxNyIKKwkJ CSAgIlx4MzNceDJmXHgyOVx4MDRceDMxXHhmNVx4NDZceGMxIgorCQkJICAiXHgyZlx4MWJceGZh XHhhMVx4YmRceDg2XHhjNFx4ZDMiLAorCQkucHRleHQJPSAiXHg4N1x4ZDdceGI4XHgyZFx4MTJc eDYyXHhlZFx4NDEiCisJCQkgICJceDMwXHg3ZVx4ZDRceDBjXHhmZFx4YjlceDZkXHg4ZSIKKwkJ CSAgIlx4MzAiLAorCQkuY3RleHQJPSAiXHhiNlx4NmFceDBjXHg3MVx4OTZceDIyXHhiOVx4NDAi CisJCQkgICJceGEyXHgwNFx4NTZceDE0XHgyMlx4YWVceGFhXHg5NCIKKwkJCSAgIlx4MjYiLAor CQkua2xlbgk9IDE2LAorCQkubGVuCT0gMTcsCisJfSwKKwl7CisJCS5rZXkJPSAiXHhmNlx4MmJc eGFiXHhlY1x4MDRceDRhXHg0N1x4YTYiCisJCQkgICJceDM3XHhmMFx4NTBceDNkXHg1Nlx4ZTVc eDYxXHhhYyIsCisJCS5pdgk9ICJceGI3XHg2ZFx4NTVceDdkXHhlMlx4ZjBceDEwXHg5MyIKKwkJ CSAgIlx4MDdceDFlXHg1YVx4OWRceGMzXHg1OVx4NmZceDk4IgorCQkJICAiXHgxMVx4ZGVceGRi XHgzYVx4MDNceGY0XHgwZVx4Y2MiCisJCQkgICJceDE1XHhhNFx4MWNceGRmXHgzY1x4NTVceDg5 XHgyNyIsCisJCS5wdGV4dAk9ICJceGJlXHhjNlx4NzRceDRiXHhiOVx4YTFceDQzXHg4NiIKKwkJ CSAgIlx4YzJceDRhXHg2NVx4MDBceGJmXHg0M1x4ZTRceDg0IgorCQkJICAiXHg2ZFx4YWVceDBh XHgzY1x4ZWNceDZiXHgzZFx4NDMiCisJCQkgICJceGNmXHg0OVx4MzZceDg4XHgxNFx4M2RceDNj XHhmYyIKKwkJCSAgIlx4ZmJceGMxXHg1OFx4MWZceDM5XHg4MVx4ODhceGViIgorCQkJICAiXHg0 ZVx4YTFceGUyXHg1OVx4YWRceDQ3XHhhM1x4NjEiLAorCQkuY3RleHQJPSAiXHg4MFx4MjVceDhl XHgxMVx4ZWRceDU4XHgyMVx4NmYiCisJCQkgICJceDM0XHhlM1x4YTFceGI4XHhjMFx4OTlceDZh XHg1MCIKKwkJCSAgIlx4ZTBceDE4XHgyM1x4NGZceDFiXHgwMFx4NjhceDM5IgorCQkJICAiXHg3 NVx4MzRceDk1XHhmYlx4OWVceGI0XHgxOFx4ODkiCisJCQkgICJceDUzXHgxMlx4MmNceGUyXHhl ZVx4NTlceDMyXHhhNiIKKwkJCSAgIlx4YzVceDNmXHhkMVx4MzdceGJjXHgxMlx4NDBceGJkIiwK KwkJLmtsZW4JPSAxNiwKKwkJLmxlbgk9IDQ4LAorCX0sCisJeworCQkua2V5CT0gIlx4MzlceDRl XHg0ZFx4NWNceGQ2XHg2M1x4YWZceDRiIgorCQkJICAiXHhjZlx4YzNceDJjXHg1M1x4OGVceDNk XHg3Ylx4M2QiLAorCQkuaXYJPSAiXHgxZFx4NGFceDAxXHhhMFx4ODhceGFjXHhkZlx4MmMiCisJ CQkgICJceDM0XHg4OFx4MTNceGVmXHhhNFx4ZTdceGU1XHgyZSIKKwkJCSAgIlx4NDRceGY4XHhk Y1x4ZmZceDc0XHhkNFx4OGFceDgxIgorCQkJICAiXHgyNlx4ZmVceDUwXHg1N1x4Y2FceDBiXHg5 M1x4NTQiLAorCQkucHRleHQJPSAiXHg1NVx4NzZceDE3XHgyOVx4YzZceGQyXHhiZFx4OWMiCisJ CQkgICJceGY0XHhkZVx4OWJceDhlXHg3MVx4ZjdceGU0XHhmZCIKKwkJCSAgIlx4NjBceGMwXHhj YVx4YmNceDhhXHg3MFx4MzFceDliIgorCQkJICAiXHgyZFx4ZmRceDkyXHg1MVx4MzFceDRkXHgz ZVx4MWIiCisJCQkgICJceGRmXHg2Nlx4NDZceGJhXHgyOFx4MWZceDA4XHhjMSIKKwkJCSAgIlx4 MWJceGQwXHg4YVx4NWNceDhlXHhlMVx4Y2ZceDc5IiwKKwkJLmN0ZXh0CT0gIlx4MzRceDFmXHgx NFx4NjFceDE2XHhkOFx4ZjBceDczIgorCQkJICAiXHgzOFx4ZTdceDVmXHhjOFx4NjRceDcwXHgy OFx4OTMiCisJCQkgICJceDliXHhiM1x4MWNceGZlXHg2Mlx4YmZceDhlXHgzYyIKKwkJCSAgIlx4 ZjVceDE3XHgyZFx4ZmNceDBkXHgzYlx4NjFceGY3IgorCQkJICAiXHgzMFx4MjVceDRkXHg1Ylx4 MGNceDg0XHg1Zlx4ODYiCisJCQkgICJceDk0XHhhMVx4YmVceGE1XHg2ZFx4YTlceDEwXHg3OCIs CisJCS5rbGVuCT0gMTYsCisJCS5sZW4JPSA0OCwKKwl9LAorCXsKKwkJLmtleQk9ICJceDNlXHgw OFx4NWRceDY0XHg2Y1x4OThceGVjXHhlYyIKKwkJCSAgIlx4NzBceDBlXHgwZFx4YTFceDQxXHgy MFx4OTlceDgyIiwKKwkJLml2CT0gIlx4MTFceGI3XHg3N1x4OTFceDBkXHg5OVx4ZDlceDhkIgor CQkJICAiXHgzNVx4M2FceGY3XHgxNFx4NmJceDA5XHgzN1x4ZTUiCisJCQkgICJceGFkXHg1MVx4 ZjZceGMzXHg5Nlx4NGJceDY0XHg1NiIKKwkJCSAgIlx4YThceGJkXHg4MVx4Y2NceGJlXHg5NFx4 YWZceGU0IiwKKwkJLnB0ZXh0CT0gIlx4ZmZceDhkXHhiOVx4YzBceGUzXHg2OVx4YjNceGIyIgor CQkJICAiXHg4Ylx4MTFceDI2XHhiM1x4MTFceGVjXHhmYlx4YjkiCisJCQkgICJceDljXHhjMVx4 NzFceGQ2XHhlM1x4MjZceDBlXHhlMCIKKwkJCSAgIlx4NjhceDQwXHg2MFx4YjlceDNhXHg2M1x4 NTZceDhhIgorCQkJICAiXHg5ZVx4YzFceGYwXHgxMFx4YjFceDY0XHgzMlx4NzAiCisJCQkgICJc eGY4XHhjZFx4YzZceGM0XHg0OVx4NGNceGUxXHhjZSIKKwkJCSAgIlx4ZjNceGUxXHgwM1x4Zjhc eDM1XHhhZVx4ZTBceDVlIgorCQkJICAiXHhlZlx4NWZceGJjXHg0MVx4NzVceDI2XHgxM1x4Y2Mi CisJCQkgICJceDM3XHg4NVx4ZGZceGMwXHg1ZFx4YTZceDQ3XHg5OCIKKwkJCSAgIlx4ZjFceDk3 XHg1Mlx4NThceDA0XHhlNlx4YjVceDAxIgorCQkJICAiXHhjMFx4YjhceDE3XHg2ZFx4NzRceGJk XHg5YVx4ZGYiCisJCQkgICJceGE0XHgzN1x4OTRceDg2XHhiMFx4MTNceDgzXHgyOCIKKwkJCSAg Ilx4YzlceGEyXHgwN1x4M2ZceGI1XHhiMlx4NzJceDQwIgorCQkJICAiXHgwZVx4NjBceGRmXHg1 N1x4MDdceGI3XHgyY1x4NjYiCisJCQkgICJceDEwXHgzZlx4OGRceGRkXHgzMFx4MGFceDQ3XHhk NSIKKwkJCSAgIlx4ZThceDlkXHhmYlx4YTFceGFmXHg1M1x4ZDdceDA1IgorCQkJICAiXHhjN1x4 ZDJceGJhXHhlN1x4MmNceGEwXHhiZlx4YjgiCisJCQkgICJceGQxXHg5M1x4ZTdceDQxXHg4Mlx4 YTNceDQxXHgzYSIKKwkJCSAgIlx4YWZceDEyXHhkNlx4ZjhceDM0XHhkYVx4OTJceDQ2IgorCQkJ ICAiXHhhZFx4YTJceDJmXHhmNlx4N2VceDQ2XHg5Nlx4ZDgiCisJCQkgICJceDAzXHhmM1x4NDlc eDY0XHhkZVx4ZDhceDA2XHg4YiIKKwkJCSAgIlx4YTBceGJjXHg2M1x4MzVceDM4XHhiNlx4NmJc eGRhIgorCQkJICAiXHg1Ylx4NTBceDNmXHgxM1x4YTVceDg0XHgxYlx4MWIiCisJCQkgICJceDY2 XHg4OVx4OTVceGI3XHhjMlx4MTZceDNjXHhlOSIKKwkJCSAgIlx4MjRceGIwXHg4Y1x4NmZceDQ5 XHhlZlx4ZjdceDI4IgorCQkJICAiXHg2YVx4MjRceGZkXHhiZVx4MjVceGUyXHhiNFx4OTAiCisJ CQkgICJceDc3XHg0NFx4MDhceGI4XHhkYVx4ZDJceGRlXHgyYyIKKwkJCSAgIlx4YTBceDU3XHg0 NVx4NTdceDI5XHg0N1x4NmJceDg5IgorCQkJICAiXHg0YVx4ZjZceGE3XHgyYVx4YzNceDllXHg3 Ylx4YzgiCisJCQkgICJceGZkXHg5Zlx4ODlceGFiXHhlZVx4NmRceGEzXHhiNCIKKwkJCSAgIlx4 MjNceDkwXHg3YVx4ZTlceDg5XHhhMFx4YzdceGIzIgorCQkJICAiXHgxN1x4NDFceDg3XHg5MVx4 ZmNceDk3XHg0MiIsCisJCS5jdGV4dAk9ICJceGZjXHg5Ylx4OTZceDY2XHhjNFx4ODJceDJhXHg0 YSIKKwkJCSAgIlx4YjFceDI0XHhiYVx4YzdceDc4XHg1Zlx4NzlceGMxIgorCQkJICAiXHg1N1x4 MmVceDQ3XHgyOVx4NGRceDdiXHhkMlx4OWEiCisJCQkgICJceGJkXHhjNlx4YzFceDI2XHg3Ylx4 OGVceDNmXHg1ZCIKKwkJCSAgIlx4ZDRceGI0XHg5Zlx4NmFceDAyXHgyNFx4NGFceGFkIgorCQkJ ICAiXHgwY1x4MDBceDFiXHhkZlx4OTJceGM1XHg4YVx4ZTEiCisJCQkgICJceDc3XHg3OVx4Y2Nc eGQ1XHgyMFx4YmZceDgzXHhmNCIKKwkJCSAgIlx4NGJceGFkXHgxMVx4YmZceGRiXHg0N1x4NjVc eDcwIgorCQkJICAiXHg0M1x4ZjNceDY1XHhkZlx4YjdceGRjXHhiMlx4YjkiCisJCQkgICJceGFh XHgzZlx4YjNceGRmXHg3OVx4NjlceDBkXHhhMCIKKwkJCSAgIlx4ODZceDFjXHhiYVx4NDhceDBi XHgwMVx4YzFceDg4IgorCQkJICAiXHhkZlx4MDNceGIxXHgwNlx4M2NceDFkXHg1Nlx4YTEiCisJ CQkgICJceDhlXHg5OFx4YzFceGE2XHg5NVx4YTJceDViXHg3MiIKKwkJCSAgIlx4NzZceDU5XHhk Mlx4MjZceDI1XHhjZFx4ZWZceDdjIgorCQkJICAiXHhjOVx4NjBceGVhXHg0M1x4ZDFceDEyXHg4 YVx4OGEiCisJCQkgICJceDYzXHgxMlx4NzhceGNiXHgyZlx4ODhceDFlXHg4OCIKKwkJCSAgIlx4 NzhceDU5XHhkZVx4YmFceDRkXHgyY1x4NzhceDYxIgorCQkJICAiXHg3NVx4MzdceDU0XHhmZFx4 ODBceGM3XHg1ZVx4OTgiCisJCQkgICJceGNmXHgxNFx4NjJceDhlXHhmYlx4NzJceGVlXHg0ZCIK KwkJCSAgIlx4OWZceGFmXHg4Ylx4MDlceGU1XHgyMVx4MGFceDkxIgorCQkJICAiXHg4Zlx4ODhc eDg3XHhkNVx4YjFceDg0XHhhYlx4MTgiCisJCQkgICJceDA4XHg1N1x4ZWRceDcyXHgzNVx4YTZc eDBlXHhjNiIKKwkJCSAgIlx4ZmZceGNiXHhmZVx4MmNceDQ4XHgzOVx4MTRceDQ0IgorCQkJICAi XHhiYVx4NTlceDMyXHgzYVx4MmRceGM0XHg1Zlx4Y2IiCisJCQkgICJceGJlXHg2OFx4OGVceDdi XHhlZVx4MjFceGE0XHgzMiIKKwkJCSAgIlx4MTFceGEwXHg5OVx4ZmRceDkwXHhkZVx4NTlceDQz IgorCQkJICAiXHhlYlx4ZWRceGQ1XHg4N1x4NjhceDQ2XHhjNlx4ZGUiCisJCQkgICJceDBiXHgw N1x4MTdceDU5XHg2YVx4YWJceGNhXHgxNSIKKwkJCSAgIlx4NjVceDAyXHgwMVx4YjZceDcxXHg4 Y1x4M2JceGFhIgorCQkJICAiXHgxOFx4M2JceDMwXHhhZVx4MzhceDViXHgyY1x4NzQiCisJCQkg ICJceGQ0XHhlZVx4NGFceGZjXHhmN1x4MWJceDA5XHhkNCIKKwkJCSAgIlx4ZGFceDhiXHgxZFx4 NWRceDZmXHgyMVx4NmMiLAorCQkua2xlbgk9IDE2LAorCQkubGVuCT0gMjU1LAorCX0sCisJewor CQkua2V5CT0gIlx4OWZceGQzXHhkNVx4MWFceDBlXHhiYVx4MzJceDBhIgorCQkJICAiXHgxZFx4 YTVceGQxXHgxNFx4MTZceDU4XHhjZFx4ZGQiLAorCQkuaXYJPSAiXHgxMFx4NTJceDhkXHg1M1x4 M2ZceDU0XHgxMVx4MDEiCisJCQkgICJceDE5XHgzYlx4ZDhceGE1XHhlOFx4MzhceDc3XHgzZSIK KwkJCSAgIlx4ZDRceDU4XHhmZlx4MGFceDEzXHhkMlx4MDlceGU0IgorCQkJICAiXHg3N1x4Mzhc eDI4XHg0Nlx4ZjlceDE2XHhkM1x4ZmMiLAorCQkucHRleHQJPSAiXHg1ZFx4M2ZceDRhXHhhMVx4 MTZceDlhXHgzY1x4ZGYiCisJCQkgICJceGQ4XHgyMVx4NTFceGRjXHhiN1x4M2NceDEyXHhkYSIK KwkJCSAgIlx4ZDFceGUxXHhiYVx4MzhceGYxXHhjMVx4OWNceDg0IgorCQkJICAiXHhjN1x4NDhc eGUxXHhkNVx4ZWRceDg0XHgzYlx4Y2QiCisJCQkgICJceGM3XHgxYlx4ZTFceDVkXHgxYlx4YTVc eDc5XHgzYyIKKwkJCSAgIlx4ZTNceDdlXHhhYlx4ZjdceGFjXHg3MVx4NDlceDFkIgorCQkJICAi XHgyNVx4MmJceDhmXHg0MFx4ZThceDg5XHg0NVx4NjciCisJCQkgICJceDM5XHgzM1x4ZDNceDI3 XHhkNVx4ZmZceDE2XHhiNSIKKwkJCSAgIlx4NDZceDBmXHgzN1x4MDVceDE0XHg4N1x4YTdceGMy IgorCQkJICAiXHgzNVx4N2ZceDY2XHg5OFx4NDhceDVjXHgxYVx4MDUiCisJCQkgICJceDZjXHgw YVx4ZDhceGU0XHgyOFx4MWVceDk5XHg2ZSIKKwkJCSAgIlx4ODRceDZjXHgxM1x4MDdceGM4XHgy M1x4Y2RceDIyIgorCQkJICAiXHg4MFx4YjhceGM3XHg5ZVx4YmVceGNiXHhlZFx4MGIiCisJCQkg ICJceGZhXHg5ZFx4ZjVceDRiXHg0Zlx4MGNceDZlXHg0ZSIKKwkJCSAgIlx4MWJceGVjXHg4Y1x4 YjFceDliXHg2NFx4YWFceDY1IgorCQkJICAiXHg1ZVx4OTFceDQ1XHhkYVx4ODdceDE0XHg4OVx4 NDMiCisJCQkgICJceDYxXHhiOFx4YzdceDY4XHhjNlx4ZTBceDUzXHgwYSIKKwkJCSAgIlx4NzFc eGVmXHhhY1x4YzJceGIyXHg0MVx4ZDlceDRlIgorCQkJICAiXHg0MVx4ZjhceGIzXHhlZVx4MmZc eDU5XHhmZlx4MDUiCisJCQkgICJceDkxXHg3N1x4MzRceGUxXHhiMlx4MWNceDQ2XHg5NSIKKwkJ CSAgIlx4ZjJceGVhXHgyYVx4MTVceDcwXHg5N1x4YTNceDdmIgorCQkJICAiXHhjM1x4NjhceDIz XHg3M1x4ZDRceDg2XHhmN1x4ZTAiCisJCQkgICJceGM2XHg2YVx4YmRceDcwXHg2M1x4MGFceDVl XHhlMiIKKwkJCSAgIlx4YmFceGU2XHg3Y1x4MThceDcxXHhjNFx4MWRceDA3IgorCQkJICAiXHg0 MFx4YjBceDE4XHhkN1x4NTJceGMxXHg5ZVx4NGUiCisJCQkgICJceDhhXHgzYVx4NzVceGMzXHhm NVx4ZjFceGY5XHg4ZSIKKwkJCSAgIlx4MDBceDBlXHg0Zlx4N2ZceDE3XHgxNlx4MzhceDczIgor CQkJICAiXHhmNlx4OTFceDI5XHgyYVx4Y2JceGY4XHhlZVx4MWEiCisJCQkgICJceGY4XHgwOVx4 NzVceDBhXHhhZlx4YjFceDQ3XHg3YyIKKwkJCSAgIlx4Y2ZceGNhXHhkM1x4YmRceDI4XHg4Ylx4 YTZceGU1IgorCQkJICAiXHgzM1x4ZDFceDYzXHhlYVx4ODlceDFkXHhhM1x4NjMiCisJCQkgICJc eDlkXHgxZlx4YjJceGM2XHgwMlx4NTBceDFiIiwKKwkJLmN0ZXh0CT0gIlx4ZDNceDhjXHhlZVx4 YTZceDQ1XHgxMVx4YWZceDhhIgorCQkJICAiXHgyMVx4NzVceDFmXHg4NFx4MWRceDZmXHgzZlx4 YmUiCisJCQkgICJceGM2XHgwN1x4ZGRceDY0XHg2Y1x4OTlceDliXHg4YiIKKwkJCSAgIlx4ZmFc eGVmXHg0MVx4ZjJceGUxXHgwNFx4ZTJceDBhIgorCQkJICAiXHgxMlx4ODhceDk2XHg5OFx4NzRc eGQ0XHg2Y1x4NWQiCisJCQkgICJceDZiXHhmNFx4OGJceGZjXHg4N1x4NWZceDRiXHg3MCIKKwkJ CSAgIlx4MjlceDA3XHgxM1x4NDlceGFkXHg1Mlx4M2VceGE3IgorCQkJICAiXHg4OFx4MjBceDhh XHhkZFx4NWRceGU5XHgyZFx4ODYiCisJCQkgICJceDVjXHgxZVx4MzNceDgyXHgwN1x4ZTlceDA0 XHhhNCIKKwkJCSAgIlx4NzJceGJkXHhhOFx4YjNceDY3XHgyZVx4YzBceDgwIgorCQkJICAiXHhl YVx4OWRceDQ0XHg1NVx4MzZceGNhXHhiNlx4YjQiCisJCQkgICJceDBkXHg1ZVx4YWZceDg3XHg2 M1x4NDVceDY1XHhkOCIKKwkJCSAgIlx4OTBceDU4XHhjM1x4ZWNceDI3XHg1YVx4N2ZceDI1Igor CQkJICAiXHgxYlx4MTRceDA4XHgyYlx4ZWRceDE0XHhlMlx4ODAiCisJCQkgICJceDUzXHhjMlx4 ZWRceGJmXHg4OFx4ZjNceDc0XHg4ZCIKKwkJCSAgIlx4NzlceDk5XHg5ZVx4N2ZceDE4XHgyYlx4 MWZceDcwIgorCQkJICAiXHgwOVx4NDZceDg4XHg0MVx4MWJceGNlXHhjNVx4NjkiCisJCQkgICJc eGQ4XHhjOFx4ODNceGZhXHgzMlx4ZDhceGI3XHhhYiIKKwkJCSAgIlx4ODdceGFlXHhkYVx4MzZc eGMxXHg3NVx4YmFceGY1IgorCQkJICAiXHhkM1x4MjJceGNjXHgwYVx4MjBceDYyXHgzN1x4ZmQi CisJCQkgICJceGMxXHhlMVx4NmNceGM2XHhhY1x4NGJceDFlXHgzNCIKKwkJCSAgIlx4NGZceGJl XHgwOVx4ZWFceGIxXHhkM1x4MzBceGE2IgorCQkJICAiXHhmMVx4ZDhceDUxXHgwZlx4ODNceGY3 XHgzNlx4ODMiCisJCQkgICJceDE3XHgyM1x4MjVceDZjXHhiNFx4NWZceDRmXHg3NiIKKwkJCSAg Ilx4ZGVceDBhXHgwOVx4NTRceGYzXHhkMlx4Y2FceDUyIgorCQkJICAiXHhjMlx4ZWNceDZhXHg5 Y1x4MGFceGEwXHg1OVx4OGUiCisJCQkgICJceGJlXHgwOVx4MDJceDgzXHhjZlx4NGVceGUzXHg1 OSIKKwkJCSAgIlx4NmRceGZmXHg0NVx4NDlceDFmXHhhN1x4MzJceDY3IgorCQkJICAiXHgxZFx4 YjRceGRmXHg2MFx4YjlceDMwXHhkNFx4NjQiCisJCQkgICJceGZjXHg0N1x4ZjdceGU3XHhmYVx4 OTRceDIzXHg2MCIKKwkJCSAgIlx4ZDVceDQ3XHhlNFx4NGVceDYxXHg0NVx4N2VceDQ4IgorCQkJ ICAiXHhkM1x4YWRceGFkXHg5N1x4NjFceDFjXHgzMiIsCisJCS5rbGVuCT0gMTYsCisJCS5sZW4J PSAyNTUsCisJfSwKKwl7CisJCS5rZXkJPSAiXHhlYVx4MmZceDUxXHg2Zlx4MzFceGU5XHgyZlx4 N2IiCisJCQkgICJceDY4XHhjOFx4MWFceGQ1XHhmYVx4OWNceGUxXHg0MCIKKwkJCSAgIlx4OTVc eGU5XHg0N1x4Y2JceGExXHg5YVx4ZjdceGVlIiwKKwkJLml2CT0gIlx4ZTZceDc3XHg1Mlx4NTVc eDljXHhhN1x4YzFceDkxIgorCQkJICAiXHgwMlx4YTdceDMyXHg4N1x4NzZceDkxXHg3Mlx4MmUi CisJCQkgICJceGYzXHhhNFx4ODRceDMzXHhlOFx4YTVceGEzXHg1NyIKKwkJCSAgIlx4NDJceDVk XHhkNVx4NmNceGFhXHhmMVx4ZmRceDUzIiwKKwkJLnB0ZXh0CT0gIlx4MjJceGQwXHhmZlx4YmFc eGFkXHg0M1x4YWZceDYzIgorCQkJICAiXHgwZVx4YjFceDBjXHg2MFx4MGZceDY0XHg5Mlx4NWEi LAorCQkuY3RleHQJPSAiXHgyMVx4ODVceGI5XHhiOFx4ZGZceDVlXHg4Ylx4NzAiCisJCQkgICJc eGZlXHg3OVx4YzBceDVkXHg5ZFx4ODlceDMwXHhkYyIsCisJCS5rbGVuCT0gMjQsCisJCS5sZW4J PSAxNiwKKwl9LAorCXsKKwkJLmtleQk9ICJceDQ0XHgxOFx4YzRceGIyXHgyNVx4ZTVceGE2XHg5 MCIKKwkJCSAgIlx4N2FceDEyXHg4Y1x4MzVceDZhXHg5OFx4NDRceDNjIgorCQkJICAiXHg0Ylx4 NjdceDE4XHgyNFx4MzRceGNlXHgzMFx4N2UiLAorCQkuaXYJPSAiXHg4ZVx4ZjlceDZkXHhmNVx4 NTJceDA2XHhiNVx4MDciCisJCQkgICJceGQxXHgxM1x4ZmVceDM2XHg4N1x4ZWVceDZlXHgxMyIK KwkJCSAgIlx4ZWFceGRlXHg1NFx4YWZceDQ5XHhjNlx4NGZceGNlIgorCQkJICAiXHhlMVx4ODZc eDhlXHhjZFx4MjJceDEyXHhkZVx4MzkiLAorCQkucHRleHQJPSAiXHgzNFx4MTRceDhkXHg5Mlx4 YTZceDgzXHhkNVx4ODciCisJCQkgICJceDg5XHhmZFx4ZjdceGIxXHg4Zlx4OTNceDBiXHgxYyIs CisJCS5jdGV4dAk9ICJceDRmXHhkZFx4YzdceDIyXHg4NVx4MzNceDlkXHgzNCIKKwkJCSAgIlx4 YzhceDliXHg4OFx4ZmRceDhmXHg0MFx4YWJceDQyIiwKKwkJLmtsZW4JPSAyNCwKKwkJLmxlbgk9 IDE2LAorCX0sCisJeworCQkua2V5CT0gIlx4MjRceGY2XHhlMVx4NjJceGU1XHhhZlx4OTlceGRh IgorCQkJICAiXHg4NFx4ZWNceDQxXHhiMFx4YTNceDBiXHhkNVx4YTgiCisJCQkgICJceGEwXHgz ZVx4N2JceGE2XHhkZFx4NmNceDhmXHhhOCIsCisJCS5pdgk9ICJceDdmXHg4MFx4MjRceDYyXHgz Mlx4ZGRceGFiXHg2NiIKKwkJCSAgIlx4ZjJceDg3XHgyOVx4MjRceGVjXHhkMlx4NGJceDlmIgor CQkJICAiXHgwY1x4MzNceDUyXHhkOVx4ZTBceGNjXHg2ZVx4ZTQiCisJCQkgICJceDkwXHg4NVx4 NDNceDk3XHhjNFx4NjJceDE0XHgzMyIsCisJCS5wdGV4dAk9ICJceGVmXHg1OFx4ZTdceDdmXHhh OVx4ZDlceGI4XHhkNyIKKwkJCSAgIlx4YTJceDkxXHg5N1x4MDdceDI3XHg5ZVx4YmFceGU4Igor CQkJICAiXHhhYSIsCisJCS5jdGV4dAk9ICJceGQ3XHhjM1x4ODFceDkxXHhmMlx4NDBceDE3XHg3 MyIKKwkJCSAgIlx4M2VceDNiXHgxY1x4MmFceDhlXHgxMVx4OWNceDE3IgorCQkJICAiXHhmMSIs CisJCS5rbGVuCT0gMjQsCisJCS5sZW4JPSAxNywKKwl9LAorCXsKKwkJLmtleQk9ICJceGE2XHhj Mlx4NThceDQ5XHgyOFx4NTBceDhjXHg4OCIKKwkJCSAgIlx4ODRceDljXHhiMVx4NzBceDE4XHg5 OVx4OWNceDBkIgorCQkJICAiXHgwOFx4NjBceDRmXHhiMVx4Y2ZceDkwXHg2Nlx4NzIiLAorCQku aXYJPSAiXHg4MFx4MTRceDdmXHg5N1x4NjRceDE3XHg1NVx4ZWYiCisJCQkgICJceDRiXHgxYlx4 Y2VceDJiXHgwOVx4MjBceDVhXHhlZCIKKwkJCSAgIlx4OTZceGRjXHhhNlx4NmVceGIwXHg1OVx4 NTRceDAwIgorCQkJICAiXHgxZFx4MjZceDNkXHg5Nlx4YzJceDNlXHg3M1x4MDUiLAorCQkucHRl eHQJPSAiXHg0OVx4OGJceDkwXHgzNFx4NDFceDYzXHhjNlx4OWEiCisJCQkgICJceDA3XHhlMFx4 OWRceDg2XHg3N1x4NTRceDYzXHg2ZCIKKwkJCSAgIlx4NmEiLAorCQkuY3RleHQJPSAiXHhjYlx4 OTRceGZhXHhjM1x4ZWJceGY4XHgzN1x4ZmUiCisJCQkgICJceDE1XHg3Nlx4MDNceGQ5XHg2N1x4 ZTRceDkwXHgyOCIKKwkJCSAgIlx4MGMiLAorCQkua2xlbgk9IDI0LAorCQkubGVuCT0gMTcsCisJ fSwKKwl7CisJCS5rZXkJPSAiXHhiZlx4YWZceGQ3XHg2N1x4OGNceDQ3XHhjZlx4MjEiCisJCQkg ICJceDhhXHhhNVx4ZGRceDMyXHgyNVx4NDdceGJlXHg0ZiIKKwkJCSAgIlx4ZjFceDNhXHgwYlx4 YTZceGFhXHgyZFx4Y2ZceDA5IiwKKwkJLml2CT0gIlx4ZDlceGU4XHhmMFx4OTJceDRlXHhmY1x4 MWRceGYyIgorCQkJICAiXHg4MVx4MzdceDdjXHg4Zlx4ZjFceDU5XHgwOVx4MjAiCisJCQkgICJc eGY0XHg0Nlx4NTFceDg2XHg0Zlx4NTRceDhiXHgzMiIKKwkJCSAgIlx4NThceGQxXHg5OVx4OGJc eDhjXHgwM1x4ZWJceDVkIiwKKwkJLnB0ZXh0CT0gIlx4Y2RceDY0XHg5MFx4ZjlceDdjXHhlNVx4 MGVceDVhIgorCQkJICAiXHg3NVx4ZTdceDhlXHgzOVx4ODZceGVjXHgyMFx4NDMiCisJCQkgICJc eDhhXHg0OVx4MDlceDE1XHg0N1x4ZjRceDNjXHg4OSIKKwkJCSAgIlx4MjFceGViXHhjZlx4NGVc eGNmXHg5MVx4YjVceDQwIgorCQkJICAiXHhjZFx4ZTVceDRkXHg1Y1x4NmZceGYyXHhkMlx4ODAi CisJCQkgICJceGZhXHhhYlx4YjNceDc2XHg5Zlx4N2ZceDg0XHgwYSIsCisJCS5jdGV4dAk9ICJc eDQ0XHg5OFx4NjRceDE1XHhiN1x4MGJceDgwXHhhMyIKKwkJCSAgIlx4YjlceGNhXHgyM1x4ZmZc eDNiXHgwYlx4NjhceDc0IgorCQkJICAiXHhiYlx4M2VceDIwXHgxOVx4OWZceDI4XHg3MVx4MmEi CisJCQkgICJceDQ4XHgzY1x4N2NceGUyXHhlZlx4YjVceDEwXHhhYyIKKwkJCSAgIlx4ODJceDlm XHhjZFx4MDhceDhmXHg2Ylx4MTZceDZmIgorCQkJICAiXHhjM1x4YmJceDA3XHhmYlx4M2NceGIw XHgxYlx4MjciLAorCQkua2xlbgk9IDI0LAorCQkubGVuCT0gNDgsCisJfSwKKwl7CisJCS5rZXkJ PSAiXHhiZVx4YmJceDc3XHg0Nlx4MDZceDljXHhmNFx4NGQiCisJCQkgICJceDM3XHg5YVx4ZTZc eDNmXHgyN1x4YTdceDNiXHg2ZSIKKwkJCSAgIlx4N2FceDM2XHhiOFx4YjNceGZmXHhiYVx4NTFc eGNjIiwKKwkJLml2CT0gIlx4MDZceGJjXHg4Zlx4NjZceDZhXHhiZVx4ZWRceDVlIgorCQkJICAi XHg1MVx4ZjJceDcyXHgxMVx4M2FceDU2XHg4NVx4MjEiCisJCQkgICJceDQ0XHhmZVx4ZWNceDQ3 XHgyYlx4MDlceGI4XHg2ZiIKKwkJCSAgIlx4MDhceDg1XHgyYVx4OTNceGEzXHhjM1x4YWJceDVl IiwKKwkJLnB0ZXh0CT0gIlx4YzdceDc0XHg0Mlx4ZjFceGVhXHhjNVx4MzdceDJkIgorCQkJICAi XHhjMlx4YTBceGY2XHhkNVx4NWFceDlhXHhiYlx4YTAiCisJCQkgICJceGIyXHhmZFx4NTRceDhl XHg5OFx4YTBceGVhXHhjNyIKKwkJCSAgIlx4NzlceDA5XHg2NVx4NjNceGEwXHgyZVx4ODJceDRl IgorCQkJICAiXHg0OVx4OWNceDM5XHg2N1x4ZDBceDBkXHg4MFx4M2UiCisJCQkgICJceDFhXHg4 Nlx4ODRceDJiXHgyMFx4MjNceGRmXHhhNyIsCisJCS5jdGV4dAk9ICJceDVmXHhhM1x4MTFceGNh XHg5M1x4ZmFceDI0XHgzYSIKKwkJCSAgIlx4MjRceGI2XHhjZlx4MWVceDc2XHhiY1x4YWJceGM0 IgorCQkJICAiXHhmM1x4MjRceGEwXHgyN1x4YWNceDkwXHhlY1x4ZTkiCisJCQkgICJceDczXHgy OFx4N2RceDM1XHg2N1x4ZmVceDJlXHhhOCIKKwkJCSAgIlx4ODlceDc3XHhhY1x4ZWJceGMzXHg2 OFx4MzZceGY0IgorCQkJICAiXHg4Zlx4ODBceDJjXHhmMVx4ODBceGVmXHg0OVx4NDkiLAorCQku a2xlbgk9IDI0LAorCQkubGVuCT0gNDgsCisJfSwKKwl7CisJCS5rZXkJPSAiXHg3Nlx4ZTRceDhm XHhmMFx4NjBceDdiXHhlNFx4MGQiCisJCQkgICJceGI5XHgwNlx4ZmFceDkwXHgzOFx4NTVceDBh XHg5OCIKKwkJCSAgIlx4YWFceDdkXHg5N1x4ZmVceDhkXHg3N1x4MzlceDlmIiwKKwkJLml2CT0g Ilx4ZjdceDJjXHgzOVx4NzBceGE0XHgyOFx4NjZceDQ1IgorCQkJICAiXHhlYVx4NjJceDFiXHhk ZFx4YjBceGZhXHg2Y1x4NTAiCisJCQkgICJceGNmXHhmN1x4NGFceDU3XHhkZlx4MWVceGE0XHhm MCIKKwkJCSAgIlx4MGZceGY2XHg4YVx4NzFceDE1XHhjZlx4YTBceDI5IiwKKwkJLnB0ZXh0CT0g Ilx4OWNceDE1XHg3Y1x4YzBceDcwXHg0OVx4NjVceGFjIgorCQkJICAiXHg5NVx4NjdceDM3XHg0 MFx4OGJceDBlXHg5ZFx4YTkiCisJCQkgICJceDY2XHgwYVx4NWVceDMyXHg1OFx4YTFceDQwXHg4 ZCIKKwkJCSAgIlx4NDZceGEyXHhiZFx4NGZceDVhXHhiMVx4NWZceGQ1IgorCQkJICAiXHg5ZFx4 OGVceDU1XHgxOFx4N2VceDQzXHg0M1x4YTkiCisJCQkgICJceDU1XHgxYVx4M2ZceDUwXHg1MVx4 N2FceGM5XHgxYiIKKwkJCSAgIlx4MmZceGQ4XHgzNlx4MzVceDQxXHhmM1x4M2RceDQyIgorCQkJ ICAiXHg3ZVx4M2VceGQ1XHg5NFx4NmJceGE3XHhhMFx4YzYiCisJCQkgICJceDAyXHgzNVx4YmFc eDU5XHg3YVx4YzNceGRhXHhjYSIKKwkJCSAgIlx4YTNceDczXHgxOFx4NmFceDU3XHgyZlx4YmRc eGU4IgorCQkJICAiXHhjOFx4M2FceDZjXHgwN1x4MGVceGVhXHg2Y1x4MTciCisJCQkgICJceDRm XHgzYVx4Y2NceGMzXHg3MFx4ODlceDk5XHgyMyIKKwkJCSAgIlx4NzhceDM4XHhkN1x4NjBceDUx XHg1YVx4ZTVceGVjIgorCQkJICAiXHgxOVx4OThceDViXHg3OFx4OWZceGI4XHhiOVx4MDAiCisJ CQkgICJceDdjXHhmOFx4YWJceDIzXHg1OVx4ZjBceDcxXHhjZiIKKwkJCSAgIlx4N2ZceDA2XHgx MVx4NTVceDg1XHg5NFx4ZTVceDUwIgorCQkJICAiXHgwZFx4MDFceDkzXHhjYlx4ZGVceDU4XHg5 MFx4MDAiCisJCQkgICJceGM1XHgzNFx4N2VceGRhXHgyNlx4YmZceDU4XHgxNSIKKwkJCSAgIlx4 ODBceDMzXHgzNFx4NTZceDg2XHhhYVx4YzhceDZlIgorCQkJICAiXHgyYlx4NDdceDk4XHhiNlx4 YzlceDFjXHhhNFx4YjYiCisJCQkgICJceGFjXHhmMVx4NzZceGZlXHgzM1x4NTdceDJkXHhhZCIK KwkJCSAgIlx4NDJceDE1XHgzNFx4YmFceDcxXHg5Nlx4ZmVceDBlIgorCQkJICAiXHhiYVx4ZWVc eDY4XHgzNlx4M2FceGUwXHhlN1x4YzciCisJCQkgICJceDNlXHg2ZFx4NTRceGRhXHg3N1x4MDRc eDI2XHgyYyIKKwkJCSAgIlx4YzFceDQ1XHgxNlx4ZDlceGRkXHg4OVx4ZDNceGYxIgorCQkJICAi XHhjY1x4ZmNceDE5XHg0NFx4NmNceDk5XHhiMlx4NDQiCisJCQkgICJceDFmXHg4OVx4MzRceDIx XHhiMVx4OGRceDAyXHg1YyIKKwkJCSAgIlx4NzZceDFlXHgyN1x4ODRceGY5XHhkNFx4YTNceDAz IgorCQkJICAiXHgxZFx4MjZceGMxXHgzOVx4YjZceDY3XHg2Y1x4YWQiCisJCQkgICJceGI1XHg2 OVx4NmJceDU0XHg2NVx4ZjZceDljXHhjZiIKKwkJCSAgIlx4YWZceDAwXHgxMlx4ODdceDIxXHgy Zlx4NjhceGNiIgorCQkJICAiXHhkMlx4NzZceGMxXHg0M1x4Y2VceDI0XHhjMiIsCisJCS5jdGV4 dAk9ICJceDQwXHhmZlx4ODNceDhlXHhlZlx4OThceGExXHhjYiIKKwkJCSAgIlx4NTdceDNmXHhi Nlx4ZjNceDI2XHg5OVx4OTZceGUyIgorCQkJICAiXHhkMFx4NjhceDgwXHgzMlx4MmNceDU4XHg5 YVx4ZDYiCisJCQkgICJceDI0XHhkMFx4MjFceDE3XHhjMFx4NmVceDQ0XHhiNiIKKwkJCSAgIlx4 YTdceGEwXHhkZFx4ZGVceGNlXHgxOFx4NWFceDE3IgorCQkJICAiXHhmMlx4YzFceDk4XHhhYlx4 NjFceGNkXHg3MFx4MGEiCisJCQkgICJceDRkXHhlZlx4OWZceGE2XHg5ZFx4OGJceDQ1XHg4MSIK KwkJCSAgIlx4MjNceDkwXHg2NVx4ZTBceDQ1XHgyY1x4NzRceGM1IgorCQkJICAiXHg3ZFx4ZThc eDQzXHhlY1x4NWFceGZhXHg1NFx4NjQiCisJCQkgICJceDZmXHhmY1x4NGJceDZjXHg4M1x4ZWNc eDFkXHhiYyIKKwkJCSAgIlx4MzlceDE5XHgyZlx4YTdceGU2XHg0Nlx4NWFceDRlIgorCQkJICAi XHgxN1x4NmRceDBiXHhmMlx4N2FceDE0XHgwY1x4NTAiCisJCQkgICJceDhlXHg4M1x4MDBceGI3 XHhiYlx4NjVceDc3XHhmZCIKKwkJCSAgIlx4NzJceGIzXHhlYVx4ZTRceGRlXHg1NFx4ZDZceGMw IgorCQkJICAiXHg4Y1x4MDJceGIyXHhkYlx4YzNceGU2XHg0Nlx4ZDUiCisJCQkgICJceGZiXHhi NFx4MDNceDI5XHhkY1x4YTRceDY0XHhlMyIKKwkJCSAgIlx4ZThceDIwXHhiNVx4NGRceDgxXHg0 NFx4MjBceGM4IgorCQkJICAiXHgyOVx4NDFceGNlXHgwNVx4M2FceGQ2XHhlM1x4MGUiCisJCQkg ICJceDBiXHhlYVx4ZGZceDUwXHhlYVx4OTFceGFhXHg5YiIKKwkJCSAgIlx4YzRceDljXHgwOVx4 NGFceDQyXHhmYVx4ZWZceDM4IgorCQkJICAiXHgzYlx4ZGZceGZiXHg1Ylx4OTVceGEyXHg5YVx4 YmQiCisJCQkgICJceDEwXHg1NVx4NjFceDRhXHhlZVx4OGJceGRhXHgxZiIKKwkJCSAgIlx4MjNc eDY5XHhjZVx4NmVceDkyXHg2NFx4M2VceDMyIgorCQkJICAiXHg0ZFx4ODBceDIzXHhmMVx4NDNc eGQ3XHgwMVx4NTQiCisJCQkgICJceDZmXHgxOFx4NGNceDUzXHg5MVx4ZDVceGFhXHhlYiIKKwkJ CSAgIlx4MTdceDczXHg5Mlx4N2ZceDEwXHg3Ylx4NTdceDAyIgorCQkJICAiXHg4ZVx4NmZceGNl XHg2M1x4ODNceDZiXHgxMlx4YmEiCisJCQkgICJceGJjXHgyM1x4Y2JceDk1XHgzYVx4MWZceDE2 XHhlNSIKKwkJCSAgIlx4MjFceGY3XHg1Mlx4MTdceDQzXHgyOFx4NTJceGFmIgorCQkJICAiXHgy ZVx4NmZceDdmXHgzNlx4ZTZceDBjXHgzMVx4OTAiCisJCQkgICJceDU3XHhmN1x4NWZceDdjXHgw Nlx4M2VceDQ3XHg1ZiIKKwkJCSAgIlx4YjhceGM0XHgyYVx4ZWJceGQ3XHg5MVx4ZjEiLAorCQku a2xlbgk9IDI0LAorCQkubGVuCT0gMjU1LAorCX0sCisJeworCQkua2V5CT0gIlx4ODdceDJiXHhk ZFx4MzZceDJhXHg3Nlx4NjBceGNlIgorCQkJICAiXHhmYlx4NTRceGE3XHg1YVx4M2ZceDQwXHhj ZFx4MTAiCisJCQkgICJceGM4XHg4OFx4MGVceGQ4XHg4M1x4MzFceGQ1XHg1ZSIsCisJCS5pdgk9 ICJceDNiXHg2Y1x4MzJceGRlXHg5Y1x4MDJceGI2XHhhMSIKKwkJCSAgIlx4MTNceGZlXHg4ZFx4 NGFceDhkXHhmOFx4MTVceDhkIgorCQkJICAiXHgwYlx4MmNceDE0XHgxY1x4NDRceGQ0XHgxZlx4 N2UiCisJCQkgICJceGNjXHgzM1x4ZjBceDAzXHhhM1x4NDFceDNlXHg2ZCIsCisJCS5wdGV4dAk9 ICJceDZhXHgwY1x4NmJceDhiXHg0NFx4NzVceDc3XHgwYiIKKwkJCSAgIlx4N2RceDlmXHhjYVx4 MzVceDI3XHgzNlx4YmZceGUzIgorCQkJICAiXHhjMlx4MDlceDNlXHg2ZVx4NDJceGQ0XHg4MVx4 YzIiCisJCQkgICJceDRhXHhkNVx4YTNceDAwXHg1ZFx4MmJceDk3XHgwYSIKKwkJCSAgIlx4ZTBc eGQ5XHg4Ylx4MTBceDc5XHg3NFx4ZjRceDVmIgorCQkJICAiXHhlZlx4ZjBceGM3XHgzYlx4YmNc eGJlXHg2OVx4ZTQiCisJCQkgICJceDBmXHhiOFx4YTJceDM5XHgxNVx4NzBceDNhXHhhNiIKKwkJ CSAgIlx4MjBceDg2XHg4Ylx4M2NceDZlXHhjYVx4ZmNceDM2IgorCQkJICAiXHhlYVx4MzJceDVm XHhhNlx4MTdceDJiXHhkM1x4MjQiCisJCQkgICJceDY1XHg2OVx4OWNceDEzXHg1Y1x4NTZceGI2 XHgxNCIKKwkJCSAgIlx4M2FceDhmXHgyMVx4NDBceGRlXHgyM1x4NmZceDhiIgorCQkJICAiXHgy Zlx4YThceGE0XHg4MVx4OTFceGI2XHhiZVx4N2MiCisJCQkgICJceDEyXHgyNVx4N2NceDg3XHhi OFx4NzRceDZhXHhhNyIKKwkJCSAgIlx4OGRceGE1XHhiOVx4OGNceGI0XHhhOVx4ZDJceDZhIgor CQkJICAiXHhiMlx4YjNceDZlXHg4Ylx4NDBceDlmXHhmMlx4MzgiCisJCQkgICJceGQ4XHgyNlx4 ZjFceGZhXHg2Zlx4YjlceDI5XHhmZSIKKwkJCSAgIlx4MGZceGMxXHg0ZFx4OTBceGY4XHg0OVx4 ZTFceDcyIgorCQkJICAiXHg3MFx4NjNceDM1XHhkY1x4ZmVceGI0XHg3Mlx4MDYiCisJCQkgICJc eGFlXHg3ZVx4YmVceDM2XHgyM1x4YTJceDRhXHgwMyIKKwkJCSAgIlx4NmNceGE4XHhhMFx4N2Fc eDVjXHg0NFx4NjBceGM0IgorCQkJICAiXHgyYlx4NTBceGExXHgxOVx4YTRceDM1XHhmY1x4MDAi CisJCQkgICJceGQxXHgwYVx4OGZceDljXHg1NFx4NWJceGRjXHg1MyIKKwkJCSAgIlx4NjhceDdi XHg3Ylx4MWVceGQwXHg4ZVx4ZDBceDkzIgorCQkJICAiXHg4Zlx4YWZceGY1XHhhMlx4NDBceGUx XHgxNVx4MzMiCisJCQkgICJceDQ5XHg0MVx4YWFceDU3XHhmM1x4MTNceDFiXHhhNSIKKwkJCSAg Ilx4OGFceGFiXHgwMVx4MmJceDI4XHhlY1x4NjNceDgxIgorCQkJICAiXHgzNFx4NzdceGYxXHgz Zlx4YzJceDQ3XHgwOVx4MzEiCisJCQkgICJceGMyXHg4MFx4MWNceGE5XHgxNlx4NmJceGE1XHgw YSIKKwkJCSAgIlx4MWNceGJlXHgyM1x4MGNceDQxXHg2M1x4ZDZceDkyIgorCQkJICAiXHg3Zlx4 M2FceDc0XHg3MVx4ODZceDVlXHgzMFx4YzEiCisJCQkgICJceGM1XHhlZVx4NWJceDQxXHg5YVx4 ZWRceDQzXHhhYiIKKwkJCSAgIlx4MTBceDQwXHhjNFx4ZTZceGYzXHhhYVx4YzIiLAorCQkuY3Rl eHQJPSAiXHg0NVx4NjFceDUzXHg1Y1x4NTZceDA4XHhjMlx4NzgiCisJCQkgICJceDAxXHgyM1x4 OGRceDlkXHg4ZVx4ZWJceGNhXHhjZCIKKwkJCSAgIlx4ZjVceDFmXHgwMVx4M2ZceGJhXHg5ZFx4 ZWFceDg3IgorCQkJICAiXHhjYVx4MjNceGM1XHhhOFx4YjJceDkyXHg4N1x4MGQiCisJCQkgICJc eDYyXHg4Y1x4NzJceDljXHhlOFx4YTVceDNmXHg3NSIKKwkJCSAgIlx4ZGFceGE0XHhkNVx4OTJc eDZmXHhhZVx4NGVceGViIgorCQkJICAiXHhmZFx4MjFceGU2XHhhOVx4N2VceGJmXHhlZFx4ODUi CisJCQkgICJceGJkXHg4Y1x4ODhceDE4XHhhOFx4NzlceGQwXHgwOSIKKwkJCSAgIlx4NWJceDZi XHg5Nlx4MzJceDYzXHgxYVx4NmVceDI3IgorCQkJICAiXHg3Mlx4YTNceDdhXHhjNFx4NDhceGYz XHhlZFx4MDQiCisJCQkgICJceDVkXHhjN1x4MDFceDIzXHg3Y1x4MzZceDU3XHg1NyIKKwkJCSAg Ilx4ZjRceDQ1XHhmNlx4ZjZceGM3XHg5YVx4YjJceDJmIgorCQkJICAiXHg4OFx4NzlceGFjXHhh Zlx4ZmRceDUyXHhhN1x4OTYiCisJCQkgICJceDgzXHg2NVx4NWRceDZiXHhhMlx4M2JceDJiXHgx NyIKKwkJCSAgIlx4NmNceGE3XHhlM1x4MDNceDJlXHg2Ylx4YTVceDgwIgorCQkJICAiXHgzMlx4 MGJceDdjXHg4Nlx4MzhceDY0XHgyNFx4NjQiCisJCQkgICJceDUxXHg2MVx4Y2FceGE4XHhkY1x4 NjdceDZhXHgxNyIKKwkJCSAgIlx4OTZceGM4XHhiZFx4ZDBceDBmXHg5OVx4NzhceDc1IgorCQkJ ICAiXHhiYlx4ODFceGM4XHgzNVx4YzFceDVjXHg0OFx4NjYiCisJCQkgICJceDc1XHg4YVx4ZWRc eDQ0XHg1N1x4MTBceGM5XHhkOCIKKwkJCSAgIlx4ODVceDkxXHhhZlx4MmJceGRkXHhjMFx4ZmNc eDdmIgorCQkJICAiXHgxOVx4OWRceDIyXHg4Zlx4OTRceGU3XHhiMFx4ODYiCisJCQkgICJceDM0 XHgxN1x4ZDNceGUxXHgxMFx4MmFceDMwXHgzYSIKKwkJCSAgIlx4NGRceDViXHhhYlx4OTlceGY1 XHhmOFx4MjFceDc4IgorCQkJICAiXHg5ZFx4MWJceGJhXHgxZlx4YjlceDE4XHgyMFx4ZmEiCisJ CQkgICJceDEyXHgwOVx4NjVceGIwXHgyY1x4ZjBceDBjXHgxMSIKKwkJCSAgIlx4NGRceDkxXHhi MFx4YTBceDI0XHhiMFx4ZjhceDYxIgorCQkJICAiXHhlMFx4NjVceGMxXHgyMVx4NzJceDk4XHhi Y1x4MjkiCisJCQkgICJceDkyXHg4NVx4MmNceGZjXHhhMVx4MGNceGEwXHgwNCIKKwkJCSAgIlx4 NmRceDIxXHgzZFx4NDBceDYyXHhkYVx4NTVceDcxIgorCQkJICAiXHhlZVx4YTFceDFlXHg1ZVx4 YzNceDQyXHgwYlx4YTAiCisJCQkgICJceDRiXHhlNVx4YmRceDk1XHhhOVx4ZGZceDcwIiwKKwkJ LmtsZW4JPSAyNCwKKwkJLmxlbgk9IDI1NSwKKwl9LAorCXsKKwkJLmtleQk9ICJceDllXHhlYlx4 YjJceDQ5XHgzY1x4MWNceGY1XHhmNCIKKwkJCSAgIlx4NmFceDk5XHhjMlx4YzRceGRmXHhiMVx4 ZjRceGRkIgorCQkJICAiXHg3NVx4MjBceDU3XHhlYVx4MmNceDRmXHhjZFx4YjIiCisJCQkgICJc eGE1XHgzZFx4N2JceDQ5XHgxZVx4YWJceGZkXHgwZiIsCisJCS5pdgk9ICJceGRmXHg2M1x4ZDRc eGFiXHhkMlx4NDlceGYzXHhkOCIKKwkJCSAgIlx4MzNceDgxXHgzN1x4NjBceDdkXHhmYVx4NzNc eDA4IgorCQkJICAiXHhkOFx4NDlceDZkXHg4MFx4ZThceDJmXHg2Mlx4NTQiCisJCQkgICJceGVi XHgwZVx4YTlceDM5XHg1Ylx4NDVceDdmXHg4YSIsCisJCS5wdGV4dAk9ICJceDY3XHhjOVx4ZjJc eDMwXHg4NFx4NDFceDhlXHg0MyIKKwkJCSAgIlx4ZmJceGYzXHhiM1x4M2VceDc5XHgzNlx4N2Zc eGU4IiwKKwkJLmN0ZXh0CT0gIlx4MjdceDM4XHg3OFx4NDdceDE2XHhkOVx4NzFceDM1IgorCQkJ ICAiXHgyZVx4N2VceGRkXHg3ZVx4NDNceDNjXHhiOFx4NDAiLAorCQkua2xlbgk9IDMyLAorCQku bGVuCT0gMTYsCisJfSwKKwl7CisJCS5rZXkJPSAiXHg1MFx4NGFceGM4XHg5NFx4MDFceDEzXHhk M1x4MGMiCisJCQkgICJceGQ5XHhhYVx4ZjNceDRjXHhmOFx4M2ZceDJjXHgzOSIKKwkJCSAgIlx4 OWVceGVjXHhjNlx4YThceDk3XHhmMlx4OGVceDczIgorCQkJICAiXHg5NFx4YjhceDRjXHg0MFx4 MDNceDI4XHhhZlx4YzIiLAorCQkuaXYJPSAiXHg5ZVx4YWFceDBiXHg3Zlx4MTJceDJhXHhlM1x4 ZGYiCisJCQkgICJceDA1XHgwM1x4OTNceDFiXHhkYVx4YzhceGQ3XHg5OCIKKwkJCSAgIlx4OGFc eGY5XHhkZlx4NjNceGIxXHhjZFx4MTVceGFhIgorCQkJICAiXHgwMlx4OGVceDQxXHhhMFx4NzVc eDFkXHgxN1x4MGUiLAorCQkucHRleHQJPSAiXHhlMlx4OGFceDM1XHhhN1x4MTBceDBkXHg2NVx4 NmUiCisJCQkgICJceGFkXHg3N1x4Y2VceDA3XHhiYlx4NjdceDgzXHgwMyIsCisJCS5jdGV4dAk9 ICJceDgxXHhjMVx4MWNceDA2XHg3M1x4Y2JceGMxXHhlNiIKKwkJCSAgIlx4ZWRceDFmXHg1Ylx4 ZjBceDdkXHg4Ylx4MTJceGY4IiwKKwkJLmtsZW4JPSAzMiwKKwkJLmxlbgk9IDE2LAorCX0sCisJ eworCQkua2V5CT0gIlx4OTNceGZhXHg3ZVx4ZTJceDBlXHg2N1x4YzRceDM5IgorCQkJICAiXHhl N1x4Y2FceDQ3XHg5NVx4NjhceDlkXHg1ZVx4NWEiCisJCQkgICJceDdjXHgyNlx4MTlceGFiXHhj Nlx4Y2FceDZhXHg0YyIKKwkJCSAgIlx4NDVceGE2XHg5Nlx4NDJceGFlXHg2Y1x4ZmZceGU3IiwK KwkJLml2CT0gIlx4ZWFceDgyXHg0N1x4OTVceDNiXHgyMlx4YTFceDNhIgorCQkJICAiXHg2YVx4 Y2FceDI0XHg0Y1x4NTBceDdlXHgyM1x4Y2QiCisJCQkgICJceDBlXHg1MFx4ZTVceDQxXHhiNlx4 NjVceDI5XHhkOCIKKwkJCSAgIlx4MzBceDIzXHgwMFx4ZDJceDU0XHhhN1x4ZDZceDU2IiwKKwkJ LnB0ZXh0CT0gIlx4ZGJceDFmXHgxZlx4ZWNceGFkXHg4M1x4NmVceDVkIgorCQkJICAiXHgxOVx4 YTVceGY2XHgzYlx4YjRceDkzXHg1YVx4NTciCisJCQkgICJceDZmIiwKKwkJLmN0ZXh0CT0gIlx4 ZjFceDQ2XHg2ZVx4OWRceGIzXHgwMVx4ZjBceDZiIgorCQkJICAiXHhjMlx4YWNceDU3XHg4OFx4 NDhceDZkXHg0MFx4NzIiCisJCQkgICJceDY4IiwKKwkJLmtsZW4JPSAzMiwKKwkJLmxlbgk9IDE3 LAorCX0sCisJeworCQkua2V5CT0gIlx4YmVceGE1XHg2M1x4ZTVceDNkXHhhNlx4ZGRceDgzIgor CQkJICAiXHgxMlx4NGVceDUyXHgzZVx4YjdceDQ3XHgxM1x4YzAiCisJCQkgICJceDk4XHg1N1x4 MTRceDhjXHhlOVx4YmVceDBkXHhiNCIKKwkJCSAgIlx4YTdceDgyXHgwZVx4OTlceDgyXHg5NFx4 MGZceDYwIiwKKwkJLml2CT0gIlx4MzZceGRmXHg1Nlx4NGRceGNmXHg2YVx4ZDJceGY0IgorCQkJ ICAiXHgzNVx4OTJceDNkXHhkMlx4MzFceDI0XHhmOFx4YTYiCisJCQkgICJceDI3XHgyN1x4ZTRc eDU1XHhlMlx4ZTBceGMzXHhiNSIKKwkJCSAgIlx4ZTdceDQwXHgzMVx4YWVceDk4XHhhYlx4YWJc eDkzIiwKKwkJLnB0ZXh0CT0gIlx4ZjRceDU0XHgwMVx4YjVceDExXHhlM1x4ZWRceDhkIgorCQkJ ICAiXHhhNFx4ZjBceGY3XHgzZlx4YzhceDRiXHhhY1x4N2EiCisJCQkgICJceGI5IiwKKwkJLmN0 ZXh0CT0gIlx4YTdceGI1XHhhNFx4YWFceDZiXHg1Nlx4ZGJceDc5IgorCQkJICAiXHgzMFx4YTFc eDZlXHhmZVx4YTJceDYwXHhjYlx4YjMiCisJCQkgICJceDEwIiwKKwkJLmtsZW4JPSAzMiwKKwkJ Lmxlbgk9IDE3LAorCX0sCisJeworCQkua2V5CT0gIlx4MDNceDY1XHgwM1x4NmVceDRkXHhlNlx4 ZThceDRlIgorCQkJICAiXHg4Ylx4YmVceDIyXHgxOVx4NDhceDMxXHhlZVx4ZDkiCisJCQkgICJc eGEwXHg5MVx4MjFceGJlXHg2Mlx4ODlceGRlXHg3OCIKKwkJCSAgIlx4ZDlceGIwXHgzNlx4YTNc eDNjXHhjZVx4NDNceGQ1IiwKKwkJLml2CT0gIlx4YTlceGMzXHg0Ylx4ZTdceDBmXHhmY1x4NmRc eGJmIgorCQkJICAiXHg1Nlx4MjdceDIxXHgxY1x4ZmNceGQ2XHgwNFx4MTAiCisJCQkgICJceDVm XHg0M1x4ZTJceDMwXHgzNVx4MjlceDZjXHgxMCIKKwkJCSAgIlx4OTBceGYxXHhiZlx4NjFceGVk XHgwZlx4OGFceDkxIiwKKwkJLnB0ZXh0CT0gIlx4MDdceGFhXHgwMlx4MjZceGI0XHg5OFx4MTFc eDVlIgorCQkJICAiXHgzM1x4NDFceDIxXHg1MVx4NTFceDYzXHgyY1x4NzIiCisJCQkgICJceDAw XHhhYlx4MzJceGE3XHgxY1x4YzhceDNjXHg5YyIKKwkJCSAgIlx4MjVceDBlXHg4Ylx4OWFceGRm XHg4NVx4ZWRceDJkIgorCQkJICAiXHhmNFx4ZjJceGJjXHg1NVx4Y2FceDkyXHg2ZFx4MjIiCisJ CQkgICJceGZkXHgyMlx4M2JceDQyXHg0Y1x4MGJceDc0XHhlYyIsCisJCS5jdGV4dAk9ICJceDdi XHhiMVx4NDNceDZkXHhkOFx4NzJceDZjXHhmNiIKKwkJCSAgIlx4NjdceDZhXHgwMFx4YzRceGYx XHhmMFx4ZjVceGE0IgorCQkJICAiXHhmY1x4NjBceDkxXHhhYlx4NDZceDBiXHgxNVx4ZmMiCisJ CQkgICJceGQ3XHhjMVx4MjhceDE1XHhhMVx4ZmNceGY3XHg2OCIKKwkJCSAgIlx4OGVceGNjXHgy N1x4NjJceDAwXHg2NFx4NTZceDcyIgorCQkJICAiXHhhNlx4MTdceGQ3XHgzZlx4NjdceDgwXHgx MFx4NTgiLAorCQkua2xlbgk9IDMyLAorCQkubGVuCT0gNDgsCisJfSwKKwl7CisJCS5rZXkJPSAi XHg5M1x4MTRceDMwXHg5OFx4OTVceGRhXHhhZFx4ZWIiCisJCQkgICJceGI4XHgyMlx4YjVceDk4 XHg1N1x4N2NceGZhXHgxNCIKKwkJCSAgIlx4ODhceDhhXHg3MFx4NzZceDA5XHg3ZFx4MDNceGI3 IgorCQkJICAiXHhmOVx4MWRceDVkXHgzMFx4MWZceDI0XHhiMlx4Y2UiLAorCQkuaXYJPSAiXHg0 N1x4YjdceDA4XHhiOVx4YzFceGY1XHgxMlx4NTciCisJCQkgICJceDY4XHg0ZFx4NzRceDcxXHhj M1x4MGJceDA1XHhjNSIKKwkJCSAgIlx4OGRceDAwXHg0OFx4OWRceDNhXHhmY1x4ODVceDA1Igor CQkJICAiXHg0OVx4ODJceDk2XHg5NVx4MDlceDFhXHgxN1x4MjciLAorCQkucHRleHQJPSAiXHgz Zlx4ZjVceDJjXHgyNlx4NTNceDZjXHhkY1x4ODgiCisJCQkgICJceDVlXHhmM1x4MmVceDBkXHgy Mlx4ZTRceGVmXHg0ZSIKKwkJCSAgIlx4YWRceGFmXHhlNVx4ZjdceDVjXHhkM1x4ODRceDBlIgor CQkJICAiXHhlMVx4YmJceDE5XHgwYVx4Y2ZceDFlXHhiNlx4ZjMiCisJCQkgICJceDUzXHhmM1x4 MjVceGEyXHg2Nlx4N2FceGQyXHg5NyIKKwkJCSAgIlx4NThceDM5XHg3YVx4ZDZceDRiXHg3Zlx4 MzFceDc2IiwKKwkJLmN0ZXh0CT0gIlx4NzVceDE2XHhiMVx4OWFceGE5XHg5ZFx4MTJceDc4Igor CQkJICAiXHg1YVx4ZDFceDM2XHhjNVx4MTFceDRjXHgxYVx4YzUiCisJCQkgICJceDliXHgyMVx4 MTJceDBiXHhlZlx4MTNceGJjXHhkMCIKKwkJCSAgIlx4MzFceDAzXHhjY1x4ZDlceGY1XHg1OVx4 MjNceGI2IgorCQkJICAiXHg3MFx4YWZceGMyXHg4NFx4NTdceDVjXHhhZFx4YzciCisJCQkgICJc eDg5XHg2YVx4ZjRceDM5XHgxNFx4N2VceDBkXHgwZCIsCisJCS5rbGVuCT0gMzIsCisJCS5sZW4J PSA0OCwKKwl9LAorCXsKKwkJLmtleQk9ICJceDM2XHg0NVx4MTFceGEyXHg5OFx4NWZceDk2XHg3 YyIKKwkJCSAgIlx4YzZceGI0XHg5NFx4MzFceDBhXHg2N1x4MDlceDMyIgorCQkJICAiXHg2Y1x4 NmZceDZmXHgwMFx4ZjBceDE3XHhjYlx4YWMiCisJCQkgICJceGE1XHhhOVx4NDdceDllXHgyZVx4 ODVceDJmXHhmYSIsCisJCS5pdgk9ICJceDI4XHg4OFx4YWFceDliXHg1OVx4M2JceDFlXHg5NyIK KwkJCSAgIlx4ODJceGU1XHg1Y1x4OWVceDZkXHgxNFx4MTFceDE5IgorCQkJICAiXHg2ZVx4Mzhc eDhmXHhkNVx4NDBceDJiXHhjYVx4ZjkiCisJCQkgICJceDdiXHg0Y1x4ZTRceGEzXHhkMFx4ZDJc eDhhXHgxMyIsCisJCS5wdGV4dAk9ICJceDk1XHhkMlx4ZjdceDcxXHgxYlx4Y2FceGE1XHg4NiIK KwkJCSAgIlx4ZDlceDQ4XHgwMVx4OTNceDJmXHg3OVx4NTVceDI5IgorCQkJICAiXHg3MVx4MTNc eDE1XHgwZVx4ZTZceDEyXHhiY1x4NGQiCisJCQkgICJceDhhXHgzMVx4ZTNceDQwXHgyYVx4YzZc eDVlXHgwZCIKKwkJCSAgIlx4NjhceGJiXHg0YVx4NjJceDhkXHhjN1x4NDVceDc3IgorCQkJICAi XHhkMlx4YjhceGM3XHgxZFx4ZjFceGQyXHg1ZFx4OTciCisJCQkgICJceGNmXHhhY1x4NTJceGU1 XHgzMlx4NzdceGI2XHhkYSIKKwkJCSAgIlx4MzBceDg1XHhjZlx4MmJceDk4XHhlOVx4YWFceDM0 IgorCQkJICAiXHg2Mlx4YjVceDIzXHg5ZVx4YjdceGE2XHhkNFx4ZTAiCisJCQkgICJceGI0XHg1 OFx4MThceDhjXHg0ZFx4ZGVceDRkXHgwMSIKKwkJCSAgIlx4ODNceDg5XHgyNFx4Y2FceGZiXHgx MVx4ZDRceDgyIgorCQkJICAiXHgzMFx4N2FceDgxXHgzNVx4YTBceGI0XHhkNFx4YjYiCisJCQkg ICJceDg0XHhlYVx4NDdceDkxXHg4Y1x4MTlceDg2XHgyNSIKKwkJCSAgIlx4YTZceDA2XHg4ZFx4 NzhceGU2XHhlZFx4ODdceGViIgorCQkJICAiXHhkYVx4ZWFceDczXHg3Y1x4YmZceDY2XHhiOFx4 NzIiCisJCQkgICJceGUzXHgwYVx4YjhceDBjXHhjYlx4MWFceDczXHhmMSIKKwkJCSAgIlx4YTdc eGNhXHgwYVx4ZGVceDU3XHgyYlx4YmRceDJiIgorCQkJICAiXHhlYlx4OGJceDI0XHgzOFx4MjJc eGQzXHgwZVx4MWYiCisJCQkgICJceDE3XHhhMFx4ODRceDk4XHgzMVx4NzdceGZkXHgzNCIKKwkJ CSAgIlx4NmFceDRlXHgzZFx4ODRceDRjXHgwZVx4ZmJceGVkIgorCQkJICAiXHhjOFx4MmFceDUx XHhmYVx4ZDhceDczXHgyMVx4OGEiCisJCQkgICJceGRiXHhiNVx4ZmVceDFmXHhlZVx4YzRceGU4 XHg2NSIKKwkJCSAgIlx4NTRceDg0XHhkZFx4OTZceDZkXHhmZFx4ZDNceDMxIgorCQkJICAiXHg3 N1x4MzZceDUyXHg2Ylx4ODBceDRmXHg5ZVx4YjQiCisJCQkgICJceGEyXHg1NVx4YmZceDY2XHg0 MVx4NDlceDRlXHg4NyIKKwkJCSAgIlx4YTdceDBjXHhjYVx4ZTdceGE1XHhjNVx4ZjZceDZmIgor CQkJICAiXHgyN1x4NTZceGUyXHg0OFx4MjJceGRkXHg1Zlx4NTkiCisJCQkgICJceDNjXHhmMVx4 OWZceDgzXHhlNVx4MmRceGZiXHg3MSIKKwkJCSAgIlx4YWRceGQxXHhhZVx4MWJceDIwXHg1Y1x4 NDdceGI3IgorCQkJICAiXHgzYlx4ZDNceDE0XHhjZVx4ODFceDQyXHhiMVx4MGEiCisJCQkgICJc eGYwXHg0OVx4ZmFceGMyXHhlN1x4ODZceGJmXHhjZCIKKwkJCSAgIlx4YjBceDk1XHg5Zlx4OGZc eDc5XHg0MVx4NTQiLAorCQkuY3RleHQJPSAiXHhmNlx4NTdceDUxXHhjNFx4MjVceDYxXHgyZFx4 ZmEiCisJCQkgICJceGQ2XHhkOVx4M2ZceDlhXHg4MVx4NTFceGRkXHg4ZSIKKwkJCSAgIlx4M2Rc eGU3XHhhYVx4MmRceGIxXHhkYVx4YzhceGE2IgorCQkJICAiXHg5ZFx4YWFceDNjXHhhYlx4NjJc eGYyXHg4MFx4YzMiCisJCQkgICJceDJjXHhlN1x4NThceDcyXHgxZFx4NDRceGM1XHgyOCIKKwkJ CSAgIlx4N2ZceGI0XHhmOVx4YmNceDljXHhiMlx4YWJceDhlIgorCQkJICAiXHhmYVx4ZDFceDRk XHg3Mlx4ZDlceDc5XHhmNVx4YTAiCisJCQkgICJceDI0XHgzZVx4OTBceDI1XHgzMVx4MTRceDM4 XHg0NSIKKwkJCSAgIlx4NTlceGM4XHhmNlx4ZTJceGM2XHhmNlx4YzFceGE3IgorCQkJICAiXHhi Mlx4ZjhceGE3XHhhOVx4MmJceDZmXHgxMlx4M2EiCisJCQkgICJceGIwXHg4MVx4YTRceDA4XHg1 N1x4NTlceGIxXHg1NiIKKwkJCSAgIlx4NGNceDhmXHgxOFx4NTVceDMzXHg1Zlx4ZDZceDZhIgor CQkJICAiXHhjNlx4YTBceDRiXHhkNlx4NmJceDY0XHgzZVx4OWUiCisJCQkgICJceGZkXHg2Nlx4 MTZceGUyXHhkYlx4ZWJceDVmXHhiMyIKKwkJCSAgIlx4NTBceDUwXHgzZVx4ZGVceDhkXHg3Mlx4 NzZceDAxIgorCQkJICAiXHhiZVx4Y2NceGM5XHg1Mlx4MDlceDJkXHg4ZFx4ZTciCisJCQkgICJc eGQ2XHhjM1x4NjZceGRiXHgzNlx4MDhceGQxXHg3NyIKKwkJCSAgIlx4YzhceDczXHg0Nlx4MjZc eDI0XHgyOVx4YmZceDY4IgorCQkJICAiXHgyZFx4MmFceDk5XHg0M1x4NTZceDU1XHhlNFx4OTMi CisJCQkgICJceGFmXHhhZVx4NGRceGU3XHg1NVx4NGFceGMwXHg0NSIKKwkJCSAgIlx4MjZceGVi XHgzYlx4MTJceDkwXHg3Y1x4ZGNceGQxIgorCQkJICAiXHhkNVx4NmZceDBhXHhkMFx4YTlceGQ3 XHg0Ylx4ODkiCisJCQkgICJceDBiXHgwN1x4ZDhceDg2XHhhZFx4YTFceGM0XHg2OSIKKwkJCSAg Ilx4MWZceDVlXHg4Ylx4YzRceDllXHg5MVx4NDFceDI1IgorCQkJICAiXHg1Nlx4OThceDY5XHg3 OFx4M2FceDllXHhhZVx4OTEiCisJCQkgICJceGQ4XHhkOVx4ZmFceGZiXHhmZlx4ODFceDI1XHgw OSIKKwkJCSAgIlx4ZmNceGVkXHgyZFx4ODdceGJjXHgwNFx4NjJceDk3IgorCQkJICAiXHgzNVx4 ZTFceDI2XHhjMlx4NDZceDFjXHhjZlx4ZDciCisJCQkgICJceDE0XHhlZFx4MDJceDA5XHhhNVx4 YjJceGI2XHhhYSIKKwkJCSAgIlx4MjdceDRlXHg2MVx4YjNceDcxXHg2Ylx4NDdceDE2IgorCQkJ ICAiXHhiN1x4ZThceGQ0XHhhZlx4NTJceGViXHg2YVx4NmIiCisJCQkgICJceGRiXHg0Y1x4NjVc eDIxXHg5ZVx4MWNceDM2IiwKKwkJLmtsZW4JPSAzMiwKKwkJLmxlbgk9IDI1NSwKKwl9LAorCXsK KwkJLmtleQk9ICJceDU2XHgzM1x4MzdceDIxXHhjNFx4ZWFceDhiXHg4OCIKKwkJCSAgIlx4Njdc eDVlXHhlZVx4YjhceDBiXHg2Y1x4MDRceDQzIgorCQkJICAiXHgxN1x4YzVceDJiXHg4YVx4Mzdc eDE3XHg4Ylx4MzciCisJCQkgICJceDYwXHg1N1x4M2ZceGE3XHg4Mlx4Y2RceGI5XHgwOSIsCisJ CS5pdgk9ICJceDg4XHhlZVx4OWJceDM1XHgyMVx4MmRceDQxXHhhMSIKKwkJCSAgIlx4MTZceDBk XHg3Zlx4ZGZceDU3XHhjOVx4YjlceGMzIgorCQkJICAiXHhmNlx4MzBceDUzXHhiZlx4ODlceDQ2 XHhlNlx4ODciCisJCQkgICJceDYwXHhjOFx4NWVceDU5XHhkZFx4OGFceDdiXHhmZSIsCisJCS5w dGV4dAk9ICJceDQ5XHhlMlx4MGFceDRmXHg3YVx4NjBceDc1XHg5YiIKKwkJCSAgIlx4OTVceDk4 XHgyY1x4ZTdceDRmXHhiNFx4NThceGI5IgorCQkJICAiXHgyNFx4NTRceDQ2XHgzNFx4ZGZceDU4 XHgzMVx4ZTciCisJCQkgICJceDIzXHhjNlx4YTJceDYwXHg0YVx4ZDJceDU5XHhiNiIKKwkJCSAg Ilx4ZWJceDNlXHhjMlx4ZjhceGU1XHgxNFx4M2NceDZkIgorCQkJICAiXHg0Ylx4NzJceGNiXHg1 Zlx4Y2JceGE3XHg0N1x4YjkiCisJCQkgICJceDdhXHg0OVx4ZmNceGYxXHhhZFx4OTJceDc2XHg1 NSIKKwkJCSAgIlx4YWNceDU5XHhkY1x4M2FceGM2XHg4Ylx4N2NceGRiIgorCQkJICAiXHgwNlx4 Y2RceGVhXHg2YVx4MzRceDUxXHhiN1x4YjIiCisJCQkgICJceGU1XHgzOVx4M2NceDg3XHgwMFx4 OTBceGMyXHhiYiIKKwkJCSAgIlx4YjJceGE1XHgyY1x4NThceGMyXHg5Ylx4ZTNceDc3IgorCQkJ ICAiXHg5NVx4ODJceDUwXHhjYlx4MjNceGRjXHgxOFx4ZDgiCisJCQkgICJceDRlXHhiYlx4MTNc eDVkXHgzNVx4M2RceDlhXHhkYSIKKwkJCSAgIlx4ZTRceDc1XHhhMVx4NzVceDE3XHg1OVx4OGNc eDZhIgorCQkJICAiXHhiMlx4NzZceDdlXHhkNFx4NDVceDMxXHgwYVx4NDUiCisJCQkgICJceDJl XHg2MFx4ODNceDNkXHhkY1x4OGRceDQzXHgyMCIKKwkJCSAgIlx4NThceDI0XHhiMlx4OWRceGQ1 XHg1OVx4NjRceDMyIgorCQkJICAiXHg0ZVx4NmZceGI5XHg5Y1x4ZGVceDc3XHg0ZFx4NjUiCisJ CQkgICJceGRmXHhjMFx4N2FceGViXHg0MFx4ODBceGU4XHhlNSIKKwkJCSAgIlx4YzdceGMxXHg3 N1x4M2JceGFlXHgyYlx4ODVceGNlIgorCQkJICAiXHg1Nlx4ZmFceDQzXHg0MVx4OTZceDIzXHg4 ZVx4YWIiCisJCQkgICJceGQzXHhjOFx4NjVceGVmXHgwYlx4ZmVceDQyXHg0YyIKKwkJCSAgIlx4 M2FceDhhXHg1NFx4NTVceGFiXHhhM1x4ZjlceDYyIgorCQkJICAiXHg5Zlx4OGVceGJlXHgzM1x4 OWFceGZlXHg2Ylx4NTIiCisJCQkgICJceGQ0XHg0Y1x4OTNceDg0XHg3Y1x4N2VceGIxXHg1ZSIK KwkJCSAgIlx4MzJceGFmXHg2ZVx4MjFceDQ0XHhkMlx4NmJceDU2IgorCQkJICAiXHhjZFx4MmNc eDlkXHgwM1x4M2JceDUwXHgxZlx4MGEiCisJCQkgICJceGMzXHg5OFx4ZmZceDNhXHgxZFx4MzZc eDdlXHg2ZCIKKwkJCSAgIlx4Y2ZceGJjXHhlN1x4ZThceGZjXHgyNFx4NTVceGZkIgorCQkJICAi XHg3Mlx4M2RceGE3XHgzZlx4MDlceGE3XHgzOFx4ZTYiCisJCQkgICJceDU3XHg4ZFx4YzRceDc0 XHg3Zlx4ZDNceDI2XHg3NSIKKwkJCSAgIlx4ZGFceGZhXHgyOVx4MzVceGMxXHgzMVx4ODIiLAor CQkuY3RleHQJPSAiXHgwMlx4MjNceDc0XHgwMlx4NTZceGY0XHg3Ylx4YzgiCisJCQkgICJceDU1 XHg2MVx4YTBceDZiXHg2OFx4ZmZceGRlXHg4NyIKKwkJCSAgIlx4OWRceDY2XHg3N1x4ODZceDk4 XHg2M1x4YWJceGQ1IgorCQkJICAiXHhkNlx4ZjRceDdlXHgzYlx4ZjRceGFlXHg5N1x4MTMiCisJ CQkgICJceDc5XHhjMFx4OTZceDc1XHg4N1x4MzNceDJhXHgwZSIKKwkJCSAgIlx4YzJceDFhXHgx M1x4OTBceDVmXHg2ZVx4OTNceGVkIgorCQkJICAiXHg1NFx4ZmVceGVlXHgwNVx4NDhceGFlXHgy MFx4MmQiCisJCQkgICJceGE5XHgyYlx4OThceGEzXHhjOFx4YWZceDE3XHg2YiIKKwkJCSAgIlx4 ODJceDRhXHg5YVx4N2ZceGYwXHhjZVx4ZDlceDI2IgorCQkJICAiXHgxNlx4MjhceGViXHhmNFx4 NGJceGFiXHg3ZFx4NmUiCisJCQkgICJceDk2XHgyN1x4ZDJceDkwXHhiYlx4OGRceDk4XHhkYyIK KwkJCSAgIlx4YjhceDZmXHg3YVx4OThceDY3XHhlZlx4MWNceGZiIgorCQkJICAiXHhkMFx4MjNc eDFhXHgyZlx4YzlceDU4XHg0ZVx4YzYiCisJCQkgICJceDM4XHgwM1x4NTNceDYxXHg4ZVx4ZmZc eDU1XHg0NiIKKwkJCSAgIlx4NDdceGU4XHgxZlx4OWRceDY2XHg5NVx4OWJceDdmIgorCQkJICAi XHgyNlx4YWNceGYyXHg2MVx4YTRceDA1XHgxNVx4Y2IiCisJCQkgICJceDYyXHhiNlx4NmJceDdj XHg1N1x4OTVceDlkXHgyNSIKKwkJCSAgIlx4OWVceDgzXHhiMVx4ODhceDUwXHgzOVx4YjVceDM0 IgorCQkJICAiXHg4YVx4MDRceDJiXHg3Nlx4MWJceGI4XHg4Y1x4NTciCisJCQkgICJceDI2XHgy MVx4OTlceDJlXHg5M1x4YzhceDliXHhiMiIKKwkJCSAgIlx4MzFceGUxXHhlM1x4MjdceGRlXHhj OFx4ZjJceGM1IgorCQkJICAiXHgwMVx4N2FceDQ1XHgzOFx4NmZceGU3XHhhMFx4OWQiCisJCQkg ICJceDhjXHg0MVx4OTlceGVjXHgzZFx4YjZceGFmXHg2NiIKKwkJCSAgIlx4NzZceGFjXHhjOFx4 NzhceGIwXHhkZlx4Y2ZceGNlIgorCQkJICAiXHhhMVx4MjlceDQ2XHg2Zlx4ZTNceDM1XHg0YVx4 NjciCisJCQkgICJceDU5XHgyN1x4MTRceGNjXHgwNFx4ZGJceGIzXHgwMyIKKwkJCSAgIlx4Yjdc eDJkXHg4ZFx4ZjlceDc1XHg5ZVx4NTlceDQyIgorCQkJICAiXHhlM1x4YTRceGY4XHhmNFx4ODJc eDI3XHhhM1x4YTkiCisJCQkgICJceDc5XHhhY1x4NmJceDhhXHhkOFx4ZGJceDI5XHg3MyIKKwkJ CSAgIlx4MDJceGJiXHg2Zlx4ODVceDAwXHg5Mlx4ZWFceDU5IgorCQkJICAiXHgzMFx4MWJceDE5 XHhmM1x4YWJceDZlXHg5OVx4OWEiCisJCQkgICJceGYyXHgyM1x4MjdceGM2XHg1OVx4NWFceDlj IiwKKwkJLmtsZW4JPSAzMiwKKwkJLmxlbgk9IDI1NSwKKwl9LAorCit9OworCiAjZW5kaWYJLyog X0NSWVBUT19URVNUTUdSX0ggKi8KLS0gCjIuMzUuMC5yYzAuMjI3LmcwMDc4MGM5YWY0LWdvb2cK CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1h cm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5v cmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0t a2VybmVsCg==